@xyo-network/archivist-abstract 2.75.0 → 2.75.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,51 @@
1
+ import { ArchivistInstance, ArchivistModuleEventData, ArchivistParams, ArchivistQueryBase } from '@xyo-network/archivist-model';
2
+ import { QueryBoundWitness } from '@xyo-network/boundwitness-builder';
3
+ import { BoundWitness } from '@xyo-network/boundwitness-model';
4
+ import { AbstractModuleInstance, ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module';
5
+ import { Payload } from '@xyo-network/payload-model';
6
+ import { Promisable, PromisableArray } from '@xyo-network/promise';
7
+ export interface ActionConfig {
8
+ emitEvents?: boolean;
9
+ }
10
+ export interface InsertConfig extends ActionConfig {
11
+ writeToParents?: boolean;
12
+ }
13
+ export interface ArchivistParentInstances {
14
+ commit?: Record<string, ArchivistInstance>;
15
+ read?: Record<string, ArchivistInstance>;
16
+ write?: Record<string, ArchivistInstance>;
17
+ }
18
+ export declare abstract class AbstractArchivist<TParams extends ArchivistParams = ArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractModuleInstance<TParams, TEventData> implements ArchivistInstance<TParams> {
19
+ private _lastInsertedPayload;
20
+ private _parents?;
21
+ get queries(): string[];
22
+ get requireAllParents(): boolean;
23
+ protected get _queryAccountPaths(): Record<ArchivistQueryBase['schema'], string>;
24
+ protected get storeParentReads(): boolean;
25
+ all(): PromisableArray<Payload>;
26
+ clear(): Promisable<void>;
27
+ commit(): Promisable<BoundWitness[]>;
28
+ delete(hashes: string[]): Promise<string[]>;
29
+ get(hashes: string[]): Promise<Payload[]>;
30
+ insert(payloads: Payload[]): Promise<Payload[]>;
31
+ protected allHandler(): PromisableArray<Payload>;
32
+ protected clearHandler(): Promisable<void>;
33
+ protected commitHandler(): Promisable<BoundWitness[]>;
34
+ protected deleteHandler(_hashes: string[]): PromisableArray<string>;
35
+ protected deleteWithConfig(hashes: string[], config?: ActionConfig): Promise<string[]>;
36
+ protected getFromParent(hashes: string[], archivist: ArchivistInstance): Promise<[Payload[], string[]]>;
37
+ protected getFromParents(hashes: string[]): Promise<[Payload[], string[]]>;
38
+ protected getHandler(_hashes: string[]): Promisable<Payload[]>;
39
+ protected getWithConfig(hashes: string[], config?: InsertConfig): Promise<Payload[]>;
40
+ protected head(): Promisable<Payload | undefined>;
41
+ protected insertHandler(_payloads: Payload[]): Promise<Payload[]>;
42
+ protected insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<Payload[]>;
43
+ protected parents(): Promise<ArchivistParentInstances>;
44
+ protected queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(query: T, payloads?: Payload[], queryConfig?: TConfig): Promise<ModuleQueryHandlerResult>;
45
+ protected writeToParent(parent: ArchivistInstance, payloads: Payload[]): Promise<({
46
+ schema: string;
47
+ } & import("@xyo-network/payload-model").PayloadFields)[]>;
48
+ protected writeToParents(payloads: Payload[]): Promise<Payload[]>;
49
+ private resolveArchivists;
50
+ }
51
+ //# sourceMappingURL=AbstractArchivist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractArchivist.d.ts","sourceRoot":"","sources":["../../src/AbstractArchivist.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- // src/AbstractArchivist.ts
2
1
  import { assertEx } from "@xylabs/assert";
3
2
  import { compact } from "@xylabs/lodash";
4
3
  import {
@@ -16,7 +15,7 @@ import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
16
15
  import { PayloadHasher } from "@xyo-network/core";
17
16
  import { AbstractModuleInstance, duplicateModules } from "@xyo-network/module";
18
17
  import { PayloadWrapper } from "@xyo-network/payload-wrapper";
19
- var AbstractArchivist = class extends AbstractModuleInstance {
18
+ class AbstractArchivist extends AbstractModuleInstance {
20
19
  _lastInsertedPayload;
21
20
  _parents;
22
21
  get queries() {
@@ -262,7 +261,7 @@ var AbstractArchivist = class extends AbstractModuleInstance {
262
261
  return prev;
263
262
  }, {});
264
263
  }
265
- };
264
+ }
266
265
  export {
267
266
  AbstractArchivist
268
267
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/AbstractArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistDeleteQuery,\n ArchivistDeleteQuerySchema,\n ArchivistGetQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistParams,\n ArchivistQuery,\n ArchivistQueryBase,\n asArchivistInstance,\n isArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport { QueryBoundWitness, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { AbstractModuleInstance, duplicateModules, ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport { Promisable, PromisableArray } from '@xyo-network/promise'\n\nexport interface ActionConfig {\n emitEvents?: boolean\n}\n\nexport interface InsertConfig extends ActionConfig {\n writeToParents?: boolean\n}\n\nexport interface ArchivistParentInstances {\n commit?: Record<string, ArchivistInstance>\n read?: Record<string, ArchivistInstance>\n write?: Record<string, 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 ArchivistInstance<TParams>\n{\n private _lastInsertedPayload: Payload | undefined\n private _parents?: ArchivistParentInstances\n\n override get queries(): string[] {\n return [ArchivistGetQuerySchema, ...super.queries]\n }\n\n get requireAllParents() {\n return this.config.requireAllParents ?? true\n }\n\n protected override get _queryAccountPaths(): Record<ArchivistQueryBase['schema'], string> {\n return {\n 'network.xyo.query.archivist.all': '1/1',\n 'network.xyo.query.archivist.clear': '1/2',\n 'network.xyo.query.archivist.commit': '1/3',\n 'network.xyo.query.archivist.delete': '1/4',\n 'network.xyo.query.archivist.get': '1/5',\n 'network.xyo.query.archivist.insert': '1/6',\n }\n }\n\n protected get storeParentReads() {\n return !!this.config?.storeParentReads\n }\n\n all(): PromisableArray<Payload> {\n this._noOverride('all')\n return this.busy(async () => {\n await this.started('throw')\n return await this.allHandler()\n })\n }\n\n clear(): Promisable<void> {\n this._noOverride('clear')\n return this.busy(async () => {\n await this.started('throw')\n return await this.clearHandler()\n })\n }\n\n commit(): Promisable<BoundWitness[]> {\n this._noOverride('commit')\n return this.busy(async () => {\n await this.started('throw')\n return await this.commitHandler()\n })\n }\n\n async delete(hashes: string[]): Promise<string[]> {\n this._noOverride('delete')\n return await this.busy(async () => {\n await this.started('throw')\n return await this.deleteWithConfig(hashes)\n })\n }\n\n async get(hashes: string[]): Promise<Payload[]> {\n this._noOverride('get')\n return await this.busy(async () => {\n await this.started('throw')\n return await this.getWithConfig(hashes)\n })\n }\n\n async insert(payloads: Payload[]): Promise<Payload[]> {\n this._noOverride('insert')\n return await this.busy(async () => {\n await this.started('throw')\n return await this.insertWithConfig(payloads)\n })\n }\n\n protected allHandler(): PromisableArray<Payload> {\n throw Error('Not implemented')\n }\n\n protected clearHandler(): Promisable<void> {\n throw Error('Not implemented')\n }\n\n protected commitHandler(): Promisable<BoundWitness[]> {\n throw Error('Not implemented')\n }\n\n protected deleteHandler(_hashes: string[]): PromisableArray<string> {\n throw Error('Not implemented')\n }\n\n protected async deleteWithConfig(hashes: string[], config?: ActionConfig): Promise<string[]> {\n const emitEvents = config?.emitEvents ?? true\n\n const deletedHashes = await this.deleteHandler(hashes)\n\n if (emitEvents) {\n await this.emit('deleted', { hashes: deletedHashes, module: this })\n }\n\n return deletedHashes\n }\n\n protected async getFromParent(hashes: string[], archivist: ArchivistInstance): Promise<[Payload[], string[]]> {\n const foundPairs = (\n await Promise.all(\n (await archivist.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n ).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 = foundPairs.map(([hash]) => hash)\n const foundPayloads = foundPairs.map(([, payload]) => payload)\n\n const notfound = hashes.filter((hash) => !foundHashes.includes(hash))\n return [foundPayloads, notfound]\n }\n\n protected async getFromParents(hashes: string[]): Promise<[Payload[], string[]]> {\n const parents = Object.values((await this.parents())?.read ?? {})\n let remainingHashes = [...hashes]\n let parentIndex = 0\n let result: Payload[] = []\n\n //intentionally doing this serially\n while (parentIndex < parents.length && remainingHashes.length > 0) {\n const [found, notfound] = await this.getFromParent(remainingHashes, parents[parentIndex])\n result = [...result, ...found]\n remainingHashes = notfound\n parentIndex++\n }\n return [result, remainingHashes]\n }\n\n protected getHandler(_hashes: string[]): Promisable<Payload[]> {\n throw Error('Not implemented')\n }\n\n protected async getWithConfig(hashes: string[], config?: InsertConfig): Promise<Payload[]> {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const emitEvents = config?.emitEvents ?? true\n const map = await PayloadWrapper.toMap(await this.getHandler(hashes))\n\n const { foundPayloads, notfoundHashes } = hashes.reduce<{ foundPayloads: Payload[]; notfoundHashes: string[] }>(\n (prev, hash) => {\n const found = map[hash]\n if (found) {\n //TODO: Find a better way to scrub meta data without scrubbing _signatures\n if (found.schema === BoundWitnessSchema) {\n prev.foundPayloads.push({ ...PayloadHasher.hashFields(found), ...{ _signatures: (found as BoundWitness)._signatures } } as BoundWitness)\n } else {\n prev.foundPayloads.push({ ...PayloadHasher.hashFields(found) } as Payload)\n }\n } else {\n prev.notfoundHashes.push(hash)\n }\n return prev\n },\n { foundPayloads: [], notfoundHashes: [] },\n )\n\n const [parentFoundPayloads] = await this.getFromParents(notfoundHashes)\n\n if (this.storeParentReads) {\n await this.insertWithConfig(parentFoundPayloads)\n }\n return [...foundPayloads, ...parentFoundPayloads]\n }\n\n protected head(): Promisable<Payload | undefined> {\n return this._lastInsertedPayload\n }\n\n protected insertHandler(_payloads: Payload[]): Promise<Payload[]> {\n throw Error('Not implemented')\n }\n\n protected async insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<Payload[]> {\n const emitEvents = config?.emitEvents ?? true\n const writeToParents = config?.writeToParents ?? true\n\n const insertedPayloads = await this.insertHandler(payloads)\n\n if (writeToParents) {\n await this.writeToParents(insertedPayloads)\n }\n if (emitEvents) {\n await this.emit('inserted', { module: this, payloads: insertedPayloads })\n }\n\n return insertedPayloads\n }\n\n protected async parents() {\n this._parents = this._parents ?? {\n commit: await this.resolveArchivists(this.config?.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._parents)\n }\n\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 wrappedQuery = QueryBoundWitnessWrapper.parseQuery<ArchivistQuery>(query, payloads)\n const queryPayload = await wrappedQuery.getQuery()\n assertEx(this.queryable(query, payloads, queryConfig))\n const resultPayloads: Payload[] = []\n if (this.config.storeQueries) {\n await this.insertHandler([query])\n }\n\n switch (queryPayload.schema) {\n case ArchivistAllQuerySchema:\n resultPayloads.push(...(await this.allHandler()))\n break\n case ArchivistClearQuerySchema:\n await this.clearHandler()\n break\n case ArchivistCommitQuerySchema:\n resultPayloads.push(...(await this.commitHandler()))\n break\n case ArchivistDeleteQuerySchema: {\n const resultPayload: ArchivistDeleteQuery = {\n hashes: [...(await this.deleteWithConfig(queryPayload.hashes))],\n schema: ArchivistDeleteQuerySchema,\n }\n resultPayloads.push(resultPayload)\n break\n }\n case ArchivistGetQuerySchema:\n if (queryPayload.hashes?.length) {\n resultPayloads.push(...(await this.getWithConfig(queryPayload.hashes)))\n } else {\n const head = await this.head()\n if (head) resultPayloads.push(head)\n }\n break\n case ArchivistInsertQuerySchema: {\n const payloads = await wrappedQuery.getPayloads()\n assertEx(await wrappedQuery.getPayloads(), `Missing payloads: ${JSON.stringify(wrappedQuery.payload(), null, 2)}`)\n const resolvedPayloads = await PayloadWrapper.filterExclude(payloads, await wrappedQuery.hashAsync())\n assertEx(resolvedPayloads.length === payloads.length, `Could not find some passed hashes [${resolvedPayloads.length} != ${payloads.length}]`)\n resultPayloads.push(...(await this.insertWithConfig(payloads)))\n // NOTE: There isn't an exact equivalence between what we get and what we store. Once\n // we move to returning only inserted Payloads(/hash) instead of a BoundWitness, we\n // can grab the actual last one\n this._lastInsertedPayload = resolvedPayloads[resolvedPayloads.length - 1]\n break\n }\n default:\n return await super.queryHandler(query, payloads)\n }\n return resultPayloads\n }\n\n protected async writeToParent(parent: ArchivistInstance, payloads: Payload[]) {\n return await parent.insert(payloads)\n }\n\n protected async writeToParents(payloads: Payload[]): Promise<Payload[]> {\n const parents = await this.parents()\n return compact(\n await Promise.all(\n Object.values(parents.write ?? {}).map(async (parent) => {\n return parent ? await this.writeToParent(parent, payloads) : undefined\n }),\n ),\n ).flat()\n }\n\n private async resolveArchivists(archivists: string[] = []) {\n const archivistModules = [...(await this.resolve({ address: archivists })), ...(await this.resolve({ name: archivists }))].filter(\n duplicateModules,\n )\n\n assertEx(\n !this.requireAllParents || archivistModules.length === archivists.length,\n `Failed to find some archivists (set allRequired to false if ok): [${archivists.filter((archivist) =>\n archivistModules.map((module) => !(module.address === archivist || module.config.name === archivist)),\n )}]`,\n )\n\n return archivistModules.reduce<Record<string, ArchivistInstance>>((prev, module) => {\n prev[module.address] = asArchivistInstance(module, () => {\n isArchivistInstance(module, { log: console })\n return `Unable to cast resolved module to an archivist: [${module.address}, ${module.config.name}, ${module.config.schema})}]`\n })\n\n return prev\n }, {})\n }\n}\n"],"mappings":"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","names":["payloads"]}
1
+ {"version":3,"sources":["../../src/AbstractArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistDeleteQuery,\n ArchivistDeleteQuerySchema,\n ArchivistGetQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistParams,\n ArchivistQuery,\n ArchivistQueryBase,\n asArchivistInstance,\n isArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport { QueryBoundWitness, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { AbstractModuleInstance, duplicateModules, ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport { Promisable, PromisableArray } from '@xyo-network/promise'\n\nexport interface ActionConfig {\n emitEvents?: boolean\n}\n\nexport interface InsertConfig extends ActionConfig {\n writeToParents?: boolean\n}\n\nexport interface ArchivistParentInstances {\n commit?: Record<string, ArchivistInstance>\n read?: Record<string, ArchivistInstance>\n write?: Record<string, 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 ArchivistInstance<TParams>\n{\n private _lastInsertedPayload: Payload | undefined\n private _parents?: ArchivistParentInstances\n\n override get queries(): string[] {\n return [ArchivistGetQuerySchema, ...super.queries]\n }\n\n get requireAllParents() {\n return this.config.requireAllParents ?? true\n }\n\n protected override get _queryAccountPaths(): Record<ArchivistQueryBase['schema'], string> {\n return {\n 'network.xyo.query.archivist.all': '1/1',\n 'network.xyo.query.archivist.clear': '1/2',\n 'network.xyo.query.archivist.commit': '1/3',\n 'network.xyo.query.archivist.delete': '1/4',\n 'network.xyo.query.archivist.get': '1/5',\n 'network.xyo.query.archivist.insert': '1/6',\n }\n }\n\n protected get storeParentReads() {\n return !!this.config?.storeParentReads\n }\n\n all(): PromisableArray<Payload> {\n this._noOverride('all')\n return this.busy(async () => {\n await this.started('throw')\n return await this.allHandler()\n })\n }\n\n clear(): Promisable<void> {\n this._noOverride('clear')\n return this.busy(async () => {\n await this.started('throw')\n return await this.clearHandler()\n })\n }\n\n commit(): Promisable<BoundWitness[]> {\n this._noOverride('commit')\n return this.busy(async () => {\n await this.started('throw')\n return await this.commitHandler()\n })\n }\n\n async delete(hashes: string[]): Promise<string[]> {\n this._noOverride('delete')\n return await this.busy(async () => {\n await this.started('throw')\n return await this.deleteWithConfig(hashes)\n })\n }\n\n async get(hashes: string[]): Promise<Payload[]> {\n this._noOverride('get')\n return await this.busy(async () => {\n await this.started('throw')\n return await this.getWithConfig(hashes)\n })\n }\n\n async insert(payloads: Payload[]): Promise<Payload[]> {\n this._noOverride('insert')\n return await this.busy(async () => {\n await this.started('throw')\n return await this.insertWithConfig(payloads)\n })\n }\n\n protected allHandler(): PromisableArray<Payload> {\n throw Error('Not implemented')\n }\n\n protected clearHandler(): Promisable<void> {\n throw Error('Not implemented')\n }\n\n protected commitHandler(): Promisable<BoundWitness[]> {\n throw Error('Not implemented')\n }\n\n protected deleteHandler(_hashes: string[]): PromisableArray<string> {\n throw Error('Not implemented')\n }\n\n protected async deleteWithConfig(hashes: string[], config?: ActionConfig): Promise<string[]> {\n const emitEvents = config?.emitEvents ?? true\n\n const deletedHashes = await this.deleteHandler(hashes)\n\n if (emitEvents) {\n await this.emit('deleted', { hashes: deletedHashes, module: this })\n }\n\n return deletedHashes\n }\n\n protected async getFromParent(hashes: string[], archivist: ArchivistInstance): Promise<[Payload[], string[]]> {\n const foundPairs = (\n await Promise.all(\n (await archivist.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n ).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 = foundPairs.map(([hash]) => hash)\n const foundPayloads = foundPairs.map(([, payload]) => payload)\n\n const notfound = hashes.filter((hash) => !foundHashes.includes(hash))\n return [foundPayloads, notfound]\n }\n\n protected async getFromParents(hashes: string[]): Promise<[Payload[], string[]]> {\n const parents = Object.values((await this.parents())?.read ?? {})\n let remainingHashes = [...hashes]\n let parentIndex = 0\n let result: Payload[] = []\n\n //intentionally doing this serially\n while (parentIndex < parents.length && remainingHashes.length > 0) {\n const [found, notfound] = await this.getFromParent(remainingHashes, parents[parentIndex])\n result = [...result, ...found]\n remainingHashes = notfound\n parentIndex++\n }\n return [result, remainingHashes]\n }\n\n protected getHandler(_hashes: string[]): Promisable<Payload[]> {\n throw Error('Not implemented')\n }\n\n protected async getWithConfig(hashes: string[], config?: InsertConfig): Promise<Payload[]> {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const emitEvents = config?.emitEvents ?? true\n const map = await PayloadWrapper.toMap(await this.getHandler(hashes))\n\n const { foundPayloads, notfoundHashes } = hashes.reduce<{ foundPayloads: Payload[]; notfoundHashes: string[] }>(\n (prev, hash) => {\n const found = map[hash]\n if (found) {\n //TODO: Find a better way to scrub meta data without scrubbing _signatures\n if (found.schema === BoundWitnessSchema) {\n prev.foundPayloads.push({ ...PayloadHasher.hashFields(found), ...{ _signatures: (found as BoundWitness)._signatures } } as BoundWitness)\n } else {\n prev.foundPayloads.push({ ...PayloadHasher.hashFields(found) } as Payload)\n }\n } else {\n prev.notfoundHashes.push(hash)\n }\n return prev\n },\n { foundPayloads: [], notfoundHashes: [] },\n )\n\n const [parentFoundPayloads] = await this.getFromParents(notfoundHashes)\n\n if (this.storeParentReads) {\n await this.insertWithConfig(parentFoundPayloads)\n }\n return [...foundPayloads, ...parentFoundPayloads]\n }\n\n protected head(): Promisable<Payload | undefined> {\n return this._lastInsertedPayload\n }\n\n protected insertHandler(_payloads: Payload[]): Promise<Payload[]> {\n throw Error('Not implemented')\n }\n\n protected async insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<Payload[]> {\n const emitEvents = config?.emitEvents ?? true\n const writeToParents = config?.writeToParents ?? true\n\n const insertedPayloads = await this.insertHandler(payloads)\n\n if (writeToParents) {\n await this.writeToParents(insertedPayloads)\n }\n if (emitEvents) {\n await this.emit('inserted', { module: this, payloads: insertedPayloads })\n }\n\n return insertedPayloads\n }\n\n protected async parents() {\n this._parents = this._parents ?? {\n commit: await this.resolveArchivists(this.config?.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._parents)\n }\n\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 wrappedQuery = QueryBoundWitnessWrapper.parseQuery<ArchivistQuery>(query, payloads)\n const queryPayload = await wrappedQuery.getQuery()\n assertEx(this.queryable(query, payloads, queryConfig))\n const resultPayloads: Payload[] = []\n if (this.config.storeQueries) {\n await this.insertHandler([query])\n }\n\n switch (queryPayload.schema) {\n case ArchivistAllQuerySchema:\n resultPayloads.push(...(await this.allHandler()))\n break\n case ArchivistClearQuerySchema:\n await this.clearHandler()\n break\n case ArchivistCommitQuerySchema:\n resultPayloads.push(...(await this.commitHandler()))\n break\n case ArchivistDeleteQuerySchema: {\n const resultPayload: ArchivistDeleteQuery = {\n hashes: [...(await this.deleteWithConfig(queryPayload.hashes))],\n schema: ArchivistDeleteQuerySchema,\n }\n resultPayloads.push(resultPayload)\n break\n }\n case ArchivistGetQuerySchema:\n if (queryPayload.hashes?.length) {\n resultPayloads.push(...(await this.getWithConfig(queryPayload.hashes)))\n } else {\n const head = await this.head()\n if (head) resultPayloads.push(head)\n }\n break\n case ArchivistInsertQuerySchema: {\n const payloads = await wrappedQuery.getPayloads()\n assertEx(await wrappedQuery.getPayloads(), `Missing payloads: ${JSON.stringify(wrappedQuery.payload(), null, 2)}`)\n const resolvedPayloads = await PayloadWrapper.filterExclude(payloads, await wrappedQuery.hashAsync())\n assertEx(resolvedPayloads.length === payloads.length, `Could not find some passed hashes [${resolvedPayloads.length} != ${payloads.length}]`)\n resultPayloads.push(...(await this.insertWithConfig(payloads)))\n // NOTE: There isn't an exact equivalence between what we get and what we store. Once\n // we move to returning only inserted Payloads(/hash) instead of a BoundWitness, we\n // can grab the actual last one\n this._lastInsertedPayload = resolvedPayloads[resolvedPayloads.length - 1]\n break\n }\n default:\n return await super.queryHandler(query, payloads)\n }\n return resultPayloads\n }\n\n protected async writeToParent(parent: ArchivistInstance, payloads: Payload[]) {\n return await parent.insert(payloads)\n }\n\n protected async writeToParents(payloads: Payload[]): Promise<Payload[]> {\n const parents = await this.parents()\n return compact(\n await Promise.all(\n Object.values(parents.write ?? {}).map(async (parent) => {\n return parent ? await this.writeToParent(parent, payloads) : undefined\n }),\n ),\n ).flat()\n }\n\n private async resolveArchivists(archivists: string[] = []) {\n const archivistModules = [...(await this.resolve({ address: archivists })), ...(await this.resolve({ name: archivists }))].filter(\n duplicateModules,\n )\n\n assertEx(\n !this.requireAllParents || archivistModules.length === archivists.length,\n `Failed to find some archivists (set allRequired to false if ok): [${archivists.filter((archivist) =>\n archivistModules.map((module) => !(module.address === archivist || module.config.name === archivist)),\n )}]`,\n )\n\n return archivistModules.reduce<Record<string, ArchivistInstance>>((prev, module) => {\n prev[module.address] = asArchivistInstance(module, () => {\n isArchivistInstance(module, { log: console })\n return `Unable to cast resolved module to an archivist: [${module.address}, ${module.config.name}, ${module.config.schema})}]`\n })\n\n return prev\n }, {})\n }\n}\n"],"mappings":"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","names":["payloads"]}
@@ -0,0 +1,2 @@
1
+ export * from './AbstractArchivist';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA"}
@@ -1,269 +1,2 @@
1
- // src/AbstractArchivist.ts
2
- import { assertEx } from "@xylabs/assert";
3
- import { compact } from "@xylabs/lodash";
4
- import {
5
- ArchivistAllQuerySchema,
6
- ArchivistClearQuerySchema,
7
- ArchivistCommitQuerySchema,
8
- ArchivistDeleteQuerySchema,
9
- ArchivistGetQuerySchema,
10
- ArchivistInsertQuerySchema,
11
- asArchivistInstance,
12
- isArchivistInstance
13
- } from "@xyo-network/archivist-model";
14
- import { QueryBoundWitnessWrapper } from "@xyo-network/boundwitness-builder";
15
- import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
16
- import { PayloadHasher } from "@xyo-network/core";
17
- import { AbstractModuleInstance, duplicateModules } from "@xyo-network/module";
18
- import { PayloadWrapper } from "@xyo-network/payload-wrapper";
19
- var AbstractArchivist = class extends AbstractModuleInstance {
20
- _lastInsertedPayload;
21
- _parents;
22
- get queries() {
23
- return [ArchivistGetQuerySchema, ...super.queries];
24
- }
25
- get requireAllParents() {
26
- return this.config.requireAllParents ?? true;
27
- }
28
- get _queryAccountPaths() {
29
- return {
30
- "network.xyo.query.archivist.all": "1/1",
31
- "network.xyo.query.archivist.clear": "1/2",
32
- "network.xyo.query.archivist.commit": "1/3",
33
- "network.xyo.query.archivist.delete": "1/4",
34
- "network.xyo.query.archivist.get": "1/5",
35
- "network.xyo.query.archivist.insert": "1/6"
36
- };
37
- }
38
- get storeParentReads() {
39
- return !!this.config?.storeParentReads;
40
- }
41
- all() {
42
- this._noOverride("all");
43
- return this.busy(async () => {
44
- await this.started("throw");
45
- return await this.allHandler();
46
- });
47
- }
48
- clear() {
49
- this._noOverride("clear");
50
- return this.busy(async () => {
51
- await this.started("throw");
52
- return await this.clearHandler();
53
- });
54
- }
55
- commit() {
56
- this._noOverride("commit");
57
- return this.busy(async () => {
58
- await this.started("throw");
59
- return await this.commitHandler();
60
- });
61
- }
62
- async delete(hashes) {
63
- this._noOverride("delete");
64
- return await this.busy(async () => {
65
- await this.started("throw");
66
- return await this.deleteWithConfig(hashes);
67
- });
68
- }
69
- async get(hashes) {
70
- this._noOverride("get");
71
- return await this.busy(async () => {
72
- await this.started("throw");
73
- return await this.getWithConfig(hashes);
74
- });
75
- }
76
- async insert(payloads) {
77
- this._noOverride("insert");
78
- return await this.busy(async () => {
79
- await this.started("throw");
80
- return await this.insertWithConfig(payloads);
81
- });
82
- }
83
- allHandler() {
84
- throw Error("Not implemented");
85
- }
86
- clearHandler() {
87
- throw Error("Not implemented");
88
- }
89
- commitHandler() {
90
- throw Error("Not implemented");
91
- }
92
- deleteHandler(_hashes) {
93
- throw Error("Not implemented");
94
- }
95
- async deleteWithConfig(hashes, config) {
96
- const emitEvents = config?.emitEvents ?? true;
97
- const deletedHashes = await this.deleteHandler(hashes);
98
- if (emitEvents) {
99
- await this.emit("deleted", { hashes: deletedHashes, module: this });
100
- }
101
- return deletedHashes;
102
- }
103
- async getFromParent(hashes, archivist) {
104
- const foundPairs = (await Promise.all(
105
- (await archivist.get(hashes)).map(async (payload) => [await PayloadHasher.hashAsync(payload), payload])
106
- )).filter(([hash]) => {
107
- const askedFor = hashes.includes(hash);
108
- if (!askedFor) {
109
- console.warn(`Parent returned payload with hash not asked for: ${hash}`);
110
- }
111
- return askedFor;
112
- });
113
- const foundHashes = foundPairs.map(([hash]) => hash);
114
- const foundPayloads = foundPairs.map(([, payload]) => payload);
115
- const notfound = hashes.filter((hash) => !foundHashes.includes(hash));
116
- return [foundPayloads, notfound];
117
- }
118
- async getFromParents(hashes) {
119
- const parents = Object.values((await this.parents())?.read ?? {});
120
- let remainingHashes = [...hashes];
121
- let parentIndex = 0;
122
- let result = [];
123
- while (parentIndex < parents.length && remainingHashes.length > 0) {
124
- const [found, notfound] = await this.getFromParent(remainingHashes, parents[parentIndex]);
125
- result = [...result, ...found];
126
- remainingHashes = notfound;
127
- parentIndex++;
128
- }
129
- return [result, remainingHashes];
130
- }
131
- getHandler(_hashes) {
132
- throw Error("Not implemented");
133
- }
134
- async getWithConfig(hashes, config) {
135
- const emitEvents = config?.emitEvents ?? true;
136
- const map = await PayloadWrapper.toMap(await this.getHandler(hashes));
137
- const { foundPayloads, notfoundHashes } = hashes.reduce(
138
- (prev, hash) => {
139
- const found = map[hash];
140
- if (found) {
141
- if (found.schema === BoundWitnessSchema) {
142
- prev.foundPayloads.push({ ...PayloadHasher.hashFields(found), ...{ _signatures: found._signatures } });
143
- } else {
144
- prev.foundPayloads.push({ ...PayloadHasher.hashFields(found) });
145
- }
146
- } else {
147
- prev.notfoundHashes.push(hash);
148
- }
149
- return prev;
150
- },
151
- { foundPayloads: [], notfoundHashes: [] }
152
- );
153
- const [parentFoundPayloads] = await this.getFromParents(notfoundHashes);
154
- if (this.storeParentReads) {
155
- await this.insertWithConfig(parentFoundPayloads);
156
- }
157
- return [...foundPayloads, ...parentFoundPayloads];
158
- }
159
- head() {
160
- return this._lastInsertedPayload;
161
- }
162
- insertHandler(_payloads) {
163
- throw Error("Not implemented");
164
- }
165
- async insertWithConfig(payloads, config) {
166
- const emitEvents = config?.emitEvents ?? true;
167
- const writeToParents = config?.writeToParents ?? true;
168
- const insertedPayloads = await this.insertHandler(payloads);
169
- if (writeToParents) {
170
- await this.writeToParents(insertedPayloads);
171
- }
172
- if (emitEvents) {
173
- await this.emit("inserted", { module: this, payloads: insertedPayloads });
174
- }
175
- return insertedPayloads;
176
- }
177
- async parents() {
178
- this._parents = this._parents ?? {
179
- commit: await this.resolveArchivists(this.config?.parents?.commit),
180
- read: await this.resolveArchivists(this.config?.parents?.read),
181
- write: await this.resolveArchivists(this.config?.parents?.write)
182
- };
183
- return assertEx(this._parents);
184
- }
185
- async queryHandler(query, payloads, queryConfig) {
186
- const wrappedQuery = QueryBoundWitnessWrapper.parseQuery(query, payloads);
187
- const queryPayload = await wrappedQuery.getQuery();
188
- assertEx(this.queryable(query, payloads, queryConfig));
189
- const resultPayloads = [];
190
- if (this.config.storeQueries) {
191
- await this.insertHandler([query]);
192
- }
193
- switch (queryPayload.schema) {
194
- case ArchivistAllQuerySchema:
195
- resultPayloads.push(...await this.allHandler());
196
- break;
197
- case ArchivistClearQuerySchema:
198
- await this.clearHandler();
199
- break;
200
- case ArchivistCommitQuerySchema:
201
- resultPayloads.push(...await this.commitHandler());
202
- break;
203
- case ArchivistDeleteQuerySchema: {
204
- const resultPayload = {
205
- hashes: [...await this.deleteWithConfig(queryPayload.hashes)],
206
- schema: ArchivistDeleteQuerySchema
207
- };
208
- resultPayloads.push(resultPayload);
209
- break;
210
- }
211
- case ArchivistGetQuerySchema:
212
- if (queryPayload.hashes?.length) {
213
- resultPayloads.push(...await this.getWithConfig(queryPayload.hashes));
214
- } else {
215
- const head = await this.head();
216
- if (head)
217
- resultPayloads.push(head);
218
- }
219
- break;
220
- case ArchivistInsertQuerySchema: {
221
- const payloads2 = await wrappedQuery.getPayloads();
222
- assertEx(await wrappedQuery.getPayloads(), `Missing payloads: ${JSON.stringify(wrappedQuery.payload(), null, 2)}`);
223
- const resolvedPayloads = await PayloadWrapper.filterExclude(payloads2, await wrappedQuery.hashAsync());
224
- assertEx(resolvedPayloads.length === payloads2.length, `Could not find some passed hashes [${resolvedPayloads.length} != ${payloads2.length}]`);
225
- resultPayloads.push(...await this.insertWithConfig(payloads2));
226
- this._lastInsertedPayload = resolvedPayloads[resolvedPayloads.length - 1];
227
- break;
228
- }
229
- default:
230
- return await super.queryHandler(query, payloads);
231
- }
232
- return resultPayloads;
233
- }
234
- async writeToParent(parent, payloads) {
235
- return await parent.insert(payloads);
236
- }
237
- async writeToParents(payloads) {
238
- const parents = await this.parents();
239
- return compact(
240
- await Promise.all(
241
- Object.values(parents.write ?? {}).map(async (parent) => {
242
- return parent ? await this.writeToParent(parent, payloads) : void 0;
243
- })
244
- )
245
- ).flat();
246
- }
247
- async resolveArchivists(archivists = []) {
248
- const archivistModules = [...await this.resolve({ address: archivists }), ...await this.resolve({ name: archivists })].filter(
249
- duplicateModules
250
- );
251
- assertEx(
252
- !this.requireAllParents || archivistModules.length === archivists.length,
253
- `Failed to find some archivists (set allRequired to false if ok): [${archivists.filter(
254
- (archivist) => archivistModules.map((module) => !(module.address === archivist || module.config.name === archivist))
255
- )}]`
256
- );
257
- return archivistModules.reduce((prev, module) => {
258
- prev[module.address] = asArchivistInstance(module, () => {
259
- isArchivistInstance(module, { log: console });
260
- return `Unable to cast resolved module to an archivist: [${module.address}, ${module.config.name}, ${module.config.schema})}]`;
261
- });
262
- return prev;
263
- }, {});
264
- }
265
- };
266
- export {
267
- AbstractArchivist
268
- };
1
+ export * from "./AbstractArchivist";
269
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/AbstractArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistDeleteQuery,\n ArchivistDeleteQuerySchema,\n ArchivistGetQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistParams,\n ArchivistQuery,\n ArchivistQueryBase,\n asArchivistInstance,\n isArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport { QueryBoundWitness, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { AbstractModuleInstance, duplicateModules, ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport { Promisable, PromisableArray } from '@xyo-network/promise'\n\nexport interface ActionConfig {\n emitEvents?: boolean\n}\n\nexport interface InsertConfig extends ActionConfig {\n writeToParents?: boolean\n}\n\nexport interface ArchivistParentInstances {\n commit?: Record<string, ArchivistInstance>\n read?: Record<string, ArchivistInstance>\n write?: Record<string, 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 ArchivistInstance<TParams>\n{\n private _lastInsertedPayload: Payload | undefined\n private _parents?: ArchivistParentInstances\n\n override get queries(): string[] {\n return [ArchivistGetQuerySchema, ...super.queries]\n }\n\n get requireAllParents() {\n return this.config.requireAllParents ?? true\n }\n\n protected override get _queryAccountPaths(): Record<ArchivistQueryBase['schema'], string> {\n return {\n 'network.xyo.query.archivist.all': '1/1',\n 'network.xyo.query.archivist.clear': '1/2',\n 'network.xyo.query.archivist.commit': '1/3',\n 'network.xyo.query.archivist.delete': '1/4',\n 'network.xyo.query.archivist.get': '1/5',\n 'network.xyo.query.archivist.insert': '1/6',\n }\n }\n\n protected get storeParentReads() {\n return !!this.config?.storeParentReads\n }\n\n all(): PromisableArray<Payload> {\n this._noOverride('all')\n return this.busy(async () => {\n await this.started('throw')\n return await this.allHandler()\n })\n }\n\n clear(): Promisable<void> {\n this._noOverride('clear')\n return this.busy(async () => {\n await this.started('throw')\n return await this.clearHandler()\n })\n }\n\n commit(): Promisable<BoundWitness[]> {\n this._noOverride('commit')\n return this.busy(async () => {\n await this.started('throw')\n return await this.commitHandler()\n })\n }\n\n async delete(hashes: string[]): Promise<string[]> {\n this._noOverride('delete')\n return await this.busy(async () => {\n await this.started('throw')\n return await this.deleteWithConfig(hashes)\n })\n }\n\n async get(hashes: string[]): Promise<Payload[]> {\n this._noOverride('get')\n return await this.busy(async () => {\n await this.started('throw')\n return await this.getWithConfig(hashes)\n })\n }\n\n async insert(payloads: Payload[]): Promise<Payload[]> {\n this._noOverride('insert')\n return await this.busy(async () => {\n await this.started('throw')\n return await this.insertWithConfig(payloads)\n })\n }\n\n protected allHandler(): PromisableArray<Payload> {\n throw Error('Not implemented')\n }\n\n protected clearHandler(): Promisable<void> {\n throw Error('Not implemented')\n }\n\n protected commitHandler(): Promisable<BoundWitness[]> {\n throw Error('Not implemented')\n }\n\n protected deleteHandler(_hashes: string[]): PromisableArray<string> {\n throw Error('Not implemented')\n }\n\n protected async deleteWithConfig(hashes: string[], config?: ActionConfig): Promise<string[]> {\n const emitEvents = config?.emitEvents ?? true\n\n const deletedHashes = await this.deleteHandler(hashes)\n\n if (emitEvents) {\n await this.emit('deleted', { hashes: deletedHashes, module: this })\n }\n\n return deletedHashes\n }\n\n protected async getFromParent(hashes: string[], archivist: ArchivistInstance): Promise<[Payload[], string[]]> {\n const foundPairs = (\n await Promise.all(\n (await archivist.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n ).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 = foundPairs.map(([hash]) => hash)\n const foundPayloads = foundPairs.map(([, payload]) => payload)\n\n const notfound = hashes.filter((hash) => !foundHashes.includes(hash))\n return [foundPayloads, notfound]\n }\n\n protected async getFromParents(hashes: string[]): Promise<[Payload[], string[]]> {\n const parents = Object.values((await this.parents())?.read ?? {})\n let remainingHashes = [...hashes]\n let parentIndex = 0\n let result: Payload[] = []\n\n //intentionally doing this serially\n while (parentIndex < parents.length && remainingHashes.length > 0) {\n const [found, notfound] = await this.getFromParent(remainingHashes, parents[parentIndex])\n result = [...result, ...found]\n remainingHashes = notfound\n parentIndex++\n }\n return [result, remainingHashes]\n }\n\n protected getHandler(_hashes: string[]): Promisable<Payload[]> {\n throw Error('Not implemented')\n }\n\n protected async getWithConfig(hashes: string[], config?: InsertConfig): Promise<Payload[]> {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const emitEvents = config?.emitEvents ?? true\n const map = await PayloadWrapper.toMap(await this.getHandler(hashes))\n\n const { foundPayloads, notfoundHashes } = hashes.reduce<{ foundPayloads: Payload[]; notfoundHashes: string[] }>(\n (prev, hash) => {\n const found = map[hash]\n if (found) {\n //TODO: Find a better way to scrub meta data without scrubbing _signatures\n if (found.schema === BoundWitnessSchema) {\n prev.foundPayloads.push({ ...PayloadHasher.hashFields(found), ...{ _signatures: (found as BoundWitness)._signatures } } as BoundWitness)\n } else {\n prev.foundPayloads.push({ ...PayloadHasher.hashFields(found) } as Payload)\n }\n } else {\n prev.notfoundHashes.push(hash)\n }\n return prev\n },\n { foundPayloads: [], notfoundHashes: [] },\n )\n\n const [parentFoundPayloads] = await this.getFromParents(notfoundHashes)\n\n if (this.storeParentReads) {\n await this.insertWithConfig(parentFoundPayloads)\n }\n return [...foundPayloads, ...parentFoundPayloads]\n }\n\n protected head(): Promisable<Payload | undefined> {\n return this._lastInsertedPayload\n }\n\n protected insertHandler(_payloads: Payload[]): Promise<Payload[]> {\n throw Error('Not implemented')\n }\n\n protected async insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<Payload[]> {\n const emitEvents = config?.emitEvents ?? true\n const writeToParents = config?.writeToParents ?? true\n\n const insertedPayloads = await this.insertHandler(payloads)\n\n if (writeToParents) {\n await this.writeToParents(insertedPayloads)\n }\n if (emitEvents) {\n await this.emit('inserted', { module: this, payloads: insertedPayloads })\n }\n\n return insertedPayloads\n }\n\n protected async parents() {\n this._parents = this._parents ?? {\n commit: await this.resolveArchivists(this.config?.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._parents)\n }\n\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 wrappedQuery = QueryBoundWitnessWrapper.parseQuery<ArchivistQuery>(query, payloads)\n const queryPayload = await wrappedQuery.getQuery()\n assertEx(this.queryable(query, payloads, queryConfig))\n const resultPayloads: Payload[] = []\n if (this.config.storeQueries) {\n await this.insertHandler([query])\n }\n\n switch (queryPayload.schema) {\n case ArchivistAllQuerySchema:\n resultPayloads.push(...(await this.allHandler()))\n break\n case ArchivistClearQuerySchema:\n await this.clearHandler()\n break\n case ArchivistCommitQuerySchema:\n resultPayloads.push(...(await this.commitHandler()))\n break\n case ArchivistDeleteQuerySchema: {\n const resultPayload: ArchivistDeleteQuery = {\n hashes: [...(await this.deleteWithConfig(queryPayload.hashes))],\n schema: ArchivistDeleteQuerySchema,\n }\n resultPayloads.push(resultPayload)\n break\n }\n case ArchivistGetQuerySchema:\n if (queryPayload.hashes?.length) {\n resultPayloads.push(...(await this.getWithConfig(queryPayload.hashes)))\n } else {\n const head = await this.head()\n if (head) resultPayloads.push(head)\n }\n break\n case ArchivistInsertQuerySchema: {\n const payloads = await wrappedQuery.getPayloads()\n assertEx(await wrappedQuery.getPayloads(), `Missing payloads: ${JSON.stringify(wrappedQuery.payload(), null, 2)}`)\n const resolvedPayloads = await PayloadWrapper.filterExclude(payloads, await wrappedQuery.hashAsync())\n assertEx(resolvedPayloads.length === payloads.length, `Could not find some passed hashes [${resolvedPayloads.length} != ${payloads.length}]`)\n resultPayloads.push(...(await this.insertWithConfig(payloads)))\n // NOTE: There isn't an exact equivalence between what we get and what we store. Once\n // we move to returning only inserted Payloads(/hash) instead of a BoundWitness, we\n // can grab the actual last one\n this._lastInsertedPayload = resolvedPayloads[resolvedPayloads.length - 1]\n break\n }\n default:\n return await super.queryHandler(query, payloads)\n }\n return resultPayloads\n }\n\n protected async writeToParent(parent: ArchivistInstance, payloads: Payload[]) {\n return await parent.insert(payloads)\n }\n\n protected async writeToParents(payloads: Payload[]): Promise<Payload[]> {\n const parents = await this.parents()\n return compact(\n await Promise.all(\n Object.values(parents.write ?? {}).map(async (parent) => {\n return parent ? await this.writeToParent(parent, payloads) : undefined\n }),\n ),\n ).flat()\n }\n\n private async resolveArchivists(archivists: string[] = []) {\n const archivistModules = [...(await this.resolve({ address: archivists })), ...(await this.resolve({ name: archivists }))].filter(\n duplicateModules,\n )\n\n assertEx(\n !this.requireAllParents || archivistModules.length === archivists.length,\n `Failed to find some archivists (set allRequired to false if ok): [${archivists.filter((archivist) =>\n archivistModules.map((module) => !(module.address === archivist || module.config.name === archivist)),\n )}]`,\n )\n\n return archivistModules.reduce<Record<string, ArchivistInstance>>((prev, module) => {\n prev[module.address] = asArchivistInstance(module, () => {\n isArchivistInstance(module, { log: console })\n return `Unable to cast resolved module to an archivist: [${module.address}, ${module.config.name}, ${module.config.schema})}]`\n })\n\n return prev\n }, {})\n }\n}\n"],"mappings":"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","names":["payloads"]}
1
+ {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export * from './AbstractArchivist'\n"],"mappings":"AAAA,cAAc;","names":[]}