@xyo-network/archivist-abstract 2.84.5 → 2.84.7

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/AbstractArchivist.ts"],"sourcesContent":["export * from './AbstractArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable, PromisableArray } from '@xylabs/promise'\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 { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { BoundWitness, BoundWitnessSchema, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { duplicateModules, ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\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","module"]}
1
+ {"version":3,"sources":["../../src/AbstractArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable, PromisableArray } from '@xylabs/promise'\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 { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { BoundWitness, BoundWitnessSchema, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { duplicateModules, ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\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 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: string[]): PromisableArray<string> {\n throw new 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 = 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: 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 new 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 // eslint-disable-next-line unicorn/no-array-reduce\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 new 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 }\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 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 }\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.at(-1)\n break\n }\n default: {\n return await super.queryHandler(query, payloads)\n }\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 // eslint-disable-next-line unicorn/no-array-reduce\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"]}
package/package.json CHANGED
@@ -13,22 +13,21 @@
13
13
  "@xylabs/assert": "^2.13.20",
14
14
  "@xylabs/lodash": "^2.13.20",
15
15
  "@xylabs/promise": "^2.13.20",
16
- "@xyo-network/archivist-model": "~2.84.5",
17
- "@xyo-network/boundwitness-builder": "~2.84.5",
18
- "@xyo-network/boundwitness-model": "~2.84.5",
19
- "@xyo-network/hash": "~2.84.5",
20
- "@xyo-network/module-abstract": "~2.84.5",
21
- "@xyo-network/module-model": "~2.84.5",
22
- "@xyo-network/payload-model": "~2.84.5",
23
- "@xyo-network/payload-wrapper": "~2.84.5"
16
+ "@xyo-network/archivist-model": "~2.84.7",
17
+ "@xyo-network/boundwitness-builder": "~2.84.7",
18
+ "@xyo-network/boundwitness-model": "~2.84.7",
19
+ "@xyo-network/hash": "~2.84.7",
20
+ "@xyo-network/module-abstract": "~2.84.7",
21
+ "@xyo-network/module-model": "~2.84.7",
22
+ "@xyo-network/payload-model": "~2.84.7",
23
+ "@xyo-network/payload-wrapper": "~2.84.7"
24
24
  },
25
25
  "devDependencies": {
26
- "@xylabs/ts-scripts-yarn3": "^3.2.19",
27
- "@xylabs/tsconfig": "^3.2.19",
26
+ "@xylabs/ts-scripts-yarn3": "^3.2.24",
27
+ "@xylabs/tsconfig": "^3.2.24",
28
28
  "typescript": "^5.3.3"
29
29
  },
30
30
  "description": "Primary SDK for using XYO Protocol 2.0",
31
- "docs": "dist/docs.json",
32
31
  "exports": {
33
32
  ".": {
34
33
  "browser": {
@@ -43,19 +42,19 @@
43
42
  },
44
43
  "node": {
45
44
  "require": {
46
- "types": "./dist/node/index.d.ts",
47
- "default": "./dist/node/index.js"
45
+ "types": "./dist/node/index.d.cts",
46
+ "default": "./dist/node/index.cjs"
48
47
  },
49
48
  "import": {
50
49
  "types": "./dist/node/index.d.mts",
51
- "default": "./dist/node/index.mjs"
50
+ "default": "./dist/node/index.js"
52
51
  }
53
52
  }
54
53
  },
55
54
  "./package.json": "./package.json"
56
55
  },
57
- "main": "dist/node/index.js",
58
- "module": "dist/node/index.mjs",
56
+ "main": "dist/node/index.cjs",
57
+ "module": "dist/node/index.js",
59
58
  "homepage": "https://xyo.network",
60
59
  "license": "LGPL-3.0-only",
61
60
  "publishConfig": {
@@ -67,5 +66,6 @@
67
66
  },
68
67
  "sideEffects": false,
69
68
  "types": "dist/node/index.d.ts",
70
- "version": "2.84.5"
69
+ "version": "2.84.7",
70
+ "type": "module"
71
71
  }
@@ -121,19 +121,19 @@ export abstract class AbstractArchivist<
121
121
  }
122
122
 
123
123
  protected allHandler(): PromisableArray<Payload> {
124
- throw Error('Not implemented')
124
+ throw new Error('Not implemented')
125
125
  }
126
126
 
127
127
  protected clearHandler(): Promisable<void> {
128
- throw Error('Not implemented')
128
+ throw new Error('Not implemented')
129
129
  }
130
130
 
131
131
  protected commitHandler(): Promisable<BoundWitness[]> {
132
- throw Error('Not implemented')
132
+ throw new Error('Not implemented')
133
133
  }
134
134
 
135
135
  protected deleteHandler(_hashes: string[]): PromisableArray<string> {
136
- throw Error('Not implemented')
136
+ throw new Error('Not implemented')
137
137
  }
138
138
 
139
139
  protected async deleteWithConfig(hashes: string[], config?: ActionConfig): Promise<string[]> {
@@ -162,10 +162,10 @@ export abstract class AbstractArchivist<
162
162
  return askedFor
163
163
  })
164
164
 
165
- const foundHashes = foundPairs.map(([hash]) => hash)
165
+ const foundHashes = new Set(foundPairs.map(([hash]) => hash))
166
166
  const foundPayloads = foundPairs.map(([, payload]) => payload)
