@xyo-network/bridge-pub-sub 3.18.9 → 4.0.0

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.
@@ -578,23 +578,20 @@ import { assertEx as assertEx4 } from "@xylabs/assert";
578
578
  import { exists } from "@xylabs/exists";
579
579
  import { forget as forget2 } from "@xylabs/forget";
580
580
  import { isAddress } from "@xylabs/hex";
581
+ import { isString } from "@xylabs/typeof";
581
582
  import { AbstractModuleProxy } from "@xyo-network/bridge-abstract";
582
- import { ResolveHelper as ResolveHelper3 } from "@xyo-network/module-model";
583
- var AsyncQueryBusModuleProxy = class _AsyncQueryBusModuleProxy extends AbstractModuleProxy {
584
- static createCount = 0;
585
- constructor(params) {
586
- _AsyncQueryBusModuleProxy.createCount = _AsyncQueryBusModuleProxy.createCount + 1;
587
- if (Math.floor(_AsyncQueryBusModuleProxy.createCount / 10) === _AsyncQueryBusModuleProxy.createCount / 10) {
588
- console.log(`AsyncQueryBusModuleProxy.createCount: ${_AsyncQueryBusModuleProxy.createCount}`);
589
- }
590
- super(params);
591
- }
583
+ import { creatableModule, ResolveHelper as ResolveHelper3 } from "@xyo-network/module-model";
584
+ var AsyncQueryBusModuleProxy = class extends AbstractModuleProxy {
592
585
  get id() {
593
586
  return this.address;
594
587
  }
595
588
  get modName() {
596
589
  return void 0;
597
590
  }
591
+ static async createHandler(inInstance) {
592
+ const instance = await super.createHandler(inInstance);
593
+ return instance;
594
+ }
598
595
  async proxyQueryHandler(query, payloads) {
599
596
  if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {
600
597
  forget2(this.storeToArchivists([query, ...payloads ?? []]));
@@ -627,21 +624,21 @@ var AsyncQueryBusModuleProxy = class _AsyncQueryBusModuleProxy extends AbstractM
627
624
  case "string": {
628
625
  const parts = id.split(":");
629
626
  const first = assertEx4(parts.shift(), () => "Missing first");
630
- const remainingPath = parts.join(":");
627
+ const remainingPath = parts.length > 0 ? parts.join(":") : void 0;
631
628
  const address = isAddress(first) ? first : this.childAddressByName(first);
632
- if (!address) return void 0;
629
+ if (!isAddress(address)) return void 0;
633
630
  const firstInstance = await this.params.host.resolve(address);
634
- return remainingPath ? await firstInstance?.resolve(remainingPath) : firstInstance;
631
+ return isString(remainingPath) ? await firstInstance?.resolve(remainingPath) : firstInstance;
635
632
  }
636
633
  default: {
637
634
  return (await ResolveHelper3.resolve(config, id, options)).filter((mod) => mod.address !== this.address);
638
635
  }
639
636
  }
640
637
  }
641
- async startHandler() {
642
- return await super.startHandler();
643
- }
644
638
  };
639
+ AsyncQueryBusModuleProxy = __decorateClass([
640
+ creatableModule()
641
+ ], AsyncQueryBusModuleProxy);
645
642
 
646
643
  // src/Schema.ts
647
644
  var PubSubBridgeSchema = "network.xyo.bridge.pubsub";
@@ -658,7 +655,7 @@ import { toJsonString } from "@xylabs/object";
658
655
  import { AbstractBridge } from "@xyo-network/bridge-abstract";
659
656
  import {
660
657
  AddressSchema,
661
- creatableModule,
658
+ creatableModule as creatableModule2,
662
659
  resolveAddressToInstance as resolveAddressToInstance2,
663
660
  resolveAddressToInstanceUp,
664
661
  ResolveHelper as ResolveHelper5
@@ -701,6 +698,7 @@ var PubSubBridgeModuleResolver = class extends AbstractBridgeModuleResolver {
701
698
  }
702
699
  const account = await Account.random();
703
700
  const finalParams = {
701
+ name: "PubSubBridgeModuleResolver",
704
702
  account,
705
703
  archiving: this.params.archiving,
706
704
  busClient: this.params.busClient,
@@ -710,16 +708,14 @@ var PubSubBridgeModuleResolver = class extends AbstractBridgeModuleResolver {
710
708
  onQuerySendFinished: this.params.onQuerySendFinished,
711
709
  onQuerySendStarted: this.params.onQuerySendStarted
712
710
  };
713
- const proxy = new AsyncQueryBusModuleProxy(finalParams);
711
+ const proxy = await AsyncQueryBusModuleProxy.create(finalParams);
714
712
  const state = await proxy.state();
715
- if (state) {
716
- const configSchema = state.find((payload) => payload.schema === ConfigSchema)?.config;
717
- const config = assertEx5(
718
- state.find((payload) => payload.schema === configSchema),
719
- () => "Unable to locate config"
720
- );
721
- proxy.setConfig(config);
722
- }
713
+ const configSchema = state.find((payload) => payload.schema === ConfigSchema)?.config;
714
+ const config = assertEx5(
715
+ state.find((payload) => payload.schema === configSchema),
716
+ () => "Unable to locate config"
717
+ );
718
+ proxy.setConfig(config);
723
719
  await proxy.start?.();
724
720
  const wrapped = wrapModuleWithType(proxy, account);
725
721
  assertEx5(asModuleInstance2(wrapped, {}), () => `Failed to asModuleInstance [${id}]`);
@@ -860,7 +856,7 @@ var PubSubBridge = class extends AbstractBridge {
860
856
  }
861
857
  async startHandler() {
862
858
  this.busHost()?.start();
863
- return await super.startHandler();
859
+ await super.startHandler();
864
860
  }
865
861
  async unexposeHandler(id, options) {
866
862
  const { maxDepth = 2, required = true } = options ?? {};
@@ -922,15 +918,15 @@ var PubSubBridge = class extends AbstractBridge {
922
918
  return instance.address;
923
919
  }
924
920
  }
925
- stopHandler(_timeout) {
921
+ async stopHandler() {
922
+ await super.stopHandler();
926
923
  this.busHost()?.stop();
927
- return true;
928
924
  }
929
925
  };
930
926
  __publicField(PubSubBridge, "configSchemas", [...__superGet(PubSubBridge, PubSubBridge, "configSchemas"), PubSubBridgeConfigSchema]);
931
927
  __publicField(PubSubBridge, "defaultConfigSchema", PubSubBridgeConfigSchema);
932
928
  PubSubBridge = __decorateClass([
933
- creatableModule()
929
+ creatableModule2()
934
930
  ], PubSubBridge);
935
931
  export {
936
932
  AbstractModuleHost,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../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":["import type { BaseParams } from '@xylabs/base'\nimport { Base } from '@xylabs/base'\nimport type { Promisable } from '@xylabs/promise'\nimport type { ModuleInstance } from '@xyo-network/module-model'\n\nexport type ModuleHostParams<THostedInstance extends ModuleInstance = ModuleInstance> = BaseParams<{\n mod: 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 { assertEx } from '@xylabs/assert'\nimport { delay } from '@xylabs/delay'\nimport { forget } from '@xylabs/forget'\nimport type { Address } from '@xylabs/hex'\nimport { clearTimeoutEx, setTimeoutEx } from '@xylabs/timer'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { isBoundWitness } from '@xyo-network/boundwitness-model'\nimport type { BoundWitnessDivinerQueryPayload } from '@xyo-network/diviner-boundwitness-model'\nimport { BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport type { CacheConfig, ModuleQueryResult } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n ModuleError, Payload, WithSources,\n} from '@xyo-network/payload-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AsyncQueryBusBase } from './AsyncQueryBusBase.ts'\nimport type { AsyncQueryBusClientParams } from './model/index.ts'\nimport { Pending } from './model/index.ts'\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 {\n max: 100, ttl: 1000 * 60, ...queryCacheConfig,\n }\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 routedQuery = { ...query, $destination: [address] }\n // console.log('queryArchivist - calling')\n const queryArchivist = assertEx(\n await this.queriesArchivist(),\n () => `Unable to contact queriesArchivist [${this.config?.intersect?.queries?.archivist}]`,\n )\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 = await PayloadBuilder.dataHash(routedQuery)\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 return new Promise<ModuleQueryResult>((resolve, reject) => {\n this.logger?.debug(`Polling for response to query: ${routedQueryHash}`)\n let nextDelay = 100\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(nextDelay)\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?.log(`Returning response to query: ${routedQueryHash}`)\n resolve(response)\n return\n }\n // back off the polling frequency\n nextDelay = Math.floor(nextDelay * 1.2)\n // cap it at 1000ms\n if (nextDelay > 1000) nextDelay = 1000\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: WithSources<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 }\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.pollFrequency)\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 if (responseArchivist) {\n const responseBoundWitnessDiviner = await this.responsesDiviner()\n if (responseBoundWitnessDiviner) {\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 = {\n limit: 1, order: 'desc', schema: BoundWitnessDivinerQuerySchema, sourceQuery,\n }\n const result = await responseBoundWitnessDiviner.divine([divinerQuery])\n if (result && result.length > 0) {\n const response = result.find(isBoundWitness)\n if (response && (response 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: Payload[] = 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 }\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 { Base } from '@xylabs/base'\nimport type { Address, Hex } from '@xylabs/hex'\nimport type { TypeCheck } from '@xylabs/object'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { isArchivistInstance } from '@xyo-network/archivist-model'\nimport type { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport type { BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload } from '@xyo-network/diviner-boundwitness-model'\nimport type { DivinerInstance } from '@xyo-network/diviner-model'\nimport { isDivinerInstance } from '@xyo-network/diviner-model'\nimport type {\n ModuleConfig, ModuleIdentifier, ModuleInstance,\n} from '@xyo-network/module-model'\nimport { ResolveHelper } from '@xyo-network/module-model'\nimport { SequenceConstants } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport type { AsyncQueryBusParams } from './model/index.ts'\n\nconst POLLING_FREQUENCY_MIN = 100 as const\nconst POLLING_FREQUENCY_MAX = 60_000 as const\nconst POLLING_FREQUENCY_DEFAULT = 1000 as const\n\nexport class AsyncQueryBusBase<TParams extends AsyncQueryBusParams = AsyncQueryBusParams> extends Base<TParams> {\n protected _lastState?: LRUCache<Address, Hex>\n protected _targetConfigs: Record<Address, ModuleConfig> = {}\n protected _targetQueries: Record<Address, string[]> = {}\n\n private _lastResolveFailure: Record<ModuleIdentifier, number> = {}\n private _queriesArchivist?: ArchivistInstance\n private _queriesDiviner?: DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, QueryBoundWitness>\n private _reResolveDelay = 1000 * 5 // 5 seconds\n private _resolveMutex = new Mutex()\n private _responsesArchivist?: ArchivistInstance\n private _responsesDiviner?: DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitness>\n\n constructor(params: TParams) {\n super(params)\n }\n\n get config(): TParams['config'] {\n return this.params.config\n }\n\n get pollFrequency(): number {\n const frequency = this.config?.pollFrequency ?? POLLING_FREQUENCY_DEFAULT\n if (frequency < POLLING_FREQUENCY_MIN || frequency > POLLING_FREQUENCY_MAX) {\n return POLLING_FREQUENCY_DEFAULT\n }\n return frequency\n }\n\n get rootModule() {\n return this.params.rootModule\n }\n\n /**\n * A cache of the last offset of the Diviner process per address\n */\n protected get lastState(): LRUCache<Address, Hex> {\n const requiredConfig = { max: 1000, ttl: 0 }\n this._lastState = this._lastState ?? new LRUCache<Address, Hex>(requiredConfig)\n return this._lastState\n }\n\n async queriesArchivist() {\n return await this._resolveMutex.runExclusive(async () => {\n this._queriesArchivist\n = this._queriesArchivist\n ?? (await this.resolve(\n assertEx(this.config?.intersect?.queries?.archivist, () => 'No queries Archivist defined'),\n isArchivistInstance,\n ))\n return this._queriesArchivist\n })\n }\n\n async queriesDiviner() {\n return await this._resolveMutex.runExclusive(async () => {\n this._queriesDiviner\n = this._queriesDiviner\n ?? ((await this.resolve(\n assertEx(this.config?.intersect?.queries?.boundWitnessDiviner, () => 'No queries Diviner defined'),\n isDivinerInstance,\n )) as DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, QueryBoundWitness>)\n return this._queriesDiviner\n })\n }\n\n async responsesArchivist() {\n return await this._resolveMutex.runExclusive(async () => {\n this._responsesArchivist\n = this._responsesArchivist\n ?? (await this.resolve(\n assertEx(this.config?.intersect?.responses?.archivist, () => 'No responses Archivist defined'),\n isArchivistInstance,\n ))\n return this._responsesArchivist\n })\n }\n\n async responsesDiviner() {\n return await this._resolveMutex.runExclusive(async () => {\n this._responsesDiviner\n = this._responsesDiviner\n ?? ((await this.resolve(\n assertEx(this.config?.intersect?.responses?.boundWitnessDiviner, () => 'No responses Diviner defined'),\n isDivinerInstance,\n )) as DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitness>)\n return this._responsesDiviner\n })\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: Hex) {\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<Hex> {\n await Promise.resolve()\n const state = this.lastState.get(address)\n if (state === undefined) {\n const newState = SequenceConstants.minLocalSequence\n this.lastState.set(address, newState)\n return newState\n } else {\n return state\n }\n }\n\n private async resolve<T extends ModuleInstance>(id: ModuleIdentifier, typeCheck: TypeCheck<T>): Promise<T | undefined> {\n if (Date.now() - (this._lastResolveFailure[id] ?? 0) < this._reResolveDelay) {\n return\n }\n this._lastResolveFailure[id] = Date.now()\n const resolved = await ResolveHelper.resolveModuleIdentifier(this.rootModule, id)\n if (resolved) {\n if (typeCheck(resolved)) {\n delete this._lastResolveFailure[id]\n return resolved\n } else {\n this.logger?.warn(`Unable to resolve responsesDiviner as correct type [${id}][${resolved?.constructor?.name}]: ${resolved.id}`)\n }\n } else {\n this.logger?.debug(`Unable to resolve queriesArchivist [${id}] [${await ResolveHelper.traceModuleIdentifier(this.rootModule, id)}]`)\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 type { Address } from '@xylabs/hex'\nimport { clearTimeoutEx, setTimeoutEx } from '@xylabs/timer'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { isQueryBoundWitnessWithStorageMeta } from '@xyo-network/boundwitness-model'\nimport { isBridgeInstance } from '@xyo-network/bridge-model'\nimport type { BoundWitnessDivinerQueryPayload } from '@xyo-network/diviner-boundwitness-model'\nimport { BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport type {\n ModuleIdentifier,\n ModuleInstance,\n} from '@xyo-network/module-model'\nimport {\n asModuleInstance,\n ModuleConfigSchema,\n resolveAddressToInstance,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Schema, WithStorageMeta } from '@xyo-network/payload-model'\nimport { SequenceConstants } from '@xyo-network/payload-model'\n\nimport { AsyncQueryBusBase } from './AsyncQueryBusBase.ts'\nimport type { AsyncQueryBusHostParams } from './model/index.ts'\n\nexport interface ExposeOptions {\n allowedQueries?: Schema[]\n failOnAlreadyExposed?: boolean\n}\n\nconst IDLE_POLLING_FREQUENCY_RATIO_MIN = 4 as const\nconst IDLE_POLLING_FREQUENCY_RATIO_MAX = 64 as const\nconst IDLE_POLLING_FREQUENCY_RATIO_DEFAULT = 16 as const\n\nconst IDLE_THRESHOLD_RATIO_MIN = 4 as const\nconst IDLE_THRESHOLD_RATIO_MAX = 64 as const\nconst IDLE_THRESHOLD_RATIO_DEFAULT = 16 as const\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 _idle = false\n private _lastQueryTime?: number\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 idlePollFrequency() {\n const frequency = this.config?.idlePollFrequency ?? IDLE_POLLING_FREQUENCY_RATIO_DEFAULT * this.pollFrequency\n if (frequency < this.pollFrequency * IDLE_POLLING_FREQUENCY_RATIO_MIN) {\n return IDLE_POLLING_FREQUENCY_RATIO_MIN * this.pollFrequency\n }\n if (frequency > this.pollFrequency * IDLE_POLLING_FREQUENCY_RATIO_MAX) {\n return IDLE_POLLING_FREQUENCY_RATIO_MAX * this.pollFrequency\n }\n return frequency\n }\n\n get idleThreshold() {\n const threshold = this.config?.idleThreshold ?? IDLE_THRESHOLD_RATIO_DEFAULT * this.idlePollFrequency\n if (threshold < this.idlePollFrequency * IDLE_THRESHOLD_RATIO_MIN) {\n return IDLE_POLLING_FREQUENCY_RATIO_MIN * this.pollFrequency\n }\n if (threshold > this.idlePollFrequency * IDLE_THRESHOLD_RATIO_MAX) {\n return IDLE_POLLING_FREQUENCY_RATIO_MAX * this.pollFrequency\n }\n return threshold\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(mod: ModuleInstance, options?: ExposeOptions) {\n const { failOnAlreadyExposed } = options ?? {}\n if (isBridgeInstance(mod)) {\n this.logger?.warn(`Attempted to expose a BridgeModule [${mod.id}] - Not exposing`)\n } else {\n assertEx(!failOnAlreadyExposed || !this._exposedAddresses.has(mod.address), () => `Address already exposed: ${mod.id} [${mod.address}]`)\n this._exposedAddresses.add(mod.address)\n this._exposeOptions[mod.address] = { ...options }\n this.logger?.debug(`${mod.id} exposed [${mod.address}]`)\n return mod\n }\n }\n\n async listeningModules(): Promise<ModuleInstance[]> {\n const exposedModules = [...(this.config?.listeningModules ?? []), ...this.exposedAddresses.values()]\n return await Promise.all(\n exposedModules.map(async exposedModule =>\n assertEx(\n asModuleInstance(await resolveAddressToInstance(this.rootModule, exposedModule)),\n () => `Unable to resolve listeningModule [${exposedModule}]`,\n )),\n )\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 async unexpose(id: ModuleIdentifier, validate = true) {\n const mod = asModuleInstance(await this.rootModule.resolve(id, { maxDepth: 10 }))\n if (mod) {\n assertEx(!validate || this._exposedAddresses.has(mod.address), () => `Address not exposed [${mod.address}][${mod.id}]`)\n this._exposedAddresses.delete(mod.address)\n delete this._exposeOptions[mod.address]\n this.logger?.debug(`${mod.address} [${mod.id}] unexposed`)\n }\n return mod\n }\n\n // eslint-disable-next-line complexity\n protected callLocalModule = async (localModule: ModuleInstance, query: WithStorageMeta<QueryBoundWitness>) => {\n this._idle = false\n this._lastQueryTime = Date.now()\n const localModuleName = localModule.id\n const queryArchivist = assertEx(\n await this.queriesArchivist(),\n () => `Unable to contact queriesArchivist [${this.config?.intersect?.queries?.archivist}]`,\n )\n const responsesArchivist = assertEx(\n await this.responsesArchivist(),\n () => `Unable to contact responsesArchivist [${this.config?.intersect?.queries?.archivist}]`,\n )\n const queryDestination = query?.$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 this.params.onQueryFulfillStarted?.({ payloads: queryPayloads, query })\n const queryPayloadsDict = await PayloadBuilder.toAllHashMap(queryPayloads)\n const queryHash = await PayloadBuilder.dataHash(query)\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 result = await localModule.query(query, queryPayloads, {\n allowedQueries: this._exposeOptions[localModule.address]?.allowedQueries,\n schema: ModuleConfigSchema,\n })\n const [bw, payloads, errors] = result\n this.logger?.debug(`Replying to query ${queryHash} addressed to module: ${localModuleName}`)\n const insertResult = await responsesArchivist.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?._sequence) {\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._sequence)\n }\n this.params.onQueryFulfillFinished?.({\n payloads: queryPayloads, query, result, status: 'success',\n })\n } catch (error) {\n this.params.onQueryFulfillFinished?.({\n payloads: queryPayloads, query, status: 'failure',\n })\n this.logger?.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 queriesDivinerId = assertEx(this.config?.intersect?.queries?.boundWitnessDiviner, () => 'No queries Diviner defined')\n const queriesBoundWitnessDiviner = await this.queriesDiviner()\n if (queriesBoundWitnessDiviner) {\n // Retrieve last offset from state store\n const prevState = 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: BoundWitnessDivinerQueryPayload = {\n destination,\n limit,\n order: 'asc',\n schema: BoundWitnessDivinerQuerySchema,\n cursor: prevState,\n }\n const result = await queriesBoundWitnessDiviner.divine([divinerQuery])\n const queries = result.filter(isQueryBoundWitnessWithStorageMeta)\n // eslint-disable-next-line unicorn/no-array-reduce, unicorn/prefer-math-min-max\n const highestQuerySequence = queries.reduce((acc, query) => (query._sequence > acc ? query._sequence : acc), SequenceConstants.minLocalSequence)\n const nextState = queries.length > 0 ? highestQuerySequence : SequenceConstants.minLocalSequence\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 this.logger?.debug('findQueriesToAddress', address, prevState, nextState)\n return queries\n } else {\n this.logger?.warn(\n `Unable to resolve queriesBoundWitnessDiviner [${queriesDivinerId}] [${await ResolveHelper.traceModuleIdentifier(this.rootModule, queriesDivinerId)}]`,\n )\n }\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(\n 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 const now = Date.now()\n if (this.idleThreshold < now - (this._lastQueryTime ?? now)) {\n this._idle = true\n }\n },\n this._idle ? this.idlePollFrequency : this.pollFrequency,\n )\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.id\n this.logger?.debug(`Checking for inbound queries to ${localModuleName} [${localModule.address}]`)\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 type { ModuleHostParams } from '../../AbstractModuleHost/index.ts'\nimport { AbstractModuleHost } from '../../AbstractModuleHost/index.ts'\nimport { AsyncQueryBusHost } from '../AsyncQueryBusHost.ts'\nimport type { AsyncQueryBusHostConfig } from '../model/index.ts'\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 = this.params.config.listeningModules ?? (await this.params.mod.resolve('*', { direction: 'down' })).map(m => m.address)\n this._busHost = new AsyncQueryBusHost({\n config: { ...this.params.config, listeningModules },\n logger: this.params.logger,\n rootModule: this.params.mod,\n })\n this._busHost?.start()\n }\n\n override stop() {\n this._busHost?.stop()\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { forget } from '@xylabs/forget'\nimport { isAddress } from '@xylabs/hex'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport type { ModuleProxyParams } from '@xyo-network/bridge-abstract'\nimport { AbstractModuleProxy } from '@xyo-network/bridge-abstract'\nimport type {\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleQueryResult,\n ResolveHelperConfig,\n} from '@xyo-network/module-model'\nimport { ResolveHelper } from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\n\nimport type { AsyncQueryBusClient } from '../AsyncQueryBusClient.ts'\n\nexport type AsyncQueryBusModuleProxyParams = ModuleProxyParams & {\n busClient: AsyncQueryBusClient\n}\n\nexport class AsyncQueryBusModuleProxy<\n TWrappedModule extends ModuleInstance = ModuleInstance,\n TParams extends Omit<AsyncQueryBusModuleProxyParams, 'config'> & { config: TWrappedModule['config'] } = Omit<\n AsyncQueryBusModuleProxyParams,\n 'config'\n > & {\n config: TWrappedModule['config']\n },\n>\n extends AbstractModuleProxy<TWrappedModule, TParams>\n implements ModuleInstance<TParams, TWrappedModule['eventData']> {\n protected static createCount = 0\n\n constructor(params: TParams) {\n AsyncQueryBusModuleProxy.createCount = AsyncQueryBusModuleProxy.createCount + 1\n if (Math.floor(AsyncQueryBusModuleProxy.createCount / 10) === AsyncQueryBusModuleProxy.createCount / 10) {\n console.log(`AsyncQueryBusModuleProxy.createCount: ${AsyncQueryBusModuleProxy.createCount}`)\n }\n super(params)\n }\n\n override get id(): ModuleIdentifier {\n return this.address\n }\n\n override get modName(): ModuleName | undefined {\n return undefined\n }\n\n async proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads?: Payload[]): Promise<ModuleQueryResult> {\n if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {\n forget(this.storeToArchivists([query, ...(payloads ?? [])]))\n }\n const result = await this.params.busClient.send(this.address, query, payloads)\n if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {\n forget(this.storeToArchivists(result.flat()))\n }\n return result\n }\n\n override async publicChildren(): Promise<ModuleInstance[]> {\n return (\n await Promise.all(\n Object.keys(await this.childAddressMap())\n .filter(exists)\n .map(address => this.resolve(address)),\n )\n ).filter(exists)\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n const config: ResolveHelperConfig = {\n address: this.address,\n dead: this.dead,\n downResolver: this.downResolver,\n logger: this.logger,\n mod: this,\n transformers: this.moduleIdentifierTransformers,\n upResolver: this.upResolver,\n }\n if (id === '*') {\n return (await this.publicChildren()) as T[]\n }\n switch (typeof id) {\n case 'string': {\n const parts = id.split(':')\n const first = assertEx(parts.shift(), () => 'Missing first')\n const remainingPath = parts.join(':')\n const address = isAddress(first) ? first : this.childAddressByName(first)\n if (!address) return undefined\n const firstInstance = (await this.params.host.resolve(address)) as ModuleInstance | undefined\n return (remainingPath ? await firstInstance?.resolve(remainingPath) : firstInstance) as T | undefined\n }\n default: {\n return (await ResolveHelper.resolve(config, id, options)).filter(mod => mod.address !== this.address)\n }\n }\n }\n\n override async startHandler(): Promise<boolean> {\n return await super.startHandler()\n }\n}\n","export const PubSubBridgeSchema = 'network.xyo.bridge.pubsub' as const\nexport type PubSubBridgeSchema = typeof PubSubBridgeSchema\n","import type { Address } from '@xylabs/hex'\nimport type { EmptyObject } from '@xylabs/object'\nimport type { BridgeConfig } from '@xyo-network/bridge-model'\n\nimport type { AsyncQueryBusClientConfig, AsyncQueryBusHostConfig } from './AsyncQueryBus/index.ts'\nimport { PubSubBridgeSchema } from './Schema.ts'\n\nexport const PubSubBridgeConfigSchema = `${PubSubBridgeSchema}.config` as const\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 { forget } from '@xylabs/forget'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { AbstractBridge } from '@xyo-network/bridge-abstract'\nimport {\n BridgeExposeOptions,\n BridgeModule,\n BridgeUnexposeOptions,\n QueryFulfillFinishedEventArgs,\n QueryFulfillStartedEventArgs,\n QuerySendFinishedEventArgs,\n QuerySendStartedEventArgs,\n} from '@xyo-network/bridge-model'\nimport {\n AddressPayload,\n AddressSchema,\n creatableModule,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n resolveAddressToInstance,\n resolveAddressToInstanceUp,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { asNodeInstance } from '@xyo-network/node-model'\nimport { isPayloadOfSchemaType, Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport { AsyncQueryBusClient, AsyncQueryBusHost } from './AsyncQueryBus/index.ts'\nimport { PubSubBridgeConfigSchema } from './Config.ts'\nimport { PubSubBridgeParams } from './Params.ts'\nimport { PubSubBridgeModuleResolver } from './PubSubBridgeModuleResolver.ts'\n\nconst moduleName = 'PubSubBridge'\n\n@creatableModule()\nexport class PubSubBridge<TParams extends PubSubBridgeParams = PubSubBridgeParams> extends AbstractBridge<TParams> implements BridgeModule<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, PubSubBridgeConfigSchema]\n static override readonly defaultConfigSchema: Schema = 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 _discoverRootsMutex = new Mutex()\n private _resolver?: PubSubBridgeModuleResolver\n\n override get resolver(): PubSubBridgeModuleResolver {\n this._resolver\n = this._resolver\n ?? new PubSubBridgeModuleResolver({\n additionalSigners: this.additionalSigners,\n archiving: { ...this.archiving, resolveArchivists: this.resolveArchivingArchivists.bind(this) },\n bridge: this,\n busClient: assertEx(this.busClient(), () => 'busClient not configured'),\n onQuerySendFinished: (args: Omit<QuerySendFinishedEventArgs, 'mod'>) => {\n forget(this.emit('querySendFinished', { mod: this, ...args }))\n },\n onQuerySendStarted: (args: Omit<QuerySendStartedEventArgs, 'mod'>) => {\n forget(this.emit('querySendStarted', { mod: this, ...args }))\n },\n root: this,\n wrapperAccount: this.account,\n })\n return this._resolver\n }\n\n protected get moduleName() {\n return this.modName ?? moduleName\n }\n\n async connect(id: ModuleIdentifier, maxDepth = 5): Promise<Address | undefined> {\n const transformedId = assertEx(await ResolveHelper.transformModuleIdentifier(id), () => `Unable to transform module identifier: ${id}`)\n // check if already connected\n const existingInstance = await this.resolve<ModuleInstance>(transformedId)\n if (existingInstance) {\n return existingInstance.address\n }\n\n // use the resolver to create the proxy instance\n const [instance] = await this.resolver.resolveHandler<ModuleInstance>(id)\n return await this.connectInstance(instance, maxDepth)\n }\n\n async disconnect(id: ModuleIdentifier): Promise<Address | undefined> {\n const transformedId = assertEx(await ResolveHelper.transformModuleIdentifier(id), () => `Unable to transform module identifier: ${id}`)\n const instance = await this.resolve<ModuleInstance>(transformedId)\n if (instance) {\n this.downResolver.remove(instance.address)\n return instance.address\n }\n }\n\n async exposeChild(mod: ModuleInstance, options?: BridgeExposeOptions | undefined): Promise<ModuleInstance[]> {\n const { maxDepth = 5 } = options ?? {}\n console.log(`exposeChild: ${mod.address} ${mod?.id} ${maxDepth}`)\n const host = assertEx(this.busHost(), () => 'Not configured as a host')\n host.expose(mod)\n const children = maxDepth > 0 ? ((await mod.publicChildren?.()) ?? []) : []\n this.logger?.log(`childrenToExpose [${mod.id}][${mod.address}]: ${toJsonString(children.map(child => child.id))}`)\n const exposedChildren = (await Promise.all(children.map(child => this.exposeChild(child, { maxDepth: maxDepth - 1, required: false }))))\n .flat()\n .filter(exists)\n const allExposed = [mod, ...exposedChildren]\n\n for (const exposedMod of allExposed) this.logger?.log(`exposed: ${exposedMod.address} [${mod.id}]`)\n\n return allExposed\n }\n\n async exposeHandler(address: Address, options?: BridgeExposeOptions | undefined): Promise<ModuleInstance[]> {\n const { required = true } = options ?? {}\n const mod = await resolveAddressToInstanceUp(this, address)\n console.log(`exposeHandler: ${address} ${mod?.id}`)\n if (required && !mod) {\n throw new Error(`Unable to find required module: ${address}`)\n }\n if (mod) {\n return this.exposeChild(mod, options)\n }\n return []\n }\n\n exposedHandler(): Address[] {\n const exposedSet = this.busHost()?.exposedAddresses\n return exposedSet ? [...exposedSet] : []\n }\n\n async getRoots(force?: boolean): Promise<ModuleInstance[]> {\n return await this._discoverRootsMutex.runExclusive(async () => {\n if (this._roots === undefined || force) {\n const rootAddresses = (\n await Promise.all(\n (this.config.roots ?? []).map(async (id) => {\n try {\n return await ResolveHelper.transformModuleIdentifier(id)\n } catch (ex) {\n this.logger?.warn('Unable to transform module identifier:', id, ex)\n return\n }\n }),\n )\n ).filter(exists)\n const rootInstances = (\n await Promise.all(\n rootAddresses.map(async (root) => {\n try {\n return await this.resolver.resolveHandler<ModuleInstance>(root)\n } catch (ex) {\n this.logger?.warn('Unable to resolve root:', root, ex)\n return\n }\n }),\n )\n )\n .flat()\n .filter(exists)\n for (const instance of rootInstances) {\n this.downResolver.add(instance)\n }\n this._roots = rootInstances\n }\n return this._roots\n })\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n const roots = (this._roots ?? []) as T[]\n const workingSet = (options.direction === 'up' ? [this as ModuleInstance] : [...roots, this]) as T[]\n if (id === '*') {\n const remainingDepth = (options.maxDepth ?? 1) - 1\n return remainingDepth <= 0\n ? workingSet\n : (\n [...workingSet, ...(await Promise.all(roots.map(mod => mod.resolve('*', { ...options, maxDepth: remainingDepth })))).flat()]\n )\n }\n switch (typeof id) {\n case 'string': {\n const parts = id.split(':')\n const first = assertEx(parts.shift(), () => 'Missing first part')\n const firstInstance: ModuleInstance | undefined\n = isAddress(first)\n ? ((await resolveAddressToInstance(this, first, undefined, [], options.direction)) as T)\n : this._roots?.find(mod => mod.id === first)\n return (parts.length === 0 ? firstInstance : firstInstance?.resolve(parts.join(':'), options)) as T | undefined\n }\n default: {\n return\n }\n }\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 = 2, required = true } = options ?? {}\n const host = assertEx(this.busHost(), () => 'Not configured as a host')\n const mod = await host.unexpose(id, required)\n if (mod) {\n const children = maxDepth > 0 ? ((await mod.publicChildren?.()) ?? []) : []\n const exposedChildren = (\n await Promise.all(children.map(child => this.unexposeHandler(child.address, { maxDepth: maxDepth - 1, required: false })))\n )\n .flat()\n .filter(exists)\n return [mod, ...exposedChildren]\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 rootModule: 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 onQueryFulfillFinished: (args: Omit<QueryFulfillFinishedEventArgs, 'mod'>) => {\n if (this.archiving && this.isAllowedArchivingQuery(args.query.schema)) {\n forget(this.storeToArchivists(args.result?.flat() ?? []))\n }\n forget(this.emit('queryFulfillFinished', { mod: this, ...args }))\n },\n onQueryFulfillStarted: (args: Omit<QueryFulfillStartedEventArgs, 'mod'>) => {\n if (this.archiving && this.isAllowedArchivingQuery(args.query.schema)) {\n forget(this.storeToArchivists([args.query, ...(args.payloads ?? [])]))\n }\n forget(this.emit('queryFulfillStarted', { mod: this, ...args }))\n },\n rootModule: this,\n })\n }\n return this._busHost\n }\n\n protected async connectInstance(instance?: ModuleInstance, maxDepth = 5): Promise<Address | undefined> {\n if (instance) {\n this.downResolver.add(instance)\n if (maxDepth > 0) {\n const node = asNodeInstance(instance)\n if (node) {\n const state = await node.state()\n const children = (state?.filter(isPayloadOfSchemaType<AddressPayload>(AddressSchema)).map(s => s.address) ?? []).filter(\n a => a !== instance.address,\n )\n await Promise.all(children.map(child => this.connect(child, maxDepth - 1)))\n }\n }\n this.logger?.log(`Connect: ${instance.id}`)\n return instance.address\n }\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 type { Address } from '@xylabs/hex'\nimport { isAddress } from '@xylabs/hex'\nimport { Account } from '@xyo-network/account'\nimport type { BridgeModuleResolverParams } from '@xyo-network/bridge-abstract'\nimport { AbstractBridgeModuleResolver, wrapModuleWithType } from '@xyo-network/bridge-abstract'\nimport type { ConfigPayload } from '@xyo-network/config-payload-plugin'\nimport { ConfigSchema } from '@xyo-network/config-payload-plugin'\nimport type {\n ModuleConfig,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n} from '@xyo-network/module-model'\nimport {\n asModuleInstance,\n ModuleConfigSchema,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { Mutex } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport type { AsyncQueryBusClient, AsyncQueryBusModuleProxyParams } from './AsyncQueryBus/index.ts'\nimport { AsyncQueryBusModuleProxy } from './AsyncQueryBus/index.ts'\n\nexport interface PubSubBridgeModuleResolverParams extends BridgeModuleResolverParams {\n busClient: AsyncQueryBusClient\n}\n\nexport class PubSubBridgeModuleResolver extends AbstractBridgeModuleResolver<PubSubBridgeModuleResolverParams> {\n protected _resolvedCache = new LRUCache<Address, ModuleInstance>({ max: 1000 })\n protected _resolvedCacheMutex = new Mutex()\n\n override async resolveHandler<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T[]> {\n const parentResult = await super.resolveHandler(id, options)\n if (parentResult.length > 0) {\n return parentResult\n }\n const idParts = id.split(':')\n const untransformedFirstPart = assertEx(idParts.shift(), () => 'Missing module identifier')\n const firstPart = await ResolveHelper.transformModuleIdentifier(untransformedFirstPart)\n assertEx(isAddress(firstPart), () => `Invalid module address: ${firstPart}`)\n const remainderParts = idParts.join(':')\n const instance: T = await this._resolvedCacheMutex.runExclusive(async () => {\n const cachedMod = this._resolvedCache.get(firstPart as Address)\n if (cachedMod) {\n const result = idParts.length <= 0 ? cachedMod : cachedMod.resolve(remainderParts, { ...options, maxDepth: (options?.maxDepth ?? 5) - 1 })\n return result as T\n }\n const account = await Account.random()\n const finalParams: AsyncQueryBusModuleProxyParams = {\n account,\n archiving: this.params.archiving,\n busClient: this.params.busClient,\n config: { schema: ModuleConfigSchema },\n host: this,\n moduleAddress: firstPart as Address,\n onQuerySendFinished: this.params.onQuerySendFinished,\n onQuerySendStarted: this.params.onQuerySendStarted,\n }\n const proxy = new AsyncQueryBusModuleProxy<T, AsyncQueryBusModuleProxyParams>(finalParams)\n const state = await proxy.state()\n if (state) {\n const configSchema = (state.find(payload => payload.schema === ConfigSchema) as ConfigPayload | undefined)?.config\n const config = assertEx(\n state.find(payload => payload.schema === configSchema),\n () => 'Unable to locate config',\n ) as ModuleConfig\n proxy.setConfig(config)\n }\n await proxy.start?.()\n const wrapped = wrapModuleWithType(proxy, account) as unknown as T\n assertEx(asModuleInstance<T>(wrapped, {}), () => `Failed to asModuleInstance [${id}]`)\n this._resolvedCache.set(wrapped.address, wrapped)\n return wrapped as ModuleInstance as T\n })\n const result = remainderParts.length > 0 ? await instance.resolve(remainderParts, options) : instance\n return result ? [result] : []\n }\n}\n"],"mappings":"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","names":["assertEx","LRUCache","Base","LRUCache","assertEx","assertEx","clearTimeoutEx","setTimeoutEx","BoundWitnessDivinerQuerySchema","ResolveHelper","PayloadBuilder","SequenceConstants","assertEx","clearTimeoutEx","PayloadBuilder","querySchema","BoundWitnessDivinerQuerySchema","SequenceConstants","ResolveHelper","setTimeoutEx","assertEx","forget","ResolveHelper","assertEx","exists","forget","isAddress","resolveAddressToInstance","ResolveHelper","Mutex","assertEx","isAddress","asModuleInstance","ModuleConfigSchema","ResolveHelper","Mutex","LRUCache","LRUCache","Mutex","assertEx","ResolveHelper","isAddress","result","ModuleConfigSchema","asModuleInstance","Mutex","assertEx","forget","ResolveHelper","exists","isAddress","resolveAddressToInstance"]}
1
+ {"version":3,"sources":["../../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":["import type { BaseParams } from '@xylabs/base'\nimport { Base } from '@xylabs/base'\nimport type { Promisable } from '@xylabs/promise'\nimport type { ModuleInstance } from '@xyo-network/module-model'\n\nexport type ModuleHostParams<THostedInstance extends ModuleInstance = ModuleInstance> = BaseParams<{\n mod: 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 { assertEx } from '@xylabs/assert'\nimport { delay } from '@xylabs/delay'\nimport { forget } from '@xylabs/forget'\nimport type { Address } from '@xylabs/hex'\nimport { clearTimeoutEx, setTimeoutEx } from '@xylabs/timer'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { isBoundWitness } from '@xyo-network/boundwitness-model'\nimport type { BoundWitnessDivinerQueryPayload } from '@xyo-network/diviner-boundwitness-model'\nimport { BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport type { CacheConfig, ModuleQueryResult } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n ModuleError, Payload, WithSources,\n} from '@xyo-network/payload-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AsyncQueryBusBase } from './AsyncQueryBusBase.ts'\nimport type { AsyncQueryBusClientParams } from './model/index.ts'\nimport { Pending } from './model/index.ts'\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 {\n max: 100, ttl: 1000 * 60, ...queryCacheConfig,\n }\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 routedQuery = { ...query, $destination: [address] }\n // console.log('queryArchivist - calling')\n const queryArchivist = assertEx(\n await this.queriesArchivist(),\n () => `Unable to contact queriesArchivist [${this.config?.intersect?.queries?.archivist}]`,\n )\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 = await PayloadBuilder.dataHash(routedQuery)\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 return new Promise<ModuleQueryResult>((resolve, reject) => {\n this.logger?.debug(`Polling for response to query: ${routedQueryHash}`)\n let nextDelay = 100\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(nextDelay)\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?.log(`Returning response to query: ${routedQueryHash}`)\n resolve(response)\n return\n }\n // back off the polling frequency\n nextDelay = Math.floor(nextDelay * 1.2)\n // cap it at 1000ms\n if (nextDelay > 1000) nextDelay = 1000\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: WithSources<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 }\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.pollFrequency)\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 if (responseArchivist) {\n const responseBoundWitnessDiviner = await this.responsesDiviner()\n if (responseBoundWitnessDiviner) {\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 = {\n limit: 1, order: 'desc', schema: BoundWitnessDivinerQuerySchema, sourceQuery,\n }\n const result = await responseBoundWitnessDiviner.divine([divinerQuery])\n if (result && result.length > 0) {\n const response = result.find(isBoundWitness)\n if (response && (response 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: Payload[] = 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 }\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 { Base } from '@xylabs/base'\nimport type { Address, Hex } from '@xylabs/hex'\nimport type { TypeCheck } from '@xylabs/object'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { isArchivistInstance } from '@xyo-network/archivist-model'\nimport type { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport type { BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload } from '@xyo-network/diviner-boundwitness-model'\nimport type { DivinerInstance } from '@xyo-network/diviner-model'\nimport { isDivinerInstance } from '@xyo-network/diviner-model'\nimport type {\n ModuleConfig, ModuleIdentifier, ModuleInstance,\n} from '@xyo-network/module-model'\nimport { ResolveHelper } from '@xyo-network/module-model'\nimport { SequenceConstants } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport type { AsyncQueryBusParams } from './model/index.ts'\n\nconst POLLING_FREQUENCY_MIN = 100 as const\nconst POLLING_FREQUENCY_MAX = 60_000 as const\nconst POLLING_FREQUENCY_DEFAULT = 1000 as const\n\nexport class AsyncQueryBusBase<TParams extends AsyncQueryBusParams = AsyncQueryBusParams> extends Base<TParams> {\n protected _lastState?: LRUCache<Address, Hex>\n protected _targetConfigs: Record<Address, ModuleConfig> = {}\n protected _targetQueries: Record<Address, string[]> = {}\n\n private _lastResolveFailure: Record<ModuleIdentifier, number> = {}\n private _queriesArchivist?: ArchivistInstance\n private _queriesDiviner?: DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, QueryBoundWitness>\n private _reResolveDelay = 1000 * 5 // 5 seconds\n private _resolveMutex = new Mutex()\n private _responsesArchivist?: ArchivistInstance\n private _responsesDiviner?: DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitness>\n\n constructor(params: TParams) {\n super(params)\n }\n\n get config(): TParams['config'] {\n return this.params.config\n }\n\n get pollFrequency(): number {\n const frequency = this.config?.pollFrequency ?? POLLING_FREQUENCY_DEFAULT\n if (frequency < POLLING_FREQUENCY_MIN || frequency > POLLING_FREQUENCY_MAX) {\n return POLLING_FREQUENCY_DEFAULT\n }\n return frequency\n }\n\n get rootModule() {\n return this.params.rootModule\n }\n\n /**\n * A cache of the last offset of the Diviner process per address\n */\n protected get lastState(): LRUCache<Address, Hex> {\n const requiredConfig = { max: 1000, ttl: 0 }\n this._lastState = this._lastState ?? new LRUCache<Address, Hex>(requiredConfig)\n return this._lastState\n }\n\n async queriesArchivist() {\n return await this._resolveMutex.runExclusive(async () => {\n this._queriesArchivist\n = this._queriesArchivist\n ?? (await this.resolve(\n assertEx(this.config?.intersect?.queries?.archivist, () => 'No queries Archivist defined'),\n isArchivistInstance,\n ))\n return this._queriesArchivist\n })\n }\n\n async queriesDiviner() {\n return await this._resolveMutex.runExclusive(async () => {\n this._queriesDiviner\n = this._queriesDiviner\n ?? ((await this.resolve(\n assertEx(this.config?.intersect?.queries?.boundWitnessDiviner, () => 'No queries Diviner defined'),\n isDivinerInstance,\n )) as DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, QueryBoundWitness>)\n return this._queriesDiviner\n })\n }\n\n async responsesArchivist() {\n return await this._resolveMutex.runExclusive(async () => {\n this._responsesArchivist\n = this._responsesArchivist\n ?? (await this.resolve(\n assertEx(this.config?.intersect?.responses?.archivist, () => 'No responses Archivist defined'),\n isArchivistInstance,\n ))\n return this._responsesArchivist\n })\n }\n\n async responsesDiviner() {\n return await this._resolveMutex.runExclusive(async () => {\n this._responsesDiviner\n = this._responsesDiviner\n ?? ((await this.resolve(\n assertEx(this.config?.intersect?.responses?.boundWitnessDiviner, () => 'No responses Diviner defined'),\n isDivinerInstance,\n )) as DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitness>)\n return this._responsesDiviner\n })\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: Hex) {\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<Hex> {\n await Promise.resolve()\n const state = this.lastState.get(address)\n if (state === undefined) {\n const newState = SequenceConstants.minLocalSequence\n this.lastState.set(address, newState)\n return newState\n } else {\n return state\n }\n }\n\n private async resolve<T extends ModuleInstance>(id: ModuleIdentifier, typeCheck: TypeCheck<T>): Promise<T | undefined> {\n if (Date.now() - (this._lastResolveFailure[id] ?? 0) < this._reResolveDelay) {\n return\n }\n this._lastResolveFailure[id] = Date.now()\n const resolved = await ResolveHelper.resolveModuleIdentifier(this.rootModule, id)\n if (resolved) {\n if (typeCheck(resolved)) {\n delete this._lastResolveFailure[id]\n return resolved\n } else {\n this.logger?.warn(`Unable to resolve responsesDiviner as correct type [${id}][${resolved?.constructor?.name}]: ${resolved.id}`)\n }\n } else {\n this.logger?.debug(`Unable to resolve queriesArchivist [${id}] [${await ResolveHelper.traceModuleIdentifier(this.rootModule, id)}]`)\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 type { Address } from '@xylabs/hex'\nimport { clearTimeoutEx, setTimeoutEx } from '@xylabs/timer'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { isQueryBoundWitnessWithStorageMeta } from '@xyo-network/boundwitness-model'\nimport { isBridgeInstance } from '@xyo-network/bridge-model'\nimport type { BoundWitnessDivinerQueryPayload } from '@xyo-network/diviner-boundwitness-model'\nimport { BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport type {\n ModuleIdentifier,\n ModuleInstance,\n} from '@xyo-network/module-model'\nimport {\n asModuleInstance,\n ModuleConfigSchema,\n resolveAddressToInstance,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Schema, WithStorageMeta } from '@xyo-network/payload-model'\nimport { SequenceConstants } from '@xyo-network/payload-model'\n\nimport { AsyncQueryBusBase } from './AsyncQueryBusBase.ts'\nimport type { AsyncQueryBusHostParams } from './model/index.ts'\n\nexport interface ExposeOptions {\n allowedQueries?: Schema[]\n failOnAlreadyExposed?: boolean\n}\n\nconst IDLE_POLLING_FREQUENCY_RATIO_MIN = 4 as const\nconst IDLE_POLLING_FREQUENCY_RATIO_MAX = 64 as const\nconst IDLE_POLLING_FREQUENCY_RATIO_DEFAULT = 16 as const\n\nconst IDLE_THRESHOLD_RATIO_MIN = 4 as const\nconst IDLE_THRESHOLD_RATIO_MAX = 64 as const\nconst IDLE_THRESHOLD_RATIO_DEFAULT = 16 as const\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 _idle = false\n private _lastQueryTime?: number\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 idlePollFrequency() {\n const frequency = this.config?.idlePollFrequency ?? IDLE_POLLING_FREQUENCY_RATIO_DEFAULT * this.pollFrequency\n if (frequency < this.pollFrequency * IDLE_POLLING_FREQUENCY_RATIO_MIN) {\n return IDLE_POLLING_FREQUENCY_RATIO_MIN * this.pollFrequency\n }\n if (frequency > this.pollFrequency * IDLE_POLLING_FREQUENCY_RATIO_MAX) {\n return IDLE_POLLING_FREQUENCY_RATIO_MAX * this.pollFrequency\n }\n return frequency\n }\n\n get idleThreshold() {\n const threshold = this.config?.idleThreshold ?? IDLE_THRESHOLD_RATIO_DEFAULT * this.idlePollFrequency\n if (threshold < this.idlePollFrequency * IDLE_THRESHOLD_RATIO_MIN) {\n return IDLE_POLLING_FREQUENCY_RATIO_MIN * this.pollFrequency\n }\n if (threshold > this.idlePollFrequency * IDLE_THRESHOLD_RATIO_MAX) {\n return IDLE_POLLING_FREQUENCY_RATIO_MAX * this.pollFrequency\n }\n return threshold\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(mod: ModuleInstance, options?: ExposeOptions) {\n const { failOnAlreadyExposed } = options ?? {}\n if (isBridgeInstance(mod)) {\n this.logger?.warn(`Attempted to expose a BridgeModule [${mod.id}] - Not exposing`)\n } else {\n assertEx(!failOnAlreadyExposed || !this._exposedAddresses.has(mod.address), () => `Address already exposed: ${mod.id} [${mod.address}]`)\n this._exposedAddresses.add(mod.address)\n this._exposeOptions[mod.address] = { ...options }\n this.logger?.debug(`${mod.id} exposed [${mod.address}]`)\n return mod\n }\n }\n\n async listeningModules(): Promise<ModuleInstance[]> {\n const exposedModules = [...(this.config?.listeningModules ?? []), ...this.exposedAddresses.values()]\n return await Promise.all(\n exposedModules.map(async exposedModule =>\n assertEx(\n asModuleInstance(await resolveAddressToInstance(this.rootModule, exposedModule)),\n () => `Unable to resolve listeningModule [${exposedModule}]`,\n )),\n )\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 async unexpose(id: ModuleIdentifier, validate = true) {\n const mod = asModuleInstance(await this.rootModule.resolve(id, { maxDepth: 10 }))\n if (mod) {\n assertEx(!validate || this._exposedAddresses.has(mod.address), () => `Address not exposed [${mod.address}][${mod.id}]`)\n this._exposedAddresses.delete(mod.address)\n delete this._exposeOptions[mod.address]\n this.logger?.debug(`${mod.address} [${mod.id}] unexposed`)\n }\n return mod\n }\n\n // eslint-disable-next-line complexity\n protected callLocalModule = async (localModule: ModuleInstance, query: WithStorageMeta<QueryBoundWitness>) => {\n this._idle = false\n this._lastQueryTime = Date.now()\n const localModuleName = localModule.id\n const queryArchivist = assertEx(\n await this.queriesArchivist(),\n () => `Unable to contact queriesArchivist [${this.config?.intersect?.queries?.archivist}]`,\n )\n const responsesArchivist = assertEx(\n await this.responsesArchivist(),\n () => `Unable to contact responsesArchivist [${this.config?.intersect?.queries?.archivist}]`,\n )\n const queryDestination = query?.$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 this.params.onQueryFulfillStarted?.({ payloads: queryPayloads, query })\n const queryPayloadsDict = await PayloadBuilder.toAllHashMap(queryPayloads)\n const queryHash = await PayloadBuilder.dataHash(query)\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 result = await localModule.query(query, queryPayloads, {\n allowedQueries: this._exposeOptions[localModule.address]?.allowedQueries,\n schema: ModuleConfigSchema,\n })\n const [bw, payloads, errors] = result\n this.logger?.debug(`Replying to query ${queryHash} addressed to module: ${localModuleName}`)\n const insertResult = await responsesArchivist.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?._sequence) {\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._sequence)\n }\n this.params.onQueryFulfillFinished?.({\n payloads: queryPayloads, query, result, status: 'success',\n })\n } catch (error) {\n this.params.onQueryFulfillFinished?.({\n payloads: queryPayloads, query, status: 'failure',\n })\n this.logger?.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 queriesDivinerId = assertEx(this.config?.intersect?.queries?.boundWitnessDiviner, () => 'No queries Diviner defined')\n const queriesBoundWitnessDiviner = await this.queriesDiviner()\n if (queriesBoundWitnessDiviner) {\n // Retrieve last offset from state store\n const prevState = 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: BoundWitnessDivinerQueryPayload = {\n destination,\n limit,\n order: 'asc',\n schema: BoundWitnessDivinerQuerySchema,\n cursor: prevState,\n }\n const result = await queriesBoundWitnessDiviner.divine([divinerQuery])\n const queries = result.filter(isQueryBoundWitnessWithStorageMeta)\n // eslint-disable-next-line unicorn/no-array-reduce, unicorn/prefer-math-min-max\n const highestQuerySequence = queries.reduce((acc, query) => (query._sequence > acc ? query._sequence : acc), SequenceConstants.minLocalSequence)\n const nextState = queries.length > 0 ? highestQuerySequence : SequenceConstants.minLocalSequence\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 this.logger?.debug('findQueriesToAddress', address, prevState, nextState)\n return queries\n } else {\n this.logger?.warn(\n `Unable to resolve queriesBoundWitnessDiviner [${queriesDivinerId}] [${await ResolveHelper.traceModuleIdentifier(this.rootModule, queriesDivinerId)}]`,\n )\n }\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(\n 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 const now = Date.now()\n if (this.idleThreshold < now - (this._lastQueryTime ?? now)) {\n this._idle = true\n }\n },\n this._idle ? this.idlePollFrequency : this.pollFrequency,\n )\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.id\n this.logger?.debug(`Checking for inbound queries to ${localModuleName} [${localModule.address}]`)\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 type { ModuleHostParams } from '../../AbstractModuleHost/index.ts'\nimport { AbstractModuleHost } from '../../AbstractModuleHost/index.ts'\nimport { AsyncQueryBusHost } from '../AsyncQueryBusHost.ts'\nimport type { AsyncQueryBusHostConfig } from '../model/index.ts'\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 = this.params.config.listeningModules ?? (await this.params.mod.resolve('*', { direction: 'down' })).map(m => m.address)\n this._busHost = new AsyncQueryBusHost({\n config: { ...this.params.config, listeningModules },\n logger: this.params.logger,\n rootModule: this.params.mod,\n })\n this._busHost?.start()\n }\n\n override stop() {\n this._busHost?.stop()\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { CreatableInstance } from '@xylabs/creatable'\nimport { exists } from '@xylabs/exists'\nimport { forget } from '@xylabs/forget'\nimport { isAddress } from '@xylabs/hex'\nimport { isString } from '@xylabs/typeof'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport type { ModuleProxyParams } from '@xyo-network/bridge-abstract'\nimport { AbstractModuleProxy } from '@xyo-network/bridge-abstract'\nimport type {\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleQueryResult,\n ResolveHelperConfig,\n} from '@xyo-network/module-model'\nimport { creatableModule, ResolveHelper } from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\n\nimport type { AsyncQueryBusClient } from '../AsyncQueryBusClient.ts'\n\nexport interface AsyncQueryBusModuleProxyParams extends ModuleProxyParams {\n busClient: AsyncQueryBusClient\n}\n\n@creatableModule()\nexport class AsyncQueryBusModuleProxy<\n TWrappedModule extends ModuleInstance = ModuleInstance,\n>\n extends AbstractModuleProxy<TWrappedModule, AsyncQueryBusModuleProxyParams & TWrappedModule['params']> {\n override get id(): ModuleIdentifier {\n return this.address\n }\n\n override get modName(): ModuleName | undefined {\n return undefined\n }\n\n static override async createHandler<T extends CreatableInstance>(\n inInstance: T,\n ) {\n const instance = (await super.createHandler(inInstance))\n return instance\n }\n\n async proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads?: Payload[]): Promise<ModuleQueryResult> {\n if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {\n forget(this.storeToArchivists([query, ...(payloads ?? [])]))\n }\n const result = await this.params.busClient.send(this.address, query, payloads)\n if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {\n forget(this.storeToArchivists(result.flat()))\n }\n return result\n }\n\n override async publicChildren(): Promise<ModuleInstance[]> {\n return (\n await Promise.all(\n Object.keys(await this.childAddressMap())\n .filter(exists)\n .map(address => this.resolve(address)),\n )\n ).filter(exists)\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n const config: ResolveHelperConfig = {\n address: this.address,\n dead: this.dead,\n downResolver: this.downResolver,\n logger: this.logger,\n mod: this,\n transformers: this.moduleIdentifierTransformers,\n upResolver: this.upResolver,\n }\n if (id === '*') {\n return (await this.publicChildren()) as T[]\n }\n switch (typeof id) {\n case 'string': {\n const parts = id.split(':')\n const first = assertEx(parts.shift(), () => 'Missing first')\n const remainingPath = parts.length > 0 ? parts.join(':') : undefined\n const address = isAddress(first) ? first : this.childAddressByName(first)\n if (!isAddress(address)) return undefined\n const firstInstance = (await this.params.host.resolve(address)) as ModuleInstance | undefined\n return (isString(remainingPath) ? await firstInstance?.resolve(remainingPath) : firstInstance) as T | undefined\n }\n default: {\n return (await ResolveHelper.resolve(config, id, options)).filter(mod => mod.address !== this.address)\n }\n }\n }\n}\n","export const PubSubBridgeSchema = 'network.xyo.bridge.pubsub' as const\nexport type PubSubBridgeSchema = typeof PubSubBridgeSchema\n","import type { Address } from '@xylabs/hex'\nimport type { EmptyObject } from '@xylabs/object'\nimport type { BridgeConfig } from '@xyo-network/bridge-model'\n\nimport type { AsyncQueryBusClientConfig, AsyncQueryBusHostConfig } from './AsyncQueryBus/index.ts'\nimport { PubSubBridgeSchema } from './Schema.ts'\n\nexport const PubSubBridgeConfigSchema = `${PubSubBridgeSchema}.config` as const\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 { forget } from '@xylabs/forget'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { AbstractBridge } from '@xyo-network/bridge-abstract'\nimport {\n BridgeExposeOptions,\n BridgeModule,\n BridgeUnexposeOptions,\n QueryFulfillFinishedEventArgs,\n QueryFulfillStartedEventArgs,\n QuerySendFinishedEventArgs,\n QuerySendStartedEventArgs,\n} from '@xyo-network/bridge-model'\nimport {\n AddressPayload,\n AddressSchema,\n creatableModule,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n resolveAddressToInstance,\n resolveAddressToInstanceUp,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { asNodeInstance } from '@xyo-network/node-model'\nimport { isPayloadOfSchemaType, Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport { AsyncQueryBusClient, AsyncQueryBusHost } from './AsyncQueryBus/index.ts'\nimport { PubSubBridgeConfigSchema } from './Config.ts'\nimport { PubSubBridgeParams } from './Params.ts'\nimport { PubSubBridgeModuleResolver } from './PubSubBridgeModuleResolver.ts'\n\nconst moduleName = 'PubSubBridge'\n\n@creatableModule()\nexport class PubSubBridge<TParams extends PubSubBridgeParams = PubSubBridgeParams> extends AbstractBridge<TParams> implements BridgeModule<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, PubSubBridgeConfigSchema]\n static override readonly defaultConfigSchema: Schema = 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 _discoverRootsMutex = new Mutex()\n private _resolver?: PubSubBridgeModuleResolver\n\n override get resolver(): PubSubBridgeModuleResolver {\n this._resolver\n = this._resolver\n ?? new PubSubBridgeModuleResolver({\n additionalSigners: this.additionalSigners,\n archiving: { ...this.archiving, resolveArchivists: this.resolveArchivingArchivists.bind(this) },\n bridge: this,\n busClient: assertEx(this.busClient(), () => 'busClient not configured'),\n onQuerySendFinished: (args: Omit<QuerySendFinishedEventArgs, 'mod'>) => {\n forget(this.emit('querySendFinished', { mod: this, ...args }))\n },\n onQuerySendStarted: (args: Omit<QuerySendStartedEventArgs, 'mod'>) => {\n forget(this.emit('querySendStarted', { mod: this, ...args }))\n },\n root: this,\n wrapperAccount: this.account,\n })\n return this._resolver\n }\n\n protected get moduleName() {\n return this.modName ?? moduleName\n }\n\n async connect(id: ModuleIdentifier, maxDepth = 5): Promise<Address | undefined> {\n const transformedId = assertEx(await ResolveHelper.transformModuleIdentifier(id), () => `Unable to transform module identifier: ${id}`)\n // check if already connected\n const existingInstance = await this.resolve<ModuleInstance>(transformedId)\n if (existingInstance) {\n return existingInstance.address\n }\n\n // use the resolver to create the proxy instance\n const [instance] = await this.resolver.resolveHandler<ModuleInstance>(id)\n return await this.connectInstance(instance, maxDepth)\n }\n\n async disconnect(id: ModuleIdentifier): Promise<Address | undefined> {\n const transformedId = assertEx(await ResolveHelper.transformModuleIdentifier(id), () => `Unable to transform module identifier: ${id}`)\n const instance = await this.resolve<ModuleInstance>(transformedId)\n if (instance) {\n this.downResolver.remove(instance.address)\n return instance.address\n }\n }\n\n async exposeChild(mod: ModuleInstance, options?: BridgeExposeOptions | undefined): Promise<ModuleInstance[]> {\n const { maxDepth = 5 } = options ?? {}\n console.log(`exposeChild: ${mod.address} ${mod?.id} ${maxDepth}`)\n const host = assertEx(this.busHost(), () => 'Not configured as a host')\n host.expose(mod)\n const children = maxDepth > 0 ? ((await mod.publicChildren?.()) ?? []) : []\n this.logger?.log(`childrenToExpose [${mod.id}][${mod.address}]: ${toJsonString(children.map(child => child.id))}`)\n const exposedChildren = (await Promise.all(children.map(child => this.exposeChild(child, { maxDepth: maxDepth - 1, required: false }))))\n .flat()\n .filter(exists)\n const allExposed = [mod, ...exposedChildren]\n\n for (const exposedMod of allExposed) this.logger?.log(`exposed: ${exposedMod.address} [${mod.id}]`)\n\n return allExposed\n }\n\n async exposeHandler(address: Address, options?: BridgeExposeOptions | undefined): Promise<ModuleInstance[]> {\n const { required = true } = options ?? {}\n const mod = await resolveAddressToInstanceUp(this, address)\n console.log(`exposeHandler: ${address} ${mod?.id}`)\n if (required && !mod) {\n throw new Error(`Unable to find required module: ${address}`)\n }\n if (mod) {\n return this.exposeChild(mod, options)\n }\n return []\n }\n\n exposedHandler(): Address[] {\n const exposedSet = this.busHost()?.exposedAddresses\n return exposedSet ? [...exposedSet] : []\n }\n\n async getRoots(force?: boolean): Promise<ModuleInstance[]> {\n return await this._discoverRootsMutex.runExclusive(async () => {\n if (this._roots === undefined || force) {\n const rootAddresses = (\n await Promise.all(\n (this.config.roots ?? []).map(async (id) => {\n try {\n return await ResolveHelper.transformModuleIdentifier(id)\n } catch (ex) {\n this.logger?.warn('Unable to transform module identifier:', id, ex)\n return\n }\n }),\n )\n ).filter(exists)\n const rootInstances = (\n await Promise.all(\n rootAddresses.map(async (root) => {\n try {\n return await this.resolver.resolveHandler<ModuleInstance>(root)\n } catch (ex) {\n this.logger?.warn('Unable to resolve root:', root, ex)\n return\n }\n }),\n )\n )\n .flat()\n .filter(exists)\n for (const instance of rootInstances) {\n this.downResolver.add(instance)\n }\n this._roots = rootInstances\n }\n return this._roots\n })\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n const roots = (this._roots ?? []) as T[]\n const workingSet = (options.direction === 'up' ? [this as ModuleInstance] : [...roots, this]) as T[]\n if (id === '*') {\n const remainingDepth = (options.maxDepth ?? 1) - 1\n return remainingDepth <= 0\n ? workingSet\n : (\n [...workingSet, ...(await Promise.all(roots.map(mod => mod.resolve('*', { ...options, maxDepth: remainingDepth })))).flat()]\n )\n }\n switch (typeof id) {\n case 'string': {\n const parts = id.split(':')\n const first = assertEx(parts.shift(), () => 'Missing first part')\n const firstInstance: ModuleInstance | undefined\n = isAddress(first)\n ? ((await resolveAddressToInstance(this, first, undefined, [], options.direction)) as T)\n : this._roots?.find(mod => mod.id === first)\n return (parts.length === 0 ? firstInstance : firstInstance?.resolve(parts.join(':'), options)) as T | undefined\n }\n default: {\n return\n }\n }\n }\n\n override async startHandler() {\n this.busHost()?.start()\n await super.startHandler()\n }\n\n async unexposeHandler(id: ModuleIdentifier, options?: BridgeUnexposeOptions | undefined): Promise<ModuleInstance[]> {\n const { maxDepth = 2, required = true } = options ?? {}\n const host = assertEx(this.busHost(), () => 'Not configured as a host')\n const mod = await host.unexpose(id, required)\n if (mod) {\n const children = maxDepth > 0 ? ((await mod.publicChildren?.()) ?? []) : []\n const exposedChildren = (\n await Promise.all(children.map(child => this.unexposeHandler(child.address, { maxDepth: maxDepth - 1, required: false })))\n )\n .flat()\n .filter(exists)\n return [mod, ...exposedChildren]\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 rootModule: 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 onQueryFulfillFinished: (args: Omit<QueryFulfillFinishedEventArgs, 'mod'>) => {\n if (this.archiving && this.isAllowedArchivingQuery(args.query.schema)) {\n forget(this.storeToArchivists(args.result?.flat() ?? []))\n }\n forget(this.emit('queryFulfillFinished', { mod: this, ...args }))\n },\n onQueryFulfillStarted: (args: Omit<QueryFulfillStartedEventArgs, 'mod'>) => {\n if (this.archiving && this.isAllowedArchivingQuery(args.query.schema)) {\n forget(this.storeToArchivists([args.query, ...(args.payloads ?? [])]))\n }\n forget(this.emit('queryFulfillStarted', { mod: this, ...args }))\n },\n rootModule: this,\n })\n }\n return this._busHost\n }\n\n protected async connectInstance(instance?: ModuleInstance, maxDepth = 5): Promise<Address | undefined> {\n if (instance) {\n this.downResolver.add(instance)\n if (maxDepth > 0) {\n const node = asNodeInstance(instance)\n if (node) {\n const state = await node.state()\n const children = (state?.filter(isPayloadOfSchemaType<AddressPayload>(AddressSchema)).map(s => s.address) ?? []).filter(\n a => a !== instance.address,\n )\n await Promise.all(children.map(child => this.connect(child, maxDepth - 1)))\n }\n }\n this.logger?.log(`Connect: ${instance.id}`)\n return instance.address\n }\n }\n\n protected override async stopHandler() {\n await super.stopHandler()\n this.busHost()?.stop()\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport { isAddress } from '@xylabs/hex'\nimport { Account } from '@xyo-network/account'\nimport type { BridgeModuleResolverParams } from '@xyo-network/bridge-abstract'\nimport { AbstractBridgeModuleResolver, wrapModuleWithType } from '@xyo-network/bridge-abstract'\nimport type { ConfigPayload } from '@xyo-network/config-payload-plugin'\nimport { ConfigSchema } from '@xyo-network/config-payload-plugin'\nimport type {\n ModuleConfig,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n} from '@xyo-network/module-model'\nimport {\n asModuleInstance,\n ModuleConfigSchema,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { Mutex } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport type { AsyncQueryBusClient, AsyncQueryBusModuleProxyParams } from './AsyncQueryBus/index.ts'\nimport { AsyncQueryBusModuleProxy } from './AsyncQueryBus/index.ts'\n\nexport interface PubSubBridgeModuleResolverParams extends BridgeModuleResolverParams {\n busClient: AsyncQueryBusClient\n}\n\nexport class PubSubBridgeModuleResolver extends AbstractBridgeModuleResolver<PubSubBridgeModuleResolverParams> {\n protected _resolvedCache = new LRUCache<Address, ModuleInstance>({ max: 1000 })\n protected _resolvedCacheMutex = new Mutex()\n\n override async resolveHandler<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T[]> {\n const parentResult = await super.resolveHandler(id, options)\n if (parentResult.length > 0) {\n return parentResult\n }\n const idParts = id.split(':')\n const untransformedFirstPart = assertEx(idParts.shift(), () => 'Missing module identifier')\n const firstPart = await ResolveHelper.transformModuleIdentifier(untransformedFirstPart)\n assertEx(isAddress(firstPart), () => `Invalid module address: ${firstPart}`)\n const remainderParts = idParts.join(':')\n const instance: T = await this._resolvedCacheMutex.runExclusive(async () => {\n const cachedMod = this._resolvedCache.get(firstPart as Address)\n if (cachedMod) {\n const result = idParts.length <= 0 ? cachedMod : cachedMod.resolve(remainderParts, { ...options, maxDepth: (options?.maxDepth ?? 5) - 1 })\n return result as T\n }\n const account = await Account.random()\n const finalParams: AsyncQueryBusModuleProxyParams = {\n name: 'PubSubBridgeModuleResolver',\n account,\n archiving: this.params.archiving,\n busClient: this.params.busClient,\n config: { schema: ModuleConfigSchema },\n host: this,\n moduleAddress: firstPart as Address,\n onQuerySendFinished: this.params.onQuerySendFinished,\n onQuerySendStarted: this.params.onQuerySendStarted,\n }\n const proxy = await AsyncQueryBusModuleProxy.create(finalParams)\n const state = await proxy.state()\n const configSchema = (state.find(payload => payload.schema === ConfigSchema) as ConfigPayload | undefined)?.config\n const config = assertEx(\n state.find(payload => payload.schema === configSchema),\n () => 'Unable to locate config',\n ) as ModuleConfig\n proxy.setConfig(config)\n await proxy.start?.()\n const wrapped = wrapModuleWithType(proxy, account) as unknown as T\n assertEx(asModuleInstance<T>(wrapped, {}), () => `Failed to asModuleInstance [${id}]`)\n this._resolvedCache.set(wrapped.address, wrapped)\n return wrapped as ModuleInstance as T\n })\n const result = remainderParts.length > 0 ? await instance.resolve(remainderParts, options) : instance\n return result ? [result] : []\n }\n}\n"],"mappings":"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","names":["assertEx","LRUCache","Base","LRUCache","assertEx","assertEx","clearTimeoutEx","setTimeoutEx","BoundWitnessDivinerQuerySchema","ResolveHelper","PayloadBuilder","SequenceConstants","assertEx","clearTimeoutEx","PayloadBuilder","querySchema","BoundWitnessDivinerQuerySchema","SequenceConstants","ResolveHelper","setTimeoutEx","assertEx","forget","ResolveHelper","forget","assertEx","ResolveHelper","assertEx","exists","forget","isAddress","creatableModule","resolveAddressToInstance","ResolveHelper","Mutex","assertEx","isAddress","asModuleInstance","ModuleConfigSchema","ResolveHelper","Mutex","LRUCache","LRUCache","Mutex","assertEx","ResolveHelper","isAddress","result","ModuleConfigSchema","asModuleInstance","Mutex","assertEx","forget","ResolveHelper","exists","isAddress","resolveAddressToInstance","creatableModule"]}
@@ -2,7 +2,7 @@ import { Base } from '@xylabs/base';
2
2
  import type { Address, Hex } from '@xylabs/hex';
3
3
  import type { ArchivistInstance } from '@xyo-network/archivist-model';
4
4
  import type { BoundWitness } from '@xyo-network/boundwitness-model';
5
- import type { BoundWitnessDivinerQueryPayload } from '@xyo-network/diviner-boundwitness-model';
5
+ import type { BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload } from '@xyo-network/diviner-boundwitness-model';
6
6
  import type { DivinerInstance } from '@xyo-network/diviner-model';
7
7
  import type { ModuleConfig, ModuleInstance } from '@xyo-network/module-model';
8
8
  import { LRUCache } from 'lru-cache';
@@ -21,60 +21,15 @@ export declare class AsyncQueryBusBase<TParams extends AsyncQueryBusParams = Asy
21
21
  constructor(params: TParams);
22
22
  get config(): TParams['config'];
23
23
  get pollFrequency(): number;
24
- get rootModule(): ModuleInstance<import("@xylabs/base").BaseParamsFields & {
25
- account?: import("@xyo-network/account-model").AccountInstance | "random";
26
- addToResolvers?: boolean;
27
- additionalSigners?: import("@xyo-network/account-model").AccountInstance[];
28
- allowNameResolution?: boolean;
29
- config: import("@xyo-network/module-model").AnyConfigSchema<ModuleConfig>;
30
- ephemeralQueryAccountEnabled?: boolean;
31
- moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[];
32
- statusReporter?: import("@xyo-network/module-model").ModuleStatusReporter;
33
- } & import("@xyo-network/module-model").ModuleChildrenParams, import("@xyo-network/module-model").ModuleEventData<object>>;
24
+ get rootModule(): ModuleInstance<import("@xyo-network/module-model").ModuleParams<import("@xyo-network/module-model").AnyConfigSchema<ModuleConfig>>, import("@xyo-network/module-model").ModuleEventData<object>>;
34
25
  /**
35
26
  * A cache of the last offset of the Diviner process per address
36
27
  */
37
28
  protected get lastState(): LRUCache<Address, Hex>;
38
- queriesArchivist(): Promise<ArchivistInstance<import("@xylabs/base").BaseParamsFields & {
39
- account?: import("@xyo-network/account-model").AccountInstance | "random";
40
- addToResolvers?: boolean;
41
- additionalSigners?: import("@xyo-network/account-model").AccountInstance[];
42
- allowNameResolution?: boolean;
43
- config: import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/archivist-model").ArchivistConfig>;
44
- ephemeralQueryAccountEnabled?: boolean;
45
- moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[];
46
- statusReporter?: import("@xyo-network/module-model").ModuleStatusReporter;
47
- } & import("@xyo-network/module-model").ModuleChildrenParams & import("@xyo-network/archivist-model").ArchivistParamFields & object, import("@xyo-network/archivist-model").ArchivistModuleEventData, import("@xyo-network/payload-model").Payload> | undefined>;
48
- queriesDiviner(): Promise<DivinerInstance<import("@xylabs/base").BaseParamsFields & {
49
- account?: import("@xyo-network/account-model").AccountInstance | "random";
50
- addToResolvers?: boolean;
51
- additionalSigners?: import("@xyo-network/account-model").AccountInstance[];
52
- allowNameResolution?: boolean;
53
- config: import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/diviner-boundwitness-model").BoundWitnessDivinerConfig>;
54
- ephemeralQueryAccountEnabled?: boolean;
55
- moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[];
56
- statusReporter?: import("@xyo-network/module-model").ModuleStatusReporter;
57
- } & import("@xyo-network/module-model").ModuleChildrenParams, BoundWitnessDivinerQueryPayload, import("@xyo-network/boundwitness-model").UnsignedQueryBoundWitness, import("@xyo-network/diviner-model").DivinerModuleEventData>>;
58
- responsesArchivist(): Promise<ArchivistInstance<import("@xylabs/base").BaseParamsFields & {
59
- account?: import("@xyo-network/account-model").AccountInstance | "random";
60
- addToResolvers?: boolean;
61
- additionalSigners?: import("@xyo-network/account-model").AccountInstance[];
62
- allowNameResolution?: boolean;
63
- config: import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/archivist-model").ArchivistConfig>;
64
- ephemeralQueryAccountEnabled?: boolean;
65
- moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[];
66
- statusReporter?: import("@xyo-network/module-model").ModuleStatusReporter;
67
- } & import("@xyo-network/module-model").ModuleChildrenParams & import("@xyo-network/archivist-model").ArchivistParamFields & object, import("@xyo-network/archivist-model").ArchivistModuleEventData, import("@xyo-network/payload-model").Payload> | undefined>;
68
- responsesDiviner(): Promise<DivinerInstance<import("@xylabs/base").BaseParamsFields & {
69
- account?: import("@xyo-network/account-model").AccountInstance | "random";
70
- addToResolvers?: boolean;
71
- additionalSigners?: import("@xyo-network/account-model").AccountInstance[];
72
- allowNameResolution?: boolean;
73
- config: import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/diviner-boundwitness-model").BoundWitnessDivinerConfig>;
74
- ephemeralQueryAccountEnabled?: boolean;
75
- moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[];
76
- statusReporter?: import("@xyo-network/module-model").ModuleStatusReporter;
77
- } & import("@xyo-network/module-model").ModuleChildrenParams, BoundWitnessDivinerQueryPayload, BoundWitness, import("@xyo-network/diviner-model").DivinerModuleEventData>>;
29
+ queriesArchivist(): Promise<ArchivistInstance<import("@xyo-network/archivist-model").ArchivistParams<import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/archivist-model").ArchivistConfig>>, import("@xyo-network/archivist-model").ArchivistModuleEventData, import("@xyo-network/payload-model").Payload> | undefined>;
30
+ queriesDiviner(): Promise<DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, import("@xyo-network/boundwitness-model").UnsignedQueryBoundWitness, import("@xyo-network/diviner-model").DivinerModuleEventData>>;
31
+ responsesArchivist(): Promise<ArchivistInstance<import("@xyo-network/archivist-model").ArchivistParams<import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/archivist-model").ArchivistConfig>>, import("@xyo-network/archivist-model").ArchivistModuleEventData, import("@xyo-network/payload-model").Payload> | undefined>;
32
+ responsesDiviner(): Promise<DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitness, import("@xyo-network/diviner-model").DivinerModuleEventData>>;
78
33
  /**
79
34
  * Commit the internal state of the process. This is similar
80
35
  * to a transaction completion in a database and should only be called
@@ -1 +1 @@
1
- {"version":3,"file":"AsyncQueryBusBase.d.ts","sourceRoot":"","sources":["../../../src/AsyncQueryBus/AsyncQueryBusBase.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAE/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAErE,OAAO,KAAK,EAAE,YAAY,EAAqB,MAAM,iCAAiC,CAAA;AACtF,OAAO,KAAK,EAA6B,+BAA+B,EAAE,MAAM,yCAAyC,CAAA;AACzH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAEjE,OAAO,KAAK,EACV,YAAY,EAAoB,cAAc,EAC/C,MAAM,2BAA2B,CAAA;AAIlC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAM3D,qBAAa,iBAAiB,CAAC,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,CAAE,SAAQ,IAAI,CAAC,OAAO,CAAC;IAC7G,SAAS,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC7C,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAK;IAC5D,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAK;IAExD,OAAO,CAAC,mBAAmB,CAAuC;IAClE,OAAO,CAAC,iBAAiB,CAAC,CAAmB;IAC7C,OAAO,CAAC,eAAe,CAAC,CAAgG;IACxH,OAAO,CAAC,eAAe,CAAW;IAClC,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,mBAAmB,CAAC,CAAmB;IAC/C,OAAO,CAAC,iBAAiB,CAAC,CAA2F;gBAEzG,MAAM,EAAE,OAAO;IAI3B,IAAI,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,CAE9B;IAED,IAAI,aAAa,IAAI,MAAM,CAM1B;IAED,IAAI,UAAU;;;;;;;;;+HAEb;IAED;;OAEG;IACH,SAAS,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAIhD;IAEK,gBAAgB;;;;;;;;;;IAYhB,cAAc;;;;;;;;;;IAYd,kBAAkB;;;;;;;;;;IAYlB,gBAAgB;;;;;;;;;;IAYtB;;;;;;;OAOG;cACa,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG;IAQ5D;;;OAGG;cACa,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;YAY/C,OAAO;CAiBtB"}
1
+ {"version":3,"file":"AsyncQueryBusBase.d.ts","sourceRoot":"","sources":["../../../src/AsyncQueryBus/AsyncQueryBusBase.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAE/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAErE,OAAO,KAAK,EAAE,YAAY,EAAqB,MAAM,iCAAiC,CAAA;AACtF,OAAO,KAAK,EAAE,yBAAyB,EAAE,+BAA+B,EAAE,MAAM,yCAAyC,CAAA;AACzH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAEjE,OAAO,KAAK,EACV,YAAY,EAAoB,cAAc,EAC/C,MAAM,2BAA2B,CAAA;AAIlC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAM3D,qBAAa,iBAAiB,CAAC,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,CAAE,SAAQ,IAAI,CAAC,OAAO,CAAC;IAC7G,SAAS,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC7C,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAK;IAC5D,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAK;IAExD,OAAO,CAAC,mBAAmB,CAAuC;IAClE,OAAO,CAAC,iBAAiB,CAAC,CAAmB;IAC7C,OAAO,CAAC,eAAe,CAAC,CAAgG;IACxH,OAAO,CAAC,eAAe,CAAW;IAClC,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,mBAAmB,CAAC,CAAmB;IAC/C,OAAO,CAAC,iBAAiB,CAAC,CAA2F;gBAEzG,MAAM,EAAE,OAAO;IAI3B,IAAI,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,CAE9B;IAED,IAAI,aAAa,IAAI,MAAM,CAM1B;IAED,IAAI,UAAU,qMAEb;IAED;;OAEG;IACH,SAAS,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAIhD;IAEK,gBAAgB;IAYhB,cAAc;IAYd,kBAAkB;IAYlB,gBAAgB;IAYtB;;;;;;;OAOG;cACa,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG;IAQ5D;;;OAGG;cACa,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;YAY/C,OAAO;CAiBtB"}
@@ -20,29 +20,11 @@ export declare class AsyncQueryBusHost<TParams extends AsyncQueryBusHostParams =
20
20
  get idleThreshold(): number;
21
21
  get perAddressBatchQueryLimit(): number;
22
22
  get started(): boolean;
23
- expose(mod: ModuleInstance, options?: ExposeOptions): ModuleInstance<import("@xylabs/base").BaseParamsFields & {
24
- account?: import("@xyo-network/account-model").AccountInstance | "random";
25
- addToResolvers?: boolean;
26
- additionalSigners?: import("@xyo-network/account-model").AccountInstance[];
27
- allowNameResolution?: boolean;
28
- config: import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/module-model").ModuleConfig>;
29
- ephemeralQueryAccountEnabled?: boolean;
30
- moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[];
31
- statusReporter?: import("@xyo-network/module-model").ModuleStatusReporter;
32
- } & import("@xyo-network/module-model").ModuleChildrenParams, import("@xyo-network/module-model").ModuleEventData<object>> | undefined;
23
+ expose(mod: ModuleInstance, options?: ExposeOptions): ModuleInstance<import("@xyo-network/module-model").ModuleParams<import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/module-model").ModuleConfig>>, import("@xyo-network/module-model").ModuleEventData<object>> | undefined;
33
24
  listeningModules(): Promise<ModuleInstance[]>;
34
25
  start(): void;
35
26
  stop(): void;
36
- unexpose(id: ModuleIdentifier, validate?: boolean): Promise<ModuleInstance<import("@xylabs/base").BaseParamsFields & {
37
- account?: import("@xyo-network/account-model").AccountInstance | "random";
38
- addToResolvers?: boolean;
39
- additionalSigners?: import("@xyo-network/account-model").AccountInstance[];
40
- allowNameResolution?: boolean;
41
- config: import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/module-model").ModuleConfig>;
42
- ephemeralQueryAccountEnabled?: boolean;
43
- moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[];
44
- statusReporter?: import("@xyo-network/module-model").ModuleStatusReporter;
45
- } & import("@xyo-network/module-model").ModuleChildrenParams, import("@xyo-network/module-model").ModuleEventData<object>> | undefined>;
27
+ unexpose(id: ModuleIdentifier, validate?: boolean): Promise<ModuleInstance<import("@xyo-network/module-model").ModuleParams<import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/module-model").ModuleConfig<object, void>>>, import("@xyo-network/module-model").ModuleEventData<object>> | undefined>;
46
28
  protected callLocalModule: (localModule: ModuleInstance, query: WithStorageMeta<QueryBoundWitness>) => Promise<void>;
47
29
  /**
48
30
  * Finds unprocessed commands addressed to the supplied address
@@ -1 +1 @@
1
- {"version":3,"file":"AsyncQueryBusHost.d.ts","sourceRoot":"","sources":["../../../src/AsyncQueryBus/AsyncQueryBusHost.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAKxE,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACf,MAAM,2BAA2B,CAAA;AAQlC,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAGzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAE/D,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAUD,qBAAa,iBAAiB,CAAC,OAAO,SAAS,uBAAuB,GAAG,uBAAuB,CAAE,SAAQ,iBAAiB,CAAC,OAAO,CAAC;IAClI,SAAS,CAAC,iBAAiB,yBAAqB;IAChD,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,cAAc,CAAC,CAAQ;IAC/B,OAAO,CAAC,OAAO,CAAC,CAAQ;gBAEZ,MAAM,EAAE,OAAO;IAI3B,IAAI,gBAAgB,2BAEnB;IAED,IAAI,iBAAiB,WASpB;IAED,IAAI,aAAa,WAShB;IAED,IAAI,yBAAyB,IAAI,MAAM,CAEtC;IAED,IAAI,OAAO,YAEV;IAED,MAAM,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,aAAa;;;;;;;;;;IAa7C,gBAAgB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAWnD,KAAK;IAOL,IAAI;IAQE,QAAQ,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,UAAO;;;;;;;;;;IAYpD,SAAS,CAAC,eAAe,GAAU,aAAa,cAAc,EAAE,OAAO,eAAe,CAAC,iBAAiB,CAAC,mBAiExG;IAED;;;OAGG;IACH,SAAS,CAAC,oBAAoB,GAAU,SAAS,OAAO,iHAgCvD;IAED;;;OAGG;IACH,OAAO,CAAC,IAAI;IAqBZ;;OAEG;IACH,OAAO,CAAC,sBAAsB,CAsB7B;CACF"}
1
+ {"version":3,"file":"AsyncQueryBusHost.d.ts","sourceRoot":"","sources":["../../../src/AsyncQueryBus/AsyncQueryBusHost.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAKxE,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACf,MAAM,2BAA2B,CAAA;AAQlC,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAGzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAE/D,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAUD,qBAAa,iBAAiB,CAAC,OAAO,SAAS,uBAAuB,GAAG,uBAAuB,CAAE,SAAQ,iBAAiB,CAAC,OAAO,CAAC;IAClI,SAAS,CAAC,iBAAiB,yBAAqB;IAChD,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,cAAc,CAAC,CAAQ;IAC/B,OAAO,CAAC,OAAO,CAAC,CAAQ;gBAEZ,MAAM,EAAE,OAAO;IAI3B,IAAI,gBAAgB,2BAEnB;IAED,IAAI,iBAAiB,WASpB;IAED,IAAI,aAAa,WAShB;IAED,IAAI,yBAAyB,IAAI,MAAM,CAEtC;IAED,IAAI,OAAO,YAEV;IAED,MAAM,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,aAAa;IAa7C,gBAAgB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAWnD,KAAK;IAOL,IAAI;IAQE,QAAQ,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,UAAO;IAYpD,SAAS,CAAC,eAAe,GAAU,aAAa,cAAc,EAAE,OAAO,eAAe,CAAC,iBAAiB,CAAC,mBAiExG;IAED;;;OAGG;IACH,SAAS,CAAC,oBAAoB,GAAU,SAAS,OAAO,iHAgCvD;IAED;;;OAGG;IACH,OAAO,CAAC,IAAI;IAqBZ;;OAEG;IACH,OAAO,CAAC,sBAAsB,CAsB7B;CACF"}
@@ -1,27 +1,22 @@
1
+ import { CreatableInstance } from '@xylabs/creatable';
1
2
  import type { QueryBoundWitness } from '@xyo-network/boundwitness-model';
2
3
  import type { ModuleProxyParams } from '@xyo-network/bridge-abstract';
3
4
  import { AbstractModuleProxy } from '@xyo-network/bridge-abstract';
4
5
  import type { ModuleFilterOptions, ModuleIdentifier, ModuleInstance, ModuleName, ModuleQueryResult } from '@xyo-network/module-model';
5
6
  import type { Payload } from '@xyo-network/payload-model';
6
7
  import type { AsyncQueryBusClient } from '../AsyncQueryBusClient.ts';
7
- export type AsyncQueryBusModuleProxyParams = ModuleProxyParams & {
8
+ export interface AsyncQueryBusModuleProxyParams extends ModuleProxyParams {
8
9
  busClient: AsyncQueryBusClient;
9
- };
10
- export declare class AsyncQueryBusModuleProxy<TWrappedModule extends ModuleInstance = ModuleInstance, TParams extends Omit<AsyncQueryBusModuleProxyParams, 'config'> & {
11
- config: TWrappedModule['config'];
12
- } = Omit<AsyncQueryBusModuleProxyParams, 'config'> & {
13
- config: TWrappedModule['config'];
14
- }> extends AbstractModuleProxy<TWrappedModule, TParams> implements ModuleInstance<TParams, TWrappedModule['eventData']> {
15
- protected static createCount: number;
16
- constructor(params: TParams);
10
+ }
11
+ export declare class AsyncQueryBusModuleProxy<TWrappedModule extends ModuleInstance = ModuleInstance> extends AbstractModuleProxy<TWrappedModule, AsyncQueryBusModuleProxyParams & TWrappedModule['params']> {
17
12
  get id(): ModuleIdentifier;
18
13
  get modName(): ModuleName | undefined;
14
+ static createHandler<T extends CreatableInstance>(inInstance: T): Promise<T & import("@xyo-network/module-abstract").AbstractModule<any, any>>;
19
15
  proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads?: Payload[]): Promise<ModuleQueryResult>;
20
16
  publicChildren(): Promise<ModuleInstance[]>;
21
17
  /** @deprecated do not pass undefined. If trying to get all, pass '*' */
22
18
  resolve(): Promise<ModuleInstance[]>;
23
19
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
24
20
  resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>;
25
- startHandler(): Promise<boolean>;
26
21
  }
27
22
  //# sourceMappingURL=ModuleProxy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModuleProxy.d.ts","sourceRoot":"","sources":["../../../../src/AsyncQueryBus/ModuleProxy/ModuleProxy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,iBAAiB,EAElB,MAAM,2BAA2B,CAAA;AAElC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAEpE,MAAM,MAAM,8BAA8B,GAAG,iBAAiB,GAAG;IAC/D,SAAS,EAAE,mBAAmB,CAAA;CAC/B,CAAA;AAED,qBAAa,wBAAwB,CACnC,cAAc,SAAS,cAAc,GAAG,cAAc,EACtD,OAAO,SAAS,IAAI,CAAC,8BAA8B,EAAE,QAAQ,CAAC,GAAG;IAAE,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAA;CAAE,GAAG,IAAI,CAC1G,8BAA8B,EAC9B,QAAQ,CACT,GAAG;IACF,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAA;CACjC,CAED,SAAQ,mBAAmB,CAAC,cAAc,EAAE,OAAO,CACnD,YAAW,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IAC/D,SAAS,CAAC,MAAM,CAAC,WAAW,SAAI;gBAEpB,MAAM,EAAE,OAAO;IAQ3B,IAAa,EAAE,IAAI,gBAAgB,CAElC;IAED,IAAa,OAAO,IAAI,UAAU,GAAG,SAAS,CAE7C;IAEK,iBAAiB,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAWrH,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAU1D,yEAAyE;IAC1D,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,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;IAiClI,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAGhD"}
1
+ {"version":3,"file":"ModuleProxy.d.ts","sourceRoot":"","sources":["../../../../src/AsyncQueryBus/ModuleProxy/ModuleProxy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAKrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,iBAAiB,EAElB,MAAM,2BAA2B,CAAA;AAElC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAEpE,MAAM,WAAW,8BAA+B,SAAQ,iBAAiB;IACvE,SAAS,EAAE,mBAAmB,CAAA;CAC/B;AAED,qBACa,wBAAwB,CACnC,cAAc,SAAS,cAAc,GAAG,cAAc,CAEtD,SAAQ,mBAAmB,CAAC,cAAc,EAAE,8BAA8B,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACtG,IAAa,EAAE,IAAI,gBAAgB,CAElC;IAED,IAAa,OAAO,IAAI,UAAU,GAAG,SAAS,CAE7C;WAEqB,aAAa,CAAC,CAAC,SAAS,iBAAiB,EAC7D,UAAU,EAAE,CAAC;IAMT,iBAAiB,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAWrH,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAU1D,yEAAyE;IAC1D,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,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;CAgClJ"}
@@ -31,11 +31,11 @@ export declare class PubSubBridge<TParams extends PubSubBridgeParams = PubSubBri
31
31
  resolve(): Promise<ModuleInstance[]>;
32
32
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
33
33
  resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>;
34
- startHandler(): Promise<boolean>;
34
+ startHandler(): Promise<void>;
35
35
  unexposeHandler(id: ModuleIdentifier, options?: BridgeUnexposeOptions | undefined): Promise<ModuleInstance[]>;
36
36
  protected busClient(): AsyncQueryBusClient<import("./AsyncQueryBus/index.ts").AsyncQueryBusClientParams> | undefined;
37
37
  protected busHost(): AsyncQueryBusHost<import("./AsyncQueryBus/index.ts").AsyncQueryBusHostParams> | undefined;
38
38
  protected connectInstance(instance?: ModuleInstance, maxDepth?: number): Promise<Address | undefined>;
39
- protected stopHandler(_timeout?: number | undefined): boolean;
39
+ protected stopHandler(): Promise<void>;
40
40
  }
41
41
  //# sourceMappingURL=PubSubBridge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PubSubBridge.d.ts","sourceRoot":"","sources":["../../src/PubSubBridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PubSubBridge.d.ts","sourceRoot":"","sources":["../../src/PubSubBridge.ts"],"names":[],"mappings":"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"}
@@ -8,16 +8,7 @@ export interface PubSubBridgeModuleResolverParams extends BridgeModuleResolverPa
8
8
  busClient: AsyncQueryBusClient;
9
9
  }
10
10
  export declare class PubSubBridgeModuleResolver extends AbstractBridgeModuleResolver<PubSubBridgeModuleResolverParams> {
11
- protected _resolvedCache: LRUCache<Lowercase<string>, ModuleInstance<import("@xylabs/base").BaseParamsFields & {
12
- account?: import("@xyo-network/account-model").AccountInstance | "random";
13
- addToResolvers?: boolean;
14
- additionalSigners?: import("@xyo-network/account-model").AccountInstance[];
15
- allowNameResolution?: boolean;
16
- config: import("@xyo-network/module-model").AnyConfigSchema<ModuleConfig>;
17
- ephemeralQueryAccountEnabled?: boolean;
18
- moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[];
19
- statusReporter?: import("@xyo-network/module-model").ModuleStatusReporter;
20
- } & import("@xyo-network/module-model").ModuleChildrenParams, import("@xyo-network/module-model").ModuleEventData<object>>, unknown>;
11
+ protected _resolvedCache: LRUCache<Lowercase<string>, ModuleInstance<import("@xyo-network/module-model").ModuleParams<import("@xyo-network/module-model").AnyConfigSchema<ModuleConfig>>, import("@xyo-network/module-model").ModuleEventData<object>>, unknown>;
21
12
  protected _resolvedCacheMutex: Mutex;
22
13
  resolveHandler<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T[]>;
23
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PubSubBridgeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/PubSubBridgeModuleResolver.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAA;AAC9E,OAAO,EAAE,4BAA4B,EAAsB,MAAM,8BAA8B,CAAA;AAG/F,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACf,MAAM,2BAA2B,CAAA;AAMlC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,KAAK,EAAE,mBAAmB,EAAkC,MAAM,0BAA0B,CAAA;AAGnG,MAAM,WAAW,gCAAiC,SAAQ,0BAA0B;IAClF,SAAS,EAAE,mBAAmB,CAAA;CAC/B;AAED,qBAAa,0BAA2B,SAAQ,4BAA4B,CAAC,gCAAgC,CAAC;IAC5G,SAAS,CAAC,cAAc;;;;;;;;;yIAAuD;IAC/E,SAAS,CAAC,mBAAmB,QAAc;IAE5B,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;CA8C/I"}
1
+ {"version":3,"file":"PubSubBridgeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/PubSubBridgeModuleResolver.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAA;AAC9E,OAAO,EAAE,4BAA4B,EAAsB,MAAM,8BAA8B,CAAA;AAG/F,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACf,MAAM,2BAA2B,CAAA;AAMlC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,KAAK,EAAE,mBAAmB,EAAkC,MAAM,0BAA0B,CAAA;AAGnG,MAAM,WAAW,gCAAiC,SAAQ,0BAA0B;IAClF,SAAS,EAAE,mBAAmB,CAAA;CAC/B;AAED,qBAAa,0BAA2B,SAAQ,4BAA4B,CAAC,gCAAgC,CAAC;IAC5G,SAAS,CAAC,cAAc,yOAAuD;IAC/E,SAAS,CAAC,mBAAmB,QAAc;IAE5B,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;CA6C/I"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/bridge-pub-sub",
3
- "version": "3.18.9",
3
+ "version": "4.0.0",
4
4
  "description": "Primary SDK for using XYO Protocol 2.0",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -29,44 +29,46 @@
29
29
  "module": "dist/neutral/index.mjs",
30
30
  "types": "dist/types/index.d.ts",
31
31
  "dependencies": {
32
- "@xylabs/array": "^4.11.21",
33
- "@xylabs/assert": "^4.11.21",
34
- "@xylabs/base": "^4.11.21",
35
- "@xylabs/delay": "^4.11.21",
36
- "@xylabs/exists": "^4.11.21",
37
- "@xylabs/forget": "^4.11.21",
38
- "@xylabs/hex": "^4.11.21",
39
- "@xylabs/object": "^4.11.21",
40
- "@xylabs/promise": "^4.11.21",
41
- "@xylabs/timer": "^4.11.21",
42
- "@xyo-network/account": "^3.18.9",
43
- "@xyo-network/archivist-model": "^3.18.9",
44
- "@xyo-network/boundwitness-model": "^3.18.9",
45
- "@xyo-network/bridge-abstract": "^3.18.9",
46
- "@xyo-network/bridge-model": "^3.18.9",
47
- "@xyo-network/config-payload-plugin": "^3.18.9",
48
- "@xyo-network/diviner-boundwitness-model": "^3.18.9",
49
- "@xyo-network/diviner-model": "^3.18.9",
50
- "@xyo-network/module-model": "^3.18.9",
51
- "@xyo-network/node-model": "^3.18.9",
52
- "@xyo-network/payload-builder": "^3.18.9",
53
- "@xyo-network/payload-model": "^3.18.9",
32
+ "@xylabs/array": "^4.12.30",
33
+ "@xylabs/assert": "^4.12.30",
34
+ "@xylabs/base": "^4.12.30",
35
+ "@xylabs/creatable": "^4.12.30",
36
+ "@xylabs/delay": "^4.12.30",
37
+ "@xylabs/exists": "^4.12.30",
38
+ "@xylabs/forget": "^4.12.30",
39
+ "@xylabs/hex": "^4.12.30",
40
+ "@xylabs/object": "^4.12.30",
41
+ "@xylabs/promise": "^4.12.30",
42
+ "@xylabs/timer": "^4.12.30",
43
+ "@xylabs/typeof": "^4.12.30",
44
+ "@xyo-network/account": "^4.0.0",
45
+ "@xyo-network/archivist-model": "^4.0.0",
46
+ "@xyo-network/boundwitness-model": "^4.0.0",
47
+ "@xyo-network/bridge-abstract": "^4.0.0",
48
+ "@xyo-network/bridge-model": "^4.0.0",
49
+ "@xyo-network/config-payload-plugin": "^4.0.0",
50
+ "@xyo-network/diviner-boundwitness-model": "^4.0.0",
51
+ "@xyo-network/diviner-model": "^4.0.0",
52
+ "@xyo-network/module-model": "^4.0.0",
53
+ "@xyo-network/node-model": "^4.0.0",
54
+ "@xyo-network/payload-builder": "^4.0.0",
55
+ "@xyo-network/payload-model": "^4.0.0",
54
56
  "async-mutex": "^0.5.0",
55
57
  "lru-cache": "^11.1.0"
56
58
  },
57
59
  "devDependencies": {
58
- "@xylabs/logger": "^4.11.21",
59
- "@xylabs/ts-scripts-yarn3": "^6.5.8",
60
- "@xylabs/tsconfig": "^6.5.8",
61
- "@xylabs/vitest-extended": "^4.11.21",
62
- "@xyo-network/archivist-memory": "^3.18.9",
63
- "@xyo-network/diviner-boundwitness-memory": "^3.18.9",
64
- "@xyo-network/module-abstract": "^3.18.9",
65
- "@xyo-network/node-memory": "^3.18.9",
66
- "@xyo-network/node-model": "^3.18.9",
67
- "@xyo-network/payload-wrapper": "^3.18.9",
60
+ "@xylabs/logger": "^4.12.30",
61
+ "@xylabs/ts-scripts-yarn3": "^6.5.12",
62
+ "@xylabs/tsconfig": "^6.5.12",
63
+ "@xylabs/vitest-extended": "^4.12.30",
64
+ "@xyo-network/archivist-memory": "^4.0.0",
65
+ "@xyo-network/diviner-boundwitness-memory": "^4.0.0",
66
+ "@xyo-network/module-abstract": "^4.0.0",
67
+ "@xyo-network/node-memory": "^4.0.0",
68
+ "@xyo-network/node-model": "^4.0.0",
69
+ "@xyo-network/payload-wrapper": "^4.0.0",
68
70
  "typescript": "^5.8.3",
69
- "vitest": "^3.2.3"
71
+ "vitest": "^3.2.4"
70
72
  },
71
73
  "publishConfig": {
72
74
  "access": "public"
@@ -1,7 +1,9 @@
1
1
  import { assertEx } from '@xylabs/assert'
2
+ import { CreatableInstance } from '@xylabs/creatable'
2
3
  import { exists } from '@xylabs/exists'
3
4
  import { forget } from '@xylabs/forget'
4
5
  import { isAddress } from '@xylabs/hex'
6
+ import { isString } from '@xylabs/typeof'
5
7
  import type { QueryBoundWitness } from '@xyo-network/boundwitness-model'
6
8
  import type { ModuleProxyParams } from '@xyo-network/bridge-abstract'
7
9
  import { AbstractModuleProxy } from '@xyo-network/bridge-abstract'
@@ -13,36 +15,20 @@ import type {
13
15
  ModuleQueryResult,
14
16
  ResolveHelperConfig,
15
17
  } from '@xyo-network/module-model'
16
- import { ResolveHelper } from '@xyo-network/module-model'
18
+ import { creatableModule, ResolveHelper } from '@xyo-network/module-model'
17
19
  import type { Payload } from '@xyo-network/payload-model'
18
20
 
19
21
  import type { AsyncQueryBusClient } from '../AsyncQueryBusClient.ts'
20
22
 
21
- export type AsyncQueryBusModuleProxyParams = ModuleProxyParams & {
23
+ export interface AsyncQueryBusModuleProxyParams extends ModuleProxyParams {
22
24
  busClient: AsyncQueryBusClient
23
25
  }
24
26
 
27
+ @creatableModule()
25
28
  export class AsyncQueryBusModuleProxy<
26
29
  TWrappedModule extends ModuleInstance = ModuleInstance,
27
- TParams extends Omit<AsyncQueryBusModuleProxyParams, 'config'> & { config: TWrappedModule['config'] } = Omit<
28
- AsyncQueryBusModuleProxyParams,
29
- 'config'
30
- > & {
31
- config: TWrappedModule['config']
32
- },
33
30
  >
34
- extends AbstractModuleProxy<TWrappedModule, TParams>
35
- implements ModuleInstance<TParams, TWrappedModule['eventData']> {
36
- protected static createCount = 0
37
-
38
- constructor(params: TParams) {
39
- AsyncQueryBusModuleProxy.createCount = AsyncQueryBusModuleProxy.createCount + 1
40
- if (Math.floor(AsyncQueryBusModuleProxy.createCount / 10) === AsyncQueryBusModuleProxy.createCount / 10) {
41
- console.log(`AsyncQueryBusModuleProxy.createCount: ${AsyncQueryBusModuleProxy.createCount}`)
42
- }
43
- super(params)
44
- }
45
-
31
+ extends AbstractModuleProxy<TWrappedModule, AsyncQueryBusModuleProxyParams & TWrappedModule['params']> {
46
32
  override get id(): ModuleIdentifier {
47
33
  return this.address
48
34
  }
@@ -51,6 +37,13 @@ export class AsyncQueryBusModuleProxy<
51
37
  return undefined
52
38
  }
53
39
 
40
+ static override async createHandler<T extends CreatableInstance>(
41
+ inInstance: T,
42
+ ) {
43
+ const instance = (await super.createHandler(inInstance))
44
+ return instance
45
+ }
46
+
54
47
  async proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads?: Payload[]): Promise<ModuleQueryResult> {
55
48
  if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {
56
49
  forget(this.storeToArchivists([query, ...(payloads ?? [])]))
@@ -96,19 +89,15 @@ export class AsyncQueryBusModuleProxy<
96
89
  case 'string': {
97
90
  const parts = id.split(':')
98
91
  const first = assertEx(parts.shift(), () => 'Missing first')
99
- const remainingPath = parts.join(':')
92
+ const remainingPath = parts.length > 0 ? parts.join(':') : undefined
100
93
  const address = isAddress(first) ? first : this.childAddressByName(first)
101
- if (!address) return undefined
94
+ if (!isAddress(address)) return undefined
102
95
  const firstInstance = (await this.params.host.resolve(address)) as ModuleInstance | undefined
103
- return (remainingPath ? await firstInstance?.resolve(remainingPath) : firstInstance) as T | undefined
96
+ return (isString(remainingPath) ? await firstInstance?.resolve(remainingPath) : firstInstance) as T | undefined
104
97
  }
105
98
  default: {
106
99
  return (await ResolveHelper.resolve(config, id, options)).filter(mod => mod.address !== this.address)
107
100
  }
108
101
  }
109
102
  }
110
-
111
- override async startHandler(): Promise<boolean> {
112
- return await super.startHandler()
113
- }
114
103
  }
@@ -206,9 +206,9 @@ export class PubSubBridge<TParams extends PubSubBridgeParams = PubSubBridgeParam
206
206
  }
207
207
  }
208
208
 
209
- override async startHandler(): Promise<boolean> {
209
+ override async startHandler() {
210
210
  this.busHost()?.start()
211
- return await super.startHandler()
211
+ await super.startHandler()
212
212
  }
213
213
 
214
214
  async unexposeHandler(id: ModuleIdentifier, options?: BridgeUnexposeOptions | undefined): Promise<ModuleInstance[]> {
@@ -279,8 +279,8 @@ export class PubSubBridge<TParams extends PubSubBridgeParams = PubSubBridgeParam
279
279
  }
280
280
  }
281
281
 
282
- protected override stopHandler(_timeout?: number | undefined) {
282
+ protected override async stopHandler() {
283
+ await super.stopHandler()
283
284
  this.busHost()?.stop()
284
- return true
285
285
  }
286
286
  }
@@ -49,6 +49,7 @@ export class PubSubBridgeModuleResolver extends AbstractBridgeModuleResolver<Pub
49
49
  }
50
50
  const account = await Account.random()
51
51
  const finalParams: AsyncQueryBusModuleProxyParams = {
52
+ name: 'PubSubBridgeModuleResolver',
52
53
  account,
53
54
  archiving: this.params.archiving,
54
55
  busClient: this.params.busClient,
@@ -58,16 +59,14 @@ export class PubSubBridgeModuleResolver extends AbstractBridgeModuleResolver<Pub
58
59
  onQuerySendFinished: this.params.onQuerySendFinished,
59
60
  onQuerySendStarted: this.params.onQuerySendStarted,
60
61
  }
61
- const proxy = new AsyncQueryBusModuleProxy<T, AsyncQueryBusModuleProxyParams>(finalParams)
62
+ const proxy = await AsyncQueryBusModuleProxy.create(finalParams)
62
63
  const state = await proxy.state()
63
- if (state) {
64
- const configSchema = (state.find(payload => payload.schema === ConfigSchema) as ConfigPayload | undefined)?.config
65
- const config = assertEx(
66
- state.find(payload => payload.schema === configSchema),
67
- () => 'Unable to locate config',
68
- ) as ModuleConfig
69
- proxy.setConfig(config)
70
- }
64
+ const configSchema = (state.find(payload => payload.schema === ConfigSchema) as ConfigPayload | undefined)?.config
65
+ const config = assertEx(
66
+ state.find(payload => payload.schema === configSchema),
67
+ () => 'Unable to locate config',
68
+ ) as ModuleConfig
69
+ proxy.setConfig(config)
71
70
  await proxy.start?.()
72
71
  const wrapped = wrapModuleWithType(proxy, account) as unknown as T
73
72
  assertEx(asModuleInstance<T>(wrapped, {}), () => `Failed to asModuleInstance [${id}]`)