@xyo-network/archivist-abstract 2.91.0 → 2.91.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.
Files changed (35) hide show
  1. package/dist/browser/AbstractArchivist.d.cts +12 -9
  2. package/dist/browser/AbstractArchivist.d.cts.map +1 -1
  3. package/dist/browser/AbstractArchivist.d.mts +12 -9
  4. package/dist/browser/AbstractArchivist.d.mts.map +1 -1
  5. package/dist/browser/AbstractArchivist.d.ts +12 -9
  6. package/dist/browser/AbstractArchivist.d.ts.map +1 -1
  7. package/dist/browser/StorageMeta.d.cts +2 -1
  8. package/dist/browser/StorageMeta.d.cts.map +1 -1
  9. package/dist/browser/StorageMeta.d.mts +2 -1
  10. package/dist/browser/StorageMeta.d.mts.map +1 -1
  11. package/dist/browser/StorageMeta.d.ts +2 -1
  12. package/dist/browser/StorageMeta.d.ts.map +1 -1
  13. package/dist/browser/index.cjs +50 -21
  14. package/dist/browser/index.cjs.map +1 -1
  15. package/dist/browser/index.js +50 -21
  16. package/dist/browser/index.js.map +1 -1
  17. package/dist/node/AbstractArchivist.d.cts +12 -9
  18. package/dist/node/AbstractArchivist.d.cts.map +1 -1
  19. package/dist/node/AbstractArchivist.d.mts +12 -9
  20. package/dist/node/AbstractArchivist.d.mts.map +1 -1
  21. package/dist/node/AbstractArchivist.d.ts +12 -9
  22. package/dist/node/AbstractArchivist.d.ts.map +1 -1
  23. package/dist/node/StorageMeta.d.cts +2 -1
  24. package/dist/node/StorageMeta.d.cts.map +1 -1
  25. package/dist/node/StorageMeta.d.mts +2 -1
  26. package/dist/node/StorageMeta.d.mts.map +1 -1
  27. package/dist/node/StorageMeta.d.ts +2 -1
  28. package/dist/node/StorageMeta.d.ts.map +1 -1
  29. package/dist/node/index.cjs +50 -21
  30. package/dist/node/index.cjs.map +1 -1
  31. package/dist/node/index.js +50 -21
  32. package/dist/node/index.js.map +1 -1
  33. package/package.json +13 -12
  34. package/src/AbstractArchivist.ts +73 -32
  35. package/src/StorageMeta.ts +7 -3
@@ -33,6 +33,7 @@ module.exports = __toCommonJS(src_exports);
33
33
  // src/AbstractArchivist.ts
34
34
  var import_assert = require("@xylabs/assert");
35
35
  var import_lodash = require("@xylabs/lodash");
36
+ var import_set = require("@xylabs/set");
36
37
  var import_archivist_model = require("@xyo-network/archivist-model");
37
38
  var import_boundwitness_wrapper = require("@xyo-network/boundwitness-wrapper");
38
39
  var import_module_abstract = require("@xyo-network/module-abstract");
@@ -57,7 +58,8 @@ var _AbstractArchivist = class _AbstractArchivist extends import_module_abstract
57
58
  "network.xyo.query.archivist.commit": "1/3",
58
59
  "network.xyo.query.archivist.delete": "1/4",
59
60
  "network.xyo.query.archivist.get": "1/5",
60
- "network.xyo.query.archivist.insert": "1/6"
61
+ "network.xyo.query.archivist.insert": "1/6",
62
+ "network.xyo.query.archivist.next": "1/7"
61
63
  };
62
64
  }
63
65
  get storeParentReads() {
@@ -68,7 +70,7 @@ var _AbstractArchivist = class _AbstractArchivist extends import_module_abstract
68
70
  this._noOverride("all");
69
71
  return this.busy(async () => {
70
72
  await this.started("throw");
71
- return await this.allHandler();
73
+ return await import_payload_builder.PayloadBuilder.build(await this.allHandler());
72
74
  });
73
75
  }
74
76
  clear() {
@@ -96,7 +98,7 @@ var _AbstractArchivist = class _AbstractArchivist extends import_module_abstract
96
98
  this._noOverride("get");
97
99
  return await this.busy(async () => {
98
100
  await this.started("throw");
99
- return await this.getWithConfig(hashes);
101
+ return await import_payload_builder.PayloadBuilder.build(await this.getWithConfig(hashes));
100
102
  });
101
103
  }
102
104
  async insert(payloads) {
@@ -106,6 +108,13 @@ var _AbstractArchivist = class _AbstractArchivist extends import_module_abstract
106
108
  return await this.insertWithConfig(payloads);
107
109
  });
108
110
  }
111
+ async next(options) {
112
+ this._noOverride("next");
113
+ return await this.busy(async () => {
114
+ await this.started("throw");
115
+ return await this.nextWithConfig(options);
116
+ });
117
+ }
109
118
  allHandler() {
110
119
  throw new Error("Not implemented");
111
120
  }
@@ -170,29 +179,39 @@ var _AbstractArchivist = class _AbstractArchivist extends import_module_abstract
170
179
  getHandler(_hashes) {
171
180
  throw new Error("Not implemented");
172
181
  }
