@xyo-network/sentinel-abstract 2.111.3 → 3.0.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.
Files changed (48) hide show
  1. package/dist/neutral/index.d.ts +26 -2
  2. package/package.json +15 -34
  3. package/xy.config.ts +12 -0
  4. package/dist/browser/AbstractSentinel.d.cts +0 -24
  5. package/dist/browser/AbstractSentinel.d.cts.map +0 -1
  6. package/dist/browser/AbstractSentinel.d.mts +0 -24
  7. package/dist/browser/AbstractSentinel.d.mts.map +0 -1
  8. package/dist/browser/AbstractSentinel.d.ts +0 -24
  9. package/dist/browser/AbstractSentinel.d.ts.map +0 -1
  10. package/dist/browser/index.cjs +0 -156
  11. package/dist/browser/index.cjs.map +0 -1
  12. package/dist/browser/index.d.cts +0 -2
  13. package/dist/browser/index.d.cts.map +0 -1
  14. package/dist/browser/index.d.mts +0 -2
  15. package/dist/browser/index.d.mts.map +0 -1
  16. package/dist/browser/index.d.ts +0 -2
  17. package/dist/browser/index.d.ts.map +0 -1
  18. package/dist/browser/index.mjs +0 -135
  19. package/dist/browser/index.mjs.map +0 -1
  20. package/dist/neutral/AbstractSentinel.d.cts +0 -24
  21. package/dist/neutral/AbstractSentinel.d.cts.map +0 -1
  22. package/dist/neutral/AbstractSentinel.d.mts +0 -24
  23. package/dist/neutral/AbstractSentinel.d.mts.map +0 -1
  24. package/dist/neutral/AbstractSentinel.d.ts +0 -24
  25. package/dist/neutral/AbstractSentinel.d.ts.map +0 -1
  26. package/dist/neutral/index.cjs +0 -156
  27. package/dist/neutral/index.cjs.map +0 -1
  28. package/dist/neutral/index.d.cts +0 -2
  29. package/dist/neutral/index.d.cts.map +0 -1
  30. package/dist/neutral/index.d.mts +0 -2
  31. package/dist/neutral/index.d.mts.map +0 -1
  32. package/dist/neutral/index.d.ts.map +0 -1
  33. package/dist/node/AbstractSentinel.d.cts +0 -24
  34. package/dist/node/AbstractSentinel.d.cts.map +0 -1
  35. package/dist/node/AbstractSentinel.d.mts +0 -24
  36. package/dist/node/AbstractSentinel.d.mts.map +0 -1
  37. package/dist/node/AbstractSentinel.d.ts +0 -24
  38. package/dist/node/AbstractSentinel.d.ts.map +0 -1
  39. package/dist/node/index.cjs +0 -164
  40. package/dist/node/index.cjs.map +0 -1
  41. package/dist/node/index.d.cts +0 -2
  42. package/dist/node/index.d.cts.map +0 -1
  43. package/dist/node/index.d.mts +0 -2
  44. package/dist/node/index.d.mts.map +0 -1
  45. package/dist/node/index.d.ts +0 -2
  46. package/dist/node/index.d.ts.map +0 -1
  47. package/dist/node/index.mjs +0 -139
  48. package/dist/node/index.mjs.map +0 -1
