@xyo-network/archivist-abstract 2.84.6 → 2.84.8
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/browser/AbstractArchivist.d.cts.map +1 -1
- package/dist/browser/AbstractArchivist.d.mts.map +1 -1
- package/dist/browser/AbstractArchivist.d.ts.map +1 -1
- package/dist/browser/index.cjs +20 -15
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +20 -15
- package/dist/browser/index.js.map +1 -1
- package/dist/node/AbstractArchivist.d.cts.map +1 -1
- package/dist/node/AbstractArchivist.d.mts.map +1 -1
- package/dist/node/AbstractArchivist.d.ts.map +1 -1
- package/dist/node/{index.mjs → index.cjs} +82 -59
- package/dist/node/index.cjs.map +1 -0
- package/dist/node/index.js +63 -76
- package/dist/node/index.js.map +1 -1
- package/package.json +17 -17
- package/src/AbstractArchivist.ts +22 -15
- package/dist/node/index.mjs.map +0 -1
|
@@ -1,27 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
|
+
AbstractArchivist: () => AbstractArchivist
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(src_exports);
|
|
26
|
+
|
|
1
27
|
// src/AbstractArchivist.ts
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
isArchivistInstance
|
|
13
|
-
} from "@xyo-network/archivist-model";
|
|
14
|
-
import { QueryBoundWitnessWrapper } from "@xyo-network/boundwitness-builder";
|
|
15
|
-
import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
|
|
16
|
-
import { PayloadHasher } from "@xyo-network/hash";
|
|
17
|
-
import { AbstractModuleInstance } from "@xyo-network/module-abstract";
|
|
18
|
-
import { duplicateModules } from "@xyo-network/module-model";
|
|
19
|
-
import { PayloadWrapper } from "@xyo-network/payload-wrapper";
|
|
20
|
-
var AbstractArchivist = class extends AbstractModuleInstance {
|
|
28
|
+
var import_assert = require("@xylabs/assert");
|
|
29
|
+
var import_lodash = require("@xylabs/lodash");
|
|
30
|
+
var import_archivist_model = require("@xyo-network/archivist-model");
|
|
31
|
+
var import_boundwitness_builder = require("@xyo-network/boundwitness-builder");
|
|
32
|
+
var import_boundwitness_model = require("@xyo-network/boundwitness-model");
|
|
33
|
+
var import_hash = require("@xyo-network/hash");
|
|
34
|
+
var import_module_abstract = require("@xyo-network/module-abstract");
|
|
35
|
+
var import_module_model = require("@xyo-network/module-model");
|
|
36
|
+
var import_payload_wrapper = require("@xyo-network/payload-wrapper");
|
|
37
|
+
var AbstractArchivist = class extends import_module_abstract.AbstractModuleInstance {
|
|
21
38
|
_lastInsertedPayload;
|
|
22
39
|
_parents;
|
|
23
40
|
get queries() {
|
|
24
|
-
return [ArchivistGetQuerySchema, ...super.queries];
|
|
41
|
+
return [import_archivist_model.ArchivistGetQuerySchema, ...super.queries];
|
|
25
42
|
}
|
|
26
43
|
get requireAllParents() {
|
|
27
44
|
return this.config.requireAllParents ?? true;
|
|
@@ -83,16 +100,16 @@ var AbstractArchivist = class extends AbstractModuleInstance {
|
|
|
83
100
|
});
|
|
84
101
|
}
|
|
85
102
|
allHandler() {
|
|
86
|
-
throw Error("Not implemented");
|
|
103
|
+
throw new Error("Not implemented");
|
|
87
104
|
}
|
|
88
105
|
clearHandler() {
|
|
89
|
-
throw Error("Not implemented");
|
|
106
|
+
throw new Error("Not implemented");
|
|
90
107
|
}
|
|
91
108
|
commitHandler() {
|
|
92
|
-
throw Error("Not implemented");
|
|
109
|
+
throw new Error("Not implemented");
|
|
93
110
|
}
|
|
94
111
|
deleteHandler(_hashes) {
|
|
95
|
-
throw Error("Not implemented");
|
|
112
|
+
throw new Error("Not implemented");
|
|
96
113
|
}
|
|
97
114
|
async deleteWithConfig(hashes, config) {
|
|
98
115
|
const emitEvents = (config == null ? void 0 : config.emitEvents) ?? true;
|
|
@@ -104,7 +121,7 @@ var AbstractArchivist = class extends AbstractModuleInstance {
|
|
|
104
121
|
}
|
|
105
122
|
async getFromParent(hashes, archivist) {
|
|
106
123
|
const foundPairs = (await Promise.all(
|
|
107
|
-
(await archivist.get(hashes)).map(async (payload) => [await PayloadHasher.hashAsync(payload), payload])
|
|
124
|
+
(await archivist.get(hashes)).map(async (payload) => [await import_hash.PayloadHasher.hashAsync(payload), payload])
|
|
108
125
|
)).filter(([hash]) => {
|
|
109
126
|
const askedFor = hashes.includes(hash);
|
|
110
127
|
if (!askedFor) {
|
|
@@ -112,9 +129,9 @@ var AbstractArchivist = class extends AbstractModuleInstance {
|
|
|
112
129
|
}
|
|
113
130
|
return askedFor;
|
|
114
131
|
});
|
|
115
|
-
const foundHashes = foundPairs.map(([hash]) => hash);
|
|
132
|
+
const foundHashes = new Set(foundPairs.map(([hash]) => hash));
|
|
116
133
|
const foundPayloads = foundPairs.map(([, payload]) => payload);
|
|
117
|
-
const notfound = hashes.filter((hash) => !foundHashes.
|
|
134
|
+
const notfound = hashes.filter((hash) => !foundHashes.has(hash));
|
|
118
135
|
return [foundPayloads, notfound];
|
|
119
136
|
}
|
|
120
137
|
async getFromParents(hashes) {
|
|
@@ -132,19 +149,19 @@ var AbstractArchivist = class extends AbstractModuleInstance {
|
|
|
132
149
|
return [result, remainingHashes];
|
|
133
150
|
}
|
|
134
151
|
getHandler(_hashes) {
|
|
135
|
-
throw Error("Not implemented");
|
|
152
|
+
throw new Error("Not implemented");
|
|
136
153
|
}
|
|
137
154
|
async getWithConfig(hashes, config) {
|
|
138
155
|
const emitEvents = (config == null ? void 0 : config.emitEvents) ?? true;
|
|
139
|
-
const map = await PayloadWrapper.toMap(await this.getHandler(hashes));
|
|
156
|
+
const map = await import_payload_wrapper.PayloadWrapper.toMap(await this.getHandler(hashes));
|
|
140
157
|
const { foundPayloads, notfoundHashes } = hashes.reduce(
|
|
141
158
|
(prev, hash) => {
|
|
142
159
|
const found = map[hash];
|
|
143
160
|
if (found) {
|
|
144
|
-
if (found.schema === BoundWitnessSchema) {
|
|
145
|
-
prev.foundPayloads.push({ ...PayloadHasher.hashFields(found),
|
|
161
|
+
if (found.schema === import_boundwitness_model.BoundWitnessSchema) {
|
|
162
|
+
prev.foundPayloads.push({ ...import_hash.PayloadHasher.hashFields(found), _signatures: found._signatures });
|
|
146
163
|
} else {
|
|
147
|
-
prev.foundPayloads.push({ ...PayloadHasher.hashFields(found) });
|
|
164
|
+
prev.foundPayloads.push({ ...import_hash.PayloadHasher.hashFields(found) });
|
|
148
165
|
}
|
|
149
166
|
} else {
|
|
150
167
|
prev.notfoundHashes.push(hash);
|
|
@@ -163,7 +180,7 @@ var AbstractArchivist = class extends AbstractModuleInstance {
|
|
|
163
180
|
return this._lastInsertedPayload;
|
|
164
181
|
}
|
|
165
182
|
insertHandler(_payloads) {
|
|
166
|
-
throw Error("Not implemented");
|
|
183
|
+
throw new Error("Not implemented");
|
|
167
184
|
}
|
|
168
185
|
async insertWithConfig(payloads, config) {
|
|
169
186
|
const emitEvents = (config == null ? void 0 : config.emitEvents) ?? true;
|
|
@@ -184,36 +201,39 @@ var AbstractArchivist = class extends AbstractModuleInstance {
|
|
|
184
201
|
read: await this.resolveArchivists((_d = (_c = this.config) == null ? void 0 : _c.parents) == null ? void 0 : _d.read),
|
|
185
202
|
write: await this.resolveArchivists((_f = (_e = this.config) == null ? void 0 : _e.parents) == null ? void 0 : _f.write)
|
|
186
203
|
};
|
|
187
|
-
return assertEx(this._parents);
|
|
204
|
+
return (0, import_assert.assertEx)(this._parents);
|
|
188
205
|
}
|
|
189
206
|
async queryHandler(query, payloads, queryConfig) {
|
|
190
207
|
var _a;
|
|
191
|
-
const wrappedQuery = QueryBoundWitnessWrapper.parseQuery(query, payloads);
|
|
208
|
+
const wrappedQuery = import_boundwitness_builder.QueryBoundWitnessWrapper.parseQuery(query, payloads);
|
|
192
209
|
const queryPayload = await wrappedQuery.getQuery();
|
|
193
|
-
assertEx(this.queryable(query, payloads, queryConfig));
|
|
210
|
+
(0, import_assert.assertEx)(this.queryable(query, payloads, queryConfig));
|
|
194
211
|
const resultPayloads = [];
|
|
195
212
|
if (this.config.storeQueries) {
|
|
196
213
|
await this.insertHandler([query]);
|
|
197
214
|
}
|
|
198
215
|
switch (queryPayload.schema) {
|
|
199
|
-
case ArchivistAllQuerySchema:
|
|
216
|
+
case import_archivist_model.ArchivistAllQuerySchema: {
|
|
200
217
|
resultPayloads.push(...await this.allHandler());
|
|
201
218
|
break;
|
|
202
|
-
|
|
219
|
+
}
|
|
220
|
+
case import_archivist_model.ArchivistClearQuerySchema: {
|
|
203
221
|
await this.clearHandler();
|
|
204
222
|
break;
|
|
205
|
-
|
|
223
|
+
}
|
|
224
|
+
case import_archivist_model.ArchivistCommitQuerySchema: {
|
|
206
225
|
resultPayloads.push(...await this.commitHandler());
|
|
207
226
|
break;
|
|
208
|
-
|
|
227
|
+
}
|
|
228
|
+
case import_archivist_model.ArchivistDeleteQuerySchema: {
|
|
209
229
|
const resultPayload = {
|
|
210
230
|
hashes: [...await this.deleteWithConfig(queryPayload.hashes)],
|
|
211
|
-
schema: ArchivistDeleteQuerySchema
|
|
231
|
+
schema: import_archivist_model.ArchivistDeleteQuerySchema
|
|
212
232
|
};
|
|
213
233
|
resultPayloads.push(resultPayload);
|
|
214
234
|
break;
|
|
215
235
|
}
|
|
216
|
-
case ArchivistGetQuerySchema:
|
|
236
|
+
case import_archivist_model.ArchivistGetQuerySchema: {
|
|
217
237
|
if ((_a = queryPayload.hashes) == null ? void 0 : _a.length) {
|
|
218
238
|
resultPayloads.push(...await this.getWithConfig(queryPayload.hashes));
|
|
219
239
|
} else {
|
|
@@ -222,17 +242,19 @@ var AbstractArchivist = class extends AbstractModuleInstance {
|
|
|
222
242
|
resultPayloads.push(head);
|
|
223
243
|
}
|
|
224
244
|
break;
|
|
225
|
-
|
|
245
|
+
}
|
|
246
|
+
case import_archivist_model.ArchivistInsertQuerySchema: {
|
|
226
247
|
const payloads2 = await wrappedQuery.getPayloads();
|
|
227
|
-
assertEx(await wrappedQuery.getPayloads(), `Missing payloads: ${JSON.stringify(wrappedQuery.payload(), null, 2)}`);
|
|
228
|
-
const resolvedPayloads = await PayloadWrapper.filterExclude(payloads2, await wrappedQuery.hashAsync());
|
|
229
|
-
assertEx(resolvedPayloads.length === payloads2.length, `Could not find some passed hashes [${resolvedPayloads.length} != ${payloads2.length}]`);
|
|
248
|
+
(0, import_assert.assertEx)(await wrappedQuery.getPayloads(), `Missing payloads: ${JSON.stringify(wrappedQuery.payload(), null, 2)}`);
|
|
249
|
+
const resolvedPayloads = await import_payload_wrapper.PayloadWrapper.filterExclude(payloads2, await wrappedQuery.hashAsync());
|
|
250
|
+
(0, import_assert.assertEx)(resolvedPayloads.length === payloads2.length, `Could not find some passed hashes [${resolvedPayloads.length} != ${payloads2.length}]`);
|
|
230
251
|
resultPayloads.push(...await this.insertWithConfig(payloads2));
|
|
231
|
-
this._lastInsertedPayload = resolvedPayloads
|
|
252
|
+
this._lastInsertedPayload = resolvedPayloads.at(-1);
|
|
232
253
|
break;
|
|
233
254
|
}
|
|
234
|
-
default:
|
|
255
|
+
default: {
|
|
235
256
|
return await super.queryHandler(query, payloads);
|
|
257
|
+
}
|
|
236
258
|
}
|
|
237
259
|
return resultPayloads;
|
|
238
260
|
}
|
|
@@ -241,7 +263,7 @@ var AbstractArchivist = class extends AbstractModuleInstance {
|
|
|
241
263
|
}
|
|
242
264
|
async writeToParents(payloads) {
|
|
243
265
|
const parents = await this.parents();
|
|
244
|
-
return compact(
|
|
266
|
+
return (0, import_lodash.compact)(
|
|
245
267
|
await Promise.all(
|
|
246
268
|
Object.values(parents.write ?? {}).map(async (parent) => {
|
|
247
269
|
return parent ? await this.writeToParent(parent, payloads) : void 0;
|
|
@@ -251,24 +273,25 @@ var AbstractArchivist = class extends AbstractModuleInstance {
|
|
|
251
273
|
}
|
|
252
274
|
async resolveArchivists(archivists = []) {
|
|
253
275
|
const archivistModules = [...await this.resolve({ address: archivists }), ...await this.resolve({ name: archivists })].filter(
|
|
254
|
-
duplicateModules
|
|
276
|
+
import_module_model.duplicateModules
|
|
255
277
|
);
|
|
256
|
-
assertEx(
|
|
278
|
+
(0, import_assert.assertEx)(
|
|
257
279
|
!this.requireAllParents || archivistModules.length === archivists.length,
|
|
258
280
|
`Failed to find some archivists (set allRequired to false if ok): [${archivists.filter(
|
|
259
|
-
(archivist) => archivistModules.map((
|
|
281
|
+
(archivist) => archivistModules.map((module2) => !(module2.address === archivist || module2.config.name === archivist))
|
|
260
282
|
)}]`
|
|
261
283
|
);
|
|
262
|
-
return archivistModules.reduce((prev,
|
|
263
|
-
prev[
|
|
264
|
-
isArchivistInstance(
|
|
265
|
-
return `Unable to cast resolved module to an archivist: [${
|
|
284
|
+
return archivistModules.reduce((prev, module2) => {
|
|
285
|
+
prev[module2.address] = (0, import_archivist_model.asArchivistInstance)(module2, () => {
|
|
286
|
+
(0, import_archivist_model.isArchivistInstance)(module2, { log: console });
|
|
287
|
+
return `Unable to cast resolved module to an archivist: [${module2.address}, ${module2.config.name}, ${module2.config.schema})}]`;
|
|
266
288
|
});
|
|
267
289
|
return prev;
|
|
268
290
|
}, {});
|
|
269
291
|
}
|
|
270
292
|
};
|
|
271
|
-
export
|
|
293
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
294
|
+
0 && (module.exports = {
|
|
272
295
|
AbstractArchivist
|
|
273
|
-
};
|
|
274
|
-
//# sourceMappingURL=index.
|
|
296
|
+
});
|
|
297
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/AbstractArchivist.ts"],"sourcesContent":["export * from './AbstractArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable, PromisableArray } from '@xylabs/promise'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistDeleteQuery,\n ArchivistDeleteQuerySchema,\n ArchivistGetQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistParams,\n ArchivistQuery,\n ArchivistQueryBase,\n asArchivistInstance,\n isArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { BoundWitness, BoundWitnessSchema, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { duplicateModules, ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nexport interface ActionConfig {\n emitEvents?: boolean\n}\n\nexport interface InsertConfig extends ActionConfig {\n writeToParents?: boolean\n}\n\nexport interface ArchivistParentInstances {\n commit?: Record<string, ArchivistInstance>\n read?: Record<string, ArchivistInstance>\n write?: Record<string, ArchivistInstance>\n}\n\nexport abstract class AbstractArchivist<\n TParams extends ArchivistParams = ArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractModuleInstance<TParams, TEventData>\n implements ArchivistInstance<TParams>\n{\n private _lastInsertedPayload: Payload | undefined\n private _parents?: ArchivistParentInstances\n\n override get queries(): string[] {\n return [ArchivistGetQuerySchema, ...super.queries]\n }\n\n get requireAllParents() {\n return this.config.requireAllParents ?? true\n }\n\n protected override get _queryAccountPaths(): Record<ArchivistQueryBase['schema'], string> {\n return {\n 'network.xyo.query.archivist.all': '1/1',\n 'network.xyo.query.archivist.clear': '1/2',\n 'network.xyo.query.archivist.commit': '1/3',\n 'network.xyo.query.archivist.delete': '1/4',\n 'network.xyo.query.archivist.get': '1/5',\n 'network.xyo.query.archivist.insert': '1/6',\n }\n }\n\n protected get storeParentReads() {\n return !!this.config?.storeParentReads\n }\n\n all(): PromisableArray<Payload> {\n this._noOverride('all')\n return this.busy(async () => {\n await this.started('throw')\n return await this.allHandler()\n })\n }\n\n clear(): Promisable<void> {\n this._noOverride('clear')\n return this.busy(async () => {\n await this.started('throw')\n return await this.clearHandler()\n })\n }\n\n commit(): Promisable<BoundWitness[]> {\n this._noOverride('commit')\n return this.busy(async () => {\n await this.started('throw')\n return await this.commitHandler()\n })\n }\n\n async delete(hashes: string[]): Promise<string[]> {\n this._noOverride('delete')\n return await this.busy(async () => {\n await this.started('throw')\n return await this.deleteWithConfig(hashes)\n })\n }\n\n async get(hashes: string[]): Promise<Payload[]> {\n this._noOverride('get')\n return await this.busy(async () => {\n await this.started('throw')\n return await this.getWithConfig(hashes)\n })\n }\n\n async insert(payloads: Payload[]): Promise<Payload[]> {\n this._noOverride('insert')\n return await this.busy(async () => {\n await this.started('throw')\n return await this.insertWithConfig(payloads)\n })\n }\n\n protected allHandler(): PromisableArray<Payload> {\n throw new Error('Not implemented')\n }\n\n protected clearHandler(): Promisable<void> {\n throw new Error('Not implemented')\n }\n\n protected commitHandler(): Promisable<BoundWitness[]> {\n throw new Error('Not implemented')\n }\n\n protected deleteHandler(_hashes: string[]): PromisableArray<string> {\n throw new Error('Not implemented')\n }\n\n protected async deleteWithConfig(hashes: string[], config?: ActionConfig): Promise<string[]> {\n const emitEvents = config?.emitEvents ?? true\n\n const deletedHashes = await this.deleteHandler(hashes)\n\n if (emitEvents) {\n await this.emit('deleted', { hashes: deletedHashes, module: this })\n }\n\n return deletedHashes\n }\n\n protected async getFromParent(hashes: string[], archivist: ArchivistInstance): Promise<[Payload[], string[]]> {\n const foundPairs = (\n await Promise.all(\n (await archivist.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n ).filter(([hash]) => {\n const askedFor = hashes.includes(hash)\n if (!askedFor) {\n console.warn(`Parent returned payload with hash not asked for: ${hash}`)\n //throw Error(`Parent returned payload with hash not asked for: ${hash}`)\n }\n return askedFor\n })\n\n const foundHashes = new Set(foundPairs.map(([hash]) => hash))\n const foundPayloads = foundPairs.map(([, payload]) => payload)\n\n const notfound = hashes.filter((hash) => !foundHashes.has(hash))\n return [foundPayloads, notfound]\n }\n\n protected async getFromParents(hashes: string[]): Promise<[Payload[], string[]]> {\n const parents = Object.values((await this.parents())?.read ?? {})\n let remainingHashes = [...hashes]\n let parentIndex = 0\n let result: Payload[] = []\n\n //intentionally doing this serially\n while (parentIndex < parents.length && remainingHashes.length > 0) {\n const [found, notfound] = await this.getFromParent(remainingHashes, parents[parentIndex])\n result = [...result, ...found]\n remainingHashes = notfound\n parentIndex++\n }\n return [result, remainingHashes]\n }\n\n protected getHandler(_hashes: string[]): Promisable<Payload[]> {\n throw new Error('Not implemented')\n }\n\n protected async getWithConfig(hashes: string[], config?: InsertConfig): Promise<Payload[]> {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const emitEvents = config?.emitEvents ?? true\n const map = await PayloadWrapper.toMap(await this.getHandler(hashes))\n\n // eslint-disable-next-line unicorn/no-array-reduce\n const { foundPayloads, notfoundHashes } = hashes.reduce<{ foundPayloads: Payload[]; notfoundHashes: string[] }>(\n (prev, hash) => {\n const found = map[hash]\n if (found) {\n //TODO: Find a better way to scrub meta data without scrubbing _signatures\n if (found.schema === BoundWitnessSchema) {\n prev.foundPayloads.push({ ...PayloadHasher.hashFields(found), _signatures: (found as BoundWitness)._signatures } as BoundWitness)\n } else {\n prev.foundPayloads.push({ ...PayloadHasher.hashFields(found) } as Payload)\n }\n } else {\n prev.notfoundHashes.push(hash)\n }\n return prev\n },\n { foundPayloads: [], notfoundHashes: [] },\n )\n\n const [parentFoundPayloads] = await this.getFromParents(notfoundHashes)\n\n if (this.storeParentReads) {\n await this.insertWithConfig(parentFoundPayloads)\n }\n return [...foundPayloads, ...parentFoundPayloads]\n }\n\n protected head(): Promisable<Payload | undefined> {\n return this._lastInsertedPayload\n }\n\n protected insertHandler(_payloads: Payload[]): Promise<Payload[]> {\n throw new Error('Not implemented')\n }\n\n protected async insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<Payload[]> {\n const emitEvents = config?.emitEvents ?? true\n const writeToParents = config?.writeToParents ?? true\n\n const insertedPayloads = await this.insertHandler(payloads)\n\n if (writeToParents) {\n await this.writeToParents(insertedPayloads)\n }\n if (emitEvents) {\n await this.emit('inserted', { module: this, payloads: insertedPayloads })\n }\n\n return insertedPayloads\n }\n\n protected async parents() {\n this._parents = this._parents ?? {\n commit: await this.resolveArchivists(this.config?.parents?.commit),\n read: await this.resolveArchivists(this.config?.parents?.read),\n write: await this.resolveArchivists(this.config?.parents?.write),\n }\n return assertEx(this._parents)\n }\n\n protected override async queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(\n query: T,\n payloads?: Payload[],\n queryConfig?: TConfig,\n ): Promise<ModuleQueryHandlerResult> {\n const wrappedQuery = QueryBoundWitnessWrapper.parseQuery<ArchivistQuery>(query, payloads)\n const queryPayload = await wrappedQuery.getQuery()\n assertEx(this.queryable(query, payloads, queryConfig))\n const resultPayloads: Payload[] = []\n if (this.config.storeQueries) {\n await this.insertHandler([query])\n }\n\n switch (queryPayload.schema) {\n case ArchivistAllQuerySchema: {\n resultPayloads.push(...(await this.allHandler()))\n break\n }\n case ArchivistClearQuerySchema: {\n await this.clearHandler()\n break\n }\n case ArchivistCommitQuerySchema: {\n resultPayloads.push(...(await this.commitHandler()))\n break\n }\n case ArchivistDeleteQuerySchema: {\n const resultPayload: ArchivistDeleteQuery = {\n hashes: [...(await this.deleteWithConfig(queryPayload.hashes))],\n schema: ArchivistDeleteQuerySchema,\n }\n resultPayloads.push(resultPayload)\n break\n }\n case ArchivistGetQuerySchema: {\n if (queryPayload.hashes?.length) {\n resultPayloads.push(...(await this.getWithConfig(queryPayload.hashes)))\n } else {\n const head = await this.head()\n if (head) resultPayloads.push(head)\n }\n break\n }\n case ArchivistInsertQuerySchema: {\n const payloads = await wrappedQuery.getPayloads()\n assertEx(await wrappedQuery.getPayloads(), `Missing payloads: ${JSON.stringify(wrappedQuery.payload(), null, 2)}`)\n const resolvedPayloads = await PayloadWrapper.filterExclude(payloads, await wrappedQuery.hashAsync())\n assertEx(resolvedPayloads.length === payloads.length, `Could not find some passed hashes [${resolvedPayloads.length} != ${payloads.length}]`)\n resultPayloads.push(...(await this.insertWithConfig(payloads)))\n // NOTE: There isn't an exact equivalence between what we get and what we store. Once\n // we move to returning only inserted Payloads(/hash) instead of a BoundWitness, we\n // can grab the actual last one\n this._lastInsertedPayload = resolvedPayloads.at(-1)\n break\n }\n default: {\n return await super.queryHandler(query, payloads)\n }\n }\n return resultPayloads\n }\n\n protected async writeToParent(parent: ArchivistInstance, payloads: Payload[]) {\n return await parent.insert(payloads)\n }\n\n protected async writeToParents(payloads: Payload[]): Promise<Payload[]> {\n const parents = await this.parents()\n return compact(\n await Promise.all(\n Object.values(parents.write ?? {}).map(async (parent) => {\n return parent ? await this.writeToParent(parent, payloads) : undefined\n }),\n ),\n ).flat()\n }\n\n private async resolveArchivists(archivists: string[] = []) {\n const archivistModules = [...(await this.resolve({ address: archivists })), ...(await this.resolve({ name: archivists }))].filter(\n duplicateModules,\n )\n\n assertEx(\n !this.requireAllParents || archivistModules.length === archivists.length,\n `Failed to find some archivists (set allRequired to false if ok): [${archivists.filter((archivist) =>\n archivistModules.map((module) => !(module.address === archivist || module.config.name === archivist)),\n )}]`,\n )\n\n // eslint-disable-next-line unicorn/no-array-reduce\n return archivistModules.reduce<Record<string, ArchivistInstance>>((prev, module) => {\n prev[module.address] = asArchivistInstance(module, () => {\n isArchivistInstance(module, { log: console })\n return `Unable to cast resolved module to an archivist: [${module.address}, ${module.config.name}, ${module.config.schema})}]`\n })\n\n return prev\n }, {})\n }\n}\n"],"mappings":"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","names":["payloads","module"]}
|
package/dist/node/index.js
CHANGED
|
@@ -1,44 +1,27 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// src/index.ts
|
|
21
|
-
var src_exports = {};
|
|
22
|
-
__export(src_exports, {
|
|
23
|
-
AbstractArchivist: () => AbstractArchivist
|
|
24
|
-
});
|
|
25
|
-
module.exports = __toCommonJS(src_exports);
|
|
26
|
-
|
|
27
1
|
// src/AbstractArchivist.ts
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
2
|
+
import { assertEx } from "@xylabs/assert";
|
|
3
|
+
import { compact } from "@xylabs/lodash";
|
|
4
|
+
import {
|
|
5
|
+
ArchivistAllQuerySchema,
|
|
6
|
+
ArchivistClearQuerySchema,
|
|
7
|
+
ArchivistCommitQuerySchema,
|
|
8
|
+
ArchivistDeleteQuerySchema,
|
|
9
|
+
ArchivistGetQuerySchema,
|
|
10
|
+
ArchivistInsertQuerySchema,
|
|
11
|
+
asArchivistInstance,
|
|
12
|
+
isArchivistInstance
|
|
13
|
+
} from "@xyo-network/archivist-model";
|
|
14
|
+
import { QueryBoundWitnessWrapper } from "@xyo-network/boundwitness-builder";
|
|
15
|
+
import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
|
|
16
|
+
import { PayloadHasher } from "@xyo-network/hash";
|
|
17
|
+
import { AbstractModuleInstance } from "@xyo-network/module-abstract";
|
|
18
|
+
import { duplicateModules } from "@xyo-network/module-model";
|
|
19
|
+
import { PayloadWrapper } from "@xyo-network/payload-wrapper";
|
|
20
|
+
var AbstractArchivist = class extends AbstractModuleInstance {
|
|
38
21
|
_lastInsertedPayload;
|
|
39
22
|
_parents;
|
|
40
23
|
get queries() {
|
|
41
|
-
return [
|
|
24
|
+
return [ArchivistGetQuerySchema, ...super.queries];
|
|
42
25
|
}
|
|
43
26
|
get requireAllParents() {
|
|
44
27
|
return this.config.requireAllParents ?? true;
|
|
@@ -100,16 +83,16 @@ var AbstractArchivist = class extends import_module_abstract.AbstractModuleInsta
|
|
|
100
83
|
});
|
|
101
84
|
}
|
|
102
85
|
allHandler() {
|
|
103
|
-
throw Error("Not implemented");
|
|
86
|
+
throw new Error("Not implemented");
|
|
104
87
|
}
|
|
105
88
|
clearHandler() {
|
|
106
|
-
throw Error("Not implemented");
|
|
89
|
+
throw new Error("Not implemented");
|
|
107
90
|
}
|
|
108
91
|
commitHandler() {
|
|
109
|
-
throw Error("Not implemented");
|
|
92
|
+
throw new Error("Not implemented");
|
|
110
93
|
}
|
|
111
94
|
deleteHandler(_hashes) {
|
|
112
|
-
throw Error("Not implemented");
|
|
95
|
+
throw new Error("Not implemented");
|
|
113
96
|
}
|
|
114
97
|
async deleteWithConfig(hashes, config) {
|
|
115
98
|
const emitEvents = (config == null ? void 0 : config.emitEvents) ?? true;
|
|
@@ -121,7 +104,7 @@ var AbstractArchivist = class extends import_module_abstract.AbstractModuleInsta
|
|
|
121
104
|
}
|
|
122
105
|
async getFromParent(hashes, archivist) {
|
|
123
106
|
const foundPairs = (await Promise.all(
|
|
124
|
-
(await archivist.get(hashes)).map(async (payload) => [await
|
|
107
|
+
(await archivist.get(hashes)).map(async (payload) => [await PayloadHasher.hashAsync(payload), payload])
|
|
125
108
|
)).filter(([hash]) => {
|
|
126
109
|
const askedFor = hashes.includes(hash);
|
|
127
110
|
if (!askedFor) {
|
|
@@ -129,9 +112,9 @@ var AbstractArchivist = class extends import_module_abstract.AbstractModuleInsta
|
|
|
129
112
|
}
|
|
130
113
|
return askedFor;
|
|
131
114
|
});
|
|
132
|
-
const foundHashes = foundPairs.map(([hash]) => hash);
|
|
115
|
+
const foundHashes = new Set(foundPairs.map(([hash]) => hash));
|
|
133
116
|
const foundPayloads = foundPairs.map(([, payload]) => payload);
|
|
134
|
-
const notfound = hashes.filter((hash) => !foundHashes.
|
|
117
|
+
const notfound = hashes.filter((hash) => !foundHashes.has(hash));
|
|
135
118
|
return [foundPayloads, notfound];
|
|
136
119
|
}
|
|
137
120
|
async getFromParents(hashes) {
|
|
@@ -149,19 +132,19 @@ var AbstractArchivist = class extends import_module_abstract.AbstractModuleInsta
|
|
|
149
132
|
return [result, remainingHashes];
|
|
150
133
|
}
|
|
151
134
|
getHandler(_hashes) {
|
|
152
|
-
throw Error("Not implemented");
|
|
135
|
+
throw new Error("Not implemented");
|
|
153
136
|
}
|
|
154
137
|
async getWithConfig(hashes, config) {
|
|
155
138
|
const emitEvents = (config == null ? void 0 : config.emitEvents) ?? true;
|
|
156
|
-
const map = await
|
|
139
|
+
const map = await PayloadWrapper.toMap(await this.getHandler(hashes));
|
|
157
140
|
const { foundPayloads, notfoundHashes } = hashes.reduce(
|
|
158
141
|
(prev, hash) => {
|
|
159
142
|
const found = map[hash];
|
|
160
143
|
if (found) {
|
|
161
|
-
if (found.schema ===
|
|
162
|
-
prev.foundPayloads.push({ ...
|
|
144
|
+
if (found.schema === BoundWitnessSchema) {
|
|
145
|
+
prev.foundPayloads.push({ ...PayloadHasher.hashFields(found), _signatures: found._signatures });
|
|
163
146
|
} else {
|
|
164
|
-
prev.foundPayloads.push({ ...
|
|
147
|
+
prev.foundPayloads.push({ ...PayloadHasher.hashFields(found) });
|
|
165
148
|
}
|
|
166
149
|
} else {
|
|
167
150
|
prev.notfoundHashes.push(hash);
|
|
@@ -180,7 +163,7 @@ var AbstractArchivist = class extends import_module_abstract.AbstractModuleInsta
|
|
|
180
163
|
return this._lastInsertedPayload;
|
|
181
164
|
}
|
|
182
165
|
insertHandler(_payloads) {
|
|
183
|
-
throw Error("Not implemented");
|
|
166
|
+
throw new Error("Not implemented");
|
|
184
167
|
}
|
|
185
168
|
async insertWithConfig(payloads, config) {
|
|
186
169
|
const emitEvents = (config == null ? void 0 : config.emitEvents) ?? true;
|
|
@@ -201,36 +184,39 @@ var AbstractArchivist = class extends import_module_abstract.AbstractModuleInsta
|
|
|
201
184
|
read: await this.resolveArchivists((_d = (_c = this.config) == null ? void 0 : _c.parents) == null ? void 0 : _d.read),
|
|
202
185
|
write: await this.resolveArchivists((_f = (_e = this.config) == null ? void 0 : _e.parents) == null ? void 0 : _f.write)
|
|
203
186
|
};
|
|
204
|
-
return
|
|
187
|
+
return assertEx(this._parents);
|
|
205
188
|
}
|
|
206
189
|
async queryHandler(query, payloads, queryConfig) {
|
|
207
190
|
var _a;
|
|
208
|
-
const wrappedQuery =
|
|
191
|
+
const wrappedQuery = QueryBoundWitnessWrapper.parseQuery(query, payloads);
|
|
209
192
|
const queryPayload = await wrappedQuery.getQuery();
|
|
210
|
-
|
|
193
|
+
assertEx(this.queryable(query, payloads, queryConfig));
|
|
211
194
|
const resultPayloads = [];
|
|
212
195
|
if (this.config.storeQueries) {
|
|
213
196
|
await this.insertHandler([query]);
|
|
214
197
|
}
|
|
215
198
|
switch (queryPayload.schema) {
|
|
216
|
-
case
|
|
199
|
+
case ArchivistAllQuerySchema: {
|
|
217
200
|
resultPayloads.push(...await this.allHandler());
|
|
218
201
|
break;
|
|
219
|
-
|
|
202
|
+
}
|
|
203
|
+
case ArchivistClearQuerySchema: {
|
|
220
204
|
await this.clearHandler();
|
|
221
205
|
break;
|
|
222
|
-
|
|
206
|
+
}
|
|
207
|
+
case ArchivistCommitQuerySchema: {
|
|
223
208
|
resultPayloads.push(...await this.commitHandler());
|
|
224
209
|
break;
|
|
225
|
-
|
|
210
|
+
}
|
|
211
|
+
case ArchivistDeleteQuerySchema: {
|
|
226
212
|
const resultPayload = {
|
|
227
213
|
hashes: [...await this.deleteWithConfig(queryPayload.hashes)],
|
|
228
|
-
schema:
|
|
214
|
+
schema: ArchivistDeleteQuerySchema
|
|
229
215
|
};
|
|
230
216
|
resultPayloads.push(resultPayload);
|
|
231
217
|
break;
|
|
232
218
|
}
|
|
233
|
-
case
|
|
219
|
+
case ArchivistGetQuerySchema: {
|
|
234
220
|
if ((_a = queryPayload.hashes) == null ? void 0 : _a.length) {
|
|
235
221
|
resultPayloads.push(...await this.getWithConfig(queryPayload.hashes));
|
|
236
222
|
} else {
|
|
@@ -239,17 +225,19 @@ var AbstractArchivist = class extends import_module_abstract.AbstractModuleInsta
|
|
|
239
225
|
resultPayloads.push(head);
|
|
240
226
|
}
|
|
241
227
|
break;
|
|
242
|
-
|
|
228
|
+
}
|
|
229
|
+
case ArchivistInsertQuerySchema: {
|
|
243
230
|
const payloads2 = await wrappedQuery.getPayloads();
|
|
244
|
-
|
|
245
|
-
const resolvedPayloads = await
|
|
246
|
-
|
|
231
|
+
assertEx(await wrappedQuery.getPayloads(), `Missing payloads: ${JSON.stringify(wrappedQuery.payload(), null, 2)}`);
|
|
232
|
+
const resolvedPayloads = await PayloadWrapper.filterExclude(payloads2, await wrappedQuery.hashAsync());
|
|
233
|
+
assertEx(resolvedPayloads.length === payloads2.length, `Could not find some passed hashes [${resolvedPayloads.length} != ${payloads2.length}]`);
|
|
247
234
|
resultPayloads.push(...await this.insertWithConfig(payloads2));
|
|
248
|
-
this._lastInsertedPayload = resolvedPayloads
|
|
235
|
+
this._lastInsertedPayload = resolvedPayloads.at(-1);
|
|
249
236
|
break;
|
|
250
237
|
}
|
|
251
|
-
default:
|
|
238
|
+
default: {
|
|
252
239
|
return await super.queryHandler(query, payloads);
|
|
240
|
+
}
|
|
253
241
|
}
|
|
254
242
|
return resultPayloads;
|
|
255
243
|
}
|
|
@@ -258,7 +246,7 @@ var AbstractArchivist = class extends import_module_abstract.AbstractModuleInsta
|
|
|
258
246
|
}
|
|
259
247
|
async writeToParents(payloads) {
|
|
260
248
|
const parents = await this.parents();
|
|
261
|
-
return
|
|
249
|
+
return compact(
|
|
262
250
|
await Promise.all(
|
|
263
251
|
Object.values(parents.write ?? {}).map(async (parent) => {
|
|
264
252
|
return parent ? await this.writeToParent(parent, payloads) : void 0;
|
|
@@ -268,25 +256,24 @@ var AbstractArchivist = class extends import_module_abstract.AbstractModuleInsta
|
|
|
268
256
|
}
|
|
269
257
|
async resolveArchivists(archivists = []) {
|
|
270
258
|
const archivistModules = [...await this.resolve({ address: archivists }), ...await this.resolve({ name: archivists })].filter(
|
|
271
|
-
|
|
259
|
+
duplicateModules
|
|
272
260
|
);
|
|
273
|
-
|
|
261
|
+
assertEx(
|
|
274
262
|
!this.requireAllParents || archivistModules.length === archivists.length,
|
|
275
263
|
`Failed to find some archivists (set allRequired to false if ok): [${archivists.filter(
|
|
276
|
-
(archivist) => archivistModules.map((
|
|
264
|
+
(archivist) => archivistModules.map((module) => !(module.address === archivist || module.config.name === archivist))
|
|
277
265
|
)}]`
|
|
278
266
|
);
|
|
279
|
-
return archivistModules.reduce((prev,
|
|
280
|
-
prev[
|
|
281
|
-
|
|
282
|
-
return `Unable to cast resolved module to an archivist: [${
|
|
267
|
+
return archivistModules.reduce((prev, module) => {
|
|
268
|
+
prev[module.address] = asArchivistInstance(module, () => {
|
|
269
|
+
isArchivistInstance(module, { log: console });
|
|
270
|
+
return `Unable to cast resolved module to an archivist: [${module.address}, ${module.config.name}, ${module.config.schema})}]`;
|
|
283
271
|
});
|
|
284
272
|
return prev;
|
|
285
273
|
}, {});
|
|
286
274
|
}
|
|
287
275
|
};
|
|
288
|
-
|
|
289
|
-
0 && (module.exports = {
|
|
276
|
+
export {
|
|
290
277
|
AbstractArchivist
|
|
291
|
-
}
|
|
278
|
+
};
|
|
292
279
|
//# sourceMappingURL=index.js.map
|