@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.
Files changed (70) hide show
  1. package/dist/cjs/AbstractModule.js +9 -6
  2. package/dist/cjs/AbstractModule.js.map +1 -1
  3. package/dist/cjs/Query/QueryBoundWitnessBuilder.js +9 -3
  4. package/dist/cjs/Query/QueryBoundWitnessBuilder.js.map +1 -1
  5. package/dist/cjs/Query/QueryBoundWitnessValidator.js +32 -24
  6. package/dist/cjs/Query/QueryBoundWitnessValidator.js.map +1 -1
  7. package/dist/cjs/Query/QueryBoundWitnessWrapper.js +37 -21
  8. package/dist/cjs/Query/QueryBoundWitnessWrapper.js.map +1 -1
  9. package/dist/cjs/QueryValidator/ModuleConfigQueryValidator.js +4 -3
  10. package/dist/cjs/QueryValidator/ModuleConfigQueryValidator.js.map +1 -1
  11. package/dist/cjs/QueryValidator/SupportedQueryValidator.js +4 -3
  12. package/dist/cjs/QueryValidator/SupportedQueryValidator.js.map +1 -1
  13. package/dist/docs.json +8856 -5776
  14. package/dist/esm/AbstractModule.js +9 -6
  15. package/dist/esm/AbstractModule.js.map +1 -1
  16. package/dist/esm/Query/QueryBoundWitnessBuilder.js +8 -4
  17. package/dist/esm/Query/QueryBoundWitnessBuilder.js.map +1 -1
  18. package/dist/esm/Query/QueryBoundWitnessValidator.js +5 -5
  19. package/dist/esm/Query/QueryBoundWitnessValidator.js.map +1 -1
  20. package/dist/esm/Query/QueryBoundWitnessWrapper.js +26 -20
  21. package/dist/esm/Query/QueryBoundWitnessWrapper.js.map +1 -1
  22. package/dist/esm/QueryValidator/ModuleConfigQueryValidator.js +2 -2
  23. package/dist/esm/QueryValidator/ModuleConfigQueryValidator.js.map +1 -1
  24. package/dist/esm/QueryValidator/SupportedQueryValidator.js +2 -2
  25. package/dist/esm/QueryValidator/SupportedQueryValidator.js.map +1 -1
  26. package/dist/types/AbstractModule.d.ts.map +1 -1
  27. package/dist/types/Query/QueryBoundWitnessBuilder.d.ts +1 -1
  28. package/dist/types/Query/QueryBoundWitnessBuilder.d.ts.map +1 -1
  29. package/dist/types/Query/QueryBoundWitnessValidator.d.ts +2 -2
  30. package/dist/types/Query/QueryBoundWitnessValidator.d.ts.map +1 -1
  31. package/dist/types/Query/QueryBoundWitnessWrapper.d.ts +6 -4
  32. package/dist/types/Query/QueryBoundWitnessWrapper.d.ts.map +1 -1
  33. package/dist/types/QueryValidator/QueryValidator.d.ts +2 -1
  34. package/dist/types/QueryValidator/QueryValidator.d.ts.map +1 -1
  35. package/dist/types/QueryValidator/SupportedQueryValidator.d.ts +1 -1
  36. package/dist/types/QueryValidator/SupportedQueryValidator.d.ts.map +1 -1
  37. package/docs/assets/search.js +1 -1
  38. package/docs/classes/AbstractModule.html +52 -52
  39. package/docs/classes/BaseEmitter.html +13 -13
  40. package/docs/classes/CompositeModuleResolver.html +14 -14
  41. package/docs/classes/ModuleConfigQueryValidator.html +10 -10
  42. package/docs/classes/ModuleErrorBuilder.html +10 -10
  43. package/docs/classes/ModuleFactory.html +9 -9
  44. package/docs/classes/QueryBoundWitnessBuilder.html +17 -28
  45. package/docs/classes/QueryBoundWitnessValidator.html +27 -38
  46. package/docs/classes/QueryBoundWitnessWrapper.html +495 -186
  47. package/docs/classes/SimpleModuleResolver.html +16 -16
  48. package/docs/classes/SupportedQueryValidator.html +4 -4
  49. package/docs/functions/duplicateModules.html +1 -1
  50. package/docs/functions/isQuerySupportedByModule.html +3 -3
  51. package/docs/functions/mixinResolverEventEmitter.html +1 -1
  52. package/docs/functions/serializable.html +1 -1
  53. package/docs/functions/serializableField.html +1 -1
  54. package/docs/interfaces/CreatableModuleDictionary.html +1 -1
  55. package/docs/interfaces/ModuleResolvedEventArgs.html +3 -3
  56. package/docs/interfaces/QueryValidator.html +2 -2
  57. package/docs/interfaces/ResolverEventEmitter.html +2 -2
  58. package/docs/types/ModuleError.html +1 -1
  59. package/docs/types/ModuleErrorSchema.html +2 -2
  60. package/docs/types/Queryable.html +4 -4
  61. package/docs/types/SortedPipedAddressesString.html +1 -1
  62. package/docs/variables/ModuleErrorSchema-1.html +2 -2
  63. package/package.json +20 -19
  64. package/src/AbstractModule.ts +11 -6
  65. package/src/Query/QueryBoundWitnessBuilder.ts +8 -4
  66. package/src/Query/QueryBoundWitnessValidator.ts +5 -5
  67. package/src/Query/QueryBoundWitnessWrapper.ts +40 -30
  68. package/src/QueryValidator/ModuleConfigQueryValidator.ts +2 -2
  69. package/src/QueryValidator/QueryValidator.ts +2 -1
  70. 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">&lt;</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">&gt;</span></div><aside class="tsd-sources">
