@xyo-network/bridge-http 3.18.10 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,7 +15,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
15
15
  var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
16
16
 
17
17
  // src/HttpBridge.ts
18
- import { assertEx as assertEx3 } from "@xylabs/assert";
18
+ import { assertEx as assertEx2 } from "@xylabs/assert";
19
19
  import { AxiosJson } from "@xylabs/axios";
20
20
  import { exists as exists2 } from "@xylabs/exists";
21
21
  import { forget as forget2 } from "@xylabs/forget";
@@ -25,7 +25,7 @@ import {
25
25
  NodeManifestPayloadSchema
26
26
  } from "@xyo-network/manifest-model";
27
27
  import {
28
- creatableModule,
28
+ creatableModule as creatableModule2,
29
29
  ModuleStateQuerySchema
30
30
  } from "@xyo-network/module-model";
31
31
  import { asAttachableNodeInstance } from "@xyo-network/node-model";
@@ -39,8 +39,9 @@ import { LRUCache as LRUCache2 } from "lru-cache";
39
39
  var HttpBridgeConfigSchema = "network.xyo.bridge.http.config";
40
40
 
41
41
  // src/HttpBridgeModuleResolver.ts
42
- import { assertEx as assertEx2 } from "@xylabs/assert";
42
+ import { assertEx } from "@xylabs/assert";
43
43
  import { isAddress as isAddress2 } from "@xylabs/hex";
44
+ import { isDefined } from "@xylabs/typeof";
44
45
  import { Account } from "@xyo-network/account";
45
46
  import { AbstractBridgeModuleResolver, wrapModuleWithType } from "@xyo-network/bridge-abstract";
46
47
  import { ConfigSchema } from "@xyo-network/config-payload-plugin";
@@ -54,21 +55,13 @@ import { Mutex } from "async-mutex";
54
55
  import { LRUCache } from "lru-cache";
55
56
 
56
57
  // src/ModuleProxy/ModuleProxy.ts
57
- import { assertEx } from "@xylabs/assert";
58
58
  import { exists } from "@xylabs/exists";
59
59
  import { forget } from "@xylabs/forget";
60
60
  import { isAddress } from "@xylabs/hex";
61
+ import { isString } from "@xylabs/typeof";
61
62
  import { AbstractModuleProxy } from "@xyo-network/bridge-abstract";
