@xyo-network/archivist-abstract 3.5.2 → 3.6.0-rc.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.
- package/dist/neutral/AbstractArchivist.d.ts +19 -19
- package/dist/neutral/AbstractArchivist.d.ts.map +1 -1
- package/dist/neutral/index.d.ts +0 -1
- package/dist/neutral/index.d.ts.map +1 -1
- package/dist/neutral/index.mjs +10 -50
- package/dist/neutral/index.mjs.map +1 -1
- package/package.json +17 -16
- package/src/AbstractArchivist.ts +29 -34
- package/src/index.ts +0 -1
- package/dist/neutral/StorageMeta.d.ts +0 -16
- package/dist/neutral/StorageMeta.d.ts.map +0 -1
- package/src/StorageMeta.ts +0 -46
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Hash } from '@xylabs/hex';
|
|
2
2
|
import type { Promisable, PromisableArray } from '@xylabs/promise';
|
|
3
3
|
import type { AccountInstance } from '@xyo-network/account-model';
|
|
4
4
|
import type { ArchivistInstance, ArchivistModuleEventData, ArchivistNextOptions, ArchivistParams, AttachableArchivistInstance } from '@xyo-network/archivist-model';
|
|
@@ -6,7 +6,7 @@ import type { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-
|
|
|
6
6
|
import { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper';
|
|
7
7
|
import { AbstractModuleInstance } from '@xyo-network/module-abstract';
|
|
8
8
|
import type { ModuleConfig, ModuleQueryHandlerResult, ModuleQueryResult } from '@xyo-network/module-model';
|
|
9
|
-
import type { Payload,
|
|
9
|
+
import type { Payload, Schema } from '@xyo-network/payload-model';
|
|
10
10
|
export interface ActionConfig {
|
|
11
11
|
emitEvents?: boolean;
|
|
12
12
|
}
|
|
@@ -27,41 +27,41 @@ export declare abstract class AbstractArchivist<TParams extends ArchivistParams
|
|
|
27
27
|
get queries(): string[];
|
|
28
28
|
get requireAllParents(): boolean;
|
|
29
29
|
protected get storeParentReads(): boolean;
|
|
30
|
-
all(): PromisableArray<
|
|
30
|
+
all(): PromisableArray<Payload>;
|
|
31
31
|
allQuery(account: AccountInstance): Promise<ModuleQueryResult>;
|
|
32
32
|
clear(): Promisable<void>;
|
|
33
33
|
clearQuery(account: AccountInstance): Promise<ModuleQueryResult>;
|
|
34
|
-
commit(): Promisable<
|
|
34
|
+
commit(): Promisable<BoundWitness[]>;
|
|
35
35
|
commitQuery(account: AccountInstance): Promise<ModuleQueryResult>;
|
|
36
36
|
delete(hashes: Hash[]): Promise<Hash[]>;
|
|
37
37
|
deleteQuery(hashes: Hash[], account?: AccountInstance): Promise<ModuleQueryResult>;
|
|
38
|
-
get(hashes: Hash[]): Promise<
|
|
38
|
+
get(hashes: Hash[]): Promise<Payload[]>;
|
|
39
39
|
getQuery(hashes: Hash[], account?: AccountInstance): Promise<ModuleQueryResult>;
|
|
40
|
-
insert(payloads: Payload[]): Promise<
|
|
40
|
+
insert(payloads: Payload[]): Promise<Payload[]>;
|
|
41
41
|
insertQuery(payloads: Payload[], account?: AccountInstance): Promise<ModuleQueryResult>;
|
|
42
|
-
next(options?: ArchivistNextOptions): Promise<
|
|
42
|
+
next(options?: ArchivistNextOptions): Promise<Payload[]>;
|
|
43
43
|
nextQuery(options?: ArchivistNextOptions, account?: AccountInstance): Promise<ModuleQueryResult>;
|
|
44
44
|
protected allHandler(): PromisableArray<Payload>;
|
|
45
45
|
protected clearHandler(): Promisable<void>;
|
|
46
|
-
protected commitHandler(): Promisable<
|
|
46
|
+
protected commitHandler(): Promisable<BoundWitness[]>;
|
|
47
47
|
protected deleteHandler(_hashes: Hash[]): PromisableArray<Hash>;
|
|
48
48
|
protected deleteWithConfig(hashes: Hash[], config?: ActionConfig): Promise<Hash[]>;
|
|
49
|
-
protected getFromParent(hashes: Hash[], archivist: ArchivistInstance): Promise<[
|
|
50
|
-
protected getFromParents(hashes: Hash[]): Promise<[
|
|
49
|
+
protected getFromParent(hashes: Hash[], archivist: ArchivistInstance): Promise<[Payload[], Hash[]]>;
|
|
50
|
+
protected getFromParents(hashes: Hash[]): Promise<[Payload[], Hash[]]>;
|
|
51
51
|
protected getHandler(_hashes: Hash[]): Promisable<Payload[]>;
|
|
52
|
-
protected getWithConfig(hashes: Hash[], _config?: InsertConfig): Promise<
|
|
52
|
+
protected getWithConfig(hashes: Hash[], _config?: InsertConfig): Promise<Payload[]>;
|
|
53
53
|
protected head(): Promisable<Payload | undefined>;
|
|
54
|
-
protected insertHandler(_payloads:
|
|
55
|
-
protected insertQueryHandler<T extends QueryBoundWitnessWrapper = QueryBoundWitnessWrapper>(query: T, payloads?: Payload[]): Promise<
|
|
54
|
+
protected insertHandler(_payloads: Payload[]): Promise<Payload[]>;
|
|
55
|
+
protected insertQueryHandler<T extends QueryBoundWitnessWrapper = QueryBoundWitnessWrapper>(query: T, payloads?: Payload[]): Promise<({
|
|
56
56
|
schema: string;
|
|
57
|
-
} & import("@xyo-network/payload-model").PayloadFields
|
|
58
|
-
protected insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<
|
|
59
|
-
protected nextHandler(_options?: ArchivistNextOptions): Promisable<
|
|
60
|
-
protected nextWithConfig(options?: ArchivistNextOptions, _config?: InsertConfig): Promise<
|
|
57
|
+
} & import("@xyo-network/payload-model").PayloadFields)[]>;
|
|
58
|
+
protected insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<Payload[]>;
|
|
59
|
+
protected nextHandler(_options?: ArchivistNextOptions): Promisable<Payload[]>;
|
|
60
|
+
protected nextWithConfig(options?: ArchivistNextOptions, _config?: InsertConfig): Promise<Payload[]>;
|
|
61
61
|
protected parentArchivists(): Promise<ArchivistParentInstances>;
|
|
62
62
|
protected queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(query: T, payloads: Payload[], queryConfig?: TConfig): Promise<ModuleQueryHandlerResult>;
|
|
63
|
-
protected writeToParent(parent: ArchivistInstance, payloads: Payload[]): Promise<
|
|
64
|
-
protected writeToParents(payloads: Payload[]): Promise<
|
|
63
|
+
protected writeToParent(parent: ArchivistInstance, payloads: Payload[]): Promise<Payload[]>;
|
|
64
|
+
protected writeToParents(payloads: Payload[]): Promise<Payload[]>;
|
|
65
65
|
private resolveArchivists;
|
|
66
66
|
}
|
|
67
67
|
//# sourceMappingURL=AbstractArchivist.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractArchivist.d.ts","sourceRoot":"","sources":["../../src/AbstractArchivist.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"AbstractArchivist.d.ts","sourceRoot":"","sources":["../../src/AbstractArchivist.ts"],"names":[],"mappings":"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"}
|
package/dist/neutral/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
|
package/dist/neutral/index.mjs
CHANGED
|
@@ -40,7 +40,7 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
|
|
|
40
40
|
this._noOverride("all");
|
|
41
41
|
return this.busy(async () => {
|
|
42
42
|
await this.started("throw");
|
|
43
|
-
return
|
|
43
|
+
return PayloadBuilder.omitStorageMeta(await this.allHandler());
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
async allQuery(account) {
|
|
@@ -93,7 +93,7 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
|
|
|
93
93
|
this._noOverride("get");
|
|
94
94
|
return await this.busy(async () => {
|
|
95
95
|
await this.started("throw");
|
|
96
|
-
return await
|
|
96
|
+
return await this.getWithConfig(hashes);
|
|
97
97
|
});
|
|
98
98
|
}
|
|
99
99
|
async getQuery(hashes, account) {
|
|
@@ -221,7 +221,7 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
|
|
|
221
221
|
if (this.storeParentReads) {
|
|
222
222
|
await this.insertWithConfig(parentFoundPayloads);
|
|
223
223
|
}
|
|
224
|
-
return
|
|
224
|
+
return PayloadBuilder.omitStorageMeta([
|
|
225
225
|
...foundPayloads,
|
|
226
226
|
...parentFoundPayloads
|
|
227
227
|
]);
|
|
@@ -245,11 +245,7 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
|
|
|
245
245
|
async insertWithConfig(payloads, config) {
|
|
246
246
|
const emitEvents = config?.emitEvents ?? true;
|
|
247
247
|
const writeToParents = config?.writeToParents ?? true;
|
|
248
|
-
const
|
|
249
|
-
stamp: false,
|
|
250
|
-
validate: true
|
|
251
|
-
});
|
|
252
|
-
const insertedPayloads = await this.insertHandler(payloadsWithMeta);
|
|
248
|
+
const insertedPayloads = await this.insertHandler(payloads);
|
|
253
249
|
if (writeToParents) {
|
|
254
250
|
await this.writeToParents(insertedPayloads);
|
|
255
251
|
}
|
|
@@ -259,14 +255,14 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
|
|
|
259
255
|
payloads: insertedPayloads
|
|
260
256
|
});
|
|
261
257
|
}
|
|
262
|
-
return insertedPayloads;
|
|
258
|
+
return PayloadBuilder.omitStorageMeta(insertedPayloads);
|
|
263
259
|
}
|
|
264
260
|
nextHandler(_options) {
|
|
265
261
|
throw new Error(NOT_IMPLEMENTED);
|
|
266
262
|
}
|
|
267
263
|
async nextWithConfig(options, _config) {
|
|
268
264
|
const foundPayloads = await this.nextHandler(options);
|
|
269
|
-
return
|
|
265
|
+
return PayloadBuilder.omitStorageMeta(foundPayloads);
|
|
270
266
|
}
|
|
271
267
|
async parentArchivists() {
|
|
272
268
|
this._parentArchivists = this._parentArchivists ?? {
|
|
@@ -278,10 +274,6 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
|
|
|
278
274
|
}
|
|
279
275
|
async queryHandler(query, payloads, queryConfig) {
|
|
280
276
|
const wrappedQuery = await QueryBoundWitnessWrapper.parseQuery(query, payloads);
|
|
281
|
-
const builtQuery = await PayloadBuilder.build(query, {
|
|
282
|
-
stamp: false,
|
|
283
|
-
validate: true
|
|
284
|
-
});
|
|
285
277
|
const queryPayload = await wrappedQuery.getQuery();
|
|
286
278
|
assertEx(await this.queryable(query, payloads, queryConfig));
|
|
287
279
|
const resultPayloads = [];
|
|
@@ -329,7 +321,7 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
|
|
|
329
321
|
const result = await super.queryHandler(query, payloads);
|
|
330
322
|
if (this.config.storeQueries) {
|
|
331
323
|
await this.insertHandler([
|
|
332
|
-
|
|
324
|
+
query
|
|
333
325
|
]);
|
|
334
326
|
}
|
|
335
327
|
return result;
|
|
@@ -337,10 +329,10 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
|
|
|
337
329
|
}
|
|
338
330
|
if (this.config.storeQueries) {
|
|
339
331
|
await this.insertHandler([
|
|
340
|
-
|
|
332
|
+
query
|
|
341
333
|
]);
|
|
342
334
|
}
|
|
343
|
-
return resultPayloads;
|
|
335
|
+
return PayloadBuilder.omitStorageMeta(resultPayloads);
|
|
344
336
|
}
|
|
345
337
|
async writeToParent(parent, payloads) {
|
|
346
338
|
return await parent.insert(payloads);
|
|
@@ -372,39 +364,7 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
|
|
|
372
364
|
}, {});
|
|
373
365
|
}
|
|
374
366
|
};
|
|
375
|
-
|
|
376
|
-
// src/StorageMeta.ts
|
|
377
|
-
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
378
|
-
var maxSequenceIndex = 10000000000n;
|
|
379
|
-
var sequenceNumber = /* @__PURE__ */ __name((index) => {
|
|
380
|
-
assertEx2(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`);
|
|
381
|
-
return BigInt(Date.now()) * maxSequenceIndex + BigInt(index);
|
|
382
|
-
}, "sequenceNumber");
|
|
383
|
-
var addStorageMeta = /* @__PURE__ */ __name((payload, index = 0) => {
|
|
384
|
-
return {
|
|
385
|
-
...payload,
|
|
386
|
-
_sequence: sequenceNumber(index)
|
|
387
|
-
};
|
|
388
|
-
}, "addStorageMeta");
|
|
389
|
-
var sortByStorageMeta = /* @__PURE__ */ __name((payloads, direction = 1) => {
|
|
390
|
-
return payloads.sort((a, b) => a._sequence < b._sequence ? -direction : a._sequence > b._sequence ? direction : 0);
|
|
391
|
-
}, "sortByStorageMeta");
|
|
392
|
-
function removeStorageMeta(payload) {
|
|
393
|
-
if (!payload) return;
|
|
394
|
-
if (Array.isArray(payload)) {
|
|
395
|
-
return payload.map((p) => removeStorageMeta(p));
|
|
396
|
-
}
|
|
397
|
-
const { ...noMeta } = payload;
|
|
398
|
-
delete noMeta._sequence;
|
|
399
|
-
return noMeta;
|
|
400
|
-
}
|
|
401
|
-
__name(removeStorageMeta, "removeStorageMeta");
|
|
402
367
|
export {
|
|
403
|
-
AbstractArchivist
|
|
404
|
-
addStorageMeta,
|
|
405
|
-
maxSequenceIndex,
|
|
406
|
-
removeStorageMeta,
|
|
407
|
-
sequenceNumber,
|
|
408
|
-
sortByStorageMeta
|
|
368
|
+
AbstractArchivist
|
|
409
369
|
};
|
|
410
370
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/AbstractArchivist.ts","../../src/StorageMeta.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { globallyUnique } from '@xylabs/object'\nimport type { Promisable, PromisableArray } from '@xylabs/promise'\nimport { difference } from '@xylabs/set'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type {\n ArchivistAllQuery,\n ArchivistClearQuery,\n ArchivistCommitQuery,\n ArchivistDeleteQuery,\n ArchivistGetQuery,\n ArchivistInsertQuery,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuery,\n ArchivistParams,\n ArchivistQueries,\n AttachableArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistGetQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistNextQuerySchema,\n asArchivistInstance,\n isArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport type { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport type {\n ModuleConfig, ModuleIdentifier, ModuleName, ModuleQueryHandlerResult, ModuleQueryResult,\n} from '@xyo-network/module-model'\nimport { duplicateModules } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n Payload, PayloadWithMeta, Schema, WithMeta,\n} from '@xyo-network/payload-model'\n\nconst NOT_IMPLEMENTED = 'Not implemented' as const\n\nexport interface ActionConfig {\n emitEvents?: boolean\n}\n\nexport interface InsertConfig extends ActionConfig {\n writeToParents?: boolean\n}\n\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 AttachableArchivistInstance<TParams, TEventData, Payload> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = ArchivistConfigSchema\n static override readonly uniqueName = globallyUnique('AbstractArchivist', AbstractArchivist, 'xyo')\n private _lastInsertedPayload: Payload | undefined\n private _parentArchivists?: 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 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 async allQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistAllQuery = { schema: ArchivistAllQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\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 async clearQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistClearQuery = { schema: ArchivistClearQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\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 commitQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistCommitQuery = { schema: ArchivistCommitQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\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 deleteQuery(hashes: Hash[], account?: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistDeleteQuery = { hashes, schema: ArchivistDeleteQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\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 getQuery(hashes: Hash[], account?: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistGetQuery = { hashes, schema: ArchivistGetQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\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 insertQuery(payloads: Payload[], account?: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistInsertQuery = { schema: ArchivistInsertQuerySchema }\n return await this.sendQueryRaw(queryPayload, payloads, account)\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 async nextQuery(options?: ArchivistNextOptions, account?: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistNextQuery = { schema: ArchivistNextQuerySchema, ...options }\n return await this.sendQueryRaw(queryPayload, undefined, account)\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, mod: 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))).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.parentArchivists())?.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 for (const [key, payload] of Object.entries(map)) {\n let requestedPayloadFound = false\n const hash = key as Hash // NOTE: Required cast as Object.entries always returns string keys\n // If this hash was requested\n if (\n requestedHashes.has(hash) // Indicate that we found it (but do not insert it yet). Since\n // one payload could satisfy two requested hashes (vit its dataHash\n // & rootHash) we only want to insert that payload once but we want\n // to keep track of all the hashes it satisfies so we can ask th\n // parents for the ones we did not find\n && !foundHashes.has(hash)\n ) {\n requestedPayloadFound = true\n // Add it to the list of found hashes\n foundHashes.add(hash)\n }\n if (requestedPayloadFound) foundPayloads.push(payload)\n }\n }\n // For all the hashes we did not find, ask the parents\n const notFoundHashes = [...difference(requestedHashes, foundHashes)]\n const [parentFoundPayloads] = await this.getFromParents(notFoundHashes)\n\n if (this.storeParentReads) {\n await this.insertWithConfig(parentFoundPayloads)\n }\n return await PayloadBuilder.build([...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 payloadsWithMeta = await PayloadBuilder.build(payloads, { stamp: false, validate: true })\n const insertedPayloads = await this.insertHandler(payloadsWithMeta)\n\n if (writeToParents) {\n await this.writeToParents(insertedPayloads)\n }\n if (emitEvents) {\n await this.emit('inserted', { mod: 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 parentArchivists() {\n this._parentArchivists = this._parentArchivists ?? {\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._parentArchivists)\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, { stamp: false, validate: 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 case ArchivistNextQuerySchema: {\n resultPayloads.push(...(await this.nextHandler(queryPayload)))\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.parentArchivists()\n return (\n await Promise.all(\n Object.values(parents.write ?? {}).map(async (parent) => {\n return parent ? await this.writeToParent(parent, payloads) : undefined\n }),\n )\n ).filter(exists).flat()\n }\n\n private async 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(mod => !(mod.address === archivist || mod.modName === archivist)))}]`,\n )\n\n // eslint-disable-next-line unicorn/no-array-reduce\n return archivistModules.reduce<Record<string, ArchivistInstance>>((prev, mod) => {\n prev[mod.address] = asArchivistInstance(mod, () => {\n isArchivistInstance(mod, { log: console })\n return `Unable to cast resolved module to an archivist: [${mod.address}, ${mod.modName}, ${mod.config.schema})}]`\n })\n\n return prev\n }, {})\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type {\n Payload, PayloadWithMeta, WithMeta,\n} from '@xyo-network/payload-model'\n\nexport interface StorageMeta {\n _sequence: bigint\n}\n\nexport type WithOptionalStorageMeta<T extends Payload> = T & Partial<StorageMeta>\n\nexport type WithStorageMeta<T extends Payload> = T & StorageMeta\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) }\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\n ? -direction\n : a._sequence > b._sequence\n ? direction\n : 0)\n}\n\nexport function removeStorageMeta<T extends Payload>(payload: WithOptionalStorageMeta<WithMeta<T>>): WithMeta<T>\nexport function removeStorageMeta<T extends Payload>(payloads: WithOptionalStorageMeta<WithMeta<T>>[]): WithMeta<T>[]\nexport function removeStorageMeta<T extends Payload>(payload?: WithOptionalStorageMeta<WithMeta<T>>): WithMeta<T> | undefined\nexport function removeStorageMeta<T extends Payload>(payload?: WithOptionalStorageMeta<WithMeta<T>>) {\n if (!payload) return\n if (Array.isArray(payload)) {\n return payload.map(p => removeStorageMeta(p))\n }\n\n const { ...noMeta } = payload\n delete noMeta._sequence\n return noMeta\n}\n"],"mappings":"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","names":["assertEx","exists","globallyUnique","difference","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistConfigSchema","ArchivistDeleteQuerySchema","ArchivistGetQuerySchema","ArchivistInsertQuerySchema","ArchivistNextQuerySchema","asArchivistInstance","isArchivistInstance","QueryBoundWitnessWrapper","AbstractModuleInstance","duplicateModules","PayloadBuilder","NOT_IMPLEMENTED","AbstractArchivist","AbstractModuleInstance","configSchemas","ArchivistConfigSchema","defaultConfigSchema","uniqueName","globallyUnique","_lastInsertedPayload","_parentArchivists","queries","ArchivistGetQuerySchema","requireAllParents","config","storeParentReads","all","_noOverride","busy","started","PayloadBuilder","build","allHandler","allQuery","account","queryPayload","schema","ArchivistAllQuerySchema","sendQueryRaw","undefined","clear","clearHandler","clearQuery","ArchivistClearQuerySchema","commit","commitHandler","commitQuery","ArchivistCommitQuerySchema","delete","hashes","deleteWithConfig","deleteQuery","ArchivistDeleteQuerySchema","get","getWithConfig","getQuery","insert","payloads","insertWithConfig","insertQuery","ArchivistInsertQuerySchema","next","options","nextWithConfig","nextQuery","ArchivistNextQuerySchema","Error","deleteHandler","_hashes","emitEvents","deletedHashes","emit","mod","getFromParent","archivist","foundPairs","dataHashPairs","filter","hash","askedFor","includes","console","warn","foundHashes","Set","map","foundPayloads","payload","notfound","has","getFromParents","parents","Object","values","parentArchivists","read","remainingHashes","parentIndex","result","length","found","getHandler","_config","requestedHashes","gotten","toAllHashMap","key","entries","requestedPayloadFound","add","push","notFoundHashes","difference","parentFoundPayloads","head","insertHandler","_payloads","insertQueryHandler","query","assertEx","JSON","stringify","resolvedPayloads","filterIncludeByDataHash","payloadHashes","payloadsWithoutQuery","filterExclude","dataHash","at","writeToParents","payloadsWithMeta","stamp","validate","insertedPayloads","nextHandler","_options","resolveArchivists","write","queryHandler","queryConfig","wrappedQuery","QueryBoundWitnessWrapper","parseQuery","builtQuery","queryable","resultPayloads","resultPayload","storeQueries","writeToParent","parent","Promise","exists","flat","archivists","archivistModules","resolve","address","name","duplicateModules","modName","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"]}
|
|
1
|
+
{"version":3,"sources":["../../src/AbstractArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { type Address, type Hash } from '@xylabs/hex'\nimport { globallyUnique, omitBy } from '@xylabs/object'\nimport type { Promisable, PromisableArray } from '@xylabs/promise'\nimport { difference } from '@xylabs/set'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type {\n ArchivistAllQuery,\n ArchivistClearQuery,\n ArchivistCommitQuery,\n ArchivistDeleteQuery,\n ArchivistGetQuery,\n ArchivistInsertQuery,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuery,\n ArchivistParams,\n ArchivistQueries,\n AttachableArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistGetQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistNextQuerySchema,\n asArchivistInstance,\n isArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport type { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport type {\n ModuleConfig, ModuleIdentifier, ModuleName, ModuleQueryHandlerResult, ModuleQueryResult,\n} from '@xyo-network/module-model'\nimport { duplicateModules } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\n\nconst NOT_IMPLEMENTED = 'Not implemented' as const\n\nexport interface ActionConfig {\n emitEvents?: boolean\n}\n\nexport interface InsertConfig extends ActionConfig {\n writeToParents?: boolean\n}\n\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 AttachableArchivistInstance<TParams, TEventData, Payload> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = ArchivistConfigSchema\n static override readonly uniqueName = globallyUnique('AbstractArchivist', AbstractArchivist, 'xyo')\n private _lastInsertedPayload: Payload | undefined\n private _parentArchivists?: 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 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 PayloadBuilder.omitStorageMeta(await this.allHandler())\n })\n }\n\n async allQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistAllQuery = { schema: ArchivistAllQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\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 async clearQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistClearQuery = { schema: ArchivistClearQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\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 commitQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistCommitQuery = { schema: ArchivistCommitQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\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 deleteQuery(hashes: Hash[], account?: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistDeleteQuery = { hashes, schema: ArchivistDeleteQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async get(hashes: Hash[]): 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 getQuery(hashes: Hash[], account?: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistGetQuery = { hashes, schema: ArchivistGetQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\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 async insertQuery(payloads: Payload[], account?: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistInsertQuery = { schema: ArchivistInsertQuerySchema }\n return await this.sendQueryRaw(queryPayload, payloads, account)\n }\n\n async next(options?: ArchivistNextOptions): Promise<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 async nextQuery(options?: ArchivistNextOptions, account?: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistNextQuery = { schema: ArchivistNextQuerySchema, ...options }\n return await this.sendQueryRaw(queryPayload, undefined, account)\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: 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, mod: this })\n }\n\n return deletedHashes\n }\n\n protected async getFromParent(hashes: Hash[], archivist: ArchivistInstance): Promise<[Payload[], Hash[]]> {\n const foundPairs = (await PayloadBuilder.dataHashPairs(await archivist.get(hashes))).filter(([, hash]) => {\n const askedFor = hashes.includes(hash)\n if (!askedFor) {\n console.warn(`Parent returned payload with hash not asked for: ${hash}`)\n // throw Error(`Parent returned payload with hash not asked for: ${hash}`)\n }\n return askedFor\n })\n\n const foundHashes = new Set(foundPairs.map(([, hash]) => hash))\n const foundPayloads = foundPairs.map(([payload]) => payload)\n\n const notfound = hashes.filter(hash => !foundHashes.has(hash))\n return [foundPayloads, notfound]\n }\n\n protected async getFromParents(hashes: Hash[]): Promise<[Payload[], Hash[]]> {\n const parents = Object.values((await this.parentArchivists())?.read ?? {})\n let remainingHashes = [...hashes]\n let parentIndex = 0\n let result: 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<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: Payload[] = []\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 for (const [key, payload] of Object.entries(map)) {\n let requestedPayloadFound = false\n const hash = key as Hash // NOTE: Required cast as Object.entries always returns string keys\n // If this hash was requested\n if (\n requestedHashes.has(hash) // Indicate that we found it (but do not insert it yet). Since\n // one payload could satisfy two requested hashes (vit its dataHash\n // & rootHash) we only want to insert that payload once but we want\n // to keep track of all the hashes it satisfies so we can ask th\n // parents for the ones we did not find\n && !foundHashes.has(hash)\n ) {\n requestedPayloadFound = true\n // Add it to the list of found hashes\n foundHashes.add(hash)\n }\n if (requestedPayloadFound) foundPayloads.push(payload)\n }\n }\n // For all the hashes we did not find, ask the parents\n const notFoundHashes = [...difference(requestedHashes, foundHashes)]\n const [parentFoundPayloads] = await this.getFromParents(notFoundHashes)\n\n if (this.storeParentReads) {\n await this.insertWithConfig(parentFoundPayloads)\n }\n return PayloadBuilder.omitStorageMeta([...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 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<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', { mod: this, payloads: insertedPayloads })\n }\n\n return PayloadBuilder.omitStorageMeta(insertedPayloads)\n }\n\n protected nextHandler(_options?: ArchivistNextOptions): Promisable<Payload[]> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected async nextWithConfig(options?: ArchivistNextOptions, _config?: InsertConfig): Promise<Payload[]> {\n const foundPayloads = await this.nextHandler(options)\n return PayloadBuilder.omitStorageMeta(foundPayloads)\n }\n\n protected async parentArchivists() {\n this._parentArchivists = this._parentArchivists ?? {\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._parentArchivists)\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 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 case ArchivistNextQuerySchema: {\n resultPayloads.push(...(await this.nextHandler(queryPayload)))\n break\n }\n default: {\n const result = await super.queryHandler(query, payloads)\n if (this.config.storeQueries) {\n await this.insertHandler([query])\n }\n return result\n }\n }\n if (this.config.storeQueries) {\n await this.insertHandler([query])\n }\n return PayloadBuilder.omitStorageMeta(resultPayloads)\n }\n\n protected async writeToParent(parent: ArchivistInstance, payloads: Payload[]): Promise<Payload[]> {\n return await parent.insert(payloads)\n }\n\n protected async writeToParents(payloads: Payload[]): Promise<Payload[]> {\n const parents = await this.parentArchivists()\n return (\n await Promise.all(\n Object.values(parents.write ?? {}).map(async (parent) => {\n return parent ? await this.writeToParent(parent, payloads) : undefined\n }),\n )\n ).filter(exists).flat()\n }\n\n private 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(mod => !(mod.address === archivist || mod.modName === archivist)))}]`,\n )\n\n // eslint-disable-next-line unicorn/no-array-reduce\n return archivistModules.reduce<Record<string, ArchivistInstance>>((prev, mod) => {\n prev[mod.address] = asArchivistInstance(mod, () => {\n isArchivistInstance(mod, { log: console })\n return `Unable to cast resolved module to an archivist: [${mod.address}, ${mod.modName}, ${mod.config.schema})}]`\n })\n\n return prev\n }, {})\n }\n}\n"],"mappings":"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","names":["assertEx","exists","globallyUnique","difference","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistConfigSchema","ArchivistDeleteQuerySchema","ArchivistGetQuerySchema","ArchivistInsertQuerySchema","ArchivistNextQuerySchema","asArchivistInstance","isArchivistInstance","QueryBoundWitnessWrapper","AbstractModuleInstance","duplicateModules","PayloadBuilder","NOT_IMPLEMENTED","AbstractArchivist","AbstractModuleInstance","configSchemas","ArchivistConfigSchema","defaultConfigSchema","uniqueName","globallyUnique","_lastInsertedPayload","_parentArchivists","queries","ArchivistGetQuerySchema","requireAllParents","config","storeParentReads","all","_noOverride","busy","started","PayloadBuilder","omitStorageMeta","allHandler","allQuery","account","queryPayload","schema","ArchivistAllQuerySchema","sendQueryRaw","undefined","clear","clearHandler","clearQuery","ArchivistClearQuerySchema","commit","commitHandler","commitQuery","ArchivistCommitQuerySchema","delete","hashes","deleteWithConfig","deleteQuery","ArchivistDeleteQuerySchema","get","getWithConfig","getQuery","insert","payloads","insertWithConfig","insertQuery","ArchivistInsertQuerySchema","next","options","nextWithConfig","nextQuery","ArchivistNextQuerySchema","Error","deleteHandler","_hashes","emitEvents","deletedHashes","emit","mod","getFromParent","archivist","foundPairs","dataHashPairs","filter","hash","askedFor","includes","console","warn","foundHashes","Set","map","foundPayloads","payload","notfound","has","getFromParents","parents","Object","values","parentArchivists","read","remainingHashes","parentIndex","result","length","found","getHandler","_config","requestedHashes","gotten","toAllHashMap","key","entries","requestedPayloadFound","add","push","notFoundHashes","difference","parentFoundPayloads","head","insertHandler","_payloads","insertQueryHandler","query","assertEx","JSON","stringify","resolvedPayloads","filterIncludeByDataHash","payloadHashes","payloadsWithoutQuery","filterExclude","dataHash","at","writeToParents","insertedPayloads","nextHandler","_options","resolveArchivists","write","queryHandler","queryConfig","wrappedQuery","QueryBoundWitnessWrapper","parseQuery","queryable","resultPayloads","resultPayload","storeQueries","writeToParent","parent","Promise","exists","flat","archivists","archivistModules","resolve","address","name","duplicateModules","modName","reduce","prev","asArchivistInstance","isArchivistInstance","log"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/archivist-abstract",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.6.0-rc.2",
|
|
4
4
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -29,20 +29,20 @@
|
|
|
29
29
|
"module": "dist/neutral/index.mjs",
|
|
30
30
|
"types": "dist/neutral/index.d.ts",
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@xylabs/assert": "^4.4.
|
|
33
|
-
"@xylabs/exists": "^4.4.
|
|
34
|
-
"@xylabs/hex": "^4.4.
|
|
35
|
-
"@xylabs/object": "^4.4.
|
|
36
|
-
"@xylabs/promise": "^4.4.
|
|
37
|
-
"@xylabs/set": "^4.4.
|
|
38
|
-
"@xyo-network/account-model": "^3.
|
|
39
|
-
"@xyo-network/archivist-model": "^3.
|
|
40
|
-
"@xyo-network/boundwitness-model": "^3.
|
|
41
|
-
"@xyo-network/boundwitness-wrapper": "^3.
|
|
42
|
-
"@xyo-network/module-abstract": "^3.
|
|
43
|
-
"@xyo-network/module-model": "^3.
|
|
44
|
-
"@xyo-network/payload-builder": "^3.
|
|
45
|
-
"@xyo-network/payload-model": "^3.
|
|
32
|
+
"@xylabs/assert": "^4.4.12",
|
|
33
|
+
"@xylabs/exists": "^4.4.12",
|
|
34
|
+
"@xylabs/hex": "^4.4.12",
|
|
35
|
+
"@xylabs/object": "^4.4.12",
|
|
36
|
+
"@xylabs/promise": "^4.4.12",
|
|
37
|
+
"@xylabs/set": "^4.4.12",
|
|
38
|
+
"@xyo-network/account-model": "^3.6.0-rc.2",
|
|
39
|
+
"@xyo-network/archivist-model": "^3.6.0-rc.2",
|
|
40
|
+
"@xyo-network/boundwitness-model": "^3.6.0-rc.2",
|
|
41
|
+
"@xyo-network/boundwitness-wrapper": "^3.6.0-rc.2",
|
|
42
|
+
"@xyo-network/module-abstract": "^3.6.0-rc.2",
|
|
43
|
+
"@xyo-network/module-model": "^3.6.0-rc.2",
|
|
44
|
+
"@xyo-network/payload-builder": "^3.6.0-rc.2",
|
|
45
|
+
"@xyo-network/payload-model": "^3.6.0-rc.2"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@xylabs/ts-scripts-yarn3": "^4.2.4",
|
|
@@ -51,5 +51,6 @@
|
|
|
51
51
|
},
|
|
52
52
|
"publishConfig": {
|
|
53
53
|
"access": "public"
|
|
54
|
-
}
|
|
54
|
+
},
|
|
55
|
+
"stableVersion": "3.5.2"
|
|
55
56
|
}
|
package/src/AbstractArchivist.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
2
|
import { exists } from '@xylabs/exists'
|
|
3
|
-
import type
|
|
4
|
-
import { globallyUnique } from '@xylabs/object'
|
|
3
|
+
import { type Address, type Hash } from '@xylabs/hex'
|
|
4
|
+
import { globallyUnique, omitBy } from '@xylabs/object'
|
|
5
5
|
import type { Promisable, PromisableArray } from '@xylabs/promise'
|
|
6
6
|
import { difference } from '@xylabs/set'
|
|
7
7
|
import type { AccountInstance } from '@xyo-network/account-model'
|
|
@@ -40,9 +40,7 @@ import type {
|
|
|
40
40
|
} from '@xyo-network/module-model'
|
|
41
41
|
import { duplicateModules } from '@xyo-network/module-model'
|
|
42
42
|
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
43
|
-
import type {
|
|
44
|
-
Payload, PayloadWithMeta, Schema, WithMeta,
|
|
45
|
-
} from '@xyo-network/payload-model'
|
|
43
|
+
import type { Payload, Schema } from '@xyo-network/payload-model'
|
|
46
44
|
|
|
47
45
|
const NOT_IMPLEMENTED = 'Not implemented' as const
|
|
48
46
|
|
|
@@ -84,11 +82,11 @@ export abstract class AbstractArchivist<
|
|
|
84
82
|
return !!this.config?.storeParentReads
|
|
85
83
|
}
|
|
86
84
|
|
|
87
|
-
all(): PromisableArray<
|
|
85
|
+
all(): PromisableArray<Payload> {
|
|
88
86
|
this._noOverride('all')
|
|
89
87
|
return this.busy(async () => {
|
|
90
88
|
await this.started('throw')
|
|
91
|
-
return
|
|
89
|
+
return PayloadBuilder.omitStorageMeta(await this.allHandler())
|
|
92
90
|
})
|
|
93
91
|
}
|
|
94
92
|
|
|
@@ -110,7 +108,7 @@ export abstract class AbstractArchivist<
|
|
|
110
108
|
return await this.sendQueryRaw(queryPayload, undefined, account)
|
|
111
109
|
}
|
|
112
110
|
|
|
113
|
-
commit(): Promisable<
|
|
111
|
+
commit(): Promisable<BoundWitness[]> {
|
|
114
112
|
this._noOverride('commit')
|
|
115
113
|
return this.busy(async () => {
|
|
116
114
|
await this.started('throw')
|
|
@@ -136,11 +134,11 @@ export abstract class AbstractArchivist<
|
|
|
136
134
|
return await this.sendQueryRaw(queryPayload, undefined, account)
|
|
137
135
|
}
|
|
138
136
|
|
|
139
|
-
async get(hashes: Hash[]): Promise<
|
|
137
|
+
async get(hashes: Hash[]): Promise<Payload[]> {
|
|
140
138
|
this._noOverride('get')
|
|
141
139
|
return await this.busy(async () => {
|
|
142
140
|
await this.started('throw')
|
|
143
|
-
return await
|
|
141
|
+
return await this.getWithConfig(hashes)
|
|
144
142
|
})
|
|
145
143
|
}
|
|
146
144
|
|
|
@@ -149,11 +147,10 @@ export abstract class AbstractArchivist<
|
|
|
149
147
|
return await this.sendQueryRaw(queryPayload, undefined, account)
|
|
150
148
|
}
|
|
151
149
|
|
|
152
|
-
async insert(payloads: Payload[]): Promise<
|
|
150
|
+
async insert(payloads: Payload[]): Promise<Payload[]> {
|
|
153
151
|
this._noOverride('insert')
|
|
154
152
|
return await this.busy(async () => {
|
|
155
153
|
await this.started('throw')
|
|
156
|
-
// make sure all incoming payloads have proper $hash and $meta
|
|
157
154
|
return await this.insertWithConfig(payloads)
|
|
158
155
|
})
|
|
159
156
|
}
|
|
@@ -163,7 +160,7 @@ export abstract class AbstractArchivist<
|
|
|
163
160
|
return await this.sendQueryRaw(queryPayload, payloads, account)
|
|
164
161
|
}
|
|
165
162
|
|
|
166
|
-
async next(options?: ArchivistNextOptions): Promise<
|
|
163
|
+
async next(options?: ArchivistNextOptions): Promise<Payload[]> {
|
|
167
164
|
this._noOverride('next')
|
|
168
165
|
return await this.busy(async () => {
|
|
169
166
|
await this.started('throw')
|
|
@@ -184,7 +181,7 @@ export abstract class AbstractArchivist<
|
|
|
184
181
|
throw new Error(NOT_IMPLEMENTED)
|
|
185
182
|
}
|
|
186
183
|
|
|
187
|
-
protected commitHandler(): Promisable<
|
|
184
|
+
protected commitHandler(): Promisable<BoundWitness[]> {
|
|
188
185
|
throw new Error(NOT_IMPLEMENTED)
|
|
189
186
|
}
|
|
190
187
|
|
|
@@ -204,7 +201,7 @@ export abstract class AbstractArchivist<
|
|
|
204
201
|
return deletedHashes
|
|
205
202
|
}
|
|
206
203
|
|
|
207
|
-
protected async getFromParent(hashes: Hash[], archivist: ArchivistInstance): Promise<[
|
|
204
|
+
protected async getFromParent(hashes: Hash[], archivist: ArchivistInstance): Promise<[Payload[], Hash[]]> {
|
|
208
205
|
const foundPairs = (await PayloadBuilder.dataHashPairs(await archivist.get(hashes))).filter(([, hash]) => {
|
|
209
206
|
const askedFor = hashes.includes(hash)
|
|
210
207
|
if (!askedFor) {
|
|
@@ -221,11 +218,11 @@ export abstract class AbstractArchivist<
|
|
|
221
218
|
return [foundPayloads, notfound]
|
|
222
219
|
}
|
|
223
220
|
|
|
224
|
-
protected async getFromParents(hashes: Hash[]): Promise<[
|
|
221
|
+
protected async getFromParents(hashes: Hash[]): Promise<[Payload[], Hash[]]> {
|
|
225
222
|
const parents = Object.values((await this.parentArchivists())?.read ?? {})
|
|
226
223
|
let remainingHashes = [...hashes]
|
|
227
224
|
let parentIndex = 0
|
|
228
|
-
let result:
|
|
225
|
+
let result: Payload[] = []
|
|
229
226
|
|
|
230
227
|
// NOTE: intentionally doing this serially
|
|
231
228
|
while (parentIndex < parents.length && remainingHashes.length > 0) {
|
|
@@ -241,7 +238,7 @@ export abstract class AbstractArchivist<
|
|
|
241
238
|
throw new Error(NOT_IMPLEMENTED)
|
|
242
239
|
}
|
|
243
240
|
|
|
244
|
-
protected async getWithConfig(hashes: Hash[], _config?: InsertConfig): Promise<
|
|
241
|
+
protected async getWithConfig(hashes: Hash[], _config?: InsertConfig): Promise<Payload[]> {
|
|
245
242
|
// Filter out duplicates
|
|
246
243
|
const requestedHashes = new Set(hashes)
|
|
247
244
|
|
|
@@ -251,7 +248,7 @@ export abstract class AbstractArchivist<
|
|
|
251
248
|
// Do not just blindly return what the archivist told us but
|
|
252
249
|
// ensure to only return requested payloads and keep track of
|
|
253
250
|
// the ones it did not find so we can ask the parents.
|
|
254
|
-
const foundPayloads:
|
|
251
|
+
const foundPayloads: Payload[] = []
|
|
255
252
|
const foundHashes = new Set<Hash>()
|
|
256
253
|
|
|
257
254
|
// NOTE: We are iterating over the returned result from the archivist
|
|
@@ -288,14 +285,14 @@ export abstract class AbstractArchivist<
|
|
|
288
285
|
if (this.storeParentReads) {
|
|
289
286
|
await this.insertWithConfig(parentFoundPayloads)
|
|
290
287
|
}
|
|
291
|
-
return
|
|
288
|
+
return PayloadBuilder.omitStorageMeta([...foundPayloads, ...parentFoundPayloads])
|
|
292
289
|
}
|
|
293
290
|
|
|
294
291
|
protected head(): Promisable<Payload | undefined> {
|
|
295
292
|
return this._lastInsertedPayload
|
|
296
293
|
}
|
|
297
294
|
|
|
298
|
-
protected insertHandler(_payloads:
|
|
295
|
+
protected insertHandler(_payloads: Payload[]): Promise<Payload[]> {
|
|
299
296
|
throw new Error(NOT_IMPLEMENTED)
|
|
300
297
|
}
|
|
301
298
|
|
|
@@ -316,12 +313,11 @@ export abstract class AbstractArchivist<
|
|
|
316
313
|
return result
|
|
317
314
|
}
|
|
318
315
|
|
|
319
|
-
protected async insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<
|
|
316
|
+
protected async insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<Payload[]> {
|
|
320
317
|
const emitEvents = config?.emitEvents ?? true
|
|
321
318
|
const writeToParents = config?.writeToParents ?? true
|
|
322
319
|
|
|
323
|
-
const
|
|
324
|
-
const insertedPayloads = await this.insertHandler(payloadsWithMeta)
|
|
320
|
+
const insertedPayloads = await this.insertHandler(payloads)
|
|
325
321
|
|
|
326
322
|
if (writeToParents) {
|
|
327
323
|
await this.writeToParents(insertedPayloads)
|
|
@@ -330,16 +326,16 @@ export abstract class AbstractArchivist<
|
|
|
330
326
|
await this.emit('inserted', { mod: this, payloads: insertedPayloads })
|
|
331
327
|
}
|
|
332
328
|
|
|
333
|
-
return insertedPayloads
|
|
329
|
+
return PayloadBuilder.omitStorageMeta(insertedPayloads)
|
|
334
330
|
}
|
|
335
331
|
|
|
336
|
-
protected nextHandler(_options?: ArchivistNextOptions): Promisable<
|
|
332
|
+
protected nextHandler(_options?: ArchivistNextOptions): Promisable<Payload[]> {
|
|
337
333
|
throw new Error(NOT_IMPLEMENTED)
|
|
338
334
|
}
|
|
339
335
|
|
|
340
|
-
protected async nextWithConfig(options?: ArchivistNextOptions, _config?: InsertConfig): Promise<
|
|
336
|
+
protected async nextWithConfig(options?: ArchivistNextOptions, _config?: InsertConfig): Promise<Payload[]> {
|
|
341
337
|
const foundPayloads = await this.nextHandler(options)
|
|
342
|
-
return
|
|
338
|
+
return PayloadBuilder.omitStorageMeta(foundPayloads)
|
|
343
339
|
}
|
|
344
340
|
|
|
345
341
|
protected async parentArchivists() {
|
|
@@ -357,7 +353,6 @@ export abstract class AbstractArchivist<
|
|
|
357
353
|
queryConfig?: TConfig,
|
|
358
354
|
): Promise<ModuleQueryHandlerResult> {
|
|
359
355
|
const wrappedQuery = await QueryBoundWitnessWrapper.parseQuery<ArchivistQueries>(query, payloads)
|
|
360
|
-
const builtQuery = await PayloadBuilder.build(query, { stamp: false, validate: true })
|
|
361
356
|
const queryPayload = await wrappedQuery.getQuery()
|
|
362
357
|
assertEx(await this.queryable(query, payloads, queryConfig))
|
|
363
358
|
const resultPayloads: Payload[] = []
|
|
@@ -403,22 +398,22 @@ export abstract class AbstractArchivist<
|
|
|
403
398
|
default: {
|
|
404
399
|
const result = await super.queryHandler(query, payloads)
|
|
405
400
|
if (this.config.storeQueries) {
|
|
406
|
-
await this.insertHandler([
|
|
401
|
+
await this.insertHandler([query])
|
|
407
402
|
}
|
|
408
403
|
return result
|
|
409
404
|
}
|
|
410
405
|
}
|
|
411
406
|
if (this.config.storeQueries) {
|
|
412
|
-
await this.insertHandler([
|
|
407
|
+
await this.insertHandler([query])
|
|
413
408
|
}
|
|
414
|
-
return resultPayloads
|
|
409
|
+
return PayloadBuilder.omitStorageMeta(resultPayloads)
|
|
415
410
|
}
|
|
416
411
|
|
|
417
|
-
protected async writeToParent(parent: ArchivistInstance, payloads: Payload[]): Promise<
|
|
412
|
+
protected async writeToParent(parent: ArchivistInstance, payloads: Payload[]): Promise<Payload[]> {
|
|
418
413
|
return await parent.insert(payloads)
|
|
419
414
|
}
|
|
420
415
|
|
|
421
|
-
protected async writeToParents(payloads: Payload[]): Promise<
|
|
416
|
+
protected async writeToParents(payloads: Payload[]): Promise<Payload[]> {
|
|
422
417
|
const parents = await this.parentArchivists()
|
|
423
418
|
return (
|
|
424
419
|
await Promise.all(
|
package/src/index.ts
CHANGED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { Payload, PayloadWithMeta, WithMeta } from '@xyo-network/payload-model';
|
|
2
|
-
export interface StorageMeta {
|
|
3
|
-
_sequence: bigint;
|
|
4
|
-
}
|
|
5
|
-
export type WithOptionalStorageMeta<T extends Payload> = T & Partial<StorageMeta>;
|
|
6
|
-
export type WithStorageMeta<T extends Payload> = T & StorageMeta;
|
|
7
|
-
export declare const maxSequenceIndex = 10000000000n;
|
|
8
|
-
export declare const sequenceNumber: (index: number) => bigint;
|
|
9
|
-
export declare const addStorageMeta: <T extends PayloadWithMeta>(payload: T, index?: number) => T & {
|
|
10
|
-
_sequence: bigint;
|
|
11
|
-
};
|
|
12
|
-
export declare const sortByStorageMeta: <T extends PayloadWithMeta>(payloads: WithStorageMeta<T>[], direction?: -1 | 1) => WithStorageMeta<T>[];
|
|
13
|
-
export declare function removeStorageMeta<T extends Payload>(payload: WithOptionalStorageMeta<WithMeta<T>>): WithMeta<T>;
|
|
14
|
-
export declare function removeStorageMeta<T extends Payload>(payloads: WithOptionalStorageMeta<WithMeta<T>>[]): WithMeta<T>[];
|
|
15
|
-
export declare function removeStorageMeta<T extends Payload>(payload?: WithOptionalStorageMeta<WithMeta<T>>): WithMeta<T> | undefined;
|
|
16
|
-
//# sourceMappingURL=StorageMeta.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StorageMeta.d.ts","sourceRoot":"","sources":["../../src/StorageMeta.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EAAE,eAAe,EAAE,QAAQ,EACnC,MAAM,4BAA4B,CAAA;AAEnC,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;AAEjF,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,GAAG,WAAW,CAAA;AAEhE,eAAO,MAAM,gBAAgB,eAAkB,CAAA;AAE/C,eAAO,MAAM,cAAc,UAAW,MAAM,WAG3C,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,eAAe,WAAW,CAAC;;CAEnE,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,eAAe,YAAY,eAAe,CAAC,CAAC,CAAC,EAAE,cAAa,CAAC,CAAC,GAAG,CAAC,yBAO7G,CAAA;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;AAChH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,OAAO,EAAE,QAAQ,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;AACrH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,CAAC,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA"}
|
package/src/StorageMeta.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { assertEx } from '@xylabs/assert'
|
|
2
|
-
import type {
|
|
3
|
-
Payload, PayloadWithMeta, WithMeta,
|
|
4
|
-
} from '@xyo-network/payload-model'
|
|
5
|
-
|
|
6
|
-
export interface StorageMeta {
|
|
7
|
-
_sequence: bigint
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export type WithOptionalStorageMeta<T extends Payload> = T & Partial<StorageMeta>
|
|
11
|
-
|
|
12
|
-
export type WithStorageMeta<T extends Payload> = T & StorageMeta
|
|
13
|
-
|
|
14
|
-
export const maxSequenceIndex = 10_000_000_000n
|
|
15
|
-
|
|
16
|
-
export const sequenceNumber = (index: number) => {
|
|
17
|
-
assertEx(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`)
|
|
18
|
-
return BigInt(Date.now()) * maxSequenceIndex + BigInt(index)
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export const addStorageMeta = <T extends PayloadWithMeta>(payload: T, index = 0) => {
|
|
22
|
-
return { ...payload, _sequence: sequenceNumber(index) }
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export const sortByStorageMeta = <T extends PayloadWithMeta>(payloads: WithStorageMeta<T>[], direction: -1 | 1 = 1) => {
|
|
26
|
-
return payloads.sort((a, b) =>
|
|
27
|
-
a._sequence < b._sequence
|
|
28
|
-
? -direction
|
|
29
|
-
: a._sequence > b._sequence
|
|
30
|
-
? direction
|
|
31
|
-
: 0)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export function removeStorageMeta<T extends Payload>(payload: WithOptionalStorageMeta<WithMeta<T>>): WithMeta<T>
|
|
35
|
-
export function removeStorageMeta<T extends Payload>(payloads: WithOptionalStorageMeta<WithMeta<T>>[]): WithMeta<T>[]
|
|
36
|
-
export function removeStorageMeta<T extends Payload>(payload?: WithOptionalStorageMeta<WithMeta<T>>): WithMeta<T> | undefined
|
|
37
|
-
export function removeStorageMeta<T extends Payload>(payload?: WithOptionalStorageMeta<WithMeta<T>>) {
|
|
38
|
-
if (!payload) return
|
|
39
|
-
if (Array.isArray(payload)) {
|
|
40
|
-
return payload.map(p => removeStorageMeta(p))
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const { ...noMeta } = payload
|
|
44
|
-
delete noMeta._sequence
|
|
45
|
-
return noMeta
|
|
46
|
-
}
|