@xyo-network/archivist-abstract 2.107.3 → 2.107.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,431 @@
1
- "use strict";var w=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var I=Object.prototype.hasOwnProperty;var d=(i,e)=>w(i,"name",{value:e,configurable:!0});var O=(i,e)=>{for(var t in e)w(i,t,{get:e[t],enumerable:!0})},R=(i,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of N(e))!I.call(i,r)&&r!==t&&w(i,r,{get:()=>e[r],enumerable:!(a=E(e,r))||a.enumerable});return i};var k=i=>R(w({},"__esModule",{value:!0}),i);var $={};O($,{AbstractArchivist:()=>f,addStorageMeta:()=>M,maxSequenceIndex:()=>y,removeStorageMeta:()=>x,sequenceNumber:()=>_,sortByStorageMeta:()=>F});module.exports=k($);var u=require("@xylabs/assert"),g=require("@xylabs/lodash"),v=require("@xylabs/object"),P=require("@xylabs/set"),s=require("@xyo-network/archivist-model"),H=require("@xyo-network/boundwitness-wrapper"),Q=require("@xyo-network/module-abstract"),A=require("@xyo-network/module-model"),l=require("@xyo-network/payload-builder");var f=class i extends Q.AbstractModuleInstance{static{d(this,"AbstractArchivist")}static configSchemas=[...super.configSchemas,s.ArchivistConfigSchema];static defaultConfigSchema=s.ArchivistConfigSchema;static uniqueName=(0,v.globallyUnique)("AbstractArchivist",i,"xyo");_lastInsertedPayload;_parentArchivists;get queries(){return[s.ArchivistGetQuerySchema,...super.queries]}get requireAllParents(){return this.config.requireAllParents??!1}get storeParentReads(){return!!this.config?.storeParentReads}all(){return this._noOverride("all"),this.busy(async()=>(await this.started("throw"),await l.PayloadBuilder.build(await this.allHandler())))}async allQuery(e){let t={schema:s.ArchivistAllQuerySchema};return await this.sendQueryRaw(t,void 0,e)}clear(){return this._noOverride("clear"),this.busy(async()=>(await this.started("throw"),await this.clearHandler()))}async clearQuery(e){let t={schema:s.ArchivistClearQuerySchema};return await this.sendQueryRaw(t,void 0,e)}commit(){return this._noOverride("commit"),this.busy(async()=>(await this.started("throw"),await this.commitHandler()))}async commitQuery(e){let t={schema:s.ArchivistCommitQuerySchema};return await this.sendQueryRaw(t,void 0,e)}async delete(e){return this._noOverride("delete"),await this.busy(async()=>(await this.started("throw"),await this.deleteWithConfig(e)))}async deleteQuery(e,t){let a={hashes:e,schema:s.ArchivistDeleteQuerySchema};return await this.sendQueryRaw(a,void 0,t)}async get(e){return this._noOverride("get"),await this.busy(async()=>(await this.started("throw"),await l.PayloadBuilder.build(await this.getWithConfig(e))))}async getQuery(e,t){let a={hashes:e,schema:s.ArchivistGetQuerySchema};return await this.sendQueryRaw(a,void 0,t)}async insert(e){return this._noOverride("insert"),await this.busy(async()=>(await this.started("throw"),await this.insertWithConfig(e)))}async insertQuery(e,t){let a={schema:s.ArchivistInsertQuerySchema};return await this.sendQueryRaw(a,e,t)}async next(e){return this._noOverride("next"),await this.busy(async()=>(await this.started("throw"),await this.nextWithConfig(e)))}async nextQuery(e,t){let a={schema:s.ArchivistNextQuerySchema,...e};return await this.sendQueryRaw(a,void 0,t)}allHandler(){throw new Error("Not implemented")}clearHandler(){throw new Error("Not implemented")}commitHandler(){throw new Error("Not implemented")}deleteHandler(e){throw new Error("Not implemented")}async deleteWithConfig(e,t){let a=t?.emitEvents??!0,r=await this.deleteHandler(e);return a&&await this.emit("deleted",{hashes:r,module:this}),r}async getFromParent(e,t){let a=(await l.PayloadBuilder.dataHashPairs(await t.get(e))).filter(([,n])=>{let c=e.includes(n);return c||console.warn(`Parent returned payload with hash not asked for: ${n}`),c}),r=new Set(a.map(([,n])=>n)),h=a.map(([n])=>n),o=e.filter(n=>!r.has(n));return[h,o]}async getFromParents(e){let t=Object.values((await this.parentArchivists())?.read??{}),a=[...e],r=0,h=[];for(;r<t.length&&a.length>0;){let[o,n]=await this.getFromParent(a,t[r]);h=[...h,...o],a=n,r++}return[h,a]}getHandler(e){throw new Error("Not implemented")}async getWithConfig(e,t){let a=new Set(e),r=await this.getHandler([...a]),h=[],o=new Set;for(let q of r){let S=await l.PayloadBuilder.toAllHashMap([q]);for(let[C,W]of Object.entries(S)){let p=!1,m=C;a.has(m)&&!o.has(m)&&(p=!0,o.add(m)),p&&h.push(W)}}let n=[...(0,P.difference)(a,o)],[c]=await this.getFromParents(n);return this.storeParentReads&&await this.insertWithConfig(c),await l.PayloadBuilder.build([...h,...c])}head(){return this._lastInsertedPayload}insertHandler(e){throw new Error("Not implemented")}async insertQueryHandler(e,t){(0,u.assertEx)(t,()=>`Missing payloads: ${JSON.stringify(e.payload,null,2)}`);let a=await l.PayloadBuilder.filterIncludeByDataHash(t,e.payloadHashes);(0,u.assertEx)(a.length===e.payloadHashes.length,()=>`Could not find some passed hashes [${a.length} != ${e.payloadHashes.length}]`);let r=await e.getQuery(),h=await l.PayloadBuilder.filterExclude(a,await l.PayloadBuilder.dataHash(r)),o=await this.insertWithConfig(h);return this._lastInsertedPayload=a.at(-1),o}async insertWithConfig(e,t){let a=t?.emitEvents??!0,r=t?.writeToParents??!0,h=await l.PayloadBuilder.build(e,{stamp:!1,validate:!0}),o=await this.insertHandler(h);return r&&await this.writeToParents(o),a&&await this.emit("inserted",{module:this,payloads:o}),o}nextHandler(e){throw new Error("Not implemented")}async nextWithConfig(e,t){let a=await this.nextHandler(e);return await l.PayloadBuilder.build(a)}async parentArchivists(){return this._parentArchivists=this._parentArchivists??{commit:await this.resolveArchivists(this.config?.parents?.commit),read:await this.resolveArchivists(this.config?.parents?.read),write:await this.resolveArchivists(this.config?.parents?.write)},(0,u.assertEx)(this._parentArchivists)}async queryHandler(e,t,a){let r=await H.QueryBoundWitnessWrapper.parseQuery(e,t),h=await l.PayloadBuilder.build(e,{stamp:!1,validate:!0}),o=await r.getQuery();(0,u.assertEx)(await this.queryable(e,t,a));let n=[];switch(o.schema){case s.ArchivistAllQuerySchema:{n.push(...await this.allHandler());break}case s.ArchivistClearQuerySchema:{await this.clearHandler();break}case s.ArchivistCommitQuerySchema:{n.push(...await this.commitHandler());break}case s.ArchivistDeleteQuerySchema:{let c={hashes:[...await this.deleteWithConfig(o.hashes)],schema:s.ArchivistDeleteQuerySchema};n.push(c);break}case s.ArchivistGetQuerySchema:{if(o.hashes?.length)n.push(...await this.getWithConfig(o.hashes));else{let c=await this.head();c&&n.push(c)}break}case s.ArchivistInsertQuerySchema:{n.push(...await this.insertQueryHandler(r,t));break}default:{let c=await super.queryHandler(e,t);return this.config.storeQueries&&await this.insertHandler([h]),c}}return this.config.storeQueries&&await this.insertHandler([h]),n}async writeToParent(e,t){return await e.insert(t)}async writeToParents(e){let t=await this.parentArchivists();return(0,g.compact)(await Promise.all(Object.values(t.write??{}).map(async a=>a?await this.writeToParent(a,e):void 0))).flat()}async resolveArchivists(e=[]){let t=[...await this.resolve({address:e}),...await this.resolve({name:e})].filter(A.duplicateModules);return(0,u.assertEx)(!this.requireAllParents||t.length===e.length,()=>`Failed to find some archivists (set allRequired to false if ok): [${e.filter(a=>t.map(r=>!(r.address===a||r.modName===a)))}]`),t.reduce((a,r)=>(a[r.address]=(0,s.asArchivistInstance)(r,()=>((0,s.isArchivistInstance)(r,{log:console}),`Unable to cast resolved module to an archivist: [${r.address}, ${r.modName}, ${r.config.schema})}]`)),a),{})}};var b=require("@xylabs/assert");var y=10000000000n,_=d(i=>((0,b.assertEx)(i<y,()=>`index may not be larger than ${y}`),BigInt(Date.now())*y+BigInt(i)),"sequenceNumber"),M=d((i,e=0)=>({...i,_sequence:_(e)}),"addStorageMeta"),F=d((i,e=1)=>i.sort((t,a)=>t._sequence<a._sequence?-e:t._sequence>a._sequence?e:0),"sortByStorageMeta");function x(i){if(!i)return;if(Array.isArray(i))return i.map(t=>x(t));let{...e}=i;return delete e._sequence,e}d(x,"removeStorageMeta");
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 __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/index.ts
22
+ var src_exports = {};
23
+ __export(src_exports, {
24
+ AbstractArchivist: () => AbstractArchivist,
25
+ addStorageMeta: () => addStorageMeta,
26
+ maxSequenceIndex: () => maxSequenceIndex,
27
+ removeStorageMeta: () => removeStorageMeta,
28
+ sequenceNumber: () => sequenceNumber,
29
+ sortByStorageMeta: () => sortByStorageMeta
30
+ });
31
+ module.exports = __toCommonJS(src_exports);
32
+
33
+ // src/AbstractArchivist.ts
34
+ var import_assert = require("@xylabs/assert");
35
+ var import_lodash = require("@xylabs/lodash");
36
+ var import_object = require("@xylabs/object");
37
+ var import_set = require("@xylabs/set");
38
+ var import_archivist_model = require("@xyo-network/archivist-model");
39
+ var import_boundwitness_wrapper = require("@xyo-network/boundwitness-wrapper");
40
+ var import_module_abstract = require("@xyo-network/module-abstract");
41
+ var import_module_model = require("@xyo-network/module-model");
42
+ var import_payload_builder = require("@xyo-network/payload-builder");
43
+ var AbstractArchivist = class _AbstractArchivist extends import_module_abstract.AbstractModuleInstance {
44
+ static {
45
+ __name(this, "AbstractArchivist");
46
+ }
47
+ static configSchemas = [
48
+ ...super.configSchemas,
49
+ import_archivist_model.ArchivistConfigSchema
50
+ ];
51
+ static defaultConfigSchema = import_archivist_model.ArchivistConfigSchema;
52
+ static uniqueName = (0, import_object.globallyUnique)("AbstractArchivist", _AbstractArchivist, "xyo");
53
+ _lastInsertedPayload;
54
+ _parentArchivists;
55
+ get queries() {
56
+ return [
57
+ import_archivist_model.ArchivistGetQuerySchema,
58
+ ...super.queries
59
+ ];
60
+ }
61
+ get requireAllParents() {
62
+ return this.config.requireAllParents ?? false;
63
+ }
64
+ get storeParentReads() {
65
+ return !!this.config?.storeParentReads;
66
+ }
67
+ all() {
68
+ this._noOverride("all");
69
+ return this.busy(async () => {
70
+ await this.started("throw");
71
+ return await import_payload_builder.PayloadBuilder.build(await this.allHandler());
72
+ });
73
+ }
74
+ async allQuery(account) {
75
+ const queryPayload = {
76
+ schema: import_archivist_model.ArchivistAllQuerySchema
77
+ };
78
+ return await this.sendQueryRaw(queryPayload, void 0, account);
79
+ }
80
+ clear() {
81
+ this._noOverride("clear");
82
+ return this.busy(async () => {
83
+ await this.started("throw");
84
+ return await this.clearHandler();
85
+ });
86
+ }
87
+ async clearQuery(account) {
88
+ const queryPayload = {
89
+ schema: import_archivist_model.ArchivistClearQuerySchema
90
+ };
91
+ return await this.sendQueryRaw(queryPayload, void 0, account);
92
+ }
93
+ commit() {
94
+ this._noOverride("commit");
95
+ return this.busy(async () => {
96
+ await this.started("throw");
97
+ return await this.commitHandler();
98
+ });
99
+ }
100
+ async commitQuery(account) {
101
+ const queryPayload = {
102
+ schema: import_archivist_model.ArchivistCommitQuerySchema
103
+ };
104
+ return await this.sendQueryRaw(queryPayload, void 0, account);
105
+ }
106
+ async delete(hashes) {
107
+ this._noOverride("delete");
108
+ return await this.busy(async () => {
109
+ await this.started("throw");
110
+ return await this.deleteWithConfig(hashes);
111
+ });
112
+ }
113
+ async deleteQuery(hashes, account) {
114
+ const queryPayload = {
115
+ hashes,
116
+ schema: import_archivist_model.ArchivistDeleteQuerySchema
117
+ };
118
+ return await this.sendQueryRaw(queryPayload, void 0, account);
119
+ }
120
+ async get(hashes) {
121
+ this._noOverride("get");
122
+ return await this.busy(async () => {
123
+ await this.started("throw");
124
+ return await import_payload_builder.PayloadBuilder.build(await this.getWithConfig(hashes));
125
+ });
126
+ }
127
+ async getQuery(hashes, account) {
128
+ const queryPayload = {
129
+ hashes,
130
+ schema: import_archivist_model.ArchivistGetQuerySchema
131
+ };
132
+ return await this.sendQueryRaw(queryPayload, void 0, account);
133
+ }
134
+ async insert(payloads) {
135
+ this._noOverride("insert");
136
+ return await this.busy(async () => {
137
+ await this.started("throw");
138
+ return await this.insertWithConfig(payloads);
139
+ });
140
+ }
141
+ async insertQuery(payloads, account) {
142
+ const queryPayload = {
143
+ schema: import_archivist_model.ArchivistInsertQuerySchema
144
+ };
145
+ return await this.sendQueryRaw(queryPayload, payloads, account);
146
+ }
147
+ async next(options) {
148
+ this._noOverride("next");
149
+ return await this.busy(async () => {
150
+ await this.started("throw");
151
+ return await this.nextWithConfig(options);
152
+ });
153
+ }
154
+ async nextQuery(options, account) {
155
+ const queryPayload = {
156
+ schema: import_archivist_model.ArchivistNextQuerySchema,
157
+ ...options
158
+ };
159
+ return await this.sendQueryRaw(queryPayload, void 0, account);
160
+ }
161
+ allHandler() {
162
+ throw new Error("Not implemented");
163
+ }
164
+ clearHandler() {
165
+ throw new Error("Not implemented");
166
+ }
167
+ commitHandler() {
168
+ throw new Error("Not implemented");
169
+ }
170
+ deleteHandler(_hashes) {
171
+ throw new Error("Not implemented");
172
+ }
173
+ async deleteWithConfig(hashes, config) {
174
+ const emitEvents = config?.emitEvents ?? true;
175
+ const deletedHashes = await this.deleteHandler(hashes);
176
+ if (emitEvents) {
177
+ await this.emit("deleted", {
178
+ hashes: deletedHashes,
179
+ module: this
180
+ });
181
+ }
182
+ return deletedHashes;
183
+ }
184
+ async getFromParent(hashes, archivist) {
185
+ const foundPairs = (await import_payload_builder.PayloadBuilder.dataHashPairs(await archivist.get(hashes))).filter(([, hash]) => {
186
+ const askedFor = hashes.includes(hash);
187
+ if (!askedFor) {
188
+ console.warn(`Parent returned payload with hash not asked for: ${hash}`);
189
+ }
190
+ return askedFor;
191
+ });
192
+ const foundHashes = new Set(foundPairs.map(([, hash]) => hash));
193
+ const foundPayloads = foundPairs.map(([payload]) => payload);
194
+ const notfound = hashes.filter((hash) => !foundHashes.has(hash));
195
+ return [
196
+ foundPayloads,
197
+ notfound
198
+ ];
199
+ }
200
+ async getFromParents(hashes) {
201
+ const parents = Object.values((await this.parentArchivists())?.read ?? {});
202
+ let remainingHashes = [
203
+ ...hashes
204
+ ];
205
+ let parentIndex = 0;
206
+ let result = [];
207
+ while (parentIndex < parents.length && remainingHashes.length > 0) {
208
+ const [found, notfound] = await this.getFromParent(remainingHashes, parents[parentIndex]);
209
+ result = [
210
+ ...result,
211
+ ...found
212
+ ];
213
+ remainingHashes = notfound;
214
+ parentIndex++;
215
+ }
216
+ return [
217
+ result,
218
+ remainingHashes
219
+ ];
220
+ }
221
+ getHandler(_hashes) {
222
+ throw new Error("Not implemented");
223
+ }
224
+ async getWithConfig(hashes, _config) {
225
+ const requestedHashes = new Set(hashes);
226
+ const gotten = await this.getHandler([
227
+ ...requestedHashes
228
+ ]);
229
+ const foundPayloads = [];
230
+ const foundHashes = /* @__PURE__ */ new Set();
231
+ for (const payload of gotten) {
232
+ const map = await import_payload_builder.PayloadBuilder.toAllHashMap([
233
+ payload
234
+ ]);
235
+ for (const [key, payload2] of Object.entries(map)) {
236
+ let requestedPayloadFound = false;
237
+ const hash = key;
238
+ if (requestedHashes.has(hash) && // Indicate that we found it (but do not insert it yet). Since
239
+ // one payload could satisfy two requested hashes (vit its dataHash
240
+ // & rootHash) we only want to insert that payload once but we want
241
+ // to keep track of all the hashes it satisfies so we can ask th
242
+ // parents for the ones we did not find
243
+ !foundHashes.has(hash)) {
244
+ requestedPayloadFound = true;
245
+ foundHashes.add(hash);
246
+ }
247
+ if (requestedPayloadFound) foundPayloads.push(payload2);
248
+ }
249
+ }
250
+ const notFoundHashes = [
251
+ ...(0, import_set.difference)(requestedHashes, foundHashes)
252
+ ];
253
+ const [parentFoundPayloads] = await this.getFromParents(notFoundHashes);
254
+ if (this.storeParentReads) {
255
+ await this.insertWithConfig(parentFoundPayloads);
256
+ }
257
+ return await import_payload_builder.PayloadBuilder.build([
258
+ ...foundPayloads,
259
+ ...parentFoundPayloads
260
+ ]);
261
+ }
262
+ head() {
263
+ return this._lastInsertedPayload;
264
+ }
265
+ insertHandler(_payloads) {
266
+ throw new Error("Not implemented");
267
+ }
268
+ async insertQueryHandler(query, payloads) {
269
+ (0, import_assert.assertEx)(payloads, () => `Missing payloads: ${JSON.stringify(query.payload, null, 2)}`);
270
+ const resolvedPayloads = await import_payload_builder.PayloadBuilder.filterIncludeByDataHash(payloads, query.payloadHashes);
271
+ (0, import_assert.assertEx)(resolvedPayloads.length === query.payloadHashes.length, () => `Could not find some passed hashes [${resolvedPayloads.length} != ${query.payloadHashes.length}]`);
272
+ const queryPayload = await query.getQuery();
273
+ const payloadsWithoutQuery = await import_payload_builder.PayloadBuilder.filterExclude(resolvedPayloads, await import_payload_builder.PayloadBuilder.dataHash(queryPayload));
274
+ const result = await this.insertWithConfig(payloadsWithoutQuery);
275
+ this._lastInsertedPayload = resolvedPayloads.at(-1);
276
+ return result;
277
+ }
278
+ async insertWithConfig(payloads, config) {
279
+ const emitEvents = config?.emitEvents ?? true;
280
+ const writeToParents = config?.writeToParents ?? true;
281
+ const payloadsWithMeta = await import_payload_builder.PayloadBuilder.build(payloads, {
282
+ stamp: false,
283
+ validate: true
284
+ });
285
+ const insertedPayloads = await this.insertHandler(payloadsWithMeta);
286
+ if (writeToParents) {
287
+ await this.writeToParents(insertedPayloads);
288
+ }
289
+ if (emitEvents) {
290
+ await this.emit("inserted", {
291
+ module: this,
292
+ payloads: insertedPayloads
293
+ });
294
+ }
295
+ return insertedPayloads;
296
+ }
297
+ nextHandler(_options) {
298
+ throw new Error("Not implemented");
299
+ }
300
+ async nextWithConfig(options, _config) {
301
+ const foundPayloads = await this.nextHandler(options);
302
+ return await import_payload_builder.PayloadBuilder.build(foundPayloads);
303
+ }
304
+ async parentArchivists() {
305
+ this._parentArchivists = this._parentArchivists ?? {
306
+ commit: await this.resolveArchivists(this.config?.parents?.commit),
307
+ read: await this.resolveArchivists(this.config?.parents?.read),
308
+ write: await this.resolveArchivists(this.config?.parents?.write)
309
+ };
310
+ return (0, import_assert.assertEx)(this._parentArchivists);
311
+ }
312
+ async queryHandler(query, payloads, queryConfig) {
313
+ const wrappedQuery = await import_boundwitness_wrapper.QueryBoundWitnessWrapper.parseQuery(query, payloads);
314
+ const builtQuery = await import_payload_builder.PayloadBuilder.build(query, {
315
+ stamp: false,
316
+ validate: true
317
+ });
318
+ const queryPayload = await wrappedQuery.getQuery();
319
+ (0, import_assert.assertEx)(await this.queryable(query, payloads, queryConfig));
320
+ const resultPayloads = [];
321
+ switch (queryPayload.schema) {
322
+ case import_archivist_model.ArchivistAllQuerySchema: {
323
+ resultPayloads.push(...await this.allHandler());
324
+ break;
325
+ }
326
+ case import_archivist_model.ArchivistClearQuerySchema: {
327
+ await this.clearHandler();
328
+ break;
329
+ }
330
+ case import_archivist_model.ArchivistCommitQuerySchema: {
331
+ resultPayloads.push(...await this.commitHandler());
332
+ break;
333
+ }
334
+ case import_archivist_model.ArchivistDeleteQuerySchema: {
335
+ const resultPayload = {
336
+ hashes: [
337
+ ...await this.deleteWithConfig(queryPayload.hashes)
338
+ ],
339
+ schema: import_archivist_model.ArchivistDeleteQuerySchema
340
+ };
341
+ resultPayloads.push(resultPayload);
342
+ break;
343
+ }
344
+ case import_archivist_model.ArchivistGetQuerySchema: {
345
+ if (queryPayload.hashes?.length) {
346
+ resultPayloads.push(...await this.getWithConfig(queryPayload.hashes));
347
+ } else {
348
+ const head = await this.head();
349
+ if (head) resultPayloads.push(head);
350
+ }
351
+ break;
352
+ }
353
+ case import_archivist_model.ArchivistInsertQuerySchema: {
354
+ resultPayloads.push(...await this.insertQueryHandler(wrappedQuery, payloads));
355
+ break;
356
+ }
357
+ default: {
358
+ const result = await super.queryHandler(query, payloads);
359
+ if (this.config.storeQueries) {
360
+ await this.insertHandler([
361
+ builtQuery
362
+ ]);
363
+ }
364
+ return result;
365
+ }
366
+ }
367
+ if (this.config.storeQueries) {
368
+ await this.insertHandler([
369
+ builtQuery
370
+ ]);
371
+ }
372
+ return resultPayloads;
373
+ }
374
+ async writeToParent(parent, payloads) {
375
+ return await parent.insert(payloads);
376
+ }
377
+ async writeToParents(payloads) {
378
+ const parents = await this.parentArchivists();
379
+ return (0, import_lodash.compact)(await Promise.all(Object.values(parents.write ?? {}).map(async (parent) => {
380
+ return parent ? await this.writeToParent(parent, payloads) : void 0;
381
+ }))).flat();
382
+ }
383
+ async resolveArchivists(archivists = []) {
384
+ const archivistModules = [
385
+ ...await this.resolve({
386
+ address: archivists
387
+ }),
388
+ ...await this.resolve({
389
+ name: archivists
390
+ })
391
+ ].filter(import_module_model.duplicateModules);
392
+ (0, import_assert.assertEx)(!this.requireAllParents || archivistModules.length === archivists.length, () => `Failed to find some archivists (set allRequired to false if ok): [${archivists.filter((archivist) => archivistModules.map((mod) => !(mod.address === archivist || mod.modName === archivist)))}]`);
393
+ return archivistModules.reduce((prev, mod) => {
394
+ prev[mod.address] = (0, import_archivist_model.asArchivistInstance)(mod, () => {
395
+ (0, import_archivist_model.isArchivistInstance)(mod, {
396
+ log: console
397
+ });
398
+ return `Unable to cast resolved module to an archivist: [${mod.address}, ${mod.modName}, ${mod.config.schema})}]`;
399
+ });
400
+ return prev;
401
+ }, {});
402
+ }
403
+ };
404
+
405
+ // src/StorageMeta.ts
406
+ var import_assert2 = require("@xylabs/assert");
407
+ var maxSequenceIndex = 10000000000n;
408
+ var sequenceNumber = /* @__PURE__ */ __name((index) => {
409
+ (0, import_assert2.assertEx)(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`);
410
+ return BigInt(Date.now()) * maxSequenceIndex + BigInt(index);
411
+ }, "sequenceNumber");
412
+ var addStorageMeta = /* @__PURE__ */ __name((payload, index = 0) => {
413
+ return {
414
+ ...payload,
415
+ _sequence: sequenceNumber(index)
416
+ };
417
+ }, "addStorageMeta");
418
+ var sortByStorageMeta = /* @__PURE__ */ __name((payloads, direction = 1) => {
419
+ return payloads.sort((a, b) => a._sequence < b._sequence ? -direction : a._sequence > b._sequence ? direction : 0);
420
+ }, "sortByStorageMeta");
421
+ function removeStorageMeta(payload) {
422
+ if (!payload) return;
423
+ if (Array.isArray(payload)) {
424
+ return payload.map((p) => removeStorageMeta(p));
425
+ }
426
+ const { ...noMeta } = payload;
427
+ delete noMeta._sequence;
428
+ return noMeta;
429
+ }
430
+ __name(removeStorageMeta, "removeStorageMeta");
2
431
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/AbstractArchivist.ts","../../src/StorageMeta.ts"],"sourcesContent":["export * from './AbstractArchivist'\nexport * from './StorageMeta'\n","import { assertEx } from '@xylabs/assert'\nimport { Address, Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { globallyUnique } from '@xylabs/object'\nimport { Promisable, PromisableArray } from '@xylabs/promise'\nimport { difference } from '@xylabs/set'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport {\n ArchivistAllQuery,\n ArchivistAllQuerySchema,\n ArchivistClearQuery,\n ArchivistClearQuerySchema,\n ArchivistCommitQuery,\n ArchivistCommitQuerySchema,\n ArchivistConfigSchema,\n ArchivistDeleteQuery,\n ArchivistDeleteQuerySchema,\n ArchivistGetQuery,\n ArchivistGetQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuery,\n ArchivistNextQuerySchema,\n ArchivistParams,\n ArchivistQueries,\n asArchivistInstance,\n AttachableArchivistInstance,\n isArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { duplicateModules, ModuleConfig, ModuleIdentifier, ModuleName, ModuleQueryHandlerResult, ModuleQueryResult } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta, Schema, WithMeta } from '@xyo-network/payload-model'\n\nexport interface ActionConfig {\n emitEvents?: boolean\n}\n\nexport interface InsertConfig extends ActionConfig {\n writeToParents?: boolean\n}\n\nexport interface ArchivistParentInstances {\n commit?: Record<string, ArchivistInstance>\n read?: Record<string, ArchivistInstance>\n write?: Record<string, ArchivistInstance>\n}\n\nexport abstract class AbstractArchivist<\n TParams extends ArchivistParams = ArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractModuleInstance<TParams, TEventData>\n implements AttachableArchivistInstance<TParams, TEventData, Payload>\n{\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, module: this })\n }\n\n return deletedHashes\n }\n\n protected async getFromParent(hashes: Hash[], archivist: ArchivistInstance): Promise<[WithMeta<Payload>[], Hash[]]> {\n const foundPairs = (await PayloadBuilder.dataHashPairs(await archivist.get(hashes))).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', { module: this, payloads: insertedPayloads })\n }\n\n return insertedPayloads\n }\n\n protected nextHandler(_options?: ArchivistNextOptions): Promisable<WithMeta<Payload>[]> {\n throw new Error('Not implemented')\n }\n\n protected async nextWithConfig(options?: ArchivistNextOptions, _config?: InsertConfig): Promise<WithMeta<Payload>[]> {\n const foundPayloads = await this.nextHandler(options)\n return await PayloadBuilder.build(foundPayloads)\n }\n\n protected async 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 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 compact(\n await Promise.all(\n Object.values(parents.write ?? {}).map(async (parent) => {\n return parent ? await this.writeToParent(parent, payloads) : undefined\n }),\n ),\n ).flat()\n }\n\n private async resolveArchivists(archivists: ModuleIdentifier[] = []) {\n const archivistModules = [\n ...(await this.resolve({ address: archivists as Address[] })),\n ...(await this.resolve({ name: archivists as ModuleName[] })),\n ].filter(duplicateModules)\n\n assertEx(\n !this.requireAllParents || archivistModules.length === archivists.length,\n () =>\n `Failed to find some archivists (set allRequired to false if ok): [${archivists.filter((archivist) =>\n archivistModules.map((mod) => !(mod.address === archivist || mod.modName === archivist)),\n )}]`,\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 { Payload, PayloadWithMeta, WithMeta } 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 ? -direction\n : a._sequence > b._sequence ? direction\n : 0,\n )\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":["src_exports","__export","AbstractArchivist","addStorageMeta","maxSequenceIndex","removeStorageMeta","sequenceNumber","sortByStorageMeta","__toCommonJS","import_assert","import_lodash","import_object","import_set","import_archivist_model","import_boundwitness_wrapper","import_module_abstract","import_module_model","import_payload_builder","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","module","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","compact","Promise","flat","archivists","archivistModules","resolve","address","name","duplicateModules","mod","modName","reduce","prev","asArchivistInstance","isArchivistInstance","log","import_assert","maxSequenceIndex","sequenceNumber","__name","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/index.ts","../../src/AbstractArchivist.ts","../../src/StorageMeta.ts"],"sourcesContent":["export * from './AbstractArchivist'\nexport * from './StorageMeta'\n","import { assertEx } from '@xylabs/assert'\nimport { Address, Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { globallyUnique } from '@xylabs/object'\nimport { Promisable, PromisableArray } from '@xylabs/promise'\nimport { difference } from '@xylabs/set'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport {\n ArchivistAllQuery,\n ArchivistAllQuerySchema,\n ArchivistClearQuery,\n ArchivistClearQuerySchema,\n ArchivistCommitQuery,\n ArchivistCommitQuerySchema,\n ArchivistConfigSchema,\n ArchivistDeleteQuery,\n ArchivistDeleteQuerySchema,\n ArchivistGetQuery,\n ArchivistGetQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuery,\n ArchivistNextQuerySchema,\n ArchivistParams,\n ArchivistQueries,\n asArchivistInstance,\n AttachableArchivistInstance,\n isArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { duplicateModules, ModuleConfig, ModuleIdentifier, ModuleName, ModuleQueryHandlerResult, ModuleQueryResult } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta, Schema, WithMeta } from '@xyo-network/payload-model'\n\nexport interface ActionConfig {\n emitEvents?: boolean\n}\n\nexport interface InsertConfig extends ActionConfig {\n writeToParents?: boolean\n}\n\nexport interface ArchivistParentInstances {\n commit?: Record<string, ArchivistInstance>\n read?: Record<string, ArchivistInstance>\n write?: Record<string, ArchivistInstance>\n}\n\nexport abstract class AbstractArchivist<\n TParams extends ArchivistParams = ArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractModuleInstance<TParams, TEventData>\n implements AttachableArchivistInstance<TParams, TEventData, Payload>\n{\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, module: this })\n }\n\n return deletedHashes\n }\n\n protected async getFromParent(hashes: Hash[], archivist: ArchivistInstance): Promise<[WithMeta<Payload>[], Hash[]]> {\n const foundPairs = (await PayloadBuilder.dataHashPairs(await archivist.get(hashes))).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', { module: this, payloads: insertedPayloads })\n }\n\n return insertedPayloads\n }\n\n protected nextHandler(_options?: ArchivistNextOptions): Promisable<WithMeta<Payload>[]> {\n throw new Error('Not implemented')\n }\n\n protected async nextWithConfig(options?: ArchivistNextOptions, _config?: InsertConfig): Promise<WithMeta<Payload>[]> {\n const foundPayloads = await this.nextHandler(options)\n return await PayloadBuilder.build(foundPayloads)\n }\n\n protected async 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 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 compact(\n await Promise.all(\n Object.values(parents.write ?? {}).map(async (parent) => {\n return parent ? await this.writeToParent(parent, payloads) : undefined\n }),\n ),\n ).flat()\n }\n\n private async resolveArchivists(archivists: ModuleIdentifier[] = []) {\n const archivistModules = [\n ...(await this.resolve({ address: archivists as Address[] })),\n ...(await this.resolve({ name: archivists as ModuleName[] })),\n ].filter(duplicateModules)\n\n assertEx(\n !this.requireAllParents || archivistModules.length === archivists.length,\n () =>\n `Failed to find some archivists (set allRequired to false if ok): [${archivists.filter((archivist) =>\n archivistModules.map((mod) => !(mod.address === archivist || mod.modName === archivist)),\n )}]`,\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 { Payload, PayloadWithMeta, WithMeta } 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 ? -direction\n : a._sequence > b._sequence ? direction\n : 0,\n )\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":["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","module","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","compact","Promise","flat","archivists","archivistModules","resolve","address","name","duplicateModules","mod","modName","reduce","prev","asArchivistInstance","isArchivistInstance","log","import_assert","maxSequenceIndex","sequenceNumber","index","assertEx","BigInt","Date","now","addStorageMeta","payload","_sequence","sortByStorageMeta","payloads","direction","sort","a","b","removeStorageMeta","Array","isArray","map","p","noMeta"]}