19
19
  <ul>
20
- <li>Defined in <a href="https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/218908d8b/packages/modules/packages/module/packages/abstract/src/Error.ts#L7">modules/packages/module/packages/abstract/src/Error.ts:7</a></li></ul></aside></div>
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">&quot;network.xyo.error.module&quot;</span></div><aside class="tsd-sources">
19
19
  <ul>
20
- <li>Defined in <a href="https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/218908d8b/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/218908d8b/packages/modules/packages/module/packages/abstract/src/Error.ts#L5">modules/packages/module/packages/abstract/src/Error.ts:5</a></li></ul></aside></div>
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&lt;T&gt;</h1></div>
18
- <div class="tsd-signature"><span class="tsd-kind-type-alias">Queryable</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type tsd-kind-type-parameter">T</span><span class="tsd-signature-symbol">&gt;</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"> =&gt; </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">&lt;</span><span class="tsd-signature-type tsd-kind-type-parameter">T</span><span class="tsd-signature-symbol">&gt;</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"> =&gt; </span><span class="tsd-signature-type ">Promisable</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">&gt;</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">&lt;</span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">&gt;</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">&lt;</span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">&gt;</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/218908d8b/packages/modules/packages/module/packages/abstract/src/QueryValidator/QueryValidator.ts#L4">modules/packages/module/packages/abstract/src/QueryValidator/QueryValidator.ts:4</a></li></ul></aside></div>
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/218908d8b/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>
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">&quot;network.xyo.error.module&quot;</span></div><aside class="tsd-sources">
19
19
  <ul>
20
- <li>Defined in <a href="https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/218908d8b/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/218908d8b/packages/modules/packages/module/packages/abstract/src/Error.ts#L5">modules/packages/module/packages/abstract/src/Error.ts:5</a></li></ul></aside></div>
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.59.0",
17
- "@xyo-network/account-model": "^2.59.0",
18
- "@xyo-network/address-payload-plugin": "^2.59.0",
19
- "@xyo-network/archivist-model": "^2.59.0",
20
- "@xyo-network/boundwitness-builder": "^2.59.0",
21
- "@xyo-network/boundwitness-model": "^2.59.0",
22
- "@xyo-network/boundwitness-validator": "^2.59.0",
23
- "@xyo-network/boundwitness-wrapper": "^2.59.0",
24
- "@xyo-network/config-payload-plugin": "^2.59.0",
25
- "@xyo-network/core": "^2.59.0",
26
- "@xyo-network/module-events": "^2.59.0",
27
- "@xyo-network/module-model": "^2.59.0",
28
- "@xyo-network/payload-builder": "^2.59.0",
29
- "@xyo-network/payload-model": "^2.59.0",
30
- "@xyo-network/payload-wrapper": "^2.59.0",
31
- "@xyo-network/promise": "^2.59.0",
32
- "@xyo-network/query-payload-plugin": "^2.59.0",
33
- "@xyo-network/shared": "^2.59.0",
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.59.0"
76
+ "version": "2.60.0-rc.2",
77
+ "stableVersion": "2.59.0"
77
78
  }
@@ -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 typedQuery = wrapper.query.payload
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 (typedQuery.schema) {
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 [${query.schema}]`)
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(new ModuleErrorBuilder().sources([wrapper.hash]).message(error.message).build())
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(typedQuery, resultPayloads, [queryAccount])
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 { ...super.hashableFields(), query: assertEx(this._query?.hash, 'No Query Specified'), schema: QueryBoundWitnessSchema }
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.payloads[resultSetHash] as PayloadSetPayload)
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 _query: PayloadWrapper<T> | undefined
11
- private _resultSet: PayloadWrapper<PayloadSetPayload> | undefined
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.query.schema
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>(mod: Module, query: T, payloads?: Payload[]): boolean => {
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.query.schema
13
+ const schema = (await wrapper.getQuery()).schema
10
14
  return mod.queries.includes(schema)
11
15
  }
12
16