{
  "version": 3,
  "sources": ["../../src/AbstractArchivist.ts", "../../src/StorageClassLabel.ts"],
  "sourcesContent": ["/* eslint-disable max-lines */\nimport type {\n  Attributes, Gauge, Meter,\n} from '@opentelemetry/api'\nimport type {\n  Hash, Promisable, PromisableArray,\n} from '@xylabs/sdk-js'\nimport {\n  assertEx,\n  difference,\n  exists, globallyUnique,\n  isNull, isUndefined,\n} from '@xylabs/sdk-js'\nimport type {\n  ArchivistAllQuery,\n  ArchivistClearQuery,\n  ArchivistCommitQuery,\n  ArchivistDeleteQuery,\n  ArchivistGetQuery,\n  ArchivistInsertQuery,\n  ArchivistInstance,\n  ArchivistModuleEventData,\n  ArchivistNextOptions,\n  ArchivistNextQuery,\n  ArchivistParams,\n  ArchivistQueries,\n  ArchivistSnapshotPayload,\n  ArchivistSnapshotQuery,\n  ArchivistStatsPayload,\n  AttachableArchivistInstance,\n  ReadArchivist,\n} from '@xyo-network/archivist-model'\nimport {\n  ArchivistAllQuerySchema,\n  ArchivistClearQuerySchema,\n  ArchivistCommitQuerySchema,\n  ArchivistConfigSchema,\n  ArchivistDeleteQuerySchema,\n  ArchivistGetQuerySchema,\n  ArchivistInsertQuerySchema,\n  ArchivistNextQuerySchema,\n  ArchivistSnapshotQuerySchema,\n  ArchivistStatsPayloadSchema,\n  asArchivistInstance,\n  isArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport type {\n  ModuleConfig, ModuleIdentifier, ModuleQueryHandlerResult, ModuleQueryResult,\n} from '@xyo-network/module-model'\nimport { duplicateModules } from '@xyo-network/module-model'\nimport type {\n  AccountInstance, BoundWitness, Payload, QueryBoundWitness,\n  Schema, WithStorageMeta, XyoAddress,\n} from '@xyo-network/sdk-protocol-js'\nimport { PayloadBuilder, QueryBoundWitnessWrapper } from '@xyo-network/sdk-protocol-js'\nimport { LRUCache } from 'lru-cache'\n\nimport { StorageClassLabel } from './StorageClassLabel.ts'\n\nconst NOT_IMPLEMENTED = 'Not implemented' as const\n\nexport interface ActionConfig {\n  emitEvents?: boolean\n}\n\nexport interface InsertConfig extends ActionConfig {\n  writeToParents?: boolean\n}\n\ninterface ArchivistParentInstanceMap {\n  commit?: Partial<Record<ModuleIdentifier, ArchivistInstance>>\n  read?: Partial<Record<ModuleIdentifier, ArchivistInstance>>\n  write?: Partial<Record<ModuleIdentifier, ArchivistInstance>>\n}\n\nexport abstract class AbstractArchivist<\n  TParams extends ArchivistParams = ArchivistParams,\n  TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n>\n  extends AbstractModuleInstance<TParams, TEventData>\n  implements AttachableArchivistInstance<TParams, TEventData, Payload> {\n  static override readonly configSchemas: Schema[] = [...super.configSchemas, ArchivistConfigSchema]\n  static override readonly defaultConfigSchema: Schema = ArchivistConfigSchema\n  static override readonly labels: {\n    'network.xyo.storage.class': string\n  } = { ...super.labels, [StorageClassLabel]: 'unknown' }\n\n  static override readonly uniqueName: string = globallyUnique('AbstractArchivist', AbstractArchivist, 'xyo')\n\n  // override this if a specialized archivist should have a different default next limit\n  protected static defaultNextLimitSetting = 100\n\n  private _getCache?: LRUCache<Hash, WithStorageMeta<Payload>>\n  private _parentArchivists?: ArchivistParentInstanceMap\n  private _payloadCountGauge?: Gauge | null\n  private _payloadCountMeter?: Meter | null\n\n  // do not override this!  It is meant to get the this.defaultNextLimitSetting and work if it is overridden\n  static get defaultNextLimit(): number {\n    return this.defaultNextLimitSetting\n  }\n\n  override get queries(): Schema[] {\n    return [ArchivistGetQuerySchema, ...super.queries]\n  }\n\n  get requireAllParents(): boolean {\n    return this.config.requireAllParents ?? false\n  }\n\n  protected get payloadCountGauge(): Gauge<Attributes> | null | undefined {\n    const meter = this.payloadCountMeter\n    if (!isNull(meter)) {\n      this._payloadCountGauge = meter?.createGauge('payloadCount', { description: 'Payloads in the archivist' })\n    }\n    return this._payloadCountGauge\n  }\n\n  protected get payloadCountMeter(): Meter | null {\n    if (isUndefined(this._payloadCountMeter)) {\n      this._payloadCountMeter = this.params?.meterProvider?.getMeter(this.id) ?? null\n    }\n    return this._payloadCountMeter ?? null\n  }\n\n  protected get storeParentReads(): boolean {\n    return !!this.config?.storeParentReads\n  }\n\n  /** @deprecated use next or snapshot instead */\n  async all(): Promise<WithStorageMeta<Payload>[]> {\n    this._noOverride('all')\n    this.isSupportedQuery(ArchivistAllQuerySchema, 'all')\n    return await this.spanAsync(`${this.id}|all`, async () => {\n      if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked()) {\n        return []\n      }\n      try {\n        await this.globalReentrancyMutex?.acquire()\n        return await this.busy(async () => {\n          await this.startedAsync('throw')\n          return PayloadBuilder.omitPrivateStorageMeta(await this.allHandler()) as WithStorageMeta<Payload>[]\n        })\n      } finally {\n        this.globalReentrancyMutex?.release()\n      }\n    }, { timeBudgetLimit: this.timeBudget })\n  }\n\n  /** deprecated use nextQuery or snapshotQuery instead */\n  async allQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n    this._noOverride('allQuery')\n    const queryPayload: ArchivistAllQuery = { schema: ArchivistAllQuerySchema }\n    return await this.sendQueryRaw(queryPayload, undefined, account)\n  }\n\n  async clear(): Promise<void> {\n    this._noOverride('clear')\n    this.isSupportedQuery(ArchivistClearQuerySchema, 'clear')\n    return await this.spanAsync(`${this.id}|clear`, async () => {\n      if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked()) {\n        return\n      }\n      try {\n        await this.globalReentrancyMutex?.acquire()\n        return await this.busy(async () => {\n          await this.startedAsync('throw')\n          await this.clearHandler()\n          this.reportPayloadCount()\n          await this.emit('cleared', { mod: this })\n        })\n      } finally {\n        this.globalReentrancyMutex?.release()\n      }\n    }, { timeBudgetLimit: this.timeBudget })\n  }\n\n  async clearQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n    this._noOverride('clearQuery')\n    const queryPayload: ArchivistClearQuery = { schema: ArchivistClearQuerySchema }\n    return await this.sendQueryRaw(queryPayload, undefined, account)\n  }\n\n  async commit(): Promise<BoundWitness[]> {\n    this._noOverride('commit')\n    this.isSupportedQuery(ArchivistCommitQuerySchema, 'commit')\n    return await this.spanAsync(`${this.id}commit`, async () => {\n      if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked()) {\n        return []\n      }\n      try {\n        await this.globalReentrancyMutex?.acquire()\n        return await this.busy(async () => {\n          await this.startedAsync('throw')\n          return await this.commitHandler()\n        })\n      } finally {\n        this.globalReentrancyMutex?.release()\n      }\n    }, { timeBudgetLimit: this.timeBudget })\n  }\n\n  async commitQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n    this._noOverride('commitQuery')\n    const queryPayload: ArchivistCommitQuery = { schema: ArchivistCommitQuerySchema }\n    return await this.sendQueryRaw(queryPayload, undefined, account)\n  }\n\n  async delete(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n    this._noOverride('delete')\n    this.isSupportedQuery(ArchivistDeleteQuerySchema, 'delete')\n    return await this.spanAsync(`${this.id}|delete`, async () => {\n      if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked()) {\n        return []\n      }\n      try {\n        await this.globalReentrancyMutex?.acquire()\n        return await this.busy(async () => {\n          await this.startedAsync('throw')\n          return await this.deleteWithConfig(hashes)\n        })\n      } finally {\n        this.globalReentrancyMutex?.release()\n      }\n    }, { timeBudgetLimit: this.timeBudget })\n  }\n\n  async deleteQuery(hashes: Hash[], account?: AccountInstance): Promise<ModuleQueryResult> {\n    this._noOverride('deleteQuery')\n    const queryPayload: ArchivistDeleteQuery = { hashes, schema: ArchivistDeleteQuerySchema }\n    return await this.sendQueryRaw(queryPayload, undefined, account)\n  }\n\n  async get(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n    this._noOverride('get')\n    this.isSupportedQuery(ArchivistGetQuerySchema, 'get')\n    return await this.spanAsync(`${this.id}|get`, async () => {\n      if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked()) {\n        return []\n      }\n      try {\n        await this.globalReentrancyMutex?.acquire()\n        return await this.busy(async () => {\n          await this.startedAsync('throw')\n          return await this.getWithConfig(hashes)\n        })\n      } finally {\n        this.globalReentrancyMutex?.release()\n      }\n    }, { timeBudgetLimit: this.timeBudget })\n  }\n\n  async getQuery(hashes: Hash[], account?: AccountInstance): Promise<ModuleQueryResult> {\n    this._noOverride('getQuery')\n    const queryPayload: ArchivistGetQuery = { hashes, schema: ArchivistGetQuerySchema }\n    return await this.sendQueryRaw(queryPayload, undefined, account)\n  }\n\n  async insert(payloads: Payload[]): Promise<WithStorageMeta<Payload>[]> {\n    this._noOverride('insert')\n    this.isSupportedQuery(ArchivistInsertQuerySchema, 'insert')\n    return await this.spanAsync(`${this.id}|insert`, async () => {\n      if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked()) {\n        return []\n      }\n      try {\n        await this.globalReentrancyMutex?.acquire()\n        return await this.busy(async () => {\n          await this.startedAsync('throw')\n          return await this.insertWithConfig(PayloadBuilder.omitStorageMeta(payloads))\n        })\n      } finally {\n        this.globalReentrancyMutex?.release()\n      }\n    }, { timeBudgetLimit: this.timeBudget })\n  }\n\n  async insertQuery(payloads: Payload[], account?: AccountInstance): Promise<ModuleQueryResult> {\n    this._noOverride('insertQuery')\n    const queryPayload: ArchivistInsertQuery = { schema: ArchivistInsertQuerySchema }\n    return await this.sendQueryRaw(queryPayload, payloads, account)\n  }\n\n  async next(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]> {\n    this._noOverride('next')\n    this.isSupportedQuery(ArchivistNextQuerySchema, 'next')\n    return await this.spanAsync(`${this.id}|next`, async () => {\n      if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked()) {\n        return []\n      }\n      try {\n        await this.globalReentrancyMutex?.acquire()\n        return await this.busy(async () => {\n          await this.startedAsync('throw')\n          const { limit = AbstractArchivist.defaultNextLimit, ...otherOptions } = options ?? {}\n          return await this.nextWithConfig({ limit, ...otherOptions })\n        })\n      } finally {\n        this.globalReentrancyMutex?.release()\n      }\n    }, { timeBudgetLimit: this.timeBudget })\n  }\n\n  async nextQuery(options?: ArchivistNextOptions, account?: AccountInstance): Promise<ModuleQueryResult> {\n    this._noOverride('nextQuery')\n    const queryPayload: ArchivistNextQuery = { schema: ArchivistNextQuerySchema, ...options }\n    return await this.sendQueryRaw(queryPayload, undefined, account)\n  }\n\n  async snapshot(): Promise<ArchivistSnapshotPayload<WithStorageMeta<Payload>, Hash>[]> {\n    this._noOverride('snapshot')\n    this.isSupportedQuery(ArchivistSnapshotQuerySchema, 'snapshot')\n    return await this.spanAsync(`${this.id}|snapshot`, async () => {\n      if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked()) {\n        throw new Error('Cannot take snapshot while in a global reentrancy lock')\n      }\n      try {\n        await this.globalReentrancyMutex?.acquire()\n        return await this.busy(async () => {\n          await this.startedAsync('throw')\n          return await this.snapshotHandler()\n        })\n      } finally {\n        this.globalReentrancyMutex?.release()\n      }\n    }, { timeBudgetLimit: this.timeBudget })\n  }\n\n  async snapshotQuery(account?: AccountInstance): Promise<ModuleQueryResult> {\n    this._noOverride('snapshotQuery')\n    const queryPayload: ArchivistSnapshotQuery = { schema: ArchivistSnapshotQuerySchema }\n    return await this.sendQueryRaw(queryPayload, undefined, account)\n  }\n\n  protected allHandler(): PromisableArray<WithStorageMeta<Payload>> {\n    throw new Error(NOT_IMPLEMENTED)\n  }\n\n  protected clearHandler(): Promisable<void> {\n    throw new Error(NOT_IMPLEMENTED)\n  }\n\n  protected commitHandler(): Promisable<BoundWitness[]> {\n    throw new Error(NOT_IMPLEMENTED)\n  }\n\n  protected deleteHandler(_hashes: Hash[]): PromisableArray<WithStorageMeta<Payload>> {\n    throw new Error(NOT_IMPLEMENTED)\n  }\n\n  protected async deleteWithConfig(hashes: Hash[], config?: ActionConfig): Promise<WithStorageMeta<Payload>[]> {\n    const emitEvents = config?.emitEvents ?? true\n\n    const payloads = await this.deleteHandler(hashes)\n    const hashesDeleted = payloads.map(p => p._hash)\n\n    if (emitEvents) {\n      await this.emit('deleted', {\n        hashes: hashesDeleted, payloads, mod: this,\n      })\n    }\n    this.reportPayloadCount()\n    return payloads\n  }\n\n  protected generateStats(): Promisable<ArchivistStatsPayload> {\n    return {\n      payloadCount: this.payloadCountHandler(),\n      schema: ArchivistStatsPayloadSchema,\n    }\n  }\n\n  protected async getFromParent(hashes: Hash[], archivist: ReadArchivist): Promise<[WithStorageMeta<Payload>[], Hash[]]> {\n    const foundPairs = (await PayloadBuilder.dataHashPairs(await archivist.get(hashes))).filter(([, hash]) => {\n      const askedFor = hashes.includes(hash)\n      if (!askedFor) {\n        console.warn(`Parent returned payload with hash not asked for: ${hash}`)\n        // throw Error(`Parent returned payload with hash not asked for: ${hash}`)\n      }\n      return askedFor\n    })\n\n    const foundHashes = new Set(foundPairs.map(([, hash]) => hash))\n    const foundPayloads = foundPairs.map(([payload]) => payload)\n\n    const notfound = hashes.filter(hash => !foundHashes.has(hash))\n    return [foundPayloads, notfound]\n  }\n\n  protected async getFromParents(hashes: Hash[]): Promise<[WithStorageMeta<Payload>[], Hash[]]> {\n    const parents = Object.values((await this.parentArchivists())?.read ?? {})\n    let remainingHashes = [...hashes]\n    let parentIndex = 0\n    let result: WithStorageMeta<Payload>[] = []\n\n    // Intentionally doing this serially\n    while (parentIndex < parents.length && remainingHashes.length > 0) {\n      const parent = parents[parentIndex]\n      if (parent) {\n        const [found, notfound] = await this.getFromParent(remainingHashes, parent)\n        result = [...result, ...found]\n        remainingHashes = notfound\n      }\n      parentIndex++\n    }\n    return [result, remainingHashes]\n  }\n\n  protected getHandler(_hashes: Hash[]): Promisable<WithStorageMeta<Payload>[]> {\n    throw new Error(NOT_IMPLEMENTED)\n  }\n\n  // eslint-disable-next-line max-statements\n  protected async getWithConfig(hashes: Hash[], _config?: InsertConfig): Promise<WithStorageMeta<Payload>[]> {\n    // Filter out duplicates\n    const requestedHashes = new Set(hashes)\n\n    // read from cache if we are caching\n    const cache = this._getCache\n    let fromCache: WithStorageMeta<Payload>[] = []\n    let remainingHashes = [...requestedHashes]\n    if (cache !== undefined) {\n      fromCache = hashes.map(hash => cache.get(hash)).filter(exists)\n      remainingHashes = hashes.filter(hash => !fromCache.some(payload => payload?._hash === hash || payload?._dataHash === hash))\n    }\n\n    // Attempt to find the payloads in the store\n    const fromGet = await this.getHandler([...remainingHashes])\n    const gotten = [...fromCache, ...fromGet].toSorted(PayloadBuilder.compareStorageMeta)\n\n    // Do not just blindly return what the archivist told us but\n    // ensure to only return requested payloads and keep track of\n    // the ones it did not find so we can ask the parents.\n    const foundPayloads: WithStorageMeta<Payload>[] = []\n    const foundHashes = new Set<Hash>()\n\n    //  We are iterating over the returned result from the archivist\n    // (not the array of hashes passed in) to preserve the natural order of the\n    // hashes as returned by the archivist as that should loosely\n    // correspond to the order when iterated and the symmetry will\n    // be helpful for debugging\n    for (const payload of gotten) {\n      // trusting the hashes from the cache and parent\n      const map: Record<Hash, WithStorageMeta<Payload>> = {\n        [payload._hash]: payload,\n        [payload._dataHash]: payload,\n      }\n      // Compute the hashes for this payload\n      // const map = await PayloadBuilder.toAllHashMap([payload])\n      for (const [key, payload] of Object.entries(map)) {\n        let requestedPayloadFound = false\n        const hash = key as Hash // Required cast as Object.entries always returns string keys\n        // If this hash was requested\n        if (\n          requestedHashes.has(hash) // Indicate that we found it (but do not insert it yet). Since\n          // one payload could satisfy two requested hashes (vit its dataHash\n          // & rootHash) we only want to insert that payload once but we want\n          // to keep track of all the hashes it satisfies so we can ask th\n          // parents for the ones we did not find\n          && !foundHashes.has(hash)\n        ) {\n          requestedPayloadFound = true\n          // Add it to the list of found hashes\n          foundHashes.add(hash)\n        }\n        if (requestedPayloadFound) foundPayloads.push(payload)\n      }\n    }\n    // For all the hashes we did not find, ask the parents\n    const notFoundHashes = [...difference(requestedHashes, foundHashes)]\n    const [parentFoundPayloads] = await this.getFromParents(notFoundHashes)\n\n    if (this.storeParentReads) {\n      await this.insertWithConfig(parentFoundPayloads)\n    }\n    const result = this.omitClientMetaForDataHashes(\n      hashes,\n      (PayloadBuilder.omitPrivateStorageMeta([\n        ...foundPayloads,\n        ...parentFoundPayloads,\n      ]) as WithStorageMeta<Payload>[]).toSorted(PayloadBuilder.compareStorageMeta),\n    )\n\n    // write to cache if we are caching\n    if (cache !== undefined) {\n      for (const payload of fromGet) {\n        cache.set(payload._hash, payload)\n        cache.set(payload._dataHash, payload)\n      }\n      for (const payload of parentFoundPayloads) {\n        cache.set(payload._hash, payload)\n        cache.set(payload._dataHash, payload)\n      }\n    }\n\n    return result\n  }\n\n  protected insertHandler(_payloads: WithStorageMeta<Payload>[]): Promisable<WithStorageMeta<Payload>[]> {\n    throw new Error(NOT_IMPLEMENTED)\n  }\n\n  protected async insertQueryHandler<T extends QueryBoundWitnessWrapper = QueryBoundWitnessWrapper>(query: T, payloads?: Payload[]): Promise<WithStorageMeta<Payload>[]> {\n    assertEx(payloads, () => `Missing payloads: ${JSON.stringify(query.payload, null, 2)}`)\n    const resolvedPayloads = await PayloadBuilder.filterIncludeByEitherHash(payloads, query.payloadHashes)\n    assertEx(\n      resolvedPayloads.length === query.payloadHashes.length,\n      () => `Could not find some passed hashes [${resolvedPayloads.length} != ${query.payloadHashes.length}]`,\n    )\n    const queryPayload = await query.getQuery()\n    const payloadsWithoutQuery = await PayloadBuilder.filterExclude(resolvedPayloads, await PayloadBuilder.dataHash(queryPayload))\n    const result = await this.insertWithConfig(payloadsWithoutQuery)\n    return result\n  }\n\n  protected async insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<WithStorageMeta<Payload>[]> {\n    const emitEvents = config?.emitEvents ?? true\n    const writeToParents = config?.writeToParents ?? true\n\n    // remove the existing payloads\n    const withStorageMeta = await PayloadBuilder.addStorageMeta(payloads)\n    const hashes = withStorageMeta.map(p => p._hash)\n    const existingPayloads = await this.getWithConfig(hashes)\n    const existingHashes = new Set(existingPayloads.map(p => p._hash))\n    const payloadsToInsert = withStorageMeta.filter(p => !existingHashes.has(p._hash))\n\n    const insertedPayloads = await this.insertHandler(payloadsToInsert)\n\n    if (writeToParents) {\n      await this.writeToParents(insertedPayloads)\n    }\n    if (emitEvents) {\n      await this.emit('inserted', {\n        mod: this, payloads: insertedPayloads, outPayloads: insertedPayloads, inPayloads: payloads,\n      })\n    }\n    this.reportPayloadCount()\n    return PayloadBuilder.omitPrivateStorageMeta(insertedPayloads) as WithStorageMeta<Payload>[]\n  }\n\n  protected nextHandler(_options?: ArchivistNextOptions): Promisable<WithStorageMeta<Payload>[]> {\n    throw new Error(NOT_IMPLEMENTED)\n  }\n\n  protected async nextWithConfig(options?: ArchivistNextOptions, _config?: InsertConfig): Promise<WithStorageMeta<Payload>[]> {\n    const foundPayloads = await this.nextHandler(options)\n    return PayloadBuilder.omitPrivateStorageMeta(foundPayloads) as WithStorageMeta<Payload>[]\n  }\n\n  protected async parentArchivists(): Promise<ArchivistParentInstanceMap> {\n    this._parentArchivists = this._parentArchivists ?? {\n      commit: { ...await this.resolveArchivists(this.config?.parents?.commit, this.params.parents?.commit) },\n      read: { ...await this.resolveArchivists(this.config?.parents?.read) },\n      write: { ...await this.resolveArchivists(this.config?.parents?.write) },\n    }\n    return assertEx(this._parentArchivists)\n  }\n\n  // the number of payloads in the archivist, -1 if not implemented\n  // the implementations of these must be fast, so they may not be promises and should read an auto updated value\n  protected payloadCountHandler() {\n    return -1\n  }\n\n  // eslint-disable-next-line max-statements\n  protected override async queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(\n    query: T,\n    payloads: Payload[],\n    queryConfig?: TConfig,\n  ): Promise<ModuleQueryHandlerResult> {\n    const sanitizedQuery = PayloadBuilder.omitStorageMeta(query) as T\n    const sanitizedPayloads = PayloadBuilder.omitStorageMeta(payloads) as Payload[]\n    const wrappedQuery = QueryBoundWitnessWrapper.parseQuery<ArchivistQueries>(sanitizedQuery, sanitizedPayloads)\n    const queryPayload = await wrappedQuery.getQuery()\n    assertEx(await this.queryable(sanitizedQuery, sanitizedPayloads, queryConfig))\n    const resultPayloads: Payload[] = []\n\n    switch (queryPayload.schema) {\n      case ArchivistAllQuerySchema: {\n        resultPayloads.push(...(await this.allHandler()))\n        break\n      }\n      case ArchivistClearQuerySchema: {\n        await this.clearHandler()\n        break\n      }\n      case ArchivistCommitQuerySchema: {\n        resultPayloads.push(...(await this.commitHandler()))\n        break\n      }\n      case ArchivistDeleteQuerySchema: {\n        const typedQueryPayload = queryPayload as ArchivistDeleteQuery\n        resultPayloads.push(...(await this.deleteWithConfig(typedQueryPayload.hashes)))\n        break\n      }\n      case ArchivistGetQuerySchema: {\n        const typedQueryPayload = queryPayload as ArchivistGetQuery\n        resultPayloads.push(...(await this.getWithConfig(typedQueryPayload.hashes ?? [])))\n        break\n      }\n      case ArchivistInsertQuerySchema: {\n        resultPayloads.push(...(await this.insertQueryHandler(wrappedQuery, sanitizedPayloads)))\n        break\n      }\n      case ArchivistNextQuerySchema: {\n        const typedQueryPayload = queryPayload as ArchivistNextQuery\n        resultPayloads.push(...(await this.nextHandler(typedQueryPayload)))\n        break\n      }\n      case ArchivistSnapshotQuerySchema: {\n        resultPayloads.push(...(await this.snapshotHandler()))\n        break\n      }\n      default: {\n        const result = await super.queryHandler(sanitizedQuery, sanitizedPayloads)\n        if (this.config.storeQueries) {\n          await this.insertWithConfig([sanitizedQuery])\n        }\n        return PayloadBuilder.omitPrivateStorageMeta(result)\n      }\n    }\n    if (this.config.storeQueries) {\n      await this.insertWithConfig([sanitizedQuery])\n    }\n    return PayloadBuilder.omitPrivateStorageMeta(resultPayloads)\n  }\n\n  protected reportPayloadCount(): void {\n    this._noOverride('reportPayloadCount')\n    const gauge = this.payloadCountGauge\n    if (gauge) {\n      gauge.record(this.payloadCountHandler())\n    }\n  }\n\n  protected snapshotHandler(): PromisableArray<ArchivistSnapshotPayload<WithStorageMeta<Payload>, Hash>> {\n    throw new Error(NOT_IMPLEMENTED)\n  }\n\n  protected override async startHandler(): Promise<void> {\n    if (this.config.getCache?.enabled === true) {\n      this._getCache = new LRUCache({\n        max: this.config.getCache?.maxEntries ?? 10_000,\n        allowStale: true,\n        noDisposeOnSet: false,\n        updateAgeOnGet: true,\n      })\n    }\n    const result = await super.startHandler()\n    this.reportPayloadCount()\n    return result\n  }\n\n  protected override async stateHandler(): Promise<Payload[]> {\n    return [...await super.stateHandler(), await this.generateStats()]\n  }\n\n  protected async writeToParent(parent: ArchivistInstance, payloads: Payload[]): Promise<Payload[]> {\n    return await parent.insert(PayloadBuilder.omitStorageMeta(payloads))\n  }\n\n  protected async writeToParents(payloads: Payload[]): Promise<Payload[]> {\n    const parents = await this.parentArchivists()\n    return (\n      await Promise.all(\n        Object.values(parents.write ?? {}).map(async (parent) => {\n          return parent ? await this.writeToParent(parent, payloads) : undefined\n        }),\n      )\n    ).filter(exists).flat()\n  }\n\n  private omitClientMetaForDataHashes<T extends Payload>(hashes: Hash[], payloads: WithStorageMeta<T>[]): WithStorageMeta<T>[] {\n    return payloads.map((payload) => {\n      // if retrieved by dataHash and not hash (both could have been specified)\n      if (hashes.includes(payload._dataHash) && !hashes.includes(payload._hash)) {\n        // scrub client meta\n        const result = PayloadBuilder.omitClientMeta(payload) as WithStorageMeta<T>\n        // we also scrub the _hash\n        result._hash = result._dataHash\n        return result\n      } else {\n        return payload\n      }\n    })\n  }\n\n  private async resolveArchivists(archivists: ModuleIdentifier[] = [], archivistInstances?: ArchivistInstance[]) {\n    const archivistModules = (await Promise.all(archivists.map(archivist => this.resolve(archivist)))).filter(exists).filter(duplicateModules)\n\n    assertEx(\n      !this.requireAllParents || (archivistModules.length === archivists.length),\n      () =>\n        `Failed to find some archivists for ${this.modName} (set allRequired to false if ok)]`,\n    )\n\n    const archivistInstancesMap: Record<XyoAddress, ArchivistInstance> = {}\n    for (const archivistInstance of archivistInstances ?? []) {\n      archivistInstancesMap[archivistInstance.address] = archivistInstance\n    }\n\n    // eslint-disable-next-line unicorn/no-array-reduce\n    return archivistModules.reduce<Record<XyoAddress, ArchivistInstance>>((prev, mod) => {\n      prev[mod.address] = asArchivistInstance(mod, () => {\n        isArchivistInstance(mod, { log: console })\n        return `Unable to cast resolved module to an archivist: [${mod.address}, ${mod.modName}, ${mod.config.schema})}]`\n      }, { required: true })\n\n      return prev\n    }, archivistInstancesMap)\n  }\n}\n", "export const StorageClassLabel = 'network.xyo.storage.class'\nexport type StorageClassLabelValue = 'memory' | 'disk' | 'network' | 'proxy' | 'unknown'\n"],
  "mappings": "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",
  "names": ["payload"]
}
