@xyo-network/bridge-pub-sub 2.92.10 → 2.93.0-rc.1

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 (75) hide show
  1. package/dist/browser/AsyncQueryBus/AsyncQueryBusBase.d.cts.map +1 -1
  2. package/dist/browser/AsyncQueryBus/AsyncQueryBusBase.d.mts.map +1 -1
  3. package/dist/browser/AsyncQueryBus/AsyncQueryBusBase.d.ts.map +1 -1
  4. package/dist/browser/AsyncQueryBus/AsyncQueryBusClient.d.cts.map +1 -1
  5. package/dist/browser/AsyncQueryBus/AsyncQueryBusClient.d.mts.map +1 -1
  6. package/dist/browser/AsyncQueryBus/AsyncQueryBusClient.d.ts.map +1 -1
  7. package/dist/browser/AsyncQueryBus/ModuleProxy/ModuleProxy.d.cts +1 -0
  8. package/dist/browser/AsyncQueryBus/ModuleProxy/ModuleProxy.d.cts.map +1 -1
  9. package/dist/browser/AsyncQueryBus/ModuleProxy/ModuleProxy.d.mts +1 -0
  10. package/dist/browser/AsyncQueryBus/ModuleProxy/ModuleProxy.d.mts.map +1 -1
  11. package/dist/browser/AsyncQueryBus/ModuleProxy/ModuleProxy.d.ts +1 -0
  12. package/dist/browser/AsyncQueryBus/ModuleProxy/ModuleProxy.d.ts.map +1 -1
  13. package/dist/browser/Config.d.cts +2 -0
  14. package/dist/browser/Config.d.cts.map +1 -1
  15. package/dist/browser/Config.d.mts +2 -0
  16. package/dist/browser/Config.d.mts.map +1 -1
  17. package/dist/browser/Config.d.ts +2 -0
  18. package/dist/browser/Config.d.ts.map +1 -1
  19. package/dist/browser/PubSubBridge.d.cts +7 -5
  20. package/dist/browser/PubSubBridge.d.cts.map +1 -1
  21. package/dist/browser/PubSubBridge.d.mts +7 -5
  22. package/dist/browser/PubSubBridge.d.mts.map +1 -1
  23. package/dist/browser/PubSubBridge.d.ts +7 -5
  24. package/dist/browser/PubSubBridge.d.ts.map +1 -1
  25. package/dist/browser/PubSubBridgeModuleResolver.d.cts +2 -2
  26. package/dist/browser/PubSubBridgeModuleResolver.d.cts.map +1 -1
  27. package/dist/browser/PubSubBridgeModuleResolver.d.mts +2 -2
  28. package/dist/browser/PubSubBridgeModuleResolver.d.mts.map +1 -1
  29. package/dist/browser/PubSubBridgeModuleResolver.d.ts +2 -2
  30. package/dist/browser/PubSubBridgeModuleResolver.d.ts.map +1 -1
  31. package/dist/browser/index.cjs +75 -17
  32. package/dist/browser/index.cjs.map +1 -1
  33. package/dist/browser/index.js +77 -19
  34. package/dist/browser/index.js.map +1 -1
  35. package/dist/node/AsyncQueryBus/AsyncQueryBusBase.d.cts.map +1 -1
  36. package/dist/node/AsyncQueryBus/AsyncQueryBusBase.d.mts.map +1 -1
  37. package/dist/node/AsyncQueryBus/AsyncQueryBusBase.d.ts.map +1 -1
  38. package/dist/node/AsyncQueryBus/AsyncQueryBusClient.d.cts.map +1 -1
  39. package/dist/node/AsyncQueryBus/AsyncQueryBusClient.d.mts.map +1 -1
  40. package/dist/node/AsyncQueryBus/AsyncQueryBusClient.d.ts.map +1 -1
  41. package/dist/node/AsyncQueryBus/ModuleProxy/ModuleProxy.d.cts +1 -0
  42. package/dist/node/AsyncQueryBus/ModuleProxy/ModuleProxy.d.cts.map +1 -1
  43. package/dist/node/AsyncQueryBus/ModuleProxy/ModuleProxy.d.mts +1 -0
  44. package/dist/node/AsyncQueryBus/ModuleProxy/ModuleProxy.d.mts.map +1 -1
  45. package/dist/node/AsyncQueryBus/ModuleProxy/ModuleProxy.d.ts +1 -0
  46. package/dist/node/AsyncQueryBus/ModuleProxy/ModuleProxy.d.ts.map +1 -1
  47. package/dist/node/Config.d.cts +2 -0
  48. package/dist/node/Config.d.cts.map +1 -1
  49. package/dist/node/Config.d.mts +2 -0
  50. package/dist/node/Config.d.mts.map +1 -1
  51. package/dist/node/Config.d.ts +2 -0
  52. package/dist/node/Config.d.ts.map +1 -1
  53. package/dist/node/PubSubBridge.d.cts +7 -5
  54. package/dist/node/PubSubBridge.d.cts.map +1 -1
  55. package/dist/node/PubSubBridge.d.mts +7 -5
  56. package/dist/node/PubSubBridge.d.mts.map +1 -1
  57. package/dist/node/PubSubBridge.d.ts +7 -5
  58. package/dist/node/PubSubBridge.d.ts.map +1 -1
  59. package/dist/node/PubSubBridgeModuleResolver.d.cts +2 -2
  60. package/dist/node/PubSubBridgeModuleResolver.d.cts.map +1 -1
  61. package/dist/node/PubSubBridgeModuleResolver.d.mts +2 -2
  62. package/dist/node/PubSubBridgeModuleResolver.d.mts.map +1 -1
  63. package/dist/node/PubSubBridgeModuleResolver.d.ts +2 -2
  64. package/dist/node/PubSubBridgeModuleResolver.d.ts.map +1 -1
  65. package/dist/node/index.cjs +80 -18
  66. package/dist/node/index.cjs.map +1 -1
  67. package/dist/node/index.js +82 -20
  68. package/dist/node/index.js.map +1 -1
  69. package/package.json +28 -26
  70. package/src/AsyncQueryBus/AsyncQueryBusBase.ts +12 -4
  71. package/src/AsyncQueryBus/AsyncQueryBusClient.ts +4 -0
  72. package/src/AsyncQueryBus/ModuleProxy/ModuleProxy.ts +6 -0
  73. package/src/Config.ts +2 -0
  74. package/src/PubSubBridge.ts +35 -14
  75. package/src/PubSubBridgeModuleResolver.ts +18 -7
@@ -4,7 +4,7 @@ import { AsyncQueryBusClient } from './AsyncQueryBus';
4
4
  export interface PubSubBridgeModuleResolverOptions extends BridgeModuleResolverOptions {
5
5
  busClient: AsyncQueryBusClient;
6
6
  }
