{
  "version": 3,
  "sources": ["../../src/modules/archivist-abstract/AbstractArchivist.ts", "../../src/modules/archivist-abstract/StorageClassLabel.ts", "../../src/modules/archivist-abstract/payloadAdmission.ts"],
  "sourcesContent": ["/* eslint-disable max-lines */\nimport type {\n  Hash, Promisable, PromisableArray,\n} from '@ariestools/sdk'\nimport {\n  assertEx,\n  exists,\n  isNull, isUndefined,\n} from '@ariestools/sdk'\nimport type {\n  Attributes, Gauge, Meter,\n} from '@opentelemetry/api'\nimport type {\n  AccountInstance, BoundWitness, Payload, QueryBoundWitness,\n  Schema, WithStorageMeta, XyoAddress,\n} from '@xyo-network/sdk-protocol'\nimport { PayloadBuilder, QueryBoundWitnessWrapper } from '@xyo-network/sdk-protocol'\nimport { LRUCache } from 'lru-cache'\n\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 '#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 '#archivist-model'\nimport { AbstractModuleInstance } from '#module-abstract'\nimport type {\n  ModuleConfig, ModuleIdentifier, ModuleQueryHandlerResult, ModuleQueryResult,\n} from '#module-model'\nimport { duplicateModules } from '#module-model'\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  // 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  private activeCacheMutations = 0\n  private cacheGeneration = 0\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.clearWithConfig()\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    const snapshot = this.snapshotPayloads(payloads)\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(snapshot)\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, this.snapshotPayloads(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 async clearWithConfig(config?: ActionConfig): Promise<void> {\n    await this.withCacheMutation(async () => {\n      await this.withStorageMutation(async () => await this.clearHandler())\n      this.reportPayloadCount()\n      if (config?.emitEvents ?? true) await this.emit('cleared', { mod: this })\n    })\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    return await this.withCacheMutation(async () => {\n      const emitEvents = config?.emitEvents ?? true\n\n      const payloads = await this.withStorageMutation(async () => 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\n  protected generateStats(): Promisable<ArchivistStatsPayload> {\n    return {\n      payloadCount: this.payloadCountHandler(),\n      schema: ArchivistStatsPayloadSchema,\n    }\n  }\n\n  /**\n   * Inspect local stored roots without consulting public projections, caches or\n   * parents. Backends whose getHandler synthesizes views must override this hook\n   * to read their primary record keys directly.\n   */\n  protected async getExistingLocalPayloads(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n    return await this.exactRepresentations(await this.getHandler(hashes), hashes)\n  }\n\n  protected async getFromParent(hashes: Hash[], archivist: ReadArchivist): Promise<[WithStorageMeta<Payload>[], Hash[]]> {\n    const foundPayloads = await this.requestedRepresentations(await archivist.get(hashes), hashes)\n    const foundHashes = new Set(foundPayloads.map(payload => payload._hash))\n    return [foundPayloads, hashes.filter(hash => !foundHashes.has(hash))]\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  protected async getWithConfig(hashes: Hash[], _config?: InsertConfig): Promise<WithStorageMeta<Payload>[]> {\n    const requestedHashes = [...new Set(hashes)]\n    const generation = this.cacheGeneration\n    const cache = this.activeCacheMutations === 0 ? this._getCache : undefined\n    const fromCache = await this.requestedRepresentations(requestedHashes.map(hash => cache?.get(hash)).filter(exists), requestedHashes)\n    const cachedHashes = new Set(fromCache.map(payload => payload._hash))\n    const remainingHashes = requestedHashes.filter(hash => !cachedHashes.has(hash))\n    const fromGet = await this.requestedRepresentations(await this.getHandler(remainingHashes), remainingHashes)\n    const foundHashes = new Set([...fromCache, ...fromGet].map(payload => payload._hash))\n    const [parentFoundPayloads] = await this.getFromParents(requestedHashes.filter(hash => !foundHashes.has(hash)))\n\n    if (this.storeParentReads && parentFoundPayloads.length > 0) {\n      await this.insertWithConfig(parentFoundPayloads)\n    }\n    // Cache only verified, requested representations. A data-only view must not\n    // replace the root representation under its different full hash.\n    if (this.activeCacheMutations === 0 && generation === this.cacheGeneration) {\n      for (const payload of [...fromGet, ...parentFoundPayloads]) cache?.set(payload._hash, payload)\n    }\n    return PayloadBuilder.omitPrivateStorageMeta(\n      [...fromCache, ...fromGet, ...parentFoundPayloads].toSorted(PayloadBuilder.compareStorageMeta),\n    ) as WithStorageMeta<Payload>[]\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 sanitizedPayloads = this.snapshotPayloads(payloads)\n    return await this.withCacheMutation(async () => {\n      const emitEvents = config?.emitEvents ?? true\n      const writeToParents = config?.writeToParents ?? true\n\n      await this.validateInsertPayloads(sanitizedPayloads)\n      const withStorageMeta = await PayloadBuilder.addStorageMeta(sanitizedPayloads)\n      const hashes = [...new Set(withStorageMeta.map(payload => payload._hash))]\n      const { existingPayloads, insertedPayloads } = await this.withStorageMutation(async () => {\n        const existingPayloads = await this.getExistingLocalPayloads(hashes)\n        await this.repairExistingPayloads(existingPayloads)\n        const existingHashes = new Set(existingPayloads.map(payload => payload._hash))\n        const payloadsToInsert = withStorageMeta.filter((payload) => {\n          if (existingHashes.has(payload._hash)) return false\n          existingHashes.add(payload._hash)\n          return true\n        })\n        return { existingPayloads, insertedPayloads: await this.insertHandler(payloadsToInsert) }\n      })\n\n      if (writeToParents) {\n        // A previous attempt may have stored locally before a parent failed.\n        // Retry the current request's existing roots as well as its new roots.\n        await this.writeToParents([...existingPayloads, ...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\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 = this.snapshotPayloads(payloads)\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.clearWithConfig()\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  /** Restore derived indexes for a stored root without rewriting its body. */\n  protected repairExistingPayloads(_payloads: WithStorageMeta<Payload>[]): Promisable<void> {\n    return undefined\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  /** Enforce backend admission before lookup, repair, insertion or parent writes. */\n  protected validateInsertPayloads(_payloads: Payload[]): Promisable<void> {\n    return undefined\n  }\n\n  /** Serialize local storage changes without holding a lock across callbacks or parents. */\n  protected async withStorageMutation<T>(operation: () => Promise<T>): Promise<T> {\n    return await operation()\n  }\n\n  protected async writeToParent(parent: ArchivistInstance, payloads: Payload[]): Promise<Payload[]> {\n    if (payloads.length === 0) return []\n    const sanitized = PayloadBuilder.omitStorageMeta(payloads)\n    const hashes = [...new Set(await Promise.all(sanitized.map(payload => PayloadBuilder.hash(payload))))]\n    const inserted = await this.exactRepresentations(await parent.insert(sanitized), hashes)\n    const insertedHashes = new Set(inserted.map(payload => payload._hash))\n    const missing = hashes.filter(hash => !insertedHashes.has(hash))\n    const existing = missing.length > 0 ? await this.exactRepresentations(await parent.get(missing), missing) : []\n    const acknowledged = new Set([...inserted, ...existing].map(payload => payload._hash))\n    if (hashes.some(hash => !acknowledged.has(hash))) {\n      throw new Error('Write parent did not acknowledge all requested payloads')\n    }\n    return [...inserted, ...existing]\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 async exactRepresentations(payloads: WithStorageMeta<Payload>[], hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n    const requested = new Set(hashes)\n    const found = new Map<Hash, WithStorageMeta<Payload>>()\n    for (const payload of payloads) {\n      await this.verifyPayloadIdentity(payload)\n      if (requested.has(payload._hash)) found.set(payload._hash, payload)\n    }\n    return found.values().toArray()\n  }\n\n  private async requestedRepresentations(payloads: WithStorageMeta<Payload>[], hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n    const requested = new Set(hashes)\n    const result = new Map<Hash, WithStorageMeta<Payload>>()\n    const sorted = payloads.toSorted(PayloadBuilder.compareStorageMeta)\n    // Prefer actual stored roots (including their original sequence) before\n    // constructing data-only views from a different client-metadata variant.\n    for (const payload of sorted) {\n      await this.verifyPayloadIdentity(payload)\n      if (requested.has(payload._hash) && !result.has(payload._hash)) result.set(payload._hash, payload)\n    }\n    for (const payload of sorted) {\n      if (requested.has(payload._dataHash) && !result.has(payload._dataHash)) {\n        const dataOnly = PayloadBuilder.omitClientMeta(payload) as WithStorageMeta<Payload>\n        result.set(payload._dataHash, { ...dataOnly, _hash: payload._dataHash })\n      }\n    }\n    return result.values().toArray()\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    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  private snapshotPayloads(payloads: Payload[]): Payload[] {\n    // Payloads are JSON values. Capture their bytes before asynchronous work so\n    // admission, identity computation and the backend see the same input.\n    // JSON normalization is intentional; structuredClone preserves non-JSON values.\n    // eslint-disable-next-line unicorn/prefer-structured-clone\n    return JSON.parse(JSON.stringify(PayloadBuilder.omitStorageMeta(payloads))) as Payload[]\n  }\n\n  private async verifyPayloadIdentity(payload: WithStorageMeta<Payload>): Promise<void> {\n    const canonicalPayload = PayloadBuilder.omitStorageMeta(payload)\n    const [hash, dataHash] = await Promise.all([\n      PayloadBuilder.hash(canonicalPayload), PayloadBuilder.dataHash(canonicalPayload),\n    ])\n    if (hash !== payload._hash || dataHash !== payload._dataHash) {\n      throw new Error('Archivist returned payload with invalid hash metadata')\n    }\n  }\n\n  private async withCacheMutation<T>(operation: () => Promise<T>): Promise<T> {\n    this.activeCacheMutations++\n    this.cacheGeneration++\n    this._getCache?.clear()\n    try {\n      return await operation()\n    } finally {\n      // Even a failed mutation can have changed persistent state. In-flight reads\n      // may finish, but their old generation must never repopulate the cache.\n      this.activeCacheMutations--\n      this.cacheGeneration++\n      this._getCache?.clear()\n    }\n  }\n}\n", "export const StorageClassLabel = 'network.xyo.storage.class'\nexport type StorageClassLabelValue = 'memory' | 'disk' | 'network' | 'proxy' | 'unknown'\n", "import type { Payload } from '@xyo-network/sdk-protocol'\nimport { PayloadBuilder } from '@xyo-network/sdk-protocol'\n\n/** Exact schema admission and limits on UTF-8 JSON bytes before compression. */\nexport interface PayloadAdmissionPolicy {\n  /** An empty allowlist admits nothing. */\n  allowedSchemas: string[]\n  maxPayloadBytes: number\n  /** Per-schema limits can only tighten the global limit. */\n  schemaMaxPayloadBytes?: Record<string, number>\n}\n\nfunction validByteLimit(value: number): boolean {\n  return Number.isSafeInteger(value) && value > 0\n}\n\nexport function validatePayloadAdmissionPolicy(policy: PayloadAdmissionPolicy): void {\n  if (!policy || !Array.isArray(policy.allowedSchemas)\n    || policy.allowedSchemas.some(schema => typeof schema !== 'string' || schema.length === 0 || schema.trim() !== schema)\n    || !validByteLimit(policy.maxPayloadBytes)) {\n    throw new TypeError('Invalid payload admission policy')\n  }\n  if (policy.schemaMaxPayloadBytes !== undefined) {\n    if (policy.schemaMaxPayloadBytes === null || typeof policy.schemaMaxPayloadBytes !== 'object' || Array.isArray(policy.schemaMaxPayloadBytes)) {\n      throw new TypeError('Invalid schema payload byte limits')\n    }\n    for (const [schema, limit] of Object.entries(policy.schemaMaxPayloadBytes)) {\n      if (!policy.allowedSchemas.includes(schema) || !validByteLimit(limit)) {\n        throw new TypeError('Invalid schema payload byte limits')\n      }\n    }\n  }\n}\n\n/** Reject the entire batch before any storage action if one payload is ineligible. */\nexport function validatePayloadAdmission(payloads: Payload[], policy: PayloadAdmissionPolicy): void {\n  validatePayloadAdmissionPolicy(policy)\n  const allowed = new Set(policy.allowedSchemas)\n  for (const payload of payloads) {\n    if (!allowed.has(payload.schema)) throw new Error('Payload schema is not admitted by this archivist')\n    const schemaLimit = policy.schemaMaxPayloadBytes && Object.hasOwn(policy.schemaMaxPayloadBytes, payload.schema)\n      ? policy.schemaMaxPayloadBytes[payload.schema]\n      : policy.maxPayloadBytes\n    const limit = Math.min(policy.maxPayloadBytes, schemaLimit)\n    const json = JSON.stringify(PayloadBuilder.omitStorageMeta(payload))\n    const textEncoder = new TextEncoder()\n    if (textEncoder.encode(json).byteLength > limit) {\n      throw new Error('Payload exceeds this archivist byte limit')\n    }\n  }\n}\n"],
  "mappings": "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",
  "names": ["existingPayloads", "PayloadBuilder"]
}
