@xyo-network/sentinel-abstract 2.84.4 → 2.84.6
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/AbstractSentinel.d.cts +1 -0
- package/dist/browser/AbstractSentinel.d.cts.map +1 -1
- package/dist/browser/AbstractSentinel.d.mts +1 -0
- package/dist/browser/AbstractSentinel.d.mts.map +1 -1
- package/dist/browser/AbstractSentinel.d.ts +1 -0
- package/dist/browser/AbstractSentinel.d.ts.map +1 -1
- package/dist/browser/index.cjs +18 -1
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +18 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/node/AbstractSentinel.d.cts +1 -0
- package/dist/node/AbstractSentinel.d.cts.map +1 -1
- package/dist/node/AbstractSentinel.d.mts +1 -0
- package/dist/node/AbstractSentinel.d.mts.map +1 -1
- package/dist/node/AbstractSentinel.d.ts +1 -0
- package/dist/node/AbstractSentinel.d.ts.map +1 -1
- package/dist/node/index.cjs +18 -1
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +18 -1
- package/dist/node/index.js.map +1 -1
- package/package.json +7 -7
- package/src/AbstractSentinel.ts +23 -1
|
@@ -9,6 +9,7 @@ export declare abstract class AbstractSentinel<TParams extends SentinelParams =
|
|
|
9
9
|
get jobPromise(): Promise<SentinelJob>;
|
|
10
10
|
get queries(): string[];
|
|
11
11
|
get synchronous(): boolean;
|
|
12
|
+
get throwErrors(): boolean;
|
|
12
13
|
protected get _queryAccountPaths(): Record<SentinelQueryBase['schema'], string>;
|
|
13
14
|
report(inPayloads?: Payload[]): Promise<Payload[]>;
|
|
14
15
|
protected emitReportEnd(inPayloads?: Payload[], payloads?: Payload[]): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractSentinel.d.ts","sourceRoot":"","sources":["../../src/AbstractSentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAmC,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAClH,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EACL,sBAAsB,EAEtB,gBAAgB,EAChB,WAAW,EACX,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EAElB,MAAM,6BAA6B,CAAA;AAEpC,8BAAsB,gBAAgB,CAClC,OAAO,SAAS,cAAc,GAAG,cAAc,EAC/C,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAE5H,SAAQ,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAClD,YAAW,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC;IAEtD,OAAO,EAAE,YAAY,EAAE,CAAK;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAsB;IAE1C,IAAI,UAAU,yBAGb;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAE/B;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,cAAuB,kBAAkB,IAAI,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAIvF;IAEK,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;cAwBxC,aAAa,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE;cAO1D,WAAW;
|
|
1
|
+
{"version":3,"file":"AbstractSentinel.d.ts","sourceRoot":"","sources":["../../src/AbstractSentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAmC,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAClH,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EACL,sBAAsB,EAEtB,gBAAgB,EAChB,WAAW,EACX,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EAElB,MAAM,6BAA6B,CAAA;AAEpC,8BAAsB,gBAAgB,CAClC,OAAO,SAAS,cAAc,GAAG,cAAc,EAC/C,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAE5H,SAAQ,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAClD,YAAW,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC;IAEtD,OAAO,EAAE,YAAY,EAAE,CAAK;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAsB;IAE1C,IAAI,UAAU,yBAGb;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAE/B;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,cAAuB,kBAAkB,IAAI,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAIvF;IAEK,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;cAwBxC,aAAa,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE;cAO1D,WAAW;cAoDF,YAAY,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,EAAE,OAAO,SAAS,YAAY,GAAG,YAAY,EAChI,KAAK,EAAE,CAAC,EACR,QAAQ,CAAC,EAAE,OAAO,EAAE,EACpB,WAAW,CAAC,EAAE,OAAO,GACpB,OAAO,CAAC,wBAAwB,CAAC;IAiBpC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CACjE"}
|
|
@@ -9,6 +9,7 @@ export declare abstract class AbstractSentinel<TParams extends SentinelParams =
|
|
|
9
9
|
get jobPromise(): Promise<SentinelJob>;
|
|
10
10
|
get queries(): string[];
|
|
11
11
|
get synchronous(): boolean;
|
|
12
|
+
get throwErrors(): boolean;
|
|
12
13
|
protected get _queryAccountPaths(): Record<SentinelQueryBase['schema'], string>;
|
|
13
14
|
report(inPayloads?: Payload[]): Promise<Payload[]>;
|
|
14
15
|
protected emitReportEnd(inPayloads?: Payload[], payloads?: Payload[]): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractSentinel.d.ts","sourceRoot":"","sources":["../../src/AbstractSentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAmC,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAClH,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EACL,sBAAsB,EAEtB,gBAAgB,EAChB,WAAW,EACX,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EAElB,MAAM,6BAA6B,CAAA;AAEpC,8BAAsB,gBAAgB,CAClC,OAAO,SAAS,cAAc,GAAG,cAAc,EAC/C,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAE5H,SAAQ,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAClD,YAAW,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC;IAEtD,OAAO,EAAE,YAAY,EAAE,CAAK;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAsB;IAE1C,IAAI,UAAU,yBAGb;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAE/B;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,cAAuB,kBAAkB,IAAI,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAIvF;IAEK,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;cAwBxC,aAAa,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE;cAO1D,WAAW;
|
|
1
|
+
{"version":3,"file":"AbstractSentinel.d.ts","sourceRoot":"","sources":["../../src/AbstractSentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAmC,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAClH,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EACL,sBAAsB,EAEtB,gBAAgB,EAChB,WAAW,EACX,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EAElB,MAAM,6BAA6B,CAAA;AAEpC,8BAAsB,gBAAgB,CAClC,OAAO,SAAS,cAAc,GAAG,cAAc,EAC/C,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAE5H,SAAQ,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAClD,YAAW,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC;IAEtD,OAAO,EAAE,YAAY,EAAE,CAAK;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAsB;IAE1C,IAAI,UAAU,yBAGb;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAE/B;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,cAAuB,kBAAkB,IAAI,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAIvF;IAEK,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;cAwBxC,aAAa,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE;cAO1D,WAAW;cAoDF,YAAY,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,EAAE,OAAO,SAAS,YAAY,GAAG,YAAY,EAChI,KAAK,EAAE,CAAC,EACR,QAAQ,CAAC,EAAE,OAAO,EAAE,EACpB,WAAW,CAAC,EAAE,OAAO,GACpB,OAAO,CAAC,wBAAwB,CAAC;IAiBpC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CACjE"}
|
|
@@ -9,6 +9,7 @@ export declare abstract class AbstractSentinel<TParams extends SentinelParams =
|
|
|
9
9
|
get jobPromise(): Promise<SentinelJob>;
|
|
10
10
|
get queries(): string[];
|
|
11
11
|
get synchronous(): boolean;
|
|
12
|
+
get throwErrors(): boolean;
|
|
12
13
|
protected get _queryAccountPaths(): Record<SentinelQueryBase['schema'], string>;
|
|
13
14
|
report(inPayloads?: Payload[]): Promise<Payload[]>;
|
|
14
15
|
protected emitReportEnd(inPayloads?: Payload[], payloads?: Payload[]): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractSentinel.d.ts","sourceRoot":"","sources":["../../src/AbstractSentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAmC,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAClH,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EACL,sBAAsB,EAEtB,gBAAgB,EAChB,WAAW,EACX,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EAElB,MAAM,6BAA6B,CAAA;AAEpC,8BAAsB,gBAAgB,CAClC,OAAO,SAAS,cAAc,GAAG,cAAc,EAC/C,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAE5H,SAAQ,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAClD,YAAW,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC;IAEtD,OAAO,EAAE,YAAY,EAAE,CAAK;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAsB;IAE1C,IAAI,UAAU,yBAGb;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAE/B;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,cAAuB,kBAAkB,IAAI,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAIvF;IAEK,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;cAwBxC,aAAa,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE;cAO1D,WAAW;
|
|
1
|
+
{"version":3,"file":"AbstractSentinel.d.ts","sourceRoot":"","sources":["../../src/AbstractSentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAmC,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAClH,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EACL,sBAAsB,EAEtB,gBAAgB,EAChB,WAAW,EACX,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EAElB,MAAM,6BAA6B,CAAA;AAEpC,8BAAsB,gBAAgB,CAClC,OAAO,SAAS,cAAc,GAAG,cAAc,EAC/C,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAE5H,SAAQ,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAClD,YAAW,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC;IAEtD,OAAO,EAAE,YAAY,EAAE,CAAK;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAsB;IAE1C,IAAI,UAAU,yBAGb;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAE/B;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,cAAuB,kBAAkB,IAAI,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAIvF;IAEK,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;cAwBxC,aAAa,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE;cAO1D,WAAW;cAoDF,YAAY,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,EAAE,OAAO,SAAS,YAAY,GAAG,YAAY,EAChI,KAAK,EAAE,CAAC,EACR,QAAQ,CAAC,EAAE,OAAO,EAAE,EACpB,WAAW,CAAC,EAAE,OAAO,GACpB,OAAO,CAAC,wBAAwB,CAAC;IAiBpC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CACjE"}
|
package/dist/browser/index.cjs
CHANGED
|
@@ -44,6 +44,9 @@ var AbstractSentinel = class extends import_module_abstract.AbstractModuleInstan
|
|
|
44
44
|
get synchronous() {
|
|
45
45
|
return this.config.synchronous ?? false;
|
|
46
46
|
}
|
|
47
|
+
get throwErrors() {
|
|
48
|
+
return this.config.throwErrors ?? true;
|
|
49
|
+
}
|
|
47
50
|
get _queryAccountPaths() {
|
|
48
51
|
return {
|
|
49
52
|
"network.xyo.query.sentinel.report": "1/1"
|
|
@@ -84,10 +87,13 @@ var AbstractSentinel = class extends import_module_abstract.AbstractModuleInstan
|
|
|
84
87
|
);
|
|
85
88
|
while (tasks.length) {
|
|
86
89
|
const previousTasks = job.tasks.length ? job.tasks[job.tasks.length - 1] : [];
|
|
87
|
-
const
|
|
90
|
+
const newListCandidates = (
|
|
88
91
|
//add all tasks that either require no previous input or have the previous input module already added
|
|
89
92
|
tasks.filter((task) => {
|
|
90
93
|
const input = task.input;
|
|
94
|
+
if (input === void 0) {
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
91
97
|
if (typeof input === "boolean") {
|
|
92
98
|
return true;
|
|
93
99
|
}
|
|
@@ -101,6 +107,17 @@ var AbstractSentinel = class extends import_module_abstract.AbstractModuleInstan
|
|
|
101
107
|
}
|
|
102
108
|
})
|
|
103
109
|
);
|
|
110
|
+
const newList = newListCandidates.filter((taskCandidate) => {
|
|
111
|
+
const input = taskCandidate.input;
|
|
112
|
+
if (Array.isArray(input)) {
|
|
113
|
+
if (tasks.find(
|
|
114
|
+
(remainingTask) => input.includes(remainingTask.module.address) || input.includes(remainingTask.module.config.name ?? remainingTask.module.address)
|
|
115
|
+
)) {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return true;
|
|
120
|
+
});
|
|
104
121
|
(0, import_assert.assertEx)(newList.length > 0, `Unable to generateJob [${tasks.length}]`);
|
|
105
122
|
job.tasks.push(newList);
|
|
106
123
|
tasks = tasks.filter((task) => !newList.includes(task));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/AbstractSentinel.ts"],"sourcesContent":["export * from './AbstractSentinel'\n","import { assertEx } from '@xylabs/assert'\nimport { forget } from '@xylabs/forget'\nimport { BoundWitnessBuilder, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { BoundWitness, isBoundWitness, notBoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport {\n CustomSentinelInstance,\n ResolvedTask,\n SentinelInstance,\n SentinelJob,\n SentinelModuleEventData,\n SentinelParams,\n SentinelQueryBase,\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{\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 protected override get _queryAccountPaths(): Record<SentinelQueryBase['schema'], string> {\n return {\n 'network.xyo.query.sentinel.report': '1/1',\n }\n }\n\n async report(inPayloads?: Payload[]): Promise<Payload[]> {\n this._noOverride('report')\n const reportPromise = (async () => {\n await this.emit('reportStart', { inPayloads, module: this })\n const payloads = await this.reportHandler(inPayloads)\n\n //create boundwitness\n const result = (await new BoundWitnessBuilder().payloads(payloads).witness(this.account).build()).flat()\n\n if (this.config.archiving) {\n await 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 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, module: 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 module: assertEx(await this.resolve(task.module), `Unable to resolve task module [${task.module}]`),\n })),\n )\n while (tasks.length) {\n const previousTasks = job.tasks.length ? job.tasks[job.tasks.length - 1] : []\n const
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/AbstractSentinel.ts"],"sourcesContent":["export * from './AbstractSentinel'\n","import { assertEx } from '@xylabs/assert'\nimport { forget } from '@xylabs/forget'\nimport { BoundWitnessBuilder, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { BoundWitness, isBoundWitness, notBoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport {\n CustomSentinelInstance,\n ResolvedTask,\n SentinelInstance,\n SentinelJob,\n SentinelModuleEventData,\n SentinelParams,\n SentinelQueryBase,\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{\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 protected override get _queryAccountPaths(): Record<SentinelQueryBase['schema'], string> {\n return {\n 'network.xyo.query.sentinel.report': '1/1',\n }\n }\n\n async report(inPayloads?: Payload[]): Promise<Payload[]> {\n this._noOverride('report')\n const reportPromise = (async () => {\n await this.emit('reportStart', { inPayloads, module: this })\n const payloads = await this.reportHandler(inPayloads)\n\n //create boundwitness\n const result = (await new BoundWitnessBuilder().payloads(payloads).witness(this.account).build()).flat()\n\n if (this.config.archiving) {\n await 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 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, module: 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 module: assertEx(await this.resolve(task.module), `Unable to resolve task module [${task.module}]`),\n })),\n )\n while (tasks.length) {\n const previousTasks = job.tasks.length ? job.tasks[job.tasks.length - 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.module.address === input || prevTask.module.config.name === input)\n }\n if (Array.isArray(input)) {\n return previousTasks.find(\n (prevTask) => input.includes(prevTask.module.address) || input.includes(prevTask.module.config.name ?? prevTask.module.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 if (Array.isArray(input)) {\n if (\n tasks.find(\n (remainingTask) =>\n input.includes(remainingTask.module.address) || input.includes(remainingTask.module.config.name ?? remainingTask.module.address),\n )\n ) {\n return false\n }\n }\n return true\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 = QueryBoundWitnessWrapper.parseQuery<SentinelQueryBase>(query, payloads)\n const queryPayload = await wrapper.getQuery()\n assertEx(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":[]}
|
package/dist/browser/index.js
CHANGED
|
@@ -20,6 +20,9 @@ var AbstractSentinel = class extends AbstractModuleInstance {
|
|
|
20
20
|
get synchronous() {
|
|
21
21
|
return this.config.synchronous ?? false;
|
|
22
22
|
}
|
|
23
|
+
get throwErrors() {
|
|
24
|
+
return this.config.throwErrors ?? true;
|
|
25
|
+
}
|
|
23
26
|
get _queryAccountPaths() {
|
|
24
27
|
return {
|
|
25
28
|
"network.xyo.query.sentinel.report": "1/1"
|
|
@@ -60,10 +63,13 @@ var AbstractSentinel = class extends AbstractModuleInstance {
|
|
|
60
63
|
);
|
|
61
64
|
while (tasks.length) {
|
|
62
65
|
const previousTasks = job.tasks.length ? job.tasks[job.tasks.length - 1] : [];
|
|
63
|
-
const
|
|
66
|
+
const newListCandidates = (
|
|
64
67
|
//add all tasks that either require no previous input or have the previous input module already added
|
|
65
68
|
tasks.filter((task) => {
|
|
66
69
|
const input = task.input;
|
|
70
|
+
if (input === void 0) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
67
73
|
if (typeof input === "boolean") {
|
|
68
74
|
return true;
|
|
69
75
|
}
|
|
@@ -77,6 +83,17 @@ var AbstractSentinel = class extends AbstractModuleInstance {
|
|
|
77
83
|
}
|
|
78
84
|
})
|
|
79
85
|
);
|
|
86
|
+
const newList = newListCandidates.filter((taskCandidate) => {
|
|
87
|
+
const input = taskCandidate.input;
|
|
88
|
+
if (Array.isArray(input)) {
|
|
89
|
+
if (tasks.find(
|
|
90
|
+
(remainingTask) => input.includes(remainingTask.module.address) || input.includes(remainingTask.module.config.name ?? remainingTask.module.address)
|
|
91
|
+
)) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return true;
|
|
96
|
+
});
|
|
80
97
|
assertEx(newList.length > 0, `Unable to generateJob [${tasks.length}]`);
|
|
81
98
|
job.tasks.push(newList);
|
|
82
99
|
tasks = tasks.filter((task) => !newList.includes(task));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/AbstractSentinel.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { forget } from '@xylabs/forget'\nimport { BoundWitnessBuilder, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { BoundWitness, isBoundWitness, notBoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport {\n CustomSentinelInstance,\n ResolvedTask,\n SentinelInstance,\n SentinelJob,\n SentinelModuleEventData,\n SentinelParams,\n SentinelQueryBase,\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{\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 protected override get _queryAccountPaths(): Record<SentinelQueryBase['schema'], string> {\n return {\n 'network.xyo.query.sentinel.report': '1/1',\n }\n }\n\n async report(inPayloads?: Payload[]): Promise<Payload[]> {\n this._noOverride('report')\n const reportPromise = (async () => {\n await this.emit('reportStart', { inPayloads, module: this })\n const payloads = await this.reportHandler(inPayloads)\n\n //create boundwitness\n const result = (await new BoundWitnessBuilder().payloads(payloads).witness(this.account).build()).flat()\n\n if (this.config.archiving) {\n await 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 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, module: 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 module: assertEx(await this.resolve(task.module), `Unable to resolve task module [${task.module}]`),\n })),\n )\n while (tasks.length) {\n const previousTasks = job.tasks.length ? job.tasks[job.tasks.length - 1] : []\n const
|
|
1
|
+
{"version":3,"sources":["../../src/AbstractSentinel.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { forget } from '@xylabs/forget'\nimport { BoundWitnessBuilder, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { BoundWitness, isBoundWitness, notBoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport {\n CustomSentinelInstance,\n ResolvedTask,\n SentinelInstance,\n SentinelJob,\n SentinelModuleEventData,\n SentinelParams,\n SentinelQueryBase,\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{\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 protected override get _queryAccountPaths(): Record<SentinelQueryBase['schema'], string> {\n return {\n 'network.xyo.query.sentinel.report': '1/1',\n }\n }\n\n async report(inPayloads?: Payload[]): Promise<Payload[]> {\n this._noOverride('report')\n const reportPromise = (async () => {\n await this.emit('reportStart', { inPayloads, module: this })\n const payloads = await this.reportHandler(inPayloads)\n\n //create boundwitness\n const result = (await new BoundWitnessBuilder().payloads(payloads).witness(this.account).build()).flat()\n\n if (this.config.archiving) {\n await 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 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, module: 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 module: assertEx(await this.resolve(task.module), `Unable to resolve task module [${task.module}]`),\n })),\n )\n while (tasks.length) {\n const previousTasks = job.tasks.length ? job.tasks[job.tasks.length - 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.module.address === input || prevTask.module.config.name === input)\n }\n if (Array.isArray(input)) {\n return previousTasks.find(\n (prevTask) => input.includes(prevTask.module.address) || input.includes(prevTask.module.config.name ?? prevTask.module.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 if (Array.isArray(input)) {\n if (\n tasks.find(\n (remainingTask) =>\n input.includes(remainingTask.module.address) || input.includes(remainingTask.module.config.name ?? remainingTask.module.address),\n )\n ) {\n return false\n }\n }\n return true\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 = QueryBoundWitnessWrapper.parseQuery<SentinelQueryBase>(query, payloads)\n const queryPayload = await wrapper.getQuery()\n assertEx(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":[]}
|
|
@@ -9,6 +9,7 @@ export declare abstract class AbstractSentinel<TParams extends SentinelParams =
|
|
|
9
9
|
get jobPromise(): Promise<SentinelJob>;
|
|
10
10
|
get queries(): string[];
|
|
11
11
|
get synchronous(): boolean;
|
|
12
|
+
get throwErrors(): boolean;
|
|
12
13
|
protected get _queryAccountPaths(): Record<SentinelQueryBase['schema'], string>;
|
|
13
14
|
report(inPayloads?: Payload[]): Promise<Payload[]>;
|
|
14
15
|
protected emitReportEnd(inPayloads?: Payload[], payloads?: Payload[]): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractSentinel.d.ts","sourceRoot":"","sources":["../../src/AbstractSentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAmC,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAClH,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EACL,sBAAsB,EAEtB,gBAAgB,EAChB,WAAW,EACX,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EAElB,MAAM,6BAA6B,CAAA;AAEpC,8BAAsB,gBAAgB,CAClC,OAAO,SAAS,cAAc,GAAG,cAAc,EAC/C,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAE5H,SAAQ,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAClD,YAAW,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC;IAEtD,OAAO,EAAE,YAAY,EAAE,CAAK;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAsB;IAE1C,IAAI,UAAU,yBAGb;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAE/B;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,cAAuB,kBAAkB,IAAI,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAIvF;IAEK,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;cAwBxC,aAAa,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE;cAO1D,WAAW;
|
|
1
|
+
{"version":3,"file":"AbstractSentinel.d.ts","sourceRoot":"","sources":["../../src/AbstractSentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAmC,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAClH,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EACL,sBAAsB,EAEtB,gBAAgB,EAChB,WAAW,EACX,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EAElB,MAAM,6BAA6B,CAAA;AAEpC,8BAAsB,gBAAgB,CAClC,OAAO,SAAS,cAAc,GAAG,cAAc,EAC/C,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAE5H,SAAQ,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAClD,YAAW,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC;IAEtD,OAAO,EAAE,YAAY,EAAE,CAAK;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAsB;IAE1C,IAAI,UAAU,yBAGb;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAE/B;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,cAAuB,kBAAkB,IAAI,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAIvF;IAEK,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;cAwBxC,aAAa,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE;cAO1D,WAAW;cAoDF,YAAY,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,EAAE,OAAO,SAAS,YAAY,GAAG,YAAY,EAChI,KAAK,EAAE,CAAC,EACR,QAAQ,CAAC,EAAE,OAAO,EAAE,EACpB,WAAW,CAAC,EAAE,OAAO,GACpB,OAAO,CAAC,wBAAwB,CAAC;IAiBpC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CACjE"}
|
|
@@ -9,6 +9,7 @@ export declare abstract class AbstractSentinel<TParams extends SentinelParams =
|
|
|
9
9
|
get jobPromise(): Promise<SentinelJob>;
|
|
10
10
|
get queries(): string[];
|
|
11
11
|
get synchronous(): boolean;
|
|
12
|
+
get throwErrors(): boolean;
|
|
12
13
|
protected get _queryAccountPaths(): Record<SentinelQueryBase['schema'], string>;
|
|
13
14
|
report(inPayloads?: Payload[]): Promise<Payload[]>;
|
|
14
15
|
protected emitReportEnd(inPayloads?: Payload[], payloads?: Payload[]): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractSentinel.d.ts","sourceRoot":"","sources":["../../src/AbstractSentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAmC,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAClH,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EACL,sBAAsB,EAEtB,gBAAgB,EAChB,WAAW,EACX,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EAElB,MAAM,6BAA6B,CAAA;AAEpC,8BAAsB,gBAAgB,CAClC,OAAO,SAAS,cAAc,GAAG,cAAc,EAC/C,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAE5H,SAAQ,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAClD,YAAW,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC;IAEtD,OAAO,EAAE,YAAY,EAAE,CAAK;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAsB;IAE1C,IAAI,UAAU,yBAGb;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAE/B;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,cAAuB,kBAAkB,IAAI,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAIvF;IAEK,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;cAwBxC,aAAa,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE;cAO1D,WAAW;
|
|
1
|
+
{"version":3,"file":"AbstractSentinel.d.ts","sourceRoot":"","sources":["../../src/AbstractSentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAmC,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAClH,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EACL,sBAAsB,EAEtB,gBAAgB,EAChB,WAAW,EACX,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EAElB,MAAM,6BAA6B,CAAA;AAEpC,8BAAsB,gBAAgB,CAClC,OAAO,SAAS,cAAc,GAAG,cAAc,EAC/C,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAE5H,SAAQ,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAClD,YAAW,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC;IAEtD,OAAO,EAAE,YAAY,EAAE,CAAK;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAsB;IAE1C,IAAI,UAAU,yBAGb;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAE/B;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,cAAuB,kBAAkB,IAAI,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAIvF;IAEK,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;cAwBxC,aAAa,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE;cAO1D,WAAW;cAoDF,YAAY,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,EAAE,OAAO,SAAS,YAAY,GAAG,YAAY,EAChI,KAAK,EAAE,CAAC,EACR,QAAQ,CAAC,EAAE,OAAO,EAAE,EACpB,WAAW,CAAC,EAAE,OAAO,GACpB,OAAO,CAAC,wBAAwB,CAAC;IAiBpC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CACjE"}
|
|
@@ -9,6 +9,7 @@ export declare abstract class AbstractSentinel<TParams extends SentinelParams =
|
|
|
9
9
|
get jobPromise(): Promise<SentinelJob>;
|
|
10
10
|
get queries(): string[];
|
|
11
11
|
get synchronous(): boolean;
|
|
12
|
+
get throwErrors(): boolean;
|
|
12
13
|
protected get _queryAccountPaths(): Record<SentinelQueryBase['schema'], string>;
|
|
13
14
|
report(inPayloads?: Payload[]): Promise<Payload[]>;
|
|
14
15
|
protected emitReportEnd(inPayloads?: Payload[], payloads?: Payload[]): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractSentinel.d.ts","sourceRoot":"","sources":["../../src/AbstractSentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAmC,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAClH,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EACL,sBAAsB,EAEtB,gBAAgB,EAChB,WAAW,EACX,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EAElB,MAAM,6BAA6B,CAAA;AAEpC,8BAAsB,gBAAgB,CAClC,OAAO,SAAS,cAAc,GAAG,cAAc,EAC/C,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAE5H,SAAQ,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAClD,YAAW,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC;IAEtD,OAAO,EAAE,YAAY,EAAE,CAAK;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAsB;IAE1C,IAAI,UAAU,yBAGb;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAE/B;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,cAAuB,kBAAkB,IAAI,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAIvF;IAEK,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;cAwBxC,aAAa,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE;cAO1D,WAAW;
|
|
1
|
+
{"version":3,"file":"AbstractSentinel.d.ts","sourceRoot":"","sources":["../../src/AbstractSentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAmC,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAClH,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EACL,sBAAsB,EAEtB,gBAAgB,EAChB,WAAW,EACX,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EAElB,MAAM,6BAA6B,CAAA;AAEpC,8BAAsB,gBAAgB,CAClC,OAAO,SAAS,cAAc,GAAG,cAAc,EAC/C,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAE5H,SAAQ,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAClD,YAAW,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC;IAEtD,OAAO,EAAE,YAAY,EAAE,CAAK;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAsB;IAE1C,IAAI,UAAU,yBAGb;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAE/B;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,cAAuB,kBAAkB,IAAI,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAIvF;IAEK,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;cAwBxC,aAAa,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE;cAO1D,WAAW;cAoDF,YAAY,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,EAAE,OAAO,SAAS,YAAY,GAAG,YAAY,EAChI,KAAK,EAAE,CAAC,EACR,QAAQ,CAAC,EAAE,OAAO,EAAE,EACpB,WAAW,CAAC,EAAE,OAAO,GACpB,OAAO,CAAC,wBAAwB,CAAC;IAiBpC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CACjE"}
|
package/dist/node/index.cjs
CHANGED
|
@@ -44,6 +44,9 @@ var AbstractSentinel = class extends import_module_abstract.AbstractModuleInstan
|
|
|
44
44
|
get synchronous() {
|
|
45
45
|
return this.config.synchronous ?? false;
|
|
46
46
|
}
|
|
47
|
+
get throwErrors() {
|
|
48
|
+
return this.config.throwErrors ?? true;
|
|
49
|
+
}
|
|
47
50
|
get _queryAccountPaths() {
|
|
48
51
|
return {
|
|
49
52
|
"network.xyo.query.sentinel.report": "1/1"
|
|
@@ -84,10 +87,13 @@ var AbstractSentinel = class extends import_module_abstract.AbstractModuleInstan
|
|
|
84
87
|
);
|
|
85
88
|
while (tasks.length) {
|
|
86
89
|
const previousTasks = job.tasks.length ? job.tasks[job.tasks.length - 1] : [];
|
|
87
|
-
const
|
|
90
|
+
const newListCandidates = (
|
|
88
91
|
//add all tasks that either require no previous input or have the previous input module already added
|
|
89
92
|
tasks.filter((task) => {
|
|
90
93
|
const input = task.input;
|
|
94
|
+
if (input === void 0) {
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
91
97
|
if (typeof input === "boolean") {
|
|
92
98
|
return true;
|
|
93
99
|
}
|
|
@@ -101,6 +107,17 @@ var AbstractSentinel = class extends import_module_abstract.AbstractModuleInstan
|
|
|
101
107
|
}
|
|
102
108
|
})
|
|
103
109
|
);
|
|
110
|
+
const newList = newListCandidates.filter((taskCandidate) => {
|
|
111
|
+
const input = taskCandidate.input;
|
|
112
|
+
if (Array.isArray(input)) {
|
|
113
|
+
if (tasks.find(
|
|
114
|
+
(remainingTask) => input.includes(remainingTask.module.address) || input.includes(remainingTask.module.config.name ?? remainingTask.module.address)
|
|
115
|
+
)) {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return true;
|
|
120
|
+
});
|
|
104
121
|
(0, import_assert.assertEx)(newList.length > 0, `Unable to generateJob [${tasks.length}]`);
|
|
105
122
|
job.tasks.push(newList);
|
|
106
123
|
tasks = tasks.filter((task) => !newList.includes(task));
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/AbstractSentinel.ts"],"sourcesContent":["export * from './AbstractSentinel'\n","import { assertEx } from '@xylabs/assert'\nimport { forget } from '@xylabs/forget'\nimport { BoundWitnessBuilder, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { BoundWitness, isBoundWitness, notBoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport {\n CustomSentinelInstance,\n ResolvedTask,\n SentinelInstance,\n SentinelJob,\n SentinelModuleEventData,\n SentinelParams,\n SentinelQueryBase,\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{\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 protected override get _queryAccountPaths(): Record<SentinelQueryBase['schema'], string> {\n return {\n 'network.xyo.query.sentinel.report': '1/1',\n }\n }\n\n async report(inPayloads?: Payload[]): Promise<Payload[]> {\n this._noOverride('report')\n const reportPromise = (async () => {\n await this.emit('reportStart', { inPayloads, module: this })\n const payloads = await this.reportHandler(inPayloads)\n\n //create boundwitness\n const result = (await new BoundWitnessBuilder().payloads(payloads).witness(this.account).build()).flat()\n\n if (this.config.archiving) {\n await 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 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, module: 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 module: assertEx(await this.resolve(task.module), `Unable to resolve task module [${task.module}]`),\n })),\n )\n while (tasks.length) {\n const previousTasks = job.tasks.length ? job.tasks[job.tasks.length - 1] : []\n const
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/AbstractSentinel.ts"],"sourcesContent":["export * from './AbstractSentinel'\n","import { assertEx } from '@xylabs/assert'\nimport { forget } from '@xylabs/forget'\nimport { BoundWitnessBuilder, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { BoundWitness, isBoundWitness, notBoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport {\n CustomSentinelInstance,\n ResolvedTask,\n SentinelInstance,\n SentinelJob,\n SentinelModuleEventData,\n SentinelParams,\n SentinelQueryBase,\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{\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 protected override get _queryAccountPaths(): Record<SentinelQueryBase['schema'], string> {\n return {\n 'network.xyo.query.sentinel.report': '1/1',\n }\n }\n\n async report(inPayloads?: Payload[]): Promise<Payload[]> {\n this._noOverride('report')\n const reportPromise = (async () => {\n await this.emit('reportStart', { inPayloads, module: this })\n const payloads = await this.reportHandler(inPayloads)\n\n //create boundwitness\n const result = (await new BoundWitnessBuilder().payloads(payloads).witness(this.account).build()).flat()\n\n if (this.config.archiving) {\n await 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 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, module: 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 module: assertEx(await this.resolve(task.module), `Unable to resolve task module [${task.module}]`),\n })),\n )\n while (tasks.length) {\n const previousTasks = job.tasks.length ? job.tasks[job.tasks.length - 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.module.address === input || prevTask.module.config.name === input)\n }\n if (Array.isArray(input)) {\n return previousTasks.find(\n (prevTask) => input.includes(prevTask.module.address) || input.includes(prevTask.module.config.name ?? prevTask.module.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 if (Array.isArray(input)) {\n if (\n tasks.find(\n (remainingTask) =>\n input.includes(remainingTask.module.address) || input.includes(remainingTask.module.config.name ?? remainingTask.module.address),\n )\n ) {\n return false\n }\n }\n return true\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 = QueryBoundWitnessWrapper.parseQuery<SentinelQueryBase>(query, payloads)\n const queryPayload = await wrapper.getQuery()\n assertEx(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":[]}
|
package/dist/node/index.js
CHANGED
|
@@ -20,6 +20,9 @@ var AbstractSentinel = class extends AbstractModuleInstance {
|
|
|
20
20
|
get synchronous() {
|
|
21
21
|
return this.config.synchronous ?? false;
|
|
22
22
|
}
|
|
23
|
+
get throwErrors() {
|
|
24
|
+
return this.config.throwErrors ?? true;
|
|
25
|
+
}
|
|
23
26
|
get _queryAccountPaths() {
|
|
24
27
|
return {
|
|
25
28
|
"network.xyo.query.sentinel.report": "1/1"
|
|
@@ -60,10 +63,13 @@ var AbstractSentinel = class extends AbstractModuleInstance {
|
|
|
60
63
|
);
|
|
61
64
|
while (tasks.length) {
|
|
62
65
|
const previousTasks = job.tasks.length ? job.tasks[job.tasks.length - 1] : [];
|
|
63
|
-
const
|
|
66
|
+
const newListCandidates = (
|
|
64
67
|
//add all tasks that either require no previous input or have the previous input module already added
|
|
65
68
|
tasks.filter((task) => {
|
|
66
69
|
const input = task.input;
|
|
70
|
+
if (input === void 0) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
67
73
|
if (typeof input === "boolean") {
|
|
68
74
|
return true;
|
|
69
75
|
}
|
|
@@ -77,6 +83,17 @@ var AbstractSentinel = class extends AbstractModuleInstance {
|
|
|
77
83
|
}
|
|
78
84
|
})
|
|
79
85
|
);
|
|
86
|
+
const newList = newListCandidates.filter((taskCandidate) => {
|
|
87
|
+
const input = taskCandidate.input;
|
|
88
|
+
if (Array.isArray(input)) {
|
|
89
|
+
if (tasks.find(
|
|
90
|
+
(remainingTask) => input.includes(remainingTask.module.address) || input.includes(remainingTask.module.config.name ?? remainingTask.module.address)
|
|
91
|
+
)) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return true;
|
|
96
|
+
});
|
|
80
97
|
assertEx(newList.length > 0, `Unable to generateJob [${tasks.length}]`);
|
|
81
98
|
job.tasks.push(newList);
|
|
82
99
|
tasks = tasks.filter((task) => !newList.includes(task));
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/AbstractSentinel.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { forget } from '@xylabs/forget'\nimport { BoundWitnessBuilder, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { BoundWitness, isBoundWitness, notBoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport {\n CustomSentinelInstance,\n ResolvedTask,\n SentinelInstance,\n SentinelJob,\n SentinelModuleEventData,\n SentinelParams,\n SentinelQueryBase,\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{\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 protected override get _queryAccountPaths(): Record<SentinelQueryBase['schema'], string> {\n return {\n 'network.xyo.query.sentinel.report': '1/1',\n }\n }\n\n async report(inPayloads?: Payload[]): Promise<Payload[]> {\n this._noOverride('report')\n const reportPromise = (async () => {\n await this.emit('reportStart', { inPayloads, module: this })\n const payloads = await this.reportHandler(inPayloads)\n\n //create boundwitness\n const result = (await new BoundWitnessBuilder().payloads(payloads).witness(this.account).build()).flat()\n\n if (this.config.archiving) {\n await 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 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, module: 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 module: assertEx(await this.resolve(task.module), `Unable to resolve task module [${task.module}]`),\n })),\n )\n while (tasks.length) {\n const previousTasks = job.tasks.length ? job.tasks[job.tasks.length - 1] : []\n const
|
|
1
|
+
{"version":3,"sources":["../../src/AbstractSentinel.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { forget } from '@xylabs/forget'\nimport { BoundWitnessBuilder, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { BoundWitness, isBoundWitness, notBoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport {\n CustomSentinelInstance,\n ResolvedTask,\n SentinelInstance,\n SentinelJob,\n SentinelModuleEventData,\n SentinelParams,\n SentinelQueryBase,\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{\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 protected override get _queryAccountPaths(): Record<SentinelQueryBase['schema'], string> {\n return {\n 'network.xyo.query.sentinel.report': '1/1',\n }\n }\n\n async report(inPayloads?: Payload[]): Promise<Payload[]> {\n this._noOverride('report')\n const reportPromise = (async () => {\n await this.emit('reportStart', { inPayloads, module: this })\n const payloads = await this.reportHandler(inPayloads)\n\n //create boundwitness\n const result = (await new BoundWitnessBuilder().payloads(payloads).witness(this.account).build()).flat()\n\n if (this.config.archiving) {\n await 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 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, module: 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 module: assertEx(await this.resolve(task.module), `Unable to resolve task module [${task.module}]`),\n })),\n )\n while (tasks.length) {\n const previousTasks = job.tasks.length ? job.tasks[job.tasks.length - 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.module.address === input || prevTask.module.config.name === input)\n }\n if (Array.isArray(input)) {\n return previousTasks.find(\n (prevTask) => input.includes(prevTask.module.address) || input.includes(prevTask.module.config.name ?? prevTask.module.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 if (Array.isArray(input)) {\n if (\n tasks.find(\n (remainingTask) =>\n input.includes(remainingTask.module.address) || input.includes(remainingTask.module.config.name ?? remainingTask.module.address),\n )\n ) {\n return false\n }\n }\n return true\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 = QueryBoundWitnessWrapper.parseQuery<SentinelQueryBase>(query, payloads)\n const queryPayload = await wrapper.getQuery()\n assertEx(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":[]}
|
package/package.json
CHANGED
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@xylabs/assert": "^2.13.20",
|
|
14
14
|
"@xylabs/forget": "^2.13.20",
|
|
15
|
-
"@xyo-network/boundwitness-builder": "~2.84.
|
|
16
|
-
"@xyo-network/boundwitness-model": "~2.84.
|
|
17
|
-
"@xyo-network/module-abstract": "~2.84.
|
|
18
|
-
"@xyo-network/module-model": "~2.84.
|
|
19
|
-
"@xyo-network/payload-model": "~2.84.
|
|
20
|
-
"@xyo-network/sentinel-model": "~2.84.
|
|
15
|
+
"@xyo-network/boundwitness-builder": "~2.84.6",
|
|
16
|
+
"@xyo-network/boundwitness-model": "~2.84.6",
|
|
17
|
+
"@xyo-network/module-abstract": "~2.84.6",
|
|
18
|
+
"@xyo-network/module-model": "~2.84.6",
|
|
19
|
+
"@xyo-network/payload-model": "~2.84.6",
|
|
20
|
+
"@xyo-network/sentinel-model": "~2.84.6"
|
|
21
21
|
},
|
|
22
22
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
23
23
|
"devDependencies": {
|
|
@@ -63,6 +63,6 @@
|
|
|
63
63
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
|
|
64
64
|
},
|
|
65
65
|
"sideEffects": false,
|
|
66
|
-
"version": "2.84.
|
|
66
|
+
"version": "2.84.6",
|
|
67
67
|
"type": "module"
|
|
68
68
|
}
|
package/src/AbstractSentinel.ts
CHANGED
|
@@ -39,6 +39,10 @@ export abstract class AbstractSentinel<
|
|
|
39
39
|
return this.config.synchronous ?? false
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
get throwErrors(): boolean {
|
|
43
|
+
return this.config.throwErrors ?? true
|
|
44
|
+
}
|
|
45
|
+
|
|
42
46
|
protected override get _queryAccountPaths(): Record<SentinelQueryBase['schema'], string> {
|
|
43
47
|
return {
|
|
44
48
|
'network.xyo.query.sentinel.report': '1/1',
|
|
@@ -86,10 +90,13 @@ export abstract class AbstractSentinel<
|
|
|
86
90
|
)
|
|
87
91
|
while (tasks.length) {
|
|
88
92
|
const previousTasks = job.tasks.length ? job.tasks[job.tasks.length - 1] : []
|
|
89
|
-
const
|
|
93
|
+
const newListCandidates =
|
|
90
94
|
//add all tasks that either require no previous input or have the previous input module already added
|
|
91
95
|
tasks.filter((task) => {
|
|
92
96
|
const input = task.input
|
|
97
|
+
if (input === undefined) {
|
|
98
|
+
return true
|
|
99
|
+
}
|
|
93
100
|
if (typeof input === 'boolean') {
|
|
94
101
|
return true
|
|
95
102
|
}
|
|
@@ -102,6 +109,21 @@ export abstract class AbstractSentinel<
|
|
|
102
109
|
)
|
|
103
110
|
}
|
|
104
111
|
})
|
|
112
|
+
//remove any tasks that have inputs that are in the current list or the remaining tasks
|
|
113
|
+
const newList = newListCandidates.filter((taskCandidate) => {
|
|
114
|
+
const input = taskCandidate.input
|
|
115
|
+
if (Array.isArray(input)) {
|
|
116
|
+
if (
|
|
117
|
+
tasks.find(
|
|
118
|
+
(remainingTask) =>
|
|
119
|
+
input.includes(remainingTask.module.address) || input.includes(remainingTask.module.config.name ?? remainingTask.module.address),
|
|
120
|
+
)
|
|
121
|
+
) {
|
|
122
|
+
return false
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return true
|
|
126
|
+
})
|
|
105
127
|
assertEx(newList.length > 0, `Unable to generateJob [${tasks.length}]`)
|
|
106
128
|
job.tasks.push(newList)
|
|
107
129
|
//remove the tasks we just added
|