7
- export declare class PubSubBridgeModuleResolver<T extends PubSubBridgeModuleResolverOptions = PubSubBridgeModuleResolverOptions> extends AbstractBridgeModuleResolver<T> {
8
- resolveHandler<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>;
7
+ export declare class PubSubBridgeModuleResolver extends AbstractBridgeModuleResolver<PubSubBridgeModuleResolverOptions> {
8
+ resolveHandler<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | T[] | undefined>;
9
9
  }
10
10
  //# sourceMappingURL=PubSubBridgeModuleResolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PubSubBridgeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/PubSubBridgeModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAA;AAExG,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAEjG,OAAO,EAAE,mBAAmB,EAA4D,MAAM,iBAAiB,CAAA;AAE/G,MAAM,WAAW,iCAAkC,SAAQ,2BAA2B;IACpF,SAAS,EAAE,mBAAmB,CAAA;CAC/B;AAED,qBAAa,0BAA0B,CACrC,CAAC,SAAS,iCAAiC,GAAG,iCAAiC,CAC/E,SAAQ,4BAA4B,CAAC,CAAC,CAAC;IACjC,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;CAchJ"}
1
+ {"version":3,"file":"PubSubBridgeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/PubSubBridgeModuleResolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,4BAA4B,EAAE,2BAA2B,EAAsB,MAAM,8BAA8B,CAAA;AAE5H,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAEjG,OAAO,EAAE,mBAAmB,EAA4D,MAAM,iBAAiB,CAAA;AAE/G,MAAM,WAAW,iCAAkC,SAAQ,2BAA2B;IACpF,SAAS,EAAE,mBAAmB,CAAA;CAC/B;AAED,qBAAa,0BAA2B,SAAQ,4BAA4B,CAAC,iCAAiC,CAAC;IAC9F,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EACrE,EAAE,EAAE,gBAAgB,EACpB,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC/B,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;CAuBhC"}
@@ -91,10 +91,22 @@ var _AsyncQueryBusBase = class _AsyncQueryBusBase extends import_object2.Base {
91
91
  }
92
92
  async queriesArchivist() {
93
93
  var _a, _b, _c;
94
- return (0, import_assert.assertEx)((0, import_archivist_model.asArchivistInstance)(await this.resolver.resolve((_c = (_b = (_a = this.config) == null ? void 0 : _a.intersect) == null ? void 0 : _b.queries) == null ? void 0 : _c.archivist)), () => {
94
+ console.log(`queriesArchivist: ${this.resolver.constructor.name}`);
95
+ const resolved = await this.resolver.resolve((_c = (_b = (_a = this.config) == null ? void 0 : _a.intersect) == null ? void 0 : _b.queries) == null ? void 0 : _c.archivist, {
96
+ direction: "up"
97
+ });
98
+ console.log(`resolved: ${(0, import_object2.toJsonString)(resolved)}`);
99
+ const existingResolved = (0, import_assert.assertEx)(resolved, () => {
95
100
  var _a2, _b2, _c2;
96
101
  return `Unable to resolve queriesArchivist [${(_c2 = (_b2 = (_a2 = this.config) == null ? void 0 : _a2.intersect) == null ? void 0 : _b2.queries) == null ? void 0 : _c2.archivist}]`;
97
102
  });
103
+ console.log("existingResolved", (0, import_object2.toJsonString)(existingResolved));
104
+ const result = (0, import_archivist_model.asArchivistInstance)(existingResolved, () => {
105
+ var _a2, _b2, _c2, _d;
106
+ return `Unable to resolve queriesArchivist as correct type [${(_c2 = (_b2 = (_a2 = this.config) == null ? void 0 : _a2.intersect) == null ? void 0 : _b2.queries) == null ? void 0 : _c2.archivist}][${(_d = existingResolved == null ? void 0 : existingResolved.constructor) == null ? void 0 : _d.name}]: ${(0, import_object2.toJsonString)(existingResolved)}`;
107
+ });
108
+ console.log("result", (0, import_object2.toJsonString)(result));
109
+ return result;
98
110
  }
99
111
  async queriesDiviner() {
100
112
  var _a, _b, _c;
@@ -195,6 +207,7 @@ var _AsyncQueryBusClient = class _AsyncQueryBusClient extends AsyncQueryBusBase
195
207
  }
196
208
  async send(address, query, payloads) {
197
209
  var _a, _b, _c, _d;
210
+ console.log("send");
198
211
  (_a = this.logger) == null ? void 0 : _a.debug(`Begin issuing query to: ${address}`);
199
212
  const $meta = {
200
213
  ...query == null ? void 0 : query.$meta,
@@ -206,7 +219,9 @@ var _AsyncQueryBusClient = class _AsyncQueryBusClient extends AsyncQueryBusBase
206
219
  ...query,
207
220
  $meta
208
221
  });
222
+ console.log("queryArchivist - calling");
209
223
  const queryArchivist = await this.queriesArchivist();
224
+ console.log("queryArchivist");
210
225
  const routedQueryHash = (
211
226
  // Trust the signed hash if it's there
212
227
  (routedQuery == null ? void 0 : routedQuery.$hash) ?? // TODO: What is the right way to find the dataHash
@@ -235,6 +250,7 @@ var _AsyncQueryBusClient = class _AsyncQueryBusClient extends AsyncQueryBusBase
235
250
  this.start();
236
251
  let response = this.queryCache.get(routedQueryHash);
237
252
  while (response !== void 0) {
253
+ console.log("polling...");
238
254
  await (0, import_delay.delay)(100);
239
255
  response = this.queryCache.get(routedQueryHash);
240
256
  if (response && response !== Pending) {
@@ -551,8 +567,13 @@ var AsyncQueryBusModuleHost = _AsyncQueryBusModuleHost;
551
567
  var import_abstract_bridge = require("@xyo-network/abstract-bridge");
552
568
  var _AsyncQueryBusModuleProxy = class _AsyncQueryBusModuleProxy extends import_abstract_bridge.AbstractModuleProxy {
553
569
  async proxyQueryHandler(query, payloads) {
570
+ console.log("proxyQueryHandler - async query bus module proxy");
554
571
  return await this.proxyParams.busClient.send(this.address, query, payloads);
555
572
  }
573
+ async startHandler() {
574
+ console.log("startHandler - async query bus module proxy");
575
+ return await super.startHandler();
576
+ }
556
577
  };
557
578
  __name(_AsyncQueryBusModuleProxy, "AsyncQueryBusModuleProxy");
558
579
  var AsyncQueryBusModuleProxy = _AsyncQueryBusModuleProxy;
@@ -564,17 +585,26 @@ var PubSubBridgeSchema = "network.xyo.bridge.pubsub";
564
585
  var PubSubBridgeConfigSchema = `${PubSubBridgeSchema}.config`;
565
586
 
566
587
  // src/PubSubBridge.ts
567
- var import_assert3 = require("@xylabs/assert");
588
+ var import_assert4 = require("@xylabs/assert");
589
+ var import_exists = require("@xylabs/exists");
568
590
  var import_abstract_bridge3 = require("@xyo-network/abstract-bridge");
569
591
  var import_module_model2 = require("@xyo-network/module-model");
570
592
 
571
593
  // src/PubSubBridgeModuleResolver.ts
594
+ var import_assert3 = require("@xylabs/assert");
595
+ var import_hex = require("@xylabs/hex");
572
596
  var import_abstract_bridge2 = require("@xyo-network/abstract-bridge");
573
597
  var import_account = require("@xyo-network/account");
574
598
  var _PubSubBridgeModuleResolver = class _PubSubBridgeModuleResolver extends import_abstract_bridge2.AbstractBridgeModuleResolver {
575
599
  async resolveHandler(id, options) {
600
+ var _a;
601
+ const parentResult = await super.resolveHandler(id, options);
602
+ if (parentResult) {
603
+ return parentResult;
604
+ }
576
605
  const idParts = id.split(":");
577
606
  const firstPart = idParts.shift();
607
+ (0, import_assert3.assertEx)((0, import_hex.isAddress)(firstPart), () => `Invalid module address: ${firstPart}`);
578
608
  const remainderParts = idParts.join(":");
579
609
  const account = import_account.Account.randomSync();
580
610
  const params = {
@@ -584,7 +614,11 @@ var _PubSubBridgeModuleResolver = class _PubSubBridgeModuleResolver extends impo
584
614
  moduleAddress: firstPart
585
615
  };
586
616
  const proxy = new AsyncQueryBusModuleProxy(params);
587
- return remainderParts.length > 0 ? await proxy.resolve(remainderParts, options) : proxy;
617
+ await ((_a = proxy.start) == null ? void 0 : _a.call(proxy));
618
+ const wrappedProxy = (0, import_abstract_bridge2.wrapModuleWithType)(proxy, account);
619
+ this.add(wrappedProxy);
620
+ console.log("ding!");
621
+ return remainderParts.length > 0 ? await proxy.resolve(remainderParts, options) : wrappedProxy;
588
622
  }
589
623
  };
590
624
  __name(_PubSubBridgeModuleResolver, "PubSubBridgeModuleResolver");
@@ -615,9 +649,7 @@ var _PubSubBridge = class _PubSubBridge extends import_abstract_bridge3.Abstract
615
649
  get resolver() {
616
650
  this._resolver = this._resolver ?? new PubSubBridgeModuleResolver({
617
651
  bridge: this,
618
- busClient: (0, import_assert3.assertEx)(this.busClient(), () => "busClient not configured"),
619
- downResolver: this.downResolver,
620
- upResolver: this.upResolver,
652
+ busClient: (0, import_assert4.assertEx)(this.busClient(), () => "busClient not configured"),
621
653
  wrapperAccount: this.account
622
654
  });
623
655
  return this._resolver;
@@ -625,30 +657,58 @@ var _PubSubBridge = class _PubSubBridge extends import_abstract_bridge3.Abstract
625
657
  get moduleName() {
626
658
  return `${this.config.name ?? moduleName}`;
627
659
  }
660
+ get roots() {
661
+ return (0, import_assert4.assertEx)(this.config.roots, () => "roots not configured");
662
+ }
628
663
  async exposeHandler(id, options) {
664
+ const { maxDepth = 1, direction } = options ?? {};
629
665
  const filterOptions = {
630
- direction: options == null ? void 0 : options.direction
666
+ direction
631
667
  };
632
668
  const module2 = await super.resolve(id, filterOptions);
633
669
  if (module2) {
634
- const host = (0, import_assert3.assertEx)(this.busHost(), () => "Not configured as a host");
670
+ const host = (0, import_assert4.assertEx)(this.busHost(), () => "Not configured as a host");
635
671
  host.expose(module2.address);
672
+ const children = await module2.resolve("*", {
673
+ direction,
674
+ maxDepth,
675
+ visibility: "public"
676
+ });
677
+ for (const child of children) {
678
+ host.expose(child.address);
679
+ }
636
680
  return [
637
- module2.address
681
+ module2,
682
+ ...children
638
683
  ];
639
684
  }
640
685
  return [];
641
686
  }
687
+ async startHandler() {
688
+ var _a;
689
+ (_a = this.busHost()) == null ? void 0 : _a.start();
690
+ return await super.startHandler();
691
+ }
642
692
  async unexposeHandler(id, options) {
693
+ const { maxDepth = 1, direction } = options ?? {};
643
694
  const filterOptions = {
644
- direction: options == null ? void 0 : options.direction
695
+ direction
645
696
  };
646
697
  const module2 = await super.resolve(id, filterOptions);
647
698
  if (module2) {
648
- const host = (0, import_assert3.assertEx)(this.busHost(), () => "Not configured as a host");
699
+ const host = (0, import_assert4.assertEx)(this.busHost(), () => "Not configured as a host");
649
700
  host.unexpose(module2.address);
701
+ const children = await module2.resolve("*", {
702
+ direction,
703
+ maxDepth,
704
+ visibility: "public"
705
+ });
706
+ for (const child of children) {
707
+ host.unexpose(child.address);
708
+ }
650
709
  return [
651
- module2.address
710
+ module2,
711
+ ...children
652
712
  ];
653
713
  }
654
714
  return [];
@@ -658,7 +718,7 @@ var _PubSubBridge = class _PubSubBridge extends import_abstract_bridge3.Abstract
658
718
  this._busClient = new AsyncQueryBusClient({
659
719
  config: this.config.client,
660
720
  logger: this.logger,
661
- resolver: this
721
+ resolver: this.upResolver
662
722
  });
663
723
  }
664
724
  return this._busClient;
@@ -668,15 +728,17 @@ var _PubSubBridge = class _PubSubBridge extends import_abstract_bridge3.Abstract
668
728
  this._busHost = new AsyncQueryBusHost({
669
729
  config: this.config.host,
670
730
  logger: this.logger,
671
- resolver: this
731
+ resolver: this.upResolver
672
732
  });
673
733
  }
674
734
  return this._busHost;
675
735
  }
676
- startHandler() {
677
- var _a;
678
- (_a = this.busHost()) == null ? void 0 : _a.start();
679
- return Promise.resolve(true);
736
+ async discoverRoots() {
737
+ const rootInstances = (await Promise.all(this.roots.map(async (root) => await this.resolver.resolve(root)))).filter(import_exists.exists);
738
+ for (const instance of rootInstances) {
739
+ this.downResolver.add(instance);
740
+ }
741
+ return rootInstances;
680
742
  }
681
743
  stopHandler(_timeout) {
682
744
  var _a;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/AbstractModuleHost/AbstractModuleHost.ts","../../src/AsyncQueryBus/AsyncQueryBusClient.ts","../../src/AsyncQueryBus/AsyncQueryBusBase.ts","../../src/AsyncQueryBus/model/QueryStatus.ts","../../src/AsyncQueryBus/AsyncQueryBusHost.ts","../../src/AsyncQueryBus/ModuleHost/ModuleHost.ts","../../src/AsyncQueryBus/ModuleProxy/ModuleProxy.ts","../../src/Schema.ts","../../src/Config.ts","../../src/PubSubBridge.ts","../../src/PubSubBridgeModuleResolver.ts"],"sourcesContent":["export * from './AbstractModuleHost'\nexport * from './AsyncQueryBus'\nexport * from './Config'\nexport * from './Params'\nexport * from './PubSubBridge'\nexport * from './PubSubBridgeModuleResolver'\nexport * from './Schema'\n","import { Base, BaseParams } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport { ModuleInstance } from '@xyo-network/module-model'\n\nexport type ModuleHostParams<THostedInstance extends ModuleInstance = ModuleInstance> = BaseParams<{\n module: THostedInstance\n}>\n\nexport abstract class AbstractModuleHost<TParams extends ModuleHostParams = ModuleHostParams> extends Base<TParams> {\n abstract start(): Promisable<void>\n abstract stop(): Promisable<void>\n}\n","import { delay } from '@xylabs/delay'\nimport { forget } from '@xylabs/forget'\nimport { Address } from '@xylabs/hex'\nimport { clearTimeoutEx, setTimeoutEx } from '@xylabs/timer'\nimport { isBoundWitnessWithMeta, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { CacheConfig, ModuleQueryResult } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { ModuleError, Payload, PayloadWithMeta, WithMeta } from '@xyo-network/payload-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AsyncQueryBusBase } from './AsyncQueryBusBase'\nimport { AsyncQueryBusClientParams, Pending } from './model'\n\nexport class AsyncQueryBusClient<TParams extends AsyncQueryBusClientParams = AsyncQueryBusClientParams> extends AsyncQueryBusBase<TParams> {\n protected _queryCache?: LRUCache<Address, Pending | ModuleQueryResult>\n private _pollCount = 0\n private _pollId?: string\n\n constructor(params: TParams) {\n super(params)\n }\n\n get queryCacheConfig(): LRUCache.Options<Address, Pending | ModuleQueryResult, unknown> {\n const queryCacheConfig: CacheConfig | undefined = this.config?.queryCache === true ? {} : this.config?.queryCache\n return { max: 100, ttl: 1000 * 60, ...queryCacheConfig }\n }\n\n get started() {\n return !!this._pollId\n }\n\n /**\n * A cache of queries that have been issued\n */\n protected get queryCache(): LRUCache<Address, Pending | ModuleQueryResult> {\n const config = this.queryCacheConfig\n const requiredConfig = { noUpdateTTL: false, ttlAutopurge: true }\n this._queryCache = this._queryCache ?? new LRUCache<Address, Pending | ModuleQueryResult>({ ...config, ...requiredConfig })\n return this._queryCache\n }\n\n listeningAddresses() {\n return this._queryCache?.keys()\n }\n\n async send(address: Address, query: QueryBoundWitness, payloads?: Payload[] | undefined): Promise<ModuleQueryResult> {\n this.logger?.debug(`Begin issuing query to: ${address}`)\n const $meta = { ...query?.$meta, destination: [address] }\n const routedQuery = await PayloadBuilder.build({ ...query, $meta })\n const queryArchivist = await this.queriesArchivist()\n\n // TODO: Should we always re-hash to true up timestamps? We can't\n // re-sign correctly so we would lose that information if we did and\n // would also be replying to consumers with a different query hash than\n // they sent us (which might be OK since it reflect the chain of custody)\n // Revisit this once we have proxy module support as they are another\n // intermediary to consider.\n const routedQueryHash =\n // Trust the signed hash if it's there\n (routedQuery as WithMeta<QueryBoundWitness>)?.$hash ??\n // TODO: What is the right way to find the dataHash\n Object.keys(await PayloadBuilder.toDataHashMap([routedQuery]))[0]\n this.logger?.debug(`Issuing query: ${routedQueryHash} to: ${address}`)\n // If there was data associated with the query, add it to the insert\n const data = payloads ? [routedQuery, ...payloads] : [routedQuery]\n const insertResult = await queryArchivist.insert?.(data)\n this.logger?.debug(`Issued query: ${routedQueryHash} to: ${address}`)\n this.queryCache.set(routedQueryHash, Pending)\n if (!insertResult) throw new Error('Unable to issue query to queryArchivist')\n const context = new Promise<ModuleQueryResult>((resolve, reject) => {\n this.logger?.debug(`Polling for response to query: ${routedQueryHash}`)\n const pollForResponse = async () => {\n try {\n this.start()\n let response = this.queryCache.get(routedQueryHash)\n // Poll for response until cache key expires (response timed out)\n while (response !== undefined) {\n // Wait a bit\n await delay(100)\n // Check the status of the response\n response = this.queryCache.get(routedQueryHash)\n // If status is no longer pending that means we received a response\n if (response && response !== Pending) {\n this.logger?.debug(`Returning response to query: ${routedQueryHash}`)\n resolve(response)\n return\n }\n }\n // If we got here waiting for a response timed out\n this.logger?.error('Timeout waiting for query response')\n // Resolve with error to match what a local module would do if it were to error\n // TODO: BW Builder/Sign result as this module?\n const error: ModuleError = {\n message: 'Timeout waiting for query response',\n query: 'network.xyo.boundwitness',\n schema: 'network.xyo.error.module',\n sources: [routedQueryHash],\n }\n reject(error)\n return\n } finally {\n this.stop()\n }\n }\n forget(pollForResponse())\n })\n return context\n }\n\n /**\n * Runs the background divine process on a loop with a delay\n * specified by the `config.pollFrequency`\n */\n private poll() {\n this._pollId = setTimeoutEx(async () => {\n try {\n await this.processIncomingResponses()\n } catch (e) {\n this.logger?.error?.(`Error in main loop: ${e}`)\n } finally {\n if (this._pollId) clearTimeoutEx(this._pollId)\n this._pollId = undefined\n this.poll()\n }\n }, this.pollFrequencyConfig)\n }\n\n /**\n * Background process for processing incoming responses to previously issued queries\n */\n private processIncomingResponses = async () => {\n const responseArchivist = await this.responsesArchivist()\n const responseBoundWitnessDiviner = await this.responsesDiviner()\n const pendingCommands = [...this.queryCache.entries()].filter(([_, status]) => status === Pending)\n // TODO: Do in throttled batches\n await Promise.allSettled(\n pendingCommands.map(async ([sourceQuery, status]) => {\n if (status === Pending) {\n const divinerQuery: BoundWitnessDivinerQueryPayload = { schema: BoundWitnessDivinerQuerySchema, sourceQuery }\n const result = await responseBoundWitnessDiviner.divine([divinerQuery])\n if (result && result.length > 0) {\n const response = result.find(isBoundWitnessWithMeta)\n if (response && (response?.$meta as unknown as { sourceQuery: string })?.sourceQuery === sourceQuery) {\n this.logger?.debug(`Found response to query: ${sourceQuery}`)\n // Get any payloads associated with the response\n const payloads: PayloadWithMeta[] = response.payload_hashes?.length > 0 ? await responseArchivist.get(response.payload_hashes) : []\n this.queryCache.set(sourceQuery, [response, payloads, []])\n }\n }\n }\n }),\n )\n }\n\n private start() {\n if (this._pollCount === 0) {\n this.poll()\n }\n this._pollCount++\n }\n\n private stop() {\n this._pollCount--\n if (this._pollCount <= 0) {\n if (this._pollId) clearTimeoutEx(this._pollId)\n this._pollId = undefined\n this._pollCount = 0\n }\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Base } from '@xylabs/object'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload } from '@xyo-network/diviner-boundwitness-model'\nimport { asDivinerInstance, DivinerInstance } from '@xyo-network/diviner-model'\nimport { ModuleConfig } from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AsyncQueryBusParams } from './model'\n\nexport class AsyncQueryBusBase<TParams extends AsyncQueryBusParams = AsyncQueryBusParams> extends Base<TParams> {\n protected _lastState?: LRUCache<Address, number>\n protected _targetConfigs: Record<Address, ModuleConfig> = {}\n protected _targetQueries: Record<Address, string[]> = {}\n\n constructor(params: TParams) {\n super(params)\n }\n\n get config(): TParams['config'] {\n return this.params.config\n }\n\n get pollFrequencyConfig(): number {\n return this.config?.pollFrequency ?? 1000\n }\n\n get resolver() {\n return this.params.resolver\n }\n\n /**\n * A cache of the last offset of the Diviner process per address\n */\n protected get lastState(): LRUCache<Address, number> {\n const requiredConfig = { max: 1000, ttl: 0 }\n this._lastState = this._lastState ?? new LRUCache<Address, number>(requiredConfig)\n return this._lastState\n }\n\n async queriesArchivist() {\n return assertEx(\n asArchivistInstance(await this.resolver.resolve(this.config?.intersect?.queries?.archivist)),\n () => `Unable to resolve queriesArchivist [${this.config?.intersect?.queries?.archivist}]`,\n )\n }\n\n async queriesDiviner() {\n return assertEx(\n asDivinerInstance(await this.resolver.resolve(this.config?.intersect?.queries?.boundWitnessDiviner)),\n () => `Unable to resolve queriesDiviner [${this.config?.intersect?.queries?.boundWitnessDiviner}]`,\n ) as DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, QueryBoundWitness>\n }\n\n async responsesArchivist() {\n return assertEx(\n asArchivistInstance(await this.resolver.resolve(this.config?.intersect?.responses?.archivist)),\n () => `Unable to resolve responsesArchivist [${this.config?.intersect?.responses?.archivist}]`,\n )\n }\n\n async responsesDiviner() {\n return assertEx(\n asDivinerInstance(await this.resolver.resolve(this.config?.intersect?.responses?.boundWitnessDiviner)),\n () => `Unable to resolve responsesDiviner [${this.config?.intersect?.responses?.boundWitnessDiviner}]`,\n ) as DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitness>\n }\n\n /**\n * Commit the internal state of the process. This is similar\n * to a transaction completion in a database and should only be called\n * when results have been successfully persisted to the appropriate\n * external stores.\n * @param address The module address to commit the state for\n * @param nextState The state to commit\n */\n protected async commitState(address: Address, nextState: number) {\n await Promise.resolve()\n // TODO: Offload to Archivist/Diviner instead of in-memory\n const lastState = this.lastState.get(address)\n if (lastState && lastState >= nextState) return\n this.lastState.set(address, nextState)\n }\n\n /**\n * Retrieves the last state of the process. Used to recover state after\n * preemptions, reboots, etc.\n */\n protected async retrieveState(address: Address): Promise<number> {\n await Promise.resolve()\n const state = this.lastState.get(address)\n if (state === undefined) {\n // If this is a boot we can go back a bit in time\n // and begin processing recent commands\n const newState = Date.now() - 1000\n this.lastState.set(address, newState)\n return newState\n } else {\n return state\n }\n }\n}\n","export const Pending = 'pending' as const\nexport type Pending = typeof Pending\n","import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { clearTimeoutEx, setTimeoutEx } from '@xylabs/timer'\nimport { isQueryBoundWitnessWithMeta, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { asModuleInstance, ModuleConfigSchema, ModuleInstance } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Schema, WithMeta } from '@xyo-network/payload-model'\n\nimport { AsyncQueryBusBase } from './AsyncQueryBusBase'\nimport { AsyncQueryBusHostParams } from './model'\n\nexport interface ExposeOptions {\n allowedQueries?: Schema[]\n failOnAlreadyExposed?: boolean\n}\n\nexport class AsyncQueryBusHost<TParams extends AsyncQueryBusHostParams = AsyncQueryBusHostParams> extends AsyncQueryBusBase<TParams> {\n protected _exposedAddresses = new Set<Address>()\n private _exposeOptions: Record<Address, ExposeOptions> = {}\n private _pollId?: string\n\n constructor(params: TParams) {\n super(params)\n }\n\n get exposedAddresses() {\n return this._exposedAddresses\n }\n\n get perAddressBatchQueryLimit(): number {\n return this.config?.perAddressBatchQueryLimit ?? 10\n }\n\n get started() {\n return !!this._pollId\n }\n\n expose(address: Address, options: ExposeOptions = {}) {\n const { failOnAlreadyExposed } = options\n assertEx(!failOnAlreadyExposed || !this._exposedAddresses.has(address), () => `Address already exposed [${address}]`)\n this._exposedAddresses.add(address)\n this._exposeOptions[address] = { ...options }\n this.logger?.debug(`${address} exposed`)\n }\n\n async listeningModules(): Promise<ModuleInstance[]> {\n const exposedModules = [...(this.config?.listeningModules ?? []), ...this.exposedAddresses.values()]\n const mods = await Promise.all(\n exposedModules.map(async (listeningModule) =>\n assertEx(asModuleInstance(await this.resolver.resolve(listeningModule)), () => `Unable to resolve listeningModule [${listeningModule}]`),\n ),\n )\n return mods\n }\n\n start() {\n if (this.started) {\n console.warn('AsyncQueryBus starting when already started')\n }\n this.poll()\n }\n\n stop() {\n if (!this.started) {\n console.warn('AsyncQueryBus stopping when already stopped')\n }\n if (this._pollId) clearTimeoutEx(this._pollId)\n this._pollId = undefined\n }\n\n unexpose(address: Address, validate = true) {\n assertEx(!validate || this._exposedAddresses.has(address), () => `Address not exposed [${address}]`)\n this._exposedAddresses.delete(address)\n delete this._exposeOptions[address]\n this.logger?.debug(`${address} unexposed`)\n }\n\n protected callLocalModule = async (localModule: ModuleInstance, query: WithMeta<QueryBoundWitness>) => {\n const localModuleName = localModule.config.name ?? localModule.address\n const queryArchivist = await this.queriesArchivist()\n const responseArchivist = await this.responsesArchivist()\n const queryDestination = (query.$meta as { destination?: string[] })?.destination\n if (queryDestination && queryDestination?.includes(localModule.address)) {\n // Find the query\n const queryIndex = query.payload_hashes.indexOf(query.query)\n if (queryIndex !== -1) {\n const querySchema = query.payload_schemas[queryIndex]\n // If the destination can process this type of query\n if (localModule.queries.includes(querySchema)) {\n // Get the associated payloads\n const queryPayloads = await queryArchivist.get(query.payload_hashes)\n const queryPayloadsDict = await PayloadBuilder.toAllHashMap(queryPayloads)\n const queryHash = (await PayloadBuilder.build(query)).$hash\n // Check that we have all the arguments for the command\n if (!containsAll(Object.keys(queryPayloadsDict), query.payload_hashes)) {\n this.logger?.error(`Error processing command ${queryHash} for module ${localModuleName}, missing payloads`)\n return\n }\n try {\n // Issue the query against module\n const querySchema = queryPayloadsDict[query.query].schema\n this.logger?.debug(`Issuing query ${querySchema} (${queryHash}) addressed to module: ${localModuleName}`)\n const response = await localModule.query(query, queryPayloads, {\n allowedQueries: this._exposeOptions[localModule.address]?.allowedQueries,\n schema: ModuleConfigSchema,\n })\n const [bw, payloads, errors] = response\n this.logger?.debug(`Replying to query ${queryHash} addressed to module: ${localModuleName}`)\n const insertResult = await responseArchivist.insert([bw, ...payloads, ...errors])\n // NOTE: If all archivists support the contract that numPayloads inserted === numPayloads returned we can\n // do some deeper assertions here like lenIn === lenOut, but for now this should be good enough since BWs\n // should always be unique causing at least one insertion\n if (insertResult.length === 0) {\n this.logger?.error(`Error replying to query ${queryHash} addressed to module: ${localModuleName}`)\n }\n if (query?.timestamp) {\n // TODO: This needs to be thought through as we can't use a distributed timestamp\n // because of collisions. We need to ensure we are using the timestamp of the store\n // so there's no chance of multiple commands at the same time\n await this.commitState(localModule.address, query.timestamp)\n }\n } catch (error) {\n this.logger?.error(`Error processing query ${queryHash} for module ${localModuleName}: ${error}`)\n console.error(`Error processing query ${queryHash} for module ${localModuleName}: ${error}`)\n }\n }\n }\n }\n }\n\n /**\n * Finds unprocessed commands addressed to the supplied address\n * @param address The address to find commands for\n */\n protected findQueriesToAddress = async (address: Address) => {\n const queryBoundWitnessDiviner = await this.queriesDiviner()\n // Retrieve last offset from state store\n const timestamp = await this.retrieveState(address)\n const destination = [address]\n const limit = this.perAddressBatchQueryLimit\n // Filter for commands to us by destination address\n const divinerQuery = { destination, limit, schema: BoundWitnessDivinerQuerySchema, sort: 'asc', timestamp }\n const result = await queryBoundWitnessDiviner.divine([divinerQuery])\n const queries = result.filter(isQueryBoundWitnessWithMeta)\n const nextState = queries.length > 0 ? Math.max(...queries.map((c) => c.timestamp ?? 0)) + 1 : timestamp\n // TODO: This needs to be thought through as we can't use a distributed timestamp\n // because of collisions. We need to use the timestamp of the store so there's no\n // chance of multiple commands at the same time\n await this.commitState(address, nextState)\n return queries\n }\n\n /**\n * Runs the background divine process on a loop with a delay\n * specified by the `config.pollFrequency`\n */\n private poll() {\n this._pollId = setTimeoutEx(async () => {\n try {\n await this.processIncomingQueries()\n } catch (e) {\n this.logger?.error?.(`Error in main loop: ${e}`)\n } finally {\n if (this._pollId) clearTimeoutEx(this._pollId)\n this._pollId = undefined\n this.poll()\n }\n }, this.pollFrequencyConfig)\n }\n\n /**\n * Background process for checking for inbound queries\n */\n private processIncomingQueries = async () => {\n this.logger?.debug('Checking for inbound queries')\n // Check for any queries that have been issued and have not been responded to\n const localModules = await this.listeningModules()\n\n // TODO: Do in throttled batches\n await Promise.allSettled(\n localModules.map(async (localModule) => {\n try {\n const localModuleName = localModule.config.name ?? localModule.address\n this.logger?.debug(`Checking for inbound queries to ${localModuleName}`)\n const queries = await this.findQueriesToAddress(localModule.address)\n if (queries.length === 0) return\n this.logger?.debug(`Found queries addressed to local module: ${localModuleName}`)\n for (const query of queries) {\n await this.callLocalModule(localModule, query)\n }\n } catch (error) {\n this.logger?.error(`Error processing queries for address ${localModule.address}: ${error}`)\n }\n }),\n )\n }\n}\n","import { AbstractModuleHost, ModuleHostParams } from '../../AbstractModuleHost'\nimport { AsyncQueryBusHost } from '../AsyncQueryBusHost'\nimport { AsyncQueryBusHostConfig } from '../model'\n\nexport type AsyncQueryBusModuleHostParams = ModuleHostParams & {\n config: AsyncQueryBusHostConfig\n}\n\nexport class AsyncQueryBusModuleHost extends AbstractModuleHost<AsyncQueryBusModuleHostParams> {\n private _busHost?: AsyncQueryBusHost\n\n constructor(params: AsyncQueryBusModuleHostParams) {\n super(params)\n }\n\n override async start(): Promise<void> {\n const listeningModules =\n this.params.config.listeningModules ?? (await this.params.module.resolve('*', { direction: 'down' })).map((m) => m.address)\n this._busHost = new AsyncQueryBusHost({\n config: { ...this.params.config, listeningModules },\n logger: this.params.logger,\n resolver: this.params.module,\n })\n this._busHost?.start()\n }\n override stop() {\n this._busHost?.stop()\n }\n}\n","import { AbstractModuleProxy, ModuleProxyParams } from '@xyo-network/abstract-bridge'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { Module, ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { AsyncQueryBusClient } from '../AsyncQueryBusClient'\n\nexport type AsyncQueryBusModuleProxyParams = ModuleProxyParams & {\n busClient: AsyncQueryBusClient\n}\n\nexport class AsyncQueryBusModuleProxy<TWrappedModule extends Module = Module>\n extends AbstractModuleProxy<AsyncQueryBusModuleProxyParams, TWrappedModule>\n implements ModuleInstance<TWrappedModule['params'], TWrappedModule['eventData']>\n{\n async proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads?: Payload[]): Promise<ModuleQueryResult> {\n return await this.proxyParams.busClient.send(this.address, query, payloads)\n }\n}\n","export const PubSubBridgeSchema = 'network.xyo.bridge.pubsub'\nexport type PubSubBridgeSchema = typeof PubSubBridgeSchema\n","import { EmptyObject } from '@xylabs/object'\nimport { BridgeConfig } from '@xyo-network/bridge-model'\n\nimport { AsyncQueryBusClientConfig, AsyncQueryBusHostConfig } from './AsyncQueryBus'\nimport { PubSubBridgeSchema } from './Schema'\n\nexport const PubSubBridgeConfigSchema = `${PubSubBridgeSchema}.config`\nexport type PubSubBridgeConfigSchema = typeof PubSubBridgeConfigSchema\n\n/**\n * Configuration for the PubSubBridge\n */\nexport type PubSubBridgeConfig<TConfig extends EmptyObject = EmptyObject, TSchema extends string | void = void> = BridgeConfig<\n {\n client?: AsyncQueryBusClientConfig\n host?: AsyncQueryBusHostConfig\n } & TConfig,\n TSchema extends string ? TSchema : PubSubBridgeConfigSchema\n>\n","import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { AbstractBridge } from '@xyo-network/abstract-bridge'\nimport { BridgeExposeOptions, BridgeModule, BridgeUnexposeOptions } from '@xyo-network/bridge-model'\nimport { creatableModule, ModuleFilterOptions, ModuleIdentifier } from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AsyncQueryBusClient, AsyncQueryBusHost } from './AsyncQueryBus'\nimport { PubSubBridgeConfigSchema } from './Config'\nimport { PubSubBridgeParams } from './Params'\nimport { PubSubBridgeModuleResolver } from './PubSubBridgeModuleResolver'\n\nconst moduleName = 'PubSubBridge'\n\n@creatableModule()\nexport class PubSubBridge<TParams extends PubSubBridgeParams = PubSubBridgeParams> extends AbstractBridge<TParams> implements BridgeModule<TParams> {\n static override configSchemas = [PubSubBridgeConfigSchema]\n\n protected _configRootAddress: Address = ''\n protected _configStateStoreArchivist: string = ''\n protected _configStateStoreBoundWitnessDiviner: string = ''\n protected _exposedAddresses: Address[] = []\n protected _lastState?: LRUCache<string, number>\n\n private _busClient?: AsyncQueryBusClient\n private _busHost?: AsyncQueryBusHost\n private _resolver?: PubSubBridgeModuleResolver\n\n override get resolver() {\n this._resolver =\n this._resolver ??\n new PubSubBridgeModuleResolver({\n bridge: this,\n busClient: assertEx(this.busClient(), () => 'busClient not configured'),\n downResolver: this.downResolver,\n upResolver: this.upResolver,\n wrapperAccount: this.account,\n })\n return this._resolver\n }\n\n protected get moduleName() {\n return `${this.config.name ?? moduleName}`\n }\n\n async exposeHandler(id: ModuleIdentifier, options?: BridgeExposeOptions | undefined): Promise<Address[]> {\n const filterOptions: ModuleFilterOptions = { direction: options?.direction }\n const module = await super.resolve(id, filterOptions)\n if (module) {\n const host = assertEx(this.busHost(), () => 'Not configured as a host')\n host.expose(module.address)\n return [module.address]\n }\n return []\n }\n\n async unexposeHandler(id: ModuleIdentifier, options?: BridgeUnexposeOptions | undefined): Promise<Address[]> {\n const filterOptions: ModuleFilterOptions = { direction: options?.direction }\n const module = await super.resolve(id, filterOptions)\n if (module) {\n const host = assertEx(this.busHost(), () => 'Not configured as a host')\n host.unexpose(module.address)\n return [module.address]\n }\n return []\n }\n\n protected busClient() {\n if (!this._busClient && this.config.client) {\n this._busClient = new AsyncQueryBusClient({\n config: this.config.client,\n logger: this.logger,\n resolver: this,\n })\n }\n return this._busClient\n }\n\n protected busHost() {\n if (!this._busHost && this.config.host) {\n this._busHost = new AsyncQueryBusHost({\n config: this.config.host,\n logger: this.logger,\n resolver: this,\n })\n }\n return this._busHost\n }\n\n protected override startHandler(): Promise<boolean> {\n this.busHost()?.start()\n return Promise.resolve(true)\n }\n\n protected override stopHandler(_timeout?: number | undefined) {\n this.busHost()?.stop()\n return true\n }\n}\n","import { Address } from '@xylabs/hex'\nimport { AbstractBridgeModuleResolver, BridgeModuleResolverOptions } from '@xyo-network/abstract-bridge'\nimport { Account } from '@xyo-network/account'\nimport { ModuleFilterOptions, ModuleIdentifier, ModuleInstance } from '@xyo-network/module-model'\n\nimport { AsyncQueryBusClient, AsyncQueryBusModuleProxy, AsyncQueryBusModuleProxyParams } from './AsyncQueryBus'\n\nexport interface PubSubBridgeModuleResolverOptions extends BridgeModuleResolverOptions {\n busClient: AsyncQueryBusClient\n}\n\nexport class PubSubBridgeModuleResolver<\n T extends PubSubBridgeModuleResolverOptions = PubSubBridgeModuleResolverOptions,\n> extends AbstractBridgeModuleResolver<T> {\n async resolveHandler<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined> {\n const idParts = id.split(':')\n const firstPart = idParts.shift()\n const remainderParts = idParts.join(':')\n const account = Account.randomSync()\n const params: AsyncQueryBusModuleProxyParams = {\n account,\n busClient: this.options.busClient,\n host: this.options.bridge,\n moduleAddress: firstPart as Address,\n }\n const proxy = new AsyncQueryBusModuleProxy<T>(params) as unknown as T\n return remainderParts.length > 0 ? await proxy.resolve(remainderParts, options) : proxy\n }\n}\n"],"mappings":"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","names":["AbstractModuleHost","Base","import_lru_cache","import_object","AsyncQueryBusBase","Base","_lastState","_targetConfigs","_targetQueries","constructor","params","config","pollFrequencyConfig","pollFrequency","resolver","lastState","requiredConfig","max","ttl","LRUCache","queriesArchivist","assertEx","asArchivistInstance","resolve","intersect","queries","archivist","_a","_b","_c","queriesDiviner","asDivinerInstance","boundWitnessDiviner","responsesArchivist","responses","responsesDiviner","commitState","address","nextState","Promise","get","set","retrieveState","state","undefined","newState","Date","now","Pending","AsyncQueryBusClient","AsyncQueryBusBase","_queryCache","_pollCount","_pollId","constructor","params","queryCacheConfig","config","queryCache","max","ttl","started","requiredConfig","noUpdateTTL","ttlAutopurge","LRUCache","listeningAddresses","keys","send","address","query","payloads","logger","debug","$meta","destination","routedQuery","PayloadBuilder","build","queryArchivist","queriesArchivist","routedQueryHash","$hash","Object","toDataHashMap","data","insertResult","insert","set","Pending","Error","context","Promise","resolve","reject","_a","pollForResponse","_b","start","response","get","undefined","delay","error","message","schema","sources","stop","forget","poll","setTimeoutEx","processIncomingResponses","e","clearTimeoutEx","pollFrequencyConfig","responseArchivist","responsesArchivist","responseBoundWitnessDiviner","responsesDiviner","pendingCommands","entries","filter","_","status","allSettled","map","sourceQuery","divinerQuery","BoundWitnessDivinerQuerySchema","result","divine","length","find","isBoundWitnessWithMeta","payload_hashes","import_assert","import_timer","import_boundwitness_model","import_diviner_boundwitness_model","import_payload_builder","AsyncQueryBusHost","AsyncQueryBusBase","_exposedAddresses","Set","_exposeOptions","_pollId","constructor","params","exposedAddresses","perAddressBatchQueryLimit","config","started","expose","address","options","failOnAlreadyExposed","assertEx","has","add","logger","debug","listeningModules","exposedModules","values","mods","Promise","all","map","listeningModule","asModuleInstance","resolver","resolve","start","console","warn","poll","stop","clearTimeoutEx","undefined","unexpose","validate","delete","callLocalModule","localModule","query","localModuleName","name","queryArchivist","queriesArchivist","responseArchivist","responsesArchivist","queryDestination","$meta","destination","includes","queryIndex","payload_hashes","indexOf","querySchema","payload_schemas","queries","queryPayloads","get","queryPayloadsDict","PayloadBuilder","toAllHashMap","queryHash","build","$hash","containsAll","Object","keys","error","schema","response","allowedQueries","ModuleConfigSchema","bw","payloads","errors","insertResult","insert","length","timestamp","commitState","findQueriesToAddress","queryBoundWitnessDiviner","queriesDiviner","retrieveState","limit","divinerQuery","BoundWitnessDivinerQuerySchema","sort","result","divine","filter","isQueryBoundWitnessWithMeta","nextState","Math","max","c","setTimeoutEx","processIncomingQueries","e","pollFrequencyConfig","localModules","allSettled","_a","AsyncQueryBusModuleHost","AbstractModuleHost","_busHost","constructor","params","start","listeningModules","config","module","resolve","direction","map","m","address","AsyncQueryBusHost","logger","resolver","stop","AsyncQueryBusModuleProxy","AbstractModuleProxy","proxyQueryHandler","query","payloads","proxyParams","busClient","send","address","PubSubBridgeSchema","PubSubBridgeConfigSchema","PubSubBridgeSchema","import_assert","import_abstract_bridge","import_module_model","import_abstract_bridge","PubSubBridgeModuleResolver","AbstractBridgeModuleResolver","resolveHandler","id","options","idParts","split","firstPart","shift","remainderParts","join","account","Account","randomSync","params","busClient","host","bridge","moduleAddress","proxy","AsyncQueryBusModuleProxy","length","resolve","moduleName","PubSubBridge","AbstractBridge","_configRootAddress","_configStateStoreArchivist","_configStateStoreBoundWitnessDiviner","_exposedAddresses","_lastState","_busClient","_busHost","_resolver","resolver","PubSubBridgeModuleResolver","bridge","busClient","assertEx","downResolver","upResolver","wrapperAccount","account","config","name","exposeHandler","id","options","filterOptions","direction","module","resolve","host","busHost","expose","address","unexposeHandler","unexpose","client","AsyncQueryBusClient","logger","AsyncQueryBusHost","startHandler","start","Promise","stopHandler","_timeout","stop","configSchemas","PubSubBridgeConfigSchema","creatableModule"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/AbstractModuleHost/AbstractModuleHost.ts","../../src/AsyncQueryBus/AsyncQueryBusClient.ts","../../src/AsyncQueryBus/AsyncQueryBusBase.ts","../../src/AsyncQueryBus/model/QueryStatus.ts","../../src/AsyncQueryBus/AsyncQueryBusHost.ts","../../src/AsyncQueryBus/ModuleHost/ModuleHost.ts","../../src/AsyncQueryBus/ModuleProxy/ModuleProxy.ts","../../src/Schema.ts","../../src/Config.ts","../../src/PubSubBridge.ts","../../src/PubSubBridgeModuleResolver.ts"],"sourcesContent":["export * from './AbstractModuleHost'\nexport * from './AsyncQueryBus'\nexport * from './Config'\nexport * from './Params'\nexport * from './PubSubBridge'\nexport * from './PubSubBridgeModuleResolver'\nexport * from './Schema'\n","import { Base, BaseParams } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport { ModuleInstance } from '@xyo-network/module-model'\n\nexport type ModuleHostParams<THostedInstance extends ModuleInstance = ModuleInstance> = BaseParams<{\n module: THostedInstance\n}>\n\nexport abstract class AbstractModuleHost<TParams extends ModuleHostParams = ModuleHostParams> extends Base<TParams> {\n abstract start(): Promisable<void>\n abstract stop(): Promisable<void>\n}\n","import { delay } from '@xylabs/delay'\nimport { forget } from '@xylabs/forget'\nimport { Address } from '@xylabs/hex'\nimport { clearTimeoutEx, setTimeoutEx } from '@xylabs/timer'\nimport { isBoundWitnessWithMeta, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { CacheConfig, ModuleQueryResult } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { ModuleError, Payload, PayloadWithMeta, WithMeta } from '@xyo-network/payload-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AsyncQueryBusBase } from './AsyncQueryBusBase'\nimport { AsyncQueryBusClientParams, Pending } from './model'\n\nexport class AsyncQueryBusClient<TParams extends AsyncQueryBusClientParams = AsyncQueryBusClientParams> extends AsyncQueryBusBase<TParams> {\n protected _queryCache?: LRUCache<Address, Pending | ModuleQueryResult>\n private _pollCount = 0\n private _pollId?: string\n\n constructor(params: TParams) {\n super(params)\n }\n\n get queryCacheConfig(): LRUCache.Options<Address, Pending | ModuleQueryResult, unknown> {\n const queryCacheConfig: CacheConfig | undefined = this.config?.queryCache === true ? {} : this.config?.queryCache\n return { max: 100, ttl: 1000 * 60, ...queryCacheConfig }\n }\n\n get started() {\n return !!this._pollId\n }\n\n /**\n * A cache of queries that have been issued\n */\n protected get queryCache(): LRUCache<Address, Pending | ModuleQueryResult> {\n const config = this.queryCacheConfig\n const requiredConfig = { noUpdateTTL: false, ttlAutopurge: true }\n this._queryCache = this._queryCache ?? new LRUCache<Address, Pending | ModuleQueryResult>({ ...config, ...requiredConfig })\n return this._queryCache\n }\n\n listeningAddresses() {\n return this._queryCache?.keys()\n }\n\n async send(address: Address, query: QueryBoundWitness, payloads?: Payload[] | undefined): Promise<ModuleQueryResult> {\n console.log('send')\n this.logger?.debug(`Begin issuing query to: ${address}`)\n const $meta = { ...query?.$meta, destination: [address] }\n const routedQuery = await PayloadBuilder.build({ ...query, $meta })\n console.log('queryArchivist - calling')\n const queryArchivist = await this.queriesArchivist()\n console.log('queryArchivist')\n\n // TODO: Should we always re-hash to true up timestamps? We can't\n // re-sign correctly so we would lose that information if we did and\n // would also be replying to consumers with a different query hash than\n // they sent us (which might be OK since it reflect the chain of custody)\n // Revisit this once we have proxy module support as they are another\n // intermediary to consider.\n const routedQueryHash =\n // Trust the signed hash if it's there\n (routedQuery as WithMeta<QueryBoundWitness>)?.$hash ??\n // TODO: What is the right way to find the dataHash\n Object.keys(await PayloadBuilder.toDataHashMap([routedQuery]))[0]\n this.logger?.debug(`Issuing query: ${routedQueryHash} to: ${address}`)\n // If there was data associated with the query, add it to the insert\n const data = payloads ? [routedQuery, ...payloads] : [routedQuery]\n const insertResult = await queryArchivist.insert?.(data)\n this.logger?.debug(`Issued query: ${routedQueryHash} to: ${address}`)\n this.queryCache.set(routedQueryHash, Pending)\n if (!insertResult) throw new Error('Unable to issue query to queryArchivist')\n const context = new Promise<ModuleQueryResult>((resolve, reject) => {\n this.logger?.debug(`Polling for response to query: ${routedQueryHash}`)\n const pollForResponse = async () => {\n try {\n this.start()\n let response = this.queryCache.get(routedQueryHash)\n // Poll for response until cache key expires (response timed out)\n while (response !== undefined) {\n console.log('polling...')\n // Wait a bit\n await delay(100)\n // Check the status of the response\n response = this.queryCache.get(routedQueryHash)\n // If status is no longer pending that means we received a response\n if (response && response !== Pending) {\n this.logger?.debug(`Returning response to query: ${routedQueryHash}`)\n resolve(response)\n return\n }\n }\n // If we got here waiting for a response timed out\n this.logger?.error('Timeout waiting for query response')\n // Resolve with error to match what a local module would do if it were to error\n // TODO: BW Builder/Sign result as this module?\n const error: ModuleError = {\n message: 'Timeout waiting for query response',\n query: 'network.xyo.boundwitness',\n schema: 'network.xyo.error.module',\n sources: [routedQueryHash],\n }\n reject(error)\n return\n } finally {\n this.stop()\n }\n }\n forget(pollForResponse())\n })\n return context\n }\n\n /**\n * Runs the background divine process on a loop with a delay\n * specified by the `config.pollFrequency`\n */\n private poll() {\n this._pollId = setTimeoutEx(async () => {\n try {\n await this.processIncomingResponses()\n } catch (e) {\n this.logger?.error?.(`Error in main loop: ${e}`)\n } finally {\n if (this._pollId) clearTimeoutEx(this._pollId)\n this._pollId = undefined\n this.poll()\n }\n }, this.pollFrequencyConfig)\n }\n\n /**\n * Background process for processing incoming responses to previously issued queries\n */\n private processIncomingResponses = async () => {\n const responseArchivist = await this.responsesArchivist()\n const responseBoundWitnessDiviner = await this.responsesDiviner()\n const pendingCommands = [...this.queryCache.entries()].filter(([_, status]) => status === Pending)\n // TODO: Do in throttled batches\n await Promise.allSettled(\n pendingCommands.map(async ([sourceQuery, status]) => {\n if (status === Pending) {\n const divinerQuery: BoundWitnessDivinerQueryPayload = { schema: BoundWitnessDivinerQuerySchema, sourceQuery }\n const result = await responseBoundWitnessDiviner.divine([divinerQuery])\n if (result && result.length > 0) {\n const response = result.find(isBoundWitnessWithMeta)\n if (response && (response?.$meta as unknown as { sourceQuery: string })?.sourceQuery === sourceQuery) {\n this.logger?.debug(`Found response to query: ${sourceQuery}`)\n // Get any payloads associated with the response\n const payloads: PayloadWithMeta[] = response.payload_hashes?.length > 0 ? await responseArchivist.get(response.payload_hashes) : []\n this.queryCache.set(sourceQuery, [response, payloads, []])\n }\n }\n }\n }),\n )\n }\n\n private start() {\n if (this._pollCount === 0) {\n this.poll()\n }\n this._pollCount++\n }\n\n private stop() {\n this._pollCount--\n if (this._pollCount <= 0) {\n if (this._pollId) clearTimeoutEx(this._pollId)\n this._pollId = undefined\n this._pollCount = 0\n }\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Base, toJsonString } from '@xylabs/object'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload } from '@xyo-network/diviner-boundwitness-model'\nimport { asDivinerInstance, DivinerInstance } from '@xyo-network/diviner-model'\nimport { ModuleConfig } from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AsyncQueryBusParams } from './model'\n\nexport class AsyncQueryBusBase<TParams extends AsyncQueryBusParams = AsyncQueryBusParams> extends Base<TParams> {\n protected _lastState?: LRUCache<Address, number>\n protected _targetConfigs: Record<Address, ModuleConfig> = {}\n protected _targetQueries: Record<Address, string[]> = {}\n\n constructor(params: TParams) {\n super(params)\n }\n\n get config(): TParams['config'] {\n return this.params.config\n }\n\n get pollFrequencyConfig(): number {\n return this.config?.pollFrequency ?? 1000\n }\n\n get resolver() {\n return this.params.resolver\n }\n\n /**\n * A cache of the last offset of the Diviner process per address\n */\n protected get lastState(): LRUCache<Address, number> {\n const requiredConfig = { max: 1000, ttl: 0 }\n this._lastState = this._lastState ?? new LRUCache<Address, number>(requiredConfig)\n return this._lastState\n }\n\n async queriesArchivist() {\n console.log(`queriesArchivist: ${this.resolver.constructor.name}`)\n const resolved = await this.resolver.resolve(this.config?.intersect?.queries?.archivist, { direction: 'up' })\n console.log(`resolved: ${toJsonString(resolved)}`)\n const existingResolved = assertEx(resolved, () => `Unable to resolve queriesArchivist [${this.config?.intersect?.queries?.archivist}]`)\n console.log('existingResolved', toJsonString(existingResolved))\n const result = asArchivistInstance(\n existingResolved,\n () =>\n `Unable to resolve queriesArchivist as correct type [${this.config?.intersect?.queries?.archivist}][${existingResolved?.constructor?.name}]: ${toJsonString(existingResolved)}`,\n )\n console.log('result', toJsonString(result))\n return result\n }\n\n async queriesDiviner() {\n return assertEx(\n asDivinerInstance(await this.resolver.resolve(this.config?.intersect?.queries?.boundWitnessDiviner)),\n () => `Unable to resolve queriesDiviner [${this.config?.intersect?.queries?.boundWitnessDiviner}]`,\n ) as DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, QueryBoundWitness>\n }\n\n async responsesArchivist() {\n return assertEx(\n asArchivistInstance(await this.resolver.resolve(this.config?.intersect?.responses?.archivist)),\n () => `Unable to resolve responsesArchivist [${this.config?.intersect?.responses?.archivist}]`,\n )\n }\n\n async responsesDiviner() {\n return assertEx(\n asDivinerInstance(await this.resolver.resolve(this.config?.intersect?.responses?.boundWitnessDiviner)),\n () => `Unable to resolve responsesDiviner [${this.config?.intersect?.responses?.boundWitnessDiviner}]`,\n ) as DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitness>\n }\n\n /**\n * Commit the internal state of the process. This is similar\n * to a transaction completion in a database and should only be called\n * when results have been successfully persisted to the appropriate\n * external stores.\n * @param address The module address to commit the state for\n * @param nextState The state to commit\n */\n protected async commitState(address: Address, nextState: number) {\n await Promise.resolve()\n // TODO: Offload to Archivist/Diviner instead of in-memory\n const lastState = this.lastState.get(address)\n if (lastState && lastState >= nextState) return\n this.lastState.set(address, nextState)\n }\n\n /**\n * Retrieves the last state of the process. Used to recover state after\n * preemptions, reboots, etc.\n */\n protected async retrieveState(address: Address): Promise<number> {\n await Promise.resolve()\n const state = this.lastState.get(address)\n if (state === undefined) {\n // If this is a boot we can go back a bit in time\n // and begin processing recent commands\n const newState = Date.now() - 1000\n this.lastState.set(address, newState)\n return newState\n } else {\n return state\n }\n }\n}\n","export const Pending = 'pending' as const\nexport type Pending = typeof Pending\n","import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { clearTimeoutEx, setTimeoutEx } from '@xylabs/timer'\nimport { isQueryBoundWitnessWithMeta, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { asModuleInstance, ModuleConfigSchema, ModuleInstance } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Schema, WithMeta } from '@xyo-network/payload-model'\n\nimport { AsyncQueryBusBase } from './AsyncQueryBusBase'\nimport { AsyncQueryBusHostParams } from './model'\n\nexport interface ExposeOptions {\n allowedQueries?: Schema[]\n failOnAlreadyExposed?: boolean\n}\n\nexport class AsyncQueryBusHost<TParams extends AsyncQueryBusHostParams = AsyncQueryBusHostParams> extends AsyncQueryBusBase<TParams> {\n protected _exposedAddresses = new Set<Address>()\n private _exposeOptions: Record<Address, ExposeOptions> = {}\n private _pollId?: string\n\n constructor(params: TParams) {\n super(params)\n }\n\n get exposedAddresses() {\n return this._exposedAddresses\n }\n\n get perAddressBatchQueryLimit(): number {\n return this.config?.perAddressBatchQueryLimit ?? 10\n }\n\n get started() {\n return !!this._pollId\n }\n\n expose(address: Address, options: ExposeOptions = {}) {\n const { failOnAlreadyExposed } = options\n assertEx(!failOnAlreadyExposed || !this._exposedAddresses.has(address), () => `Address already exposed [${address}]`)\n this._exposedAddresses.add(address)\n this._exposeOptions[address] = { ...options }\n this.logger?.debug(`${address} exposed`)\n }\n\n async listeningModules(): Promise<ModuleInstance[]> {\n const exposedModules = [...(this.config?.listeningModules ?? []), ...this.exposedAddresses.values()]\n const mods = await Promise.all(\n exposedModules.map(async (listeningModule) =>\n assertEx(asModuleInstance(await this.resolver.resolve(listeningModule)), () => `Unable to resolve listeningModule [${listeningModule}]`),\n ),\n )\n return mods\n }\n\n start() {\n if (this.started) {\n console.warn('AsyncQueryBus starting when already started')\n }\n this.poll()\n }\n\n stop() {\n if (!this.started) {\n console.warn('AsyncQueryBus stopping when already stopped')\n }\n if (this._pollId) clearTimeoutEx(this._pollId)\n this._pollId = undefined\n }\n\n unexpose(address: Address, validate = true) {\n assertEx(!validate || this._exposedAddresses.has(address), () => `Address not exposed [${address}]`)\n this._exposedAddresses.delete(address)\n delete this._exposeOptions[address]\n this.logger?.debug(`${address} unexposed`)\n }\n\n protected callLocalModule = async (localModule: ModuleInstance, query: WithMeta<QueryBoundWitness>) => {\n const localModuleName = localModule.config.name ?? localModule.address\n const queryArchivist = await this.queriesArchivist()\n const responseArchivist = await this.responsesArchivist()\n const queryDestination = (query.$meta as { destination?: string[] })?.destination\n if (queryDestination && queryDestination?.includes(localModule.address)) {\n // Find the query\n const queryIndex = query.payload_hashes.indexOf(query.query)\n if (queryIndex !== -1) {\n const querySchema = query.payload_schemas[queryIndex]\n // If the destination can process this type of query\n if (localModule.queries.includes(querySchema)) {\n // Get the associated payloads\n const queryPayloads = await queryArchivist.get(query.payload_hashes)\n const queryPayloadsDict = await PayloadBuilder.toAllHashMap(queryPayloads)\n const queryHash = (await PayloadBuilder.build(query)).$hash\n // Check that we have all the arguments for the command\n if (!containsAll(Object.keys(queryPayloadsDict), query.payload_hashes)) {\n this.logger?.error(`Error processing command ${queryHash} for module ${localModuleName}, missing payloads`)\n return\n }\n try {\n // Issue the query against module\n const querySchema = queryPayloadsDict[query.query].schema\n this.logger?.debug(`Issuing query ${querySchema} (${queryHash}) addressed to module: ${localModuleName}`)\n const response = await localModule.query(query, queryPayloads, {\n allowedQueries: this._exposeOptions[localModule.address]?.allowedQueries,\n schema: ModuleConfigSchema,\n })\n const [bw, payloads, errors] = response\n this.logger?.debug(`Replying to query ${queryHash} addressed to module: ${localModuleName}`)\n const insertResult = await responseArchivist.insert([bw, ...payloads, ...errors])\n // NOTE: If all archivists support the contract that numPayloads inserted === numPayloads returned we can\n // do some deeper assertions here like lenIn === lenOut, but for now this should be good enough since BWs\n // should always be unique causing at least one insertion\n if (insertResult.length === 0) {\n this.logger?.error(`Error replying to query ${queryHash} addressed to module: ${localModuleName}`)\n }\n if (query?.timestamp) {\n // TODO: This needs to be thought through as we can't use a distributed timestamp\n // because of collisions. We need to ensure we are using the timestamp of the store\n // so there's no chance of multiple commands at the same time\n await this.commitState(localModule.address, query.timestamp)\n }\n } catch (error) {\n this.logger?.error(`Error processing query ${queryHash} for module ${localModuleName}: ${error}`)\n console.error(`Error processing query ${queryHash} for module ${localModuleName}: ${error}`)\n }\n }\n }\n }\n }\n\n /**\n * Finds unprocessed commands addressed to the supplied address\n * @param address The address to find commands for\n */\n protected findQueriesToAddress = async (address: Address) => {\n const queryBoundWitnessDiviner = await this.queriesDiviner()\n // Retrieve last offset from state store\n const timestamp = await this.retrieveState(address)\n const destination = [address]\n const limit = this.perAddressBatchQueryLimit\n // Filter for commands to us by destination address\n const divinerQuery = { destination, limit, schema: BoundWitnessDivinerQuerySchema, sort: 'asc', timestamp }\n const result = await queryBoundWitnessDiviner.divine([divinerQuery])\n const queries = result.filter(isQueryBoundWitnessWithMeta)\n const nextState = queries.length > 0 ? Math.max(...queries.map((c) => c.timestamp ?? 0)) + 1 : timestamp\n // TODO: This needs to be thought through as we can't use a distributed timestamp\n // because of collisions. We need to use the timestamp of the store so there's no\n // chance of multiple commands at the same time\n await this.commitState(address, nextState)\n return queries\n }\n\n /**\n * Runs the background divine process on a loop with a delay\n * specified by the `config.pollFrequency`\n */\n private poll() {\n this._pollId = setTimeoutEx(async () => {\n try {\n await this.processIncomingQueries()\n } catch (e) {\n this.logger?.error?.(`Error in main loop: ${e}`)\n } finally {\n if (this._pollId) clearTimeoutEx(this._pollId)\n this._pollId = undefined\n this.poll()\n }\n }, this.pollFrequencyConfig)\n }\n\n /**\n * Background process for checking for inbound queries\n */\n private processIncomingQueries = async () => {\n this.logger?.debug('Checking for inbound queries')\n // Check for any queries that have been issued and have not been responded to\n const localModules = await this.listeningModules()\n\n // TODO: Do in throttled batches\n await Promise.allSettled(\n localModules.map(async (localModule) => {\n try {\n const localModuleName = localModule.config.name ?? localModule.address\n this.logger?.debug(`Checking for inbound queries to ${localModuleName}`)\n const queries = await this.findQueriesToAddress(localModule.address)\n if (queries.length === 0) return\n this.logger?.debug(`Found queries addressed to local module: ${localModuleName}`)\n for (const query of queries) {\n await this.callLocalModule(localModule, query)\n }\n } catch (error) {\n this.logger?.error(`Error processing queries for address ${localModule.address}: ${error}`)\n }\n }),\n )\n }\n}\n","import { AbstractModuleHost, ModuleHostParams } from '../../AbstractModuleHost'\nimport { AsyncQueryBusHost } from '../AsyncQueryBusHost'\nimport { AsyncQueryBusHostConfig } from '../model'\n\nexport type AsyncQueryBusModuleHostParams = ModuleHostParams & {\n config: AsyncQueryBusHostConfig\n}\n\nexport class AsyncQueryBusModuleHost extends AbstractModuleHost<AsyncQueryBusModuleHostParams> {\n private _busHost?: AsyncQueryBusHost\n\n constructor(params: AsyncQueryBusModuleHostParams) {\n super(params)\n }\n\n override async start(): Promise<void> {\n const listeningModules =\n this.params.config.listeningModules ?? (await this.params.module.resolve('*', { direction: 'down' })).map((m) => m.address)\n this._busHost = new AsyncQueryBusHost({\n config: { ...this.params.config, listeningModules },\n logger: this.params.logger,\n resolver: this.params.module,\n })\n this._busHost?.start()\n }\n override stop() {\n this._busHost?.stop()\n }\n}\n","import { AbstractModuleProxy, ModuleProxyParams } from '@xyo-network/abstract-bridge'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { Module, ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { AsyncQueryBusClient } from '../AsyncQueryBusClient'\n\nexport type AsyncQueryBusModuleProxyParams = ModuleProxyParams & {\n busClient: AsyncQueryBusClient\n}\n\nexport class AsyncQueryBusModuleProxy<TWrappedModule extends Module = Module>\n extends AbstractModuleProxy<AsyncQueryBusModuleProxyParams, TWrappedModule>\n implements ModuleInstance<TWrappedModule['params'], TWrappedModule['eventData']>\n{\n async proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads?: Payload[]): Promise<ModuleQueryResult> {\n console.log('proxyQueryHandler - async query bus module proxy')\n return await this.proxyParams.busClient.send(this.address, query, payloads)\n }\n\n override async startHandler(): Promise<boolean> {\n console.log('startHandler - async query bus module proxy')\n return await super.startHandler()\n }\n}\n","export const PubSubBridgeSchema = 'network.xyo.bridge.pubsub'\nexport type PubSubBridgeSchema = typeof PubSubBridgeSchema\n","import { Address } from '@xylabs/hex'\nimport { EmptyObject } from '@xylabs/object'\nimport { BridgeConfig } from '@xyo-network/bridge-model'\n\nimport { AsyncQueryBusClientConfig, AsyncQueryBusHostConfig } from './AsyncQueryBus'\nimport { PubSubBridgeSchema } from './Schema'\n\nexport const PubSubBridgeConfigSchema = `${PubSubBridgeSchema}.config`\nexport type PubSubBridgeConfigSchema = typeof PubSubBridgeConfigSchema\n\n/**\n * Configuration for the PubSubBridge\n */\nexport type PubSubBridgeConfig<TConfig extends EmptyObject = EmptyObject, TSchema extends string | void = void> = BridgeConfig<\n {\n client?: AsyncQueryBusClientConfig\n host?: AsyncQueryBusHostConfig\n roots?: Address[]\n } & TConfig,\n TSchema extends string ? TSchema : PubSubBridgeConfigSchema\n>\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { AbstractBridge } from '@xyo-network/abstract-bridge'\nimport { BridgeExposeOptions, BridgeModule, BridgeUnexposeOptions } from '@xyo-network/bridge-model'\nimport { creatableModule, ModuleFilterOptions, ModuleIdentifier, ModuleInstance } from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AsyncQueryBusClient, AsyncQueryBusHost } from './AsyncQueryBus'\nimport { PubSubBridgeConfigSchema } from './Config'\nimport { PubSubBridgeParams } from './Params'\nimport { PubSubBridgeModuleResolver } from './PubSubBridgeModuleResolver'\n\nconst moduleName = 'PubSubBridge'\n\n@creatableModule()\nexport class PubSubBridge<TParams extends PubSubBridgeParams = PubSubBridgeParams> extends AbstractBridge<TParams> implements BridgeModule<TParams> {\n static override configSchemas = [PubSubBridgeConfigSchema]\n\n protected _configRootAddress: Address = ''\n protected _configStateStoreArchivist: string = ''\n protected _configStateStoreBoundWitnessDiviner: string = ''\n protected _exposedAddresses: Address[] = []\n protected _lastState?: LRUCache<string, number>\n\n private _busClient?: AsyncQueryBusClient\n private _busHost?: AsyncQueryBusHost\n private _resolver?: PubSubBridgeModuleResolver\n\n override get resolver() {\n this._resolver =\n this._resolver ??\n new PubSubBridgeModuleResolver({\n bridge: this,\n busClient: assertEx(this.busClient(), () => 'busClient not configured'),\n wrapperAccount: this.account,\n })\n return this._resolver\n }\n\n protected get moduleName() {\n return `${this.config.name ?? moduleName}`\n }\n\n protected get roots() {\n return assertEx(this.config.roots, () => 'roots not configured')\n }\n\n async exposeHandler(id: ModuleIdentifier, options?: BridgeExposeOptions | undefined): Promise<ModuleInstance[]> {\n const { maxDepth = 1, direction } = options ?? {}\n const filterOptions: ModuleFilterOptions = { direction }\n const module = await super.resolve(id, filterOptions)\n if (module) {\n const host = assertEx(this.busHost(), () => 'Not configured as a host')\n host.expose(module.address)\n const children = await module.resolve('*', { direction, maxDepth, visibility: 'public' })\n for (const child of children) {\n host.expose(child.address)\n }\n return [module, ...children]\n }\n return []\n }\n\n override async startHandler(): Promise<boolean> {\n this.busHost()?.start()\n return await super.startHandler()\n }\n\n async unexposeHandler(id: ModuleIdentifier, options?: BridgeUnexposeOptions | undefined): Promise<ModuleInstance[]> {\n const { maxDepth = 1, direction } = options ?? {}\n const filterOptions: ModuleFilterOptions = { direction }\n const module = await super.resolve(id, filterOptions)\n if (module) {\n const host = assertEx(this.busHost(), () => 'Not configured as a host')\n host.unexpose(module.address)\n const children = await module.resolve('*', { direction, maxDepth, visibility: 'public' })\n for (const child of children) {\n host.unexpose(child.address)\n }\n return [module, ...children]\n }\n return []\n }\n\n protected busClient() {\n if (!this._busClient && this.config.client) {\n this._busClient = new AsyncQueryBusClient({\n config: this.config.client,\n logger: this.logger,\n resolver: this.upResolver,\n })\n }\n return this._busClient\n }\n\n protected busHost() {\n if (!this._busHost && this.config.host) {\n this._busHost = new AsyncQueryBusHost({\n config: this.config.host,\n logger: this.logger,\n resolver: this.upResolver,\n })\n }\n return this._busHost\n }\n\n protected override async discoverRoots(): Promise<ModuleInstance[]> {\n const rootInstances = (await Promise.all(this.roots.map(async (root) => await this.resolver.resolve<ModuleInstance>(root)))).filter(exists)\n for (const instance of rootInstances) {\n this.downResolver.add(instance)\n }\n return rootInstances\n }\n\n protected override stopHandler(_timeout?: number | undefined) {\n this.busHost()?.stop()\n return true\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { AbstractBridgeModuleResolver, BridgeModuleResolverOptions, wrapModuleWithType } from '@xyo-network/abstract-bridge'\nimport { Account } from '@xyo-network/account'\nimport { ModuleFilterOptions, ModuleIdentifier, ModuleInstance } from '@xyo-network/module-model'\n\nimport { AsyncQueryBusClient, AsyncQueryBusModuleProxy, AsyncQueryBusModuleProxyParams } from './AsyncQueryBus'\n\nexport interface PubSubBridgeModuleResolverOptions extends BridgeModuleResolverOptions {\n busClient: AsyncQueryBusClient\n}\n\nexport class PubSubBridgeModuleResolver extends AbstractBridgeModuleResolver<PubSubBridgeModuleResolverOptions> {\n override async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n const parentResult = await super.resolveHandler(id, options)\n if (parentResult) {\n return parentResult\n }\n const idParts = id.split(':')\n const firstPart = idParts.shift()\n assertEx(isAddress(firstPart), () => `Invalid module address: ${firstPart}`)\n const remainderParts = idParts.join(':')\n const account = Account.randomSync()\n const params: AsyncQueryBusModuleProxyParams = {\n account,\n busClient: this.options.busClient,\n host: this.options.bridge,\n moduleAddress: firstPart as Address,\n }\n const proxy = new AsyncQueryBusModuleProxy<T>(params) as unknown as T\n await proxy.start?.()\n const wrappedProxy = wrapModuleWithType(proxy, account) as unknown as T\n this.add(wrappedProxy)\n console.log('ding!')\n return remainderParts.length > 0 ? await proxy.resolve(remainderParts, options) : wrappedProxy\n }\n}\n"],"mappings":"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","names":["AbstractModuleHost","Base","import_lru_cache","import_object","AsyncQueryBusBase","Base","_lastState","_targetConfigs","_targetQueries","constructor","params","config","pollFrequencyConfig","pollFrequency","resolver","lastState","requiredConfig","max","ttl","LRUCache","queriesArchivist","console","log","name","resolved","resolve","intersect","queries","archivist","direction","toJsonString","existingResolved","assertEx","_a","_b","_c","result","asArchivistInstance","queriesDiviner","asDivinerInstance","boundWitnessDiviner","responsesArchivist","responses","responsesDiviner","commitState","address","nextState","Promise","get","set","retrieveState","state","undefined","newState","Date","now","Pending","AsyncQueryBusClient","AsyncQueryBusBase","_queryCache","_pollCount","_pollId","constructor","params","queryCacheConfig","config","queryCache","max","ttl","started","requiredConfig","noUpdateTTL","ttlAutopurge","LRUCache","listeningAddresses","keys","send","address","query","payloads","console","log","logger","debug","$meta","destination","routedQuery","PayloadBuilder","build","queryArchivist","queriesArchivist","routedQueryHash","$hash","Object","toDataHashMap","data","insertResult","insert","set","Pending","Error","context","Promise","resolve","reject","_a","pollForResponse","_b","start","response","get","undefined","delay","error","message","schema","sources","stop","forget","poll","setTimeoutEx","processIncomingResponses","e","clearTimeoutEx","pollFrequencyConfig","responseArchivist","responsesArchivist","responseBoundWitnessDiviner","responsesDiviner","pendingCommands","entries","filter","_","status","allSettled","map","sourceQuery","divinerQuery","BoundWitnessDivinerQuerySchema","result","divine","length","find","isBoundWitnessWithMeta","payload_hashes","import_assert","import_timer","import_boundwitness_model","import_diviner_boundwitness_model","import_payload_builder","AsyncQueryBusHost","AsyncQueryBusBase","_exposedAddresses","Set","_exposeOptions","_pollId","constructor","params","exposedAddresses","perAddressBatchQueryLimit","config","started","expose","address","options","failOnAlreadyExposed","assertEx","has","add","logger","debug","listeningModules","exposedModules","values","mods","Promise","all","map","listeningModule","asModuleInstance","resolver","resolve","start","console","warn","poll","stop","clearTimeoutEx","undefined","unexpose","validate","delete","callLocalModule","localModule","query","localModuleName","name","queryArchivist","queriesArchivist","responseArchivist","responsesArchivist","queryDestination","$meta","destination","includes","queryIndex","payload_hashes","indexOf","querySchema","payload_schemas","queries","queryPayloads","get","queryPayloadsDict","PayloadBuilder","toAllHashMap","queryHash","build","$hash","containsAll","Object","keys","error","schema","response","allowedQueries","ModuleConfigSchema","bw","payloads","errors","insertResult","insert","length","timestamp","commitState","findQueriesToAddress","queryBoundWitnessDiviner","queriesDiviner","retrieveState","limit","divinerQuery","BoundWitnessDivinerQuerySchema","sort","result","divine","filter","isQueryBoundWitnessWithMeta","nextState","Math","max","c","setTimeoutEx","processIncomingQueries","e","pollFrequencyConfig","localModules","allSettled","_a","AsyncQueryBusModuleHost","AbstractModuleHost","_busHost","constructor","params","start","listeningModules","config","module","resolve","direction","map","m","address","AsyncQueryBusHost","logger","resolver","stop","AsyncQueryBusModuleProxy","AbstractModuleProxy","proxyQueryHandler","query","payloads","console","log","proxyParams","busClient","send","address","startHandler","PubSubBridgeSchema","PubSubBridgeConfigSchema","PubSubBridgeSchema","import_assert","import_abstract_bridge","import_module_model","import_assert","import_abstract_bridge","PubSubBridgeModuleResolver","AbstractBridgeModuleResolver","resolveHandler","id","options","parentResult","idParts","split","firstPart","shift","assertEx","isAddress","remainderParts","join","account","Account","randomSync","params","busClient","host","bridge","moduleAddress","proxy","AsyncQueryBusModuleProxy","start","wrappedProxy","wrapModuleWithType","add","console","log","length","resolve","moduleName","PubSubBridge","AbstractBridge","_configRootAddress","_configStateStoreArchivist","_configStateStoreBoundWitnessDiviner","_exposedAddresses","_lastState","_busClient","_busHost","_resolver","resolver","PubSubBridgeModuleResolver","bridge","busClient","assertEx","wrapperAccount","account","config","name","roots","exposeHandler","id","options","maxDepth","direction","filterOptions","module","resolve","host","busHost","expose","address","children","visibility","child","startHandler","start","unexposeHandler","unexpose","client","AsyncQueryBusClient","logger","upResolver","AsyncQueryBusHost","discoverRoots","rootInstances","Promise","all","map","root","filter","exists","instance","downResolver","add","stopHandler","_timeout","stop","configSchemas","PubSubBridgeConfigSchema","creatableModule"]}