@@ -1,139 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __getProtoOf = Object.getPrototypeOf;
3
- var __reflectGet = Reflect.get;
4
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
7
- var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
8
-
9
- // src/AbstractSentinel.ts
10
- import { assertEx } from "@xylabs/assert";
11
- import { forget } from "@xylabs/forget";
12
- import { globallyUnique } from "@xylabs/object";
13
- import { BoundWitnessBuilder } from "@xyo-network/boundwitness-builder";
14
- import { isBoundWitness, notBoundWitness } from "@xyo-network/boundwitness-model";
15
- import { QueryBoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
16
- import { AbstractModuleInstance } from "@xyo-network/module-abstract";
17
- import { SentinelConfigSchema, SentinelReportQuerySchema } from "@xyo-network/sentinel-model";
18
- var _AbstractSentinel = class _AbstractSentinel extends AbstractModuleInstance {
19
- history = [];
20
- _jobPromise;
21
- get jobPromise() {
22
- this._jobPromise = this._jobPromise ?? this.generateJob();
23
- return this._jobPromise;
24
- }
25
- get queries() {
26
- return [
27
- SentinelReportQuerySchema,
28
- ...super.queries
29
- ];
30
- }
31
- get synchronous() {
32
- return this.config.synchronous ?? false;
33
- }
34
- get throwErrors() {
35
- return this.config.throwErrors ?? true;
36
- }
37
- async report(inPayloads) {
38
- this._noOverride("report");
39
- const reportPromise = (async () => {
40
- await this.emit("reportStart", {
41
- inPayloads,
42
- mod: this
43
- });
44
- const payloads = await this.reportHandler(inPayloads);
45
- const result = (await new BoundWitnessBuilder().payloads(payloads).signer(this.account).build()).flat();
46
- if (this.config.archiving) {
47
- forget(this.storeToArchivists(result));
48
- }
49
- await this.emitReportEnd(inPayloads, result);
50
- return result;
51
- })();
52
- if (this.synchronous) {
53
- return await reportPromise;
54
- } else {
55
- forget(reportPromise);
56
- return [];
57
- }
58
- }
59
- async reportQuery(payloads, account) {
60
- const queryPayload = {
61
- schema: SentinelReportQuerySchema
62
- };
63
- return await this.sendQueryRaw(queryPayload, payloads, account);
64
- }
65
- async emitReportEnd(inPayloads, payloads) {
66
- const boundwitnesses = (payloads == null ? void 0 : payloads.filter(isBoundWitness)) ?? [];
67
- const outPayloads = (payloads == null ? void 0 : payloads.filter(notBoundWitness)) ?? [];
68
- const boundwitness = boundwitnesses.find((bw) => bw.addresses.includes(this.address));
69
- await this.emit("reportEnd", {
70
- boundwitness,
71
- inPayloads,
72
- mod: this,
73
- outPayloads
74
- });
75
- }
76
- async generateJob() {
77
- const job = {
78
- tasks: []
79
- };
80
- let tasks = await Promise.all(this.config.tasks.map(async (task) => ({
81
- input: task.input ?? false,
82
- mod: assertEx(await this.resolve(task.mod), () => `Unable to resolve task module [${task.mod}]`)
83
- })));
84
- while (tasks.length > 0) {
85
- const previousTasks = job.tasks.at(-1) ?? [];
86
- const newListCandidates = tasks.filter((task) => {
87
- const input = task.input;
88
- if (input === void 0) {
89
- return true;
90
- }
91
- if (typeof input === "boolean") {
92
- return true;
93
- }
94
- if (typeof input === "string") {
95
- return previousTasks.find((prevTask) => prevTask.mod.address === input || prevTask.mod.modName === input);
96
- }
97
- if (Array.isArray(input)) {
98
- return previousTasks.find((prevTask) => input.includes(prevTask.mod.address) || input.includes(prevTask.mod.modName ?? prevTask.mod.address));
99
- }
100
- });
101
- const newList = newListCandidates.filter((taskCandidate) => {
102
- const input = taskCandidate.input;
103
- return !(Array.isArray(input) && tasks.some((remainingTask) => input.includes(remainingTask.mod.address) || input.includes(remainingTask.mod.modName ?? remainingTask.mod.address)));
104
- });
105
- assertEx(newList.length > 0, () => `Unable to generateJob [${tasks.length}]`);
106
- job.tasks.push(newList);
107
- tasks = tasks.filter((task) => !newList.includes(task));
108
- }
109
- return job;
110
- }
111
- async queryHandler(query, payloads, queryConfig) {
112
- const wrapper = await QueryBoundWitnessWrapper.parseQuery(query, payloads);
113
- const queryPayload = await wrapper.getQuery();
114
- assertEx(await this.queryable(query, payloads, queryConfig));
115
- const resultPayloads = [];
116
- switch (queryPayload.schema) {
117
- case SentinelReportQuerySchema: {
118
- resultPayloads.push(...await this.report(payloads));
119
- break;
120
- }
121
- default: {
122
- return super.queryHandler(query, payloads);
123
- }
124
- }
125
- return resultPayloads;
126
- }
127
- };
128
- __name(_AbstractSentinel, "AbstractSentinel");
129
- __publicField(_AbstractSentinel, "configSchemas", [
130
- ...__superGet(_AbstractSentinel, _AbstractSentinel, "configSchemas"),
131
- SentinelConfigSchema
132
- ]);
133
- __publicField(_AbstractSentinel, "defaultConfigSchema", SentinelConfigSchema);
134
- __publicField(_AbstractSentinel, "uniqueName", globallyUnique("AbstractSentinel", _AbstractSentinel, "xyo"));
135
- var AbstractSentinel = _AbstractSentinel;
136
- export {
137
- AbstractSentinel
138
- };
139
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/AbstractSentinel.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { forget } from '@xylabs/forget'\nimport { globallyUnique } from '@xylabs/object'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { BoundWitness, isBoundWitness, notBoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { ModuleConfig, ModuleQueryHandlerResult, ModuleQueryResult } from '@xyo-network/module-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport {\n CustomSentinelInstance,\n ResolvedTask,\n SentinelConfigSchema,\n SentinelInstance,\n SentinelJob,\n SentinelModuleEventData,\n SentinelParams,\n SentinelQueries,\n SentinelReportQuery,\n SentinelReportQuerySchema,\n} from '@xyo-network/sentinel-model'\n\nexport abstract class AbstractSentinel<\n TParams extends SentinelParams = SentinelParams,\n TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>,\n>\n extends AbstractModuleInstance<TParams, TEventData>\n implements CustomSentinelInstance<TParams, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, SentinelConfigSchema]\n static override readonly defaultConfigSchema: Schema = SentinelConfigSchema\n static override readonly uniqueName = globallyUnique('AbstractSentinel', AbstractSentinel, 'xyo')\n history: BoundWitness[] = []\n private _jobPromise?: Promise<SentinelJob>\n\n get jobPromise() {\n this._jobPromise = this._jobPromise ?? this.generateJob()\n return this._jobPromise\n }\n\n override get queries(): string[] {\n return [SentinelReportQuerySchema, ...super.queries]\n }\n\n get synchronous(): boolean {\n return this.config.synchronous ?? false\n }\n\n get throwErrors(): boolean {\n return this.config.throwErrors ?? true\n }\n\n async report(inPayloads?: Payload[]): Promise<Payload[]> {\n this._noOverride('report')\n const reportPromise = (async () => {\n await this.emit('reportStart', { inPayloads, mod: this })\n const payloads = await this.reportHandler(inPayloads)\n\n // create boundwitness\n const result = (await new BoundWitnessBuilder().payloads(payloads).signer(this.account).build()).flat()\n\n if (this.config.archiving) {\n forget(this.storeToArchivists(result))\n }\n\n await this.emitReportEnd(inPayloads, result)\n return result\n })()\n if (this.synchronous) {\n return await reportPromise\n } else {\n forget(reportPromise)\n return []\n }\n }\n\n async reportQuery(payloads?: Payload[], account?: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: SentinelReportQuery = { schema: SentinelReportQuerySchema }\n return await this.sendQueryRaw(queryPayload, payloads, account)\n }\n\n protected async emitReportEnd(inPayloads?: Payload[], payloads?: Payload[]) {\n const boundwitnesses = payloads?.filter(isBoundWitness) ?? []\n const outPayloads = payloads?.filter(notBoundWitness) ?? []\n const boundwitness = boundwitnesses.find(bw => bw.addresses.includes(this.address))\n await this.emit('reportEnd', { boundwitness, inPayloads, mod: this, outPayloads })\n }\n\n protected async generateJob() {\n const job: SentinelJob = { tasks: [] }\n let tasks: ResolvedTask[] = await Promise.all(\n this.config.tasks.map(async task => ({\n input: task.input ?? false,\n mod: assertEx(await this.resolve(task.mod), () => `Unable to resolve task module [${task.mod}]`),\n })),\n )\n while (tasks.length > 0) {\n const previousTasks = job.tasks.at(-1) ?? []\n const newListCandidates\n // add all tasks that either require no previous input or have the previous input module already added\n = tasks.filter((task) => {\n const input = task.input\n if (input === undefined) {\n return true\n }\n if (typeof input === 'boolean') {\n return true\n }\n if (typeof input === 'string') {\n return previousTasks.find(prevTask => prevTask.mod.address === input || prevTask.mod.modName === input)\n }\n if (Array.isArray(input)) {\n return previousTasks.find(\n prevTask => input.includes(prevTask.mod.address) || input.includes(prevTask.mod.modName ?? prevTask.mod.address),\n )\n }\n })\n // remove any tasks that have inputs that are in the current list or the remaining tasks\n const newList = newListCandidates.filter((taskCandidate) => {\n const input = taskCandidate.input\n return !(\n Array.isArray(input)\n && tasks.some(\n remainingTask => input.includes(remainingTask.mod.address) || input.includes(remainingTask.mod.modName ?? remainingTask.mod.address),\n )\n )\n })\n assertEx(newList.length > 0, () => `Unable to generateJob [${tasks.length}]`)\n job.tasks.push(newList)\n // remove the tasks we just added\n tasks = tasks.filter(task => !newList.includes(task))\n }\n return job\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 wrapper = await QueryBoundWitnessWrapper.parseQuery<SentinelQueries>(query, payloads)\n const queryPayload = await wrapper.getQuery()\n assertEx(await this.queryable(query, payloads, queryConfig))\n const resultPayloads: Payload[] = []\n switch (queryPayload.schema) {\n case SentinelReportQuerySchema: {\n resultPayloads.push(...(await this.report(payloads)))\n break\n }\n default: {\n return super.queryHandler(query, payloads)\n }\n }\n return resultPayloads\n }\n\n abstract reportHandler(payloads?: Payload[]): Promise<Payload[]>\n}\n"],"mappings":"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","names":["assertEx","forget","globallyUnique","BoundWitnessBuilder","isBoundWitness","notBoundWitness","QueryBoundWitnessWrapper","AbstractModuleInstance","SentinelConfigSchema","SentinelReportQuerySchema","AbstractSentinel","AbstractModuleInstance","history","_jobPromise","jobPromise","generateJob","queries","SentinelReportQuerySchema","synchronous","config","throwErrors","report","inPayloads","_noOverride","reportPromise","emit","mod","payloads","reportHandler","result","BoundWitnessBuilder","signer","account","build","flat","archiving","forget","storeToArchivists","emitReportEnd","reportQuery","queryPayload","schema","sendQueryRaw","boundwitnesses","filter","isBoundWitness","outPayloads","notBoundWitness","boundwitness","find","bw","addresses","includes","address","job","tasks","Promise","all","map","task","input","assertEx","resolve","length","previousTasks","at","newListCandidates","undefined","prevTask","modName","Array","isArray","newList","taskCandidate","some","remainingTask","push","queryHandler","query","queryConfig","wrapper","QueryBoundWitnessWrapper","parseQuery","getQuery","queryable","resultPayloads","configSchemas","SentinelConfigSchema","defaultConfigSchema","uniqueName","globallyUnique"]}