@xyo-network/diviner-stateful 2.84.19 → 2.85.0
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/DivinerMixin.d.cts +20 -28
- package/dist/browser/DivinerMixin.d.cts.map +1 -1
- package/dist/browser/DivinerMixin.d.mts +20 -28
- package/dist/browser/DivinerMixin.d.mts.map +1 -1
- package/dist/browser/DivinerMixin.d.ts +20 -28
- package/dist/browser/DivinerMixin.d.ts.map +1 -1
- package/dist/browser/index.cjs +100 -71
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +103 -75
- package/dist/browser/index.js.map +1 -1
- package/dist/node/DivinerMixin.d.cts +20 -28
- package/dist/node/DivinerMixin.d.cts.map +1 -1
- package/dist/node/DivinerMixin.d.mts +20 -28
- package/dist/node/DivinerMixin.d.mts.map +1 -1
- package/dist/node/DivinerMixin.d.ts +20 -28
- package/dist/node/DivinerMixin.d.ts.map +1 -1
- package/dist/node/index.cjs +116 -85
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +119 -89
- package/dist/node/index.js.map +1 -1
- package/package.json +18 -18
|
@@ -10,7 +10,7 @@ export type AnyModule<TParams extends StatefulModuleParams = StatefulModuleParam
|
|
|
10
10
|
export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/object").BaseParamsFields & {
|
|
11
11
|
account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
|
|
12
12
|
config: import("@xyo-network/payload-model").SchemaFields & object & Omit<{
|
|
13
|
-
|
|
13
|
+
accountPath?: string | undefined;
|
|
14
14
|
readonly archivist?: string | undefined;
|
|
15
15
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
16
16
|
readonly name?: string | undefined;
|
|
@@ -27,7 +27,7 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
27
27
|
readonly storeQueries?: boolean | undefined;
|
|
28
28
|
readonly timestamp?: boolean | undefined;
|
|
29
29
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/payload-model").SchemaFields & object & {
|
|
30
|
-
|
|
30
|
+
accountPath?: string | undefined;
|
|
31
31
|
readonly archivist?: string | undefined;
|
|
32
32
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
33
33
|
readonly name?: string | undefined;
|
|
@@ -56,11 +56,10 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
56
56
|
schema: string;
|
|
57
57
|
};
|
|
58
58
|
ephemeralQueryAccountEnabled?: boolean | undefined;
|
|
59
|
-
wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
|
|
60
59
|
} = import("@xyo-network/object").BaseParamsFields & {
|
|
61
60
|
account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
|
|
62
61
|
config: import("@xyo-network/payload-model").SchemaFields & object & Omit<{
|
|
63
|
-
|
|
62
|
+
accountPath?: string | undefined;
|
|
64
63
|
readonly archivist?: string | undefined;
|
|
65
64
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
66
65
|
readonly name?: string | undefined;
|
|
@@ -77,7 +76,7 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
77
76
|
readonly storeQueries?: boolean | undefined;
|
|
78
77
|
readonly timestamp?: boolean | undefined;
|
|
79
78
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/payload-model").SchemaFields & object & {
|
|
80
|
-
|
|
79
|
+
accountPath?: string | undefined;
|
|
81
80
|
readonly archivist?: string | undefined;
|
|
82
81
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
83
82
|
readonly name?: string | undefined;
|
|
@@ -106,7 +105,6 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
106
105
|
schema: string;
|
|
107
106
|
};
|
|
108
107
|
ephemeralQueryAccountEnabled?: boolean | undefined;
|
|
109
|
-
wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
|
|
110
108
|
}, TModule extends AnyModule<TParams> = AnyModule<TParams>, TState extends StateDictionary = StateDictionary>(ModuleBase: TModule) => (abstract new (...args: any[]) => {
|
|
111
109
|
_lastState?: ModuleState<TState> | undefined;
|
|
112
110
|
/**
|
|
@@ -158,7 +156,7 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
158
156
|
}, "schema"> & {
|
|
159
157
|
schema: "network.xyo.boundwitness";
|
|
160
158
|
}, TConf extends import("@xyo-network/payload-model").SchemaFields & object & {
|
|
161
|
-
|
|
159
|
+
accountPath?: string | undefined;
|
|
162
160
|
readonly archivist?: string | undefined;
|
|
163
161
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
164
162
|
readonly name?: string | undefined;
|
|
@@ -175,7 +173,7 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
175
173
|
readonly storeQueries?: boolean | undefined;
|
|
176
174
|
readonly timestamp?: boolean | undefined;
|
|
177
175
|
} & import("@xyo-network/module-model").ArchivingModuleConfig = import("@xyo-network/payload-model").SchemaFields & object & {
|
|
178
|
-
|
|
176
|
+
accountPath?: string | undefined;
|
|
179
177
|
readonly archivist?: string | undefined;
|
|
180
178
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
181
179
|
readonly name?: string | undefined;
|
|
@@ -207,7 +205,7 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
207
205
|
}, "schema"> & {
|
|
208
206
|
schema: "network.xyo.boundwitness";
|
|
209
207
|
}, TConf_1 extends import("@xyo-network/payload-model").SchemaFields & object & {
|
|
210
|
-
|
|
208
|
+
accountPath?: string | undefined;
|
|
211
209
|
readonly archivist?: string | undefined;
|
|
212
210
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
213
211
|
readonly name?: string | undefined;
|
|
@@ -224,7 +222,7 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
224
222
|
readonly storeQueries?: boolean | undefined;
|
|
225
223
|
readonly timestamp?: boolean | undefined;
|
|
226
224
|
} & import("@xyo-network/module-model").ArchivingModuleConfig = import("@xyo-network/payload-model").SchemaFields & object & {
|
|
227
|
-
|
|
225
|
+
accountPath?: string | undefined;
|
|
228
226
|
readonly archivist?: string | undefined;
|
|
229
227
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
230
228
|
readonly name?: string | undefined;
|
|
@@ -258,7 +256,7 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
258
256
|
resolve<T_2 extends ModuleInstance<import("@xyo-network/object").BaseParamsFields & {
|
|
259
257
|
account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
|
|
260
258
|
config: import("@xyo-network/payload-model").SchemaFields & object & Omit<{
|
|
261
|
-
|
|
259
|
+
accountPath?: string | undefined;
|
|
262
260
|
readonly archivist?: string | undefined;
|
|
263
261
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
264
262
|
readonly name?: string | undefined;
|
|
@@ -275,7 +273,7 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
275
273
|
readonly storeQueries?: boolean | undefined;
|
|
276
274
|
readonly timestamp?: boolean | undefined;
|
|
277
275
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/payload-model").SchemaFields & object & {
|
|
278
|
-
|
|
276
|
+
accountPath?: string | undefined;
|
|
279
277
|
readonly archivist?: string | undefined;
|
|
280
278
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
281
279
|
readonly name?: string | undefined;
|
|
@@ -295,11 +293,10 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
295
293
|
schema: string;
|
|
296
294
|
};
|
|
297
295
|
ephemeralQueryAccountEnabled?: boolean | undefined;
|
|
298
|
-
wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
|
|
299
296
|
}, import("@xyo-network/module-model").ModuleEventData<object>> = ModuleInstance<import("@xyo-network/object").BaseParamsFields & {
|
|
300
297
|
account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
|
|
301
298
|
config: import("@xyo-network/payload-model").SchemaFields & object & Omit<{
|
|
302
|
-
|
|
299
|
+
accountPath?: string | undefined;
|
|
303
300
|
readonly archivist?: string | undefined;
|
|
304
301
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
305
302
|
readonly name?: string | undefined;
|
|
@@ -316,7 +313,7 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
316
313
|
readonly storeQueries?: boolean | undefined;
|
|
317
314
|
readonly timestamp?: boolean | undefined;
|
|
318
315
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/payload-model").SchemaFields & object & {
|
|
319
|
-
|
|
316
|
+
accountPath?: string | undefined;
|
|
320
317
|
readonly archivist?: string | undefined;
|
|
321
318
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
322
319
|
readonly name?: string | undefined;
|
|
@@ -336,12 +333,11 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
336
333
|
schema: string;
|
|
337
334
|
};
|
|
338
335
|
ephemeralQueryAccountEnabled?: boolean | undefined;
|
|
339
|
-
wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
|
|
340
336
|
}, import("@xyo-network/module-model").ModuleEventData<object>>>(filter?: import("@xyo-network/module-model").ModuleFilter<T_2> | undefined, options?: import("@xyo-network/module-model").ModuleFilterOptions<T_2> | undefined): import("@xylabs/promise").Promisable<T_2[]>;
|
|
341
337
|
resolve<T_3 extends ModuleInstance<import("@xyo-network/object").BaseParamsFields & {
|
|
342
338
|
account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
|
|
343
339
|
config: import("@xyo-network/payload-model").SchemaFields & object & Omit<{
|
|
344
|
-
|
|
340
|
+
accountPath?: string | undefined;
|
|
345
341
|
readonly archivist?: string | undefined;
|
|
346
342
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
347
343
|
readonly name?: string | undefined;
|
|
@@ -358,7 +354,7 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
358
354
|
readonly storeQueries?: boolean | undefined;
|
|
359
355
|
readonly timestamp?: boolean | undefined;
|
|
360
356
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/payload-model").SchemaFields & object & {
|
|
361
|
-
|
|
357
|
+
accountPath?: string | undefined;
|
|
362
358
|
readonly archivist?: string | undefined;
|
|
363
359
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
364
360
|
readonly name?: string | undefined;
|
|
@@ -378,11 +374,10 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
378
374
|
schema: string;
|
|
379
375
|
};
|
|
380
376
|
ephemeralQueryAccountEnabled?: boolean | undefined;
|
|
381
|
-
wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
|
|
382
377
|
}, import("@xyo-network/module-model").ModuleEventData<object>> = ModuleInstance<import("@xyo-network/object").BaseParamsFields & {
|
|
383
378
|
account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
|
|
384
379
|
config: import("@xyo-network/payload-model").SchemaFields & object & Omit<{
|
|
385
|
-
|
|
380
|
+
accountPath?: string | undefined;
|
|
386
381
|
readonly archivist?: string | undefined;
|
|
387
382
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
388
383
|
readonly name?: string | undefined;
|
|
@@ -399,7 +394,7 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
399
394
|
readonly storeQueries?: boolean | undefined;
|
|
400
395
|
readonly timestamp?: boolean | undefined;
|
|
401
396
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/payload-model").SchemaFields & object & {
|
|
402
|
-
|
|
397
|
+
accountPath?: string | undefined;
|
|
403
398
|
readonly archivist?: string | undefined;
|
|
404
399
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
405
400
|
readonly name?: string | undefined;
|
|
@@ -419,12 +414,11 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
419
414
|
schema: string;
|
|
420
415
|
};
|
|
421
416
|
ephemeralQueryAccountEnabled?: boolean | undefined;
|
|
422
|
-
wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
|
|
423
417
|
}, import("@xyo-network/module-model").ModuleEventData<object>>>(nameOrAddress: string, options?: import("@xyo-network/module-model").ModuleFilterOptions<T_3> | undefined): import("@xylabs/promise").Promisable<T_3 | undefined>;
|
|
424
418
|
resolve<T_4 extends ModuleInstance<import("@xyo-network/object").BaseParamsFields & {
|
|
425
419
|
account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
|
|
426
420
|
config: import("@xyo-network/payload-model").SchemaFields & object & Omit<{
|
|
427
|
-
|
|
421
|
+
accountPath?: string | undefined;
|
|
428
422
|
readonly archivist?: string | undefined;
|
|
429
423
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
430
424
|
readonly name?: string | undefined;
|
|
@@ -441,7 +435,7 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
441
435
|
readonly storeQueries?: boolean | undefined;
|
|
442
436
|
readonly timestamp?: boolean | undefined;
|
|
443
437
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/payload-model").SchemaFields & object & {
|
|
444
|
-
|
|
438
|
+
accountPath?: string | undefined;
|
|
445
439
|
readonly archivist?: string | undefined;
|
|
446
440
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
447
441
|
readonly name?: string | undefined;
|
|
@@ -461,11 +455,10 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
461
455
|
schema: string;
|
|
462
456
|
};
|
|
463
457
|
ephemeralQueryAccountEnabled?: boolean | undefined;
|
|
464
|
-
wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
|
|
465
458
|
}, import("@xyo-network/module-model").ModuleEventData<object>> = ModuleInstance<import("@xyo-network/object").BaseParamsFields & {
|
|
466
459
|
account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
|
|
467
460
|
config: import("@xyo-network/payload-model").SchemaFields & object & Omit<{
|
|
468
|
-
|
|
461
|
+
accountPath?: string | undefined;
|
|
469
462
|
readonly archivist?: string | undefined;
|
|
470
463
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
471
464
|
readonly name?: string | undefined;
|
|
@@ -482,7 +475,7 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
482
475
|
readonly storeQueries?: boolean | undefined;
|
|
483
476
|
readonly timestamp?: boolean | undefined;
|
|
484
477
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/payload-model").SchemaFields & object & {
|
|
485
|
-
|
|
478
|
+
accountPath?: string | undefined;
|
|
486
479
|
readonly archivist?: string | undefined;
|
|
487
480
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
488
481
|
readonly name?: string | undefined;
|
|
@@ -502,7 +495,6 @@ export declare const StatefulModuleMixin: <TParams extends import("@xyo-network/
|
|
|
502
495
|
schema: string;
|
|
503
496
|
};
|
|
504
497
|
ephemeralQueryAccountEnabled?: boolean | undefined;
|
|
505
|
-
wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
|
|
506
498
|
}, import("@xyo-network/module-model").ModuleEventData<object>>>(nameOrAddressOrFilter?: string | import("@xyo-network/module-model").ModuleFilter<T_4> | undefined, options?: import("@xyo-network/module-model").ModuleFilterOptions<T_4> | undefined): import("@xylabs/promise").Promisable<T_4 | T_4[] | undefined>;
|
|
507
499
|
describe: () => Promise<import("@xyo-network/module-model").ModuleDescription>;
|
|
508
500
|
discover: () => import("@xylabs/promise").Promisable<({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DivinerMixin.d.ts","sourceRoot":"","sources":["../../src/DivinerMixin.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,eAAe,EAEf,cAAc,EACd,YAAY,EACZ,WAAW,EAEX,eAAe,EAChB,MAAM,2BAA2B,CAAA;AAGlC,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAEhD,MAAM,MAAM,oBAAoB,GAAG,YAAY,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,CAAA;AAGvF,MAAM,MAAM,SAAS,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,cAAc,CAAC,OAAO,CAAC,CAAA;AAIpI;;;;GAIG;AACH,eAAO,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"DivinerMixin.d.ts","sourceRoot":"","sources":["../../src/DivinerMixin.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,eAAe,EAEf,cAAc,EACd,YAAY,EACZ,WAAW,EAEX,eAAe,EAChB,MAAM,2BAA2B,CAAA;AAGlC,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAEhD,MAAM,MAAM,oBAAoB,GAAG,YAAY,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,CAAA;AAGvF,MAAM,MAAM,SAAS,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,cAAc,CAAC,OAAO,CAAC,CAAA;AAIpI;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8JATmE,GAAG,EAAE;;IAmBpG;;;;;;OAMG;;IAWH;;;;OAIG;;IASH;;;;OAIG;;IAWH;;;;OAIG;;IAQH;;;OAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA2CN,CAAA"}
|
package/dist/browser/index.cjs
CHANGED
|
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
7
|
var __export = (target, all) => {
|
|
7
8
|
for (var name in all)
|
|
8
9
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -46,85 +47,102 @@ var import_module_model = require("@xyo-network/module-model");
|
|
|
46
47
|
var import_payload_builder = require("@xyo-network/payload-builder");
|
|
47
48
|
var moduleName = "StatefulDiviner";
|
|
48
49
|
var StatefulDiviner = class extends import_abstract_diviner.AbstractDiviner {
|
|
49
|
-
static
|
|
50
|
+
static {
|
|
51
|
+
__name(this, "StatefulDiviner");
|
|
52
|
+
}
|
|
53
|
+
static configSchemas = [
|
|
54
|
+
import_diviner_model.DivinerConfigSchema,
|
|
55
|
+
StatefulDivinerConfigSchema
|
|
56
|
+
];
|
|
50
57
|
/**
|
|
51
|
-
|
|
52
|
-
|
|
58
|
+
* The last state
|
|
59
|
+
*/
|
|
53
60
|
_lastState;
|
|
54
61
|
/**
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
62
|
+
* Commit the internal state of the Diviner process. This is similar
|
|
63
|
+
* to a transaction completion in a database and should only be called
|
|
64
|
+
* when results have been successfully persisted to the appropriate
|
|
65
|
+
* external stores.
|
|
66
|
+
* @param nextState The state to commit
|
|
67
|
+
*/
|
|
61
68
|
async commitState(nextState) {
|
|
62
69
|
if (nextState.state.offset === this._lastState?.state.offset)
|
|
63
70
|
return;
|
|
64
71
|
this._lastState = nextState;
|
|
65
72
|
const archivist = await this.getArchivistForStateStore();
|
|
66
73
|
const [bw] = await new import_boundwitness_builder.BoundWitnessBuilder().payload(nextState).witness(this.account).build();
|
|
67
|
-
await archivist.insert([
|
|
74
|
+
await archivist.insert([
|
|
75
|
+
bw,
|
|
76
|
+
nextState
|
|
77
|
+
]);
|
|
68
78
|
}
|
|
69
79
|
/**
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
80
|
+
* Retrieves the archivist for the specified store
|
|
81
|
+
* @param store The store to retrieve the archivist for
|
|
82
|
+
* @returns The archivist for the specified store
|
|
83
|
+
*/
|
|
74
84
|
async getArchivistForStateStore() {
|
|
75
85
|
const name = (0, import_assert.assertEx)(this.config?.stateStore.archivist, () => `${moduleName}: Config for stateStore.archivist not specified`);
|
|
76
86
|
const mod = (0, import_assert.assertEx)(await this.resolve(name), () => `${moduleName}: Failed to resolve stateStore.archivist`);
|
|
77
87
|
return import_archivist_wrapper.ArchivistWrapper.wrap(mod, this.account);
|
|
78
88
|
}
|
|
79
89
|
/**
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
90
|
+
* Retrieves the BoundWitness Diviner for the specified store
|
|
91
|
+
* @param store The store to retrieve the BoundWitness Diviner for
|
|
92
|
+
* @returns The BoundWitness Diviner for the specified store
|
|
93
|
+
*/
|
|
84
94
|
async getBoundWitnessDivinerForStateStore() {
|
|
85
95
|
const name = (0, import_assert.assertEx)(this.config?.stateStore.boundWitnessDiviner, () => `${moduleName}: Config for stateStore.boundWitnessDiviner not specified`);
|
|
86
96
|
const mod = (0, import_assert.assertEx)(await this.resolve(name), () => `${moduleName}: Failed to resolve stateStore.boundWitnessDiviner`);
|
|
87
97
|
return import_diviner_wrapper.DivinerWrapper.wrap(mod, this.account);
|
|
88
98
|
}
|
|
89
99
|
/**
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
100
|
+
* Retrieves the Payload Diviner for the specified store
|
|
101
|
+
* @param store The store to retrieve the Payload Diviner for
|
|
102
|
+
* @returns The Payload Diviner for the specified store
|
|
103
|
+
*/
|
|
94
104
|
async getPayloadDivinerForStateStore() {
|
|
95
105
|
const name = (0, import_assert.assertEx)(this.config?.stateStore?.payloadDiviner, () => `${moduleName}: Config for stateStore.payloadDiviner not specified`);
|
|
96
106
|
const mod = (0, import_assert.assertEx)(await this.resolve(name), () => `${moduleName}: Failed to resolve stateStore.payloadDiviner`);
|
|
97
107
|
return import_diviner_wrapper.DivinerWrapper.wrap(mod, this.account);
|
|
98
108
|
}
|
|
99
109
|
/**
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
110
|
+
* Retrieves the last state of the Diviner process. Used to recover state after
|
|
111
|
+
* preemptions, reboots, etc.
|
|
112
|
+
*/
|
|
103
113
|
async retrieveState() {
|
|
104
114
|
if (this._lastState)
|
|
105
115
|
return this._lastState;
|
|
106
116
|
let hash = "";
|
|
107
117
|
const diviner = await this.getBoundWitnessDivinerForStateStore();
|
|
108
|
-
const query = await new import_payload_builder.PayloadBuilder({
|
|
118
|
+
const query = await new import_payload_builder.PayloadBuilder({
|
|
119
|
+
schema: import_diviner_boundwitness_model.BoundWitnessDivinerQuerySchema
|
|
120
|
+
}).fields({
|
|
109
121
|
address: this.account.address,
|
|
110
122
|
limit: 1,
|
|
111
123
|
offset: 0,
|
|
112
124
|
order: "desc",
|
|
113
|
-
payload_schemas: [
|
|
125
|
+
payload_schemas: [
|
|
126
|
+
import_module_model.ModuleStateSchema
|
|
127
|
+
]
|
|
114
128
|
}).build();
|
|
115
|
-
const boundWitnesses = await diviner.divine([
|
|
129
|
+
const boundWitnesses = await diviner.divine([
|
|
130
|
+
query
|
|
131
|
+
]);
|
|
116
132
|
if (boundWitnesses.length > 0) {
|
|
117
133
|
const boundWitness = boundWitnesses[0];
|
|
118
134
|
if ((0, import_boundwitness_model.isBoundWitness)(boundWitness)) {
|
|
119
|
-
hash = boundWitness.addresses.map((address, index) => ({
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
);
|
|
135
|
+
hash = boundWitness.addresses.map((address, index) => ({
|
|
136
|
+
address,
|
|
137
|
+
index
|
|
138
|
+
})).filter(({ address }) => address === this.account.address).reduce((prev, curr) => boundWitness.payload_schemas?.[curr?.index] === import_module_model.ModuleStateSchema ? boundWitness.payload_hashes[curr?.index] : prev, "");
|
|
123
139
|
}
|
|
124
140
|
}
|
|
125
141
|
if (hash) {
|
|
126
142
|
const archivist = await this.getArchivistForStateStore();
|
|
127
|
-
const payload = (await archivist.get([
|
|
143
|
+
const payload = (await archivist.get([
|
|
144
|
+
hash
|
|
145
|
+
])).find(import_module_model.isModuleState);
|
|
128
146
|
if (payload) {
|
|
129
147
|
return payload;
|
|
130
148
|
}
|
|
@@ -143,29 +161,35 @@ var import_diviner_model2 = require("@xyo-network/diviner-model");
|
|
|
143
161
|
var import_module_model2 = require("@xyo-network/module-model");
|
|
144
162
|
var import_payload_builder2 = require("@xyo-network/payload-builder");
|
|
145
163
|
var moduleName2 = "StatefulModuleMixin";
|
|
146
|
-
var StatefulModuleMixin = (ModuleBase) => {
|
|
147
|
-
class StatefulModuleBase extends ModuleBase {
|
|
164
|
+
var StatefulModuleMixin = /* @__PURE__ */ __name((ModuleBase) => {
|
|
165
|
+
let StatefulModuleBase = class StatefulModuleBase extends ModuleBase {
|
|
166
|
+
static {
|
|
167
|
+
__name(this, "StatefulModuleBase");
|
|
168
|
+
}
|
|
148
169
|
_lastState;
|
|
149
170
|
/**
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
171
|
+
* Commit the internal state of the Diviner process. This is similar
|
|
172
|
+
* to a transaction completion in a database and should only be called
|
|
173
|
+
* when results have been successfully persisted to the appropriate
|
|
174
|
+
* external stores.
|
|
175
|
+
* @param nextState The state to commit
|
|
176
|
+
*/
|
|
156
177
|
async commitState(nextState) {
|
|
157
178
|
if (nextState.state.offset === this._lastState?.state.offset)
|
|
158
179
|
return;
|
|
159
180
|
this._lastState = nextState;
|
|
160
181
|
const archivist = await this.getArchivistForStore();
|
|
161
182
|
const [bw] = await new import_boundwitness_builder2.BoundWitnessBuilder().payload(nextState).build();
|
|
162
|
-
await archivist.insert([
|
|
183
|
+
await archivist.insert([
|
|
184
|
+
bw,
|
|
185
|
+
nextState
|
|
186
|
+
]);
|
|
163
187
|
}
|
|
164
188
|
/**
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
189
|
+
* Retrieves the archivist for the specified store
|
|
190
|
+
* @param store The store to retrieve the archivist for
|
|
191
|
+
* @returns The archivist for the specified store
|
|
192
|
+
*/
|
|
169
193
|
async getArchivistForStore() {
|
|
170
194
|
const name = (0, import_assert2.assertEx)(this.config?.stateStore?.archivist, () => `${moduleName2}: Config for stateStore.archivist not specified`);
|
|
171
195
|
const mod = (0, import_assert2.assertEx)(await this.resolve(name), () => `${moduleName2}: Failed to resolve stateStore.archivist`);
|
|
@@ -173,24 +197,21 @@ var StatefulModuleMixin = (ModuleBase) => {
|
|
|
173
197
|
return (0, import_assert2.assertEx)(instance, () => `${moduleName2}: Failed to wrap archivist instance`);
|
|
174
198
|
}
|
|
175
199
|
/**
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
200
|
+
* Retrieves the BoundWitness Diviner for the specified store
|
|
201
|
+
* @param store The store to retrieve the BoundWitness Diviner for
|
|
202
|
+
* @returns The BoundWitness Diviner for the specified store
|
|
203
|
+
*/
|
|
180
204
|
async getBoundWitnessDivinerForStore() {
|
|
181
|
-
const name = (0, import_assert2.assertEx)(
|
|
182
|
-
this.config?.stateStore?.boundWitnessDiviner,
|
|
183
|
-
() => `${moduleName2}: Config for stateStore.boundWitnessDiviner not specified`
|
|
184
|
-
);
|
|
205
|
+
const name = (0, import_assert2.assertEx)(this.config?.stateStore?.boundWitnessDiviner, () => `${moduleName2}: Config for stateStore.boundWitnessDiviner not specified`);
|
|
185
206
|
const mod = (0, import_assert2.assertEx)(await this.resolve(name), () => `${moduleName2}: Failed to resolve stateStore.boundWitnessDiviner`);
|
|
186
207
|
const instance = (0, import_diviner_model2.asDivinerInstance)(mod);
|
|
187
208
|
return (0, import_assert2.assertEx)(instance, () => `${moduleName2}: Failed to wrap diviner instance`);
|
|
188
209
|
}
|
|
189
210
|
/**
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
211
|
+
* Retrieves the Payload Diviner for the specified store
|
|
212
|
+
* @param store The store to retrieve the Payload Diviner for
|
|
213
|
+
* @returns The Payload Diviner for the specified store
|
|
214
|
+
*/
|
|
194
215
|
async getPayloadDivinerForStateStore() {
|
|
195
216
|
const name = (0, import_assert2.assertEx)(this.config?.stateStore?.payloadDiviner, () => `${moduleName2}: Config for stateStore.payloadDiviner not specified`);
|
|
196
217
|
const mod = (0, import_assert2.assertEx)(await this.resolve(name), () => `${moduleName2}: Failed to resolve stateStore.payloadDiviner`);
|
|
@@ -198,41 +219,49 @@ var StatefulModuleMixin = (ModuleBase) => {
|
|
|
198
219
|
return (0, import_assert2.assertEx)(instance, () => `${moduleName2}: Failed to wrap diviner instance`);
|
|
199
220
|
}
|
|
200
221
|
/**
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
222
|
+
* Retrieves the last state of the Diviner process. Used to recover state after
|
|
223
|
+
* preemptions, reboots, etc.
|
|
224
|
+
*/
|
|
204
225
|
async retrieveState() {
|
|
205
226
|
if (this._lastState)
|
|
206
227
|
return this._lastState;
|
|
207
228
|
let hash = "";
|
|
208
229
|
const diviner = await this.getBoundWitnessDivinerForStore();
|
|
209
|
-
const query = await new import_payload_builder2.PayloadBuilder({
|
|
230
|
+
const query = await new import_payload_builder2.PayloadBuilder({
|
|
231
|
+
schema: import_diviner_boundwitness_model2.BoundWitnessDivinerQuerySchema
|
|
232
|
+
}).fields({
|
|
210
233
|
// address: this.account.address,
|
|
211
234
|
limit: 1,
|
|
212
235
|
offset: 0,
|
|
213
236
|
order: "desc",
|
|
214
|
-
payload_schemas: [
|
|
237
|
+
payload_schemas: [
|
|
238
|
+
import_module_model2.ModuleStateSchema
|
|
239
|
+
]
|
|
215
240
|
}).build();
|
|
216
|
-
const boundWitnesses = await diviner.divine([
|
|
241
|
+
const boundWitnesses = await diviner.divine([
|
|
242
|
+
query
|
|
243
|
+
]);
|
|
217
244
|
if (boundWitnesses.length > 0) {
|
|
218
245
|
const boundWitness = boundWitnesses[0];
|
|
219
246
|
if ((0, import_boundwitness_model2.isBoundWitness)(boundWitness)) {
|
|
220
|
-
hash = boundWitness.addresses.map((address, index) => ({
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
);
|
|
247
|
+
hash = boundWitness.addresses.map((address, index) => ({
|
|
248
|
+
address,
|
|
249
|
+
index
|
|
250
|
+
})).reduce((prev, curr) => boundWitness.payload_schemas?.[curr?.index] === import_module_model2.ModuleStateSchema ? boundWitness.payload_hashes[curr?.index] : prev, "");
|
|
224
251
|
}
|
|
225
252
|
}
|
|
226
253
|
if (hash) {
|
|
227
254
|
const archivist = await this.getArchivistForStore();
|
|
228
|
-
const payload = (await archivist.get([
|
|
255
|
+
const payload = (await archivist.get([
|
|
256
|
+
hash
|
|
257
|
+
])).find(import_module_model2.isModuleState);
|
|
229
258
|
if (payload) {
|
|
230
259
|
return payload;
|
|
231
260
|
}
|
|
232
261
|
}
|
|
233
262
|
return void 0;
|
|
234
263
|
}
|
|
235
|
-
}
|
|
264
|
+
};
|
|
236
265
|
return StatefulModuleBase;
|
|
237
|
-
};
|
|
266
|
+
}, "StatefulModuleMixin");
|
|
238
267
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/Schema.ts","../../src/Config.ts","../../src/Diviner.ts","../../src/DivinerMixin.ts"],"sourcesContent":["export * from './Config'\nexport * from './Diviner'\nexport * from './DivinerMixin'\nexport * from './Params'\nexport * from './Schema'\n","export const StatefulDivinerSchema = 'network.xyo.diviner.stateful' as const\nexport type StatefulDivinerSchema = typeof StatefulDivinerSchema\n","import { DivinerConfig } from '@xyo-network/diviner-model'\n\nimport { StatefulDivinerSchema } from './Schema'\n\n/**\n * The schema for a Stateful Diviner config\n */\nexport const StatefulDivinerConfigSchema = `${StatefulDivinerSchema}.config` as const\n/**\n * The schema for a Stateful Diviner config\n */\nexport type StatefulDivinerConfigSchema = typeof StatefulDivinerConfigSchema\n\n/**\n * The config for a Stateful Diviner\n */\nexport type StatefulDivinerConfig = DivinerConfig<{\n schema: StatefulDivinerConfigSchema\n stateStore: {\n archivist: string\n boundWitnessDiviner: string\n payloadDiviner: string\n }\n}>\n","import { assertEx } from '@xylabs/assert'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { DivinerConfigSchema, DivinerModule, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport { isModuleState, ModuleState, ModuleStateSchema, StateDictionary } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { StatefulDivinerConfigSchema } from './Config'\nimport { StatefulDivinerParams } from './Params'\n\nconst moduleName = 'StatefulDiviner'\n\n/**\n * A Diviner that maintains state\n */\nexport abstract class StatefulDiviner<\n TParams extends StatefulDivinerParams = StatefulDivinerParams,\n TIn extends Payload = Payload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut> = DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut>,\n TState extends StateDictionary = StateDictionary,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: string[] = [DivinerConfigSchema, StatefulDivinerConfigSchema]\n\n /**\n * The last state\n */\n protected _lastState?: ModuleState<TState>\n\n /**\n * Commit the internal state of the Diviner process. This is similar\n * to a transaction completion in a database and should only be called\n * when results have been successfully persisted to the appropriate\n * external stores.\n * @param nextState The state to commit\n */\n protected async commitState(nextState: ModuleState<TState>) {\n // Don't commit state if no state has changed\n if (nextState.state.offset === this._lastState?.state.offset) return\n this._lastState = nextState\n const archivist = await this.getArchivistForStateStore()\n const [bw] = await new BoundWitnessBuilder().payload(nextState).witness(this.account).build()\n await archivist.insert([bw, nextState])\n }\n\n /**\n * Retrieves the archivist for the specified store\n * @param store The store to retrieve the archivist for\n * @returns The archivist for the specified store\n */\n protected async getArchivistForStateStore() {\n const name = assertEx(this.config?.stateStore.archivist, () => `${moduleName}: Config for stateStore.archivist not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve stateStore.archivist`)\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the specified store\n * @param store The store to retrieve the BoundWitness Diviner for\n * @returns The BoundWitness Diviner for the specified store\n */\n protected async getBoundWitnessDivinerForStateStore() {\n const name = assertEx(this.config?.stateStore.boundWitnessDiviner, () => `${moduleName}: Config for stateStore.boundWitnessDiviner not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve stateStore.boundWitnessDiviner`)\n return DivinerWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the Payload Diviner for the specified store\n * @param store The store to retrieve the Payload Diviner for\n * @returns The Payload Diviner for the specified store\n */\n protected async getPayloadDivinerForStateStore() {\n const name = assertEx(this.config?.stateStore?.payloadDiviner, () => `${moduleName}: Config for stateStore.payloadDiviner not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve stateStore.payloadDiviner`)\n return DivinerWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the last state of the Diviner process. Used to recover state after\n * preemptions, reboots, etc.\n */\n protected async retrieveState(): Promise<ModuleState<TState> | undefined> {\n if (this._lastState) return this._lastState\n let hash: string = ''\n const diviner = await this.getBoundWitnessDivinerForStateStore()\n const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({\n address: this.account.address,\n limit: 1,\n offset: 0,\n order: 'desc',\n payload_schemas: [ModuleStateSchema],\n })\n .build()\n const boundWitnesses = await diviner.divine([query])\n if (boundWitnesses.length > 0) {\n const boundWitness = boundWitnesses[0]\n if (isBoundWitness(boundWitness)) {\n // Find the index for this address in the BoundWitness that is a ModuleState\n hash = boundWitness.addresses\n .map((address, index) => ({ address, index }))\n .filter(({ address }) => address === this.account.address)\n // eslint-disable-next-line unicorn/no-array-reduce\n .reduce(\n (prev, curr) => (boundWitness.payload_schemas?.[curr?.index] === ModuleStateSchema ? boundWitness.payload_hashes[curr?.index] : prev),\n '',\n )\n }\n }\n\n // If we able to located the last state\n if (hash) {\n // Get last state\n const archivist = await this.getArchivistForStateStore()\n const payload = (await archivist.get([hash])).find(isModuleState<TState>)\n if (payload) {\n return payload\n }\n }\n return undefined\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asArchivistInstance } from '@xyo-network/archivist'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { asDivinerInstance } from '@xyo-network/diviner-model'\nimport {\n AnyConfigSchema,\n isModuleState,\n ModuleInstance,\n ModuleParams,\n ModuleState,\n ModuleStateSchema,\n StateDictionary,\n} from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nimport { StatefulDivinerConfig } from './Config'\n\nexport type StatefulModuleParams = ModuleParams<AnyConfigSchema<StatefulDivinerConfig>>\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyModule<TParams extends StatefulModuleParams = StatefulModuleParams> = new (...args: any[]) => ModuleInstance<TParams>\n\nconst moduleName = 'StatefulModuleMixin'\n\n/**\n * @ignore Inherit from StatefulDiviner instead\n * @param ModuleBase\n * @returns\n */\nexport const StatefulModuleMixin = <\n TParams extends StatefulModuleParams = StatefulModuleParams,\n TModule extends AnyModule<TParams> = AnyModule<TParams>,\n TState extends StateDictionary = StateDictionary,\n>(\n ModuleBase: TModule,\n) => {\n abstract class StatefulModuleBase extends ModuleBase {\n _lastState?: ModuleState<TState>\n\n /**\n * Commit the internal state of the Diviner process. This is similar\n * to a transaction completion in a database and should only be called\n * when results have been successfully persisted to the appropriate\n * external stores.\n * @param nextState The state to commit\n */\n async commitState(nextState: ModuleState<TState>) {\n // Don't commit state if no state has changed\n if (nextState.state.offset === this._lastState?.state.offset) return\n this._lastState = nextState\n const archivist = await this.getArchivistForStore()\n // const [bw] = await new BoundWitnessBuilder().payload(nextState).witness(this.account).build()\n const [bw] = await new BoundWitnessBuilder().payload(nextState).build()\n await archivist.insert([bw, nextState])\n }\n\n /**\n * Retrieves the archivist for the specified store\n * @param store The store to retrieve the archivist for\n * @returns The archivist for the specified store\n */\n async getArchivistForStore() {\n const name = assertEx(this.config?.stateStore?.archivist, () => `${moduleName}: Config for stateStore.archivist not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve stateStore.archivist`)\n // return ArchivistWrapper.wrap(mod, this.account)\n const instance = asArchivistInstance(mod)\n return assertEx(instance, () => `${moduleName}: Failed to wrap archivist instance`)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the specified store\n * @param store The store to retrieve the BoundWitness Diviner for\n * @returns The BoundWitness Diviner for the specified store\n */\n async getBoundWitnessDivinerForStore() {\n const name = assertEx(\n this.config?.stateStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for stateStore.boundWitnessDiviner not specified`,\n )\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve stateStore.boundWitnessDiviner`)\n // return DivinerWrapper.wrap(mod, this.account)\n const instance = asDivinerInstance(mod)\n return assertEx(instance, () => `${moduleName}: Failed to wrap diviner instance`)\n }\n /**\n * Retrieves the Payload Diviner for the specified store\n * @param store The store to retrieve the Payload Diviner for\n * @returns The Payload Diviner for the specified store\n */\n async getPayloadDivinerForStateStore() {\n const name = assertEx(this.config?.stateStore?.payloadDiviner, () => `${moduleName}: Config for stateStore.payloadDiviner not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve stateStore.payloadDiviner`)\n // return DivinerWrapper.wrap(mod, this.account)\n const instance = asDivinerInstance(mod)\n return assertEx(instance, () => `${moduleName}: Failed to wrap diviner instance`)\n }\n /**\n * Retrieves the last state of the Diviner process. Used to recover state after\n * preemptions, reboots, etc.\n */\n async retrieveState(): Promise<ModuleState<TState> | undefined> {\n if (this._lastState) return this._lastState\n let hash: string = ''\n const diviner = await this.getBoundWitnessDivinerForStore()\n const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({\n // address: this.account.address,\n limit: 1,\n offset: 0,\n order: 'desc',\n payload_schemas: [ModuleStateSchema],\n })\n .build()\n const boundWitnesses = await diviner.divine([query])\n if (boundWitnesses.length > 0) {\n const boundWitness = boundWitnesses[0]\n if (isBoundWitness(boundWitness)) {\n // Find the index for this address in the BoundWitness that is a ModuleState\n hash = boundWitness.addresses\n .map((address, index) => ({ address, index }))\n // .filter(({ address }) => address === this.account.address)\n // eslint-disable-next-line unicorn/no-array-reduce\n .reduce(\n (prev, curr) => (boundWitness.payload_schemas?.[curr?.index] === ModuleStateSchema ? boundWitness.payload_hashes[curr?.index] : prev),\n '',\n )\n }\n }\n\n // If we able to located the last state\n if (hash) {\n // Get last state\n const archivist = await this.getArchivistForStore()\n const payload = (await archivist.get([hash])).find(isModuleState<TState>)\n if (payload) {\n return payload\n }\n }\n return undefined\n }\n }\n return StatefulModuleBase\n}\n"],"mappings":"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","names":["import_assert","import_boundwitness_builder","import_boundwitness_model","import_diviner_boundwitness_model","import_diviner_model","import_module_model","import_payload_builder","moduleName"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/Schema.ts","../../src/Config.ts","../../src/Diviner.ts","../../src/DivinerMixin.ts"],"sourcesContent":["export * from './Config'\nexport * from './Diviner'\nexport * from './DivinerMixin'\nexport * from './Params'\nexport * from './Schema'\n","export const StatefulDivinerSchema = 'network.xyo.diviner.stateful' as const\nexport type StatefulDivinerSchema = typeof StatefulDivinerSchema\n","import { DivinerConfig } from '@xyo-network/diviner-model'\n\nimport { StatefulDivinerSchema } from './Schema'\n\n/**\n * The schema for a Stateful Diviner config\n */\nexport const StatefulDivinerConfigSchema = `${StatefulDivinerSchema}.config` as const\n/**\n * The schema for a Stateful Diviner config\n */\nexport type StatefulDivinerConfigSchema = typeof StatefulDivinerConfigSchema\n\n/**\n * The config for a Stateful Diviner\n */\nexport type StatefulDivinerConfig = DivinerConfig<{\n schema: StatefulDivinerConfigSchema\n stateStore: {\n archivist: string\n boundWitnessDiviner: string\n payloadDiviner: string\n }\n}>\n","import { assertEx } from '@xylabs/assert'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { DivinerConfigSchema, DivinerModule, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport { isModuleState, ModuleState, ModuleStateSchema, StateDictionary } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { StatefulDivinerConfigSchema } from './Config'\nimport { StatefulDivinerParams } from './Params'\n\nconst moduleName = 'StatefulDiviner'\n\n/**\n * A Diviner that maintains state\n */\nexport abstract class StatefulDiviner<\n TParams extends StatefulDivinerParams = StatefulDivinerParams,\n TIn extends Payload = Payload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut> = DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut>,\n TState extends StateDictionary = StateDictionary,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: string[] = [DivinerConfigSchema, StatefulDivinerConfigSchema]\n\n /**\n * The last state\n */\n protected _lastState?: ModuleState<TState>\n\n /**\n * Commit the internal state of the Diviner process. This is similar\n * to a transaction completion in a database and should only be called\n * when results have been successfully persisted to the appropriate\n * external stores.\n * @param nextState The state to commit\n */\n protected async commitState(nextState: ModuleState<TState>) {\n // Don't commit state if no state has changed\n if (nextState.state.offset === this._lastState?.state.offset) return\n this._lastState = nextState\n const archivist = await this.getArchivistForStateStore()\n const [bw] = await new BoundWitnessBuilder().payload(nextState).witness(this.account).build()\n await archivist.insert([bw, nextState])\n }\n\n /**\n * Retrieves the archivist for the specified store\n * @param store The store to retrieve the archivist for\n * @returns The archivist for the specified store\n */\n protected async getArchivistForStateStore() {\n const name = assertEx(this.config?.stateStore.archivist, () => `${moduleName}: Config for stateStore.archivist not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve stateStore.archivist`)\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the specified store\n * @param store The store to retrieve the BoundWitness Diviner for\n * @returns The BoundWitness Diviner for the specified store\n */\n protected async getBoundWitnessDivinerForStateStore() {\n const name = assertEx(this.config?.stateStore.boundWitnessDiviner, () => `${moduleName}: Config for stateStore.boundWitnessDiviner not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve stateStore.boundWitnessDiviner`)\n return DivinerWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the Payload Diviner for the specified store\n * @param store The store to retrieve the Payload Diviner for\n * @returns The Payload Diviner for the specified store\n */\n protected async getPayloadDivinerForStateStore() {\n const name = assertEx(this.config?.stateStore?.payloadDiviner, () => `${moduleName}: Config for stateStore.payloadDiviner not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve stateStore.payloadDiviner`)\n return DivinerWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the last state of the Diviner process. Used to recover state after\n * preemptions, reboots, etc.\n */\n protected async retrieveState(): Promise<ModuleState<TState> | undefined> {\n if (this._lastState) return this._lastState\n let hash: string = ''\n const diviner = await this.getBoundWitnessDivinerForStateStore()\n const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({\n address: this.account.address,\n limit: 1,\n offset: 0,\n order: 'desc',\n payload_schemas: [ModuleStateSchema],\n })\n .build()\n const boundWitnesses = await diviner.divine([query])\n if (boundWitnesses.length > 0) {\n const boundWitness = boundWitnesses[0]\n if (isBoundWitness(boundWitness)) {\n // Find the index for this address in the BoundWitness that is a ModuleState\n hash = boundWitness.addresses\n .map((address, index) => ({ address, index }))\n .filter(({ address }) => address === this.account.address)\n // eslint-disable-next-line unicorn/no-array-reduce\n .reduce(\n (prev, curr) => (boundWitness.payload_schemas?.[curr?.index] === ModuleStateSchema ? boundWitness.payload_hashes[curr?.index] : prev),\n '',\n )\n }\n }\n\n // If we able to located the last state\n if (hash) {\n // Get last state\n const archivist = await this.getArchivistForStateStore()\n const payload = (await archivist.get([hash])).find(isModuleState<TState>)\n if (payload) {\n return payload\n }\n }\n return undefined\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asArchivistInstance } from '@xyo-network/archivist'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { asDivinerInstance } from '@xyo-network/diviner-model'\nimport {\n AnyConfigSchema,\n isModuleState,\n ModuleInstance,\n ModuleParams,\n ModuleState,\n ModuleStateSchema,\n StateDictionary,\n} from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nimport { StatefulDivinerConfig } from './Config'\n\nexport type StatefulModuleParams = ModuleParams<AnyConfigSchema<StatefulDivinerConfig>>\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyModule<TParams extends StatefulModuleParams = StatefulModuleParams> = new (...args: any[]) => ModuleInstance<TParams>\n\nconst moduleName = 'StatefulModuleMixin'\n\n/**\n * @ignore Inherit from StatefulDiviner instead\n * @param ModuleBase\n * @returns\n */\nexport const StatefulModuleMixin = <\n TParams extends StatefulModuleParams = StatefulModuleParams,\n TModule extends AnyModule<TParams> = AnyModule<TParams>,\n TState extends StateDictionary = StateDictionary,\n>(\n ModuleBase: TModule,\n) => {\n abstract class StatefulModuleBase extends ModuleBase {\n _lastState?: ModuleState<TState>\n\n /**\n * Commit the internal state of the Diviner process. This is similar\n * to a transaction completion in a database and should only be called\n * when results have been successfully persisted to the appropriate\n * external stores.\n * @param nextState The state to commit\n */\n async commitState(nextState: ModuleState<TState>) {\n // Don't commit state if no state has changed\n if (nextState.state.offset === this._lastState?.state.offset) return\n this._lastState = nextState\n const archivist = await this.getArchivistForStore()\n // const [bw] = await new BoundWitnessBuilder().payload(nextState).witness(this.account).build()\n const [bw] = await new BoundWitnessBuilder().payload(nextState).build()\n await archivist.insert([bw, nextState])\n }\n\n /**\n * Retrieves the archivist for the specified store\n * @param store The store to retrieve the archivist for\n * @returns The archivist for the specified store\n */\n async getArchivistForStore() {\n const name = assertEx(this.config?.stateStore?.archivist, () => `${moduleName}: Config for stateStore.archivist not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve stateStore.archivist`)\n // return ArchivistWrapper.wrap(mod, this.account)\n const instance = asArchivistInstance(mod)\n return assertEx(instance, () => `${moduleName}: Failed to wrap archivist instance`)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the specified store\n * @param store The store to retrieve the BoundWitness Diviner for\n * @returns The BoundWitness Diviner for the specified store\n */\n async getBoundWitnessDivinerForStore() {\n const name = assertEx(\n this.config?.stateStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for stateStore.boundWitnessDiviner not specified`,\n )\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve stateStore.boundWitnessDiviner`)\n // return DivinerWrapper.wrap(mod, this.account)\n const instance = asDivinerInstance(mod)\n return assertEx(instance, () => `${moduleName}: Failed to wrap diviner instance`)\n }\n /**\n * Retrieves the Payload Diviner for the specified store\n * @param store The store to retrieve the Payload Diviner for\n * @returns The Payload Diviner for the specified store\n */\n async getPayloadDivinerForStateStore() {\n const name = assertEx(this.config?.stateStore?.payloadDiviner, () => `${moduleName}: Config for stateStore.payloadDiviner not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve stateStore.payloadDiviner`)\n // return DivinerWrapper.wrap(mod, this.account)\n const instance = asDivinerInstance(mod)\n return assertEx(instance, () => `${moduleName}: Failed to wrap diviner instance`)\n }\n /**\n * Retrieves the last state of the Diviner process. Used to recover state after\n * preemptions, reboots, etc.\n */\n async retrieveState(): Promise<ModuleState<TState> | undefined> {\n if (this._lastState) return this._lastState\n let hash: string = ''\n const diviner = await this.getBoundWitnessDivinerForStore()\n const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({\n // address: this.account.address,\n limit: 1,\n offset: 0,\n order: 'desc',\n payload_schemas: [ModuleStateSchema],\n })\n .build()\n const boundWitnesses = await diviner.divine([query])\n if (boundWitnesses.length > 0) {\n const boundWitness = boundWitnesses[0]\n if (isBoundWitness(boundWitness)) {\n // Find the index for this address in the BoundWitness that is a ModuleState\n hash = boundWitness.addresses\n .map((address, index) => ({ address, index }))\n // .filter(({ address }) => address === this.account.address)\n // eslint-disable-next-line unicorn/no-array-reduce\n .reduce(\n (prev, curr) => (boundWitness.payload_schemas?.[curr?.index] === ModuleStateSchema ? boundWitness.payload_hashes[curr?.index] : prev),\n '',\n )\n }\n }\n\n // If we able to located the last state\n if (hash) {\n // Get last state\n const archivist = await this.getArchivistForStore()\n const payload = (await archivist.get([hash])).find(isModuleState<TState>)\n if (payload) {\n return payload\n }\n }\n return undefined\n }\n }\n return StatefulModuleBase\n}\n"],"mappings":"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","names":["StatefulDivinerSchema","StatefulDivinerConfigSchema","StatefulDivinerSchema","moduleName","StatefulDiviner","AbstractDiviner","configSchemas","DivinerConfigSchema","StatefulDivinerConfigSchema","_lastState","commitState","nextState","state","offset","archivist","getArchivistForStateStore","bw","BoundWitnessBuilder","payload","witness","account","build","insert","name","assertEx","config","stateStore","mod","resolve","ArchivistWrapper","wrap","getBoundWitnessDivinerForStateStore","boundWitnessDiviner","DivinerWrapper","getPayloadDivinerForStateStore","payloadDiviner","retrieveState","hash","diviner","query","PayloadBuilder","schema","BoundWitnessDivinerQuerySchema","fields","address","limit","order","payload_schemas","ModuleStateSchema","boundWitnesses","divine","length","boundWitness","isBoundWitness","addresses","map","index","filter","reduce","prev","curr","payload_hashes","get","find","isModuleState","undefined","import_assert","import_boundwitness_builder","import_boundwitness_model","import_diviner_boundwitness_model","import_diviner_model","import_module_model","import_payload_builder","moduleName","StatefulModuleMixin","ModuleBase","StatefulModuleBase","_lastState","commitState","nextState","state","offset","archivist","getArchivistForStore","bw","BoundWitnessBuilder","payload","build","insert","name","assertEx","config","stateStore","mod","resolve","instance","asArchivistInstance","getBoundWitnessDivinerForStore","boundWitnessDiviner","asDivinerInstance","getPayloadDivinerForStateStore","payloadDiviner","retrieveState","hash","diviner","query","PayloadBuilder","schema","BoundWitnessDivinerQuerySchema","fields","limit","order","payload_schemas","ModuleStateSchema","boundWitnesses","divine","length","boundWitness","isBoundWitness","addresses","map","address","index","reduce","prev","curr","payload_hashes","get","find","isModuleState","undefined"]}
|