173
- async getWithConfig(hashes, config) {
174
- const emitEvents = (config == null ? void 0 : config.emitEvents) ?? true;
175
- const gotten = await this.getHandler(hashes);
176
- const map = await import_payload_builder.PayloadBuilder.toHashMap(gotten);
177
- const dataMap = await import_payload_builder.PayloadBuilder.toDataHashMap(gotten);
182
+ async getWithConfig(hashes, _config) {
183
+ const requestedHashes = new Set(hashes);
184
+ const gotten = await this.getHandler([
185
+ ...requestedHashes
186
+ ]);
178
187
  const foundPayloads = [];
179
- const notfoundHashes = [];
180
- for (const hash of hashes) {
181
- const found = map[hash] ?? dataMap[hash];
182
- if (found) {
183
- foundPayloads.push(await import_payload_builder.PayloadBuilder.build(found, true));
184
- } else {
185
- notfoundHashes.push(hash);
188
+ const foundHashes = /* @__PURE__ */ new Set();
189
+ for (const payload of gotten) {
190
+ const map = await import_payload_builder.PayloadBuilder.toAllHashMap([
191
+ payload
192
+ ]);
193
+ let requestedPayloadFound = false;
194
+ for (const [key, payload2] of Object.entries(map)) {
195
+ const hash = key;
196
+ if (requestedHashes.has(hash)) {
197
+ requestedPayloadFound = true;
198
+ foundHashes.add(hash);
199
+ }
200
+ if (requestedPayloadFound)
201
+ foundPayloads.push(payload2);
186
202
  }
187
203
  }
188
- const [parentFoundPayloads] = await this.getFromParents(notfoundHashes);
204
+ const notFoundHashes = [
205
+ ...(0, import_set.difference)(requestedHashes, foundHashes)
206
+ ];
207
+ const [parentFoundPayloads] = await this.getFromParents(notFoundHashes);
189
208
  if (this.storeParentReads) {
190
209
  await this.insertWithConfig(parentFoundPayloads);
191
210
  }
192
- return [
211
+ return await import_payload_builder.PayloadBuilder.build([
193
212
  ...foundPayloads,
194
213
  ...parentFoundPayloads
195
- ];
214
+ ]);
196
215
  }
197
216
  head() {
198
217
  return this._lastInsertedPayload;
@@ -213,7 +232,7 @@ var _AbstractArchivist = class _AbstractArchivist extends import_module_abstract
213
232
  async insertWithConfig(payloads, config) {
214
233
  const emitEvents = (config == null ? void 0 : config.emitEvents) ?? true;
215
234
  const writeToParents = (config == null ? void 0 : config.writeToParents) ?? true;
216
- const insertedPayloads = await this.insertHandler(await import_payload_builder.PayloadBuilder.build(payloads, true));
235
+ const insertedPayloads = await import_payload_builder.PayloadBuilder.build(await this.insertHandler(payloads), true);
217
236
  if (writeToParents) {
218
237
  await this.writeToParents(insertedPayloads);
219
238
  }
@@ -225,6 +244,13 @@ var _AbstractArchivist = class _AbstractArchivist extends import_module_abstract
225
244
  }
226
245
  return insertedPayloads;
227
246
  }
247
+ nextHandler(_options) {
248
+ throw new Error("Not implemented");
249
+ }
250
+ async nextWithConfig(options, _config) {
251
+ const foundPayloads = await this.nextHandler(options);
252
+ return await import_payload_builder.PayloadBuilder.build(foundPayloads);
253
+ }
228
254
  async parents() {
229
255
  var _a, _b, _c, _d, _e, _f;
230
256
  this._parents = this._parents ?? {
@@ -341,12 +367,15 @@ var addStorageMeta = /* @__PURE__ */ __name((payload, index = 0) => {
341
367
  _sequence: sequenceNumber(index)
342
368
  };
343
369
  }, "addStorageMeta");
344
- var sortByStorageMeta = /* @__PURE__ */ __name((payloads) => {
345
- return payloads.sort((a, b) => a._sequence < b._sequence ? -1 : a._sequence > b._sequence ? 1 : 0);
370
+ var sortByStorageMeta = /* @__PURE__ */ __name((payloads, direction = 1) => {
371
+ return payloads.sort((a, b) => a._sequence < b._sequence ? -direction : a._sequence > b._sequence ? direction : 0);
346
372
  }, "sortByStorageMeta");
347
373
  function removeStorageMeta(payload) {
348
374
  if (!payload)
349
375
  return;
376
+ if (Array.isArray(payload)) {
377
+ return payload.map((p) => removeStorageMeta(p));
378
+ }
350
379
  const { _sequence, ...noMeta } = payload;
351
380
  return noMeta;
352
381
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/AbstractArchivist.ts","../../src/StorageMeta.ts"],"sourcesContent":["export * from './AbstractArchivist'\nexport * from './StorageMeta'\n","import { assertEx } from '@xylabs/assert'\nimport { Address, Hash } from '@xylabs/hex'\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 { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { duplicateModules, ModuleConfig, ModuleIdentifier, ModuleName, ModuleQueryHandlerResult } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta, WithMeta } from '@xyo-network/payload-model'\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, TEventData, Payload>\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 ?? false\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<WithMeta<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<WithMeta<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: Hash[]): 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: Hash[]): Promise<WithMeta<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<WithMeta<Payload>[]> {\n this._noOverride('insert')\n return await this.busy(async () => {\n await this.started('throw')\n //make sure all incoming payloads have proper $hash and $meta\n return await this.insertWithConfig(payloads)\n })\n }\n\n protected allHandler(): PromisableArray<WithMeta<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<WithMeta<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: Hash[], archivist: ArchivistInstance): Promise<[WithMeta<Payload>[], Hash[]]> {\n const foundPairs = (await PayloadBuilder.dataHashPairs((await archivist.get(hashes)) as WithMeta<Payload>[])).filter(([, hash]) => {\n const askedFor = hashes.includes(hash)\n if (!askedFor) {\n console.warn(`Parent returned payload with hash not asked for: ${hash}`)\n //throw Error(`Parent returned payload with hash not asked for: ${hash}`)\n }\n return askedFor\n })\n\n const foundHashes = new Set(foundPairs.map(([, hash]) => hash))\n const foundPayloads = foundPairs.map(([payload]) => payload)\n\n const notfound = hashes.filter((hash) => !foundHashes.has(hash))\n return [foundPayloads, notfound]\n }\n\n protected async getFromParents(hashes: Hash[]): Promise<[WithMeta<Payload>[], string[]]> {\n const parents = Object.values((await this.parents())?.read ?? {})\n let remainingHashes = [...hashes]\n let parentIndex = 0\n let result: WithMeta<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: Hash[]): Promisable<Payload[]> {\n throw new Error('Not implemented')\n }\n\n protected async getWithConfig(hashes: Hash[], config?: InsertConfig): Promise<WithMeta<Payload>[]> {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const emitEvents = config?.emitEvents ?? true\n const gotten = await this.getHandler(hashes)\n const map = await PayloadBuilder.toHashMap(gotten)\n const dataMap = await PayloadBuilder.toDataHashMap(gotten)\n\n const foundPayloads: WithMeta<Payload>[] = []\n const notfoundHashes: Hash[] = []\n for (const hash of hashes) {\n const found = map[hash] ?? dataMap[hash]\n if (found) {\n foundPayloads.push(await PayloadBuilder.build<Payload>(found, true))\n } else {\n notfoundHashes.push(hash)\n }\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: WithMeta<Payload>[]): Promise<WithMeta<Payload>[]> {\n throw new Error('Not implemented')\n }\n\n protected async insertQueryHandler<T extends QueryBoundWitnessWrapper = QueryBoundWitnessWrapper>(query: T, payloads?: Payload[]) {\n assertEx(payloads, () => `Missing payloads: ${JSON.stringify(query.payload, null, 2)}`)\n const resolvedPayloads = await PayloadBuilder.filterIncludeByDataHash(payloads, query.payloadHashes)\n assertEx(\n resolvedPayloads.length === query.payloadHashes.length,\n () => `Could not find some passed hashes [${resolvedPayloads.length} != ${query.payloadHashes.length}]`,\n )\n const queryPayload = await query.getQuery()\n const payloadsWithoutQuery = await PayloadBuilder.filterExclude(resolvedPayloads, await PayloadBuilder.dataHash(queryPayload))\n const result = await this.insertWithConfig(payloadsWithoutQuery)\n // 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 return result\n }\n\n protected async insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<WithMeta<Payload>[]> {\n const emitEvents = config?.emitEvents ?? true\n const writeToParents = config?.writeToParents ?? true\n\n const insertedPayloads = await this.insertHandler(await PayloadBuilder.build(payloads, true))\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 = await QueryBoundWitnessWrapper.parseQuery<ArchivistQuery>(query, payloads)\n const builtQuery = await PayloadBuilder.build(query, true)\n const queryPayload = await wrappedQuery.getQuery()\n assertEx(await this.queryable(query, payloads, queryConfig))\n const resultPayloads: Payload[] = []\n\n switch (queryPayload.schema) {\n case ArchivistAllQuerySchema: {\n resultPayloads.push(...(await this.allHandler()))\n break\n }\n case ArchivistClearQuerySchema: {\n await this.clearHandler()\n break\n }\n case ArchivistCommitQuerySchema: {\n resultPayloads.push(...(await this.commitHandler()))\n break\n }\n case ArchivistDeleteQuerySchema: {\n const 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 resultPayloads.push(...(await this.insertQueryHandler(wrappedQuery, payloads)))\n break\n }\n default: {\n const result = await super.queryHandler(query, payloads)\n if (this.config.storeQueries) {\n await this.insertHandler([builtQuery])\n }\n return result\n }\n }\n if (this.config.storeQueries) {\n await this.insertHandler([builtQuery])\n }\n return resultPayloads\n }\n\n protected async writeToParent(parent: ArchivistInstance, payloads: Payload[]): Promise<PayloadWithMeta[]> {\n return await parent.insert(payloads)\n }\n\n protected async writeToParents(payloads: Payload[]): Promise<PayloadWithMeta[]> {\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: ModuleIdentifier[] = []) {\n const archivistModules = [\n ...(await this.resolve({ address: archivists as Address[] })),\n ...(await this.resolve({ name: archivists as ModuleName[] })),\n ].filter(duplicateModules)\n\n assertEx(\n !this.requireAllParents || archivistModules.length === archivists.length,\n () =>\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","import { assertEx } from '@xylabs/assert'\nimport { Payload, PayloadWithMeta } from '@xyo-network/payload-model'\n\nexport type WithStorageMeta<T extends Payload> = T & {\n _sequence: bigint\n}\n\nexport const maxSequenceIndex = 10_000_000_000n\n\nexport const sequenceNumber = (index: number) => {\n assertEx(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`)\n return BigInt(Date.now()) * maxSequenceIndex + BigInt(index)\n}\n\nexport const addStorageMeta = <T extends PayloadWithMeta>(payload: T, index = 0) => {\n return { ...payload, _sequence: sequenceNumber(index) } as WithStorageMeta<T>\n}\n\nexport const sortByStorageMeta = <T extends PayloadWithMeta>(payloads: WithStorageMeta<T>[]) => {\n return payloads.sort((a, b) =>\n a._sequence < b._sequence ? -1\n : a._sequence > b._sequence ? 1\n : 0,\n )\n}\n\nexport function removeStorageMeta<T extends PayloadWithMeta>(payload: WithStorageMeta<T>): T\nexport function removeStorageMeta<T extends PayloadWithMeta>(payload?: WithStorageMeta<T>): T | undefined\nexport function removeStorageMeta<T extends PayloadWithMeta>(payload?: WithStorageMeta<T>) {\n if (!payload) return\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { _sequence, ...noMeta } = payload as WithStorageMeta<T>\n return noMeta as T\n}\n"],"mappings":"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","names":["AbstractArchivist","AbstractModuleInstance","_lastInsertedPayload","_parents","queries","ArchivistGetQuerySchema","requireAllParents","config","_queryAccountPaths","storeParentReads","all","_noOverride","busy","started","allHandler","clear","clearHandler","commit","commitHandler","delete","hashes","deleteWithConfig","get","getWithConfig","insert","payloads","insertWithConfig","Error","deleteHandler","_hashes","emitEvents","deletedHashes","emit","module","getFromParent","archivist","foundPairs","PayloadBuilder","dataHashPairs","filter","hash","askedFor","includes","console","warn","foundHashes","Set","map","foundPayloads","payload","notfound","has","getFromParents","parents","Object","values","read","remainingHashes","parentIndex","result","length","found","getHandler","gotten","toHashMap","dataMap","toDataHashMap","notfoundHashes","push","build","parentFoundPayloads","head","insertHandler","_payloads","insertQueryHandler","query","assertEx","JSON","stringify","resolvedPayloads","filterIncludeByDataHash","payloadHashes","queryPayload","getQuery","payloadsWithoutQuery","filterExclude","dataHash","at","writeToParents","insertedPayloads","resolveArchivists","write","queryHandler","queryConfig","wrappedQuery","QueryBoundWitnessWrapper","parseQuery","builtQuery","queryable","resultPayloads","schema","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistDeleteQuerySchema","resultPayload","ArchivistInsertQuerySchema","storeQueries","writeToParent","parent","compact","Promise","undefined","flat","archivists","archivistModules","resolve","address","name","duplicateModules","reduce","prev","asArchivistInstance","isArchivistInstance","log","import_assert","maxSequenceIndex","sequenceNumber","index","assertEx","BigInt","Date","now","addStorageMeta","payload","_sequence","sortByStorageMeta","payloads","sort","a","b","removeStorageMeta","noMeta"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/AbstractArchivist.ts","../../src/StorageMeta.ts"],"sourcesContent":["export * from './AbstractArchivist'\nexport * from './StorageMeta'\n","import { assertEx } from '@xylabs/assert'\nimport { Address, Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable, PromisableArray } from '@xylabs/promise'\nimport { difference } from '@xylabs/set'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistDeleteQuery,\n ArchivistDeleteQuerySchema,\n ArchivistGetQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistParams,\n ArchivistQueries,\n asArchivistInstance,\n isArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { duplicateModules, ModuleConfig, ModuleIdentifier, ModuleName, ModuleQueryHandlerResult } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta, WithMeta } from '@xyo-network/payload-model'\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, TEventData, Payload>\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 ?? false\n }\n\n protected override get _queryAccountPaths(): Record<ArchivistQueries['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 'network.xyo.query.archivist.next': '1/7',\n }\n }\n\n protected get storeParentReads() {\n return !!this.config?.storeParentReads\n }\n\n all(): PromisableArray<WithMeta<Payload>> {\n this._noOverride('all')\n return this.busy(async () => {\n await this.started('throw')\n return await PayloadBuilder.build(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<WithMeta<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: Hash[]): Promise<Hash[]> {\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: Hash[]): Promise<WithMeta<Payload>[]> {\n this._noOverride('get')\n return await this.busy(async () => {\n await this.started('throw')\n return await PayloadBuilder.build(await this.getWithConfig(hashes))\n })\n }\n\n async insert(payloads: Payload[]): Promise<WithMeta<Payload>[]> {\n this._noOverride('insert')\n return await this.busy(async () => {\n await this.started('throw')\n //make sure all incoming payloads have proper $hash and $meta\n return await this.insertWithConfig(payloads)\n })\n }\n\n async next?(options?: ArchivistNextOptions): Promise<WithMeta<Payload>[]> {\n this._noOverride('next')\n return await this.busy(async () => {\n await this.started('throw')\n return await this.nextWithConfig(options)\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<WithMeta<BoundWitness>[]> {\n throw new Error('Not implemented')\n }\n\n protected deleteHandler(_hashes: Hash[]): PromisableArray<Hash> {\n throw new Error('Not implemented')\n }\n\n protected async deleteWithConfig(hashes: Hash[], config?: ActionConfig): Promise<Hash[]> {\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: Hash[], archivist: ArchivistInstance): Promise<[WithMeta<Payload>[], Hash[]]> {\n const foundPairs = (await PayloadBuilder.dataHashPairs((await archivist.get(hashes)) as WithMeta<Payload>[])).filter(([, hash]) => {\n const askedFor = hashes.includes(hash)\n if (!askedFor) {\n console.warn(`Parent returned payload with hash not asked for: ${hash}`)\n //throw Error(`Parent returned payload with hash not asked for: ${hash}`)\n }\n return askedFor\n })\n\n const foundHashes = new Set(foundPairs.map(([, hash]) => hash))\n const foundPayloads = foundPairs.map(([payload]) => payload)\n\n const notfound = hashes.filter((hash) => !foundHashes.has(hash))\n return [foundPayloads, notfound]\n }\n\n protected async getFromParents(hashes: Hash[]): Promise<[WithMeta<Payload>[], Hash[]]> {\n const parents = Object.values((await this.parents())?.read ?? {})\n let remainingHashes = [...hashes]\n let parentIndex = 0\n let result: WithMeta<Payload>[] = []\n\n // NOTE: 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: Hash[]): Promisable<Payload[]> {\n throw new Error('Not implemented')\n }\n\n protected async getWithConfig(hashes: Hash[], _config?: InsertConfig): Promise<WithMeta<Payload>[]> {\n // Filter out duplicates\n const requestedHashes = new Set(hashes)\n\n // Attempt to find the payloads in the store\n const gotten = await this.getHandler([...requestedHashes])\n\n // Do not just blindly return what the archivist told us but\n // ensure to only return requested payloads and keep track of\n // the ones it did not find so we can ask the parents.\n const foundPayloads: PayloadWithMeta[] = []\n const foundHashes = new Set<Hash>()\n\n // NOTE: We are iterating over the returned result from the archivist\n // (not the array of hashes passed in) to preserve the natural order of the\n // hashes as returned by the archivist as that should loosely\n // correspond to the order when iterated and the symmetry will\n // be helpful for debugging\n for (const payload of gotten) {\n // Compute the hashes for this payload\n const map = await PayloadBuilder.toAllHashMap([payload])\n let requestedPayloadFound = false\n for (const [key, payload] of Object.entries(map)) {\n const hash = key as Hash // NOTE: Required cast as Object.entries always returns string keys\n // If this hash was requested\n if (requestedHashes.has(hash)) {\n // Indicate that we found it (but do not insert it yet). Since\n // one payload could satisfy two requested hashes (vit its dataHash\n // & rootHash) we only want to insert that payload once but we want\n // to keep track of all the hashes it satisfies so we can ask th\n // parents for the ones we did not find\n requestedPayloadFound = true\n // Add it to the list of found hashes\n foundHashes.add(hash)\n }\n if (requestedPayloadFound) foundPayloads.push(payload)\n }\n }\n // For all the hashes we did not find, ask the parents\n const notFoundHashes = [...difference(requestedHashes, foundHashes)]\n const [parentFoundPayloads] = await this.getFromParents(notFoundHashes)\n\n if (this.storeParentReads) {\n await this.insertWithConfig(parentFoundPayloads)\n }\n return await PayloadBuilder.build([...foundPayloads, ...parentFoundPayloads])\n }\n\n protected head(): Promisable<Payload | undefined> {\n return this._lastInsertedPayload\n }\n\n protected insertHandler(_payloads: Payload[]): Promise<WithMeta<Payload>[]> {\n throw new Error('Not implemented')\n }\n\n protected async insertQueryHandler<T extends QueryBoundWitnessWrapper = QueryBoundWitnessWrapper>(query: T, payloads?: Payload[]) {\n assertEx(payloads, () => `Missing payloads: ${JSON.stringify(query.payload, null, 2)}`)\n const resolvedPayloads = await PayloadBuilder.filterIncludeByDataHash(payloads, query.payloadHashes)\n assertEx(\n resolvedPayloads.length === query.payloadHashes.length,\n () => `Could not find some passed hashes [${resolvedPayloads.length} != ${query.payloadHashes.length}]`,\n )\n const queryPayload = await query.getQuery()\n const payloadsWithoutQuery = await PayloadBuilder.filterExclude(resolvedPayloads, await PayloadBuilder.dataHash(queryPayload))\n const result = await this.insertWithConfig(payloadsWithoutQuery)\n // 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 return result\n }\n\n protected async insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<WithMeta<Payload>[]> {\n const emitEvents = config?.emitEvents ?? true\n const writeToParents = config?.writeToParents ?? true\n\n const insertedPayloads = await PayloadBuilder.build(await this.insertHandler(payloads), true)\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 nextHandler(_options?: ArchivistNextOptions): Promisable<WithMeta<Payload>[]> {\n throw new Error('Not implemented')\n }\n\n protected async nextWithConfig(options?: ArchivistNextOptions, _config?: InsertConfig): Promise<WithMeta<Payload>[]> {\n const foundPayloads = await this.nextHandler(options)\n return await PayloadBuilder.build(foundPayloads)\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 = await QueryBoundWitnessWrapper.parseQuery<ArchivistQueries>(query, payloads)\n const builtQuery = await PayloadBuilder.build(query, true)\n const queryPayload = await wrappedQuery.getQuery()\n assertEx(await this.queryable(query, payloads, queryConfig))\n const resultPayloads: Payload[] = []\n\n switch (queryPayload.schema) {\n case ArchivistAllQuerySchema: {\n resultPayloads.push(...(await this.allHandler()))\n break\n }\n case ArchivistClearQuerySchema: {\n await this.clearHandler()\n break\n }\n case ArchivistCommitQuerySchema: {\n resultPayloads.push(...(await this.commitHandler()))\n break\n }\n case ArchivistDeleteQuerySchema: {\n const 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 resultPayloads.push(...(await this.insertQueryHandler(wrappedQuery, payloads)))\n break\n }\n default: {\n const result = await super.queryHandler(query, payloads)\n if (this.config.storeQueries) {\n await this.insertHandler([builtQuery])\n }\n return result\n }\n }\n if (this.config.storeQueries) {\n await this.insertHandler([builtQuery])\n }\n return resultPayloads\n }\n\n protected async writeToParent(parent: ArchivistInstance, payloads: Payload[]): Promise<PayloadWithMeta[]> {\n return await parent.insert(payloads)\n }\n\n protected async writeToParents(payloads: Payload[]): Promise<PayloadWithMeta[]> {\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: ModuleIdentifier[] = []) {\n const archivistModules = [\n ...(await this.resolve({ address: archivists as Address[] })),\n ...(await this.resolve({ name: archivists as ModuleName[] })),\n ].filter(duplicateModules)\n\n assertEx(\n !this.requireAllParents || archivistModules.length === archivists.length,\n () =>\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","import { assertEx } from '@xylabs/assert'\nimport { Payload, PayloadWithMeta } from '@xyo-network/payload-model'\n\nexport type WithStorageMeta<T extends Payload> = T & {\n _sequence: bigint\n}\n\nexport const maxSequenceIndex = 10_000_000_000n\n\nexport const sequenceNumber = (index: number) => {\n assertEx(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`)\n return BigInt(Date.now()) * maxSequenceIndex + BigInt(index)\n}\n\nexport const addStorageMeta = <T extends PayloadWithMeta>(payload: T, index = 0) => {\n return { ...payload, _sequence: sequenceNumber(index) } as WithStorageMeta<T>\n}\n\nexport const sortByStorageMeta = <T extends PayloadWithMeta>(payloads: WithStorageMeta<T>[], direction: -1 | 1 = 1) => {\n return payloads.sort((a, b) =>\n a._sequence < b._sequence ? -direction\n : a._sequence > b._sequence ? direction\n : 0,\n )\n}\n\nexport function removeStorageMeta<T extends PayloadWithMeta>(payload: WithStorageMeta<T>): T\nexport function removeStorageMeta<T extends PayloadWithMeta>(payloads: WithStorageMeta<T>[]): T[]\nexport function removeStorageMeta<T extends PayloadWithMeta>(payload?: WithStorageMeta<T>): T | undefined\nexport function removeStorageMeta<T extends PayloadWithMeta>(payload?: WithStorageMeta<T>) {\n if (!payload) return\n if (Array.isArray(payload)) {\n return payload.map((p) => removeStorageMeta(p))\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { _sequence, ...noMeta } = payload as WithStorageMeta<T>\n return noMeta as T\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;ACAA,oBAAyB;AAEzB,oBAAwB;AAExB,iBAA2B;AAC3B,6BAeO;AAEP,kCAAyC;AACzC,6BAAuC;AACvC,0BAAuG;AACvG,6BAA+B;AAiBxB,IAAeA,qBAAf,MAAeA,2BAIZC,8CAAAA;EAGAC;EACAC;EAER,IAAaC,UAAoB;AAC/B,WAAO;MAACC;SAA4B,MAAMD;;EAC5C;EAEA,IAAIE,oBAAoB;AACtB,WAAO,KAAKC,OAAOD,qBAAqB;EAC1C;EAEA,IAAuBE,qBAAiE;AACtF,WAAO;MACL,mCAAmC;MACnC,qCAAqC;MACrC,sCAAsC;MACtC,sCAAsC;MACtC,mCAAmC;MACnC,sCAAsC;MACtC,oCAAoC;IACtC;EACF;EAEA,IAAcC,mBAAmB;AAxEnC;AAyEI,WAAO,CAAC,GAAC,UAAKF,WAAL,mBAAaE;EACxB;EAEAC,MAA0C;AACxC,SAAKC,YAAY,KAAA;AACjB,WAAO,KAAKC,KAAK,YAAA;AACf,YAAM,KAAKC,QAAQ,OAAA;AACnB,aAAO,MAAMC,sCAAeC,MAAM,MAAM,KAAKC,WAAU,CAAA;IACzD,CAAA;EACF;EAEAC,QAA0B;AACxB,SAAKN,YAAY,OAAA;AACjB,WAAO,KAAKC,KAAK,YAAA;AACf,YAAM,KAAKC,QAAQ,OAAA;AACnB,aAAO,MAAM,KAAKK,aAAY;IAChC,CAAA;EACF;EAEAC,SAA+C;AAC7C,SAAKR,YAAY,QAAA;AACjB,WAAO,KAAKC,KAAK,YAAA;AACf,YAAM,KAAKC,QAAQ,OAAA;AACnB,aAAO,MAAM,KAAKO,cAAa;IACjC,CAAA;EACF;EAEA,MAAMC,OAAOC,QAAiC;AAC5C,SAAKX,YAAY,QAAA;AACjB,WAAO,MAAM,KAAKC,KAAK,YAAA;AACrB,YAAM,KAAKC,QAAQ,OAAA;AACnB,aAAO,MAAM,KAAKU,iBAAiBD,MAAAA;IACrC,CAAA;EACF;EAEA,MAAME,IAAIF,QAA8C;AACtD,SAAKX,YAAY,KAAA;AACjB,WAAO,MAAM,KAAKC,KAAK,YAAA;AACrB,YAAM,KAAKC,QAAQ,OAAA;AACnB,aAAO,MAAMC,sCAAeC,MAAM,MAAM,KAAKU,cAAcH,MAAAA,CAAAA;IAC7D,CAAA;EACF;EAEA,MAAMI,OAAOC,UAAmD;AAC9D,SAAKhB,YAAY,QAAA;AACjB,WAAO,MAAM,KAAKC,KAAK,YAAA;AACrB,YAAM,KAAKC,QAAQ,OAAA;AAEnB,aAAO,MAAM,KAAKe,iBAAiBD,QAAAA;IACrC,CAAA;EACF;EAEA,MAAME,KAAMC,SAA8D;AACxE,SAAKnB,YAAY,MAAA;AACjB,WAAO,MAAM,KAAKC,KAAK,YAAA;AACrB,YAAM,KAAKC,QAAQ,OAAA;AACnB,aAAO,MAAM,KAAKkB,eAAeD,OAAAA;IACnC,CAAA;EACF;EAEUd,aAAuC;AAC/C,UAAM,IAAIgB,MAAM,iBAAA;EAClB;EAEUd,eAAiC;AACzC,UAAM,IAAIc,MAAM,iBAAA;EAClB;EAEUZ,gBAAsD;AAC9D,UAAM,IAAIY,MAAM,iBAAA;EAClB;EAEUC,cAAcC,SAAwC;AAC9D,UAAM,IAAIF,MAAM,iBAAA;EAClB;EAEA,MAAgBT,iBAAiBD,QAAgBf,QAAwC;AACvF,UAAM4B,cAAa5B,iCAAQ4B,eAAc;AAEzC,UAAMC,gBAAgB,MAAM,KAAKH,cAAcX,MAAAA;AAE/C,QAAIa,YAAY;AACd,YAAM,KAAKE,KAAK,WAAW;QAAEf,QAAQc;QAAeE,QAAQ;MAAK,CAAA;IACnE;AAEA,WAAOF;EACT;EAEA,MAAgBG,cAAcjB,QAAgBkB,WAAsE;AAClH,UAAMC,cAAc,MAAM3B,sCAAe4B,cAAe,MAAMF,UAAUhB,IAAIF,MAAAA,CAAAA,GAAkCqB,OAAO,CAAC,CAAA,EAAGC,IAAAA,MAAK;AAC5H,YAAMC,WAAWvB,OAAOwB,SAASF,IAAAA;AACjC,UAAI,CAACC,UAAU;AACbE,gBAAQC,KAAK,oDAAoDJ,IAAAA,EAAM;MAEzE;AACA,aAAOC;IACT,CAAA;AAEA,UAAMI,cAAc,IAAIC,IAAIT,WAAWU,IAAI,CAAC,CAAA,EAAGP,IAAAA,MAAUA,IAAAA,CAAAA;AACzD,UAAMQ,gBAAgBX,WAAWU,IAAI,CAAC,CAACE,OAAAA,MAAaA,OAAAA;AAEpD,UAAMC,WAAWhC,OAAOqB,OAAO,CAACC,SAAS,CAACK,YAAYM,IAAIX,IAAAA,CAAAA;AAC1D,WAAO;MAACQ;MAAeE;;EACzB;EAEA,MAAgBE,eAAelC,QAAwD;AAlLzF;AAmLI,UAAMmC,UAAUC,OAAOC,SAAQ,WAAM,KAAKF,QAAO,MAAlB,mBAAuBG,SAAQ,CAAC,CAAA;AAC/D,QAAIC,kBAAkB;SAAIvC;;AAC1B,QAAIwC,cAAc;AAClB,QAAIC,SAA8B,CAAA;AAGlC,WAAOD,cAAcL,QAAQO,UAAUH,gBAAgBG,SAAS,GAAG;AACjE,YAAM,CAACC,OAAOX,QAAAA,IAAY,MAAM,KAAKf,cAAcsB,iBAAiBJ,QAAQK,WAAAA,CAAY;AACxFC,eAAS;WAAIA;WAAWE;;AACxBJ,wBAAkBP;AAClBQ;IACF;AACA,WAAO;MAACC;MAAQF;;EAClB;EAEUK,WAAWhC,SAAwC;AAC3D,UAAM,IAAIF,MAAM,iBAAA;EAClB;EAEA,MAAgBP,cAAcH,QAAgB6C,SAAsD;AAElG,UAAMC,kBAAkB,IAAIlB,IAAI5B,MAAAA;AAGhC,UAAM+C,SAAS,MAAM,KAAKH,WAAW;SAAIE;KAAgB;AAKzD,UAAMhB,gBAAmC,CAAA;AACzC,UAAMH,cAAc,oBAAIC,IAAAA;AAOxB,eAAWG,WAAWgB,QAAQ;AAE5B,YAAMlB,MAAM,MAAMrC,sCAAewD,aAAa;QAACjB;OAAQ;AACvD,UAAIkB,wBAAwB;AAC5B,iBAAW,CAACC,KAAKnB,QAAAA,KAAYK,OAAOe,QAAQtB,GAAAA,GAAM;AAChD,cAAMP,OAAO4B;AAEb,YAAIJ,gBAAgBb,IAAIX,IAAAA,GAAO;AAM7B2B,kCAAwB;AAExBtB,sBAAYyB,IAAI9B,IAAAA;QAClB;AACA,YAAI2B;AAAuBnB,wBAAcuB,KAAKtB,QAAAA;MAChD;IACF;AAEA,UAAMuB,iBAAiB;aAAIC,uBAAWT,iBAAiBnB,WAAAA;;AACvD,UAAM,CAAC6B,mBAAAA,IAAuB,MAAM,KAAKtB,eAAeoB,cAAAA;AAExD,QAAI,KAAKnE,kBAAkB;AACzB,YAAM,KAAKmB,iBAAiBkD,mBAAAA;IAC9B;AACA,WAAO,MAAMhE,sCAAeC,MAAM;SAAIqC;SAAkB0B;KAAoB;EAC9E;EAEUC,OAAwC;AAChD,WAAO,KAAK7E;EACd;EAEU8E,cAAcC,WAAoD;AAC1E,UAAM,IAAIjD,MAAM,iBAAA;EAClB;EAEA,MAAgBkD,mBAAkFC,OAAUxD,UAAsB;AAChIyD,gCAASzD,UAAU,MAAM,qBAAqB0D,KAAKC,UAAUH,MAAM9B,SAAS,MAAM,CAAA,CAAA,EAAI;AACtF,UAAMkC,mBAAmB,MAAMzE,sCAAe0E,wBAAwB7D,UAAUwD,MAAMM,aAAa;AACnGL,gCACEG,iBAAiBvB,WAAWmB,MAAMM,cAAczB,QAChD,MAAM,sCAAsCuB,iBAAiBvB,MAAM,OAAOmB,MAAMM,cAAczB,MAAM,GAAG;AAEzG,UAAM0B,eAAe,MAAMP,MAAMQ,SAAQ;AACzC,UAAMC,uBAAuB,MAAM9E,sCAAe+E,cAAcN,kBAAkB,MAAMzE,sCAAegF,SAASJ,YAAAA,CAAAA;AAChH,UAAM3B,SAAS,MAAM,KAAKnC,iBAAiBgE,oBAAAA;AAI3C,SAAK1F,uBAAuBqF,iBAAiBQ,GAAG,EAAC;AACjD,WAAOhC;EACT;EAEA,MAAgBnC,iBAAiBD,UAAqBpB,QAAqD;AACzG,UAAM4B,cAAa5B,iCAAQ4B,eAAc;AACzC,UAAM6D,kBAAiBzF,iCAAQyF,mBAAkB;AAEjD,UAAMC,mBAAmB,MAAMnF,sCAAeC,MAAM,MAAM,KAAKiE,cAAcrD,QAAAA,GAAW,IAAA;AAExF,QAAIqE,gBAAgB;AAClB,YAAM,KAAKA,eAAeC,gBAAAA;IAC5B;AACA,QAAI9D,YAAY;AACd,YAAM,KAAKE,KAAK,YAAY;QAAEC,QAAQ;QAAMX,UAAUsE;MAAiB,CAAA;IACzE;AAEA,WAAOA;EACT;EAEUC,YAAYC,UAAkE;AACtF,UAAM,IAAInE,MAAM,iBAAA;EAClB;EAEA,MAAgBD,eAAeD,SAAgCqC,SAAsD;AACnH,UAAMf,gBAAgB,MAAM,KAAK8C,YAAYpE,OAAAA;AAC7C,WAAO,MAAMhB,sCAAeC,MAAMqC,aAAAA;EACpC;EAEA,MAAgBK,UAAU;AAxS5B;AAySI,SAAKtD,WAAW,KAAKA,YAAY;MAC/BgB,QAAQ,MAAM,KAAKiF,mBAAkB,gBAAK7F,WAAL,mBAAakD,YAAb,mBAAsBtC,MAAAA;MAC3DyC,MAAM,MAAM,KAAKwC,mBAAkB,gBAAK7F,WAAL,mBAAakD,YAAb,mBAAsBG,IAAAA;MACzDyC,OAAO,MAAM,KAAKD,mBAAkB,gBAAK7F,WAAL,mBAAakD,YAAb,mBAAsB4C,KAAAA;IAC5D;AACA,eAAOjB,wBAAS,KAAKjF,QAAQ;EAC/B;EAEA,MAAyBmG,aACvBnB,OACAxD,UACA4E,aACmC;AArTvC;AAsTI,UAAMC,eAAe,MAAMC,qDAAyBC,WAA6BvB,OAAOxD,QAAAA;AACxF,UAAMgF,aAAa,MAAM7F,sCAAeC,MAAMoE,OAAO,IAAA;AACrD,UAAMO,eAAe,MAAMc,aAAab,SAAQ;AAChDP,gCAAS,MAAM,KAAKwB,UAAUzB,OAAOxD,UAAU4E,WAAAA,CAAAA;AAC/C,UAAMM,iBAA4B,CAAA;AAElC,YAAQnB,aAAaoB,QAAM;MACzB,KAAKC,gDAAyB;AAC5BF,uBAAelC,KAAI,GAAK,MAAM,KAAK3D,WAAU,CAAA;AAC7C;MACF;MACA,KAAKgG,kDAA2B;AAC9B,cAAM,KAAK9F,aAAY;AACvB;MACF;MACA,KAAK+F,mDAA4B;AAC/BJ,uBAAelC,KAAI,GAAK,MAAM,KAAKvD,cAAa,CAAA;AAChD;MACF;MACA,KAAK8F,mDAA4B;AAC/B,cAAMC,gBAAsC;UAC1C7F,QAAQ;eAAK,MAAM,KAAKC,iBAAiBmE,aAAapE,MAAM;;UAC5DwF,QAAQI;QACV;AACAL,uBAAelC,KAAKwC,aAAAA;AACpB;MACF;MACA,KAAK9G,gDAAyB;AAC5B,aAAIqF,kBAAapE,WAAboE,mBAAqB1B,QAAQ;AAC/B6C,yBAAelC,KAAI,GAAK,MAAM,KAAKlD,cAAciE,aAAapE,MAAM,CAAA;QACtE,OAAO;AACL,gBAAMyD,OAAO,MAAM,KAAKA,KAAI;AAC5B,cAAIA;AAAM8B,2BAAelC,KAAKI,IAAAA;QAChC;AACA;MACF;MACA,KAAKqC,mDAA4B;AAC/BP,uBAAelC,KAAI,GAAK,MAAM,KAAKO,mBAAmBsB,cAAc7E,QAAAA,CAAAA;AACpE;MACF;MACA,SAAS;AACP,cAAMoC,SAAS,MAAM,MAAMuC,aAAanB,OAAOxD,QAAAA;AAC/C,YAAI,KAAKpB,OAAO8G,cAAc;AAC5B,gBAAM,KAAKrC,cAAc;YAAC2B;WAAW;QACvC;AACA,eAAO5C;MACT;IACF;AACA,QAAI,KAAKxD,OAAO8G,cAAc;AAC5B,YAAM,KAAKrC,cAAc;QAAC2B;OAAW;IACvC;AACA,WAAOE;EACT;EAEA,MAAgBS,cAAcC,QAA2B5F,UAAiD;AACxG,WAAO,MAAM4F,OAAO7F,OAAOC,QAAAA;EAC7B;EAEA,MAAgBqE,eAAerE,UAAiD;AAC9E,UAAM8B,UAAU,MAAM,KAAKA,QAAO;AAClC,eAAO+D,uBACL,MAAMC,QAAQ/G,IACZgD,OAAOC,OAAOF,QAAQ4C,SAAS,CAAC,CAAA,EAAGlD,IAAI,OAAOoE,WAAAA;AAC5C,aAAOA,SAAS,MAAM,KAAKD,cAAcC,QAAQ5F,QAAAA,IAAY+F;IAC/D,CAAA,CAAA,CAAA,EAEFC,KAAI;EACR;EAEA,MAAcvB,kBAAkBwB,aAAiC,CAAA,GAAI;AACnE,UAAMC,mBAAmB;SACnB,MAAM,KAAKC,QAAQ;QAAEC,SAASH;MAAwB,CAAA;SACtD,MAAM,KAAKE,QAAQ;QAAEE,MAAMJ;MAA2B,CAAA;MAC1DjF,OAAOsF,oCAAAA;AAET7C,gCACE,CAAC,KAAK9E,qBAAqBuH,iBAAiB7D,WAAW4D,WAAW5D,QAClE,MACE,qEAAqE4D,WAAWjF,OAAO,CAACH,cACtFqF,iBAAiB1E,IAAI,CAACb,YAAW,EAAEA,QAAOyF,YAAYvF,aAAaF,QAAO/B,OAAOyH,SAASxF,UAAQ,CAAA,CAAA,GAChG;AAIR,WAAOqF,iBAAiBK,OAA0C,CAACC,MAAM7F,YAAAA;AACvE6F,WAAK7F,QAAOyF,OAAO,QAAIK,4CAAoB9F,SAAQ,MAAA;AACjD+F,wDAAoB/F,SAAQ;UAAEgG,KAAKvF;QAAQ,CAAA;AAC3C,eAAO,oDAAoDT,QAAOyF,OAAO,KAAKzF,QAAO/B,OAAOyH,IAAI,KAAK1F,QAAO/B,OAAOuG,MAAM;MAC3H,CAAA;AAEA,aAAOqB;IACT,GAAG,CAAC,CAAA;EACN;AACF;AArWUlI;AAJH,IAAeD,oBAAf;;;AC1CP,IAAAuI,iBAAyB;AAOlB,IAAMC,mBAAmB;AAEzB,IAAMC,iBAAiB,wBAACC,UAAAA;AAC7BC,+BAASD,QAAQF,kBAAkB,MAAM,gCAAgCA,gBAAAA,EAAkB;AAC3F,SAAOI,OAAOC,KAAKC,IAAG,CAAA,IAAMN,mBAAmBI,OAAOF,KAAAA;AACxD,GAH8B;AAKvB,IAAMK,iBAAiB,wBAA4BC,SAAYN,QAAQ,MAAC;AAC7E,SAAO;IAAE,GAAGM;IAASC,WAAWR,eAAeC,KAAAA;EAAO;AACxD,GAF8B;AAIvB,IAAMQ,oBAAoB,wBAA4BC,UAAgCC,YAAoB,MAAC;AAChH,SAAOD,SAASE,KAAK,CAACC,GAAGC,MACvBD,EAAEL,YAAYM,EAAEN,YAAY,CAACG,YAC3BE,EAAEL,YAAYM,EAAEN,YAAYG,YAC5B,CAAA;AAEN,GANiC;AAW1B,SAASI,kBAA6CR,SAA4B;AACvF,MAAI,CAACA;AAAS;AACd,MAAIS,MAAMC,QAAQV,OAAAA,GAAU;AAC1B,WAAOA,QAAQW,IAAI,CAACC,MAAMJ,kBAAkBI,CAAAA,CAAAA;EAC9C;AAEA,QAAM,EAAEX,WAAW,GAAGY,OAAAA,IAAWb;AACjC,SAAOa;AACT;AARgBL;","names":["AbstractArchivist","AbstractModuleInstance","_lastInsertedPayload","_parents","queries","ArchivistGetQuerySchema","requireAllParents","config","_queryAccountPaths","storeParentReads","all","_noOverride","busy","started","PayloadBuilder","build","allHandler","clear","clearHandler","commit","commitHandler","delete","hashes","deleteWithConfig","get","getWithConfig","insert","payloads","insertWithConfig","next","options","nextWithConfig","Error","deleteHandler","_hashes","emitEvents","deletedHashes","emit","module","getFromParent","archivist","foundPairs","dataHashPairs","filter","hash","askedFor","includes","console","warn","foundHashes","Set","map","foundPayloads","payload","notfound","has","getFromParents","parents","Object","values","read","remainingHashes","parentIndex","result","length","found","getHandler","_config","requestedHashes","gotten","toAllHashMap","requestedPayloadFound","key","entries","add","push","notFoundHashes","difference","parentFoundPayloads","head","insertHandler","_payloads","insertQueryHandler","query","assertEx","JSON","stringify","resolvedPayloads","filterIncludeByDataHash","payloadHashes","queryPayload","getQuery","payloadsWithoutQuery","filterExclude","dataHash","at","writeToParents","insertedPayloads","nextHandler","_options","resolveArchivists","write","queryHandler","queryConfig","wrappedQuery","QueryBoundWitnessWrapper","parseQuery","builtQuery","queryable","resultPayloads","schema","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistDeleteQuerySchema","resultPayload","ArchivistInsertQuerySchema","storeQueries","writeToParent","parent","compact","Promise","undefined","flat","archivists","archivistModules","resolve","address","name","duplicateModules","reduce","prev","asArchivistInstance","isArchivistInstance","log","import_assert","maxSequenceIndex","sequenceNumber","index","assertEx","BigInt","Date","now","addStorageMeta","payload","_sequence","sortByStorageMeta","payloads","direction","sort","a","b","removeStorageMeta","Array","isArray","map","p","noMeta"]}
@@ -4,6 +4,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
4
4
  // src/AbstractArchivist.ts
5
5
  import { assertEx } from "@xylabs/assert";
6
6
  import { compact } from "@xylabs/lodash";
7
+ import { difference } from "@xylabs/set";
7
8
  import { ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistCommitQuerySchema, ArchivistDeleteQuerySchema, ArchivistGetQuerySchema, ArchivistInsertQuerySchema, asArchivistInstance, isArchivistInstance } from "@xyo-network/archivist-model";
8
9
  import { QueryBoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
9
10
  import { AbstractModuleInstance } from "@xyo-network/module-abstract";
@@ -28,7 +29,8 @@ var _AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
28
29
  "network.xyo.query.archivist.commit": "1/3",
29
30
  "network.xyo.query.archivist.delete": "1/4",
30
31
  "network.xyo.query.archivist.get": "1/5",
31
- "network.xyo.query.archivist.insert": "1/6"
32
+ "network.xyo.query.archivist.insert": "1/6",
33
+ "network.xyo.query.archivist.next": "1/7"
32
34
  };
33
35
  }
34
36
  get storeParentReads() {
@@ -39,7 +41,7 @@ var _AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
39
41
  this._noOverride("all");
40
42
  return this.busy(async () => {
41
43
  await this.started("throw");
42
- return await this.allHandler();
44
+ return await PayloadBuilder.build(await this.allHandler());
43
45
  });
44
46
  }
45
47
  clear() {
@@ -67,7 +69,7 @@ var _AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
67
69
  this._noOverride("get");
68
70
  return await this.busy(async () => {
69
71
  await this.started("throw");
70
- return await this.getWithConfig(hashes);
72
+ return await PayloadBuilder.build(await this.getWithConfig(hashes));
71
73
  });
72
74
  }
73
75
  async insert(payloads) {
@@ -77,6 +79,13 @@ var _AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
77
79
  return await this.insertWithConfig(payloads);
78
80
  });
79
81
  }
82
+ async next(options) {
83
+ this._noOverride("next");
84
+ return await this.busy(async () => {
85
+ await this.started("throw");
86
+ return await this.nextWithConfig(options);
87
+ });
88
+ }
80
89
  allHandler() {
81
90
  throw new Error("Not implemented");
82
91
  }
@@ -141,29 +150,39 @@ var _AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
141
150
  getHandler(_hashes) {
142
151
  throw new Error("Not implemented");
143
152
  }
144
- async getWithConfig(hashes, config) {
145
- const emitEvents = (config == null ? void 0 : config.emitEvents) ?? true;
146
- const gotten = await this.getHandler(hashes);
147
- const map = await PayloadBuilder.toHashMap(gotten);
148
- const dataMap = await PayloadBuilder.toDataHashMap(gotten);
153
+ async getWithConfig(hashes, _config) {
154
+ const requestedHashes = new Set(hashes);
155
+ const gotten = await this.getHandler([
156
+ ...requestedHashes
157
+ ]);
149
158
  const foundPayloads = [];
150
- const notfoundHashes = [];
151
- for (const hash of hashes) {
152
- const found = map[hash] ?? dataMap[hash];
153
- if (found) {
154
- foundPayloads.push(await PayloadBuilder.build(found, true));
155
- } else {
156
- notfoundHashes.push(hash);
159
+ const foundHashes = /* @__PURE__ */ new Set();
160
+ for (const payload of gotten) {
161
+ const map = await PayloadBuilder.toAllHashMap([
162
+ payload
163
+ ]);
164
+ let requestedPayloadFound = false;
165
+ for (const [key, payload2] of Object.entries(map)) {
166
+ const hash = key;
167
+ if (requestedHashes.has(hash)) {
168
+ requestedPayloadFound = true;
169
+ foundHashes.add(hash);
170
+ }
171
+ if (requestedPayloadFound)
172
+ foundPayloads.push(payload2);
157
173
  }
158
174
  }
159
- const [parentFoundPayloads] = await this.getFromParents(notfoundHashes);
175
+ const notFoundHashes = [
176
+ ...difference(requestedHashes, foundHashes)
177
+ ];
178
+ const [parentFoundPayloads] = await this.getFromParents(notFoundHashes);
160
179
  if (this.storeParentReads) {
161
180
  await this.insertWithConfig(parentFoundPayloads);
162
181
  }
163
- return [
182
+ return await PayloadBuilder.build([
164
183
  ...foundPayloads,
165
184
  ...parentFoundPayloads
166
- ];
185
+ ]);
167
186
  }
168
187
  head() {
169
188
  return this._lastInsertedPayload;
@@ -184,7 +203,7 @@ var _AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
184
203
  async insertWithConfig(payloads, config) {
185
204
  const emitEvents = (config == null ? void 0 : config.emitEvents) ?? true;
186
205
  const writeToParents = (config == null ? void 0 : config.writeToParents) ?? true;
187
- const insertedPayloads = await this.insertHandler(await PayloadBuilder.build(payloads, true));
206
+ const insertedPayloads = await PayloadBuilder.build(await this.insertHandler(payloads), true);
188
207
  if (writeToParents) {
189
208
  await this.writeToParents(insertedPayloads);
190
209
  }
@@ -196,6 +215,13 @@ var _AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
196
215
  }
197
216
  return insertedPayloads;
198
217
  }
218
+ nextHandler(_options) {
219
+ throw new Error("Not implemented");
220
+ }
221
+ async nextWithConfig(options, _config) {
222
+ const foundPayloads = await this.nextHandler(options);
223
+ return await PayloadBuilder.build(foundPayloads);
224
+ }
199
225
  async parents() {
200
226
  var _a, _b, _c, _d, _e, _f;
201
227
  this._parents = this._parents ?? {
@@ -312,12 +338,15 @@ var addStorageMeta = /* @__PURE__ */ __name((payload, index = 0) => {
312
338
  _sequence: sequenceNumber(index)
313
339
  };
314
340
  }, "addStorageMeta");
315
- var sortByStorageMeta = /* @__PURE__ */ __name((payloads) => {
316
- return payloads.sort((a, b) => a._sequence < b._sequence ? -1 : a._sequence > b._sequence ? 1 : 0);
341
+ var sortByStorageMeta = /* @__PURE__ */ __name((payloads, direction = 1) => {
342
+ return payloads.sort((a, b) => a._sequence < b._sequence ? -direction : a._sequence > b._sequence ? direction : 0);
317
343
  }, "sortByStorageMeta");
318
344
  function removeStorageMeta(payload) {
319
345
  if (!payload)
320
346
  return;
347
+ if (Array.isArray(payload)) {
348
+ return payload.map((p) => removeStorageMeta(p));
349
+ }
321
350
  const { _sequence, ...noMeta } = payload;
322
351
  return noMeta;
323
352
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/AbstractArchivist.ts","../../src/StorageMeta.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Address, Hash } from '@xylabs/hex'\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 { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { duplicateModules, ModuleConfig, ModuleIdentifier, ModuleName, ModuleQueryHandlerResult } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta, WithMeta } from '@xyo-network/payload-model'\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, TEventData, Payload>\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 ?? false\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<WithMeta<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<WithMeta<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: Hash[]): 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: Hash[]): Promise<WithMeta<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<WithMeta<Payload>[]> {\n this._noOverride('insert')\n return await this.busy(async () => {\n await this.started('throw')\n //make sure all incoming payloads have proper $hash and $meta\n return await this.insertWithConfig(payloads)\n })\n }\n\n protected allHandler(): PromisableArray<WithMeta<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<WithMeta<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: Hash[], archivist: ArchivistInstance): Promise<[WithMeta<Payload>[], Hash[]]> {\n const foundPairs = (await PayloadBuilder.dataHashPairs((await archivist.get(hashes)) as WithMeta<Payload>[])).filter(([, hash]) => {\n const askedFor = hashes.includes(hash)\n if (!askedFor) {\n console.warn(`Parent returned payload with hash not asked for: ${hash}`)\n //throw Error(`Parent returned payload with hash not asked for: ${hash}`)\n }\n return askedFor\n })\n\n const foundHashes = new Set(foundPairs.map(([, hash]) => hash))\n const foundPayloads = foundPairs.map(([payload]) => payload)\n\n const notfound = hashes.filter((hash) => !foundHashes.has(hash))\n return [foundPayloads, notfound]\n }\n\n protected async getFromParents(hashes: Hash[]): Promise<[WithMeta<Payload>[], string[]]> {\n const parents = Object.values((await this.parents())?.read ?? {})\n let remainingHashes = [...hashes]\n let parentIndex = 0\n let result: WithMeta<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: Hash[]): Promisable<Payload[]> {\n throw new Error('Not implemented')\n }\n\n protected async getWithConfig(hashes: Hash[], config?: InsertConfig): Promise<WithMeta<Payload>[]> {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const emitEvents = config?.emitEvents ?? true\n const gotten = await this.getHandler(hashes)\n const map = await PayloadBuilder.toHashMap(gotten)\n const dataMap = await PayloadBuilder.toDataHashMap(gotten)\n\n const foundPayloads: WithMeta<Payload>[] = []\n const notfoundHashes: Hash[] = []\n for (const hash of hashes) {\n const found = map[hash] ?? dataMap[hash]\n if (found) {\n foundPayloads.push(await PayloadBuilder.build<Payload>(found, true))\n } else {\n notfoundHashes.push(hash)\n }\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: WithMeta<Payload>[]): Promise<WithMeta<Payload>[]> {\n throw new Error('Not implemented')\n }\n\n protected async insertQueryHandler<T extends QueryBoundWitnessWrapper = QueryBoundWitnessWrapper>(query: T, payloads?: Payload[]) {\n assertEx(payloads, () => `Missing payloads: ${JSON.stringify(query.payload, null, 2)}`)\n const resolvedPayloads = await PayloadBuilder.filterIncludeByDataHash(payloads, query.payloadHashes)\n assertEx(\n resolvedPayloads.length === query.payloadHashes.length,\n () => `Could not find some passed hashes [${resolvedPayloads.length} != ${query.payloadHashes.length}]`,\n )\n const queryPayload = await query.getQuery()\n const payloadsWithoutQuery = await PayloadBuilder.filterExclude(resolvedPayloads, await PayloadBuilder.dataHash(queryPayload))\n const result = await this.insertWithConfig(payloadsWithoutQuery)\n // 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 return result\n }\n\n protected async insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<WithMeta<Payload>[]> {\n const emitEvents = config?.emitEvents ?? true\n const writeToParents = config?.writeToParents ?? true\n\n const insertedPayloads = await this.insertHandler(await PayloadBuilder.build(payloads, true))\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 = await QueryBoundWitnessWrapper.parseQuery<ArchivistQuery>(query, payloads)\n const builtQuery = await PayloadBuilder.build(query, true)\n const queryPayload = await wrappedQuery.getQuery()\n assertEx(await this.queryable(query, payloads, queryConfig))\n const resultPayloads: Payload[] = []\n\n switch (queryPayload.schema) {\n case ArchivistAllQuerySchema: {\n resultPayloads.push(...(await this.allHandler()))\n break\n }\n case ArchivistClearQuerySchema: {\n await this.clearHandler()\n break\n }\n case ArchivistCommitQuerySchema: {\n resultPayloads.push(...(await this.commitHandler()))\n break\n }\n case ArchivistDeleteQuerySchema: {\n const 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 resultPayloads.push(...(await this.insertQueryHandler(wrappedQuery, payloads)))\n break\n }\n default: {\n const result = await super.queryHandler(query, payloads)\n if (this.config.storeQueries) {\n await this.insertHandler([builtQuery])\n }\n return result\n }\n }\n if (this.config.storeQueries) {\n await this.insertHandler([builtQuery])\n }\n return resultPayloads\n }\n\n protected async writeToParent(parent: ArchivistInstance, payloads: Payload[]): Promise<PayloadWithMeta[]> {\n return await parent.insert(payloads)\n }\n\n protected async writeToParents(payloads: Payload[]): Promise<PayloadWithMeta[]> {\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: ModuleIdentifier[] = []) {\n const archivistModules = [\n ...(await this.resolve({ address: archivists as Address[] })),\n ...(await this.resolve({ name: archivists as ModuleName[] })),\n ].filter(duplicateModules)\n\n assertEx(\n !this.requireAllParents || archivistModules.length === archivists.length,\n () =>\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","import { assertEx } from '@xylabs/assert'\nimport { Payload, PayloadWithMeta } from '@xyo-network/payload-model'\n\nexport type WithStorageMeta<T extends Payload> = T & {\n _sequence: bigint\n}\n\nexport const maxSequenceIndex = 10_000_000_000n\n\nexport const sequenceNumber = (index: number) => {\n assertEx(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`)\n return BigInt(Date.now()) * maxSequenceIndex + BigInt(index)\n}\n\nexport const addStorageMeta = <T extends PayloadWithMeta>(payload: T, index = 0) => {\n return { ...payload, _sequence: sequenceNumber(index) } as WithStorageMeta<T>\n}\n\nexport const sortByStorageMeta = <T extends PayloadWithMeta>(payloads: WithStorageMeta<T>[]) => {\n return payloads.sort((a, b) =>\n a._sequence < b._sequence ? -1\n : a._sequence > b._sequence ? 1\n : 0,\n )\n}\n\nexport function removeStorageMeta<T extends PayloadWithMeta>(payload: WithStorageMeta<T>): T\nexport function removeStorageMeta<T extends PayloadWithMeta>(payload?: WithStorageMeta<T>): T | undefined\nexport function removeStorageMeta<T extends PayloadWithMeta>(payload?: WithStorageMeta<T>) {\n if (!payload) return\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { _sequence, ...noMeta } = payload as WithStorageMeta<T>\n return noMeta as T\n}\n"],"mappings":"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","names":["assertEx","compact","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistDeleteQuerySchema","ArchivistGetQuerySchema","ArchivistInsertQuerySchema","asArchivistInstance","isArchivistInstance","QueryBoundWitnessWrapper","AbstractModuleInstance","duplicateModules","PayloadBuilder","AbstractArchivist","AbstractModuleInstance","_lastInsertedPayload","_parents","queries","ArchivistGetQuerySchema","requireAllParents","config","_queryAccountPaths","storeParentReads","all","_noOverride","busy","started","allHandler","clear","clearHandler","commit","commitHandler","delete","hashes","deleteWithConfig","get","getWithConfig","insert","payloads","insertWithConfig","Error","deleteHandler","_hashes","emitEvents","deletedHashes","emit","module","getFromParent","archivist","foundPairs","PayloadBuilder","dataHashPairs","filter","hash","askedFor","includes","console","warn","foundHashes","Set","map","foundPayloads","payload","notfound","has","getFromParents","parents","Object","values","read","remainingHashes","parentIndex","result","length","found","getHandler","gotten","toHashMap","dataMap","toDataHashMap","notfoundHashes","push","build","parentFoundPayloads","head","insertHandler","_payloads","insertQueryHandler","query","assertEx","JSON","stringify","resolvedPayloads","filterIncludeByDataHash","payloadHashes","queryPayload","getQuery","payloadsWithoutQuery","filterExclude","dataHash","at","writeToParents","insertedPayloads","resolveArchivists","write","queryHandler","queryConfig","wrappedQuery","QueryBoundWitnessWrapper","parseQuery","builtQuery","queryable","resultPayloads","schema","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistDeleteQuerySchema","resultPayload","ArchivistInsertQuerySchema","storeQueries","writeToParent","parent","compact","Promise","undefined","flat","archivists","archivistModules","resolve","address","name","duplicateModules","reduce","prev","asArchivistInstance","isArchivistInstance","log","assertEx","maxSequenceIndex","sequenceNumber","index","assertEx","BigInt","Date","now","addStorageMeta","payload","_sequence","sortByStorageMeta","payloads","sort","a","b","removeStorageMeta","noMeta"]}
1
+ {"version":3,"sources":["../../src/AbstractArchivist.ts","../../src/StorageMeta.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Address, Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable, PromisableArray } from '@xylabs/promise'\nimport { difference } from '@xylabs/set'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistDeleteQuery,\n ArchivistDeleteQuerySchema,\n ArchivistGetQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistParams,\n ArchivistQueries,\n asArchivistInstance,\n isArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { duplicateModules, ModuleConfig, ModuleIdentifier, ModuleName, ModuleQueryHandlerResult } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta, WithMeta } from '@xyo-network/payload-model'\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, TEventData, Payload>\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 ?? false\n }\n\n protected override get _queryAccountPaths(): Record<ArchivistQueries['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 'network.xyo.query.archivist.next': '1/7',\n }\n }\n\n protected get storeParentReads() {\n return !!this.config?.storeParentReads\n }\n\n all(): PromisableArray<WithMeta<Payload>> {\n this._noOverride('all')\n return this.busy(async () => {\n await this.started('throw')\n return await PayloadBuilder.build(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<WithMeta<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: Hash[]): Promise<Hash[]> {\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: Hash[]): Promise<WithMeta<Payload>[]> {\n this._noOverride('get')\n return await this.busy(async () => {\n await this.started('throw')\n return await PayloadBuilder.build(await this.getWithConfig(hashes))\n })\n }\n\n async insert(payloads: Payload[]): Promise<WithMeta<Payload>[]> {\n this._noOverride('insert')\n return await this.busy(async () => {\n await this.started('throw')\n //make sure all incoming payloads have proper $hash and $meta\n return await this.insertWithConfig(payloads)\n })\n }\n\n async next?(options?: ArchivistNextOptions): Promise<WithMeta<Payload>[]> {\n this._noOverride('next')\n return await this.busy(async () => {\n await this.started('throw')\n return await this.nextWithConfig(options)\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<WithMeta<BoundWitness>[]> {\n throw new Error('Not implemented')\n }\n\n protected deleteHandler(_hashes: Hash[]): PromisableArray<Hash> {\n throw new Error('Not implemented')\n }\n\n protected async deleteWithConfig(hashes: Hash[], config?: ActionConfig): Promise<Hash[]> {\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: Hash[], archivist: ArchivistInstance): Promise<[WithMeta<Payload>[], Hash[]]> {\n const foundPairs = (await PayloadBuilder.dataHashPairs((await archivist.get(hashes)) as WithMeta<Payload>[])).filter(([, hash]) => {\n const askedFor = hashes.includes(hash)\n if (!askedFor) {\n console.warn(`Parent returned payload with hash not asked for: ${hash}`)\n //throw Error(`Parent returned payload with hash not asked for: ${hash}`)\n }\n return askedFor\n })\n\n const foundHashes = new Set(foundPairs.map(([, hash]) => hash))\n const foundPayloads = foundPairs.map(([payload]) => payload)\n\n const notfound = hashes.filter((hash) => !foundHashes.has(hash))\n return [foundPayloads, notfound]\n }\n\n protected async getFromParents(hashes: Hash[]): Promise<[WithMeta<Payload>[], Hash[]]> {\n const parents = Object.values((await this.parents())?.read ?? {})\n let remainingHashes = [...hashes]\n let parentIndex = 0\n let result: WithMeta<Payload>[] = []\n\n // NOTE: 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: Hash[]): Promisable<Payload[]> {\n throw new Error('Not implemented')\n }\n\n protected async getWithConfig(hashes: Hash[], _config?: InsertConfig): Promise<WithMeta<Payload>[]> {\n // Filter out duplicates\n const requestedHashes = new Set(hashes)\n\n // Attempt to find the payloads in the store\n const gotten = await this.getHandler([...requestedHashes])\n\n // Do not just blindly return what the archivist told us but\n // ensure to only return requested payloads and keep track of\n // the ones it did not find so we can ask the parents.\n const foundPayloads: PayloadWithMeta[] = []\n const foundHashes = new Set<Hash>()\n\n // NOTE: We are iterating over the returned result from the archivist\n // (not the array of hashes passed in) to preserve the natural order of the\n // hashes as returned by the archivist as that should loosely\n // correspond to the order when iterated and the symmetry will\n // be helpful for debugging\n for (const payload of gotten) {\n // Compute the hashes for this payload\n const map = await PayloadBuilder.toAllHashMap([payload])\n let requestedPayloadFound = false\n for (const [key, payload] of Object.entries(map)) {\n const hash = key as Hash // NOTE: Required cast as Object.entries always returns string keys\n // If this hash was requested\n if (requestedHashes.has(hash)) {\n // Indicate that we found it (but do not insert it yet). Since\n // one payload could satisfy two requested hashes (vit its dataHash\n // & rootHash) we only want to insert that payload once but we want\n // to keep track of all the hashes it satisfies so we can ask th\n // parents for the ones we did not find\n requestedPayloadFound = true\n // Add it to the list of found hashes\n foundHashes.add(hash)\n }\n if (requestedPayloadFound) foundPayloads.push(payload)\n }\n }\n // For all the hashes we did not find, ask the parents\n const notFoundHashes = [...difference(requestedHashes, foundHashes)]\n const [parentFoundPayloads] = await this.getFromParents(notFoundHashes)\n\n if (this.storeParentReads) {\n await this.insertWithConfig(parentFoundPayloads)\n }\n return await PayloadBuilder.build([...foundPayloads, ...parentFoundPayloads])\n }\n\n protected head(): Promisable<Payload | undefined> {\n return this._lastInsertedPayload\n }\n\n protected insertHandler(_payloads: Payload[]): Promise<WithMeta<Payload>[]> {\n throw new Error('Not implemented')\n }\n\n protected async insertQueryHandler<T extends QueryBoundWitnessWrapper = QueryBoundWitnessWrapper>(query: T, payloads?: Payload[]) {\n assertEx(payloads, () => `Missing payloads: ${JSON.stringify(query.payload, null, 2)}`)\n const resolvedPayloads = await PayloadBuilder.filterIncludeByDataHash(payloads, query.payloadHashes)\n assertEx(\n resolvedPayloads.length === query.payloadHashes.length,\n () => `Could not find some passed hashes [${resolvedPayloads.length} != ${query.payloadHashes.length}]`,\n )\n const queryPayload = await query.getQuery()\n const payloadsWithoutQuery = await PayloadBuilder.filterExclude(resolvedPayloads, await PayloadBuilder.dataHash(queryPayload))\n const result = await this.insertWithConfig(payloadsWithoutQuery)\n // 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 return result\n }\n\n protected async insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<WithMeta<Payload>[]> {\n const emitEvents = config?.emitEvents ?? true\n const writeToParents = config?.writeToParents ?? true\n\n const insertedPayloads = await PayloadBuilder.build(await this.insertHandler(payloads), true)\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 nextHandler(_options?: ArchivistNextOptions): Promisable<WithMeta<Payload>[]> {\n throw new Error('Not implemented')\n }\n\n protected async nextWithConfig(options?: ArchivistNextOptions, _config?: InsertConfig): Promise<WithMeta<Payload>[]> {\n const foundPayloads = await this.nextHandler(options)\n return await PayloadBuilder.build(foundPayloads)\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 = await QueryBoundWitnessWrapper.parseQuery<ArchivistQueries>(query, payloads)\n const builtQuery = await PayloadBuilder.build(query, true)\n const queryPayload = await wrappedQuery.getQuery()\n assertEx(await this.queryable(query, payloads, queryConfig))\n const resultPayloads: Payload[] = []\n\n switch (queryPayload.schema) {\n case ArchivistAllQuerySchema: {\n resultPayloads.push(...(await this.allHandler()))\n break\n }\n case ArchivistClearQuerySchema: {\n await this.clearHandler()\n break\n }\n case ArchivistCommitQuerySchema: {\n resultPayloads.push(...(await this.commitHandler()))\n break\n }\n case ArchivistDeleteQuerySchema: {\n const 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 resultPayloads.push(...(await this.insertQueryHandler(wrappedQuery, payloads)))\n break\n }\n default: {\n const result = await super.queryHandler(query, payloads)\n if (this.config.storeQueries) {\n await this.insertHandler([builtQuery])\n }\n return result\n }\n }\n if (this.config.storeQueries) {\n await this.insertHandler([builtQuery])\n }\n return resultPayloads\n }\n\n protected async writeToParent(parent: ArchivistInstance, payloads: Payload[]): Promise<PayloadWithMeta[]> {\n return await parent.insert(payloads)\n }\n\n protected async writeToParents(payloads: Payload[]): Promise<PayloadWithMeta[]> {\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: ModuleIdentifier[] = []) {\n const archivistModules = [\n ...(await this.resolve({ address: archivists as Address[] })),\n ...(await this.resolve({ name: archivists as ModuleName[] })),\n ].filter(duplicateModules)\n\n assertEx(\n !this.requireAllParents || archivistModules.length === archivists.length,\n () =>\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","import { assertEx } from '@xylabs/assert'\nimport { Payload, PayloadWithMeta } from '@xyo-network/payload-model'\n\nexport type WithStorageMeta<T extends Payload> = T & {\n _sequence: bigint\n}\n\nexport const maxSequenceIndex = 10_000_000_000n\n\nexport const sequenceNumber = (index: number) => {\n assertEx(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`)\n return BigInt(Date.now()) * maxSequenceIndex + BigInt(index)\n}\n\nexport const addStorageMeta = <T extends PayloadWithMeta>(payload: T, index = 0) => {\n return { ...payload, _sequence: sequenceNumber(index) } as WithStorageMeta<T>\n}\n\nexport const sortByStorageMeta = <T extends PayloadWithMeta>(payloads: WithStorageMeta<T>[], direction: -1 | 1 = 1) => {\n return payloads.sort((a, b) =>\n a._sequence < b._sequence ? -direction\n : a._sequence > b._sequence ? direction\n : 0,\n )\n}\n\nexport function removeStorageMeta<T extends PayloadWithMeta>(payload: WithStorageMeta<T>): T\nexport function removeStorageMeta<T extends PayloadWithMeta>(payloads: WithStorageMeta<T>[]): T[]\nexport function removeStorageMeta<T extends PayloadWithMeta>(payload?: WithStorageMeta<T>): T | undefined\nexport function removeStorageMeta<T extends PayloadWithMeta>(payload?: WithStorageMeta<T>) {\n if (!payload) return\n if (Array.isArray(payload)) {\n return payload.map((p) => removeStorageMeta(p))\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { _sequence, ...noMeta } = payload as WithStorageMeta<T>\n return noMeta as T\n}\n"],"mappings":"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","names":["assertEx","compact","difference","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistDeleteQuerySchema","ArchivistGetQuerySchema","ArchivistInsertQuerySchema","asArchivistInstance","isArchivistInstance","QueryBoundWitnessWrapper","AbstractModuleInstance","duplicateModules","PayloadBuilder","AbstractArchivist","AbstractModuleInstance","_lastInsertedPayload","_parents","queries","ArchivistGetQuerySchema","requireAllParents","config","_queryAccountPaths","storeParentReads","all","_noOverride","busy","started","PayloadBuilder","build","allHandler","clear","clearHandler","commit","commitHandler","delete","hashes","deleteWithConfig","get","getWithConfig","insert","payloads","insertWithConfig","next","options","nextWithConfig","Error","deleteHandler","_hashes","emitEvents","deletedHashes","emit","module","getFromParent","archivist","foundPairs","dataHashPairs","filter","hash","askedFor","includes","console","warn","foundHashes","Set","map","foundPayloads","payload","notfound","has","getFromParents","parents","Object","values","read","remainingHashes","parentIndex","result","length","found","getHandler","_config","requestedHashes","gotten","toAllHashMap","requestedPayloadFound","key","entries","add","push","notFoundHashes","difference","parentFoundPayloads","head","insertHandler","_payloads","insertQueryHandler","query","assertEx","JSON","stringify","resolvedPayloads","filterIncludeByDataHash","payloadHashes","queryPayload","getQuery","payloadsWithoutQuery","filterExclude","dataHash","at","writeToParents","insertedPayloads","nextHandler","_options","resolveArchivists","write","queryHandler","queryConfig","wrappedQuery","QueryBoundWitnessWrapper","parseQuery","builtQuery","queryable","resultPayloads","schema","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistDeleteQuerySchema","resultPayload","ArchivistInsertQuerySchema","storeQueries","writeToParent","parent","compact","Promise","undefined","flat","archivists","archivistModules","resolve","address","name","duplicateModules","reduce","prev","asArchivistInstance","isArchivistInstance","log","assertEx","maxSequenceIndex","sequenceNumber","index","assertEx","BigInt","Date","now","addStorageMeta","payload","_sequence","sortByStorageMeta","payloads","direction","sort","a","b","removeStorageMeta","Array","isArray","map","p","noMeta"]}
package/package.json CHANGED
@@ -10,17 +10,18 @@
10
10
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@xylabs/assert": "^3.0.0",
14
- "@xylabs/hex": "^3.0.0",
15
- "@xylabs/lodash": "^3.0.0",
16
- "@xylabs/promise": "^3.0.0",
17
- "@xyo-network/archivist-model": "~2.91.0",
18
- "@xyo-network/boundwitness-model": "~2.91.0",
19
- "@xyo-network/boundwitness-wrapper": "~2.91.0",
20
- "@xyo-network/module-abstract": "~2.91.0",
21
- "@xyo-network/module-model": "~2.91.0",
22
- "@xyo-network/payload-builder": "~2.91.0",
23
- "@xyo-network/payload-model": "~2.91.0"
13
+ "@xylabs/assert": "^3.0.3",
14
+ "@xylabs/hex": "^3.0.3",
15
+ "@xylabs/lodash": "^3.0.3",
16
+ "@xylabs/promise": "^3.0.3",
17
+ "@xylabs/set": "^3.0.3",
18
+ "@xyo-network/archivist-model": "~2.91.2",
19
+ "@xyo-network/boundwitness-model": "~2.91.2",
20
+ "@xyo-network/boundwitness-wrapper": "~2.91.2",
21
+ "@xyo-network/module-abstract": "~2.91.2",
22
+ "@xyo-network/module-model": "~2.91.2",
23
+ "@xyo-network/payload-builder": "~2.91.2",
24
+ "@xyo-network/payload-model": "~2.91.2"
24
25
  },
25
26
  "devDependencies": {
26
27
  "@xylabs/ts-scripts-yarn3": "^3.4.1",
@@ -66,6 +67,6 @@
66
67
  },
67
68
  "sideEffects": false,
68
69
  "types": "dist/node/index.d.ts",
69
- "version": "2.91.0",
70
+ "version": "2.91.2",
70
71
  "type": "module"
71
72
  }