@xyo-network/sdk 7.4.2 → 8.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.
Files changed (131) hide show
  1. package/dist/neutral/api-location-diviner.mjs +1 -1
  2. package/dist/neutral/api-location-diviner.mjs.map +2 -2
  3. package/dist/neutral/archivist-abstract.mjs +30 -25
  4. package/dist/neutral/archivist-abstract.mjs.map +2 -2
  5. package/dist/neutral/archivist-generic.mjs +4 -2
  6. package/dist/neutral/archivist-generic.mjs.map +2 -2
  7. package/dist/neutral/archivist-memory.mjs +5 -4
  8. package/dist/neutral/archivist-memory.mjs.map +2 -2
  9. package/dist/neutral/archivist-model.mjs +10 -5
  10. package/dist/neutral/archivist-model.mjs.map +2 -2
  11. package/dist/neutral/archivist-view.mjs +5 -3
  12. package/dist/neutral/archivist-view.mjs.map +2 -2
  13. package/dist/neutral/boundwitness-loader.mjs +11 -6
  14. package/dist/neutral/boundwitness-loader.mjs.map +2 -2
  15. package/dist/neutral/bridge-abstract.mjs +39 -26
  16. package/dist/neutral/bridge-abstract.mjs.map +2 -2
  17. package/dist/neutral/bridge-http.mjs +19 -15
  18. package/dist/neutral/bridge-http.mjs.map +2 -2
  19. package/dist/neutral/bridge-wrapper.mjs +4 -2
  20. package/dist/neutral/bridge-wrapper.mjs.map +2 -2
  21. package/dist/neutral/diviner-abstract.mjs +2 -2
  22. package/dist/neutral/diviner-abstract.mjs.map +2 -2
  23. package/dist/neutral/diviner-boundwitness.memory.mjs +4 -5
  24. package/dist/neutral/diviner-boundwitness.memory.mjs.map +2 -2
  25. package/dist/neutral/diviner-boundwitness.mjs +4 -5
  26. package/dist/neutral/diviner-boundwitness.mjs.map +2 -2
  27. package/dist/neutral/diviner-payload-generic.mjs +13 -15
  28. package/dist/neutral/diviner-payload-generic.mjs.map +2 -2
  29. package/dist/neutral/manifest-wrapper.mjs +4 -2
  30. package/dist/neutral/manifest-wrapper.mjs.map +2 -2
  31. package/dist/neutral/module-abstract.mjs +43 -46
  32. package/dist/neutral/module-abstract.mjs.map +3 -3
  33. package/dist/neutral/module-model.mjs +18 -1
  34. package/dist/neutral/module-model.mjs.map +2 -2
  35. package/dist/neutral/module-resolver.mjs +59 -51
  36. package/dist/neutral/module-resolver.mjs.map +3 -3
  37. package/dist/neutral/module-wrapper.mjs +11 -6
  38. package/dist/neutral/module-wrapper.mjs.map +2 -2
  39. package/dist/neutral/modules/archivist-abstract/AbstractArchivist.d.ts.map +1 -1
  40. package/dist/neutral/modules/archivist-generic/Archivist.d.ts.map +1 -1
  41. package/dist/neutral/modules/archivist-memory/MemoryDriver.d.ts.map +1 -1
  42. package/dist/neutral/modules/archivist-model/lib/getBoundWitness.d.ts.map +1 -1
  43. package/dist/neutral/modules/archivist-model/lib/hydrateBoundWitness.d.ts.map +1 -1
  44. package/dist/neutral/modules/archivist-view/ViewArchivist.d.ts.map +1 -1
  45. package/dist/neutral/modules/boundwitness-loader/Loader.d.ts.map +1 -1
  46. package/dist/neutral/modules/bridge-abstract/AbstractBridge.d.ts.map +1 -1
  47. package/dist/neutral/modules/bridge-abstract/AbstractModuleProxy/AbstractModuleProxy.d.ts.map +1 -1
  48. package/dist/neutral/modules/bridge-http/HttpBridge.d.ts.map +1 -1
  49. package/dist/neutral/modules/bridge-http/ModuleProxy/ModuleProxy.d.ts.map +1 -1
  50. package/dist/neutral/modules/bridge-wrapper/BridgeWrapper.d.ts.map +1 -1
  51. package/dist/neutral/modules/diviner-boundwitness/MemoryBoundWitnessDiviner.d.ts.map +1 -1
  52. package/dist/neutral/modules/diviner-payload-generic/Diviner.d.ts.map +1 -1
  53. package/dist/neutral/modules/manifest-wrapper/Wrapper.d.ts.map +1 -1
  54. package/dist/neutral/modules/manifest-wrapper/WrapperEx.d.ts.map +1 -1
  55. package/dist/neutral/modules/module-abstract/AbstractModule.d.ts +0 -1
  56. package/dist/neutral/modules/module-abstract/AbstractModule.d.ts.map +1 -1
  57. package/dist/neutral/modules/module-abstract/AbstractModuleInstance.d.ts.map +1 -1
  58. package/dist/neutral/modules/module-abstract/QueryValidator/ModuleConfigQueryValidator.d.ts.map +1 -1
  59. package/dist/neutral/modules/module-model/QueryableModule/IsQueryableModuleFactory.d.ts.map +1 -1
  60. package/dist/neutral/modules/module-resolver/CompositeModuleResolver.d.ts.map +1 -1
  61. package/dist/neutral/modules/module-resolver/ResolveHelper/ResolveHelper.d.ts.map +1 -1
  62. package/dist/neutral/modules/module-resolver/ResolveHelper/resolveAll.d.ts.map +1 -1
  63. package/dist/neutral/modules/module-resolver/ResolveHelper/resolveLocalNameToAddress.d.ts.map +1 -1
  64. package/dist/neutral/modules/module-resolver/ResolveHelper/resolvePathToAddress.d.ts.map +1 -1
  65. package/dist/neutral/modules/module-resolver/SimpleModuleResolver.d.ts.map +1 -1
  66. package/dist/neutral/modules/module-wrapper/ModuleWrapper.d.ts.map +1 -1
  67. package/dist/neutral/modules/node-abstract/AbstractNode.d.ts.map +1 -1
  68. package/dist/neutral/modules/node-memory/MemoryNode.d.ts.map +1 -1
  69. package/dist/neutral/modules/node-memory/NodeHelper/flatAttachToExistingNode.d.ts.map +1 -1
  70. package/dist/neutral/modules/node-view/ViewNode.d.ts.map +1 -1
  71. package/dist/neutral/modules/node-wrapper/NodeWrapper.d.ts.map +1 -1
  72. package/dist/neutral/modules/payloadset-plugin/Resolver.d.ts.map +1 -1
  73. package/dist/neutral/modules/sentinel-abstract/AbstractSentinel.d.ts.map +1 -1
  74. package/dist/neutral/modules/sentinel-memory/MemorySentinel.d.ts.map +1 -1
  75. package/dist/neutral/modules/sentinel-memory/SentinelRunner.d.ts.map +1 -1
  76. package/dist/neutral/modules/witness-abstract/AbstractWitness.d.ts.map +1 -1
  77. package/dist/neutral/node-abstract.mjs +8 -4
  78. package/dist/neutral/node-abstract.mjs.map +2 -2
  79. package/dist/neutral/node-memory.mjs +6 -4
  80. package/dist/neutral/node-memory.mjs.map +2 -2
  81. package/dist/neutral/node-view.mjs +2 -1
  82. package/dist/neutral/node-view.mjs.map +2 -2
  83. package/dist/neutral/node-wrapper.mjs +16 -7
  84. package/dist/neutral/node-wrapper.mjs.map +2 -2
  85. package/dist/neutral/payloadset-plugin.mjs +11 -10
  86. package/dist/neutral/payloadset-plugin.mjs.map +2 -2
  87. package/dist/neutral/sentinel-abstract.mjs +4 -3
  88. package/dist/neutral/sentinel-abstract.mjs.map +2 -2
  89. package/dist/neutral/sentinel-memory.mjs +12 -7
  90. package/dist/neutral/sentinel-memory.mjs.map +2 -2
  91. package/dist/neutral/witness-abstract.mjs +4 -3
  92. package/dist/neutral/witness-abstract.mjs.map +2 -2
  93. package/dist/node/modules/archivist-abstract/AbstractArchivist.d.ts.map +1 -1
  94. package/dist/node/modules/archivist-generic/Archivist.d.ts.map +1 -1
  95. package/dist/node/modules/archivist-memory/MemoryDriver.d.ts.map +1 -1
  96. package/dist/node/modules/archivist-model/lib/getBoundWitness.d.ts.map +1 -1
  97. package/dist/node/modules/archivist-model/lib/hydrateBoundWitness.d.ts.map +1 -1
  98. package/dist/node/modules/archivist-view/ViewArchivist.d.ts.map +1 -1
  99. package/dist/node/modules/boundwitness-loader/Loader.d.ts.map +1 -1
  100. package/dist/node/modules/bridge-abstract/AbstractBridge.d.ts.map +1 -1
  101. package/dist/node/modules/bridge-abstract/AbstractModuleProxy/AbstractModuleProxy.d.ts.map +1 -1
  102. package/dist/node/modules/bridge-http/HttpBridge.d.ts.map +1 -1
  103. package/dist/node/modules/bridge-http/ModuleProxy/ModuleProxy.d.ts.map +1 -1
  104. package/dist/node/modules/bridge-wrapper/BridgeWrapper.d.ts.map +1 -1
  105. package/dist/node/modules/diviner-boundwitness/MemoryBoundWitnessDiviner.d.ts.map +1 -1
  106. package/dist/node/modules/diviner-payload-generic/Diviner.d.ts.map +1 -1
  107. package/dist/node/modules/manifest-wrapper/Wrapper.d.ts.map +1 -1
  108. package/dist/node/modules/manifest-wrapper/WrapperEx.d.ts.map +1 -1
  109. package/dist/node/modules/module-abstract/AbstractModule.d.ts +0 -1
  110. package/dist/node/modules/module-abstract/AbstractModule.d.ts.map +1 -1
  111. package/dist/node/modules/module-abstract/AbstractModuleInstance.d.ts.map +1 -1
  112. package/dist/node/modules/module-abstract/QueryValidator/ModuleConfigQueryValidator.d.ts.map +1 -1
  113. package/dist/node/modules/module-model/QueryableModule/IsQueryableModuleFactory.d.ts.map +1 -1
  114. package/dist/node/modules/module-resolver/CompositeModuleResolver.d.ts.map +1 -1
  115. package/dist/node/modules/module-resolver/ResolveHelper/ResolveHelper.d.ts.map +1 -1
  116. package/dist/node/modules/module-resolver/ResolveHelper/resolveAll.d.ts.map +1 -1
  117. package/dist/node/modules/module-resolver/ResolveHelper/resolveLocalNameToAddress.d.ts.map +1 -1
  118. package/dist/node/modules/module-resolver/ResolveHelper/resolvePathToAddress.d.ts.map +1 -1
  119. package/dist/node/modules/module-resolver/SimpleModuleResolver.d.ts.map +1 -1
  120. package/dist/node/modules/module-wrapper/ModuleWrapper.d.ts.map +1 -1
  121. package/dist/node/modules/node-abstract/AbstractNode.d.ts.map +1 -1
  122. package/dist/node/modules/node-memory/MemoryNode.d.ts.map +1 -1
  123. package/dist/node/modules/node-memory/NodeHelper/flatAttachToExistingNode.d.ts.map +1 -1
  124. package/dist/node/modules/node-view/ViewNode.d.ts.map +1 -1
  125. package/dist/node/modules/node-wrapper/NodeWrapper.d.ts.map +1 -1
  126. package/dist/node/modules/payloadset-plugin/Resolver.d.ts.map +1 -1
  127. package/dist/node/modules/sentinel-abstract/AbstractSentinel.d.ts.map +1 -1
  128. package/dist/node/modules/sentinel-memory/MemorySentinel.d.ts.map +1 -1
  129. package/dist/node/modules/sentinel-memory/SentinelRunner.d.ts.map +1 -1
  130. package/dist/node/modules/witness-abstract/AbstractWitness.d.ts.map +1 -1
  131. package/package.json +11 -11
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/modules/diviner-abstract/AbstractDiviner.ts"],
4
- "sourcesContent": ["import type {\n AsTypeFunction, EventUnsubscribeFunction, Logger,\n Promisable, RetryConfig, RetryConfigWithComplete,\n} from '@ariestools/sdk'\nimport {\n assertEx,\n delay,\n forget,\n isDefined, isNull, isUndefined, retry,\n} from '@ariestools/sdk'\nimport type {\n AccountInstance, Payload, QueryBoundWitness,\n Schema, WithoutPrivateStorageMeta,\n} from '@xyo-network/sdk-protocol'\nimport { PayloadBuilder, QueryBoundWitnessWrapper } from '@xyo-network/sdk-protocol'\n\nimport { isArchivistInstance } from '#archivist-model'\nimport type {\n AttachableDivinerInstance,\n DivinerDivineQuery,\n DivinerDivineResult,\n DivinerInstance,\n DivinerModuleEventData,\n DivinerParams,\n DivinerQueries,\n} from '#diviner-model'\nimport {\n DivinerConfigSchema, DivinerDivineQuerySchema, isDivinerInstance,\n} from '#diviner-model'\nimport { AbstractModuleInstance } from '#module-abstract'\nimport {\n asModuleInstance,\n type ModuleConfig, type ModuleIdentifier, type ModuleInstance, type ModuleQueryHandlerResult, type ModuleQueryResult,\n} from '#module-model'\nimport { isWitnessInstance } from '#witness-model'\n\nconst delayedResolve = async <T extends ModuleInstance>(\n parent: ModuleInstance,\n id: ModuleIdentifier,\n closure: (mod: T | null) => void,\n as: AsTypeFunction<T> = asModuleInstance,\n timeout = 30_000,\n logger?: Logger,\n) => {\n const start = Date.now()\n let result: T | undefined\n while (isUndefined(result)) {\n result = as(await parent.resolve(id))\n if (isDefined(result)) {\n closure(result)\n break\n }\n if (Date.now() - start > timeout) {\n logger?.error(`Timed out waiting for ${id} to resolve`)\n closure(null)\n }\n await delay(500)\n }\n}\n\nexport abstract class AbstractDiviner<\n TParams extends DivinerParams = DivinerParams,\n TIn extends Payload = Payload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n>\n extends AbstractModuleInstance<TParams, TEventData>\n implements AttachableDivinerInstance<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static readonly targetSchema: Schema\n\n private _eventUnsubscribeFunctions: EventUnsubscribeFunction[] = []\n\n override get queries(): Schema[] {\n return [DivinerDivineQuerySchema, ...super.queries]\n }\n\n /** @function divine The main entry point for a diviner. Do not override this function. Implement/override divineHandler for custom functionality */\n async divine(payloads: TIn[] = [], retryConfigIn?: RetryConfigWithComplete): Promise<DivinerDivineResult<TOut>[]> {\n this._noOverride('divine')\n this.isSupportedQuery(DivinerDivineQuerySchema, 'divine')\n return await this.spanAsync('divine', async () => {\n if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked()) {\n return []\n }\n try {\n await this.globalReentrancyMutex?.acquire()\n return await this.busy(async () => {\n const retryConfig = retryConfigIn ?? this.config.retry\n await this.startedAsync('throw')\n await this.emit('divineStart', { inPayloads: payloads, mod: this })\n let outPayloads: TOut[] = []\n const errors: Error[] = []\n try {\n outPayloads = (retryConfig ? await retry(() => this.divineHandler(payloads), retryConfig) : await this.divineHandler(payloads)) ?? []\n } catch (ex) {\n errors.push(ex as Error)\n this.logger?.error(`Error in divineHandler: ${String(ex)}`)\n }\n await this.emit('divineEnd', {\n errors, inPayloads: payloads, mod: this, outPayloads,\n })\n if (errors.length > 0) {\n throw new Error(`Divine failed with ${errors.length} errors: ${errors.map(e => e.message).join(', ')}`)\n }\n return PayloadBuilder.omitPrivateStorageMeta<TOut>(outPayloads)\n })\n } finally {\n this.globalReentrancyMutex?.release()\n }\n }, { timeBudgetLimit: 200 })\n }\n\n async divineQuery(payloads?: TIn[], account?: AccountInstance, _retry?: RetryConfig): Promise<ModuleQueryResult<TOut>> {\n this._noOverride('divineQuery')\n const queryPayload: DivinerDivineQuery = { schema: DivinerDivineQuerySchema }\n return await this.sendQueryRaw(queryPayload, payloads, account)\n }\n\n /** @function queryHandler Calls divine for a divine query. Override to support additional queries. */\n protected override async queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(\n query: T,\n payloads?: Payload[],\n queryConfig?: TConfig,\n ): Promise<ModuleQueryHandlerResult> {\n const wrapper = QueryBoundWitnessWrapper.parseQuery<DivinerQueries>(query, payloads)\n // remove the query payload\n const cleanPayloads = await PayloadBuilder.filterExclude(payloads, query.query)\n const queryPayload = await wrapper.getQuery()\n assertEx(await this.queryable(query, payloads, queryConfig))\n const resultPayloads: WithoutPrivateStorageMeta<Payload>[] = []\n switch (queryPayload.schema) {\n case DivinerDivineQuerySchema: {\n resultPayloads.push(...(await this.divine(cleanPayloads as TIn[])))\n break\n }\n default: {\n return super.queryHandler(query, payloads)\n }\n }\n return PayloadBuilder.omitPrivateStorageMeta(resultPayloads)\n }\n\n protected override async startHandler(): Promise<void> {\n const { eventSubscriptions = [] } = this.config\n\n for (const subscription of eventSubscriptions) {\n const {\n sourceEvent, sourceModule, targetModuleFunction,\n } = subscription\n if (targetModuleFunction === 'divine') {\n forget(delayedResolve(this, sourceModule, (sourceModuleInstance: ModuleInstance | null) => {\n if (isNull(sourceModuleInstance)) {\n this.logger?.error(`Failed to resolve ${sourceModule} for ${this.modName}`)\n } else {\n if (isArchivistInstance(sourceModuleInstance)) {\n if (sourceEvent === 'inserted') {\n this._eventUnsubscribeFunctions.push(\n sourceModuleInstance.on(sourceEvent, async ({ outPayloads, payloads }) => {\n await this.divine((outPayloads ?? payloads) as Payload[] as TIn[])\n }),\n )\n } else {\n this.logger?.warn(`Unsupported sourceEvent ${sourceEvent} for ${sourceModuleInstance.modName}`)\n }\n } else if (isDivinerInstance(sourceModuleInstance)) {\n if (sourceEvent === 'divineEnd') {\n this._eventUnsubscribeFunctions.push(\n sourceModuleInstance.on(sourceEvent, async ({ outPayloads }) => {\n await this.divine(outPayloads as TIn[])\n }),\n )\n } else {\n this.logger?.warn(`Unsupported sourceEvent ${sourceEvent} for ${sourceModuleInstance.modName}`)\n }\n } else if (isWitnessInstance(sourceModuleInstance)) {\n if (sourceEvent === 'observeEnd') {\n this._eventUnsubscribeFunctions.push(\n sourceModuleInstance.on(sourceEvent, async ({ outPayloads }) => {\n await this.divine(outPayloads! as TIn[])\n }),\n )\n } else {\n this.logger?.warn(`Unsupported sourceEvent ${sourceEvent} for ${sourceModuleInstance.modName}`)\n }\n }\n }\n }, asModuleInstance, undefined, this.logger))\n }\n }\n\n return await super.startHandler()\n }\n\n protected override async stopHandler(): Promise<void> {\n for (const unsubscribe of this._eventUnsubscribeFunctions) {\n unsubscribe()\n }\n this._eventUnsubscribeFunctions = []\n this._eventUnsubscribeFunctions = []\n return await super.stopHandler()\n }\n\n /** @function divineHandler Implement or override to add custom functionality to a diviner */\n protected abstract divineHandler(payloads?: TIn[]): Promisable<TOut[]>\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type {\n AsTypeFunction, EventUnsubscribeFunction, Logger,\n Promisable, RetryConfig, RetryConfigWithComplete,\n} from '@ariestools/sdk'\nimport {\n assertEx,\n delay,\n forget,\n isDefined, isNull, isUndefined, retry,\n} from '@ariestools/sdk'\nimport type {\n AccountInstance, Payload, QueryBoundWitness,\n Schema, WithoutPrivateStorageMeta,\n} from '@xyo-network/sdk-protocol'\nimport { PayloadBuilder, QueryBoundWitnessWrapper } from '@xyo-network/sdk-protocol'\n\nimport { isArchivistInstance } from '#archivist-model'\nimport type {\n AttachableDivinerInstance,\n DivinerDivineQuery,\n DivinerDivineResult,\n DivinerInstance,\n DivinerModuleEventData,\n DivinerParams,\n DivinerQueries,\n} from '#diviner-model'\nimport {\n DivinerConfigSchema, DivinerDivineQuerySchema, isDivinerInstance,\n} from '#diviner-model'\nimport { AbstractModuleInstance } from '#module-abstract'\nimport {\n asModuleInstance,\n type ModuleConfig, type ModuleIdentifier, type ModuleInstance, type ModuleQueryHandlerResult, type ModuleQueryResult,\n} from '#module-model'\nimport { isWitnessInstance } from '#witness-model'\n\nconst delayedResolve = async <T extends ModuleInstance>(\n parent: ModuleInstance,\n id: ModuleIdentifier,\n closure: (mod: T | null) => void,\n as: AsTypeFunction<T> = asModuleInstance,\n timeout = 30_000,\n logger?: Logger,\n) => {\n const start = Date.now()\n let result: T | undefined\n while (isUndefined(result)) {\n result = as(await parent.resolve(id))\n if (isDefined(result)) {\n closure(result)\n break\n }\n if (Date.now() - start > timeout) {\n logger?.error(`Timed out waiting for ${id} to resolve`)\n closure(null)\n }\n await delay(500)\n }\n}\n\nexport abstract class AbstractDiviner<\n TParams extends DivinerParams = DivinerParams,\n TIn extends Payload = Payload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n>\n extends AbstractModuleInstance<TParams, TEventData>\n implements AttachableDivinerInstance<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static readonly targetSchema: Schema\n\n private _eventUnsubscribeFunctions: EventUnsubscribeFunction[] = []\n\n override get queries(): Schema[] {\n return [DivinerDivineQuerySchema, ...super.queries]\n }\n\n /** @function divine The main entry point for a diviner. Do not override this function. Implement/override divineHandler for custom functionality */\n async divine(payloads: TIn[] = [], retryConfigIn?: RetryConfigWithComplete): Promise<DivinerDivineResult<TOut>[]> {\n this._noOverride('divine')\n this.isSupportedQuery(DivinerDivineQuerySchema, 'divine')\n return await this.spanAsync('divine', async () => {\n if (this.reentrancy?.scope === 'global' && this.reentrancy.action === 'skip' && this.globalReentrancyMutex?.isLocked() === true) {\n return []\n }\n try {\n await this.globalReentrancyMutex?.acquire()\n return await this.busy(async () => {\n const retryConfig = retryConfigIn ?? this.config.retry\n await this.startedAsync('throw')\n await this.emit('divineStart', { inPayloads: payloads, mod: this })\n let outPayloads: TOut[] = []\n const errors: Error[] = []\n try {\n outPayloads = (retryConfig ? await retry(() => this.divineHandler(payloads), retryConfig) : await this.divineHandler(payloads)) ?? []\n } catch (ex) {\n errors.push(ex as Error)\n this.logger?.error(`Error in divineHandler: ${String(ex)}`)\n }\n await this.emit('divineEnd', {\n errors, inPayloads: payloads, mod: this, outPayloads,\n })\n if (errors.length > 0) {\n throw new AggregateError(errors, `Divine failed with ${errors.length} errors: ${errors.map(e => e.message).join(', ')}`)\n }\n return PayloadBuilder.omitPrivateStorageMeta<TOut>(outPayloads)\n })\n } finally {\n this.globalReentrancyMutex?.release()\n }\n }, { timeBudgetLimit: 200 })\n }\n\n async divineQuery(payloads?: TIn[], account?: AccountInstance, _retry?: RetryConfig): Promise<ModuleQueryResult<TOut>> {\n this._noOverride('divineQuery')\n const queryPayload: DivinerDivineQuery = { schema: DivinerDivineQuerySchema }\n return await this.sendQueryRaw(queryPayload, payloads, account)\n }\n\n /** @function queryHandler Calls divine for a divine query. Override to support additional queries. */\n protected override async queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(\n query: T,\n payloads?: Payload[],\n queryConfig?: TConfig,\n ): Promise<ModuleQueryHandlerResult> {\n const wrapper = QueryBoundWitnessWrapper.parseQuery<DivinerQueries>(query, payloads)\n // remove the query payload\n const cleanPayloads = await PayloadBuilder.filterExclude(payloads, query.query)\n const queryPayload = await wrapper.getQuery()\n assertEx(await this.queryable(query, payloads, queryConfig))\n const resultPayloads: WithoutPrivateStorageMeta<Payload>[] = []\n switch (queryPayload.schema) {\n case DivinerDivineQuerySchema: {\n resultPayloads.push(...(await this.divine(cleanPayloads as TIn[])))\n break\n }\n default: {\n return super.queryHandler(query, payloads)\n }\n }\n return PayloadBuilder.omitPrivateStorageMeta(resultPayloads)\n }\n\n protected override async startHandler(): Promise<void> {\n const { eventSubscriptions = [] } = this.config\n\n for (const subscription of eventSubscriptions) {\n const {\n sourceEvent, sourceModule, targetModuleFunction,\n } = subscription\n if (targetModuleFunction === 'divine') {\n forget(delayedResolve(this, sourceModule, (sourceModuleInstance: ModuleInstance | null) => {\n if (isNull(sourceModuleInstance)) {\n this.logger?.error(`Failed to resolve ${sourceModule} for ${this.modName}`)\n } else {\n if (isArchivistInstance(sourceModuleInstance)) {\n if (sourceEvent === 'inserted') {\n this._eventUnsubscribeFunctions.push(\n sourceModuleInstance.on(sourceEvent, async ({ outPayloads, payloads }) => {\n await this.divine((outPayloads ?? payloads) as Payload[] as TIn[])\n }),\n )\n } else {\n this.logger?.warn(`Unsupported sourceEvent ${sourceEvent} for ${sourceModuleInstance.modName}`)\n }\n } else if (isDivinerInstance(sourceModuleInstance)) {\n if (sourceEvent === 'divineEnd') {\n this._eventUnsubscribeFunctions.push(\n sourceModuleInstance.on(sourceEvent, async ({ outPayloads }) => {\n await this.divine(outPayloads as TIn[])\n }),\n )\n } else {\n this.logger?.warn(`Unsupported sourceEvent ${sourceEvent} for ${sourceModuleInstance.modName}`)\n }\n } else if (isWitnessInstance(sourceModuleInstance)) {\n if (sourceEvent === 'observeEnd') {\n this._eventUnsubscribeFunctions.push(\n sourceModuleInstance.on(sourceEvent, async ({ outPayloads }) => {\n await this.divine(outPayloads! as TIn[])\n }),\n )\n } else {\n this.logger?.warn(`Unsupported sourceEvent ${sourceEvent} for ${sourceModuleInstance.modName}`)\n }\n }\n }\n }, asModuleInstance, undefined, this.logger))\n }\n }\n\n return await super.startHandler()\n }\n\n protected override async stopHandler(): Promise<void> {\n for (const unsubscribe of this._eventUnsubscribeFunctions) {\n unsubscribe()\n }\n this._eventUnsubscribeFunctions = []\n this._eventUnsubscribeFunctions = []\n return await super.stopHandler()\n }\n\n /** @function divineHandler Implement or override to add custom functionality to a diviner */\n protected abstract divineHandler(payloads?: TIn[]): Promisable<TOut[]>\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -29,10 +29,10 @@ var applyBoundWitnessDivinerQueryPayload = (filter, payloads = []) => {
29
29
  const payloadSubset = sortedPayloads.slice(parsedOffset);
30
30
  let bws = payloadSubset.filter(isBoundWitness);
31
31
  const allAddresses = addresses?.map((address) => hexFromHexString(address)).filter(exists);
32
- if (allAddresses?.length) bws = bws.filter((bw) => containsAll(bw.addresses, allAddresses));
33
- if (payload_hashes?.length) bws = bws.filter((bw) => containsAll(bw.payload_hashes, payload_hashes));
34
- if (payload_schemas?.length) bws = bws.filter((bw) => containsAll(bw.payload_schemas, payload_schemas));
35
- if (sourceQuery) bws = bws.filter((bw) => bw?.$sourceQuery === sourceQuery);
32
+ if (allAddresses !== void 0 && allAddresses.length > 0) bws = bws.filter((bw) => containsAll(bw.addresses, allAddresses));
33
+ if (payload_hashes !== void 0 && payload_hashes.length > 0) bws = bws.filter((bw) => containsAll(bw.payload_hashes, payload_hashes));
34
+ if (payload_schemas !== void 0 && payload_schemas.length > 0) bws = bws.filter((bw) => containsAll(bw.payload_schemas, payload_schemas));
35
+ if (sourceQuery !== void 0 && sourceQuery !== "") bws = bws.filter((bw) => bw?.$sourceQuery === sourceQuery);
36
36
  if (destination && Array.isArray(destination) && destination?.length > 0) {
37
37
  const targetFilter = assertEx(destination, () => "Missing destination");
38
38
  bws = bws.filter((bw) => {
@@ -104,7 +104,6 @@ var toBoundWitnessDivinerQueryPayload = zodToFactory2(BoundWitnessDivinerQueryPa
104
104
  var MemoryBoundWitnessDiviner = class extends BoundWitnessDiviner {
105
105
  async divineHandler(payloads) {
106
106
  const filter = assertEx2(payloads?.filter(isBoundWitnessDivinerQueryPayload)?.pop(), () => "Missing query payload");
107
- if (!filter) return [];
108
107
  const archivist = assertEx2(await this.archivistInstance(), () => "Unable to resolve archivist");
109
108
  const bws = (await archivist?.next({ limit: 1e4 }) ?? []).filter((x) => isBoundWitness2(x) && isStorageMeta(x));
110
109
  return applyBoundWitnessDivinerQueryPayload(filter, bws);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/modules/diviner-boundwitness/applyBoundWitnessDivinerQueryPayload.ts", "../../src/modules/diviner-boundwitness/MemoryBoundWitnessDiviner.ts", "../../src/modules/diviner-boundwitness/BoundWitnessDiviner.ts", "../../src/modules/diviner-boundwitness/Config.ts", "../../src/modules/diviner-boundwitness/Schema.ts", "../../src/modules/diviner-boundwitness/Query.ts"],
4
- "sourcesContent": ["import {\n assertEx, containsAll,\n exists, hexFromHexString,\n} from '@ariestools/sdk'\nimport type {\n BoundWitness, Payload, WithStorageMeta,\n} from '@xyo-network/sdk-protocol'\nimport {\n isBoundWitness, PayloadBuilder, SequenceConstants,\n} from '@xyo-network/sdk-protocol'\n\nimport type { BoundWitnessDivinerQueryPayload } from './Query.ts'\n\n// eslint-disable-next-line complexity\nexport const applyBoundWitnessDivinerQueryPayload = (filter?: BoundWitnessDivinerQueryPayload, payloads: WithStorageMeta<Payload>[] = []): BoundWitness[] => {\n if (!filter) return []\n const {\n addresses, cursor, destination, limit, order = 'desc', payload_hashes, payload_schemas, sourceQuery,\n } = filter\n\n const sortedPayloads = PayloadBuilder.sortByStorageMeta(payloads, order === 'desc' ? -1 : 1)\n const parsedCursor = cursor ?? ((order === 'desc') ? SequenceConstants.maxLocalSequence : SequenceConstants.minLocalSequence)\n const parsedOffset = (order === 'desc')\n ? sortedPayloads.findIndex(bw => bw._sequence < parsedCursor)\n : sortedPayloads.findIndex(bw => bw._sequence > parsedCursor)\n if (parsedOffset === -1) return []\n const payloadSubset = sortedPayloads.slice(parsedOffset)\n\n let bws = payloadSubset.filter(isBoundWitness)\n const allAddresses = addresses?.map(address => hexFromHexString(address)).filter(exists)\n if (allAddresses?.length) bws = bws.filter(bw => containsAll<string>(bw.addresses, allAddresses))\n if (payload_hashes?.length) bws = bws.filter(bw => containsAll(bw.payload_hashes, payload_hashes))\n if (payload_schemas?.length) bws = bws.filter(bw => containsAll(bw.payload_schemas, payload_schemas))\n if (sourceQuery) bws = bws.filter(bw => bw?.$sourceQuery === sourceQuery)\n // If there's a destination filter of the right kind\n if (destination && Array.isArray(destination) && destination?.length > 0) {\n const targetFilter = assertEx(destination, () => 'Missing destination')\n // Find all BWs that satisfy the destination constraint\n bws = bws.filter((bw) => {\n const targetDestinationField = (bw as { $destination?: string | string[] })?.$destination\n // If the destination field is an array and contains at least one element\n return targetDestinationField !== undefined && Array.isArray(targetDestinationField) && targetDestinationField.length > 0\n // Check that the targetDestinationField contains all the elements in the targetFilter\n ? containsAll(targetFilter, targetDestinationField ?? [])\n // Otherwise, filter it out\n : false\n })\n }\n const parsedLimit = limit ?? bws.length\n return bws.slice(0, parsedLimit)\n}\n", "import { assertEx } from '@ariestools/sdk'\nimport { type BoundWitness, isBoundWitness } from '@xyo-network/sdk-protocol'\nimport { isStorageMeta } from '@xyo-network/sdk-protocol'\n\nimport { applyBoundWitnessDivinerQueryPayload } from './applyBoundWitnessDivinerQueryPayload.ts'\nimport { BoundWitnessDiviner } from './BoundWitnessDiviner.ts'\nimport type { BoundWitnessDivinerParams } from './Params.ts'\nimport { type BoundWitnessDivinerQueryPayload, isBoundWitnessDivinerQueryPayload } from './Query.ts'\n\nexport interface EqualityComparisonOperators {\n /**\n * 'Not Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value does not match the provided string.\n * Example: field != 'value'\n */\n '!=': string\n\n /**\n * 'Less Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than the provided string.\n * Example: field < 'value'\n */\n '<': string\n\n /**\n * 'Less Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than or equal to the provided string.\n * Example: field <= 'value'\n */\n '<=': string\n\n /**\n * 'Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value matches the provided string exactly.\n * Example: field = 'value'\n */\n '=': string\n\n /**\n * 'Greater Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than the provided string.\n * Example: field > 'value'\n */\n '>': string\n\n /**\n * 'Greater Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than or equal to the provided string.\n * Example: field >= 'value'\n */\n '>=': string\n}\n\nexport class MemoryBoundWitnessDiviner<\n TParams extends BoundWitnessDivinerParams = BoundWitnessDivinerParams,\n TIn extends BoundWitnessDivinerQueryPayload = BoundWitnessDivinerQueryPayload,\n TOut extends BoundWitness = BoundWitness,\n> extends BoundWitnessDiviner<TParams, TIn, TOut> {\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const filter = assertEx(payloads?.filter(isBoundWitnessDivinerQueryPayload)?.pop(), () => 'Missing query payload')\n if (!filter) return []\n const archivist = assertEx(await this.archivistInstance(), () => 'Unable to resolve archivist')\n const bws = ((await archivist?.next({ limit: 10_000 })) ?? []).filter(x => isBoundWitness(x) && isStorageMeta(x))\n return applyBoundWitnessDivinerQueryPayload(filter, bws) as TOut[]\n }\n}\n", "import type { BoundWitness, Schema } from '@xyo-network/sdk-protocol'\n\nimport { AbstractDiviner } from '#diviner-abstract'\nimport type { DivinerInstance, DivinerModuleEventData } from '#diviner-model'\n\nimport { BoundWitnessDivinerConfigSchema } from './Config.ts'\nimport type { BoundWitnessDivinerParams } from './Params.ts'\nimport type { BoundWitnessDivinerQueryPayload } from './Query.ts'\n\nexport abstract class BoundWitnessDiviner<\n TParams extends BoundWitnessDivinerParams = BoundWitnessDivinerParams,\n TIn extends BoundWitnessDivinerQueryPayload = BoundWitnessDivinerQueryPayload,\n TOut extends BoundWitness = BoundWitness,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, BoundWitnessDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = BoundWitnessDivinerConfigSchema\n}\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport { asSchema, type Payload } from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport type { DivinerConfig } from '#diviner-model'\nimport { DivinerConfigZod } from '#diviner-model'\n\nimport { BoundWitnessDivinerSchema } from './Schema.ts'\n\nexport const BoundWitnessDivinerConfigSchema: string & {\n readonly __schema: true\n} = asSchema(`${BoundWitnessDivinerSchema}.config`, true)\nexport type BoundWitnessDivinerConfigSchema = typeof BoundWitnessDivinerConfigSchema\n\nexport const BoundWitnessDivinerConfigZod: z.ZodMiniObject<\n Omit<(typeof DivinerConfigZod)['shape'], 'schema'> & {\n schema: z.ZodMiniLiteral<BoundWitnessDivinerConfigSchema>\n },\n z.core.$strip\n> = z.extend(DivinerConfigZod, { schema: z.literal(BoundWitnessDivinerConfigSchema) })\n\nexport type BoundWitnessDivinerConfigBase = z.infer<typeof BoundWitnessDivinerConfigZod>\n\nexport const isBoundWitnessDivinerConfig: ReturnType<typeof zodIsFactory<BoundWitnessDivinerConfigBase>> = zodIsFactory(BoundWitnessDivinerConfigZod)\nexport const asBoundWitnessDivinerConfig: ReturnType<typeof zodAsFactory<BoundWitnessDivinerConfigBase>> = zodAsFactory(BoundWitnessDivinerConfigZod, 'asBoundWitnessDivinerConfig')\nexport const toBoundWitnessDivinerConfig: ReturnType<typeof zodToFactory<BoundWitnessDivinerConfigBase>> = zodToFactory(BoundWitnessDivinerConfigZod, 'toBoundWitnessDivinerConfig')\n\nexport type BoundWitnessDivinerConfig<T extends Payload = Payload> = DivinerConfig<\n T & {\n schema: BoundWitnessDivinerConfigSchema\n }\n>\n", "import { asSchema } from '@xyo-network/sdk-protocol'\n\nexport const BoundWitnessDivinerSchema: 'network.xyo.diviner.boundwitness' & {\n readonly __schema: true\n} = asSchema('network.xyo.diviner.boundwitness', true)\nexport type BoundWitnessDivinerSchema = typeof BoundWitnessDivinerSchema\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport {\n asSchema, PayloadZodOfSchema, QueryFieldsZod,\n} from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport type { BoundWitnessDivinerPredicate } from './Predicate.ts'\nimport { BoundWitnessDivinerSchema } from './Schema.ts'\n\nexport const BoundWitnessDivinerQuerySchema: string & {\n readonly __schema: true\n} = asSchema(`${BoundWitnessDivinerSchema}.query`, true)\nexport type BoundWitnessDivinerQuerySchema = typeof BoundWitnessDivinerQuerySchema\n\nexport const BoundWitnessDivinerQueryPayloadZod: z.ZodMiniIntersection<\n z.ZodMiniObject<\n & { schema: z.ZodMiniLiteral<BoundWitnessDivinerQuerySchema> }\n & (typeof QueryFieldsZod)['shape'],\n z.core.$strip\n >,\n z.ZodMiniCustom<BoundWitnessDivinerPredicate, BoundWitnessDivinerPredicate>\n> = z.intersection(\n z.extend(PayloadZodOfSchema(BoundWitnessDivinerQuerySchema), { ...QueryFieldsZod.shape }),\n z.custom<BoundWitnessDivinerPredicate>(),\n)\n\nexport type BoundWitnessDivinerQueryPayload = z.infer<typeof BoundWitnessDivinerQueryPayloadZod>\n\nexport const isBoundWitnessDivinerQueryPayload: ReturnType<typeof zodIsFactory<BoundWitnessDivinerQueryPayload>> = zodIsFactory(BoundWitnessDivinerQueryPayloadZod)\nexport const asBoundWitnessDivinerQueryPayload: ReturnType<typeof zodAsFactory<BoundWitnessDivinerQueryPayload>> = zodAsFactory(BoundWitnessDivinerQueryPayloadZod, 'asBoundWitnessDivinerQueryPayload')\nexport const toBoundWitnessDivinerQueryPayload: ReturnType<typeof zodToFactory<BoundWitnessDivinerQueryPayload>> = zodToFactory(BoundWitnessDivinerQueryPayloadZod, 'toBoundWitnessDivinerQueryPayload')\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n assertEx, containsAll,\n exists, hexFromHexString,\n} from '@ariestools/sdk'\nimport type {\n BoundWitness, Payload, WithStorageMeta,\n} from '@xyo-network/sdk-protocol'\nimport {\n isBoundWitness, PayloadBuilder, SequenceConstants,\n} from '@xyo-network/sdk-protocol'\n\nimport type { BoundWitnessDivinerQueryPayload } from './Query.ts'\n\n// eslint-disable-next-line complexity\nexport const applyBoundWitnessDivinerQueryPayload = (filter?: BoundWitnessDivinerQueryPayload, payloads: WithStorageMeta<Payload>[] = []): BoundWitness[] => {\n if (!filter) return []\n const {\n addresses, cursor, destination, limit, order = 'desc', payload_hashes, payload_schemas, sourceQuery,\n } = filter\n\n const sortedPayloads = PayloadBuilder.sortByStorageMeta(payloads, order === 'desc' ? -1 : 1)\n const parsedCursor = cursor ?? ((order === 'desc') ? SequenceConstants.maxLocalSequence : SequenceConstants.minLocalSequence)\n const parsedOffset = (order === 'desc')\n ? sortedPayloads.findIndex(bw => bw._sequence < parsedCursor)\n : sortedPayloads.findIndex(bw => bw._sequence > parsedCursor)\n if (parsedOffset === -1) return []\n const payloadSubset = sortedPayloads.slice(parsedOffset)\n\n let bws = payloadSubset.filter(isBoundWitness)\n const allAddresses = addresses?.map(address => hexFromHexString(address)).filter(exists)\n if (allAddresses !== undefined && allAddresses.length > 0) bws = bws.filter(bw => containsAll<string>(bw.addresses, allAddresses))\n if (payload_hashes !== undefined && payload_hashes.length > 0) bws = bws.filter(bw => containsAll(bw.payload_hashes, payload_hashes))\n if (payload_schemas !== undefined && payload_schemas.length > 0) bws = bws.filter(bw => containsAll(bw.payload_schemas, payload_schemas))\n if (sourceQuery !== undefined && sourceQuery !== '') bws = bws.filter(bw => bw?.$sourceQuery === sourceQuery)\n // If there's a destination filter of the right kind\n if (destination && Array.isArray(destination) && destination?.length > 0) {\n const targetFilter = assertEx(destination, () => 'Missing destination')\n // Find all BWs that satisfy the destination constraint\n bws = bws.filter((bw) => {\n const targetDestinationField = (bw as { $destination?: string | string[] })?.$destination\n // If the destination field is an array and contains at least one element\n return targetDestinationField !== undefined && Array.isArray(targetDestinationField) && targetDestinationField.length > 0\n // Check that the targetDestinationField contains all the elements in the targetFilter\n ? containsAll(targetFilter, targetDestinationField ?? [])\n // Otherwise, filter it out\n : false\n })\n }\n const parsedLimit = limit ?? bws.length\n return bws.slice(0, parsedLimit)\n}\n", "import { assertEx } from '@ariestools/sdk'\nimport { type BoundWitness, isBoundWitness } from '@xyo-network/sdk-protocol'\nimport { isStorageMeta } from '@xyo-network/sdk-protocol'\n\nimport { applyBoundWitnessDivinerQueryPayload } from './applyBoundWitnessDivinerQueryPayload.ts'\nimport { BoundWitnessDiviner } from './BoundWitnessDiviner.ts'\nimport type { BoundWitnessDivinerParams } from './Params.ts'\nimport { type BoundWitnessDivinerQueryPayload, isBoundWitnessDivinerQueryPayload } from './Query.ts'\n\nexport interface EqualityComparisonOperators {\n /**\n * 'Not Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value does not match the provided string.\n * Example: field != 'value'\n */\n '!=': string\n\n /**\n * 'Less Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than the provided string.\n * Example: field < 'value'\n */\n '<': string\n\n /**\n * 'Less Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than or equal to the provided string.\n * Example: field <= 'value'\n */\n '<=': string\n\n /**\n * 'Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value matches the provided string exactly.\n * Example: field = 'value'\n */\n '=': string\n\n /**\n * 'Greater Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than the provided string.\n * Example: field > 'value'\n */\n '>': string\n\n /**\n * 'Greater Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than or equal to the provided string.\n * Example: field >= 'value'\n */\n '>=': string\n}\n\nexport class MemoryBoundWitnessDiviner<\n TParams extends BoundWitnessDivinerParams = BoundWitnessDivinerParams,\n TIn extends BoundWitnessDivinerQueryPayload = BoundWitnessDivinerQueryPayload,\n TOut extends BoundWitness = BoundWitness,\n> extends BoundWitnessDiviner<TParams, TIn, TOut> {\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const filter = assertEx(payloads?.filter(isBoundWitnessDivinerQueryPayload)?.pop(), () => 'Missing query payload')\n const archivist = assertEx(await this.archivistInstance(), () => 'Unable to resolve archivist')\n const bws = ((await archivist?.next({ limit: 10_000 })) ?? []).filter(x => isBoundWitness(x) && isStorageMeta(x))\n return applyBoundWitnessDivinerQueryPayload(filter, bws) as TOut[]\n }\n}\n", "import type { BoundWitness, Schema } from '@xyo-network/sdk-protocol'\n\nimport { AbstractDiviner } from '#diviner-abstract'\nimport type { DivinerInstance, DivinerModuleEventData } from '#diviner-model'\n\nimport { BoundWitnessDivinerConfigSchema } from './Config.ts'\nimport type { BoundWitnessDivinerParams } from './Params.ts'\nimport type { BoundWitnessDivinerQueryPayload } from './Query.ts'\n\nexport abstract class BoundWitnessDiviner<\n TParams extends BoundWitnessDivinerParams = BoundWitnessDivinerParams,\n TIn extends BoundWitnessDivinerQueryPayload = BoundWitnessDivinerQueryPayload,\n TOut extends BoundWitness = BoundWitness,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, BoundWitnessDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = BoundWitnessDivinerConfigSchema\n}\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport { asSchema, type Payload } from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport type { DivinerConfig } from '#diviner-model'\nimport { DivinerConfigZod } from '#diviner-model'\n\nimport { BoundWitnessDivinerSchema } from './Schema.ts'\n\nexport const BoundWitnessDivinerConfigSchema: string & {\n readonly __schema: true\n} = asSchema(`${BoundWitnessDivinerSchema}.config`, true)\nexport type BoundWitnessDivinerConfigSchema = typeof BoundWitnessDivinerConfigSchema\n\nexport const BoundWitnessDivinerConfigZod: z.ZodMiniObject<\n Omit<(typeof DivinerConfigZod)['shape'], 'schema'> & {\n schema: z.ZodMiniLiteral<BoundWitnessDivinerConfigSchema>\n },\n z.core.$strip\n> = z.extend(DivinerConfigZod, { schema: z.literal(BoundWitnessDivinerConfigSchema) })\n\nexport type BoundWitnessDivinerConfigBase = z.infer<typeof BoundWitnessDivinerConfigZod>\n\nexport const isBoundWitnessDivinerConfig: ReturnType<typeof zodIsFactory<BoundWitnessDivinerConfigBase>> = zodIsFactory(BoundWitnessDivinerConfigZod)\nexport const asBoundWitnessDivinerConfig: ReturnType<typeof zodAsFactory<BoundWitnessDivinerConfigBase>> = zodAsFactory(BoundWitnessDivinerConfigZod, 'asBoundWitnessDivinerConfig')\nexport const toBoundWitnessDivinerConfig: ReturnType<typeof zodToFactory<BoundWitnessDivinerConfigBase>> = zodToFactory(BoundWitnessDivinerConfigZod, 'toBoundWitnessDivinerConfig')\n\nexport type BoundWitnessDivinerConfig<T extends Payload = Payload> = DivinerConfig<\n T & {\n schema: BoundWitnessDivinerConfigSchema\n }\n>\n", "import { asSchema } from '@xyo-network/sdk-protocol'\n\nexport const BoundWitnessDivinerSchema: 'network.xyo.diviner.boundwitness' & {\n readonly __schema: true\n} = asSchema('network.xyo.diviner.boundwitness', true)\nexport type BoundWitnessDivinerSchema = typeof BoundWitnessDivinerSchema\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport {\n asSchema, PayloadZodOfSchema, QueryFieldsZod,\n} from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport type { BoundWitnessDivinerPredicate } from './Predicate.ts'\nimport { BoundWitnessDivinerSchema } from './Schema.ts'\n\nexport const BoundWitnessDivinerQuerySchema: string & {\n readonly __schema: true\n} = asSchema(`${BoundWitnessDivinerSchema}.query`, true)\nexport type BoundWitnessDivinerQuerySchema = typeof BoundWitnessDivinerQuerySchema\n\nexport const BoundWitnessDivinerQueryPayloadZod: z.ZodMiniIntersection<\n z.ZodMiniObject<\n & { schema: z.ZodMiniLiteral<BoundWitnessDivinerQuerySchema> }\n & (typeof QueryFieldsZod)['shape'],\n z.core.$strip\n >,\n z.ZodMiniCustom<BoundWitnessDivinerPredicate, BoundWitnessDivinerPredicate>\n> = z.intersection(\n z.extend(PayloadZodOfSchema(BoundWitnessDivinerQuerySchema), { ...QueryFieldsZod.shape }),\n z.custom<BoundWitnessDivinerPredicate>(),\n)\n\nexport type BoundWitnessDivinerQueryPayload = z.infer<typeof BoundWitnessDivinerQueryPayloadZod>\n\nexport const isBoundWitnessDivinerQueryPayload: ReturnType<typeof zodIsFactory<BoundWitnessDivinerQueryPayload>> = zodIsFactory(BoundWitnessDivinerQueryPayloadZod)\nexport const asBoundWitnessDivinerQueryPayload: ReturnType<typeof zodAsFactory<BoundWitnessDivinerQueryPayload>> = zodAsFactory(BoundWitnessDivinerQueryPayloadZod, 'asBoundWitnessDivinerQueryPayload')\nexport const toBoundWitnessDivinerQueryPayload: ReturnType<typeof zodToFactory<BoundWitnessDivinerQueryPayload>> = zodToFactory(BoundWitnessDivinerQueryPayloadZod, 'toBoundWitnessDivinerQueryPayload')\n"],
5
+ "mappings": "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",
6
6
  "names": ["assertEx", "isBoundWitness", "asSchema", "asSchema", "zodAsFactory", "zodIsFactory", "zodToFactory", "asSchema", "z", "asSchema", "zodIsFactory", "zodAsFactory", "zodToFactory", "assertEx", "isBoundWitness"]
7
7
  }
@@ -59,10 +59,10 @@ var applyBoundWitnessDivinerQueryPayload = (filter, payloads = []) => {
59
59
  const payloadSubset = sortedPayloads.slice(parsedOffset);
60
60
  let bws = payloadSubset.filter(isBoundWitness);
61
61
  const allAddresses = addresses?.map((address) => hexFromHexString(address)).filter(exists);
62
- if (allAddresses?.length) bws = bws.filter((bw) => containsAll(bw.addresses, allAddresses));
63
- if (payload_hashes?.length) bws = bws.filter((bw) => containsAll(bw.payload_hashes, payload_hashes));
64
- if (payload_schemas?.length) bws = bws.filter((bw) => containsAll(bw.payload_schemas, payload_schemas));
65
- if (sourceQuery) bws = bws.filter((bw) => bw?.$sourceQuery === sourceQuery);
62
+ if (allAddresses !== void 0 && allAddresses.length > 0) bws = bws.filter((bw) => containsAll(bw.addresses, allAddresses));
63
+ if (payload_hashes !== void 0 && payload_hashes.length > 0) bws = bws.filter((bw) => containsAll(bw.payload_hashes, payload_hashes));
64
+ if (payload_schemas !== void 0 && payload_schemas.length > 0) bws = bws.filter((bw) => containsAll(bw.payload_schemas, payload_schemas));
65
+ if (sourceQuery !== void 0 && sourceQuery !== "") bws = bws.filter((bw) => bw?.$sourceQuery === sourceQuery);
66
66
  if (destination && Array.isArray(destination) && destination?.length > 0) {
67
67
  const targetFilter = assertEx(destination, () => "Missing destination");
68
68
  bws = bws.filter((bw) => {
@@ -104,7 +104,6 @@ var toBoundWitnessDivinerQueryPayload = zodToFactory2(BoundWitnessDivinerQueryPa
104
104
  var MemoryBoundWitnessDiviner = class extends BoundWitnessDiviner {
105
105
  async divineHandler(payloads) {
106
106
  const filter = assertEx2(payloads?.filter(isBoundWitnessDivinerQueryPayload)?.pop(), () => "Missing query payload");
107
- if (!filter) return [];
108
107
  const archivist = assertEx2(await this.archivistInstance(), () => "Unable to resolve archivist");
109
108
  const bws = (await archivist?.next({ limit: 1e4 }) ?? []).filter((x) => isBoundWitness2(x) && isStorageMeta(x));
110
109
  return applyBoundWitnessDivinerQueryPayload(filter, bws);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/modules/diviner-boundwitness/BoundWitnessDiviner.ts", "../../src/modules/diviner-boundwitness/Config.ts", "../../src/modules/diviner-boundwitness/Schema.ts", "../../src/modules/diviner-boundwitness/applyBoundWitnessDivinerQueryPayload.ts", "../../src/modules/diviner-boundwitness/MemoryBoundWitnessDiviner.ts", "../../src/modules/diviner-boundwitness/Query.ts"],
4
- "sourcesContent": ["import type { BoundWitness, Schema } from '@xyo-network/sdk-protocol'\n\nimport { AbstractDiviner } from '#diviner-abstract'\nimport type { DivinerInstance, DivinerModuleEventData } from '#diviner-model'\n\nimport { BoundWitnessDivinerConfigSchema } from './Config.ts'\nimport type { BoundWitnessDivinerParams } from './Params.ts'\nimport type { BoundWitnessDivinerQueryPayload } from './Query.ts'\n\nexport abstract class BoundWitnessDiviner<\n TParams extends BoundWitnessDivinerParams = BoundWitnessDivinerParams,\n TIn extends BoundWitnessDivinerQueryPayload = BoundWitnessDivinerQueryPayload,\n TOut extends BoundWitness = BoundWitness,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, BoundWitnessDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = BoundWitnessDivinerConfigSchema\n}\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport { asSchema, type Payload } from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport type { DivinerConfig } from '#diviner-model'\nimport { DivinerConfigZod } from '#diviner-model'\n\nimport { BoundWitnessDivinerSchema } from './Schema.ts'\n\nexport const BoundWitnessDivinerConfigSchema: string & {\n readonly __schema: true\n} = asSchema(`${BoundWitnessDivinerSchema}.config`, true)\nexport type BoundWitnessDivinerConfigSchema = typeof BoundWitnessDivinerConfigSchema\n\nexport const BoundWitnessDivinerConfigZod: z.ZodMiniObject<\n Omit<(typeof DivinerConfigZod)['shape'], 'schema'> & {\n schema: z.ZodMiniLiteral<BoundWitnessDivinerConfigSchema>\n },\n z.core.$strip\n> = z.extend(DivinerConfigZod, { schema: z.literal(BoundWitnessDivinerConfigSchema) })\n\nexport type BoundWitnessDivinerConfigBase = z.infer<typeof BoundWitnessDivinerConfigZod>\n\nexport const isBoundWitnessDivinerConfig: ReturnType<typeof zodIsFactory<BoundWitnessDivinerConfigBase>> = zodIsFactory(BoundWitnessDivinerConfigZod)\nexport const asBoundWitnessDivinerConfig: ReturnType<typeof zodAsFactory<BoundWitnessDivinerConfigBase>> = zodAsFactory(BoundWitnessDivinerConfigZod, 'asBoundWitnessDivinerConfig')\nexport const toBoundWitnessDivinerConfig: ReturnType<typeof zodToFactory<BoundWitnessDivinerConfigBase>> = zodToFactory(BoundWitnessDivinerConfigZod, 'toBoundWitnessDivinerConfig')\n\nexport type BoundWitnessDivinerConfig<T extends Payload = Payload> = DivinerConfig<\n T & {\n schema: BoundWitnessDivinerConfigSchema\n }\n>\n", "import { asSchema } from '@xyo-network/sdk-protocol'\n\nexport const BoundWitnessDivinerSchema: 'network.xyo.diviner.boundwitness' & {\n readonly __schema: true\n} = asSchema('network.xyo.diviner.boundwitness', true)\nexport type BoundWitnessDivinerSchema = typeof BoundWitnessDivinerSchema\n", "import {\n assertEx, containsAll,\n exists, hexFromHexString,\n} from '@ariestools/sdk'\nimport type {\n BoundWitness, Payload, WithStorageMeta,\n} from '@xyo-network/sdk-protocol'\nimport {\n isBoundWitness, PayloadBuilder, SequenceConstants,\n} from '@xyo-network/sdk-protocol'\n\nimport type { BoundWitnessDivinerQueryPayload } from './Query.ts'\n\n// eslint-disable-next-line complexity\nexport const applyBoundWitnessDivinerQueryPayload = (filter?: BoundWitnessDivinerQueryPayload, payloads: WithStorageMeta<Payload>[] = []): BoundWitness[] => {\n if (!filter) return []\n const {\n addresses, cursor, destination, limit, order = 'desc', payload_hashes, payload_schemas, sourceQuery,\n } = filter\n\n const sortedPayloads = PayloadBuilder.sortByStorageMeta(payloads, order === 'desc' ? -1 : 1)\n const parsedCursor = cursor ?? ((order === 'desc') ? SequenceConstants.maxLocalSequence : SequenceConstants.minLocalSequence)\n const parsedOffset = (order === 'desc')\n ? sortedPayloads.findIndex(bw => bw._sequence < parsedCursor)\n : sortedPayloads.findIndex(bw => bw._sequence > parsedCursor)\n if (parsedOffset === -1) return []\n const payloadSubset = sortedPayloads.slice(parsedOffset)\n\n let bws = payloadSubset.filter(isBoundWitness)\n const allAddresses = addresses?.map(address => hexFromHexString(address)).filter(exists)\n if (allAddresses?.length) bws = bws.filter(bw => containsAll<string>(bw.addresses, allAddresses))\n if (payload_hashes?.length) bws = bws.filter(bw => containsAll(bw.payload_hashes, payload_hashes))\n if (payload_schemas?.length) bws = bws.filter(bw => containsAll(bw.payload_schemas, payload_schemas))\n if (sourceQuery) bws = bws.filter(bw => bw?.$sourceQuery === sourceQuery)\n // If there's a destination filter of the right kind\n if (destination && Array.isArray(destination) && destination?.length > 0) {\n const targetFilter = assertEx(destination, () => 'Missing destination')\n // Find all BWs that satisfy the destination constraint\n bws = bws.filter((bw) => {\n const targetDestinationField = (bw as { $destination?: string | string[] })?.$destination\n // If the destination field is an array and contains at least one element\n return targetDestinationField !== undefined && Array.isArray(targetDestinationField) && targetDestinationField.length > 0\n // Check that the targetDestinationField contains all the elements in the targetFilter\n ? containsAll(targetFilter, targetDestinationField ?? [])\n // Otherwise, filter it out\n : false\n })\n }\n const parsedLimit = limit ?? bws.length\n return bws.slice(0, parsedLimit)\n}\n", "import { assertEx } from '@ariestools/sdk'\nimport { type BoundWitness, isBoundWitness } from '@xyo-network/sdk-protocol'\nimport { isStorageMeta } from '@xyo-network/sdk-protocol'\n\nimport { applyBoundWitnessDivinerQueryPayload } from './applyBoundWitnessDivinerQueryPayload.ts'\nimport { BoundWitnessDiviner } from './BoundWitnessDiviner.ts'\nimport type { BoundWitnessDivinerParams } from './Params.ts'\nimport { type BoundWitnessDivinerQueryPayload, isBoundWitnessDivinerQueryPayload } from './Query.ts'\n\nexport interface EqualityComparisonOperators {\n /**\n * 'Not Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value does not match the provided string.\n * Example: field != 'value'\n */\n '!=': string\n\n /**\n * 'Less Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than the provided string.\n * Example: field < 'value'\n */\n '<': string\n\n /**\n * 'Less Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than or equal to the provided string.\n * Example: field <= 'value'\n */\n '<=': string\n\n /**\n * 'Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value matches the provided string exactly.\n * Example: field = 'value'\n */\n '=': string\n\n /**\n * 'Greater Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than the provided string.\n * Example: field > 'value'\n */\n '>': string\n\n /**\n * 'Greater Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than or equal to the provided string.\n * Example: field >= 'value'\n */\n '>=': string\n}\n\nexport class MemoryBoundWitnessDiviner<\n TParams extends BoundWitnessDivinerParams = BoundWitnessDivinerParams,\n TIn extends BoundWitnessDivinerQueryPayload = BoundWitnessDivinerQueryPayload,\n TOut extends BoundWitness = BoundWitness,\n> extends BoundWitnessDiviner<TParams, TIn, TOut> {\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const filter = assertEx(payloads?.filter(isBoundWitnessDivinerQueryPayload)?.pop(), () => 'Missing query payload')\n if (!filter) return []\n const archivist = assertEx(await this.archivistInstance(), () => 'Unable to resolve archivist')\n const bws = ((await archivist?.next({ limit: 10_000 })) ?? []).filter(x => isBoundWitness(x) && isStorageMeta(x))\n return applyBoundWitnessDivinerQueryPayload(filter, bws) as TOut[]\n }\n}\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport {\n asSchema, PayloadZodOfSchema, QueryFieldsZod,\n} from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport type { BoundWitnessDivinerPredicate } from './Predicate.ts'\nimport { BoundWitnessDivinerSchema } from './Schema.ts'\n\nexport const BoundWitnessDivinerQuerySchema: string & {\n readonly __schema: true\n} = asSchema(`${BoundWitnessDivinerSchema}.query`, true)\nexport type BoundWitnessDivinerQuerySchema = typeof BoundWitnessDivinerQuerySchema\n\nexport const BoundWitnessDivinerQueryPayloadZod: z.ZodMiniIntersection<\n z.ZodMiniObject<\n & { schema: z.ZodMiniLiteral<BoundWitnessDivinerQuerySchema> }\n & (typeof QueryFieldsZod)['shape'],\n z.core.$strip\n >,\n z.ZodMiniCustom<BoundWitnessDivinerPredicate, BoundWitnessDivinerPredicate>\n> = z.intersection(\n z.extend(PayloadZodOfSchema(BoundWitnessDivinerQuerySchema), { ...QueryFieldsZod.shape }),\n z.custom<BoundWitnessDivinerPredicate>(),\n)\n\nexport type BoundWitnessDivinerQueryPayload = z.infer<typeof BoundWitnessDivinerQueryPayloadZod>\n\nexport const isBoundWitnessDivinerQueryPayload: ReturnType<typeof zodIsFactory<BoundWitnessDivinerQueryPayload>> = zodIsFactory(BoundWitnessDivinerQueryPayloadZod)\nexport const asBoundWitnessDivinerQueryPayload: ReturnType<typeof zodAsFactory<BoundWitnessDivinerQueryPayload>> = zodAsFactory(BoundWitnessDivinerQueryPayloadZod, 'asBoundWitnessDivinerQueryPayload')\nexport const toBoundWitnessDivinerQueryPayload: ReturnType<typeof zodToFactory<BoundWitnessDivinerQueryPayload>> = zodToFactory(BoundWitnessDivinerQueryPayloadZod, 'toBoundWitnessDivinerQueryPayload')\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { BoundWitness, Schema } from '@xyo-network/sdk-protocol'\n\nimport { AbstractDiviner } from '#diviner-abstract'\nimport type { DivinerInstance, DivinerModuleEventData } from '#diviner-model'\n\nimport { BoundWitnessDivinerConfigSchema } from './Config.ts'\nimport type { BoundWitnessDivinerParams } from './Params.ts'\nimport type { BoundWitnessDivinerQueryPayload } from './Query.ts'\n\nexport abstract class BoundWitnessDiviner<\n TParams extends BoundWitnessDivinerParams = BoundWitnessDivinerParams,\n TIn extends BoundWitnessDivinerQueryPayload = BoundWitnessDivinerQueryPayload,\n TOut extends BoundWitness = BoundWitness,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, BoundWitnessDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = BoundWitnessDivinerConfigSchema\n}\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport { asSchema, type Payload } from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport type { DivinerConfig } from '#diviner-model'\nimport { DivinerConfigZod } from '#diviner-model'\n\nimport { BoundWitnessDivinerSchema } from './Schema.ts'\n\nexport const BoundWitnessDivinerConfigSchema: string & {\n readonly __schema: true\n} = asSchema(`${BoundWitnessDivinerSchema}.config`, true)\nexport type BoundWitnessDivinerConfigSchema = typeof BoundWitnessDivinerConfigSchema\n\nexport const BoundWitnessDivinerConfigZod: z.ZodMiniObject<\n Omit<(typeof DivinerConfigZod)['shape'], 'schema'> & {\n schema: z.ZodMiniLiteral<BoundWitnessDivinerConfigSchema>\n },\n z.core.$strip\n> = z.extend(DivinerConfigZod, { schema: z.literal(BoundWitnessDivinerConfigSchema) })\n\nexport type BoundWitnessDivinerConfigBase = z.infer<typeof BoundWitnessDivinerConfigZod>\n\nexport const isBoundWitnessDivinerConfig: ReturnType<typeof zodIsFactory<BoundWitnessDivinerConfigBase>> = zodIsFactory(BoundWitnessDivinerConfigZod)\nexport const asBoundWitnessDivinerConfig: ReturnType<typeof zodAsFactory<BoundWitnessDivinerConfigBase>> = zodAsFactory(BoundWitnessDivinerConfigZod, 'asBoundWitnessDivinerConfig')\nexport const toBoundWitnessDivinerConfig: ReturnType<typeof zodToFactory<BoundWitnessDivinerConfigBase>> = zodToFactory(BoundWitnessDivinerConfigZod, 'toBoundWitnessDivinerConfig')\n\nexport type BoundWitnessDivinerConfig<T extends Payload = Payload> = DivinerConfig<\n T & {\n schema: BoundWitnessDivinerConfigSchema\n }\n>\n", "import { asSchema } from '@xyo-network/sdk-protocol'\n\nexport const BoundWitnessDivinerSchema: 'network.xyo.diviner.boundwitness' & {\n readonly __schema: true\n} = asSchema('network.xyo.diviner.boundwitness', true)\nexport type BoundWitnessDivinerSchema = typeof BoundWitnessDivinerSchema\n", "import {\n assertEx, containsAll,\n exists, hexFromHexString,\n} from '@ariestools/sdk'\nimport type {\n BoundWitness, Payload, WithStorageMeta,\n} from '@xyo-network/sdk-protocol'\nimport {\n isBoundWitness, PayloadBuilder, SequenceConstants,\n} from '@xyo-network/sdk-protocol'\n\nimport type { BoundWitnessDivinerQueryPayload } from './Query.ts'\n\n// eslint-disable-next-line complexity\nexport const applyBoundWitnessDivinerQueryPayload = (filter?: BoundWitnessDivinerQueryPayload, payloads: WithStorageMeta<Payload>[] = []): BoundWitness[] => {\n if (!filter) return []\n const {\n addresses, cursor, destination, limit, order = 'desc', payload_hashes, payload_schemas, sourceQuery,\n } = filter\n\n const sortedPayloads = PayloadBuilder.sortByStorageMeta(payloads, order === 'desc' ? -1 : 1)\n const parsedCursor = cursor ?? ((order === 'desc') ? SequenceConstants.maxLocalSequence : SequenceConstants.minLocalSequence)\n const parsedOffset = (order === 'desc')\n ? sortedPayloads.findIndex(bw => bw._sequence < parsedCursor)\n : sortedPayloads.findIndex(bw => bw._sequence > parsedCursor)\n if (parsedOffset === -1) return []\n const payloadSubset = sortedPayloads.slice(parsedOffset)\n\n let bws = payloadSubset.filter(isBoundWitness)\n const allAddresses = addresses?.map(address => hexFromHexString(address)).filter(exists)\n if (allAddresses !== undefined && allAddresses.length > 0) bws = bws.filter(bw => containsAll<string>(bw.addresses, allAddresses))\n if (payload_hashes !== undefined && payload_hashes.length > 0) bws = bws.filter(bw => containsAll(bw.payload_hashes, payload_hashes))\n if (payload_schemas !== undefined && payload_schemas.length > 0) bws = bws.filter(bw => containsAll(bw.payload_schemas, payload_schemas))\n if (sourceQuery !== undefined && sourceQuery !== '') bws = bws.filter(bw => bw?.$sourceQuery === sourceQuery)\n // If there's a destination filter of the right kind\n if (destination && Array.isArray(destination) && destination?.length > 0) {\n const targetFilter = assertEx(destination, () => 'Missing destination')\n // Find all BWs that satisfy the destination constraint\n bws = bws.filter((bw) => {\n const targetDestinationField = (bw as { $destination?: string | string[] })?.$destination\n // If the destination field is an array and contains at least one element\n return targetDestinationField !== undefined && Array.isArray(targetDestinationField) && targetDestinationField.length > 0\n // Check that the targetDestinationField contains all the elements in the targetFilter\n ? containsAll(targetFilter, targetDestinationField ?? [])\n // Otherwise, filter it out\n : false\n })\n }\n const parsedLimit = limit ?? bws.length\n return bws.slice(0, parsedLimit)\n}\n", "import { assertEx } from '@ariestools/sdk'\nimport { type BoundWitness, isBoundWitness } from '@xyo-network/sdk-protocol'\nimport { isStorageMeta } from '@xyo-network/sdk-protocol'\n\nimport { applyBoundWitnessDivinerQueryPayload } from './applyBoundWitnessDivinerQueryPayload.ts'\nimport { BoundWitnessDiviner } from './BoundWitnessDiviner.ts'\nimport type { BoundWitnessDivinerParams } from './Params.ts'\nimport { type BoundWitnessDivinerQueryPayload, isBoundWitnessDivinerQueryPayload } from './Query.ts'\n\nexport interface EqualityComparisonOperators {\n /**\n * 'Not Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value does not match the provided string.\n * Example: field != 'value'\n */\n '!=': string\n\n /**\n * 'Less Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than the provided string.\n * Example: field < 'value'\n */\n '<': string\n\n /**\n * 'Less Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than or equal to the provided string.\n * Example: field <= 'value'\n */\n '<=': string\n\n /**\n * 'Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value matches the provided string exactly.\n * Example: field = 'value'\n */\n '=': string\n\n /**\n * 'Greater Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than the provided string.\n * Example: field > 'value'\n */\n '>': string\n\n /**\n * 'Greater Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than or equal to the provided string.\n * Example: field >= 'value'\n */\n '>=': string\n}\n\nexport class MemoryBoundWitnessDiviner<\n TParams extends BoundWitnessDivinerParams = BoundWitnessDivinerParams,\n TIn extends BoundWitnessDivinerQueryPayload = BoundWitnessDivinerQueryPayload,\n TOut extends BoundWitness = BoundWitness,\n> extends BoundWitnessDiviner<TParams, TIn, TOut> {\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const filter = assertEx(payloads?.filter(isBoundWitnessDivinerQueryPayload)?.pop(), () => 'Missing query payload')\n const archivist = assertEx(await this.archivistInstance(), () => 'Unable to resolve archivist')\n const bws = ((await archivist?.next({ limit: 10_000 })) ?? []).filter(x => isBoundWitness(x) && isStorageMeta(x))\n return applyBoundWitnessDivinerQueryPayload(filter, bws) as TOut[]\n }\n}\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport {\n asSchema, PayloadZodOfSchema, QueryFieldsZod,\n} from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport type { BoundWitnessDivinerPredicate } from './Predicate.ts'\nimport { BoundWitnessDivinerSchema } from './Schema.ts'\n\nexport const BoundWitnessDivinerQuerySchema: string & {\n readonly __schema: true\n} = asSchema(`${BoundWitnessDivinerSchema}.query`, true)\nexport type BoundWitnessDivinerQuerySchema = typeof BoundWitnessDivinerQuerySchema\n\nexport const BoundWitnessDivinerQueryPayloadZod: z.ZodMiniIntersection<\n z.ZodMiniObject<\n & { schema: z.ZodMiniLiteral<BoundWitnessDivinerQuerySchema> }\n & (typeof QueryFieldsZod)['shape'],\n z.core.$strip\n >,\n z.ZodMiniCustom<BoundWitnessDivinerPredicate, BoundWitnessDivinerPredicate>\n> = z.intersection(\n z.extend(PayloadZodOfSchema(BoundWitnessDivinerQuerySchema), { ...QueryFieldsZod.shape }),\n z.custom<BoundWitnessDivinerPredicate>(),\n)\n\nexport type BoundWitnessDivinerQueryPayload = z.infer<typeof BoundWitnessDivinerQueryPayloadZod>\n\nexport const isBoundWitnessDivinerQueryPayload: ReturnType<typeof zodIsFactory<BoundWitnessDivinerQueryPayload>> = zodIsFactory(BoundWitnessDivinerQueryPayloadZod)\nexport const asBoundWitnessDivinerQueryPayload: ReturnType<typeof zodAsFactory<BoundWitnessDivinerQueryPayload>> = zodAsFactory(BoundWitnessDivinerQueryPayloadZod, 'asBoundWitnessDivinerQueryPayload')\nexport const toBoundWitnessDivinerQueryPayload: ReturnType<typeof zodToFactory<BoundWitnessDivinerQueryPayload>> = zodToFactory(BoundWitnessDivinerQueryPayloadZod, 'toBoundWitnessDivinerQueryPayload')\n"],
5
+ "mappings": "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",
6
6
  "names": ["asSchema", "asSchema", "assertEx", "isBoundWitness", "zodAsFactory", "zodIsFactory", "zodToFactory", "asSchema", "z", "asSchema", "zodIsFactory", "zodAsFactory", "zodToFactory", "assertEx", "isBoundWitness"]
7
7
  }
@@ -97,21 +97,18 @@ var GenericPayloadDiviner = class extends PayloadDiviner {
97
97
  ...props
98
98
  } = filter;
99
99
  let all = this.all(order, cursor);
100
- if (all) {
101
- if (schemas?.length) all = all.filter((payload) => schemas.includes(payload.schema));
102
- if (Object.keys(props).length > 0) {
103
- const additionalFilterCriteria = Object.entries(props);
104
- for (const [prop, filter2] of additionalFilterCriteria) {
105
- const property = prop;
106
- all = Array.isArray(filter2) ? all.filter((payload) => filter2.every((value) => {
107
- const prop2 = payload?.[property];
108
- return Array.isArray(prop2) && prop2.includes?.(value);
109
- })) : all.filter((payload) => payload?.[property] === filter2);
110
- }
100
+ if (schemas !== void 0 && schemas.length > 0) all = all.filter((payload) => schemas.includes(payload.schema));
101
+ if (Object.keys(props).length > 0) {
102
+ const additionalFilterCriteria = Object.entries(props);
103
+ for (const [prop, filter2] of additionalFilterCriteria) {
104
+ const property = prop;
105
+ all = Array.isArray(filter2) ? all.filter((payload) => filter2.every((value) => {
106
+ const prop2 = payload?.[property];
107
+ return Array.isArray(prop2) && prop2.includes?.(value);
108
+ })) : all.filter((payload) => payload?.[property] === filter2);
111
109
  }
112
- return limit ? all.slice(0, limit) : all;
113
110
  }
114
- throw new Error('Archivist does not support "all"');
111
+ return limit !== void 0 && limit !== 0 ? all.slice(0, limit) : all;
115
112
  }
116
113
  onArchivistCleared = () => {
117
114
  forget(
@@ -155,8 +152,9 @@ var GenericPayloadDiviner = class extends PayloadDiviner {
155
152
  }
156
153
  indexPayloads(payloads) {
157
154
  this.payloadsWithMeta.push(...payloads);
158
- for (const index of this.indexes ?? []) {
159
- this.indexMaps[index] = this.indexMaps[index] ?? [];
155
+ const indexes = this.indexes ?? [];
156
+ for (const index of indexes) {
157
+ this.indexMaps[index] ??= [];
160
158
  for (const payload of payloads) {
161
159
  this.indexMaps[index].push(payload);
162
160
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/modules/diviner-payload-generic/Diviner.ts"],
4
- "sourcesContent": ["import type { EventListener, Hex } from '@ariestools/sdk'\nimport {\n assertEx, filterAs, forget,\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport { PayloadBuilder } from '@xyo-network/sdk-protocol'\nimport {\n asSchema,\n type Payload, type Schema,\n type Sequence,\n type WithStorageMeta,\n} from '@xyo-network/sdk-protocol'\nimport { Mutex } from 'async-mutex'\nimport * as z from 'zod/mini'\n\nimport type { ArchivistInstance, ArchivistModuleEventData } from '#archivist-model'\nimport type { DivinerInstance, DivinerModuleEventData } from '#diviner-model'\nimport { PayloadDiviner } from '#diviner-payload-abstract'\nimport type {\n Order,\n PayloadDivinerConfig,\n PayloadDivinerParams,\n PayloadDivinerQueryPayload,\n} from '#diviner-payload-model'\nimport { asPayloadDivinerQueryPayload, PayloadDivinerConfigZod } from '#diviner-payload-model'\nimport { creatableModule } from '#module-model'\n\nconst DEFAULT_INDEX_BATCH_SIZE = 100 as const\nconst DEFAULT_MAX_INDEX_SIZE = 8000 as const\n\nexport const GenericPayloadDivinerConfigSchema: 'network.xyo.diviner.payload.generic.config' & {\n readonly __schema: true\n} = asSchema('network.xyo.diviner.payload.generic.config', true)\nexport type GenericPayloadDivinerConfigSchema = typeof GenericPayloadDivinerConfigSchema\n\nexport const GenericPayloadDivinerConfigZod: z.ZodMiniObject<\n Omit<(typeof PayloadDivinerConfigZod)['shape'], 'schema'> & {\n indexes: z.ZodMiniOptional<z.ZodMiniArray<z.ZodMiniString<string>>>\n schema: z.ZodMiniLiteral<GenericPayloadDivinerConfigSchema>\n },\n z.core.$strip\n> = z.extend(PayloadDivinerConfigZod, {\n indexes: z.optional(z.array(z.string())),\n schema: z.literal(GenericPayloadDivinerConfigSchema),\n})\n\nexport type GenericPayloadDivinerConfigBase = z.infer<typeof GenericPayloadDivinerConfigZod>\n\nexport const isGenericPayloadDivinerConfig: ReturnType<typeof zodIsFactory<GenericPayloadDivinerConfigBase>> = zodIsFactory(GenericPayloadDivinerConfigZod)\nexport const asGenericPayloadDivinerConfig: ReturnType<typeof zodAsFactory<GenericPayloadDivinerConfigBase>> = zodAsFactory(GenericPayloadDivinerConfigZod, 'asGenericPayloadDivinerConfig')\nexport const toGenericPayloadDivinerConfig: ReturnType<typeof zodToFactory<GenericPayloadDivinerConfigBase>> = zodToFactory(GenericPayloadDivinerConfigZod, 'toGenericPayloadDivinerConfig')\n\nexport type GenericPayloadDivinerConfig = PayloadDivinerConfig<\n {\n indexes?: string[]\n },\n GenericPayloadDivinerConfigSchema\n>\n\n@creatableModule()\nexport class GenericPayloadDiviner<\n TParams extends PayloadDivinerParams<GenericPayloadDivinerConfig> = PayloadDivinerParams<GenericPayloadDivinerConfig>,\n TIn extends PayloadDivinerQueryPayload = PayloadDivinerQueryPayload,\n TOut extends WithStorageMeta<Payload> = WithStorageMeta<Payload>,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends PayloadDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, GenericPayloadDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = GenericPayloadDivinerConfigSchema\n\n protected indexMaps: Record<string, WithStorageMeta<TOut>[]> = {}\n protected payloadsWithMeta: WithStorageMeta<TOut>[] = []\n\n private _archivistInstance?: ArchivistInstance\n private _cursor?: Sequence\n private _updatePayloadPairsMutex = new Mutex()\n\n protected get indexBatchSize(): number {\n return this.config.indexBatchSize ?? DEFAULT_INDEX_BATCH_SIZE\n }\n\n protected get indexes(): string[] {\n return ['schema', ...(this.config.indexes ?? [])]\n }\n\n protected get maxIndexSize(): number {\n return this.config.maxIndexSize ?? DEFAULT_MAX_INDEX_SIZE\n }\n\n protected all(order: Order = 'desc', cursor?: Hex): WithStorageMeta<TOut>[] {\n const payloads = this.payloadsWithMeta.toSorted(PayloadBuilder.compareStorageMeta)\n if (order === 'desc') payloads.reverse()\n const startIndex = (cursor ? (payloads.findIndex(payload => payload._sequence === cursor) ?? -1) : -1) + 1\n return payloads.slice(startIndex)\n }\n\n protected override async archivistInstance(): Promise<ArchivistInstance | undefined>\n protected override async archivistInstance(required: true): Promise<ArchivistInstance>\n protected override async archivistInstance(required = false): Promise<ArchivistInstance | undefined> {\n if (!this._archivistInstance) {\n const archivist = await super.archivistInstance()\n if (required && !archivist) {\n throw new Error('Failed to find archivist')\n }\n archivist?.on('inserted', this.onArchivistInserted)\n archivist?.on('cleared', this.onArchivistCleared)\n archivist?.on('deleted', this.onArchivistDeleted)\n this._archivistInstance = archivist\n }\n return this._archivistInstance\n }\n\n protected async clearIndex(): Promise<void> {\n await this._updatePayloadPairsMutex.runExclusive(() => {\n this._cursor = undefined\n this.payloadsWithMeta = []\n this.indexMaps = {}\n })\n }\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const filters = filterAs(payloads ?? [], asPayloadDivinerQueryPayload)\n assertEx(filters.length < 2, () => 'Multiple PayloadDivinerQuery payloads may not be specified')\n const filter = assertEx(filters.shift(), () => 'No PayloadDivinerQuery specified')\n await this.updateIndex()\n\n const {\n\n schema, schemas, order, limit, cursor, ...props\n } = filter\n let all: TOut[] = this.all(order, cursor)\n if (all) {\n if (schemas?.length) all = all.filter(payload => schemas.includes(payload.schema))\n if (Object.keys(props).length > 0) {\n const additionalFilterCriteria = Object.entries(props)\n for (const [prop, filter] of additionalFilterCriteria) {\n const property = prop as keyof TOut\n all\n = Array.isArray(filter)\n ? all.filter(payload =>\n filter.every((value) => {\n const prop = payload?.[property]\n // TODO: This seems to be written just to check arrays, and now that $meta is there, need to check type?\n return Array.isArray(prop) && prop.includes?.(value)\n }))\n : all.filter(payload => payload?.[property] === filter)\n }\n }\n return limit ? all.slice(0, limit) : all\n }\n throw new Error('Archivist does not support \"all\"')\n }\n\n protected onArchivistCleared: EventListener<ArchivistModuleEventData['cleared']> = () => {\n forget(\n (async () => {\n await this.clearIndex()\n await this.updateIndex()\n })(),\n )\n }\n\n // we are just rebuilding the entire index at this point on delete since large archivists do not support delete\n protected onArchivistDeleted: EventListener<ArchivistModuleEventData['deleted']> = () => {\n forget(\n (async () => {\n await this.clearIndex()\n await this.updateIndex()\n })(),\n )\n }\n\n protected onArchivistInserted: EventListener<ArchivistModuleEventData['inserted']> = () => {\n forget(this.updateIndex())\n }\n\n protected override async stopHandler(_timeout?: number): Promise<void> {\n await super.stopHandler()\n const archivist = await this.archivistInstance(true)\n archivist.off('inserted', this.onArchivistInserted)\n archivist.off('deleted', this.onArchivistDeleted)\n archivist.off('cleared', this.onArchivistCleared)\n }\n\n // index any new payloads\n protected async updateIndex(): Promise<void> {\n await this._updatePayloadPairsMutex.runExclusive(async () => {\n const archivist = await this.archivistInstance(true)\n let newPayloads = await archivist.next({ limit: 100, cursor: this._cursor }) as TOut[]\n while (newPayloads.length > 0) {\n this._cursor = newPayloads.at(-1)?._sequence\n assertEx(this.payloadsWithMeta.length + newPayloads.length <= this.maxIndexSize, () => 'maxIndexSize exceeded')\n this.indexPayloads(newPayloads)\n newPayloads = await archivist.next({ limit: 100, cursor: this._cursor }) as TOut[]\n }\n })\n }\n\n private indexPayloads(payloads: WithStorageMeta<TOut>[]): Hex {\n this.payloadsWithMeta.push(...payloads)\n\n // update the custom indexes\n for (const index of this.indexes ?? []) {\n this.indexMaps[index] = this.indexMaps[index] ?? []\n for (const payload of payloads) {\n this.indexMaps[index].push(payload)\n }\n }\n return assertEx(payloads.at(-1), () => 'No payloads to index')._sequence\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { EventListener, Hex } from '@ariestools/sdk'\nimport {\n assertEx, filterAs, forget,\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport { PayloadBuilder } from '@xyo-network/sdk-protocol'\nimport {\n asSchema,\n type Payload, type Schema,\n type Sequence,\n type WithStorageMeta,\n} from '@xyo-network/sdk-protocol'\nimport { Mutex } from 'async-mutex'\nimport * as z from 'zod/mini'\n\nimport type { ArchivistInstance, ArchivistModuleEventData } from '#archivist-model'\nimport type { DivinerInstance, DivinerModuleEventData } from '#diviner-model'\nimport { PayloadDiviner } from '#diviner-payload-abstract'\nimport type {\n Order,\n PayloadDivinerConfig,\n PayloadDivinerParams,\n PayloadDivinerQueryPayload,\n} from '#diviner-payload-model'\nimport { asPayloadDivinerQueryPayload, PayloadDivinerConfigZod } from '#diviner-payload-model'\nimport { creatableModule } from '#module-model'\n\nconst DEFAULT_INDEX_BATCH_SIZE = 100 as const\nconst DEFAULT_MAX_INDEX_SIZE = 8000 as const\n\nexport const GenericPayloadDivinerConfigSchema: 'network.xyo.diviner.payload.generic.config' & {\n readonly __schema: true\n} = asSchema('network.xyo.diviner.payload.generic.config', true)\nexport type GenericPayloadDivinerConfigSchema = typeof GenericPayloadDivinerConfigSchema\n\nexport const GenericPayloadDivinerConfigZod: z.ZodMiniObject<\n Omit<(typeof PayloadDivinerConfigZod)['shape'], 'schema'> & {\n indexes: z.ZodMiniOptional<z.ZodMiniArray<z.ZodMiniString<string>>>\n schema: z.ZodMiniLiteral<GenericPayloadDivinerConfigSchema>\n },\n z.core.$strip\n> = z.extend(PayloadDivinerConfigZod, {\n indexes: z.optional(z.array(z.string())),\n schema: z.literal(GenericPayloadDivinerConfigSchema),\n})\n\nexport type GenericPayloadDivinerConfigBase = z.infer<typeof GenericPayloadDivinerConfigZod>\n\nexport const isGenericPayloadDivinerConfig: ReturnType<typeof zodIsFactory<GenericPayloadDivinerConfigBase>> = zodIsFactory(GenericPayloadDivinerConfigZod)\nexport const asGenericPayloadDivinerConfig: ReturnType<typeof zodAsFactory<GenericPayloadDivinerConfigBase>> = zodAsFactory(GenericPayloadDivinerConfigZod, 'asGenericPayloadDivinerConfig')\nexport const toGenericPayloadDivinerConfig: ReturnType<typeof zodToFactory<GenericPayloadDivinerConfigBase>> = zodToFactory(GenericPayloadDivinerConfigZod, 'toGenericPayloadDivinerConfig')\n\nexport type GenericPayloadDivinerConfig = PayloadDivinerConfig<\n {\n indexes?: string[]\n },\n GenericPayloadDivinerConfigSchema\n>\n\n@creatableModule()\nexport class GenericPayloadDiviner<\n TParams extends PayloadDivinerParams<GenericPayloadDivinerConfig> = PayloadDivinerParams<GenericPayloadDivinerConfig>,\n TIn extends PayloadDivinerQueryPayload = PayloadDivinerQueryPayload,\n TOut extends WithStorageMeta<Payload> = WithStorageMeta<Payload>,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends PayloadDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, GenericPayloadDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = GenericPayloadDivinerConfigSchema\n\n protected indexMaps: Record<string, WithStorageMeta<TOut>[]> = {}\n protected payloadsWithMeta: WithStorageMeta<TOut>[] = []\n\n private _archivistInstance?: ArchivistInstance\n private _cursor?: Sequence\n private _updatePayloadPairsMutex = new Mutex()\n\n protected get indexBatchSize(): number {\n return this.config.indexBatchSize ?? DEFAULT_INDEX_BATCH_SIZE\n }\n\n protected get indexes(): string[] {\n return ['schema', ...(this.config.indexes ?? [])]\n }\n\n protected get maxIndexSize(): number {\n return this.config.maxIndexSize ?? DEFAULT_MAX_INDEX_SIZE\n }\n\n protected all(order: Order = 'desc', cursor?: Hex): WithStorageMeta<TOut>[] {\n const payloads = this.payloadsWithMeta.toSorted(PayloadBuilder.compareStorageMeta)\n if (order === 'desc') payloads.reverse()\n const startIndex = (cursor ? (payloads.findIndex(payload => payload._sequence === cursor) ?? -1) : -1) + 1\n return payloads.slice(startIndex)\n }\n\n protected override async archivistInstance(): Promise<ArchivistInstance | undefined>\n protected override async archivistInstance(required: true): Promise<ArchivistInstance>\n protected override async archivistInstance(required = false): Promise<ArchivistInstance | undefined> {\n if (!this._archivistInstance) {\n const archivist = await super.archivistInstance()\n if (required && !archivist) {\n throw new Error('Failed to find archivist')\n }\n archivist?.on('inserted', this.onArchivistInserted)\n archivist?.on('cleared', this.onArchivistCleared)\n archivist?.on('deleted', this.onArchivistDeleted)\n this._archivistInstance = archivist\n }\n return this._archivistInstance\n }\n\n protected async clearIndex(): Promise<void> {\n await this._updatePayloadPairsMutex.runExclusive(() => {\n this._cursor = undefined\n this.payloadsWithMeta = []\n this.indexMaps = {}\n })\n }\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const filters = filterAs(payloads ?? [], asPayloadDivinerQueryPayload)\n assertEx(filters.length < 2, () => 'Multiple PayloadDivinerQuery payloads may not be specified')\n const filter = assertEx(filters.shift(), () => 'No PayloadDivinerQuery specified')\n await this.updateIndex()\n\n const {\n\n schema, schemas, order, limit, cursor, ...props\n } = filter\n let all: TOut[] = this.all(order, cursor)\n if (schemas !== undefined && schemas.length > 0) all = all.filter(payload => schemas.includes(payload.schema))\n if (Object.keys(props).length > 0) {\n const additionalFilterCriteria = Object.entries(props)\n for (const [prop, filter] of additionalFilterCriteria) {\n const property = prop as keyof TOut\n all\n = Array.isArray(filter)\n ? all.filter(payload =>\n filter.every((value) => {\n const prop = payload?.[property]\n // TODO: This seems to be written just to check arrays, and now that $meta is there, need to check type?\n return Array.isArray(prop) && prop.includes?.(value)\n }))\n : all.filter(payload => payload?.[property] === filter)\n }\n }\n return limit !== undefined && limit !== 0 ? all.slice(0, limit) : all\n }\n\n protected onArchivistCleared: EventListener<ArchivistModuleEventData['cleared']> = () => {\n forget(\n (async () => {\n await this.clearIndex()\n await this.updateIndex()\n })(),\n )\n }\n\n // we are just rebuilding the entire index at this point on delete since large archivists do not support delete\n protected onArchivistDeleted: EventListener<ArchivistModuleEventData['deleted']> = () => {\n forget(\n (async () => {\n await this.clearIndex()\n await this.updateIndex()\n })(),\n )\n }\n\n protected onArchivistInserted: EventListener<ArchivistModuleEventData['inserted']> = () => {\n forget(this.updateIndex())\n }\n\n protected override async stopHandler(_timeout?: number): Promise<void> {\n await super.stopHandler()\n const archivist = await this.archivistInstance(true)\n archivist.off('inserted', this.onArchivistInserted)\n archivist.off('deleted', this.onArchivistDeleted)\n archivist.off('cleared', this.onArchivistCleared)\n }\n\n // index any new payloads\n protected async updateIndex(): Promise<void> {\n await this._updatePayloadPairsMutex.runExclusive(async () => {\n const archivist = await this.archivistInstance(true)\n let newPayloads = await archivist.next({ limit: 100, cursor: this._cursor }) as TOut[]\n while (newPayloads.length > 0) {\n this._cursor = newPayloads.at(-1)?._sequence\n assertEx(this.payloadsWithMeta.length + newPayloads.length <= this.maxIndexSize, () => 'maxIndexSize exceeded')\n this.indexPayloads(newPayloads)\n newPayloads = await archivist.next({ limit: 100, cursor: this._cursor }) as TOut[]\n }\n })\n }\n\n private indexPayloads(payloads: WithStorageMeta<TOut>[]): Hex {\n this.payloadsWithMeta.push(...payloads)\n\n // update the custom indexes\n const indexes = this.indexes ?? []\n for (const index of indexes) {\n this.indexMaps[index] ??= []\n for (const payload of payloads) {\n this.indexMaps[index].push(payload)\n }\n }\n return assertEx(payloads.at(-1), () => 'No payloads to index')._sequence\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["filter", "prop"]
7
7
  }
@@ -40,8 +40,9 @@ var ManifestWrapper = class extends PayloadWrapper {
40
40
  await node.register(childNode);
41
41
  await node.attach(childNode.address, external);
42
42
  } else {
43
+ const registeredModule = await this.registerModule(wallet, node, manifest);
43
44
  assertEx(
44
- await node.attach((await this.registerModule(wallet, node, manifest)).address, external),
45
+ await node.attach(registeredModule.address, external),
45
46
  () => `No module with config schema [${manifest.config.name}] registered`
46
47
  );
47
48
  }
@@ -165,8 +166,9 @@ var ManifestWrapperEx = class extends PayloadWrapper2 {
165
166
  if (node.registeredModules().some((mod) => isString2(mod.config.name) && mod.config.name === manifest.config.name)) {
166
167
  assertEx2(await node.attach(manifest.config.name, external), () => `Failed to attach module [${manifest.config.name}]`);
167
168
  } else {
169
+ const registeredModule = await this.registerModule(wallet, node, manifest);
168
170
  assertEx2(
169
- await node.attach((await this.registerModule(wallet, node, manifest)).address, external),
171
+ await node.attach(registeredModule.address, external),
170
172
  () => `No module with config schema [${manifest.config.name}] registered`
171
173
  );
172
174
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/modules/manifest-wrapper/Wrapper.ts", "../../src/modules/manifest-wrapper/WrapperEx.ts"],
4
- "sourcesContent": ["import type { CreatableName, Logger } from '@ariestools/sdk'\nimport {\n assertEx, isDefined, isString,\n} from '@ariestools/sdk'\nimport type {\n ModuleManifest, NodeManifest, PackageManifestPayload, WalletInstance,\n WithAnySchema,\n} from '@xyo-network/sdk-protocol'\nimport { HDWallet, PayloadWrapper } from '@xyo-network/sdk-protocol'\n\nimport type {\n ModuleFactoryLocatorInstance,\n ModuleIdentifierTransformer, ModuleInstance, QueryableModuleParams,\n} from '#module-model'\nimport { isModuleName } from '#module-model'\nimport { MemoryNode } from '#node-memory'\nimport type { NodeInstance } from '#node-model'\n\n/** Provides functionality that can be performed on a PackageManifest */\nexport class ManifestWrapper<TManifest extends WithAnySchema<PackageManifestPayload> | void = void> extends PayloadWrapper<\n TManifest extends WithAnySchema<PackageManifestPayload> ? TManifest : WithAnySchema<PackageManifestPayload>\n> {\n protected readonly locator: ModuleFactoryLocatorInstance\n protected readonly logger: Logger | undefined\n protected readonly moduleIdentifierTransformers: ModuleIdentifierTransformer[] | undefined\n protected readonly privateChildren: ModuleManifest[]\n protected readonly publicChildren: ModuleManifest[]\n protected readonly wallet: WalletInstance\n\n constructor(\n payload: TManifest extends WithAnySchema<PackageManifestPayload> ? TManifest : WithAnySchema<PackageManifestPayload>,\n wallet: WalletInstance,\n locator: ModuleFactoryLocatorInstance,\n publicChildren: ModuleManifest[] = [],\n privateChildren: ModuleManifest[] = [],\n moduleIdentifierTransformers?: ModuleIdentifierTransformer[],\n logger?: Logger,\n ) {\n super(payload)\n this.wallet = wallet\n this.locator = locator\n this.publicChildren = publicChildren\n this.privateChildren = privateChildren\n this.moduleIdentifierTransformers = moduleIdentifierTransformers\n this.logger = logger\n }\n\n async loadModule(wallet: WalletInstance, node: MemoryNode, manifest: ModuleManifest, external = true): Promise<void> {\n this.logger?.log('loadModule', manifest.config.name)\n const collision = async (node: NodeInstance, name: string, external: boolean) => {\n const externalConflict = external ? (await node.resolve(name, { direction: external ? 'all' : 'down' })) !== undefined : false\n return externalConflict || (await node.resolve(name, { direction: 'down' })) !== undefined\n }\n\n assertEx(isModuleName(manifest.config.name), () => `Invalid Module Name: ${manifest.config.name}`)\n assertEx(!(await collision(node, manifest.config.name, external)), () => `Node name collision [${manifest.config.name}]`)\n\n if (!(await collision(node, manifest.config.name, external))) {\n // is it already registered?\n if (node.registeredModules().some(mod => isDefined(mod.config.name) && mod.config.name === manifest.config.name)) {\n assertEx(await node.attach(manifest.config.name, external), () => `Failed to attach module [${manifest.config.name}]`)\n } else {\n if ((manifest as NodeManifest).modules) {\n const childNode = await this.loadNodeFromManifest(wallet, manifest, manifest.config.accountPath, false)\n await node.register(childNode)\n await node.attach(childNode.address, external)\n } else {\n assertEx(\n await node.attach((await this.registerModule(wallet, node, manifest)).address, external),\n () => `No module with config schema [${manifest.config.name}] registered`,\n )\n }\n }\n }\n }\n\n // These are top level, so they can use this.wallet as their\n async loadNodeFromIndex(index: number): Promise<MemoryNode> {\n const manifest = assertEx(this.nodeManifest(index), () => 'Failed to find Node Manifest')\n return await this.loadNodeFromManifest(this.wallet, manifest, manifest.config.accountPath ?? `${index}'`)\n }\n\n async loadNodeFromManifest(wallet: WalletInstance, manifest: NodeManifest, path?: string, loadConfigChildren = false): Promise<MemoryNode> {\n this.logger?.log('loadNodeFromManifest', manifest.config.name)\n const derivedWallet = isString(path) ? await wallet.derivePath(path) : await HDWallet.random()\n const node = await MemoryNode.create({\n account: derivedWallet, config: manifest.config, name: manifest.config.name as CreatableName,\n })\n // Load Private Modules\n const privateModules\n = manifest.modules?.private?.map(async (moduleManifest) => {\n if (typeof moduleManifest === 'object') {\n await this.loadModule(derivedWallet, node, moduleManifest, false)\n }\n }) ?? []\n // Load Public Modules\n const publicModules\n = manifest.modules?.public?.map(async (moduleManifest) => {\n if (typeof moduleManifest === 'object') {\n await this.loadModule(derivedWallet, node, moduleManifest, true)\n }\n }) ?? []\n await Promise.all([...privateModules, ...publicModules])\n\n if (loadConfigChildren) {\n await Promise.all(\n this.privateChildren.map(async (moduleManifest) => {\n if (typeof moduleManifest === 'object') {\n await this.loadModule(derivedWallet, node, moduleManifest, false)\n }\n }),\n )\n\n await Promise.all(\n this.publicChildren.map(async (moduleManifest) => {\n if (typeof moduleManifest === 'object') {\n await this.loadModule(derivedWallet, node, moduleManifest, true)\n }\n }),\n )\n }\n\n return node\n }\n\n /**\n * Load the nodes that are defined in the wrapped manifest and optionally attach them to a node\n */\n async loadNodes(node?: MemoryNode): Promise<MemoryNode[]> {\n return await Promise.all(\n this.payload.nodes?.map(async (nodeManifest, index) => {\n const subNode = await this.loadNodeFromManifest(this.wallet, nodeManifest as NodeManifest, nodeManifest.config.accountPath ?? `${index}'`, index === 0)\n await node?.register(subNode)\n return subNode\n }),\n )\n }\n\n nodeManifest(index: number): NodeManifest | undefined {\n return this.payload.nodes?.[index] as NodeManifest | undefined\n }\n\n /** Register a module on a node based on a manifest */\n private async registerModule(wallet: WalletInstance, node: MemoryNode, manifest: ModuleManifest): Promise<ModuleInstance> {\n const creatableModule = this.locator.locate(manifest.config.schema, manifest.config.labels)\n const path = manifest.config.accountPath\n const account = isString(path) ? await wallet.derivePath(path) : 'random'\n const params: QueryableModuleParams = {\n name: manifest.config.name as CreatableName,\n account,\n config: assertEx(manifest.config, () => 'Missing config'),\n }\n if (this.moduleIdentifierTransformers) {\n params.moduleIdentifierTransformers = this.moduleIdentifierTransformers\n }\n const mod = await creatableModule.create(params)\n await node.register(mod)\n return mod\n }\n}\n", "import type { CreatableName } from '@ariestools/sdk'\nimport {\n assertEx, isArray, isString,\n} from '@ariestools/sdk'\nimport type {\n ModuleManifest, NodeManifest, PackageManifestPayload, WalletInstance,\n WithAnySchema,\n} from '@xyo-network/sdk-protocol'\nimport { HDWallet, PayloadWrapper } from '@xyo-network/sdk-protocol'\n\nimport type {\n ModuleFactoryLocatorInstance,\n ModuleIdentifierTransformer, ModuleInstance, QueryableModuleParams,\n} from '#module-model'\nimport { isModuleName } from '#module-model'\nimport { MemoryNode } from '#node-memory'\nimport type { NodeInstance } from '#node-model'\n\nexport interface ManifestWrapperExParams {\n locator: ModuleFactoryLocatorInstance\n moduleIdentifierTransformers?: ModuleIdentifierTransformer[]\n privateChildren?: ModuleManifest[]\n publicChildren?: ModuleManifest[]\n wallet: WalletInstance\n}\n\n/** Provides functionality that can be performed on a PackageManifest */\nexport class ManifestWrapperEx<\n TManifest extends WithAnySchema<PackageManifestPayload> | void,\n TParams extends ManifestWrapperExParams = ManifestWrapperExParams,\n> extends PayloadWrapper<TManifest extends WithAnySchema<PackageManifestPayload> ? TManifest : WithAnySchema<PackageManifestPayload>> {\n protected params: TParams\n constructor(\n payload: TManifest extends WithAnySchema<PackageManifestPayload> ? TManifest : WithAnySchema<PackageManifestPayload>,\n params: TParams,\n ) {\n super(payload)\n this.params = params\n }\n\n get locator(): ModuleFactoryLocatorInstance {\n return this.params.locator\n }\n\n get moduleIdentifierTransformers(): ModuleIdentifierTransformer[] {\n return this.params.moduleIdentifierTransformers ?? []\n }\n\n get privateChildren(): ModuleManifest[] {\n return this.params.privateChildren ?? []\n }\n\n get publicChildren(): ModuleManifest[] {\n return this.params.publicChildren ?? []\n }\n\n get wallet(): WalletInstance {\n return this.params.wallet\n }\n\n async loadModule(wallet: WalletInstance, node: MemoryNode, manifest: ModuleManifest, external = true): Promise<void> {\n const collision = async (node: NodeInstance, name: string, external: boolean) => {\n const externalConflict = external ? (await node.resolve(name, { direction: external ? 'all' : 'down' })) !== undefined : false\n return externalConflict || (await node.resolve(name, { direction: 'down' })) !== undefined\n }\n\n assertEx(isModuleName(manifest.config.name), () => `Invalid Module Name: ${manifest.config.name}`)\n assertEx(!(await collision(node, manifest.config.name, external)), () => `Node name collision [${manifest.config.name}]`)\n\n if (!(await collision(node, manifest.config.name, external))) {\n // is it already registered?\n if (node.registeredModules().some(mod => isString(mod.config.name) && mod.config.name === manifest.config.name)) {\n assertEx(await node.attach(manifest.config.name, external), () => `Failed to attach module [${manifest.config.name}]`)\n } else {\n assertEx(\n await node.attach((await this.registerModule(wallet, node, manifest)).address, external),\n () => `No module with config schema [${manifest.config.name}] registered`,\n )\n }\n }\n }\n\n // These are top level, so they can use this.wallet as their\n async loadNodeFromIndex(index: number): Promise<MemoryNode> {\n const manifest = assertEx(this.nodeManifest(index), () => 'Failed to find Node Manifest')\n return await this.loadNodeFromManifest(this.wallet, manifest, manifest.config.accountPath ?? `${index}'`)\n }\n\n async loadNodeFromManifest(wallet: WalletInstance, manifest: NodeManifest, path?: string): Promise<MemoryNode> {\n const derivedWallet = isString(path) ? await wallet.derivePath(path) : await HDWallet.random()\n const node = await MemoryNode.create({ account: derivedWallet, config: manifest.config })\n // Load Private Modules\n const privateModules\n = manifest.modules?.private?.map(async (moduleManifest) => {\n if (typeof moduleManifest === 'object') {\n await this.loadModule(derivedWallet, node, moduleManifest, false)\n }\n }) ?? []\n // Load Public Modules\n const publicModules\n = manifest.modules?.public?.map(async (moduleManifest) => {\n if (typeof moduleManifest === 'object') {\n await this.loadModule(derivedWallet, node, moduleManifest, true)\n }\n }) ?? []\n await Promise.all([...privateModules, ...publicModules])\n\n await Promise.all(\n this.privateChildren.map(async (moduleManifest) => {\n if (typeof moduleManifest === 'object') {\n await this.loadModule(derivedWallet, node, moduleManifest, false)\n }\n }),\n )\n\n await Promise.all(\n this.publicChildren.map(async (moduleManifest) => {\n if (typeof moduleManifest === 'object') {\n await this.loadModule(derivedWallet, node, moduleManifest, true)\n }\n }),\n )\n\n return node\n }\n\n /**\n * Load the nodes that are defined in the wrapped manifest and optionally attach them to a node\n */\n async loadNodes(node?: MemoryNode): Promise<MemoryNode[]> {\n return await Promise.all(\n this.payload.nodes?.map(async (nodeManifest, index) => {\n const subNode = await this.loadNodeFromManifest(this.wallet, nodeManifest as NodeManifest, nodeManifest.config.accountPath ?? `${index}'`)\n await node?.register(subNode)\n return subNode\n }),\n )\n }\n\n nodeManifest(index: number): NodeManifest | undefined {\n return this.payload.nodes?.[index] as NodeManifest | undefined\n }\n\n /** Register a module on a node based on a manifest */\n private async registerModule(wallet: WalletInstance, node: MemoryNode, manifest: ModuleManifest): Promise<ModuleInstance> {\n const creatableModule = this.locator.locate(manifest.config.schema, manifest.config.labels)\n const path = manifest.config.accountPath\n const account = isString(path) ? await wallet.derivePath(path) : 'random'\n const params: QueryableModuleParams = {\n name: manifest.config.name as CreatableName,\n account,\n config: assertEx(manifest.config, () => 'Missing config'),\n }\n if (isArray(this.moduleIdentifierTransformers)) {\n params.moduleIdentifierTransformers = this.moduleIdentifierTransformers\n }\n const mod = await creatableModule.create(params)\n await node.register(mod)\n return mod\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { CreatableName, Logger } from '@ariestools/sdk'\nimport {\n assertEx, isDefined, isString,\n} from '@ariestools/sdk'\nimport type {\n ModuleManifest, NodeManifest, PackageManifestPayload, WalletInstance,\n WithAnySchema,\n} from '@xyo-network/sdk-protocol'\nimport { HDWallet, PayloadWrapper } from '@xyo-network/sdk-protocol'\n\nimport type {\n ModuleFactoryLocatorInstance,\n ModuleIdentifierTransformer, ModuleInstance, QueryableModuleParams,\n} from '#module-model'\nimport { isModuleName } from '#module-model'\nimport { MemoryNode } from '#node-memory'\nimport type { NodeInstance } from '#node-model'\n\n/** Provides functionality that can be performed on a PackageManifest */\nexport class ManifestWrapper<TManifest extends WithAnySchema<PackageManifestPayload> | void = void> extends PayloadWrapper<\n TManifest extends WithAnySchema<PackageManifestPayload> ? TManifest : WithAnySchema<PackageManifestPayload>\n> {\n protected readonly locator: ModuleFactoryLocatorInstance\n protected readonly logger: Logger | undefined\n protected readonly moduleIdentifierTransformers: ModuleIdentifierTransformer[] | undefined\n protected readonly privateChildren: ModuleManifest[]\n protected readonly publicChildren: ModuleManifest[]\n protected readonly wallet: WalletInstance\n\n constructor(\n payload: TManifest extends WithAnySchema<PackageManifestPayload> ? TManifest : WithAnySchema<PackageManifestPayload>,\n wallet: WalletInstance,\n locator: ModuleFactoryLocatorInstance,\n publicChildren: ModuleManifest[] = [],\n privateChildren: ModuleManifest[] = [],\n moduleIdentifierTransformers?: ModuleIdentifierTransformer[],\n logger?: Logger,\n ) {\n super(payload)\n this.wallet = wallet\n this.locator = locator\n this.publicChildren = publicChildren\n this.privateChildren = privateChildren\n this.moduleIdentifierTransformers = moduleIdentifierTransformers\n this.logger = logger\n }\n\n async loadModule(wallet: WalletInstance, node: MemoryNode, manifest: ModuleManifest, external = true): Promise<void> {\n this.logger?.log('loadModule', manifest.config.name)\n const collision = async (node: NodeInstance, name: string, external: boolean) => {\n const externalConflict = external ? (await node.resolve(name, { direction: external ? 'all' : 'down' })) !== undefined : false\n return externalConflict || (await node.resolve(name, { direction: 'down' })) !== undefined\n }\n\n assertEx(isModuleName(manifest.config.name), () => `Invalid Module Name: ${manifest.config.name}`)\n assertEx(!(await collision(node, manifest.config.name, external)), () => `Node name collision [${manifest.config.name}]`)\n\n if (!(await collision(node, manifest.config.name, external))) {\n // is it already registered?\n if (node.registeredModules().some(mod => isDefined(mod.config.name) && mod.config.name === manifest.config.name)) {\n assertEx(await node.attach(manifest.config.name, external), () => `Failed to attach module [${manifest.config.name}]`)\n } else {\n if ((manifest as NodeManifest).modules) {\n const childNode = await this.loadNodeFromManifest(wallet, manifest, manifest.config.accountPath, false)\n await node.register(childNode)\n await node.attach(childNode.address, external)\n } else {\n const registeredModule = await this.registerModule(wallet, node, manifest)\n assertEx(\n await node.attach(registeredModule.address, external),\n () => `No module with config schema [${manifest.config.name}] registered`,\n )\n }\n }\n }\n }\n\n // These are top level, so they can use this.wallet as their\n async loadNodeFromIndex(index: number): Promise<MemoryNode> {\n const manifest = assertEx(this.nodeManifest(index), () => 'Failed to find Node Manifest')\n return await this.loadNodeFromManifest(this.wallet, manifest, manifest.config.accountPath ?? `${index}'`)\n }\n\n async loadNodeFromManifest(wallet: WalletInstance, manifest: NodeManifest, path?: string, loadConfigChildren = false): Promise<MemoryNode> {\n this.logger?.log('loadNodeFromManifest', manifest.config.name)\n const derivedWallet = isString(path) ? await wallet.derivePath(path) : await HDWallet.random()\n const node = await MemoryNode.create({\n account: derivedWallet, config: manifest.config, name: manifest.config.name as CreatableName,\n })\n // Load Private Modules\n const privateModules\n = manifest.modules?.private?.map(async (moduleManifest) => {\n if (typeof moduleManifest === 'object') {\n await this.loadModule(derivedWallet, node, moduleManifest, false)\n }\n }) ?? []\n // Load Public Modules\n const publicModules\n = manifest.modules?.public?.map(async (moduleManifest) => {\n if (typeof moduleManifest === 'object') {\n await this.loadModule(derivedWallet, node, moduleManifest, true)\n }\n }) ?? []\n await Promise.all([...privateModules, ...publicModules])\n\n if (loadConfigChildren) {\n await Promise.all(\n this.privateChildren.map(async (moduleManifest) => {\n if (typeof moduleManifest === 'object') {\n await this.loadModule(derivedWallet, node, moduleManifest, false)\n }\n }),\n )\n\n await Promise.all(\n this.publicChildren.map(async (moduleManifest) => {\n if (typeof moduleManifest === 'object') {\n await this.loadModule(derivedWallet, node, moduleManifest, true)\n }\n }),\n )\n }\n\n return node\n }\n\n /**\n * Load the nodes that are defined in the wrapped manifest and optionally attach them to a node\n */\n async loadNodes(node?: MemoryNode): Promise<MemoryNode[]> {\n return await Promise.all(\n this.payload.nodes?.map(async (nodeManifest, index) => {\n const subNode = await this.loadNodeFromManifest(this.wallet, nodeManifest as NodeManifest, nodeManifest.config.accountPath ?? `${index}'`, index === 0)\n await node?.register(subNode)\n return subNode\n }),\n )\n }\n\n nodeManifest(index: number): NodeManifest | undefined {\n return this.payload.nodes?.[index] as NodeManifest | undefined\n }\n\n /** Register a module on a node based on a manifest */\n private async registerModule(wallet: WalletInstance, node: MemoryNode, manifest: ModuleManifest): Promise<ModuleInstance> {\n const creatableModule = this.locator.locate(manifest.config.schema, manifest.config.labels)\n const path = manifest.config.accountPath\n const account = isString(path) ? await wallet.derivePath(path) : 'random'\n const params: QueryableModuleParams = {\n name: manifest.config.name as CreatableName,\n account,\n config: assertEx(manifest.config, () => 'Missing config'),\n }\n if (this.moduleIdentifierTransformers) {\n params.moduleIdentifierTransformers = this.moduleIdentifierTransformers\n }\n const mod = await creatableModule.create(params)\n await node.register(mod)\n return mod\n }\n}\n", "import type { CreatableName } from '@ariestools/sdk'\nimport {\n assertEx, isArray, isString,\n} from '@ariestools/sdk'\nimport type {\n ModuleManifest, NodeManifest, PackageManifestPayload, WalletInstance,\n WithAnySchema,\n} from '@xyo-network/sdk-protocol'\nimport { HDWallet, PayloadWrapper } from '@xyo-network/sdk-protocol'\n\nimport type {\n ModuleFactoryLocatorInstance,\n ModuleIdentifierTransformer, ModuleInstance, QueryableModuleParams,\n} from '#module-model'\nimport { isModuleName } from '#module-model'\nimport { MemoryNode } from '#node-memory'\nimport type { NodeInstance } from '#node-model'\n\nexport interface ManifestWrapperExParams {\n locator: ModuleFactoryLocatorInstance\n moduleIdentifierTransformers?: ModuleIdentifierTransformer[]\n privateChildren?: ModuleManifest[]\n publicChildren?: ModuleManifest[]\n wallet: WalletInstance\n}\n\n/** Provides functionality that can be performed on a PackageManifest */\nexport class ManifestWrapperEx<\n TManifest extends WithAnySchema<PackageManifestPayload> | void,\n TParams extends ManifestWrapperExParams = ManifestWrapperExParams,\n> extends PayloadWrapper<TManifest extends WithAnySchema<PackageManifestPayload> ? TManifest : WithAnySchema<PackageManifestPayload>> {\n protected params: TParams\n constructor(\n payload: TManifest extends WithAnySchema<PackageManifestPayload> ? TManifest : WithAnySchema<PackageManifestPayload>,\n params: TParams,\n ) {\n super(payload)\n this.params = params\n }\n\n get locator(): ModuleFactoryLocatorInstance {\n return this.params.locator\n }\n\n get moduleIdentifierTransformers(): ModuleIdentifierTransformer[] {\n return this.params.moduleIdentifierTransformers ?? []\n }\n\n get privateChildren(): ModuleManifest[] {\n return this.params.privateChildren ?? []\n }\n\n get publicChildren(): ModuleManifest[] {\n return this.params.publicChildren ?? []\n }\n\n get wallet(): WalletInstance {\n return this.params.wallet\n }\n\n async loadModule(wallet: WalletInstance, node: MemoryNode, manifest: ModuleManifest, external = true): Promise<void> {\n const collision = async (node: NodeInstance, name: string, external: boolean) => {\n const externalConflict = external ? (await node.resolve(name, { direction: external ? 'all' : 'down' })) !== undefined : false\n return externalConflict || (await node.resolve(name, { direction: 'down' })) !== undefined\n }\n\n assertEx(isModuleName(manifest.config.name), () => `Invalid Module Name: ${manifest.config.name}`)\n assertEx(!(await collision(node, manifest.config.name, external)), () => `Node name collision [${manifest.config.name}]`)\n\n if (!(await collision(node, manifest.config.name, external))) {\n // is it already registered?\n if (node.registeredModules().some(mod => isString(mod.config.name) && mod.config.name === manifest.config.name)) {\n assertEx(await node.attach(manifest.config.name, external), () => `Failed to attach module [${manifest.config.name}]`)\n } else {\n const registeredModule = await this.registerModule(wallet, node, manifest)\n assertEx(\n await node.attach(registeredModule.address, external),\n () => `No module with config schema [${manifest.config.name}] registered`,\n )\n }\n }\n }\n\n // These are top level, so they can use this.wallet as their\n async loadNodeFromIndex(index: number): Promise<MemoryNode> {\n const manifest = assertEx(this.nodeManifest(index), () => 'Failed to find Node Manifest')\n return await this.loadNodeFromManifest(this.wallet, manifest, manifest.config.accountPath ?? `${index}'`)\n }\n\n async loadNodeFromManifest(wallet: WalletInstance, manifest: NodeManifest, path?: string): Promise<MemoryNode> {\n const derivedWallet = isString(path) ? await wallet.derivePath(path) : await HDWallet.random()\n const node = await MemoryNode.create({ account: derivedWallet, config: manifest.config })\n // Load Private Modules\n const privateModules\n = manifest.modules?.private?.map(async (moduleManifest) => {\n if (typeof moduleManifest === 'object') {\n await this.loadModule(derivedWallet, node, moduleManifest, false)\n }\n }) ?? []\n // Load Public Modules\n const publicModules\n = manifest.modules?.public?.map(async (moduleManifest) => {\n if (typeof moduleManifest === 'object') {\n await this.loadModule(derivedWallet, node, moduleManifest, true)\n }\n }) ?? []\n await Promise.all([...privateModules, ...publicModules])\n\n await Promise.all(\n this.privateChildren.map(async (moduleManifest) => {\n if (typeof moduleManifest === 'object') {\n await this.loadModule(derivedWallet, node, moduleManifest, false)\n }\n }),\n )\n\n await Promise.all(\n this.publicChildren.map(async (moduleManifest) => {\n if (typeof moduleManifest === 'object') {\n await this.loadModule(derivedWallet, node, moduleManifest, true)\n }\n }),\n )\n\n return node\n }\n\n /**\n * Load the nodes that are defined in the wrapped manifest and optionally attach them to a node\n */\n async loadNodes(node?: MemoryNode): Promise<MemoryNode[]> {\n return await Promise.all(\n this.payload.nodes?.map(async (nodeManifest, index) => {\n const subNode = await this.loadNodeFromManifest(this.wallet, nodeManifest as NodeManifest, nodeManifest.config.accountPath ?? `${index}'`)\n await node?.register(subNode)\n return subNode\n }),\n )\n }\n\n nodeManifest(index: number): NodeManifest | undefined {\n return this.payload.nodes?.[index] as NodeManifest | undefined\n }\n\n /** Register a module on a node based on a manifest */\n private async registerModule(wallet: WalletInstance, node: MemoryNode, manifest: ModuleManifest): Promise<ModuleInstance> {\n const creatableModule = this.locator.locate(manifest.config.schema, manifest.config.labels)\n const path = manifest.config.accountPath\n const account = isString(path) ? await wallet.derivePath(path) : 'random'\n const params: QueryableModuleParams = {\n name: manifest.config.name as CreatableName,\n account,\n config: assertEx(manifest.config, () => 'Missing config'),\n }\n if (isArray(this.moduleIdentifierTransformers)) {\n params.moduleIdentifierTransformers = this.moduleIdentifierTransformers\n }\n const mod = await creatableModule.create(params)\n await node.register(mod)\n return mod\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["node", "external", "assertEx", "isString", "HDWallet", "PayloadWrapper", "isModuleName", "MemoryNode", "node", "external"]
7
7
  }