167
167
 
168
- const notfound = hashes.filter((hash) => !foundHashes.includes(hash))
168
+ const notfound = hashes.filter((hash) => !foundHashes.has(hash))
169
169
  return [foundPayloads, notfound]
170
170
  }
171
171
 
@@ -186,7 +186,7 @@ export abstract class AbstractArchivist<
186
186
  }
187
187
 
188
188
  protected getHandler(_hashes: string[]): Promisable<Payload[]> {
189
- throw Error('Not implemented')
189
+ throw new Error('Not implemented')
190
190
  }
191
191
 
192
192
  protected async getWithConfig(hashes: string[], config?: InsertConfig): Promise<Payload[]> {
@@ -194,13 +194,14 @@ export abstract class AbstractArchivist<
194
194
  const emitEvents = config?.emitEvents ?? true
195
195
  const map = await PayloadWrapper.toMap(await this.getHandler(hashes))
196
196
 
197
+ // eslint-disable-next-line unicorn/no-array-reduce
197
198
  const { foundPayloads, notfoundHashes } = hashes.reduce<{ foundPayloads: Payload[]; notfoundHashes: string[] }>(
198
199
  (prev, hash) => {
199
200
  const found = map[hash]
200
201
  if (found) {
201
202
  //TODO: Find a better way to scrub meta data without scrubbing _signatures
202
203
  if (found.schema === BoundWitnessSchema) {
203
- prev.foundPayloads.push({ ...PayloadHasher.hashFields(found), ...{ _signatures: (found as BoundWitness)._signatures } } as BoundWitness)
204
+ prev.foundPayloads.push({ ...PayloadHasher.hashFields(found), _signatures: (found as BoundWitness)._signatures } as BoundWitness)
204
205
  } else {
205
206
  prev.foundPayloads.push({ ...PayloadHasher.hashFields(found) } as Payload)
206
207
  }
@@ -225,7 +226,7 @@ export abstract class AbstractArchivist<
225
226
  }
226
227
 
227
228
  protected insertHandler(_payloads: Payload[]): Promise<Payload[]> {
228
- throw Error('Not implemented')
229
+ throw new Error('Not implemented')
229
230
  }
230
231
 
231
232
  protected async insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<Payload[]> {
@@ -267,15 +268,18 @@ export abstract class AbstractArchivist<
267
268
  }
268
269
 
269
270
  switch (queryPayload.schema) {
270
- case ArchivistAllQuerySchema:
271
+ case ArchivistAllQuerySchema: {
271
272
  resultPayloads.push(...(await this.allHandler()))
272
273
  break
273
- case ArchivistClearQuerySchema:
274
+ }
275
+ case ArchivistClearQuerySchema: {
274
276
  await this.clearHandler()
275
277
  break
276
- case ArchivistCommitQuerySchema:
278
+ }
279
+ case ArchivistCommitQuerySchema: {
277
280
  resultPayloads.push(...(await this.commitHandler()))
278
281
  break
282
+ }
279
283
  case ArchivistDeleteQuerySchema: {
280
284
  const resultPayload: ArchivistDeleteQuery = {
281
285
  hashes: [...(await this.deleteWithConfig(queryPayload.hashes))],
@@ -284,7 +288,7 @@ export abstract class AbstractArchivist<
284
288
  resultPayloads.push(resultPayload)
285
289
  break
286
290
  }
287
- case ArchivistGetQuerySchema:
291
+ case ArchivistGetQuerySchema: {
288
292
  if (queryPayload.hashes?.length) {
289
293
  resultPayloads.push(...(await this.getWithConfig(queryPayload.hashes)))
290
294
  } else {
@@ -292,6 +296,7 @@ export abstract class AbstractArchivist<
292
296
  if (head) resultPayloads.push(head)
293
297
  }
294
298
  break
299
+ }
295
300
  case ArchivistInsertQuerySchema: {
296
301
  const payloads = await wrappedQuery.getPayloads()
297
302
  assertEx(await wrappedQuery.getPayloads(), `Missing payloads: ${JSON.stringify(wrappedQuery.payload(), null, 2)}`)
@@ -301,11 +306,12 @@ export abstract class AbstractArchivist<
301
306
  // NOTE: There isn't an exact equivalence between what we get and what we store. Once
302
307
  // we move to returning only inserted Payloads(/hash) instead of a BoundWitness, we
303
308
  // can grab the actual last one
304
- this._lastInsertedPayload = resolvedPayloads[resolvedPayloads.length - 1]
309
+ this._lastInsertedPayload = resolvedPayloads.at(-1)
305
310
  break
306
311
  }
307
- default:
312
+ default: {
308
313
  return await super.queryHandler(query, payloads)
314
+ }
309
315
  }
310
316
  return resultPayloads
311
317
  }
@@ -337,6 +343,7 @@ export abstract class AbstractArchivist<
337
343
  )}]`,
338
344
  )
339
345
 
346
+ // eslint-disable-next-line unicorn/no-array-reduce
340
347
  return archivistModules.reduce<Record<string, ArchivistInstance>>((prev, module) => {
341
348
  prev[module.address] = asArchivistInstance(module, () => {
342
349
  isArchivistInstance(module, { log: console })
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/AbstractArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable, PromisableArray } from '@xylabs/promise'\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 { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { BoundWitness, BoundWitnessSchema, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { duplicateModules, ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\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"]}