@xyo-network/abstract-witness 2.68.0 → 2.69.0-rc.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/cjs/AbstractWitness.js +19 -33
- package/dist/cjs/AbstractWitness.js.map +1 -1
- package/dist/esm/AbstractWitness.js +20 -33
- package/dist/esm/AbstractWitness.js.map +1 -1
- package/dist/types/AbstractWitness.d.ts +8 -5
- package/dist/types/AbstractWitness.d.ts.map +1 -1
- package/package.json +8 -9
- package/src/AbstractWitness.ts +26 -37
|
@@ -3,10 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.AbstractWitness = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const assert_1 = require("@xylabs/assert");
|
|
6
|
-
const account_1 = require("@xyo-network/account");
|
|
7
6
|
const boundwitness_builder_1 = require("@xyo-network/boundwitness-builder");
|
|
8
7
|
const core_1 = require("@xyo-network/core");
|
|
9
|
-
const error_1 = require("@xyo-network/error");
|
|
10
8
|
const module_1 = require("@xyo-network/module");
|
|
11
9
|
const witness_model_1 = require("@xyo-network/witness-model");
|
|
12
10
|
(0, module_1.creatableModule)();
|
|
@@ -23,15 +21,19 @@ class AbstractWitness extends module_1.AbstractModuleInstance {
|
|
|
23
21
|
'network.xyo.query.witness.observe': '1/1',
|
|
24
22
|
};
|
|
25
23
|
}
|
|
26
|
-
observe
|
|
24
|
+
/** @function observe The main entry point for a witness. Do not override this function. Implement/override observeHandler for custom functionality */
|
|
25
|
+
observe(inPayloads) {
|
|
27
26
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
28
27
|
yield this.started('throw');
|
|
29
|
-
|
|
30
|
-
(0, assert_1.assertEx)(
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
yield this.emit('observeStart', { inPayloads: inPayloads, module: this });
|
|
29
|
+
const outPayloads = (0, assert_1.assertEx)(yield this.observeHandler(inPayloads), 'Trying to witness nothing');
|
|
30
|
+
(0, assert_1.assertEx)(outPayloads.length > 0, 'Trying to witness empty list');
|
|
31
|
+
outPayloads === null || outPayloads === void 0 ? void 0 : outPayloads.forEach((payload) => (0, assert_1.assertEx)(payload.schema, 'observe: Missing Schema'));
|
|
32
|
+
yield this.emit('observeEnd', { inPayloads, module: this, outPayloads });
|
|
33
|
+
return outPayloads;
|
|
33
34
|
});
|
|
34
35
|
}
|
|
36
|
+
/** @function queryHandler Calls observe for an observe query. Override to support additional queries. */
|
|
35
37
|
queryHandler(query, payloads, queryConfig) {
|
|
36
38
|
const _super = Object.create(null, {
|
|
37
39
|
queryHandler: { get: () => super.queryHandler }
|
|
@@ -40,36 +42,20 @@ class AbstractWitness extends module_1.AbstractModuleInstance {
|
|
|
40
42
|
const wrapper = boundwitness_builder_1.QueryBoundWitnessWrapper.parseQuery(query, payloads);
|
|
41
43
|
const queryPayload = yield wrapper.getQuery();
|
|
42
44
|
(0, assert_1.assertEx)(this.queryable(query, payloads, queryConfig));
|
|
45
|
+
const resultPayloads = [];
|
|
43
46
|
// Remove the query payload from the arguments passed to us so we don't observe it
|
|
44
47
|
const filteredObservation = yield core_1.PayloadHasher.filterExclude(payloads, query.query);
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
default: {
|
|
55
|
-
return _super.queryHandler.call(this, query, payloads);
|
|
56
|
-
}
|
|
48
|
+
switch (queryPayload.schema) {
|
|
49
|
+
case witness_model_1.WitnessObserveQuerySchema: {
|
|
50
|
+
const observePayloads = yield this.observe(filteredObservation);
|
|
51
|
+
resultPayloads.push(...observePayloads);
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
default: {
|
|
55
|
+
return _super.queryHandler.call(this, query, payloads);
|
|
57
56
|
}
|
|
58
57
|
}
|
|
59
|
-
|
|
60
|
-
return (0, error_1.handleErrorAsync)(ex, (error) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
61
|
-
var _a;
|
|
62
|
-
const [result] = yield this.bindQueryResult(queryPayload, [], queryAccount ? [queryAccount] : [], [
|
|
63
|
-
new module_1.ModuleErrorBuilder()
|
|
64
|
-
.sources([yield wrapper.hashAsync()])
|
|
65
|
-
.name((_a = this.config.name) !== null && _a !== void 0 ? _a : '<Unknown>')
|
|
66
|
-
.query(query.schema)
|
|
67
|
-
.message(error.message)
|
|
68
|
-
.build(),
|
|
69
|
-
]);
|
|
70
|
-
return result;
|
|
71
|
-
}));
|
|
72
|
-
}
|
|
58
|
+
return resultPayloads;
|
|
73
59
|
});
|
|
74
60
|
}
|
|
75
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractWitness.js","sourceRoot":"","sources":["../../src/AbstractWitness.ts"],"names":[],"mappings":";;;;AAAA,2CAAyC;AACzC,
|
|
1
|
+
{"version":3,"file":"AbstractWitness.js","sourceRoot":"","sources":["../../src/AbstractWitness.ts"],"names":[],"mappings":";;;;AAAA,2CAAyC;AACzC,4EAA+F;AAC/F,4CAAiD;AACjD,gDAAqH;AAGrH,8DASmC;AAEnC,IAAA,wBAAe,GAAE,CAAA;AACjB,MAAsB,eAIpB,SAAQ,+BAA2C;IAKnD,IAAa,OAAO;QAClB,OAAO,CAAC,yCAAyB,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAA;IACtD,CAAC;IAED,IAAI,SAAS;;QACX,OAAO,MAAA,IAAI,CAAC,MAAM,0CAAE,SAAS,CAAA;IAC/B,CAAC;IAED,IAAuB,kBAAkB;QACvC,OAAO;YACL,mCAAmC,EAAE,KAAK;SAC3C,CAAA;IACH,CAAC;IAED,wJAAwJ;IAClJ,OAAO,CAAC,UAAsB;;YAClC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YAC3B,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;YACzE,MAAM,WAAW,GAAG,IAAA,iBAAQ,EAAC,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,2BAA2B,CAAC,CAAA;YAChG,IAAA,iBAAQ,EAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,8BAA8B,CAAC,CAAA;YAChE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAA,iBAAQ,EAAC,OAAO,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAAA;YACtF,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAA;YACxE,OAAO,WAAW,CAAA;QACpB,CAAC;KAAA;IAED,0GAA0G;IACjF,YAAY,CACnC,KAAQ,EACR,QAAoB,EACpB,WAAqB;;;;;YAErB,MAAM,OAAO,GAAG,+CAAwB,CAAC,UAAU,CAAe,KAAK,EAAE,QAAQ,CAAC,CAAA;YAClF,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAA;YAC7C,IAAA,iBAAQ,EAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAA;YACtD,MAAM,cAAc,GAAc,EAAE,CAAA;YACpC,kFAAkF;YAClF,MAAM,mBAAmB,GAAG,MAAM,oBAAa,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;YACpF,QAAQ,YAAY,CAAC,MAAM,EAAE;gBAC3B,KAAK,yCAAyB,CAAC,CAAC;oBAC9B,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;oBAC/D,cAAc,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAA;oBACvC,MAAK;iBACN;gBACD,OAAO,CAAC,CAAC;oBACP,OAAO,OAAM,YAAY,YAAC,KAAK,EAAE,QAAQ,EAAC;iBAC3C;aACF;YACD,OAAO,cAAc,CAAA;QACvB,CAAC;KAAA;;AAzDH,0CA6DC;AAtD0B,6BAAa,GAAa,CAAC,mCAAmB,CAAC,CAAA"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert';
|
|
2
|
-
import { HDWallet } from '@xyo-network/account';
|
|
3
2
|
import { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder';
|
|
4
3
|
import { PayloadHasher } from '@xyo-network/core';
|
|
5
|
-
import {
|
|
6
|
-
import { AbstractModuleInstance, creatableModule, ModuleErrorBuilder } from '@xyo-network/module';
|
|
4
|
+
import { AbstractModuleInstance, creatableModule } from '@xyo-network/module';
|
|
7
5
|
import { WitnessConfigSchema, WitnessObserveQuerySchema, } from '@xyo-network/witness-model';
|
|
8
6
|
creatableModule();
|
|
9
7
|
export class AbstractWitness extends AbstractModuleInstance {
|
|
@@ -19,46 +17,35 @@ export class AbstractWitness extends AbstractModuleInstance {
|
|
|
19
17
|
'network.xyo.query.witness.observe': '1/1',
|
|
20
18
|
};
|
|
21
19
|
}
|
|
22
|
-
|
|
20
|
+
/** @function observe The main entry point for a witness. Do not override this function. Implement/override observeHandler for custom functionality */
|
|
21
|
+
async observe(inPayloads) {
|
|
23
22
|
await this.started('throw');
|
|
24
|
-
|
|
25
|
-
assertEx(
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
await this.emit('observeStart', { inPayloads: inPayloads, module: this });
|
|
24
|
+
const outPayloads = assertEx(await this.observeHandler(inPayloads), 'Trying to witness nothing');
|
|
25
|
+
assertEx(outPayloads.length > 0, 'Trying to witness empty list');
|
|
26
|
+
outPayloads?.forEach((payload) => assertEx(payload.schema, 'observe: Missing Schema'));
|
|
27
|
+
await this.emit('observeEnd', { inPayloads, module: this, outPayloads });
|
|
28
|
+
return outPayloads;
|
|
28
29
|
}
|
|
30
|
+
/** @function queryHandler Calls observe for an observe query. Override to support additional queries. */
|
|
29
31
|
async queryHandler(query, payloads, queryConfig) {
|
|
30
32
|
const wrapper = QueryBoundWitnessWrapper.parseQuery(query, payloads);
|
|
31
33
|
const queryPayload = await wrapper.getQuery();
|
|
32
34
|
assertEx(this.queryable(query, payloads, queryConfig));
|
|
35
|
+
const resultPayloads = [];
|
|
33
36
|
// Remove the query payload from the arguments passed to us so we don't observe it
|
|
34
37
|
const filteredObservation = await PayloadHasher.filterExclude(payloads, query.query);
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
default: {
|
|
45
|
-
return super.queryHandler(query, payloads);
|
|
46
|
-
}
|
|
38
|
+
switch (queryPayload.schema) {
|
|
39
|
+
case WitnessObserveQuerySchema: {
|
|
40
|
+
const observePayloads = await this.observe(filteredObservation);
|
|
41
|
+
resultPayloads.push(...observePayloads);
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
default: {
|
|
45
|
+
return super.queryHandler(query, payloads);
|
|
47
46
|
}
|
|
48
47
|
}
|
|
49
|
-
|
|
50
|
-
return handleErrorAsync(ex, async (error) => {
|
|
51
|
-
const [result] = await this.bindQueryResult(queryPayload, [], queryAccount ? [queryAccount] : [], [
|
|
52
|
-
new ModuleErrorBuilder()
|
|
53
|
-
.sources([await wrapper.hashAsync()])
|
|
54
|
-
.name(this.config.name ?? '<Unknown>')
|
|
55
|
-
.query(query.schema)
|
|
56
|
-
.message(error.message)
|
|
57
|
-
.build(),
|
|
58
|
-
]);
|
|
59
|
-
return result;
|
|
60
|
-
});
|
|
61
|
-
}
|
|
48
|
+
return resultPayloads;
|
|
62
49
|
}
|
|
63
50
|
}
|
|
64
51
|
//# sourceMappingURL=AbstractWitness.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractWitness.js","sourceRoot":"","sources":["../../src/AbstractWitness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"AbstractWitness.js","sourceRoot":"","sources":["../../src/AbstractWitness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAqB,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AAC/F,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAA0C,MAAM,qBAAqB,CAAA;AAGrH,OAAO,EAEL,mBAAmB,EAGnB,yBAAyB,GAI1B,MAAM,4BAA4B,CAAA;AAEnC,eAAe,EAAE,CAAA;AACjB,MAAM,OAAgB,eAIpB,SAAQ,sBAA2C;IAGnD,MAAM,CAAmB,aAAa,GAAa,CAAC,mBAAmB,CAAC,CAAA;IAExE,IAAa,OAAO;QAClB,OAAO,CAAC,yBAAyB,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAA;IACtD,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,MAAM,EAAE,SAAS,CAAA;IAC/B,CAAC;IAED,IAAuB,kBAAkB;QACvC,OAAO;YACL,mCAAmC,EAAE,KAAK;SAC3C,CAAA;IACH,CAAC;IAED,wJAAwJ;IACxJ,KAAK,CAAC,OAAO,CAAC,UAAsB;QAClC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC3B,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;QACzE,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,2BAA2B,CAAC,CAAA;QAChG,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,8BAA8B,CAAC,CAAA;QAChE,WAAW,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAAA;QACtF,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAA;QACxE,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,0GAA0G;IACvF,KAAK,CAAC,YAAY,CACnC,KAAQ,EACR,QAAoB,EACpB,WAAqB;QAErB,MAAM,OAAO,GAAG,wBAAwB,CAAC,UAAU,CAAe,KAAK,EAAE,QAAQ,CAAC,CAAA;QAClF,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAA;QAC7C,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAA;QACtD,MAAM,cAAc,GAAc,EAAE,CAAA;QACpC,kFAAkF;QAClF,MAAM,mBAAmB,GAAG,MAAM,aAAa,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;QACpF,QAAQ,YAAY,CAAC,MAAM,EAAE;YAC3B,KAAK,yBAAyB,CAAC,CAAC;gBAC9B,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;gBAC/D,cAAc,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAA;gBACvC,MAAK;aACN;YACD,OAAO,CAAC,CAAC;gBACP,OAAO,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;aAC3C;SACF;QACD,OAAO,cAAc,CAAA;IACvB,CAAC"}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import { QueryBoundWitness } from '@xyo-network/boundwitness-builder';
|
|
2
|
-
import { AbstractModuleInstance, ModuleConfig,
|
|
2
|
+
import { AbstractModuleInstance, ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module';
|
|
3
3
|
import { Payload } from '@xyo-network/payload-model';
|
|
4
4
|
import { Promisable } from '@xyo-network/promise';
|
|
5
|
-
import {
|
|
6
|
-
export declare abstract class AbstractWitness<TParams extends WitnessParams = WitnessParams, TEventData extends WitnessModuleEventData<
|
|
5
|
+
import { CustomWitnessInstance, WitnessInstance, WitnessModuleEventData, WitnessParams, WitnessQueryBase } from '@xyo-network/witness-model';
|
|
6
|
+
export declare abstract class AbstractWitness<TParams extends WitnessParams = WitnessParams, TEventData extends WitnessModuleEventData<WitnessInstance<TParams>> = WitnessModuleEventData<WitnessInstance<TParams>>> extends AbstractModuleInstance<TParams, TEventData> implements CustomWitnessInstance<TParams, TEventData> {
|
|
7
7
|
static readonly configSchemas: string[];
|
|
8
8
|
get queries(): string[];
|
|
9
9
|
get targetSet(): (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
10
10
|
schema: "network.xyo.payload.set";
|
|
11
11
|
}) | undefined;
|
|
12
12
|
protected get _queryAccountPaths(): Record<WitnessQueryBase['schema'], string>;
|
|
13
|
-
observe
|
|
14
|
-
|
|
13
|
+
/** @function observe The main entry point for a witness. Do not override this function. Implement/override observeHandler for custom functionality */
|
|
14
|
+
observe(inPayloads?: Payload[]): Promise<Payload[]>;
|
|
15
|
+
/** @function queryHandler Calls observe for an observe query. Override to support additional queries. */
|
|
16
|
+
protected queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(query: T, payloads?: Payload[], queryConfig?: TConfig): Promise<ModuleQueryHandlerResult>;
|
|
17
|
+
/** @function observeHandler Implement or override to add custom functionality to a witness */
|
|
15
18
|
protected abstract observeHandler(payloads?: Payload[]): Promisable<Payload[]>;
|
|
16
19
|
}
|
|
17
20
|
//# sourceMappingURL=AbstractWitness.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractWitness.d.ts","sourceRoot":"","sources":["../../src/AbstractWitness.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AbstractWitness.d.ts","sourceRoot":"","sources":["../../src/AbstractWitness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAA4B,MAAM,mCAAmC,CAAA;AAE/F,OAAO,EAAE,sBAAsB,EAAmB,YAAY,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AACrH,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EACL,qBAAqB,EAErB,eAAe,EACf,sBAAsB,EAEtB,aAAa,EAEb,gBAAgB,EACjB,MAAM,4BAA4B,CAAA;AAGnC,8BAAsB,eAAe,CACjC,OAAO,SAAS,aAAa,GAAG,aAAa,EAC7C,UAAU,SAAS,sBAAsB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,sBAAsB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAExH,SAAQ,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAClD,YAAW,qBAAqB,CAAC,OAAO,EAAE,UAAU,CAAC;IAErD,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAwB;IAExE,IAAa,OAAO,IAAI,MAAM,EAAE,CAE/B;IAED,IAAI,SAAS;;mBAEZ;IAED,cAAuB,kBAAkB,IAAI,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAItF;IAED,wJAAwJ;IAClJ,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAUzD,0GAA0G;cACjF,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;IAoBpC,8FAA8F;IAC9F,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;CAC/E"}
|
package/package.json
CHANGED
|
@@ -11,14 +11,12 @@
|
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@xylabs/assert": "^2.9.3",
|
|
14
|
-
"@xyo-network/
|
|
15
|
-
"@xyo-network/
|
|
16
|
-
"@xyo-network/
|
|
17
|
-
"@xyo-network/
|
|
18
|
-
"@xyo-network/
|
|
19
|
-
"@xyo-network/
|
|
20
|
-
"@xyo-network/promise": "~2.68.0",
|
|
21
|
-
"@xyo-network/witness-model": "~2.68.0"
|
|
14
|
+
"@xyo-network/boundwitness-builder": "~2.69.0-rc.2",
|
|
15
|
+
"@xyo-network/core": "~2.69.0-rc.2",
|
|
16
|
+
"@xyo-network/module": "~2.69.0-rc.2",
|
|
17
|
+
"@xyo-network/payload-model": "~2.69.0-rc.2",
|
|
18
|
+
"@xyo-network/promise": "~2.69.0-rc.2",
|
|
19
|
+
"@xyo-network/witness-model": "~2.69.0-rc.2"
|
|
22
20
|
},
|
|
23
21
|
"devDependencies": {
|
|
24
22
|
"@xylabs/ts-scripts-yarn3": "^2.19.0",
|
|
@@ -58,5 +56,6 @@
|
|
|
58
56
|
},
|
|
59
57
|
"sideEffects": false,
|
|
60
58
|
"types": "dist/types/index.d.ts",
|
|
61
|
-
"version": "2.
|
|
59
|
+
"version": "2.69.0-rc.2",
|
|
60
|
+
"stableVersion": "2.68.0"
|
|
62
61
|
}
|
package/src/AbstractWitness.ts
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
|
-
import { HDWallet } from '@xyo-network/account'
|
|
3
2
|
import { QueryBoundWitness, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'
|
|
4
3
|
import { PayloadHasher } from '@xyo-network/core'
|
|
5
|
-
import {
|
|
6
|
-
import { AbstractModuleInstance, creatableModule, ModuleConfig, ModuleErrorBuilder, ModuleQueryResult } from '@xyo-network/module'
|
|
4
|
+
import { AbstractModuleInstance, creatableModule, ModuleConfig, ModuleQueryHandlerResult } from '@xyo-network/module'
|
|
7
5
|
import { Payload } from '@xyo-network/payload-model'
|
|
8
6
|
import { Promisable } from '@xyo-network/promise'
|
|
9
7
|
import {
|
|
10
|
-
|
|
8
|
+
CustomWitnessInstance,
|
|
11
9
|
WitnessConfigSchema,
|
|
12
|
-
|
|
10
|
+
WitnessInstance,
|
|
13
11
|
WitnessModuleEventData,
|
|
14
12
|
WitnessObserveQuerySchema,
|
|
15
13
|
WitnessParams,
|
|
@@ -20,10 +18,10 @@ import {
|
|
|
20
18
|
creatableModule()
|
|
21
19
|
export abstract class AbstractWitness<
|
|
22
20
|
TParams extends WitnessParams = WitnessParams,
|
|
23
|
-
TEventData extends WitnessModuleEventData<
|
|
21
|
+
TEventData extends WitnessModuleEventData<WitnessInstance<TParams>> = WitnessModuleEventData<WitnessInstance<TParams>>,
|
|
24
22
|
>
|
|
25
23
|
extends AbstractModuleInstance<TParams, TEventData>
|
|
26
|
-
implements
|
|
24
|
+
implements CustomWitnessInstance<TParams, TEventData>
|
|
27
25
|
{
|
|
28
26
|
static override readonly configSchemas: string[] = [WitnessConfigSchema]
|
|
29
27
|
|
|
@@ -41,51 +39,42 @@ export abstract class AbstractWitness<
|
|
|
41
39
|
}
|
|
42
40
|
}
|
|
43
41
|
|
|
44
|
-
|
|
42
|
+
/** @function observe The main entry point for a witness. Do not override this function. Implement/override observeHandler for custom functionality */
|
|
43
|
+
async observe(inPayloads?: Payload[]): Promise<Payload[]> {
|
|
45
44
|
await this.started('throw')
|
|
46
|
-
|
|
47
|
-
assertEx(
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
await this.emit('observeStart', { inPayloads: inPayloads, module: this })
|
|
46
|
+
const outPayloads = assertEx(await this.observeHandler(inPayloads), 'Trying to witness nothing')
|
|
47
|
+
assertEx(outPayloads.length > 0, 'Trying to witness empty list')
|
|
48
|
+
outPayloads?.forEach((payload) => assertEx(payload.schema, 'observe: Missing Schema'))
|
|
49
|
+
await this.emit('observeEnd', { inPayloads, module: this, outPayloads })
|
|
50
|
+
return outPayloads
|
|
50
51
|
}
|
|
51
52
|
|
|
53
|
+
/** @function queryHandler Calls observe for an observe query. Override to support additional queries. */
|
|
52
54
|
protected override async queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(
|
|
53
55
|
query: T,
|
|
54
56
|
payloads?: Payload[],
|
|
55
57
|
queryConfig?: TConfig,
|
|
56
|
-
): Promise<
|
|
58
|
+
): Promise<ModuleQueryHandlerResult> {
|
|
57
59
|
const wrapper = QueryBoundWitnessWrapper.parseQuery<WitnessQuery>(query, payloads)
|
|
58
60
|
const queryPayload = await wrapper.getQuery()
|
|
59
61
|
assertEx(this.queryable(query, payloads, queryConfig))
|
|
62
|
+
const resultPayloads: Payload[] = []
|
|
60
63
|
// Remove the query payload from the arguments passed to us so we don't observe it
|
|
61
64
|
const filteredObservation = await PayloadHasher.filterExclude(payloads, query.query)
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
default: {
|
|
72
|
-
return super.queryHandler(query, payloads)
|
|
73
|
-
}
|
|
65
|
+
switch (queryPayload.schema) {
|
|
66
|
+
case WitnessObserveQuerySchema: {
|
|
67
|
+
const observePayloads = await this.observe(filteredObservation)
|
|
68
|
+
resultPayloads.push(...observePayloads)
|
|
69
|
+
break
|
|
70
|
+
}
|
|
71
|
+
default: {
|
|
72
|
+
return super.queryHandler(query, payloads)
|
|
74
73
|
}
|
|
75
|
-
} catch (ex) {
|
|
76
|
-
return handleErrorAsync(ex, async (error) => {
|
|
77
|
-
const [result] = await this.bindQueryResult(queryPayload, [], queryAccount ? [queryAccount] : [], [
|
|
78
|
-
new ModuleErrorBuilder()
|
|
79
|
-
.sources([await wrapper.hashAsync()])
|
|
80
|
-
.name(this.config.name ?? '<Unknown>')
|
|
81
|
-
.query(query.schema)
|
|
82
|
-
.message(error.message)
|
|
83
|
-
.build(),
|
|
84
|
-
])
|
|
85
|
-
return result
|
|
86
|
-
})
|
|
87
74
|
}
|
|
75
|
+
return resultPayloads
|
|
88
76
|
}
|
|
89
77
|
|
|
78
|
+
/** @function observeHandler Implement or override to add custom functionality to a witness */
|
|
90
79
|
protected abstract observeHandler(payloads?: Payload[]): Promisable<Payload[]>
|
|
91
80
|
}
|