@xyo-network/sentinel 2.74.5 → 2.75.2
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.cjs +113 -0
- package/dist/browser/AbstractSentinel.cjs.map +1 -0
- package/dist/browser/AbstractSentinel.d.cts.map +1 -0
- package/dist/browser/AbstractSentinel.d.mts.map +1 -0
- package/dist/browser/AbstractSentinel.d.ts +22 -0
- package/dist/browser/AbstractSentinel.d.ts.map +1 -0
- package/dist/browser/AbstractSentinel.js +93 -0
- package/dist/browser/AbstractSentinel.js.map +1 -0
- package/dist/browser/Automation.cjs +27 -0
- package/dist/browser/Automation.cjs.map +1 -0
- package/dist/browser/Automation.d.cts.map +1 -0
- package/dist/browser/Automation.d.mts.map +1 -0
- package/dist/browser/Automation.d.ts +28 -0
- package/dist/browser/Automation.d.ts.map +1 -0
- package/dist/browser/Automation.js +5 -0
- package/dist/browser/Automation.js.map +1 -0
- package/dist/browser/MemorySentinel.cjs +149 -0
- package/dist/browser/MemorySentinel.cjs.map +1 -0
- package/dist/browser/MemorySentinel.d.cts.map +1 -0
- package/dist/browser/MemorySentinel.d.mts.map +1 -0
- package/dist/browser/MemorySentinel.d.ts +10 -0
- package/dist/browser/MemorySentinel.d.ts.map +1 -0
- package/dist/browser/MemorySentinel.js +40 -0
- package/dist/browser/MemorySentinel.js.map +1 -0
- package/dist/browser/SentinelIntervalAutomationWrapper.cjs +68 -0
- package/dist/browser/SentinelIntervalAutomationWrapper.cjs.map +1 -0
- package/dist/browser/SentinelIntervalAutomationWrapper.d.cts.map +1 -0
- package/dist/browser/SentinelIntervalAutomationWrapper.d.mts.map +1 -0
- package/dist/browser/SentinelIntervalAutomationWrapper.d.ts +11 -0
- package/dist/browser/SentinelIntervalAutomationWrapper.d.ts.map +1 -0
- package/dist/browser/SentinelIntervalAutomationWrapper.js +46 -0
- package/dist/browser/SentinelIntervalAutomationWrapper.js.map +1 -0
- package/dist/browser/SentinelRunner.cjs +157 -0
- package/dist/browser/SentinelRunner.cjs.map +1 -0
- package/dist/browser/SentinelRunner.d.cts.map +1 -0
- package/dist/browser/SentinelRunner.d.mts.map +1 -0
- package/dist/browser/SentinelRunner.d.ts +24 -0
- package/dist/browser/SentinelRunner.d.ts.map +1 -0
- package/dist/browser/SentinelRunner.js +90 -0
- package/dist/browser/SentinelRunner.js.map +1 -0
- package/dist/browser/Wrapper.cjs +45 -0
- package/dist/browser/Wrapper.cjs.map +1 -0
- package/dist/browser/Wrapper.d.cts.map +1 -0
- package/dist/browser/Wrapper.d.mts.map +1 -0
- package/dist/browser/Wrapper.d.ts +14 -0
- package/dist/browser/Wrapper.d.ts.map +1 -0
- package/dist/browser/Wrapper.js +27 -0
- package/dist/browser/Wrapper.js.map +1 -0
- package/dist/{index.js → browser/index.cjs} +1 -11
- package/dist/browser/index.cjs.map +1 -0
- package/dist/browser/index.d.cts.map +1 -0
- package/dist/browser/index.d.mts.map +1 -0
- package/dist/browser/index.d.ts +8 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +8 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/docs.json +1558 -1558
- package/dist/node/AbstractSentinel.d.cts +22 -0
- package/dist/node/AbstractSentinel.d.cts.map +1 -0
- package/dist/node/AbstractSentinel.d.mts +22 -0
- package/dist/node/AbstractSentinel.d.mts.map +1 -0
- package/dist/node/AbstractSentinel.d.ts +22 -0
- package/dist/node/AbstractSentinel.d.ts.map +1 -0
- package/dist/node/AbstractSentinel.js +121 -0
- package/dist/node/AbstractSentinel.js.map +1 -0
- package/dist/node/AbstractSentinel.mjs +98 -0
- package/dist/node/AbstractSentinel.mjs.map +1 -0
- package/dist/node/Automation.d.cts +28 -0
- package/dist/node/Automation.d.cts.map +1 -0
- package/dist/node/Automation.d.mts +28 -0
- package/dist/node/Automation.d.mts.map +1 -0
- package/dist/node/Automation.d.ts +28 -0
- package/dist/node/Automation.d.ts.map +1 -0
- package/dist/node/Automation.js +31 -0
- package/dist/node/Automation.js.map +1 -0
- package/dist/node/Automation.mjs +6 -0
- package/dist/node/Automation.mjs.map +1 -0
- package/dist/node/MemorySentinel.d.cts +10 -0
- package/dist/node/MemorySentinel.d.cts.map +1 -0
- package/dist/node/MemorySentinel.d.mts +10 -0
- package/dist/node/MemorySentinel.d.mts.map +1 -0
- package/dist/node/MemorySentinel.d.ts +10 -0
- package/dist/node/MemorySentinel.d.ts.map +1 -0
- package/dist/node/MemorySentinel.js +157 -0
- package/dist/node/MemorySentinel.js.map +1 -0
- package/dist/node/MemorySentinel.mjs +137 -0
- package/dist/node/MemorySentinel.mjs.map +1 -0
- package/dist/node/SentinelIntervalAutomationWrapper.d.cts +11 -0
- package/dist/node/SentinelIntervalAutomationWrapper.d.cts.map +1 -0
- package/dist/node/SentinelIntervalAutomationWrapper.d.mts +11 -0
- package/dist/node/SentinelIntervalAutomationWrapper.d.mts.map +1 -0
- package/dist/node/SentinelIntervalAutomationWrapper.d.ts +11 -0
- package/dist/node/SentinelIntervalAutomationWrapper.d.ts.map +1 -0
- package/dist/node/SentinelIntervalAutomationWrapper.js +72 -0
- package/dist/node/SentinelIntervalAutomationWrapper.js.map +1 -0
- package/dist/node/SentinelIntervalAutomationWrapper.mjs +47 -0
- package/dist/node/SentinelIntervalAutomationWrapper.mjs.map +1 -0
- package/dist/node/SentinelRunner.d.cts +24 -0
- package/dist/node/SentinelRunner.d.cts.map +1 -0
- package/dist/node/SentinelRunner.d.mts +24 -0
- package/dist/node/SentinelRunner.d.mts.map +1 -0
- package/dist/node/SentinelRunner.d.ts +24 -0
- package/dist/node/SentinelRunner.d.ts.map +1 -0
- package/dist/node/SentinelRunner.js +162 -0
- package/dist/node/SentinelRunner.js.map +1 -0
- package/dist/node/SentinelRunner.mjs +137 -0
- package/dist/node/SentinelRunner.mjs.map +1 -0
- package/dist/node/Wrapper.d.cts +14 -0
- package/dist/node/Wrapper.d.cts.map +1 -0
- package/dist/node/Wrapper.d.mts +14 -0
- package/dist/node/Wrapper.d.mts.map +1 -0
- package/dist/node/Wrapper.d.ts +14 -0
- package/dist/node/Wrapper.d.ts.map +1 -0
- package/dist/node/Wrapper.js +49 -0
- package/dist/node/Wrapper.js.map +1 -0
- package/dist/node/Wrapper.mjs +28 -0
- package/dist/node/Wrapper.mjs.map +1 -0
- package/dist/node/index.d.cts +8 -0
- package/dist/node/index.d.cts.map +1 -0
- package/dist/node/index.d.mts +8 -0
- package/dist/node/index.d.mts.map +1 -0
- package/dist/node/index.d.ts +8 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +328 -0
- package/dist/node/index.js.map +1 -0
- package/dist/{index.mjs → node/index.mjs} +20 -15
- package/dist/node/index.mjs.map +1 -0
- package/package.json +37 -34
- package/dist/AbstractSentinel.d.mts.map +0 -1
- package/dist/AbstractSentinel.d.ts.map +0 -1
- package/dist/Automation.d.mts.map +0 -1
- package/dist/Automation.d.ts.map +0 -1
- package/dist/MemorySentinel.d.mts.map +0 -1
- package/dist/MemorySentinel.d.ts.map +0 -1
- package/dist/SentinelIntervalAutomationWrapper.d.mts.map +0 -1
- package/dist/SentinelIntervalAutomationWrapper.d.ts.map +0 -1
- package/dist/SentinelRunner.d.mts.map +0 -1
- package/dist/SentinelRunner.d.ts.map +0 -1
- package/dist/Wrapper.d.mts.map +0 -1
- package/dist/Wrapper.d.ts.map +0 -1
- package/dist/index.d.mts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- /package/dist/{AbstractSentinel.d.mts → browser/AbstractSentinel.d.cts} +0 -0
- /package/dist/{AbstractSentinel.d.ts → browser/AbstractSentinel.d.mts} +0 -0
- /package/dist/{Automation.d.mts → browser/Automation.d.cts} +0 -0
- /package/dist/{Automation.d.ts → browser/Automation.d.mts} +0 -0
- /package/dist/{MemorySentinel.d.mts → browser/MemorySentinel.d.cts} +0 -0
- /package/dist/{MemorySentinel.d.ts → browser/MemorySentinel.d.mts} +0 -0
- /package/dist/{SentinelIntervalAutomationWrapper.d.mts → browser/SentinelIntervalAutomationWrapper.d.cts} +0 -0
- /package/dist/{SentinelIntervalAutomationWrapper.d.ts → browser/SentinelIntervalAutomationWrapper.d.mts} +0 -0
- /package/dist/{SentinelRunner.d.mts → browser/SentinelRunner.d.cts} +0 -0
- /package/dist/{SentinelRunner.d.ts → browser/SentinelRunner.d.mts} +0 -0
- /package/dist/{Wrapper.d.mts → browser/Wrapper.d.cts} +0 -0
- /package/dist/{Wrapper.d.ts → browser/Wrapper.d.mts} +0 -0
- /package/dist/{index.d.mts → browser/index.d.cts} +0 -0
- /package/dist/{index.d.ts → browser/index.d.mts} +0 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/AbstractSentinel.ts
|
|
21
|
+
var AbstractSentinel_exports = {};
|
|
22
|
+
__export(AbstractSentinel_exports, {
|
|
23
|
+
AbstractSentinel: () => AbstractSentinel
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(AbstractSentinel_exports);
|
|
26
|
+
var import_assert = require("@xylabs/assert");
|
|
27
|
+
var import_lodash = require("@xylabs/lodash");
|
|
28
|
+
var import_archivist = require("@xyo-network/archivist");
|
|
29
|
+
var import_boundwitness_builder = require("@xyo-network/boundwitness-builder");
|
|
30
|
+
var import_boundwitness_model = require("@xyo-network/boundwitness-model");
|
|
31
|
+
var import_sentinel_model = require("@xyo-network/sentinel-model");
|
|
32
|
+
var import_witness = require("@xyo-network/witness");
|
|
33
|
+
var AbstractSentinel = class extends import_archivist.AbstractArchivingModule {
|
|
34
|
+
history = [];
|
|
35
|
+
get queries() {
|
|
36
|
+
return [import_sentinel_model.SentinelReportQuerySchema, ...super.queries];
|
|
37
|
+
}
|
|
38
|
+
get _queryAccountPaths() {
|
|
39
|
+
return {
|
|
40
|
+
"network.xyo.query.sentinel.report": "1/1"
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
addArchivist(address) {
|
|
44
|
+
this.config.archivists = (0, import_lodash.uniq)([...address, ...this.config.archivists ?? []]);
|
|
45
|
+
}
|
|
46
|
+
addWitness(address) {
|
|
47
|
+
this.config.witnesses = (0, import_lodash.uniq)([...address, ...this.config.witnesses ?? []]);
|
|
48
|
+
}
|
|
49
|
+
async archivists() {
|
|
50
|
+
this.logger?.debug(`archivists:config:archivist: ${this.config?.archivists?.length}`);
|
|
51
|
+
const namesOrAddresses = this.config?.archivists ? Array.isArray(this.config.archivists) ? this.config?.archivists : [this.config.archivists] : void 0;
|
|
52
|
+
this.logger?.debug(`archivist:namesOrAddresses: ${namesOrAddresses?.length}`);
|
|
53
|
+
const result = [
|
|
54
|
+
...await this.resolve(namesOrAddresses ? { address: namesOrAddresses } : void 0),
|
|
55
|
+
...await this.resolve(namesOrAddresses ? { name: namesOrAddresses } : void 0)
|
|
56
|
+
].map((module2) => (0, import_assert.assertEx)((0, import_archivist.asArchivistInstance)(module2), "Tried to resolve a non-archivist as an archivist"));
|
|
57
|
+
if (namesOrAddresses && namesOrAddresses.length !== result.length) {
|
|
58
|
+
this.logger?.warn(`Not all archivists found [Requested: ${namesOrAddresses.length}, Found: ${result.length}]`);
|
|
59
|
+
}
|
|
60
|
+
this.logger?.debug(`archivists:result: ${result?.length}`);
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
removeArchivist(address) {
|
|
64
|
+
this.config.archivists = (this.config.archivists ?? []).filter((archivist) => !address.includes(archivist));
|
|
65
|
+
}
|
|
66
|
+
removeWitness(address) {
|
|
67
|
+
this.config.witnesses = (this.config.witnesses ?? []).filter((witness) => !address.includes(witness));
|
|
68
|
+
}
|
|
69
|
+
async report(inPayloads) {
|
|
70
|
+
this._noOverride("report");
|
|
71
|
+
await this.emit("reportStart", { inPayloads, module: this });
|
|
72
|
+
const payloads = await this.reportHandler(inPayloads);
|
|
73
|
+
this.logger?.debug(`report:payloads: ${JSON.stringify(payloads, null, 2)}`);
|
|
74
|
+
const outPayloads = payloads.filter(import_boundwitness_model.notBoundWitness);
|
|
75
|
+
const boundwitnesses = payloads.filter(import_boundwitness_model.isBoundWitness);
|
|
76
|
+
const boundwitness = boundwitnesses.find((bw) => bw.addresses.includes(this.address));
|
|
77
|
+
await this.emit("reportEnd", { boundwitness, inPayloads, module: this, outPayloads });
|
|
78
|
+
return payloads;
|
|
79
|
+
}
|
|
80
|
+
async witnesses() {
|
|
81
|
+
this.logger?.debug(`witnesses:config:witnesses: ${this.config?.witnesses?.length}`);
|
|
82
|
+
const namesOrAddresses = this.config?.witnesses ? Array.isArray(this.config.witnesses) ? this.config?.witnesses : [this.config.witnesses] : void 0;
|
|
83
|
+
this.logger?.debug(`witnesses:namesOrAddresses: ${namesOrAddresses?.length}`);
|
|
84
|
+
const result = namesOrAddresses ? [
|
|
85
|
+
...await this.resolve({ address: namesOrAddresses }, { identity: import_witness.isWitnessInstance }),
|
|
86
|
+
...await this.resolve({ name: namesOrAddresses }, { identity: import_witness.isWitnessInstance })
|
|
87
|
+
] : await this.resolve(void 0, { identity: import_witness.isWitnessInstance });
|
|
88
|
+
if (namesOrAddresses && namesOrAddresses.length !== result.length) {
|
|
89
|
+
this.logger?.warn(`Not all witnesses found [Requested: ${namesOrAddresses.length}, Found: ${result.length}]`);
|
|
90
|
+
}
|
|
91
|
+
result.map((item) => {
|
|
92
|
+
this.logger?.debug(`witnesses:result: ${item.config.schema}`);
|
|
93
|
+
});
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
async queryHandler(query, payloads, queryConfig) {
|
|
97
|
+
const wrapper = import_boundwitness_builder.QueryBoundWitnessWrapper.parseQuery(query, payloads);
|
|
98
|
+
const queryPayload = await wrapper.getQuery();
|
|
99
|
+
(0, import_assert.assertEx)(this.queryable(query, payloads, queryConfig));
|
|
100
|
+
const resultPayloads = [];
|
|
101
|
+
switch (queryPayload.schema) {
|
|
102
|
+
case import_sentinel_model.SentinelReportQuerySchema: {
|
|
103
|
+
resultPayloads.push(...await this.report(payloads));
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
default: {
|
|
107
|
+
return super.queryHandler(query, payloads);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return resultPayloads;
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
//# sourceMappingURL=AbstractSentinel.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/AbstractSentinel.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { uniq } from '@xylabs/lodash'\nimport { AbstractArchivingModule, asArchivistInstance } from '@xyo-network/archivist'\nimport { QueryBoundWitness, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { BoundWitness, isBoundWitness, notBoundWitness } from '@xyo-network/boundwitness-model'\nimport { ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module'\nimport { Payload } from '@xyo-network/payload-model'\nimport {\n CustomSentinelInstance,\n SentinelInstance,\n SentinelModuleEventData,\n SentinelParams,\n SentinelQueryBase,\n SentinelReportQuerySchema,\n} from '@xyo-network/sentinel-model'\nimport { isWitnessInstance, WitnessInstance } from '@xyo-network/witness'\n\nexport abstract class AbstractSentinel<\n TParams extends SentinelParams = SentinelParams,\n TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>,\n >\n extends AbstractArchivingModule<TParams, TEventData>\n implements CustomSentinelInstance<TParams, TEventData>\n{\n history: BoundWitness[] = []\n\n override get queries(): string[] {\n return [SentinelReportQuerySchema, ...super.queries]\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 addArchivist(address: string[]) {\n this.config.archivists = uniq([...address, ...(this.config.archivists ?? [])])\n }\n\n addWitness(address: string[]) {\n this.config.witnesses = uniq([...address, ...(this.config.witnesses ?? [])])\n }\n\n async archivists() {\n this.logger?.debug(`archivists:config:archivist: ${this.config?.archivists?.length}`)\n const namesOrAddresses = this.config?.archivists\n ? Array.isArray(this.config.archivists)\n ? this.config?.archivists\n : [this.config.archivists]\n : undefined\n this.logger?.debug(`archivist:namesOrAddresses: ${namesOrAddresses?.length}`)\n const result = [\n ...(await this.resolve(namesOrAddresses ? { address: namesOrAddresses } : undefined)),\n ...(await this.resolve(namesOrAddresses ? { name: namesOrAddresses } : undefined)),\n ].map((module) => assertEx(asArchivistInstance(module), 'Tried to resolve a non-archivist as an archivist'))\n\n if (namesOrAddresses && namesOrAddresses.length !== result.length) {\n this.logger?.warn(`Not all archivists found [Requested: ${namesOrAddresses.length}, Found: ${result.length}]`)\n }\n\n this.logger?.debug(`archivists:result: ${result?.length}`)\n\n return result\n }\n\n removeArchivist(address: string[]) {\n this.config.archivists = (this.config.archivists ?? []).filter((archivist) => !address.includes(archivist))\n }\n\n removeWitness(address: string[]) {\n this.config.witnesses = (this.config.witnesses ?? []).filter((witness) => !address.includes(witness))\n }\n\n async report(inPayloads?: Payload[]): Promise<Payload[]> {\n this._noOverride('report')\n await this.emit('reportStart', { inPayloads, module: this })\n const payloads = await this.reportHandler(inPayloads)\n this.logger?.debug(`report:payloads: ${JSON.stringify(payloads, null, 2)}`)\n const outPayloads = payloads.filter(notBoundWitness)\n const boundwitnesses = payloads.filter(isBoundWitness)\n const boundwitness = boundwitnesses.find((bw) => bw.addresses.includes(this.address))\n await this.emit('reportEnd', { boundwitness, inPayloads, module: this, outPayloads })\n return payloads\n }\n\n async witnesses() {\n this.logger?.debug(`witnesses:config:witnesses: ${this.config?.witnesses?.length}`)\n const namesOrAddresses = this.config?.witnesses\n ? Array.isArray(this.config.witnesses)\n ? this.config?.witnesses\n : [this.config.witnesses]\n : undefined\n this.logger?.debug(`witnesses:namesOrAddresses: ${namesOrAddresses?.length}`)\n const result = namesOrAddresses\n ? [\n ...(await this.resolve<WitnessInstance>({ address: namesOrAddresses }, { identity: isWitnessInstance })),\n ...(await this.resolve<WitnessInstance>({ name: namesOrAddresses }, { identity: isWitnessInstance })),\n ]\n : await this.resolve<WitnessInstance>(undefined, { identity: isWitnessInstance })\n\n if (namesOrAddresses && namesOrAddresses.length !== result.length) {\n this.logger?.warn(`Not all witnesses found [Requested: ${namesOrAddresses.length}, Found: ${result.length}]`)\n }\n result.map((item) => {\n this.logger?.debug(`witnesses:result: ${item.config.schema}`)\n })\n\n return result\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":["module"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractSentinel.d.ts","sourceRoot":"","sources":["../../src/AbstractSentinel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAuB,MAAM,wBAAwB,CAAA;AACrF,OAAO,EAAE,iBAAiB,EAA4B,MAAM,mCAAmC,CAAA;AAC/F,OAAO,EAAE,YAAY,EAAmC,MAAM,iCAAiC,CAAA;AAC/F,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EAElB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAqB,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEzE,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,uBAAuB,CAAC,OAAO,EAAE,UAAU,CACnD,YAAW,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC;IAEtD,OAAO,EAAE,YAAY,EAAE,CAAK;IAE5B,IAAa,OAAO,IAAI,MAAM,EAAE,CAE/B;IAED,cAAuB,kBAAkB,IAAI,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAIvF;IAED,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE;IAI9B,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE;IAItB,UAAU;IAsBhB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE;IAIjC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE;IAIzB,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAYlD,SAAS;cAyBU,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractSentinel.d.ts","sourceRoot":"","sources":["../../src/AbstractSentinel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAuB,MAAM,wBAAwB,CAAA;AACrF,OAAO,EAAE,iBAAiB,EAA4B,MAAM,mCAAmC,CAAA;AAC/F,OAAO,EAAE,YAAY,EAAmC,MAAM,iCAAiC,CAAA;AAC/F,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EAElB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAqB,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEzE,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,uBAAuB,CAAC,OAAO,EAAE,UAAU,CACnD,YAAW,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC;IAEtD,OAAO,EAAE,YAAY,EAAE,CAAK;IAE5B,IAAa,OAAO,IAAI,MAAM,EAAE,CAE/B;IAED,cAAuB,kBAAkB,IAAI,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAIvF;IAED,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE;IAI9B,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE;IAItB,UAAU;IAsBhB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE;IAIjC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE;IAIzB,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAYlD,SAAS;cAyBU,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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { AbstractArchivingModule } from '@xyo-network/archivist';
|
|
2
|
+
import { QueryBoundWitness } from '@xyo-network/boundwitness-builder';
|
|
3
|
+
import { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
4
|
+
import { ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module';
|
|
5
|
+
import { Payload } from '@xyo-network/payload-model';
|
|
6
|
+
import { CustomSentinelInstance, SentinelInstance, SentinelModuleEventData, SentinelParams, SentinelQueryBase } from '@xyo-network/sentinel-model';
|
|
7
|
+
import { WitnessInstance } from '@xyo-network/witness';
|
|
8
|
+
export declare abstract class AbstractSentinel<TParams extends SentinelParams = SentinelParams, TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>> extends AbstractArchivingModule<TParams, TEventData> implements CustomSentinelInstance<TParams, TEventData> {
|
|
9
|
+
history: BoundWitness[];
|
|
10
|
+
get queries(): string[];
|
|
11
|
+
protected get _queryAccountPaths(): Record<SentinelQueryBase['schema'], string>;
|
|
12
|
+
addArchivist(address: string[]): void;
|
|
13
|
+
addWitness(address: string[]): void;
|
|
14
|
+
archivists(): Promise<import("@xyo-network/archivist").ArchivistInstance[]>;
|
|
15
|
+
removeArchivist(address: string[]): void;
|
|
16
|
+
removeWitness(address: string[]): void;
|
|
17
|
+
report(inPayloads?: Payload[]): Promise<Payload[]>;
|
|
18
|
+
witnesses(): Promise<WitnessInstance[]>;
|
|
19
|
+
protected queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(query: T, payloads?: Payload[], queryConfig?: TConfig): Promise<ModuleQueryHandlerResult>;
|
|
20
|
+
abstract reportHandler(payloads?: Payload[]): Promise<Payload[]>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=AbstractSentinel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractSentinel.d.ts","sourceRoot":"","sources":["../../src/AbstractSentinel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAuB,MAAM,wBAAwB,CAAA;AACrF,OAAO,EAAE,iBAAiB,EAA4B,MAAM,mCAAmC,CAAA;AAC/F,OAAO,EAAE,YAAY,EAAmC,MAAM,iCAAiC,CAAA;AAC/F,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EAElB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAqB,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEzE,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,uBAAuB,CAAC,OAAO,EAAE,UAAU,CACnD,YAAW,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC;IAEtD,OAAO,EAAE,YAAY,EAAE,CAAK;IAE5B,IAAa,OAAO,IAAI,MAAM,EAAE,CAE/B;IAED,cAAuB,kBAAkB,IAAI,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAIvF;IAED,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE;IAI9B,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE;IAItB,UAAU;IAsBhB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE;IAIjC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE;IAIzB,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAYlD,SAAS;cAyBU,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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { assertEx } from "@xylabs/assert";
|
|
2
|
+
import { uniq } from "@xylabs/lodash";
|
|
3
|
+
import { AbstractArchivingModule, asArchivistInstance } from "@xyo-network/archivist";
|
|
4
|
+
import { QueryBoundWitnessWrapper } from "@xyo-network/boundwitness-builder";
|
|
5
|
+
import { isBoundWitness, notBoundWitness } from "@xyo-network/boundwitness-model";
|
|
6
|
+
import {
|
|
7
|
+
SentinelReportQuerySchema
|
|
8
|
+
} from "@xyo-network/sentinel-model";
|
|
9
|
+
import { isWitnessInstance } from "@xyo-network/witness";
|
|
10
|
+
class AbstractSentinel extends AbstractArchivingModule {
|
|
11
|
+
history = [];
|
|
12
|
+
get queries() {
|
|
13
|
+
return [SentinelReportQuerySchema, ...super.queries];
|
|
14
|
+
}
|
|
15
|
+
get _queryAccountPaths() {
|
|
16
|
+
return {
|
|
17
|
+
"network.xyo.query.sentinel.report": "1/1"
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
addArchivist(address) {
|
|
21
|
+
this.config.archivists = uniq([...address, ...this.config.archivists ?? []]);
|
|
22
|
+
}
|
|
23
|
+
addWitness(address) {
|
|
24
|
+
this.config.witnesses = uniq([...address, ...this.config.witnesses ?? []]);
|
|
25
|
+
}
|
|
26
|
+
async archivists() {
|
|
27
|
+
this.logger?.debug(`archivists:config:archivist: ${this.config?.archivists?.length}`);
|
|
28
|
+
const namesOrAddresses = this.config?.archivists ? Array.isArray(this.config.archivists) ? this.config?.archivists : [this.config.archivists] : void 0;
|
|
29
|
+
this.logger?.debug(`archivist:namesOrAddresses: ${namesOrAddresses?.length}`);
|
|
30
|
+
const result = [
|
|
31
|
+
...await this.resolve(namesOrAddresses ? { address: namesOrAddresses } : void 0),
|
|
32
|
+
...await this.resolve(namesOrAddresses ? { name: namesOrAddresses } : void 0)
|
|
33
|
+
].map((module) => assertEx(asArchivistInstance(module), "Tried to resolve a non-archivist as an archivist"));
|
|
34
|
+
if (namesOrAddresses && namesOrAddresses.length !== result.length) {
|
|
35
|
+
this.logger?.warn(`Not all archivists found [Requested: ${namesOrAddresses.length}, Found: ${result.length}]`);
|
|
36
|
+
}
|
|
37
|
+
this.logger?.debug(`archivists:result: ${result?.length}`);
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
removeArchivist(address) {
|
|
41
|
+
this.config.archivists = (this.config.archivists ?? []).filter((archivist) => !address.includes(archivist));
|
|
42
|
+
}
|
|
43
|
+
removeWitness(address) {
|
|
44
|
+
this.config.witnesses = (this.config.witnesses ?? []).filter((witness) => !address.includes(witness));
|
|
45
|
+
}
|
|
46
|
+
async report(inPayloads) {
|
|
47
|
+
this._noOverride("report");
|
|
48
|
+
await this.emit("reportStart", { inPayloads, module: this });
|
|
49
|
+
const payloads = await this.reportHandler(inPayloads);
|
|
50
|
+
this.logger?.debug(`report:payloads: ${JSON.stringify(payloads, null, 2)}`);
|
|
51
|
+
const outPayloads = payloads.filter(notBoundWitness);
|
|
52
|
+
const boundwitnesses = payloads.filter(isBoundWitness);
|
|
53
|
+
const boundwitness = boundwitnesses.find((bw) => bw.addresses.includes(this.address));
|
|
54
|
+
await this.emit("reportEnd", { boundwitness, inPayloads, module: this, outPayloads });
|
|
55
|
+
return payloads;
|
|
56
|
+
}
|
|
57
|
+
async witnesses() {
|
|
58
|
+
this.logger?.debug(`witnesses:config:witnesses: ${this.config?.witnesses?.length}`);
|
|
59
|
+
const namesOrAddresses = this.config?.witnesses ? Array.isArray(this.config.witnesses) ? this.config?.witnesses : [this.config.witnesses] : void 0;
|
|
60
|
+
this.logger?.debug(`witnesses:namesOrAddresses: ${namesOrAddresses?.length}`);
|
|
61
|
+
const result = namesOrAddresses ? [
|
|
62
|
+
...await this.resolve({ address: namesOrAddresses }, { identity: isWitnessInstance }),
|
|
63
|
+
...await this.resolve({ name: namesOrAddresses }, { identity: isWitnessInstance })
|
|
64
|
+
] : await this.resolve(void 0, { identity: isWitnessInstance });
|
|
65
|
+
if (namesOrAddresses && namesOrAddresses.length !== result.length) {
|
|
66
|
+
this.logger?.warn(`Not all witnesses found [Requested: ${namesOrAddresses.length}, Found: ${result.length}]`);
|
|
67
|
+
}
|
|
68
|
+
result.map((item) => {
|
|
69
|
+
this.logger?.debug(`witnesses:result: ${item.config.schema}`);
|
|
70
|
+
});
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
async queryHandler(query, payloads, queryConfig) {
|
|
74
|
+
const wrapper = QueryBoundWitnessWrapper.parseQuery(query, payloads);
|
|
75
|
+
const queryPayload = await wrapper.getQuery();
|
|
76
|
+
assertEx(this.queryable(query, payloads, queryConfig));
|
|
77
|
+
const resultPayloads = [];
|
|
78
|
+
switch (queryPayload.schema) {
|
|
79
|
+
case SentinelReportQuerySchema: {
|
|
80
|
+
resultPayloads.push(...await this.report(payloads));
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
default: {
|
|
84
|
+
return super.queryHandler(query, payloads);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return resultPayloads;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export {
|
|
91
|
+
AbstractSentinel
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=AbstractSentinel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/AbstractSentinel.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { uniq } from '@xylabs/lodash'\nimport { AbstractArchivingModule, asArchivistInstance } from '@xyo-network/archivist'\nimport { QueryBoundWitness, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { BoundWitness, isBoundWitness, notBoundWitness } from '@xyo-network/boundwitness-model'\nimport { ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module'\nimport { Payload } from '@xyo-network/payload-model'\nimport {\n CustomSentinelInstance,\n SentinelInstance,\n SentinelModuleEventData,\n SentinelParams,\n SentinelQueryBase,\n SentinelReportQuerySchema,\n} from '@xyo-network/sentinel-model'\nimport { isWitnessInstance, WitnessInstance } from '@xyo-network/witness'\n\nexport abstract class AbstractSentinel<\n TParams extends SentinelParams = SentinelParams,\n TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>,\n >\n extends AbstractArchivingModule<TParams, TEventData>\n implements CustomSentinelInstance<TParams, TEventData>\n{\n history: BoundWitness[] = []\n\n override get queries(): string[] {\n return [SentinelReportQuerySchema, ...super.queries]\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 addArchivist(address: string[]) {\n this.config.archivists = uniq([...address, ...(this.config.archivists ?? [])])\n }\n\n addWitness(address: string[]) {\n this.config.witnesses = uniq([...address, ...(this.config.witnesses ?? [])])\n }\n\n async archivists() {\n this.logger?.debug(`archivists:config:archivist: ${this.config?.archivists?.length}`)\n const namesOrAddresses = this.config?.archivists\n ? Array.isArray(this.config.archivists)\n ? this.config?.archivists\n : [this.config.archivists]\n : undefined\n this.logger?.debug(`archivist:namesOrAddresses: ${namesOrAddresses?.length}`)\n const result = [\n ...(await this.resolve(namesOrAddresses ? { address: namesOrAddresses } : undefined)),\n ...(await this.resolve(namesOrAddresses ? { name: namesOrAddresses } : undefined)),\n ].map((module) => assertEx(asArchivistInstance(module), 'Tried to resolve a non-archivist as an archivist'))\n\n if (namesOrAddresses && namesOrAddresses.length !== result.length) {\n this.logger?.warn(`Not all archivists found [Requested: ${namesOrAddresses.length}, Found: ${result.length}]`)\n }\n\n this.logger?.debug(`archivists:result: ${result?.length}`)\n\n return result\n }\n\n removeArchivist(address: string[]) {\n this.config.archivists = (this.config.archivists ?? []).filter((archivist) => !address.includes(archivist))\n }\n\n removeWitness(address: string[]) {\n this.config.witnesses = (this.config.witnesses ?? []).filter((witness) => !address.includes(witness))\n }\n\n async report(inPayloads?: Payload[]): Promise<Payload[]> {\n this._noOverride('report')\n await this.emit('reportStart', { inPayloads, module: this })\n const payloads = await this.reportHandler(inPayloads)\n this.logger?.debug(`report:payloads: ${JSON.stringify(payloads, null, 2)}`)\n const outPayloads = payloads.filter(notBoundWitness)\n const boundwitnesses = payloads.filter(isBoundWitness)\n const boundwitness = boundwitnesses.find((bw) => bw.addresses.includes(this.address))\n await this.emit('reportEnd', { boundwitness, inPayloads, module: this, outPayloads })\n return payloads\n }\n\n async witnesses() {\n this.logger?.debug(`witnesses:config:witnesses: ${this.config?.witnesses?.length}`)\n const namesOrAddresses = this.config?.witnesses\n ? Array.isArray(this.config.witnesses)\n ? this.config?.witnesses\n : [this.config.witnesses]\n : undefined\n this.logger?.debug(`witnesses:namesOrAddresses: ${namesOrAddresses?.length}`)\n const result = namesOrAddresses\n ? [\n ...(await this.resolve<WitnessInstance>({ address: namesOrAddresses }, { identity: isWitnessInstance })),\n ...(await this.resolve<WitnessInstance>({ name: namesOrAddresses }, { identity: isWitnessInstance })),\n ]\n : await this.resolve<WitnessInstance>(undefined, { identity: isWitnessInstance })\n\n if (namesOrAddresses && namesOrAddresses.length !== result.length) {\n this.logger?.warn(`Not all witnesses found [Requested: ${namesOrAddresses.length}, Found: ${result.length}]`)\n }\n result.map((item) => {\n this.logger?.debug(`witnesses:result: ${item.config.schema}`)\n })\n\n return result\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":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/Automation.ts
|
|
21
|
+
var Automation_exports = {};
|
|
22
|
+
__export(Automation_exports, {
|
|
23
|
+
SentinelAutomationSchema: () => SentinelAutomationSchema
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(Automation_exports);
|
|
26
|
+
var SentinelAutomationSchema = "network.xyo.automation";
|
|
27
|
+
//# sourceMappingURL=Automation.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/Automation.ts"],"sourcesContent":["import { AnyObject } from '@xyo-network/core'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport type SentinelAutomationSchema = 'network.xyo.automation'\nexport const SentinelAutomationSchema: SentinelAutomationSchema = 'network.xyo.automation'\n\nexport type SentinelBaseAutomationPayload<T extends AnyObject = AnyObject> = Payload<\n T & {\n schema: SentinelAutomationSchema\n type?: 'interval' | 'change'\n /** @field The list of witnesses to invoke [all if undefined] */\n witnesses?: string[]\n }\n>\n\nexport type SentinelIntervalAutomationPayload = SentinelBaseAutomationPayload<{\n /** @field epoch after which any reoccurrence stops */\n end?: number\n\n /** @field time between triggers [non-repeating if undefined] */\n frequency?: number\n\n /** @field units for frequency field [hour if undefined] */\n frequencyUnits?: 'second' | 'minute' | 'hour' | 'day'\n\n /** @field remaining triggers [infinite if undefined] */\n remaining?: number\n\n /** @field epoch of the next trigger */\n start: number\n\n type: 'interval'\n}>\n\nexport type SentinelChangeAutomationPayload = SentinelBaseAutomationPayload<{\n type: 'change'\n}>\n\nexport type SentinelAutomationPayload = SentinelIntervalAutomationPayload | SentinelChangeAutomationPayload\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIO,IAAM,2BAAqD;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Automation.d.ts","sourceRoot":"","sources":["../../src/Automation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,MAAM,MAAM,wBAAwB,GAAG,wBAAwB,CAAA;AAC/D,eAAO,MAAM,wBAAwB,EAAE,wBAAmD,CAAA;AAE1F,MAAM,MAAM,6BAA6B,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI,OAAO,CAClF,CAAC,GAAG;IACF,MAAM,EAAE,wBAAwB,CAAA;IAChC,IAAI,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;IAC5B,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB,CACF,CAAA;AAED,MAAM,MAAM,iCAAiC,GAAG,6BAA6B,CAAC;IAC5E,sDAAsD;IACtD,GAAG,CAAC,EAAE,MAAM,CAAA;IAEZ,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAA;IAErD,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAA;IAEb,IAAI,EAAE,UAAU,CAAA;CACjB,CAAC,CAAA;AAEF,MAAM,MAAM,+BAA+B,GAAG,6BAA6B,CAAC;IAC1E,IAAI,EAAE,QAAQ,CAAA;CACf,CAAC,CAAA;AAEF,MAAM,MAAM,yBAAyB,GAAG,iCAAiC,GAAG,+BAA+B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Automation.d.ts","sourceRoot":"","sources":["../../src/Automation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,MAAM,MAAM,wBAAwB,GAAG,wBAAwB,CAAA;AAC/D,eAAO,MAAM,wBAAwB,EAAE,wBAAmD,CAAA;AAE1F,MAAM,MAAM,6BAA6B,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI,OAAO,CAClF,CAAC,GAAG;IACF,MAAM,EAAE,wBAAwB,CAAA;IAChC,IAAI,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;IAC5B,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB,CACF,CAAA;AAED,MAAM,MAAM,iCAAiC,GAAG,6BAA6B,CAAC;IAC5E,sDAAsD;IACtD,GAAG,CAAC,EAAE,MAAM,CAAA;IAEZ,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAA;IAErD,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAA;IAEb,IAAI,EAAE,UAAU,CAAA;CACjB,CAAC,CAAA;AAEF,MAAM,MAAM,+BAA+B,GAAG,6BAA6B,CAAC;IAC1E,IAAI,EAAE,QAAQ,CAAA;CACf,CAAC,CAAA;AAEF,MAAM,MAAM,yBAAyB,GAAG,iCAAiC,GAAG,+BAA+B,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { AnyObject } from '@xyo-network/core';
|
|
2
|
+
import { Payload } from '@xyo-network/payload-model';
|
|
3
|
+
export type SentinelAutomationSchema = 'network.xyo.automation';
|
|
4
|
+
export declare const SentinelAutomationSchema: SentinelAutomationSchema;
|
|
5
|
+
export type SentinelBaseAutomationPayload<T extends AnyObject = AnyObject> = Payload<T & {
|
|
6
|
+
schema: SentinelAutomationSchema;
|
|
7
|
+
type?: 'interval' | 'change';
|
|
8
|
+
/** @field The list of witnesses to invoke [all if undefined] */
|
|
9
|
+
witnesses?: string[];
|
|
10
|
+
}>;
|
|
11
|
+
export type SentinelIntervalAutomationPayload = SentinelBaseAutomationPayload<{
|
|
12
|
+
/** @field epoch after which any reoccurrence stops */
|
|
13
|
+
end?: number;
|
|
14
|
+
/** @field time between triggers [non-repeating if undefined] */
|
|
15
|
+
frequency?: number;
|
|
16
|
+
/** @field units for frequency field [hour if undefined] */
|
|
17
|
+
frequencyUnits?: 'second' | 'minute' | 'hour' | 'day';
|
|
18
|
+
/** @field remaining triggers [infinite if undefined] */
|
|
19
|
+
remaining?: number;
|
|
20
|
+
/** @field epoch of the next trigger */
|
|
21
|
+
start: number;
|
|
22
|
+
type: 'interval';
|
|
23
|
+
}>;
|
|
24
|
+
export type SentinelChangeAutomationPayload = SentinelBaseAutomationPayload<{
|
|
25
|
+
type: 'change';
|
|
26
|
+
}>;
|
|
27
|
+
export type SentinelAutomationPayload = SentinelIntervalAutomationPayload | SentinelChangeAutomationPayload;
|
|
28
|
+
//# sourceMappingURL=Automation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Automation.d.ts","sourceRoot":"","sources":["../../src/Automation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,MAAM,MAAM,wBAAwB,GAAG,wBAAwB,CAAA;AAC/D,eAAO,MAAM,wBAAwB,EAAE,wBAAmD,CAAA;AAE1F,MAAM,MAAM,6BAA6B,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI,OAAO,CAClF,CAAC,GAAG;IACF,MAAM,EAAE,wBAAwB,CAAA;IAChC,IAAI,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;IAC5B,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB,CACF,CAAA;AAED,MAAM,MAAM,iCAAiC,GAAG,6BAA6B,CAAC;IAC5E,sDAAsD;IACtD,GAAG,CAAC,EAAE,MAAM,CAAA;IAEZ,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAA;IAErD,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAA;IAEb,IAAI,EAAE,UAAU,CAAA;CACjB,CAAC,CAAA;AAEF,MAAM,MAAM,+BAA+B,GAAG,6BAA6B,CAAC;IAC1E,IAAI,EAAE,QAAQ,CAAA;CACf,CAAC,CAAA;AAEF,MAAM,MAAM,yBAAyB,GAAG,iCAAiC,GAAG,+BAA+B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/Automation.ts"],"sourcesContent":["import { AnyObject } from '@xyo-network/core'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport type SentinelAutomationSchema = 'network.xyo.automation'\nexport const SentinelAutomationSchema: SentinelAutomationSchema = 'network.xyo.automation'\n\nexport type SentinelBaseAutomationPayload<T extends AnyObject = AnyObject> = Payload<\n T & {\n schema: SentinelAutomationSchema\n type?: 'interval' | 'change'\n /** @field The list of witnesses to invoke [all if undefined] */\n witnesses?: string[]\n }\n>\n\nexport type SentinelIntervalAutomationPayload = SentinelBaseAutomationPayload<{\n /** @field epoch after which any reoccurrence stops */\n end?: number\n\n /** @field time between triggers [non-repeating if undefined] */\n frequency?: number\n\n /** @field units for frequency field [hour if undefined] */\n frequencyUnits?: 'second' | 'minute' | 'hour' | 'day'\n\n /** @field remaining triggers [infinite if undefined] */\n remaining?: number\n\n /** @field epoch of the next trigger */\n start: number\n\n type: 'interval'\n}>\n\nexport type SentinelChangeAutomationPayload = SentinelBaseAutomationPayload<{\n type: 'change'\n}>\n\nexport type SentinelAutomationPayload = SentinelIntervalAutomationPayload | SentinelChangeAutomationPayload\n"],"mappings":"AAIO,MAAM,2BAAqD;","names":[]}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/MemorySentinel.ts
|
|
21
|
+
var MemorySentinel_exports = {};
|
|
22
|
+
__export(MemorySentinel_exports, {
|
|
23
|
+
MemorySentinel: () => MemorySentinel
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(MemorySentinel_exports);
|
|
26
|
+
var import_assert2 = require("@xylabs/assert");
|
|
27
|
+
var import_promise = require("@xylabs/promise");
|
|
28
|
+
var import_error = require("@xyo-network/error");
|
|
29
|
+
var import_sentinel_model2 = require("@xyo-network/sentinel-model");
|
|
30
|
+
|
|
31
|
+
// src/AbstractSentinel.ts
|
|
32
|
+
var import_assert = require("@xylabs/assert");
|
|
33
|
+
var import_lodash = require("@xylabs/lodash");
|
|
34
|
+
var import_archivist = require("@xyo-network/archivist");
|
|
35
|
+
var import_boundwitness_builder = require("@xyo-network/boundwitness-builder");
|
|
36
|
+
var import_boundwitness_model = require("@xyo-network/boundwitness-model");
|
|
37
|
+
var import_sentinel_model = require("@xyo-network/sentinel-model");
|
|
38
|
+
var import_witness = require("@xyo-network/witness");
|
|
39
|
+
var AbstractSentinel = class extends import_archivist.AbstractArchivingModule {
|
|
40
|
+
history = [];
|
|
41
|
+
get queries() {
|
|
42
|
+
return [import_sentinel_model.SentinelReportQuerySchema, ...super.queries];
|
|
43
|
+
}
|
|
44
|
+
get _queryAccountPaths() {
|
|
45
|
+
return {
|
|
46
|
+
"network.xyo.query.sentinel.report": "1/1"
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
addArchivist(address) {
|
|
50
|
+
this.config.archivists = (0, import_lodash.uniq)([...address, ...this.config.archivists ?? []]);
|
|
51
|
+
}
|
|
52
|
+
addWitness(address) {
|
|
53
|
+
this.config.witnesses = (0, import_lodash.uniq)([...address, ...this.config.witnesses ?? []]);
|
|
54
|
+
}
|
|
55
|
+
async archivists() {
|
|
56
|
+
this.logger?.debug(`archivists:config:archivist: ${this.config?.archivists?.length}`);
|
|
57
|
+
const namesOrAddresses = this.config?.archivists ? Array.isArray(this.config.archivists) ? this.config?.archivists : [this.config.archivists] : void 0;
|
|
58
|
+
this.logger?.debug(`archivist:namesOrAddresses: ${namesOrAddresses?.length}`);
|
|
59
|
+
const result = [
|
|
60
|
+
...await this.resolve(namesOrAddresses ? { address: namesOrAddresses } : void 0),
|
|
61
|
+
...await this.resolve(namesOrAddresses ? { name: namesOrAddresses } : void 0)
|
|
62
|
+
].map((module2) => (0, import_assert.assertEx)((0, import_archivist.asArchivistInstance)(module2), "Tried to resolve a non-archivist as an archivist"));
|
|
63
|
+
if (namesOrAddresses && namesOrAddresses.length !== result.length) {
|
|
64
|
+
this.logger?.warn(`Not all archivists found [Requested: ${namesOrAddresses.length}, Found: ${result.length}]`);
|
|
65
|
+
}
|
|
66
|
+
this.logger?.debug(`archivists:result: ${result?.length}`);
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
removeArchivist(address) {
|
|
70
|
+
this.config.archivists = (this.config.archivists ?? []).filter((archivist) => !address.includes(archivist));
|
|
71
|
+
}
|
|
72
|
+
removeWitness(address) {
|
|
73
|
+
this.config.witnesses = (this.config.witnesses ?? []).filter((witness) => !address.includes(witness));
|
|
74
|
+
}
|
|
75
|
+
async report(inPayloads) {
|
|
76
|
+
this._noOverride("report");
|
|
77
|
+
await this.emit("reportStart", { inPayloads, module: this });
|
|
78
|
+
const payloads = await this.reportHandler(inPayloads);
|
|
79
|
+
this.logger?.debug(`report:payloads: ${JSON.stringify(payloads, null, 2)}`);
|
|
80
|
+
const outPayloads = payloads.filter(import_boundwitness_model.notBoundWitness);
|
|
81
|
+
const boundwitnesses = payloads.filter(import_boundwitness_model.isBoundWitness);
|
|
82
|
+
const boundwitness = boundwitnesses.find((bw) => bw.addresses.includes(this.address));
|
|
83
|
+
await this.emit("reportEnd", { boundwitness, inPayloads, module: this, outPayloads });
|
|
84
|
+
return payloads;
|
|
85
|
+
}
|
|
86
|
+
async witnesses() {
|
|
87
|
+
this.logger?.debug(`witnesses:config:witnesses: ${this.config?.witnesses?.length}`);
|
|
88
|
+
const namesOrAddresses = this.config?.witnesses ? Array.isArray(this.config.witnesses) ? this.config?.witnesses : [this.config.witnesses] : void 0;
|
|
89
|
+
this.logger?.debug(`witnesses:namesOrAddresses: ${namesOrAddresses?.length}`);
|
|
90
|
+
const result = namesOrAddresses ? [
|
|
91
|
+
...await this.resolve({ address: namesOrAddresses }, { identity: import_witness.isWitnessInstance }),
|
|
92
|
+
...await this.resolve({ name: namesOrAddresses }, { identity: import_witness.isWitnessInstance })
|
|
93
|
+
] : await this.resolve(void 0, { identity: import_witness.isWitnessInstance });
|
|
94
|
+
if (namesOrAddresses && namesOrAddresses.length !== result.length) {
|
|
95
|
+
this.logger?.warn(`Not all witnesses found [Requested: ${namesOrAddresses.length}, Found: ${result.length}]`);
|
|
96
|
+
}
|
|
97
|
+
result.map((item) => {
|
|
98
|
+
this.logger?.debug(`witnesses:result: ${item.config.schema}`);
|
|
99
|
+
});
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
async queryHandler(query, payloads, queryConfig) {
|
|
103
|
+
const wrapper = import_boundwitness_builder.QueryBoundWitnessWrapper.parseQuery(query, payloads);
|
|
104
|
+
const queryPayload = await wrapper.getQuery();
|
|
105
|
+
(0, import_assert.assertEx)(this.queryable(query, payloads, queryConfig));
|
|
106
|
+
const resultPayloads = [];
|
|
107
|
+
switch (queryPayload.schema) {
|
|
108
|
+
case import_sentinel_model.SentinelReportQuerySchema: {
|
|
109
|
+
resultPayloads.push(...await this.report(payloads));
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
default: {
|
|
113
|
+
return super.queryHandler(query, payloads);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return resultPayloads;
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
// src/MemorySentinel.ts
|
|
121
|
+
var MemorySentinel = class extends AbstractSentinel {
|
|
122
|
+
static configSchemas = [import_sentinel_model2.SentinelConfigSchema];
|
|
123
|
+
async reportHandler(payloads = []) {
|
|
124
|
+
await this.started("throw");
|
|
125
|
+
const errors = [];
|
|
126
|
+
const allWitnesses = [...await this.witnesses()];
|
|
127
|
+
const resultPayloads = [];
|
|
128
|
+
try {
|
|
129
|
+
const [generatedPayloads, generatedErrors] = await this.generateResults(allWitnesses);
|
|
130
|
+
const combinedPayloads = [...generatedPayloads, ...payloads];
|
|
131
|
+
resultPayloads.push(...combinedPayloads);
|
|
132
|
+
errors.push(...generatedErrors);
|
|
133
|
+
} catch (ex) {
|
|
134
|
+
(0, import_error.handleError)(ex, (error) => {
|
|
135
|
+
errors.push(error);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
const [boundWitness] = await this.bindQueryResult({ schema: import_sentinel_model2.SentinelReportQuerySchema }, resultPayloads);
|
|
139
|
+
this.history.push((0, import_assert2.assertEx)(boundWitness));
|
|
140
|
+
return [boundWitness, ...resultPayloads];
|
|
141
|
+
}
|
|
142
|
+
async generateResults(witnesses) {
|
|
143
|
+
const results = await Promise.allSettled(witnesses?.map((witness) => witness.observe()));
|
|
144
|
+
const payloads = results.filter(import_promise.fulfilled).map((result) => result.value).flat();
|
|
145
|
+
const errors = results.filter(import_promise.rejected).map((result) => result.reason).flat();
|
|
146
|
+
return [payloads, errors];
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
//# sourceMappingURL=MemorySentinel.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/MemorySentinel.ts","../../src/AbstractSentinel.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { fulfilled, rejected } from '@xylabs/promise'\nimport { handleError } from '@xyo-network/error'\nimport { Payload } from '@xyo-network/payload-model'\nimport {\n SentinelConfig,\n SentinelConfigSchema,\n SentinelInstance,\n SentinelModuleEventData,\n SentinelParams,\n SentinelReportQuerySchema,\n} from '@xyo-network/sentinel-model'\nimport { WitnessInstance } from '@xyo-network/witness'\n\nimport { AbstractSentinel } from './AbstractSentinel'\n\nexport type MemorySentinelParams<TConfig extends SentinelConfig = SentinelConfig> = SentinelParams<TConfig>\n\nexport class MemorySentinel<\n TParams extends MemorySentinelParams = MemorySentinelParams,\n TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>,\n> extends AbstractSentinel<TParams, TEventData> {\n static override configSchemas = [SentinelConfigSchema]\n\n async reportHandler(payloads: Payload[] = []): Promise<Payload[]> {\n await this.started('throw')\n const errors: Error[] = []\n const allWitnesses = [...(await this.witnesses())]\n const resultPayloads: Payload[] = []\n\n try {\n const [generatedPayloads, generatedErrors] = await this.generateResults(allWitnesses)\n const combinedPayloads = [...generatedPayloads, ...payloads]\n resultPayloads.push(...combinedPayloads)\n errors.push(...generatedErrors)\n } catch (ex) {\n handleError(ex, (error) => {\n errors.push(error)\n })\n }\n\n const [boundWitness] = await this.bindQueryResult({ schema: SentinelReportQuerySchema }, resultPayloads)\n this.history.push(assertEx(boundWitness))\n return [boundWitness, ...resultPayloads]\n }\n\n private async generateResults(witnesses: WitnessInstance[]): Promise<[Payload[], Error[]]> {\n const results = await Promise.allSettled(witnesses?.map((witness) => witness.observe()))\n const payloads = results\n .filter(fulfilled)\n .map((result) => result.value)\n .flat()\n const errors = results\n .filter(rejected)\n .map((result) => result.reason)\n .flat()\n return [payloads, errors]\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { uniq } from '@xylabs/lodash'\nimport { AbstractArchivingModule, asArchivistInstance } from '@xyo-network/archivist'\nimport { QueryBoundWitness, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { BoundWitness, isBoundWitness, notBoundWitness } from '@xyo-network/boundwitness-model'\nimport { ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module'\nimport { Payload } from '@xyo-network/payload-model'\nimport {\n CustomSentinelInstance,\n SentinelInstance,\n SentinelModuleEventData,\n SentinelParams,\n SentinelQueryBase,\n SentinelReportQuerySchema,\n} from '@xyo-network/sentinel-model'\nimport { isWitnessInstance, WitnessInstance } from '@xyo-network/witness'\n\nexport abstract class AbstractSentinel<\n TParams extends SentinelParams = SentinelParams,\n TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>,\n >\n extends AbstractArchivingModule<TParams, TEventData>\n implements CustomSentinelInstance<TParams, TEventData>\n{\n history: BoundWitness[] = []\n\n override get queries(): string[] {\n return [SentinelReportQuerySchema, ...super.queries]\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 addArchivist(address: string[]) {\n this.config.archivists = uniq([...address, ...(this.config.archivists ?? [])])\n }\n\n addWitness(address: string[]) {\n this.config.witnesses = uniq([...address, ...(this.config.witnesses ?? [])])\n }\n\n async archivists() {\n this.logger?.debug(`archivists:config:archivist: ${this.config?.archivists?.length}`)\n const namesOrAddresses = this.config?.archivists\n ? Array.isArray(this.config.archivists)\n ? this.config?.archivists\n : [this.config.archivists]\n : undefined\n this.logger?.debug(`archivist:namesOrAddresses: ${namesOrAddresses?.length}`)\n const result = [\n ...(await this.resolve(namesOrAddresses ? { address: namesOrAddresses } : undefined)),\n ...(await this.resolve(namesOrAddresses ? { name: namesOrAddresses } : undefined)),\n ].map((module) => assertEx(asArchivistInstance(module), 'Tried to resolve a non-archivist as an archivist'))\n\n if (namesOrAddresses && namesOrAddresses.length !== result.length) {\n this.logger?.warn(`Not all archivists found [Requested: ${namesOrAddresses.length}, Found: ${result.length}]`)\n }\n\n this.logger?.debug(`archivists:result: ${result?.length}`)\n\n return result\n }\n\n removeArchivist(address: string[]) {\n this.config.archivists = (this.config.archivists ?? []).filter((archivist) => !address.includes(archivist))\n }\n\n removeWitness(address: string[]) {\n this.config.witnesses = (this.config.witnesses ?? []).filter((witness) => !address.includes(witness))\n }\n\n async report(inPayloads?: Payload[]): Promise<Payload[]> {\n this._noOverride('report')\n await this.emit('reportStart', { inPayloads, module: this })\n const payloads = await this.reportHandler(inPayloads)\n this.logger?.debug(`report:payloads: ${JSON.stringify(payloads, null, 2)}`)\n const outPayloads = payloads.filter(notBoundWitness)\n const boundwitnesses = payloads.filter(isBoundWitness)\n const boundwitness = boundwitnesses.find((bw) => bw.addresses.includes(this.address))\n await this.emit('reportEnd', { boundwitness, inPayloads, module: this, outPayloads })\n return payloads\n }\n\n async witnesses() {\n this.logger?.debug(`witnesses:config:witnesses: ${this.config?.witnesses?.length}`)\n const namesOrAddresses = this.config?.witnesses\n ? Array.isArray(this.config.witnesses)\n ? this.config?.witnesses\n : [this.config.witnesses]\n : undefined\n this.logger?.debug(`witnesses:namesOrAddresses: ${namesOrAddresses?.length}`)\n const result = namesOrAddresses\n ? [\n ...(await this.resolve<WitnessInstance>({ address: namesOrAddresses }, { identity: isWitnessInstance })),\n ...(await this.resolve<WitnessInstance>({ name: namesOrAddresses }, { identity: isWitnessInstance })),\n ]\n : await this.resolve<WitnessInstance>(undefined, { identity: isWitnessInstance })\n\n if (namesOrAddresses && namesOrAddresses.length !== result.length) {\n this.logger?.warn(`Not all witnesses found [Requested: ${namesOrAddresses.length}, Found: ${result.length}]`)\n }\n result.map((item) => {\n this.logger?.debug(`witnesses:result: ${item.config.schema}`)\n })\n\n return result\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":["import_assert","import_sentinel_model","module"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemorySentinel.d.ts","sourceRoot":"","sources":["../../src/MemorySentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EACL,cAAc,EAEd,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EAEf,MAAM,6BAA6B,CAAA;AAGpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD,MAAM,MAAM,oBAAoB,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA;AAE3G,qBAAa,cAAc,CACzB,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,EAC3D,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAC1H,SAAQ,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7C,OAAgB,aAAa,kCAAyB;IAEhD,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YAsBnD,eAAe;CAY9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemorySentinel.d.ts","sourceRoot":"","sources":["../../src/MemorySentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EACL,cAAc,EAEd,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EAEf,MAAM,6BAA6B,CAAA;AAGpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD,MAAM,MAAM,oBAAoB,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA;AAE3G,qBAAa,cAAc,CACzB,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,EAC3D,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAC1H,SAAQ,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7C,OAAgB,aAAa,kCAAyB;IAEhD,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YAsBnD,eAAe;CAY9B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Payload } from '@xyo-network/payload-model';
|
|
2
|
+
import { SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams } from '@xyo-network/sentinel-model';
|
|
3
|
+
import { AbstractSentinel } from './AbstractSentinel';
|
|
4
|
+
export type MemorySentinelParams<TConfig extends SentinelConfig = SentinelConfig> = SentinelParams<TConfig>;
|
|
5
|
+
export declare class MemorySentinel<TParams extends MemorySentinelParams = MemorySentinelParams, TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>> extends AbstractSentinel<TParams, TEventData> {
|
|
6
|
+
static configSchemas: "network.xyo.sentinel.config"[];
|
|
7
|
+
reportHandler(payloads?: Payload[]): Promise<Payload[]>;
|
|
8
|
+
private generateResults;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=MemorySentinel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemorySentinel.d.ts","sourceRoot":"","sources":["../../src/MemorySentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EACL,cAAc,EAEd,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EAEf,MAAM,6BAA6B,CAAA;AAGpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD,MAAM,MAAM,oBAAoB,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA;AAE3G,qBAAa,cAAc,CACzB,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,EAC3D,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAC1H,SAAQ,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7C,OAAgB,aAAa,kCAAyB;IAEhD,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YAsBnD,eAAe;CAY9B"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { assertEx } from "@xylabs/assert";
|
|
2
|
+
import { fulfilled, rejected } from "@xylabs/promise";
|
|
3
|
+
import { handleError } from "@xyo-network/error";
|
|
4
|
+
import {
|
|
5
|
+
SentinelConfigSchema,
|
|
6
|
+
SentinelReportQuerySchema
|
|
7
|
+
} from "@xyo-network/sentinel-model";
|
|
8
|
+
import { AbstractSentinel } from "./AbstractSentinel";
|
|
9
|
+
class MemorySentinel extends AbstractSentinel {
|
|
10
|
+
static configSchemas = [SentinelConfigSchema];
|
|
11
|
+
async reportHandler(payloads = []) {
|
|
12
|
+
await this.started("throw");
|
|
13
|
+
const errors = [];
|
|
14
|
+
const allWitnesses = [...await this.witnesses()];
|
|
15
|
+
const resultPayloads = [];
|
|
16
|
+
try {
|
|
17
|
+
const [generatedPayloads, generatedErrors] = await this.generateResults(allWitnesses);
|
|
18
|
+
const combinedPayloads = [...generatedPayloads, ...payloads];
|
|
19
|
+
resultPayloads.push(...combinedPayloads);
|
|
20
|
+
errors.push(...generatedErrors);
|
|
21
|
+
} catch (ex) {
|
|
22
|
+
handleError(ex, (error) => {
|
|
23
|
+
errors.push(error);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
const [boundWitness] = await this.bindQueryResult({ schema: SentinelReportQuerySchema }, resultPayloads);
|
|
27
|
+
this.history.push(assertEx(boundWitness));
|
|
28
|
+
return [boundWitness, ...resultPayloads];
|
|
29
|
+
}
|
|
30
|
+
async generateResults(witnesses) {
|
|
31
|
+
const results = await Promise.allSettled(witnesses?.map((witness) => witness.observe()));
|
|
32
|
+
const payloads = results.filter(fulfilled).map((result) => result.value).flat();
|
|
33
|
+
const errors = results.filter(rejected).map((result) => result.reason).flat();
|
|
34
|
+
return [payloads, errors];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export {
|
|
38
|
+
MemorySentinel
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=MemorySentinel.js.map
|