@xyo-network/module-abstract 2.59.0 → 2.60.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/AbstractModule.js +9 -6
- package/dist/cjs/AbstractModule.js.map +1 -1
- package/dist/cjs/Query/QueryBoundWitnessBuilder.js +9 -3
- package/dist/cjs/Query/QueryBoundWitnessBuilder.js.map +1 -1
- package/dist/cjs/Query/QueryBoundWitnessValidator.js +32 -24
- package/dist/cjs/Query/QueryBoundWitnessValidator.js.map +1 -1
- package/dist/cjs/Query/QueryBoundWitnessWrapper.js +37 -21
- package/dist/cjs/Query/QueryBoundWitnessWrapper.js.map +1 -1
- package/dist/cjs/QueryValidator/ModuleConfigQueryValidator.js +4 -3
- package/dist/cjs/QueryValidator/ModuleConfigQueryValidator.js.map +1 -1
- package/dist/cjs/QueryValidator/SupportedQueryValidator.js +4 -3
- package/dist/cjs/QueryValidator/SupportedQueryValidator.js.map +1 -1
- package/dist/docs.json +8856 -5776
- package/dist/esm/AbstractModule.js +9 -6
- package/dist/esm/AbstractModule.js.map +1 -1
- package/dist/esm/Query/QueryBoundWitnessBuilder.js +8 -4
- package/dist/esm/Query/QueryBoundWitnessBuilder.js.map +1 -1
- package/dist/esm/Query/QueryBoundWitnessValidator.js +5 -5
- package/dist/esm/Query/QueryBoundWitnessValidator.js.map +1 -1
- package/dist/esm/Query/QueryBoundWitnessWrapper.js +26 -20
- package/dist/esm/Query/QueryBoundWitnessWrapper.js.map +1 -1
- package/dist/esm/QueryValidator/ModuleConfigQueryValidator.js +2 -2
- package/dist/esm/QueryValidator/ModuleConfigQueryValidator.js.map +1 -1
- package/dist/esm/QueryValidator/SupportedQueryValidator.js +2 -2
- package/dist/esm/QueryValidator/SupportedQueryValidator.js.map +1 -1
- package/dist/types/AbstractModule.d.ts.map +1 -1
- package/dist/types/Query/QueryBoundWitnessBuilder.d.ts +1 -1
- package/dist/types/Query/QueryBoundWitnessBuilder.d.ts.map +1 -1
- package/dist/types/Query/QueryBoundWitnessValidator.d.ts +2 -2
- package/dist/types/Query/QueryBoundWitnessValidator.d.ts.map +1 -1
- package/dist/types/Query/QueryBoundWitnessWrapper.d.ts +6 -4
- package/dist/types/Query/QueryBoundWitnessWrapper.d.ts.map +1 -1
- package/dist/types/QueryValidator/QueryValidator.d.ts +2 -1
- package/dist/types/QueryValidator/QueryValidator.d.ts.map +1 -1
- package/dist/types/QueryValidator/SupportedQueryValidator.d.ts +1 -1
- package/dist/types/QueryValidator/SupportedQueryValidator.d.ts.map +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/AbstractModule.html +52 -52
- package/docs/classes/BaseEmitter.html +13 -13
- package/docs/classes/CompositeModuleResolver.html +14 -14
- package/docs/classes/ModuleConfigQueryValidator.html +10 -10
- package/docs/classes/ModuleErrorBuilder.html +10 -10
- package/docs/classes/ModuleFactory.html +9 -9
- package/docs/classes/QueryBoundWitnessBuilder.html +17 -28
- package/docs/classes/QueryBoundWitnessValidator.html +27 -38
- package/docs/classes/QueryBoundWitnessWrapper.html +495 -186
- package/docs/classes/SimpleModuleResolver.html +16 -16
- package/docs/classes/SupportedQueryValidator.html +4 -4
- package/docs/functions/duplicateModules.html +1 -1
- package/docs/functions/isQuerySupportedByModule.html +3 -3
- package/docs/functions/mixinResolverEventEmitter.html +1 -1
- package/docs/functions/serializable.html +1 -1
- package/docs/functions/serializableField.html +1 -1
- package/docs/interfaces/CreatableModuleDictionary.html +1 -1
- package/docs/interfaces/ModuleResolvedEventArgs.html +3 -3
- package/docs/interfaces/QueryValidator.html +2 -2
- package/docs/interfaces/ResolverEventEmitter.html +2 -2
- package/docs/types/ModuleError.html +1 -1
- package/docs/types/ModuleErrorSchema.html +2 -2
- package/docs/types/Queryable.html +4 -4
- package/docs/types/SortedPipedAddressesString.html +1 -1
- package/docs/variables/ModuleErrorSchema-1.html +2 -2
- package/package.json +20 -19
- package/src/AbstractModule.ts +11 -6
- package/src/Query/QueryBoundWitnessBuilder.ts +8 -4
- package/src/Query/QueryBoundWitnessValidator.ts +5 -5
- package/src/Query/QueryBoundWitnessWrapper.ts +40 -30
- package/src/QueryValidator/ModuleConfigQueryValidator.ts +2 -2
- package/src/QueryValidator/QueryValidator.ts +2 -1
- package/src/QueryValidator/SupportedQueryValidator.ts +6 -2
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<h1>Type alias ModuleError</h1></div>
|
|
18
18
|
<div class="tsd-signature"><span class="tsd-kind-type-alias">Module<wbr/>Error</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type ">Payload</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-symbol">{ </span><br/><span> </span><span class="tsd-kind-property">message</span><span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span><br/><span> </span><span class="tsd-kind-property">schema</span><span class="tsd-signature-symbol">: </span><a href="../variables/ModuleErrorSchema-1.html" class="tsd-signature-type tsd-kind-variable">ModuleErrorSchema</a><span class="tsd-signature-symbol">; </span><br/><span> </span><span class="tsd-kind-property">sources</span><span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">; </span><br/><span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">></span></div><aside class="tsd-sources">
|
|
19
19
|
<ul>
|
|
20
|
-
<li>Defined in <a href="https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
20
|
+
<li>Defined in <a href="https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/07894923abf1/packages/modules/packages/module/packages/abstract/src/Error.ts#L7">modules/packages/module/packages/abstract/src/Error.ts:7</a></li></ul></aside></div>
|
|
21
21
|
<div class="col-sidebar">
|
|
22
22
|
<div class="page-menu">
|
|
23
23
|
<div class="tsd-navigation settings">
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
<h1>Type alias ModuleErrorSchema</h1></div>
|
|
18
18
|
<div class="tsd-signature"><span class="tsd-kind-type-alias">Module<wbr/>Error<wbr/>Schema</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">"network.xyo.error.module"</span></div><aside class="tsd-sources">
|
|
19
19
|
<ul>
|
|
20
|
-
<li>Defined in <a href="https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
21
|
-
<li>Defined in <a href="https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
20
|
+
<li>Defined in <a href="https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/07894923abf1/packages/modules/packages/module/packages/abstract/src/Error.ts#L4">modules/packages/module/packages/abstract/src/Error.ts:4</a></li>
|
|
21
|
+
<li>Defined in <a href="https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/07894923abf1/packages/modules/packages/module/packages/abstract/src/Error.ts#L5">modules/packages/module/packages/abstract/src/Error.ts:5</a></li></ul></aside></div>
|
|
22
22
|
<div class="col-sidebar">
|
|
23
23
|
<div class="page-menu">
|
|
24
24
|
<div class="tsd-navigation settings">
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
<li><a href="../modules.html">@xyo-network/module-abstract</a></li>
|
|
16
16
|
<li><a href="Queryable.html">Queryable</a></li></ul>
|
|
17
17
|
<h1>Type alias Queryable<T></h1></div>
|
|
18
|
-
<div class="tsd-signature"><span class="tsd-kind-type-alias">Queryable</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type tsd-kind-type-parameter">T</span><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">query</span>, <span class="tsd-kind-parameter">payloads</span><span class="tsd-signature-symbol">?</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">)</span></div>
|
|
18
|
+
<div class="tsd-signature"><span class="tsd-kind-type-alias">Queryable</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type tsd-kind-type-parameter">T</span><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">query</span>, <span class="tsd-kind-parameter">payloads</span><span class="tsd-signature-symbol">?</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-type ">Promisable</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span></div>
|
|
19
19
|
<section class="tsd-panel">
|
|
20
20
|
<h4>Type Parameters</h4>
|
|
21
21
|
<ul class="tsd-type-parameter-list">
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
<ul class="tsd-parameters">
|
|
27
27
|
<li class="tsd-parameter-signature">
|
|
28
28
|
<ul class="tsd-signatures">
|
|
29
|
-
<li class="tsd-signature" id="__type.__type-1"><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">query</span>, <span class="tsd-kind-parameter">payloads</span><span class="tsd-signature-symbol">?</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">boolean</span></li>
|
|
29
|
+
<li class="tsd-signature" id="__type.__type-1"><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">query</span>, <span class="tsd-kind-parameter">payloads</span><span class="tsd-signature-symbol">?</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type ">Promisable</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">></span></li>
|
|
30
30
|
<li class="tsd-description">
|
|
31
31
|
<div class="tsd-parameters">
|
|
32
32
|
<h4 class="tsd-parameters-title">Parameters</h4>
|
|
@@ -35,9 +35,9 @@
|
|
|
35
35
|
<h5><span class="tsd-kind-parameter">query</span>: <span class="tsd-signature-type tsd-kind-type-parameter">T</span></h5></li>
|
|
36
36
|
<li>
|
|
37
37
|
<h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">payloads</span>: <span class="tsd-signature-type ">Payload</span><span class="tsd-signature-symbol">[]</span></h5></li></ul></div>
|
|
38
|
-
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4></li></ul></li></ul></div><aside class="tsd-sources">
|
|
38
|
+
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promisable</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">></span></h4></li></ul></li></ul></div><aside class="tsd-sources">
|
|
39
39
|
<ul>
|
|
40
|
-
<li>Defined in <a href="https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
40
|
+
<li>Defined in <a href="https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/07894923abf1/packages/modules/packages/module/packages/abstract/src/QueryValidator/QueryValidator.ts#L5">modules/packages/module/packages/abstract/src/QueryValidator/QueryValidator.ts:5</a></li></ul></aside></div>
|
|
41
41
|
<div class="col-sidebar">
|
|
42
42
|
<div class="page-menu">
|
|
43
43
|
<div class="tsd-navigation settings">
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<h1>Type alias SortedPipedAddressesString</h1></div>
|
|
18
18
|
<div class="tsd-signature"><span class="tsd-kind-type-alias">Sorted<wbr/>Piped<wbr/>Addresses<wbr/>String</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div><aside class="tsd-sources">
|
|
19
19
|
<ul>
|
|
20
|
-
<li>Defined in <a href="https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
20
|
+
<li>Defined in <a href="https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/07894923abf1/packages/modules/packages/module/packages/abstract/src/QueryValidator/ModuleConfigQueryValidator.ts#L6">modules/packages/module/packages/abstract/src/QueryValidator/ModuleConfigQueryValidator.ts:6</a></li></ul></aside></div>
|
|
21
21
|
<div class="col-sidebar">
|
|
22
22
|
<div class="page-menu">
|
|
23
23
|
<div class="tsd-navigation settings">
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
<h1>Variable ModuleErrorSchema</h1></div>
|
|
18
18
|
<div class="tsd-signature"><span class="tsd-kind-variable">Module<wbr/>Error<wbr/>Schema</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">"network.xyo.error.module"</span></div><aside class="tsd-sources">
|
|
19
19
|
<ul>
|
|
20
|
-
<li>Defined in <a href="https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
21
|
-
<li>Defined in <a href="https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
20
|
+
<li>Defined in <a href="https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/07894923abf1/packages/modules/packages/module/packages/abstract/src/Error.ts#L4">modules/packages/module/packages/abstract/src/Error.ts:4</a></li>
|
|
21
|
+
<li>Defined in <a href="https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/07894923abf1/packages/modules/packages/module/packages/abstract/src/Error.ts#L5">modules/packages/module/packages/abstract/src/Error.ts:5</a></li></ul></aside></div>
|
|
22
22
|
<div class="col-sidebar">
|
|
23
23
|
<div class="page-menu">
|
|
24
24
|
<div class="tsd-navigation settings">
|
package/package.json
CHANGED
|
@@ -13,24 +13,24 @@
|
|
|
13
13
|
"@xylabs/assert": "^2.8.1",
|
|
14
14
|
"@xylabs/exists": "^2.8.1",
|
|
15
15
|
"@xylabs/promise": "^2.8.1",
|
|
16
|
-
"@xyo-network/account": "^2.
|
|
17
|
-
"@xyo-network/account-model": "^2.
|
|
18
|
-
"@xyo-network/address-payload-plugin": "^2.
|
|
19
|
-
"@xyo-network/archivist-model": "^2.
|
|
20
|
-
"@xyo-network/boundwitness-builder": "^2.
|
|
21
|
-
"@xyo-network/boundwitness-model": "^2.
|
|
22
|
-
"@xyo-network/boundwitness-validator": "^2.
|
|
23
|
-
"@xyo-network/boundwitness-wrapper": "^2.
|
|
24
|
-
"@xyo-network/config-payload-plugin": "^2.
|
|
25
|
-
"@xyo-network/core": "^2.
|
|
26
|
-
"@xyo-network/module-events": "^2.
|
|
27
|
-
"@xyo-network/module-model": "^2.
|
|
28
|
-
"@xyo-network/payload-builder": "^2.
|
|
29
|
-
"@xyo-network/payload-model": "^2.
|
|
30
|
-
"@xyo-network/payload-wrapper": "^2.
|
|
31
|
-
"@xyo-network/promise": "^2.
|
|
32
|
-
"@xyo-network/query-payload-plugin": "^2.
|
|
33
|
-
"@xyo-network/shared": "^2.
|
|
16
|
+
"@xyo-network/account": "^2.60.0-rc.2",
|
|
17
|
+
"@xyo-network/account-model": "^2.60.0-rc.2",
|
|
18
|
+
"@xyo-network/address-payload-plugin": "^2.60.0-rc.2",
|
|
19
|
+
"@xyo-network/archivist-model": "^2.60.0-rc.2",
|
|
20
|
+
"@xyo-network/boundwitness-builder": "^2.60.0-rc.2",
|
|
21
|
+
"@xyo-network/boundwitness-model": "^2.60.0-rc.2",
|
|
22
|
+
"@xyo-network/boundwitness-validator": "^2.60.0-rc.2",
|
|
23
|
+
"@xyo-network/boundwitness-wrapper": "^2.60.0-rc.2",
|
|
24
|
+
"@xyo-network/config-payload-plugin": "^2.60.0-rc.2",
|
|
25
|
+
"@xyo-network/core": "^2.60.0-rc.2",
|
|
26
|
+
"@xyo-network/module-events": "^2.60.0-rc.2",
|
|
27
|
+
"@xyo-network/module-model": "^2.60.0-rc.2",
|
|
28
|
+
"@xyo-network/payload-builder": "^2.60.0-rc.2",
|
|
29
|
+
"@xyo-network/payload-model": "^2.60.0-rc.2",
|
|
30
|
+
"@xyo-network/payload-wrapper": "^2.60.0-rc.2",
|
|
31
|
+
"@xyo-network/promise": "^2.60.0-rc.2",
|
|
32
|
+
"@xyo-network/query-payload-plugin": "^2.60.0-rc.2",
|
|
33
|
+
"@xyo-network/shared": "^2.60.0-rc.2",
|
|
34
34
|
"lodash": "^4.17.21"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
@@ -73,5 +73,6 @@
|
|
|
73
73
|
},
|
|
74
74
|
"sideEffects": false,
|
|
75
75
|
"types": "dist/types/index.d.ts",
|
|
76
|
-
"version": "2.
|
|
76
|
+
"version": "2.60.0-rc.2",
|
|
77
|
+
"stableVersion": "2.59.0"
|
|
77
78
|
}
|
package/src/AbstractModule.ts
CHANGED
|
@@ -180,7 +180,7 @@ export abstract class AbstractModule<TParams extends ModuleParams = ModuleParams
|
|
|
180
180
|
queryConfig?: TConfig,
|
|
181
181
|
): Promise<ModuleQueryResult> {
|
|
182
182
|
this.started('throw')
|
|
183
|
-
const result = await this.queryHandler(query, payloads, queryConfig)
|
|
183
|
+
const result = await this.queryHandler(assertEx(QueryBoundWitnessWrapper.unwrap(query)), payloads, queryConfig)
|
|
184
184
|
|
|
185
185
|
const args: ModuleQueriedEventArgs = { module: this as Module, payloads, query, result }
|
|
186
186
|
await this.emit('moduleQueried', args)
|
|
@@ -326,12 +326,12 @@ export abstract class AbstractModule<TParams extends ModuleParams = ModuleParams
|
|
|
326
326
|
console.warn(`Anonymous Queries not allowed, but running anyway [${this.config.name}], [${this.address}]`)
|
|
327
327
|
}
|
|
328
328
|
}
|
|
329
|
-
const
|
|
329
|
+
const queryPayload = await wrapper.getQuery()
|
|
330
330
|
assertEx(this.queryable(query, payloads, queryConfig))
|
|
331
331
|
const resultPayloads: Payload[] = []
|
|
332
332
|
const queryAccount = new Account()
|
|
333
333
|
try {
|
|
334
|
-
switch (
|
|
334
|
+
switch (queryPayload.schema) {
|
|
335
335
|
case ModuleDiscoverQuerySchema: {
|
|
336
336
|
resultPayloads.push(...(await this.discover()))
|
|
337
337
|
break
|
|
@@ -345,13 +345,18 @@ export abstract class AbstractModule<TParams extends ModuleParams = ModuleParams
|
|
|
345
345
|
break
|
|
346
346
|
}
|
|
347
347
|
default:
|
|
348
|
-
console.error(`Unsupported Query [${
|
|
348
|
+
console.error(`Unsupported Query [${(queryPayload as Payload).schema}]`)
|
|
349
349
|
}
|
|
350
350
|
} catch (ex) {
|
|
351
351
|
const error = ex as Error
|
|
352
|
-
resultPayloads.push(
|
|
352
|
+
resultPayloads.push(
|
|
353
|
+
new ModuleErrorBuilder()
|
|
354
|
+
.sources([await wrapper.hashAsync()])
|
|
355
|
+
.message(error.message)
|
|
356
|
+
.build(),
|
|
357
|
+
)
|
|
353
358
|
}
|
|
354
|
-
return await this.bindQueryResult(
|
|
359
|
+
return await this.bindQueryResult(queryPayload, resultPayloads, [queryAccount])
|
|
355
360
|
}
|
|
356
361
|
|
|
357
362
|
protected readArchivist = () => this.getArchivist('read')
|
|
@@ -11,19 +11,23 @@ export class QueryBoundWitnessBuilder<
|
|
|
11
11
|
private _query: PayloadWrapper<TQuery> | undefined
|
|
12
12
|
private _resultSet: PayloadWrapper<PayloadSetPayload> | undefined
|
|
13
13
|
|
|
14
|
-
override hashableFields(): TBoundWitness {
|
|
15
|
-
return {
|
|
14
|
+
override async hashableFields(): Promise<TBoundWitness> {
|
|
15
|
+
return {
|
|
16
|
+
...(await super.hashableFields()),
|
|
17
|
+
query: assertEx(await this._query?.hashAsync(), 'No Query Specified'),
|
|
18
|
+
schema: QueryBoundWitnessSchema,
|
|
19
|
+
}
|
|
16
20
|
}
|
|
17
21
|
|
|
18
22
|
query<T extends TQuery | PayloadWrapper<TQuery>>(query: T) {
|
|
19
23
|
this._query = PayloadWrapper.parse(query)
|
|
20
|
-
this.payload(this._query.payload)
|
|
24
|
+
this.payload(this._query.payload())
|
|
21
25
|
return this
|
|
22
26
|
}
|
|
23
27
|
|
|
24
28
|
resultSet<T extends PayloadSetPayload | PayloadWrapper<PayloadSetPayload>>(payloadSet: T) {
|
|
25
29
|
this._resultSet = PayloadWrapper.parse(payloadSet)
|
|
26
|
-
this.payload(this._resultSet.payload)
|
|
30
|
+
this.payload(this._resultSet.payload())
|
|
27
31
|
return this
|
|
28
32
|
}
|
|
29
33
|
}
|
|
@@ -16,20 +16,20 @@ export class QueryBoundWitnessValidator<T extends Query = Query> extends BoundWi
|
|
|
16
16
|
return (obj as QueryBoundWitnessValidator)?.constructor === QueryBoundWitnessValidator
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
override validate() {
|
|
19
|
+
override async validate() {
|
|
20
20
|
return [
|
|
21
|
-
...super.validate(),
|
|
21
|
+
...(await super.validate()),
|
|
22
22
|
// ...this.validateResultSet()
|
|
23
23
|
]
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
validateResultSet() {
|
|
26
|
+
async validateResultSet() {
|
|
27
27
|
const errors: Error[] = []
|
|
28
28
|
try {
|
|
29
29
|
const resultSetHash = assertEx(this.obj.resultSet, 'Missing ResultSet')
|
|
30
30
|
const wrapper = BoundWitnessWrapper.parse(this.obj)
|
|
31
|
-
const resultSet = PayloadWrapper.parse<PayloadSetPayload>(wrapper.
|
|
32
|
-
const required = resultSet?.payload.required
|
|
31
|
+
const resultSet = PayloadWrapper.parse<PayloadSetPayload>((await wrapper.payloadMap())[resultSetHash] as PayloadSetPayload)
|
|
32
|
+
const required = resultSet?.payload().required
|
|
33
33
|
if (required) {
|
|
34
34
|
Object.entries(required).forEach(([key, value]) => {
|
|
35
35
|
const found = wrapper.payloadSchemas.reduce((count, schema) => {
|
|
@@ -1,55 +1,65 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
2
|
import { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'
|
|
3
|
+
import { PayloadHasher } from '@xyo-network/core'
|
|
3
4
|
import { Query, QueryBoundWitness } from '@xyo-network/module-model'
|
|
4
5
|
import { Payload, PayloadSetPayload } from '@xyo-network/payload-model'
|
|
5
6
|
import { PayloadWrapper } from '@xyo-network/payload-wrapper'
|
|
7
|
+
import compact from 'lodash/compact'
|
|
6
8
|
|
|
7
9
|
import { QueryBoundWitnessValidator } from './QueryBoundWitnessValidator'
|
|
8
10
|
|
|
9
11
|
export class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {
|
|
10
|
-
private
|
|
11
|
-
private
|
|
12
|
+
private _payloadsWithoutQuery: PayloadWrapper<Payload>[] | undefined
|
|
13
|
+
private _query: T | undefined
|
|
14
|
+
private _resultSet: PayloadSetPayload | undefined
|
|
12
15
|
|
|
13
16
|
private isQueryBoundWitnessWrapper = true
|
|
14
17
|
|
|
15
|
-
override get errors() {
|
|
16
|
-
return new QueryBoundWitnessValidator(this.boundwitness).validate()
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
get query() {
|
|
20
|
-
return assertEx(
|
|
21
|
-
(this._query =
|
|
22
|
-
this._query ?? this.payloads[this.boundwitness.query] ? (this.payloads[this.boundwitness.query] as PayloadWrapper<T>) : undefined),
|
|
23
|
-
() => `Missing Query [${this.boundwitness}, ${JSON.stringify(this.payloads, null, 2)}]`,
|
|
24
|
-
)
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
get resultSet() {
|
|
28
|
-
const resultSetHash = this.boundwitness.resultSet
|
|
29
|
-
return assertEx(
|
|
30
|
-
(this._resultSet =
|
|
31
|
-
this._resultSet ??
|
|
32
|
-
(resultSetHash
|
|
33
|
-
? this.payloads[resultSetHash]
|
|
34
|
-
? (this.payloads[resultSetHash] as PayloadWrapper<PayloadSetPayload>)
|
|
35
|
-
: undefined
|
|
36
|
-
: undefined)),
|
|
37
|
-
() => `Missing resultSet [${resultSetHash}, ${JSON.stringify(this.payloads, null, 2)}]`,
|
|
38
|
-
)
|
|
39
|
-
}
|
|
40
|
-
|
|
41
18
|
static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): QueryBoundWitnessWrapper<T> {
|
|
42
19
|
assertEx(!Array.isArray(obj), 'Array can not be converted to QueryBoundWitnessWrapper')
|
|
43
20
|
switch (typeof obj) {
|
|
44
21
|
case 'object': {
|
|
45
22
|
const castWrapper = obj as QueryBoundWitnessWrapper<T>
|
|
46
23
|
const wrapper = castWrapper?.isQueryBoundWitnessWrapper ? castWrapper : new QueryBoundWitnessWrapper<T>(obj as QueryBoundWitness, payloads)
|
|
47
|
-
if (!wrapper.valid) {
|
|
24
|
+
/*if (!wrapper.valid) {
|
|
48
25
|
console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)
|
|
49
|
-
}
|
|
26
|
+
}*/
|
|
50
27
|
return wrapper
|
|
51
28
|
}
|
|
52
29
|
}
|
|
53
30
|
throw Error(`Unable to parse [${typeof obj}]`)
|
|
54
31
|
}
|
|
32
|
+
|
|
33
|
+
override getErrors() {
|
|
34
|
+
return new QueryBoundWitnessValidator(this.boundwitness).validate()
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async getQuery(): Promise<T> {
|
|
38
|
+
const payloadMap = await this.allPayloadMap()
|
|
39
|
+
this._query = this._query ?? (payloadMap[this.boundwitness.query] as T | undefined)
|
|
40
|
+
return assertEx(this._query, `Missing Query [${this.boundwitness}]`)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async getResultSet() {
|
|
44
|
+
const resultSetHash = this.boundwitness.resultSet
|
|
45
|
+
const payloadMap = await this.payloadMap()
|
|
46
|
+
return assertEx(
|
|
47
|
+
(this._resultSet = this._resultSet ?? (resultSetHash ? (payloadMap[resultSetHash] as PayloadSetPayload | undefined) : undefined)),
|
|
48
|
+
`Missing resultSet [${resultSetHash}]`,
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
override async getWrappedPayloads(): Promise<PayloadWrapper<Payload>[]> {
|
|
53
|
+
this._payloadsWithoutQuery =
|
|
54
|
+
this._payloadsWithoutQuery ??
|
|
55
|
+
compact(
|
|
56
|
+
(
|
|
57
|
+
await PayloadHasher.filterExclude(
|
|
58
|
+
(await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()),
|
|
59
|
+
this.payload().query,
|
|
60
|
+
)
|
|
61
|
+
).map((payload) => PayloadWrapper.parse(payload)),
|
|
62
|
+
)
|
|
63
|
+
return this._payloadsWithoutQuery
|
|
64
|
+
}
|
|
55
65
|
}
|
|
@@ -30,12 +30,12 @@ export class ModuleConfigQueryValidator<TConfig extends AnyConfigSchema<ModuleCo
|
|
|
30
30
|
this.hasRules = this.hasAllowedRules || this.hasDisallowedRules
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
queryable: Queryable = (query, payloads) => {
|
|
33
|
+
queryable: Queryable = async (query, payloads) => {
|
|
34
34
|
if (!this.hasRules) return true
|
|
35
35
|
const addresses = query.addresses
|
|
36
36
|
if (!addresses.length) return false
|
|
37
37
|
const wrapper = QueryBoundWitnessWrapper.parseQuery<ModuleQuery>(query, payloads)
|
|
38
|
-
const schema = wrapper.
|
|
38
|
+
const schema = (await wrapper.getQuery()).schema
|
|
39
39
|
return this.queryAllowed(schema, addresses) && !this.queryDisallowed(schema, addresses)
|
|
40
40
|
}
|
|
41
41
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { QueryBoundWitness } from '@xyo-network/module-model'
|
|
2
2
|
import { Payload } from '@xyo-network/payload-model'
|
|
3
|
+
import { Promisable } from '@xyo-network/promise'
|
|
3
4
|
|
|
4
|
-
export type Queryable<T extends QueryBoundWitness = QueryBoundWitness> = (query: T, payloads?: Payload[]) => boolean
|
|
5
|
+
export type Queryable<T extends QueryBoundWitness = QueryBoundWitness> = (query: T, payloads?: Payload[]) => Promisable<boolean>
|
|
5
6
|
|
|
6
7
|
export interface QueryValidator<T extends QueryBoundWitness = QueryBoundWitness> {
|
|
7
8
|
queryable: Queryable<T>
|
|
@@ -4,9 +4,13 @@ import { Payload } from '@xyo-network/payload-model'
|
|
|
4
4
|
import { QueryBoundWitnessWrapper } from '../Query'
|
|
5
5
|
import { Queryable, QueryValidator } from './QueryValidator'
|
|
6
6
|
|
|
7
|
-
export const isQuerySupportedByModule = <T extends QueryBoundWitness = QueryBoundWitness>(
|
|
7
|
+
export const isQuerySupportedByModule = async <T extends QueryBoundWitness = QueryBoundWitness>(
|
|
8
|
+
mod: Module,
|
|
9
|
+
query: T,
|
|
10
|
+
payloads?: Payload[],
|
|
11
|
+
): Promise<boolean> => {
|
|
8
12
|
const wrapper = QueryBoundWitnessWrapper.parseQuery<ModuleQuery>(query, payloads)
|
|
9
|
-
const schema = wrapper.
|
|
13
|
+
const schema = (await wrapper.getQuery()).schema
|
|
10
14
|
return mod.queries.includes(schema)
|
|
11
15
|
}
|
|
12
16
|
|