62
- import { ResolveHelper } from "@xyo-network/module-model";
63
- var HttpModuleProxy = class _HttpModuleProxy extends AbstractModuleProxy {
64
- static createCount = 0;
65
- constructor(params) {
66
- _HttpModuleProxy.createCount = _HttpModuleProxy.createCount + 1;
67
- super(params);
68
- if (Math.floor(_HttpModuleProxy.createCount / 10) === _HttpModuleProxy.createCount / 10) {
69
- console.log(`HttpModuleProxy.createCount: ${_HttpModuleProxy.createCount}`);
70
- }
71
- }
63
+ import { creatableModule, ResolveHelper } from "@xyo-network/module-model";
64
+ var HttpModuleProxy = class extends AbstractModuleProxy {
72
65
  async proxyQueryHandler(query, payloads = []) {
73
66
  if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {
74
67
  forget(this.storeToArchivists([query, ...payloads ?? []]));
@@ -100,12 +93,15 @@ var HttpModuleProxy = class _HttpModuleProxy extends AbstractModuleProxy {
100
93
  switch (typeof id) {
101
94
  case "string": {
102
95
  const parts = id.split(":");
103
- const first = assertEx(parts.shift(), () => "Missing first");
104
- const remainingPath = parts.join(":");
105
- const address = isAddress(first) ? first : this.id === first ? this.address : this.childAddressByName(first);
106
- if (!address) return void 0;
107
- const firstInstance = await this.params.host.resolve(address);
108
- return remainingPath ? await firstInstance?.resolve(remainingPath) : firstInstance;
96
+ const first = parts.shift();
97
+ if (isString(first)) {
98
+ const remainingPath = parts.length > 0 ? parts.join(":") : void 0;
99
+ const address = isAddress(first) ? first : this.id === first ? this.address : this.childAddressByName(first);
100
+ if (!isAddress(address)) return void 0;
101
+ const firstInstance = await this.params.host.resolve(address);
102
+ return isString(remainingPath) ? await firstInstance?.resolve(remainingPath) : firstInstance;
103
+ }
104
+ return void 0;
109
105
  }
110
106
  default: {
111
107
  return (await ResolveHelper.resolve(config, id, options)).filter((mod) => mod.address !== this.address);
@@ -113,6 +109,9 @@ var HttpModuleProxy = class _HttpModuleProxy extends AbstractModuleProxy {
113
109
  }
114
110
  }
115
111
  };
112
+ HttpModuleProxy = __decorateClass([
113
+ creatableModule()
114
+ ], HttpModuleProxy);
116
115
 
117
116
  // src/HttpBridgeModuleResolver.ts
118
117
  var NotFoundModule = { notFound: true };
@@ -131,9 +130,9 @@ var HttpBridgeModuleResolver = class extends AbstractBridgeModuleResolver {
131
130
  return parentResult;
132
131
  }
133
132
  const idParts = id.split(":");
134
- const untransformedFirstPart = assertEx2(idParts.shift(), () => "Missing module identifier");
133
+ const untransformedFirstPart = assertEx(idParts.shift(), () => "Missing module identifier");
135
134
  const firstPart = await ResolveHelper2.transformModuleIdentifier(untransformedFirstPart);
136
- assertEx2(isAddress2(firstPart), () => `Invalid module address: ${firstPart}`);
135
+ assertEx(isAddress2(firstPart), () => `Invalid module address: ${firstPart}`);
137
136
  const remainderParts = idParts.join(":");
138
137
  const instance = await this._resolvedCacheMutex.runExclusive(async () => {
139
138
  const cachedMod = this._resolvedCache.get(firstPart);
@@ -147,6 +146,7 @@ var HttpBridgeModuleResolver = class extends AbstractBridgeModuleResolver {
147
146
  }
148
147
  const account = await Account.random();
149
148
  const finalParams = {
149
+ name: "HttpBridgeModuleResolver",
150
150
  account,
151
151
  archiving: this.params.archiving,
152
152
  config: { schema: ModuleConfigSchema },
@@ -158,30 +158,33 @@ var HttpBridgeModuleResolver = class extends AbstractBridgeModuleResolver {
158
158
  ...params
159
159
  };
160
160
  this.logger?.debug(`creating HttpProxy [${firstPart}] ${id}`);
161
- const proxy = new HttpModuleProxy(finalParams);
161
+ let proxy;
162
162
  let state;
163
163
  try {
164
+ proxy = await HttpModuleProxy.create(finalParams);
164
165
  state = await proxy.state();
165
166
  } catch (ex) {
166
167
  const error = ex;
167
- this.logger?.log(error.message);
168
+ this.logger?.error(error.message);
168
169
  }
169
- if (!state) {
170
- this._resolvedCache.set(firstPart, NotFoundModule);
171
- return;
170
+ if (isDefined(proxy)) {
171
+ if (!state) {
172
+ this._resolvedCache.set(firstPart, NotFoundModule);
173
+ return;
174
+ }
175
+ const configSchema = state.find((payload) => payload.schema === ConfigSchema)?.config;
176
+ const config = assertEx(
177
+ state.find((payload) => payload.schema === configSchema),
178
+ () => "Unable to locate config"
179
+ );
180
+ proxy.setConfig(config);
181
+ this.logger?.log(`created HttpProxy [${firstPart}] ${proxy.id}`);
182
+ await proxy.start?.();
183
+ const wrapped = wrapModuleWithType(proxy, account);
184
+ assertEx(asModuleInstance(wrapped, {}), () => `Failed to asModuleInstance [${id}]`);
185
+ this._resolvedCache.set(wrapped.address, wrapped);
186
+ return wrapped;
172
187
  }
173
- const configSchema = state.find((payload) => payload.schema === ConfigSchema)?.config;
174
- const config = assertEx2(
175
- state.find((payload) => payload.schema === configSchema),
176
- () => "Unable to locate config"
177
- );
178
- proxy.setConfig(config);
179
- this.logger?.log(`created HttpProxy [${firstPart}] ${proxy.id}`);
180
- await proxy.start?.();
181
- const wrapped = wrapModuleWithType(proxy, account);
182
- assertEx2(asModuleInstance(wrapped, {}), () => `Failed to asModuleInstance [${id}]`);
183
- this._resolvedCache.set(wrapped.address, wrapped);
184
- return wrapped;
185
188
  });
186
189
  const result = remainderParts.length > 0 ? await instance?.resolve(remainderParts, options) : instance;
187
190
  return result ? [result] : [];
@@ -200,7 +203,7 @@ var HttpBridge = class extends AbstractBridge {
200
203
  return this._axios;
201
204
  }
202
205
  get clientUrl() {
203
- return assertEx3(this.config.client?.url ?? this.config.nodeUrl, () => "No Url Set");
206
+ return assertEx2(this.config.client?.url ?? this.config.nodeUrl, () => "No Url Set");
204
207
  }
205
208
  get failureRetryTime() {
206
209
  return this.config.failureRetryTime ?? HttpBridge.defaultFailureRetryTime;
@@ -317,15 +320,15 @@ var HttpBridge = class extends AbstractBridge {
317
320
  }
318
321
  }
319
322
  async resolveRootNode(nodeManifest) {
320
- const rootModule = assertEx3(
323
+ const rootModule = assertEx2(
321
324
  (await this.resolver.resolveHandler(
322
- assertEx3(nodeManifest.status?.address, () => "Root has no address"),
325
+ assertEx2(nodeManifest.status?.address, () => "Root has no address"),
323
326
  void 0,
324
327
  { manifest: nodeManifest }
325
328
  )).at(0),
326
329
  () => `Root not found [${nodeManifest.status?.address}]`
327
330
  );
328
- assertEx3(rootModule.constructor.name !== "HttpModuleProxy", () => "rootModule is not a Wrapper");
331
+ assertEx2(rootModule.constructor.name !== "HttpModuleProxy", () => "rootModule is not a Wrapper");
329
332
  const rootNode = asAttachableNodeInstance(rootModule, "Root modules is not a node");
330
333
  if (rootNode) {
331
334
  this.logger?.debug(`rootNode: ${rootNode.id}`);
@@ -343,7 +346,7 @@ __publicField(HttpBridge, "defaultMaxConnections", 4);
343
346
  __publicField(HttpBridge, "defaultMaxPayloadSizeWarning", 256 * 256);
344
347
  __publicField(HttpBridge, "maxFailureCacheSize", 1e3);
345
348
  HttpBridge = __decorateClass([
346
- creatableModule()
349
+ creatableModule2()
347
350
  ], HttpBridge);
348
351
  export {
349
352
  HttpBridge,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/HttpBridge.ts","../../src/HttpBridgeConfig.ts","../../src/HttpBridgeModuleResolver.ts","../../src/ModuleProxy/ModuleProxy.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { AxiosJson } from '@xylabs/axios'\nimport { exists } from '@xylabs/exists'\nimport { forget } from '@xylabs/forget'\nimport { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport { ApiEnvelope } from '@xyo-network/api-models'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractBridge } from '@xyo-network/bridge-abstract'\nimport {\n BridgeExposeOptions,\n BridgeModule,\n BridgeParams,\n BridgeUnexposeOptions,\n QuerySendFinishedEventArgs,\n QuerySendStartedEventArgs,\n} from '@xyo-network/bridge-model'\nimport {\n ModuleManifestPayload, NodeManifestPayload, NodeManifestPayloadSchema,\n} from '@xyo-network/manifest-model'\nimport {\n AnyConfigSchema,\n creatableModule,\n ModuleInstance,\n ModuleQueryResult,\n ModuleResolverInstance,\n ModuleStateQuery,\n ModuleStateQuerySchema,\n} from '@xyo-network/module-model'\nimport { asAttachableNodeInstance } from '@xyo-network/node-model'\nimport {\n isPayloadOfSchemaType, Payload, Schema,\n} from '@xyo-network/payload-model'\nimport { Mutex, Semaphore } from 'async-mutex'\nimport { AxiosError } from 'axios'\nimport { LRUCache } from 'lru-cache'\n\nimport { HttpBridgeConfig, HttpBridgeConfigSchema } from './HttpBridgeConfig.ts'\nimport { HttpBridgeModuleResolver } from './HttpBridgeModuleResolver.ts'\nimport { BridgeQuerySender } from './ModuleProxy/index.ts'\n\nexport interface HttpBridgeParams extends BridgeParams<AnyConfigSchema<HttpBridgeConfig>> {\n axios?: AxiosJson\n}\n\n@creatableModule()\nexport class HttpBridge<TParams extends HttpBridgeParams> extends AbstractBridge<TParams> implements BridgeModule<TParams>, BridgeQuerySender {\n static readonly axios = new AxiosJson()\n static override readonly configSchemas: Schema[] = [...super.configSchemas, HttpBridgeConfigSchema]\n static override readonly defaultConfigSchema: Schema = HttpBridgeConfigSchema\n static readonly defaultFailureRetryTime = 1000 * 60\n static readonly defaultMaxConnections = 4\n static readonly defaultMaxPayloadSizeWarning = 256 * 256\n static readonly maxFailureCacheSize = 1000\n\n private _axios?: AxiosJson\n private _discoverRootsMutex = new Mutex()\n private _failureTimeCache = new LRUCache<Address, number>({ max: HttpBridge.maxFailureCacheSize })\n private _querySemaphore?: Semaphore\n private _resolver?: HttpBridgeModuleResolver\n\n get axios() {\n this._axios = this._axios ?? this.params.axios ?? HttpBridge.axios\n return this._axios\n }\n\n get clientUrl() {\n // eslint-disable-next-line sonarjs/deprecation\n return assertEx(this.config.client?.url ?? this.config.nodeUrl, () => 'No Url Set')\n }\n\n get failureRetryTime() {\n return this.config.failureRetryTime ?? HttpBridge.defaultFailureRetryTime\n }\n\n get maxConnections() {\n return this.config.maxConnections ?? HttpBridge.defaultMaxConnections\n }\n\n get maxPayloadSizeWarning() {\n return this.config.maxPayloadSizeWarning ?? HttpBridge.defaultMaxPayloadSizeWarning\n }\n\n get querySemaphore() {\n this._querySemaphore = this._querySemaphore ?? new Semaphore(this.maxConnections)\n return this._querySemaphore\n }\n\n override get resolver() {\n this._resolver\n = this._resolver\n ?? new HttpBridgeModuleResolver({\n additionalSigners: this.additionalSigners,\n archiving: { ...this.archiving, resolveArchivists: this.resolveArchivingArchivists.bind(this) },\n bridge: this,\n onQuerySendFinished: (args: Omit<QuerySendFinishedEventArgs, 'mod'>) => {\n forget(this.emit('querySendFinished', { mod: this, ...args }))\n },\n onQuerySendStarted: (args: Omit<QuerySendStartedEventArgs, 'mod'>) => {\n forget(this.emit('querySendStarted', { mod: this, ...args }))\n },\n querySender: this,\n root: this,\n rootUrl: this.clientUrl,\n wrapperAccount: this.account,\n })\n return this._resolver\n }\n\n override exposeHandler(_id: string, _options?: BridgeExposeOptions | undefined): Promisable<ModuleInstance[]> {\n throw new Error('Unsupported')\n }\n\n override exposedHandler(): Promisable<Address[]> {\n throw new Error('Unsupported')\n }\n\n async getRoots(force?: boolean): Promise<ModuleInstance[]> {\n return await this._discoverRootsMutex.runExclusive(async () => {\n if (this._roots === undefined || force) {\n const state = await this.getRootState()\n this.logger?.debug(`HttpBridge:discoverRoots.state [${state?.length}]`)\n const nodeManifest = state?.find(isPayloadOfSchemaType<NodeManifestPayload>(NodeManifestPayloadSchema))\n if (nodeManifest) {\n const mods = (await this.resolveRootNode(nodeManifest)).filter(exists)\n this.logger?.debug(`HttpBridge:discoverRoots [${mods.length}]`)\n this._roots = mods\n } else {\n this._roots = []\n }\n }\n return this._roots\n })\n }\n\n moduleUrl(address: Address) {\n return new URL(address, this.clientUrl)\n }\n\n async sendBridgeQuery<TOut extends Payload = Payload, TQuery extends QueryBoundWitness = QueryBoundWitness, TIn extends Payload = Payload>(\n targetAddress: Address,\n query: TQuery,\n payloads?: TIn[],\n ): Promise<ModuleQueryResult<TOut>> {\n const lastFailureTime = this._failureTimeCache.get(targetAddress)\n if (lastFailureTime !== undefined) {\n const now = Date.now()\n const timeSincePreviousFailure = now - lastFailureTime\n if (timeSincePreviousFailure > this.failureRetryTime) {\n throw new Error(`target module failed recently [${targetAddress}] [${timeSincePreviousFailure}ms ago]`)\n }\n this._failureTimeCache.delete(targetAddress)\n }\n try {\n await this.querySemaphore.acquire()\n const payloadSize = JSON.stringify([query, payloads]).length\n if (payloadSize > this.maxPayloadSizeWarning) {\n this.logger?.warn(\n `Large targetQuery being sent: ${payloadSize} bytes [${this.address}][${this.moduleAddress}] [${query.schema}] [${payloads?.length}]`,\n )\n }\n const moduleUrl = this.moduleUrl(targetAddress).href\n const result = await this.axios.post<ApiEnvelope<ModuleQueryResult<TOut>>>(moduleUrl, [query, payloads])\n if (result.status === 404) {\n throw `target module not found [${moduleUrl}] [${result.status}]`\n }\n if (result.status >= 400) {\n this.logger?.error(`targetQuery failed [${moduleUrl}]`)\n throw `targetQuery failed [${moduleUrl}] [${result.status}]`\n }\n return result.data?.data\n } catch (ex) {\n const error = ex as AxiosError\n this.logger?.error(`Error: ${toJsonString(error)}`)\n throw error\n } finally {\n this.querySemaphore.release()\n }\n }\n\n override unexposeHandler(_id: string, _options?: BridgeUnexposeOptions | undefined): Promisable<ModuleInstance[]> {\n throw new Error('Unsupported')\n }\n\n private async getRootState() {\n const queryPayload: ModuleStateQuery = { schema: ModuleStateQuerySchema }\n const boundQuery = await this.bindQuery(queryPayload)\n try {\n const response = await this.axios.post<ApiEnvelope<ModuleQueryResult>>(this.clientUrl.toString(), boundQuery)\n if (response.status === 404) {\n return []\n }\n const [, payloads, errors] = response.data.data\n if (errors.length > 0) {\n throw new Error(`getRootState failed: ${JSON.stringify(errors, null, 2)}`)\n }\n return payloads\n } catch (ex) {\n const error = ex as Error\n this.logger?.warn(`Unable to connect to remote node: ${error.message} [${this.clientUrl}]`)\n }\n }\n\n private async resolveRootNode(nodeManifest: ModuleManifestPayload): Promise<ModuleInstance[]> {\n const rootModule = assertEx(\n (\n await this.resolver.resolveHandler(\n assertEx(nodeManifest.status?.address, () => 'Root has no address'),\n undefined,\n { manifest: nodeManifest },\n )\n ).at(0),\n () => `Root not found [${nodeManifest.status?.address}]`,\n )\n assertEx(rootModule.constructor.name !== 'HttpModuleProxy', () => 'rootModule is not a Wrapper')\n const rootNode = asAttachableNodeInstance(rootModule, 'Root modules is not a node')\n if (rootNode) {\n this.logger?.debug(`rootNode: ${rootNode.id}`)\n this.downResolver.addResolver(rootNode as unknown as ModuleResolverInstance)\n return [rootNode]\n }\n return []\n }\n}\n","import type { EmptyObject } from '@xylabs/object'\nimport type { BridgeConfig } from '@xyo-network/bridge-model'\n\nexport const HttpBridgeConfigSchema = 'network.xyo.bridge.http.config' as const\nexport type HttpBridgeConfigSchema = typeof HttpBridgeConfigSchema\n\nexport type HttpBridgeConfig<TConfig extends EmptyObject = EmptyObject, TSchema extends string | void = void> = BridgeConfig<\n {\n client?: BridgeConfig['client'] & {\n url: string\n }\n failureRetryTime?: number\n failureTimeCacheMax?: number\n host?: {\n port: number\n }\n maxConnections?: number\n maxPayloadSizeWarning?: number\n /** @deprecated use client.url instead */\n nodeUrl?: string\n schema: HttpBridgeConfigSchema\n } & TConfig,\n TSchema extends string ? TSchema : HttpBridgeConfigSchema\n>\n","import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport { isAddress } from '@xylabs/hex'\nimport { Account } from '@xyo-network/account'\nimport type { BridgeModuleResolverParams } from '@xyo-network/bridge-abstract'\nimport { AbstractBridgeModuleResolver, wrapModuleWithType } from '@xyo-network/bridge-abstract'\nimport type { ConfigPayload } from '@xyo-network/config-payload-plugin'\nimport { ConfigSchema } from '@xyo-network/config-payload-plugin'\nimport type {\n ModuleConfig,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n} from '@xyo-network/module-model'\nimport {\n asModuleInstance,\n isModuleInstance,\n ModuleConfigSchema,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport type { BridgeQuerySender, HttpModuleProxyParams } from './ModuleProxy/index.ts'\nimport { HttpModuleProxy } from './ModuleProxy/index.ts'\n\nconst NotFoundModule = { notFound: true }\n\nexport interface HttpBridgeModuleResolverParams extends BridgeModuleResolverParams {\n querySender: BridgeQuerySender\n rootUrl: string\n}\n\nexport class HttpBridgeModuleResolver<\n T extends HttpBridgeModuleResolverParams = HttpBridgeModuleResolverParams,\n> extends AbstractBridgeModuleResolver<T> {\n protected _resolvedCache = new LRUCache<Address, ModuleInstance | typeof NotFoundModule>({ max: 1000 })\n protected _resolvedCacheMutex = new Mutex()\n\n get querySender() {\n return this.params.querySender\n }\n\n moduleUrl(address: Address) {\n return new URL(address, this.params.rootUrl)\n }\n\n override async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n params?: Partial<HttpModuleProxyParams>,\n ): Promise<T[]> {\n const parentResult = await super.resolveHandler(id, options)\n if (parentResult.length > 0) {\n return parentResult\n }\n const idParts = id.split(':')\n const untransformedFirstPart = assertEx(idParts.shift(), () => 'Missing module identifier')\n const firstPart = await ResolveHelper.transformModuleIdentifier(untransformedFirstPart)\n assertEx(isAddress(firstPart), () => `Invalid module address: ${firstPart}`)\n const remainderParts = idParts.join(':')\n const instance: T | undefined = await this._resolvedCacheMutex.runExclusive(async () => {\n const cachedMod = this._resolvedCache.get(firstPart as Address)\n if (cachedMod) {\n if (isModuleInstance(cachedMod)) {\n const result = idParts.length <= 0 ? cachedMod : cachedMod.resolve(remainderParts, { ...options, maxDepth: (options?.maxDepth ?? 5) - 1 })\n return result as T\n } else {\n // return cached 404\n return\n }\n }\n const account = await Account.random()\n const finalParams: HttpModuleProxyParams = {\n account,\n archiving: this.params.archiving,\n config: { schema: ModuleConfigSchema },\n host: this,\n moduleAddress: firstPart as Address,\n onQuerySendFinished: this.params.onQuerySendFinished,\n onQuerySendStarted: this.params.onQuerySendStarted,\n querySender: this.params.querySender,\n ...params,\n }\n\n this.logger?.debug(`creating HttpProxy [${firstPart}] ${id}`)\n\n const proxy = new HttpModuleProxy<T, HttpModuleProxyParams>(finalParams)\n\n let state: Payload[] | undefined\n\n try {\n state = await proxy.state()\n } catch (ex) {\n const error = ex as Error\n this.logger?.log(error.message)\n }\n\n if (!state) {\n // cache the fact that it was not found\n this._resolvedCache.set(firstPart as Address, NotFoundModule)\n return\n }\n\n const configSchema = (state.find(payload => payload.schema === ConfigSchema) as ConfigPayload | undefined)?.config\n const config = assertEx(\n state.find(payload => payload.schema === configSchema),\n () => 'Unable to locate config',\n ) as ModuleConfig\n proxy.setConfig(config)\n\n this.logger?.log(`created HttpProxy [${firstPart}] ${proxy.id}`)\n\n await proxy.start?.()\n const wrapped = wrapModuleWithType(proxy, account) as unknown as T\n assertEx(asModuleInstance<T>(wrapped, {}), () => `Failed to asModuleInstance [${id}]`)\n this._resolvedCache.set(wrapped.address, wrapped)\n return wrapped as ModuleInstance as T\n })\n const result = remainderParts.length > 0 ? await instance?.resolve(remainderParts, options) : instance\n return result ? [result] : []\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { forget } from '@xylabs/forget'\nimport type { Address } from '@xylabs/hex'\nimport { isAddress } from '@xylabs/hex'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport type { ModuleProxyParams } from '@xyo-network/bridge-abstract'\nimport { AbstractModuleProxy } from '@xyo-network/bridge-abstract'\nimport type {\n AttachableModuleInstance,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleQueryResult,\n ResolveHelperConfig,\n} from '@xyo-network/module-model'\nimport { ResolveHelper } from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport interface BridgeQuerySender {\n sendBridgeQuery: <TOut extends Payload = Payload, TQuery extends QueryBoundWitness = QueryBoundWitness, TIn extends Payload = Payload>(\n targetAddress: Address,\n query: TQuery,\n payloads?: TIn[],\n ) => Promise<ModuleQueryResult<TOut>>\n}\n\nexport type HttpModuleProxyParams = ModuleProxyParams & {\n querySender: BridgeQuerySender\n}\n\nexport class HttpModuleProxy<\n TWrappedModule extends ModuleInstance = ModuleInstance,\n TParams extends Omit<HttpModuleProxyParams, 'config'> & { config: TWrappedModule['config'] } = Omit<HttpModuleProxyParams, 'config'> & {\n config: TWrappedModule['config']\n },\n>\n extends AbstractModuleProxy<TWrappedModule, TParams>\n implements AttachableModuleInstance<TParams, TWrappedModule['eventData']> {\n protected static createCount = 0\n\n constructor(params: TParams) {\n HttpModuleProxy.createCount = HttpModuleProxy.createCount + 1\n super(params)\n if (Math.floor(HttpModuleProxy.createCount / 10) === HttpModuleProxy.createCount / 10) {\n console.log(`HttpModuleProxy.createCount: ${HttpModuleProxy.createCount}`)\n }\n }\n\n async proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads: Payload[] = []): Promise<ModuleQueryResult> {\n if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {\n forget(this.storeToArchivists([query, ...(payloads ?? [])]))\n }\n const result = await this.params.querySender.sendBridgeQuery(this.params.moduleAddress, query, payloads)\n if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {\n forget(this.storeToArchivists(result.flat()))\n }\n return result\n }\n\n override async publicChildren(): Promise<ModuleInstance[]> {\n return (\n await Promise.all(\n Object.values(await this.childAddressMap())\n .filter(exists)\n .map(address => this.resolve(address)),\n )\n ).filter(exists)\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n const config: ResolveHelperConfig = {\n address: this.address,\n dead: this.dead,\n downResolver: this.downResolver,\n logger: this.logger,\n mod: this,\n transformers: this.moduleIdentifierTransformers,\n upResolver: this.upResolver,\n }\n if (id === '*') {\n return [...(await this.publicChildren()), await this.params.host.resolve(this.address)] as T[]\n }\n switch (typeof id) {\n case 'string': {\n const parts = id.split(':')\n const first = assertEx(parts.shift(), () => 'Missing first')\n const remainingPath = parts.join(':')\n const address\n = isAddress(first)\n ? first\n : this.id === first\n ? this.address\n : this.childAddressByName(first)\n if (!address) return undefined\n const firstInstance = (await this.params.host.resolve(address)) as ModuleInstance | undefined\n return (remainingPath ? await firstInstance?.resolve(remainingPath) : firstInstance) as T | undefined\n }\n default: {\n return (await ResolveHelper.resolve(config, id, options)).filter(mod => mod.address !== this.address)\n }\n }\n }\n}\n"],"mappings":"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","names":["assertEx","exists","forget","Mutex","LRUCache","assertEx","isAddress","ResolveHelper","assertEx","ResolveHelper","isAddress","result","Mutex","LRUCache","assertEx","forget","exists"]}
1
+ {"version":3,"sources":["../../src/HttpBridge.ts","../../src/HttpBridgeConfig.ts","../../src/HttpBridgeModuleResolver.ts","../../src/ModuleProxy/ModuleProxy.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { AxiosJson } from '@xylabs/axios'\nimport { exists } from '@xylabs/exists'\nimport { forget } from '@xylabs/forget'\nimport { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport { ApiEnvelope } from '@xyo-network/api-models'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractBridge } from '@xyo-network/bridge-abstract'\nimport {\n BridgeExposeOptions,\n BridgeModule,\n BridgeParams,\n BridgeUnexposeOptions,\n QuerySendFinishedEventArgs,\n QuerySendStartedEventArgs,\n} from '@xyo-network/bridge-model'\nimport {\n ModuleManifestPayload, NodeManifestPayload, NodeManifestPayloadSchema,\n} from '@xyo-network/manifest-model'\nimport {\n AnyConfigSchema,\n creatableModule,\n ModuleInstance,\n ModuleQueryResult,\n ModuleResolverInstance,\n ModuleStateQuery,\n ModuleStateQuerySchema,\n} from '@xyo-network/module-model'\nimport { asAttachableNodeInstance } from '@xyo-network/node-model'\nimport {\n isPayloadOfSchemaType, Payload, Schema,\n} from '@xyo-network/payload-model'\nimport { Mutex, Semaphore } from 'async-mutex'\nimport { AxiosError } from 'axios'\nimport { LRUCache } from 'lru-cache'\n\nimport { HttpBridgeConfig, HttpBridgeConfigSchema } from './HttpBridgeConfig.ts'\nimport { HttpBridgeModuleResolver } from './HttpBridgeModuleResolver.ts'\nimport { BridgeQuerySender } from './ModuleProxy/index.ts'\n\nexport interface HttpBridgeParams extends BridgeParams<AnyConfigSchema<HttpBridgeConfig>> {\n axios?: AxiosJson\n}\n\n@creatableModule()\nexport class HttpBridge<TParams extends HttpBridgeParams> extends AbstractBridge<TParams> implements BridgeModule<TParams>, BridgeQuerySender {\n static readonly axios = new AxiosJson()\n static override readonly configSchemas: Schema[] = [...super.configSchemas, HttpBridgeConfigSchema]\n static override readonly defaultConfigSchema: Schema = HttpBridgeConfigSchema\n static readonly defaultFailureRetryTime = 1000 * 60\n static readonly defaultMaxConnections = 4\n static readonly defaultMaxPayloadSizeWarning = 256 * 256\n static readonly maxFailureCacheSize = 1000\n\n private _axios?: AxiosJson\n private _discoverRootsMutex = new Mutex()\n private _failureTimeCache = new LRUCache<Address, number>({ max: HttpBridge.maxFailureCacheSize })\n private _querySemaphore?: Semaphore\n private _resolver?: HttpBridgeModuleResolver\n\n get axios() {\n this._axios = this._axios ?? this.params.axios ?? HttpBridge.axios\n return this._axios\n }\n\n get clientUrl() {\n // eslint-disable-next-line sonarjs/deprecation\n return assertEx(this.config.client?.url ?? this.config.nodeUrl, () => 'No Url Set')\n }\n\n get failureRetryTime() {\n return this.config.failureRetryTime ?? HttpBridge.defaultFailureRetryTime\n }\n\n get maxConnections() {\n return this.config.maxConnections ?? HttpBridge.defaultMaxConnections\n }\n\n get maxPayloadSizeWarning() {\n return this.config.maxPayloadSizeWarning ?? HttpBridge.defaultMaxPayloadSizeWarning\n }\n\n get querySemaphore() {\n this._querySemaphore = this._querySemaphore ?? new Semaphore(this.maxConnections)\n return this._querySemaphore\n }\n\n override get resolver() {\n this._resolver\n = this._resolver\n ?? new HttpBridgeModuleResolver({\n additionalSigners: this.additionalSigners,\n archiving: { ...this.archiving, resolveArchivists: this.resolveArchivingArchivists.bind(this) },\n bridge: this,\n onQuerySendFinished: (args: Omit<QuerySendFinishedEventArgs, 'mod'>) => {\n forget(this.emit('querySendFinished', { mod: this, ...args }))\n },\n onQuerySendStarted: (args: Omit<QuerySendStartedEventArgs, 'mod'>) => {\n forget(this.emit('querySendStarted', { mod: this, ...args }))\n },\n querySender: this,\n root: this,\n rootUrl: this.clientUrl,\n wrapperAccount: this.account,\n })\n return this._resolver\n }\n\n override exposeHandler(_id: string, _options?: BridgeExposeOptions | undefined): Promisable<ModuleInstance[]> {\n throw new Error('Unsupported')\n }\n\n override exposedHandler(): Promisable<Address[]> {\n throw new Error('Unsupported')\n }\n\n async getRoots(force?: boolean): Promise<ModuleInstance[]> {\n return await this._discoverRootsMutex.runExclusive(async () => {\n if (this._roots === undefined || force) {\n const state = await this.getRootState()\n this.logger?.debug(`HttpBridge:discoverRoots.state [${state?.length}]`)\n const nodeManifest = state?.find(isPayloadOfSchemaType<NodeManifestPayload>(NodeManifestPayloadSchema))\n if (nodeManifest) {\n const mods = (await this.resolveRootNode(nodeManifest)).filter(exists)\n this.logger?.debug(`HttpBridge:discoverRoots [${mods.length}]`)\n this._roots = mods\n } else {\n this._roots = []\n }\n }\n return this._roots\n })\n }\n\n moduleUrl(address: Address) {\n return new URL(address, this.clientUrl)\n }\n\n async sendBridgeQuery<TOut extends Payload = Payload, TQuery extends QueryBoundWitness = QueryBoundWitness, TIn extends Payload = Payload>(\n targetAddress: Address,\n query: TQuery,\n payloads?: TIn[],\n ): Promise<ModuleQueryResult<TOut>> {\n const lastFailureTime = this._failureTimeCache.get(targetAddress)\n if (lastFailureTime !== undefined) {\n const now = Date.now()\n const timeSincePreviousFailure = now - lastFailureTime\n if (timeSincePreviousFailure > this.failureRetryTime) {\n throw new Error(`target module failed recently [${targetAddress}] [${timeSincePreviousFailure}ms ago]`)\n }\n this._failureTimeCache.delete(targetAddress)\n }\n try {\n await this.querySemaphore.acquire()\n const payloadSize = JSON.stringify([query, payloads]).length\n if (payloadSize > this.maxPayloadSizeWarning) {\n this.logger?.warn(\n `Large targetQuery being sent: ${payloadSize} bytes [${this.address}][${this.moduleAddress}] [${query.schema}] [${payloads?.length}]`,\n )\n }\n const moduleUrl = this.moduleUrl(targetAddress).href\n const result = await this.axios.post<ApiEnvelope<ModuleQueryResult<TOut>>>(moduleUrl, [query, payloads])\n if (result.status === 404) {\n throw `target module not found [${moduleUrl}] [${result.status}]`\n }\n if (result.status >= 400) {\n this.logger?.error(`targetQuery failed [${moduleUrl}]`)\n throw `targetQuery failed [${moduleUrl}] [${result.status}]`\n }\n return result.data?.data\n } catch (ex) {\n const error = ex as AxiosError\n this.logger?.error(`Error: ${toJsonString(error)}`)\n throw error\n } finally {\n this.querySemaphore.release()\n }\n }\n\n override unexposeHandler(_id: string, _options?: BridgeUnexposeOptions | undefined): Promisable<ModuleInstance[]> {\n throw new Error('Unsupported')\n }\n\n private async getRootState() {\n const queryPayload: ModuleStateQuery = { schema: ModuleStateQuerySchema }\n const boundQuery = await this.bindQuery(queryPayload)\n try {\n const response = await this.axios.post<ApiEnvelope<ModuleQueryResult>>(this.clientUrl.toString(), boundQuery)\n if (response.status === 404) {\n return []\n }\n const [, payloads, errors] = response.data.data\n if (errors.length > 0) {\n throw new Error(`getRootState failed: ${JSON.stringify(errors, null, 2)}`)\n }\n return payloads\n } catch (ex) {\n const error = ex as Error\n this.logger?.warn(`Unable to connect to remote node: ${error.message} [${this.clientUrl}]`)\n }\n }\n\n private async resolveRootNode(nodeManifest: ModuleManifestPayload): Promise<ModuleInstance[]> {\n const rootModule = assertEx(\n (\n await this.resolver.resolveHandler(\n assertEx(nodeManifest.status?.address, () => 'Root has no address'),\n undefined,\n { manifest: nodeManifest },\n )\n ).at(0),\n () => `Root not found [${nodeManifest.status?.address}]`,\n )\n assertEx(rootModule.constructor.name !== 'HttpModuleProxy', () => 'rootModule is not a Wrapper')\n const rootNode = asAttachableNodeInstance(rootModule, 'Root modules is not a node')\n if (rootNode) {\n this.logger?.debug(`rootNode: ${rootNode.id}`)\n this.downResolver.addResolver(rootNode as unknown as ModuleResolverInstance)\n return [rootNode]\n }\n return []\n }\n}\n","import type { EmptyObject } from '@xylabs/object'\nimport type { BridgeConfig } from '@xyo-network/bridge-model'\n\nexport const HttpBridgeConfigSchema = 'network.xyo.bridge.http.config' as const\nexport type HttpBridgeConfigSchema = typeof HttpBridgeConfigSchema\n\nexport type HttpBridgeConfig<TConfig extends EmptyObject = EmptyObject, TSchema extends string | void = void> = BridgeConfig<\n {\n client?: BridgeConfig['client'] & {\n url: string\n }\n failureRetryTime?: number\n failureTimeCacheMax?: number\n host?: {\n port: number\n }\n maxConnections?: number\n maxPayloadSizeWarning?: number\n /** @deprecated use client.url instead */\n nodeUrl?: string\n schema: HttpBridgeConfigSchema\n } & TConfig,\n TSchema extends string ? TSchema : HttpBridgeConfigSchema\n>\n","import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport { isAddress } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport { Account } from '@xyo-network/account'\nimport type { BridgeModuleResolverParams } from '@xyo-network/bridge-abstract'\nimport { AbstractBridgeModuleResolver, wrapModuleWithType } from '@xyo-network/bridge-abstract'\nimport type { ConfigPayload } from '@xyo-network/config-payload-plugin'\nimport { ConfigSchema } from '@xyo-network/config-payload-plugin'\nimport type {\n AttachableModuleInstance,\n ModuleConfig,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n} from '@xyo-network/module-model'\nimport {\n asModuleInstance,\n isModuleInstance,\n ModuleConfigSchema,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport type { BridgeQuerySender, HttpModuleProxyParams } from './ModuleProxy/index.ts'\nimport { HttpModuleProxy } from './ModuleProxy/index.ts'\n\nconst NotFoundModule = { notFound: true }\n\nexport interface HttpBridgeModuleResolverParams extends BridgeModuleResolverParams {\n querySender: BridgeQuerySender\n rootUrl: string\n}\n\nexport class HttpBridgeModuleResolver<\n T extends HttpBridgeModuleResolverParams = HttpBridgeModuleResolverParams,\n> extends AbstractBridgeModuleResolver<T> {\n protected _resolvedCache = new LRUCache<Address, ModuleInstance | typeof NotFoundModule>({ max: 1000 })\n protected _resolvedCacheMutex = new Mutex()\n\n get querySender() {\n return this.params.querySender\n }\n\n moduleUrl(address: Address) {\n return new URL(address, this.params.rootUrl)\n }\n\n override async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n params?: Partial<HttpModuleProxyParams>,\n ): Promise<T[]> {\n const parentResult = await super.resolveHandler(id, options)\n if (parentResult.length > 0) {\n return parentResult\n }\n const idParts = id.split(':')\n const untransformedFirstPart = assertEx(idParts.shift(), () => 'Missing module identifier')\n const firstPart = await ResolveHelper.transformModuleIdentifier(untransformedFirstPart)\n assertEx(isAddress(firstPart), () => `Invalid module address: ${firstPart}`)\n const remainderParts = idParts.join(':')\n const instance: T | undefined = await this._resolvedCacheMutex.runExclusive(async () => {\n const cachedMod = this._resolvedCache.get(firstPart as Address)\n if (cachedMod) {\n if (isModuleInstance(cachedMod)) {\n const result = idParts.length <= 0 ? cachedMod : cachedMod.resolve(remainderParts, { ...options, maxDepth: (options?.maxDepth ?? 5) - 1 })\n return result as T\n } else {\n // return cached 404\n return\n }\n }\n const account = await Account.random()\n const finalParams: HttpModuleProxyParams = {\n name: 'HttpBridgeModuleResolver',\n account,\n archiving: this.params.archiving,\n config: { schema: ModuleConfigSchema },\n host: this,\n moduleAddress: firstPart as Address,\n onQuerySendFinished: this.params.onQuerySendFinished,\n onQuerySendStarted: this.params.onQuerySendStarted,\n querySender: this.params.querySender,\n ...params,\n }\n\n this.logger?.debug(`creating HttpProxy [${firstPart}] ${id}`)\n\n let proxy: HttpModuleProxy | undefined\n\n let state: Payload[] | undefined\n\n try {\n proxy = await HttpModuleProxy.create(finalParams)\n state = await proxy.state()\n } catch (ex) {\n const error = ex as Error\n this.logger?.error(error.message)\n }\n\n if (isDefined(proxy)) {\n if (!state) {\n // cache the fact that it was not found\n this._resolvedCache.set(firstPart as Address, NotFoundModule)\n return\n }\n\n const configSchema = (state.find(payload => payload.schema === ConfigSchema) as ConfigPayload | undefined)?.config\n const config = assertEx(\n state.find(payload => payload.schema === configSchema),\n () => 'Unable to locate config',\n ) as ModuleConfig\n proxy.setConfig(config)\n\n this.logger?.log(`created HttpProxy [${firstPart}] ${proxy.id}`)\n\n await proxy.start?.()\n const wrapped = wrapModuleWithType(proxy, account) as unknown as T\n assertEx(asModuleInstance<T>(wrapped, {}), () => `Failed to asModuleInstance [${id}]`)\n this._resolvedCache.set(wrapped.address, wrapped)\n return wrapped as ModuleInstance as T\n }\n })\n const result = remainderParts.length > 0 ? await instance?.resolve(remainderParts, options) : instance\n return result ? [result] : []\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { forget } from '@xylabs/forget'\nimport type { Address } from '@xylabs/hex'\nimport { isAddress } from '@xylabs/hex'\nimport { isString } from '@xylabs/typeof'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport type { ModuleProxyParams } from '@xyo-network/bridge-abstract'\nimport { AbstractModuleProxy } from '@xyo-network/bridge-abstract'\nimport type {\n AttachableModuleInstance,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleQueryResult,\n ResolveHelperConfig,\n} from '@xyo-network/module-model'\nimport { creatableModule, ResolveHelper } from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport interface BridgeQuerySender {\n sendBridgeQuery: <TOut extends Payload = Payload, TQuery extends QueryBoundWitness = QueryBoundWitness, TIn extends Payload = Payload>(\n targetAddress: Address,\n query: TQuery,\n payloads?: TIn[],\n ) => Promise<ModuleQueryResult<TOut>>\n}\n\nexport type HttpModuleProxyParams = ModuleProxyParams & {\n querySender: BridgeQuerySender\n}\n\n@creatableModule()\nexport class HttpModuleProxy<\n TWrappedModule extends ModuleInstance = ModuleInstance,\n TParams extends Omit<HttpModuleProxyParams, 'config'> & { config: TWrappedModule['config'] } = Omit<HttpModuleProxyParams, 'config'> & {\n config: TWrappedModule['config']\n },\n>\n extends AbstractModuleProxy<TWrappedModule, TParams>\n implements AttachableModuleInstance<TParams, TWrappedModule['eventData']> {\n async proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads: Payload[] = []): Promise<ModuleQueryResult> {\n if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {\n forget(this.storeToArchivists([query, ...(payloads ?? [])]))\n }\n const result = await this.params.querySender.sendBridgeQuery(this.params.moduleAddress, query, payloads)\n if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {\n forget(this.storeToArchivists(result.flat()))\n }\n return result\n }\n\n override async publicChildren(): Promise<ModuleInstance[]> {\n return (\n await Promise.all(\n Object.values(await this.childAddressMap())\n .filter(exists)\n .map(address => this.resolve(address)),\n )\n ).filter(exists)\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n const config: ResolveHelperConfig = {\n address: this.address,\n dead: this.dead,\n downResolver: this.downResolver,\n logger: this.logger,\n mod: this,\n transformers: this.moduleIdentifierTransformers,\n upResolver: this.upResolver,\n }\n if (id === '*') {\n return [...(await this.publicChildren()), await this.params.host.resolve(this.address)] as T[]\n }\n switch (typeof id) {\n case 'string': {\n const parts = id.split(':')\n const first = parts.shift()\n if (isString(first)) {\n const remainingPath = parts.length > 0 ? parts.join(':') : undefined\n const address\n = isAddress(first)\n ? first\n : this.id === first\n ? this.address\n : this.childAddressByName(first)\n if (!isAddress(address)) return undefined\n const firstInstance = (await this.params.host.resolve(address)) as ModuleInstance | undefined\n return (isString(remainingPath) ? await firstInstance?.resolve(remainingPath) : firstInstance) as T | undefined\n }\n return undefined\n }\n default: {\n return (await ResolveHelper.resolve(config, id, options)).filter(mod => mod.address !== this.address)\n }\n }\n }\n}\n"],"mappings":"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","names":["assertEx","exists","forget","creatableModule","Mutex","LRUCache","isAddress","ResolveHelper","ResolveHelper","isAddress","result","Mutex","LRUCache","assertEx","forget","exists","creatableModule"]}
@@ -10,16 +10,7 @@ export interface HttpBridgeModuleResolverParams extends BridgeModuleResolverPara
10
10
  rootUrl: string;
11
11
  }
12
12
  export declare class HttpBridgeModuleResolver<T extends HttpBridgeModuleResolverParams = HttpBridgeModuleResolverParams> extends AbstractBridgeModuleResolver<T> {
13
- protected _resolvedCache: LRUCache<Lowercase<string>, ModuleInstance<import("@xylabs/base").BaseParamsFields & {
14
- account?: import("@xyo-network/account-model").AccountInstance | "random";
15
- addToResolvers?: boolean;
16
- additionalSigners?: import("@xyo-network/account-model").AccountInstance[];
17
- allowNameResolution?: boolean;
18
- config: import("@xyo-network/module-model").AnyConfigSchema<ModuleConfig>;
19
- ephemeralQueryAccountEnabled?: boolean;
20
- moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[];
21
- statusReporter?: import("@xyo-network/module-model").ModuleStatusReporter;
22
- } & import("@xyo-network/module-model").ModuleChildrenParams, import("@xyo-network/module-model").ModuleEventData<object>> | {
13
+ protected _resolvedCache: LRUCache<Lowercase<string>, ModuleInstance<import("@xyo-network/module-model").ModuleParams<import("@xyo-network/module-model").AnyConfigSchema<ModuleConfig>>, import("@xyo-network/module-model").ModuleEventData<object>> | {
23
14
  notFound: boolean;
24
15
  }, unknown>;
25
16
  protected _resolvedCacheMutex: Mutex;
@@ -1 +1 @@
1
- {"version":3,"file":"HttpBridgeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/HttpBridgeModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAG1C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAA;AAC9E,OAAO,EAAE,4BAA4B,EAAsB,MAAM,8BAA8B,CAAA;AAG/F,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACf,MAAM,2BAA2B,CAAA;AAQlC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAKtF,MAAM,WAAW,8BAA+B,SAAQ,0BAA0B;IAChF,WAAW,EAAE,iBAAiB,CAAA;IAC9B,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,qBAAa,wBAAwB,CACnC,CAAC,SAAS,8BAA8B,GAAG,8BAA8B,CACzE,SAAQ,4BAA4B,CAAC,CAAC,CAAC;IACvC,SAAS,CAAC,cAAc;;;;;;;;;;;gBAA+E;IACvG,SAAS,CAAC,mBAAmB,QAAc;IAE3C,IAAI,WAAW,sBAEd;IAED,SAAS,CAAC,OAAO,EAAE,OAAO;IAIX,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EACrE,EAAE,EAAE,gBAAgB,EACpB,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAChC,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,GACtC,OAAO,CAAC,CAAC,EAAE,CAAC;CAuEhB"}
1
+ {"version":3,"file":"HttpBridgeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/HttpBridgeModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAI1C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAA;AAC9E,OAAO,EAAE,4BAA4B,EAAsB,MAAM,8BAA8B,CAAA;AAG/F,OAAO,KAAK,EAEV,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACf,MAAM,2BAA2B,CAAA;AAQlC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAKtF,MAAM,WAAW,8BAA+B,SAAQ,0BAA0B;IAChF,WAAW,EAAE,iBAAiB,CAAA;IAC9B,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,qBAAa,wBAAwB,CACnC,CAAC,SAAS,8BAA8B,GAAG,8BAA8B,CACzE,SAAQ,4BAA4B,CAAC,CAAC,CAAC;IACvC,SAAS,CAAC,cAAc;;gBAA+E;IACvG,SAAS,CAAC,mBAAmB,QAAc;IAE3C,IAAI,WAAW,sBAEd;IAED,SAAS,CAAC,OAAO,EAAE,OAAO;IAIX,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EACrE,EAAE,EAAE,gBAAgB,EACpB,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAChC,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,GACtC,OAAO,CAAC,CAAC,EAAE,CAAC;CA2EhB"}
@@ -15,8 +15,6 @@ export declare class HttpModuleProxy<TWrappedModule extends ModuleInstance = Mod
15
15
  } = Omit<HttpModuleProxyParams, 'config'> & {
16
16
  config: TWrappedModule['config'];
17
17
  }> extends AbstractModuleProxy<TWrappedModule, TParams> implements AttachableModuleInstance<TParams, TWrappedModule['eventData']> {
18
- protected static createCount: number;
19
- constructor(params: TParams);
20
18
  proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads?: Payload[]): Promise<ModuleQueryResult>;
21
19
  publicChildren(): Promise<ModuleInstance[]>;
22
20
  /** @deprecated do not pass undefined. If trying to get all, pass '*' */
@@ -1 +1 @@
1
- {"version":3,"file":"ModuleProxy.d.ts","sourceRoot":"","sources":["../../../src/ModuleProxy/ModuleProxy.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EACV,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EAElB,MAAM,2BAA2B,CAAA;AAElC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,CAAC,IAAI,SAAS,OAAO,GAAG,OAAO,EAAE,MAAM,SAAS,iBAAiB,GAAG,iBAAiB,EAAE,GAAG,SAAS,OAAO,GAAG,OAAO,EACnI,aAAa,EAAE,OAAO,EACtB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,GAAG,EAAE,KACb,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAA;CACtC;AAED,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,GAAG;IACtD,WAAW,EAAE,iBAAiB,CAAA;CAC/B,CAAA;AAED,qBAAa,eAAe,CAC1B,cAAc,SAAS,cAAc,GAAG,cAAc,EACtD,OAAO,SAAS,IAAI,CAAC,qBAAqB,EAAE,QAAQ,CAAC,GAAG;IAAE,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAA;CAAE,GAAG,IAAI,CAAC,qBAAqB,EAAE,QAAQ,CAAC,GAAG;IACrI,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAA;CACjC,CAED,SAAQ,mBAAmB,CAAC,cAAc,EAAE,OAAO,CACnD,YAAW,wBAAwB,CAAC,OAAO,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IACzE,SAAS,CAAC,MAAM,CAAC,WAAW,SAAI;gBAEpB,MAAM,EAAE,OAAO;IAQrB,iBAAiB,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAWzH,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAU1D,yEAAyE;IAC1D,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;CAqClJ"}
1
+ {"version":3,"file":"ModuleProxy.d.ts","sourceRoot":"","sources":["../../../src/ModuleProxy/ModuleProxy.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAG1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EACV,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EAElB,MAAM,2BAA2B,CAAA;AAElC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,CAAC,IAAI,SAAS,OAAO,GAAG,OAAO,EAAE,MAAM,SAAS,iBAAiB,GAAG,iBAAiB,EAAE,GAAG,SAAS,OAAO,GAAG,OAAO,EACnI,aAAa,EAAE,OAAO,EACtB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,GAAG,EAAE,KACb,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAA;CACtC;AAED,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,GAAG;IACtD,WAAW,EAAE,iBAAiB,CAAA;CAC/B,CAAA;AAED,qBACa,eAAe,CAC1B,cAAc,SAAS,cAAc,GAAG,cAAc,EACtD,OAAO,SAAS,IAAI,CAAC,qBAAqB,EAAE,QAAQ,CAAC,GAAG;IAAE,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAA;CAAE,GAAG,IAAI,CAAC,qBAAqB,EAAE,QAAQ,CAAC,GAAG;IACrI,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAA;CACjC,CAED,SAAQ,mBAAmB,CAAC,cAAc,EAAE,OAAO,CACnD,YAAW,wBAAwB,CAAC,OAAO,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IACnE,iBAAiB,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAWzH,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAU1D,yEAAyE;IAC1D,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;CAwClJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/bridge-http",
3
- "version": "3.18.10",
3
+ "version": "4.0.1",
4
4
  "description": "Primary SDK for using XYO Protocol 2.0",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -36,43 +36,44 @@
36
36
  "package.json"
37
37
  ],
38
38
  "dependencies": {
39
- "@xylabs/assert": "^4.11.21",
40
- "@xylabs/axios": "^4.11.21",
41
- "@xylabs/exists": "^4.11.21",
42
- "@xylabs/forget": "^4.11.21",
43
- "@xylabs/hex": "^4.11.21",
44
- "@xylabs/object": "^4.11.21",
45
- "@xylabs/promise": "^4.11.21",
46
- "@xyo-network/account": "^3.18.10",
47
- "@xyo-network/boundwitness-model": "^3.18.10",
48
- "@xyo-network/bridge-abstract": "^3.18.10",
49
- "@xyo-network/bridge-model": "^3.18.10",
50
- "@xyo-network/config-payload-plugin": "^3.18.10",
51
- "@xyo-network/manifest-model": "^3.18.10",
52
- "@xyo-network/module-model": "^3.18.10",
53
- "@xyo-network/node-model": "^3.18.10",
54
- "@xyo-network/payload-model": "^3.18.10",
39
+ "@xylabs/assert": "^4.12.30",
40
+ "@xylabs/axios": "^4.12.30",
41
+ "@xylabs/exists": "^4.12.30",
42
+ "@xylabs/forget": "^4.12.30",
43
+ "@xylabs/hex": "^4.12.30",
44
+ "@xylabs/object": "^4.12.30",
45
+ "@xylabs/promise": "^4.12.30",
46
+ "@xylabs/typeof": "^4.12.30",
47
+ "@xyo-network/account": "^4.0.1",
48
+ "@xyo-network/boundwitness-model": "^4.0.1",
49
+ "@xyo-network/bridge-abstract": "^4.0.1",
50
+ "@xyo-network/bridge-model": "^4.0.1",
51
+ "@xyo-network/config-payload-plugin": "^4.0.1",
52
+ "@xyo-network/manifest-model": "^4.0.1",
53
+ "@xyo-network/module-model": "^4.0.1",
54
+ "@xyo-network/node-model": "^4.0.1",
55
+ "@xyo-network/payload-model": "^4.0.1",
55
56
  "async-mutex": "^0.5.0",
56
57
  "lru-cache": "^11.1.0"
57
58
  },
58
59
  "devDependencies": {
59
- "@types/node": "^24.0.3",
60
- "@xylabs/ts-scripts-yarn3": "^6.5.8",
61
- "@xylabs/tsconfig": "^6.5.8",
62
- "@xylabs/vitest-extended": "^4.11.21",
63
- "@xyo-network/api-models": "^3.18.10",
64
- "@xyo-network/archivist-model": "^3.18.10",
65
- "@xyo-network/bridge-abstract": "^3.18.10",
66
- "@xyo-network/diviner-model": "^3.18.10",
67
- "@xyo-network/module-resolver": "^3.18.10",
68
- "@xyo-network/node-memory": "^3.18.10",
69
- "@xyo-network/node-model": "^3.18.10",
70
- "@xyo-network/payload-builder": "^3.18.10",
71
- "@xyo-network/payload-wrapper": "^3.18.10",
72
- "@xyo-network/wallet": "^3.18.10",
60
+ "@types/node": "^24.0.10",
61
+ "@xylabs/ts-scripts-yarn3": "^6.5.12",
62
+ "@xylabs/tsconfig": "^6.5.12",
63
+ "@xylabs/vitest-extended": "^4.12.30",
64
+ "@xyo-network/api-models": "^4.0.1",
65
+ "@xyo-network/archivist-model": "^4.0.1",
66
+ "@xyo-network/bridge-abstract": "^4.0.1",
67
+ "@xyo-network/diviner-model": "^4.0.1",
68
+ "@xyo-network/module-resolver": "^4.0.1",
69
+ "@xyo-network/node-memory": "^4.0.1",
70
+ "@xyo-network/node-model": "^4.0.1",
71
+ "@xyo-network/payload-builder": "^4.0.1",
72
+ "@xyo-network/payload-wrapper": "^4.0.1",
73
+ "@xyo-network/wallet": "^4.0.1",
73
74
  "axios": "^1.10.0",
74
75
  "typescript": "^5.8.3",
75
- "vitest": "^3.2.3"
76
+ "vitest": "^3.2.4"
76
77
  },
77
78
  "publishConfig": {
78
79
  "access": "public"
@@ -1,12 +1,14 @@
1
1
  import { assertEx } from '@xylabs/assert'
2
2
  import type { Address } from '@xylabs/hex'
3
3
  import { isAddress } from '@xylabs/hex'
4
+ import { isDefined } from '@xylabs/typeof'
4
5
  import { Account } from '@xyo-network/account'
5
6
  import type { BridgeModuleResolverParams } from '@xyo-network/bridge-abstract'
6
7
  import { AbstractBridgeModuleResolver, wrapModuleWithType } from '@xyo-network/bridge-abstract'
7
8
  import type { ConfigPayload } from '@xyo-network/config-payload-plugin'
8
9
  import { ConfigSchema } from '@xyo-network/config-payload-plugin'
9
10
  import type {
11
+ AttachableModuleInstance,
10
12
  ModuleConfig,
11
13
  ModuleFilterOptions,
12
14
  ModuleIdentifier,
@@ -73,6 +75,7 @@ export class HttpBridgeModuleResolver<
73
75
  }
74
76
  const account = await Account.random()
75
77
  const finalParams: HttpModuleProxyParams = {
78
+ name: 'HttpBridgeModuleResolver',
76
79
  account,
77
80
  archiving: this.params.archiving,
78
81
  config: { schema: ModuleConfigSchema },
@@ -86,37 +89,40 @@ export class HttpBridgeModuleResolver<
86
89
 
87
90
  this.logger?.debug(`creating HttpProxy [${firstPart}] ${id}`)
88
91
 
89
- const proxy = new HttpModuleProxy<T, HttpModuleProxyParams>(finalParams)
92
+ let proxy: HttpModuleProxy | undefined
90
93
 
91
94
  let state: Payload[] | undefined
92
95
 
93
96
  try {
97
+ proxy = await HttpModuleProxy.create(finalParams)
94
98
  state = await proxy.state()
95
99
  } catch (ex) {
96
100
  const error = ex as Error
97
- this.logger?.log(error.message)
101
+ this.logger?.error(error.message)
98
102
  }
99
103
 
100
- if (!state) {
104
+ if (isDefined(proxy)) {
105
+ if (!state) {
101
106
  // cache the fact that it was not found
102
- this._resolvedCache.set(firstPart as Address, NotFoundModule)
103
- return
104
- }
107
+ this._resolvedCache.set(firstPart as Address, NotFoundModule)
108
+ return
109
+ }
105
110
 
106
- const configSchema = (state.find(payload => payload.schema === ConfigSchema) as ConfigPayload | undefined)?.config
107
- const config = assertEx(
108
- state.find(payload => payload.schema === configSchema),
109
- () => 'Unable to locate config',
110
- ) as ModuleConfig
111
- proxy.setConfig(config)
111
+ const configSchema = (state.find(payload => payload.schema === ConfigSchema) as ConfigPayload | undefined)?.config
112
+ const config = assertEx(
113
+ state.find(payload => payload.schema === configSchema),
114
+ () => 'Unable to locate config',
115
+ ) as ModuleConfig
116
+ proxy.setConfig(config)
112
117
 
113
- this.logger?.log(`created HttpProxy [${firstPart}] ${proxy.id}`)
118
+ this.logger?.log(`created HttpProxy [${firstPart}] ${proxy.id}`)
114
119
 
115
- await proxy.start?.()
116
- const wrapped = wrapModuleWithType(proxy, account) as unknown as T
117
- assertEx(asModuleInstance<T>(wrapped, {}), () => `Failed to asModuleInstance [${id}]`)
118
- this._resolvedCache.set(wrapped.address, wrapped)
119
- return wrapped as ModuleInstance as T
120
+ await proxy.start?.()
121
+ const wrapped = wrapModuleWithType(proxy, account) as unknown as T
122
+ assertEx(asModuleInstance<T>(wrapped, {}), () => `Failed to asModuleInstance [${id}]`)
123
+ this._resolvedCache.set(wrapped.address, wrapped)
124
+ return wrapped as ModuleInstance as T
125
+ }
120
126
  })
121
127
  const result = remainderParts.length > 0 ? await instance?.resolve(remainderParts, options) : instance
122
128
  return result ? [result] : []
@@ -3,6 +3,7 @@ import { exists } from '@xylabs/exists'
3
3
  import { forget } from '@xylabs/forget'
4
4
  import type { Address } from '@xylabs/hex'
5
5
  import { isAddress } from '@xylabs/hex'
6
+ import { isString } from '@xylabs/typeof'
6
7
  import type { QueryBoundWitness } from '@xyo-network/boundwitness-model'
7
8
  import type { ModuleProxyParams } from '@xyo-network/bridge-abstract'
8
9
  import { AbstractModuleProxy } from '@xyo-network/bridge-abstract'
@@ -14,7 +15,7 @@ import type {
14
15
  ModuleQueryResult,
15
16
  ResolveHelperConfig,
16
17
  } from '@xyo-network/module-model'
17
- import { ResolveHelper } from '@xyo-network/module-model'
18
+ import { creatableModule, ResolveHelper } from '@xyo-network/module-model'
18
19
  import type { Payload } from '@xyo-network/payload-model'
19
20
 
20
21
  export interface BridgeQuerySender {
@@ -29,6 +30,7 @@ export type HttpModuleProxyParams = ModuleProxyParams & {
29
30
  querySender: BridgeQuerySender
30
31
  }
31
32
 
33
+ @creatableModule()
32
34
  export class HttpModuleProxy<
33
35
  TWrappedModule extends ModuleInstance = ModuleInstance,
34
36
  TParams extends Omit<HttpModuleProxyParams, 'config'> & { config: TWrappedModule['config'] } = Omit<HttpModuleProxyParams, 'config'> & {
@@ -37,16 +39,6 @@ export class HttpModuleProxy<
37
39
  >
38
40
  extends AbstractModuleProxy<TWrappedModule, TParams>
39
41
  implements AttachableModuleInstance<TParams, TWrappedModule['eventData']> {
40
- protected static createCount = 0
41
-
42
- constructor(params: TParams) {
43
- HttpModuleProxy.createCount = HttpModuleProxy.createCount + 1
44
- super(params)
45
- if (Math.floor(HttpModuleProxy.createCount / 10) === HttpModuleProxy.createCount / 10) {
46
- console.log(`HttpModuleProxy.createCount: ${HttpModuleProxy.createCount}`)
47
- }
48
- }
49
-
50
42
  async proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads: Payload[] = []): Promise<ModuleQueryResult> {
51
43
  if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {
52
44
  forget(this.storeToArchivists([query, ...(payloads ?? [])]))
@@ -91,17 +83,20 @@ export class HttpModuleProxy<
91
83
  switch (typeof id) {
92
84
  case 'string': {
93
85
  const parts = id.split(':')
94
- const first = assertEx(parts.shift(), () => 'Missing first')
95
- const remainingPath = parts.join(':')
96
- const address
86
+ const first = parts.shift()
87
+ if (isString(first)) {
88
+ const remainingPath = parts.length > 0 ? parts.join(':') : undefined
89
+ const address
97
90
  = isAddress(first)
98
91
  ? first
99
92
  : this.id === first
100
93
  ? this.address
101
94
  : this.childAddressByName(first)
102
- if (!address) return undefined
103
- const firstInstance = (await this.params.host.resolve(address)) as ModuleInstance | undefined
104
- return (remainingPath ? await firstInstance?.resolve(remainingPath) : firstInstance) as T | undefined
95
+ if (!isAddress(address)) return undefined
96
+ const firstInstance = (await this.params.host.resolve(address)) as ModuleInstance | undefined
97
+ return (isString(remainingPath) ? await firstInstance?.resolve(remainingPath) : firstInstance) as T | undefined
98
+ }
99
+ return undefined
105
100
  }
106
101
  default: {
107
102
  return (await ResolveHelper.resolve(config, id, options)).filter(mod => mod.address !== this.address)
@@ -95,6 +95,7 @@ describe('HttpBridge', () => {
95
95
  const remoteNode = asAttachableNodeInstance(
96
96
  rootModule,
97
97
  () => `Failed to resolve correct object type [XYOPublic] [${rootModule?.constructor.name}]`,
98
+ { required: true },
98
99
  )
99
100
 
100
101
  const state = await remoteNode.state()
@@ -131,7 +132,7 @@ describe('HttpBridge', () => {
131
132
  expect(archivistByName3).toEqual(archivistByName1)
132
133
  expect(archivistByName3).toEqual(archivistByName2)
133
134
  expect(archivistByName2).toBeDefined()
134
- const archivistInstance = asArchivistInstance(archivistByName2, 'Failed to cast archivist')
135
+ const archivistInstance = asArchivistInstance(archivistByName2, 'Failed to cast archivist', { required: true })
135
136
  expect(archivistInstance).toBeDefined()
136
137
  const knownPayload = PayloadWrapper.parse({ schema: 'network.xyo.test' })?.payload as Payload
137
138
  expect(knownPayload).toBeDefined()
@@ -165,7 +166,11 @@ describe('HttpBridge', () => {
165
166
  expect(isModule(mod)).toBeTrue()
166
167
  expect(isModuleObject(mod)).toBeTrue()
167
168
 
168
- const remoteNode = asAttachableNodeInstance(mod, `Failed to resolve [XYOPublic] - ${mod?.address} [${mod?.id}] [${mod?.constructor.name}]`)
169
+ const remoteNode = asAttachableNodeInstance(
170
+ mod,
171
+ `Failed to resolve [XYOPublic] - ${mod?.address} [${mod?.id}] [${mod?.constructor.name}]`,
172
+ { required: true },
173
+ )
169
174
 
170
175
  expect(isNodeInstance(remoteNode)).toBeTrue()
171
176
  expect(isModuleInstance(remoteNode)).toBeTrue()
@@ -41,7 +41,11 @@ describe('HttpBridge - Xns', () => {
41
41
  const rootModule = await bridge?.resolve('XNS')
42
42
  expect(rootModule).toBeDefined()
43
43
 
44
- const remoteNode = asAttachableNodeInstance(rootModule, () => `Failed to resolve correct object type [XYO] [${rootModule?.constructor.name}]`)
44
+ const remoteNode = asAttachableNodeInstance(
45
+ rootModule,
46
+ () => `Failed to resolve correct object type [XYO] [${rootModule?.constructor.name}]`,
47
+ { required: true },
48
+ )
45
49
 
46
50
  const registrarDiviner = asDivinerInstance(await remoteNode.resolve('XNS:AddressRecords:AddressRecordIndexDiviner'))
47
51
  expect(registrarDiviner).toBeDefined()