@xyo-network/bridge-http 2.105.1 → 2.106.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/browser/HttpBridgeBase.d.cts +4 -1
  2. package/dist/browser/HttpBridgeBase.d.cts.map +1 -1
  3. package/dist/browser/HttpBridgeBase.d.mts +4 -1
  4. package/dist/browser/HttpBridgeBase.d.mts.map +1 -1
  5. package/dist/browser/HttpBridgeBase.d.ts +4 -1
  6. package/dist/browser/HttpBridgeBase.d.ts.map +1 -1
  7. package/dist/browser/HttpBridgeModuleResolver.d.cts +18 -2
  8. package/dist/browser/HttpBridgeModuleResolver.d.cts.map +1 -1
  9. package/dist/browser/HttpBridgeModuleResolver.d.mts +18 -2
  10. package/dist/browser/HttpBridgeModuleResolver.d.mts.map +1 -1
  11. package/dist/browser/HttpBridgeModuleResolver.d.ts +18 -2
  12. package/dist/browser/HttpBridgeModuleResolver.d.ts.map +1 -1
  13. package/dist/browser/ModuleProxy/ModuleProxy.d.cts +9 -1
  14. package/dist/browser/ModuleProxy/ModuleProxy.d.cts.map +1 -1
  15. package/dist/browser/ModuleProxy/ModuleProxy.d.mts +9 -1
  16. package/dist/browser/ModuleProxy/ModuleProxy.d.mts.map +1 -1
  17. package/dist/browser/ModuleProxy/ModuleProxy.d.ts +9 -1
  18. package/dist/browser/ModuleProxy/ModuleProxy.d.ts.map +1 -1
  19. package/dist/browser/index-browser.cjs +132 -60
  20. package/dist/browser/index-browser.cjs.map +1 -1
  21. package/dist/browser/index-browser.js +127 -55
  22. package/dist/browser/index-browser.js.map +1 -1
  23. package/dist/neutral/HttpBridgeBase.d.cts +4 -1
  24. package/dist/neutral/HttpBridgeBase.d.cts.map +1 -1
  25. package/dist/neutral/HttpBridgeBase.d.mts +4 -1
  26. package/dist/neutral/HttpBridgeBase.d.mts.map +1 -1
  27. package/dist/neutral/HttpBridgeBase.d.ts +4 -1
  28. package/dist/neutral/HttpBridgeBase.d.ts.map +1 -1
  29. package/dist/neutral/HttpBridgeModuleResolver.d.cts +18 -2
  30. package/dist/neutral/HttpBridgeModuleResolver.d.cts.map +1 -1
  31. package/dist/neutral/HttpBridgeModuleResolver.d.mts +18 -2
  32. package/dist/neutral/HttpBridgeModuleResolver.d.mts.map +1 -1
  33. package/dist/neutral/HttpBridgeModuleResolver.d.ts +18 -2
  34. package/dist/neutral/HttpBridgeModuleResolver.d.ts.map +1 -1
  35. package/dist/neutral/ModuleProxy/ModuleProxy.d.cts +9 -1
  36. package/dist/neutral/ModuleProxy/ModuleProxy.d.cts.map +1 -1
  37. package/dist/neutral/ModuleProxy/ModuleProxy.d.mts +9 -1
  38. package/dist/neutral/ModuleProxy/ModuleProxy.d.mts.map +1 -1
  39. package/dist/neutral/ModuleProxy/ModuleProxy.d.ts +9 -1
  40. package/dist/neutral/ModuleProxy/ModuleProxy.d.ts.map +1 -1
  41. package/dist/neutral/index-browser.cjs +132 -60
  42. package/dist/neutral/index-browser.cjs.map +1 -1
  43. package/dist/neutral/index-browser.js +127 -55
  44. package/dist/neutral/index-browser.js.map +1 -1
  45. package/dist/node/HttpBridgeBase.d.cts +4 -1
  46. package/dist/node/HttpBridgeBase.d.cts.map +1 -1
  47. package/dist/node/HttpBridgeBase.d.mts +4 -1
  48. package/dist/node/HttpBridgeBase.d.mts.map +1 -1
  49. package/dist/node/HttpBridgeBase.d.ts +4 -1
  50. package/dist/node/HttpBridgeBase.d.ts.map +1 -1
  51. package/dist/node/HttpBridgeModuleResolver.d.cts +18 -2
  52. package/dist/node/HttpBridgeModuleResolver.d.cts.map +1 -1
  53. package/dist/node/HttpBridgeModuleResolver.d.mts +18 -2
  54. package/dist/node/HttpBridgeModuleResolver.d.mts.map +1 -1
  55. package/dist/node/HttpBridgeModuleResolver.d.ts +18 -2
  56. package/dist/node/HttpBridgeModuleResolver.d.ts.map +1 -1
  57. package/dist/node/ModuleProxy/ModuleProxy.d.cts +9 -1
  58. package/dist/node/ModuleProxy/ModuleProxy.d.cts.map +1 -1
  59. package/dist/node/ModuleProxy/ModuleProxy.d.mts +9 -1
  60. package/dist/node/ModuleProxy/ModuleProxy.d.mts.map +1 -1
  61. package/dist/node/ModuleProxy/ModuleProxy.d.ts +9 -1
  62. package/dist/node/ModuleProxy/ModuleProxy.d.ts.map +1 -1
  63. package/dist/node/index.cjs +145 -72
  64. package/dist/node/index.cjs.map +1 -1
  65. package/dist/node/index.js +139 -66
  66. package/dist/node/index.js.map +1 -1
  67. package/package.json +24 -20
  68. package/src/HttpBridgeBase.ts +52 -5
  69. package/src/HttpBridgeModuleResolver.ts +42 -35
  70. package/src/ModuleProxy/ModuleProxy.ts +68 -2
@@ -27,36 +27,42 @@ __export(index_browser_exports, {
27
27
  module.exports = __toCommonJS(index_browser_exports);
28
28
 
29
29
  // src/HttpBridgeClientOnly.ts
30
- var import_module_model3 = require("@xyo-network/module-model");
30
+ var import_module_model4 = require("@xyo-network/module-model");
31
31
 
32
32
  // src/HttpBridgeBase.ts
33
- var import_assert2 = require("@xylabs/assert");
33
+ var import_assert3 = require("@xylabs/assert");
34
34
  var import_axios = require("@xylabs/axios");
35
- var import_exists = require("@xylabs/exists");
35
+ var import_exists2 = require("@xylabs/exists");
36
36
  var import_forget2 = require("@xylabs/forget");
37
37
  var import_object = require("@xylabs/object");
38
38
  var import_bridge_abstract3 = require("@xyo-network/bridge-abstract");
39
39
  var import_manifest_model = require("@xyo-network/manifest-model");
40
- var import_module_model2 = require("@xyo-network/module-model");
40
+ var import_module_model3 = require("@xyo-network/module-model");
41
41
  var import_node_model = require("@xyo-network/node-model");
42
42
  var import_payload_model = require("@xyo-network/payload-model");
43
- var import_async_mutex = require("async-mutex");
44
- var import_lru_cache = require("lru-cache");
43
+ var import_async_mutex2 = require("async-mutex");
44
+ var import_lru_cache2 = require("lru-cache");
45
45
 
46
46
  // src/HttpBridgeConfig.ts
47
47
  var HttpBridgeConfigSchema = "network.xyo.bridge.http.config";
48
48
 
49
49
  // src/HttpBridgeModuleResolver.ts
50
- var import_assert = require("@xylabs/assert");
51
- var import_hex = require("@xylabs/hex");
50
+ var import_assert2 = require("@xylabs/assert");
51
+ var import_hex2 = require("@xylabs/hex");
52
52
  var import_account = require("@xyo-network/account");
53
53
  var import_bridge_abstract2 = require("@xyo-network/bridge-abstract");
54
54
  var import_config_payload_plugin = require("@xyo-network/config-payload-plugin");
55
- var import_module_model = require("@xyo-network/module-model");
55
+ var import_module_model2 = require("@xyo-network/module-model");
56
+ var import_async_mutex = require("async-mutex");
57
+ var import_lru_cache = require("lru-cache");
56
58
 
57
59
  // src/ModuleProxy/ModuleProxy.ts
60
+ var import_assert = require("@xylabs/assert");
61
+ var import_exists = require("@xylabs/exists");
58
62
  var import_forget = require("@xylabs/forget");
63
+ var import_hex = require("@xylabs/hex");
59
64
  var import_bridge_abstract = require("@xyo-network/bridge-abstract");
65
+ var import_module_model = require("@xyo-network/module-model");
60
66
  var HttpModuleProxy = class _HttpModuleProxy extends import_bridge_abstract.AbstractModuleProxy {
61
67
  static {
62
68
  __name(this, "HttpModuleProxy");
@@ -82,6 +88,40 @@ var HttpModuleProxy = class _HttpModuleProxy extends import_bridge_abstract.Abst
82
88
  }
83
89
  return result;
84
90
  }
91
+ async publicChildren() {
92
+ return (await Promise.all(Object.values(await this.childAddressMap()).filter(import_exists.exists).map((address) => this.resolve(address)))).filter(import_exists.exists);
93
+ }
94
+ async resolve(idOrFilter = "*", options = {}) {
95
+ const config = {
96
+ address: this.address,
97
+ dead: this.dead,
98
+ downResolver: this.downResolver,
99
+ logger: this.logger,
100
+ module: this,
101
+ transformers: this.moduleIdentifierTransformers,
102
+ upResolver: this.upResolver
103
+ };
104
+ if (idOrFilter === "*") {
105
+ return await this.publicChildren();
106
+ }
107
+ switch (typeof idOrFilter) {
108
+ case "string": {
109
+ const parts = idOrFilter.split(":");
110
+ const first = (0, import_assert.assertEx)(parts.shift(), () => "Missing first");
111
+ const remainingPath = parts.join(":");
112
+ const address = (0, import_hex.isAddress)(first) ? first : this.id === first ? this.address : this.childAddressByName(first);
113
+ if (!address) return void 0;
114
+ const firstInstance = await this.params.host.resolve(address);
115
+ return remainingPath ? await firstInstance?.resolve(remainingPath) : firstInstance;
116
+ }
117
+ case "object": {
118
+ return (await import_module_model.ResolveHelper.resolve(config, idOrFilter, options)).filter((mod) => mod.address !== this.address);
119
+ }
120
+ default: {
121
+ return (await import_module_model.ResolveHelper.resolve(config, idOrFilter, options)).filter((mod) => mod.address !== this.address);
122
+ }
123
+ }
124
+ }
85
125
  };
86
126
 
87
127
  // src/HttpBridgeModuleResolver.ts
@@ -89,63 +129,69 @@ var HttpBridgeModuleResolver = class extends import_bridge_abstract2.AbstractBri
89
129
  static {
90
130
  __name(this, "HttpBridgeModuleResolver");
91
131
  }
132
+ _resolvedCache = new import_lru_cache.LRUCache({
133
+ max: 1e3
134
+ });
135
+ _resolvedCacheMutex = new import_async_mutex.Mutex();
92
136
  get querySender() {
93
137
  return this.params.querySender;
94
138
  }
95
139
  moduleUrl(address) {
96
140
  return new URL(address, this.params.rootUrl);
97
141
  }
98
- async resolveHandler(id, options) {
142
+ async resolveHandler(id, options, params) {
99
143
  const parentResult = await super.resolveHandler(id, options);
100
144
  if (parentResult.length > 0) {
101
145
  return parentResult;
102
146
  }
103
- if (id === "*") {
104
- return [];
105
- }
106
147
  const idParts = id.split(":");
107
- const untransformedFirstPart = (0, import_assert.assertEx)(idParts.shift(), () => `Invalid module identifier: ${id}`);
108
- const firstPart = await import_module_model.ResolveHelper.transformModuleIdentifier(untransformedFirstPart);
109
- const moduleAddress = firstPart;
110
- (0, import_assert.assertEx)((0, import_hex.isAddress)(firstPart), () => `Invalid module address: ${firstPart}`);
148
+ const untransformedFirstPart = (0, import_assert2.assertEx)(idParts.shift(), () => "Missing module identifier");
149
+ const firstPart = await import_module_model2.ResolveHelper.transformModuleIdentifier(untransformedFirstPart);
150
+ (0, import_assert2.assertEx)((0, import_hex2.isAddress)(firstPart), () => `Invalid module address: ${firstPart}`);
111
151
  const remainderParts = idParts.join(":");
112
- const params = {
113
- account: import_account.Account.randomSync(),
114
- additionalSigners: this.params.additionalSigners,
115
- archiving: this.params.archiving,
116
- config: {
117
- schema: import_module_model.ModuleConfigSchema
118
- },
119
- host: this,
120
- moduleAddress,
121
- onQuerySendFinished: this.params.onQuerySendFinished,
122
- onQuerySendStarted: this.params.onQuerySendStarted,
123
- querySender: this.querySender
124
- };
125
- this.logger?.debug(`creating HttpProxy [${moduleAddress}] ${id}`);
126
- const proxy = new HttpModuleProxy(params);
127
- if (proxy) {
152
+ const instance = await this._resolvedCacheMutex.runExclusive(async () => {
153
+ const cachedMod = this._resolvedCache.get(firstPart);
154
+ if (cachedMod) {
155
+ const result2 = idParts.length <= 0 ? cachedMod : cachedMod.resolve(remainderParts, {
156
+ ...options,
157
+ maxDepth: (options?.maxDepth ?? 5) - 1
158
+ });
159
+ return result2;
160
+ }
161
+ const account = import_account.Account.randomSync();
162
+ const finalParams = {
163
+ account,
164
+ archiving: this.params.archiving,
165
+ config: {
166
+ schema: import_module_model2.ModuleConfigSchema
167
+ },
168
+ host: this,
169
+ moduleAddress: firstPart,
170
+ onQuerySendFinished: this.params.onQuerySendFinished,
171
+ onQuerySendStarted: this.params.onQuerySendStarted,
172
+ querySender: this.params.querySender,
173
+ ...params
174
+ };
175
+ this.logger?.debug(`creating HttpProxy [${firstPart}] ${id}`);
176
+ console.log(`creating HttpProxy [${firstPart}] ${id}`);
177
+ const proxy = new HttpModuleProxy(finalParams);
128
178
  const state = await proxy.state();
129
179
  if (state) {
130
180
  const configSchema = state.find((payload) => payload.schema === import_config_payload_plugin.ConfigSchema)?.config;
131
- const config = (0, import_assert.assertEx)(state.find((payload) => payload.schema === configSchema), () => "Unable to locate config");
181
+ const config = (0, import_assert2.assertEx)(state.find((payload) => payload.schema === configSchema), () => "Unable to locate config");
132
182
  proxy.setConfig(config);
133
183
  }
134
- }
135
- await proxy.start();
136
- const wrapped = (0, import_assert.assertEx)((0, import_bridge_abstract2.wrapModuleWithType)(proxy, import_account.Account.randomSync()), () => `Failed to wrapModuleWithType [${id}]`);
137
- const instance = (0, import_assert.assertEx)((0, import_module_model.asModuleInstance)(wrapped, {}), () => `Failed to asModuleInstance [${id}]`);
138
- proxy.upResolver.add(instance);
139
- proxy.downResolver.add(instance);
140
- if (remainderParts.length > 0) {
141
- const result = await wrapped.resolve(remainderParts, options);
142
- return result ? [
143
- result
144
- ] : [];
145
- }
146
- return [
147
- instance
148
- ];
184
+ console.log(`created HttpProxy [${firstPart}] ${proxy.id}`);
185
+ await proxy.start?.();
186
+ const wrapped = (0, import_bridge_abstract2.wrapModuleWithType)(proxy, account);
187
+ (0, import_assert2.assertEx)((0, import_module_model2.asModuleInstance)(wrapped, {}), () => `Failed to asModuleInstance [${id}]`);
188
+ this._resolvedCache.set(wrapped.address, wrapped);
189
+ return wrapped;
190
+ });
191
+ const result = remainderParts.length > 0 ? await instance.resolve(remainderParts, options) : instance;
192
+ return result ? [
193
+ result
194
+ ] : [];
149
195
  }
150
196
  };
151
197
 
@@ -172,8 +218,8 @@ var HttpBridgeBase = class _HttpBridgeBase extends import_bridge_abstract3.Abstr
172
218
  static defaultMaxPayloadSizeWarning = 256 * 256;
173
219
  static maxFailureCacheSize = 1e3;
174
220
  _axios;
175
- _discoverRootsMutex = new import_async_mutex.Mutex();
176
- _failureTimeCache = new import_lru_cache.LRUCache({
221
+ _discoverRootsMutex = new import_async_mutex2.Mutex();
222
+ _failureTimeCache = new import_lru_cache2.LRUCache({
177
223
  max: _HttpBridgeBase.maxFailureCacheSize
178
224
  });
179
225
  _querySemaphore;
@@ -183,7 +229,7 @@ var HttpBridgeBase = class _HttpBridgeBase extends import_bridge_abstract3.Abstr
183
229
  return this._axios;
184
230
  }
185
231
  get clientUrl() {
186
- return (0, import_assert2.assertEx)(this.config.client?.url ?? this.config.nodeUrl, () => "No Url Set");
232
+ return (0, import_assert3.assertEx)(this.config.client?.url ?? this.config.nodeUrl, () => "No Url Set");
187
233
  }
188
234
  get failureRetryTime() {
189
235
  return this.config.failureRetryTime ?? _HttpBridgeBase.defaultFailureRetryTime;
@@ -195,7 +241,7 @@ var HttpBridgeBase = class _HttpBridgeBase extends import_bridge_abstract3.Abstr
195
241
  return this.config.maxPayloadSizeWarning ?? _HttpBridgeBase.defaultMaxPayloadSizeWarning;
196
242
  }
197
243
  get querySemaphore() {
198
- this._querySemaphore = this._querySemaphore ?? new import_async_mutex.Semaphore(this.maxConnections);
244
+ this._querySemaphore = this._querySemaphore ?? new import_async_mutex2.Semaphore(this.maxConnections);
199
245
  return this._querySemaphore;
200
246
  }
201
247
  get resolver() {
@@ -225,6 +271,23 @@ var HttpBridgeBase = class _HttpBridgeBase extends import_bridge_abstract3.Abstr
225
271
  });
226
272
  return this._resolver;
227
273
  }
274
+ async connect(id) {
275
+ const transformedId = (0, import_assert3.assertEx)(await import_module_model3.ResolveHelper.transformModuleIdentifier(id), () => `Unable to transform module identifier: ${id}`);
276
+ const existingInstance = await this.resolve(transformedId);
277
+ if (existingInstance) {
278
+ return existingInstance.address;
279
+ }
280
+ const [instance] = await this.resolver.resolveHandler(id);
281
+ return this.connectInstance(instance);
282
+ }
283
+ async disconnect(id) {
284
+ const transformedId = (0, import_assert3.assertEx)(await import_module_model3.ResolveHelper.transformModuleIdentifier(id), () => `Unable to transform module identifier: ${id}`);
285
+ const instance = await this.resolve(transformedId);
286
+ if (instance) {
287
+ this.downResolver.remove(instance.address);
288
+ return instance.address;
289
+ }
290
+ }
228
291
  exposeHandler(_id, _options) {
229
292
  throw new Error("Unsupported");
230
293
  }
@@ -238,7 +301,7 @@ var HttpBridgeBase = class _HttpBridgeBase extends import_bridge_abstract3.Abstr
238
301
  this.logger?.debug(`HttpBridge:discoverRoots.state [${state?.length}]`);
239
302
  const nodeManifest = state?.find((0, import_payload_model.isPayloadOfSchemaType)(import_manifest_model.NodeManifestPayloadSchema));
240
303
  if (nodeManifest) {
241
- const mods = (await this.resolveRootNode(nodeManifest)).filter(import_exists.exists);
304
+ const mods = (await this.resolveRootNode(nodeManifest)).filter(import_exists2.exists);
242
305
  this.logger?.debug(`HttpBridge:discoverRoots [${mods.length}]`);
243
306
  this._roots = mods;
244
307
  } else {
@@ -294,9 +357,16 @@ var HttpBridgeBase = class _HttpBridgeBase extends import_bridge_abstract3.Abstr
294
357
  unexposeHandler(_id, _options) {
295
358
  throw new Error("Unsupported");
296
359
  }
360
+ connectInstance(instance) {
361
+ if (instance) {
362
+ this.downResolver.add(instance);
363
+ this.logger?.log(`Connect: ${instance.id}`);
364
+ return instance.address;
365
+ }
366
+ }
297
367
  async getRootState() {
298
368
  const queryPayload = {
299
- schema: import_module_model2.ModuleStateQuerySchema
369
+ schema: import_module_model3.ModuleStateQuerySchema
300
370
  };
301
371
  const boundQuery = await this.bindQuery(queryPayload);
302
372
  try {
@@ -315,12 +385,14 @@ var HttpBridgeBase = class _HttpBridgeBase extends import_bridge_abstract3.Abstr
315
385
  }
316
386
  }
317
387
  async resolveRootNode(nodeManifest) {
318
- const rootModule = (0, import_assert2.assertEx)((await this.resolver.resolveHandler((0, import_assert2.assertEx)(nodeManifest.status?.address, () => "Root has no address"))).at(0), () => `Root not found [${nodeManifest.status?.address}]`);
319
- (0, import_assert2.assertEx)(rootModule.constructor.name !== "HttpModuleProxy", () => "rootModule is not a Wrapper");
388
+ const rootModule = (0, import_assert3.assertEx)((await this.resolver.resolveHandler((0, import_assert3.assertEx)(nodeManifest.status?.address, () => "Root has no address"), void 0, {
389
+ manifest: nodeManifest
390
+ })).at(0), () => `Root not found [${nodeManifest.status?.address}]`);
391
+ (0, import_assert3.assertEx)(rootModule.constructor.name !== "HttpModuleProxy", () => "rootModule is not a Wrapper");
320
392
  const rootNode = (0, import_node_model.asAttachableNodeInstance)(rootModule, "Root modules is not a node");
321
393
  if (rootNode) {
322
394
  this.logger.debug(`rootNode: ${rootNode.id}`);
323
- this.downResolver.addResolver(rootNode);
395
+ this.connectInstance(rootNode);
324
396
  return [
325
397
  rootNode
326
398
  ];
@@ -329,7 +401,7 @@ var HttpBridgeBase = class _HttpBridgeBase extends import_bridge_abstract3.Abstr
329
401
  }
330
402
  };
331
403
  HttpBridgeBase = _ts_decorate([
332
- (0, import_module_model2.creatableModule)()
404
+ (0, import_module_model3.creatableModule)()
333
405
  ], HttpBridgeBase);
334
406
 
335
407
  // src/HttpBridgeClientOnly.ts
@@ -346,6 +418,6 @@ var HttpBridge = class extends HttpBridgeBase {
346
418
  }
347
419
  };
348
420
  HttpBridge = _ts_decorate2([
349
- (0, import_module_model3.creatableModule)()
421
+ (0, import_module_model4.creatableModule)()
350
422
  ], HttpBridge);
351
423
  //# sourceMappingURL=index-browser.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index-browser.ts","../../src/HttpBridgeClientOnly.ts","../../src/HttpBridgeBase.ts","../../src/HttpBridgeConfig.ts","../../src/HttpBridgeModuleResolver.ts","../../src/ModuleProxy/ModuleProxy.ts"],"sourcesContent":["export * from './HttpBridgeClientOnly'\nexport * from './HttpBridgeConfig'\n","import { BridgeParams } from '@xyo-network/bridge-model'\nimport { AnyConfigSchema, creatableModule } from '@xyo-network/module-model'\n\nimport { HttpBridgeBase } from './HttpBridgeBase'\nimport { HttpBridgeConfig } from './HttpBridgeConfig'\n\nexport interface HttpBridgeParams extends BridgeParams<AnyConfigSchema<HttpBridgeConfig>> {}\n\n@creatableModule()\nexport class HttpBridge<TParams extends HttpBridgeParams> extends HttpBridgeBase<TParams> {}\n","import { assertEx } from '@xylabs/assert'\nimport { AxiosError, 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 { NodeManifestPayload, NodeManifestPayloadSchema } 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 { isPayloadOfSchemaType, Payload, Schema, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex, Semaphore } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport { HttpBridgeConfig, HttpBridgeConfigSchema } from './HttpBridgeConfig'\nimport { HttpBridgeModuleResolver } from './HttpBridgeModuleResolver'\nimport { BridgeQuerySender } from './ModuleProxy'\n\nexport interface HttpBridgeParams extends BridgeParams<AnyConfigSchema<HttpBridgeConfig>> {\n axios?: AxiosJson\n}\n\n@creatableModule()\nexport class HttpBridgeBase<TParams extends HttpBridgeParams> extends AbstractBridge<TParams> implements BridgeModule<TParams>, BridgeQuerySender {\n static axios = new AxiosJson()\n static override readonly configSchemas: Schema[] = [...super.configSchemas, HttpBridgeConfigSchema]\n static override readonly defaultConfigSchema: Schema = HttpBridgeConfigSchema\n static defaultFailureRetryTime = 1000 * 60\n static defaultMaxConnections = 4\n static defaultMaxPayloadSizeWarning = 256 * 256\n static maxFailureCacheSize = 1000\n\n private _axios?: AxiosJson\n private _discoverRootsMutex = new Mutex()\n private _failureTimeCache = new LRUCache<Address, number>({ max: HttpBridgeBase.maxFailureCacheSize })\n private _querySemaphore?: Semaphore\n private _resolver?: HttpBridgeModuleResolver\n\n get axios() {\n this._axios = this._axios ?? this.params.axios ?? HttpBridgeBase.axios\n return this._axios\n }\n\n get clientUrl() {\n // eslint-disable-next-line deprecation/deprecation\n return assertEx(this.config.client?.url ?? this.config.nodeUrl, () => 'No Url Set')\n }\n\n get failureRetryTime() {\n return this.config.failureRetryTime ?? HttpBridgeBase.defaultFailureRetryTime\n }\n\n get maxConnections() {\n return this.config.maxConnections ?? HttpBridgeBase.defaultMaxConnections\n }\n\n get maxPayloadSizeWarning() {\n return this.config.maxPayloadSizeWarning ?? HttpBridgeBase.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, 'module'>) => {\n forget(this.emit('querySendFinished', { module: this, ...args }))\n },\n onQuerySendStarted: (args: Omit<QuerySendStartedEventArgs, 'module'>) => {\n forget(this.emit('querySendStarted', { module: 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<WithMeta<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: NodeManifestPayload): Promise<ModuleInstance[]> {\n const rootModule = assertEx(\n (await this.resolver.resolveHandler(assertEx(nodeManifest.status?.address, () => 'Root has no address'))).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 { EmptyObject } from '@xylabs/object'\nimport { BridgeConfig } from '@xyo-network/bridge-model'\n\nexport type HttpBridgeConfigSchema = 'network.xyo.bridge.http.config'\nexport const HttpBridgeConfigSchema: HttpBridgeConfigSchema = 'network.xyo.bridge.http.config'\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 { Address, isAddress } from '@xylabs/hex'\nimport { Account } from '@xyo-network/account'\nimport { AbstractBridgeModuleResolver, BridgeModuleResolverParams, wrapModuleWithType } from '@xyo-network/bridge-abstract'\nimport { ConfigPayload, ConfigSchema } from '@xyo-network/config-payload-plugin'\nimport {\n asModuleInstance,\n ModuleConfig,\n ModuleConfigSchema,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ResolveHelper,\n} from '@xyo-network/module-model'\n\nimport { BridgeQuerySender, HttpModuleProxy, HttpModuleProxyParams } from './ModuleProxy'\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 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>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T[]> {\n const parentResult = await super.resolveHandler(id, options)\n if (parentResult.length > 0) {\n return parentResult\n }\n if (id === '*') {\n return []\n }\n const idParts = id.split(':')\n const untransformedFirstPart = assertEx(idParts.shift(), () => `Invalid module identifier: ${id}`)\n const firstPart = await ResolveHelper.transformModuleIdentifier(untransformedFirstPart)\n const moduleAddress = firstPart as Address\n assertEx(isAddress(firstPart), () => `Invalid module address: ${firstPart}`)\n const remainderParts = idParts.join(':')\n const params: HttpModuleProxyParams = {\n account: Account.randomSync(),\n additionalSigners: this.params.additionalSigners,\n archiving: this.params.archiving,\n config: { schema: ModuleConfigSchema },\n host: this,\n moduleAddress,\n onQuerySendFinished: this.params.onQuerySendFinished,\n onQuerySendStarted: this.params.onQuerySendStarted,\n querySender: this.querySender,\n }\n\n this.logger?.debug(`creating HttpProxy [${moduleAddress}] ${id}`)\n\n const proxy = new HttpModuleProxy<T, HttpModuleProxyParams>(params)\n //calling state here to get the config\n if (proxy) {\n const state = await proxy.state()\n if (state) {\n const configSchema = (state.find((payload) => payload.schema === ConfigSchema) as ConfigPayload | undefined)?.config\n const config = assertEx(\n state.find((payload) => payload.schema === configSchema),\n () => 'Unable to locate config',\n ) as ModuleConfig\n proxy.setConfig(config)\n }\n }\n\n await proxy.start()\n\n const wrapped = assertEx(wrapModuleWithType(proxy, Account.randomSync()) as unknown as T, () => `Failed to wrapModuleWithType [${id}]`)\n const instance = assertEx(asModuleInstance<T>(wrapped, {}), () => `Failed to asModuleInstance [${id}]`)\n proxy.upResolver.add(instance)\n proxy.downResolver.add(instance)\n\n if (remainderParts.length > 0) {\n const result = await wrapped.resolve<T>(remainderParts, options)\n return result ? [result] : []\n }\n\n //console.log(`resolved: ${proxy.address} [${wrapped.constructor.name}] [${as.constructor.name}]`)\n return [instance]\n }\n}\n","import { forget } from '@xylabs/forget'\nimport { Address } from '@xylabs/hex'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractModuleProxy, ModuleProxyParams } from '@xyo-network/bridge-abstract'\nimport { AttachableModuleInstance, ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model'\nimport { 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{\n static createCount = 0\n\n constructor(params: TParams) {\n HttpModuleProxy.createCount = HttpModuleProxy.createCount + 1\n if (Math.floor(HttpModuleProxy.createCount / 10) === HttpModuleProxy.createCount / 10) {\n console.log(`HttpModuleProxy.createCount: ${HttpModuleProxy.createCount}`)\n }\n super(params)\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"],"mappings":"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","names":["import_module_model","import_assert","import_forget","import_bridge_abstract","import_module_model","HttpBridgeConfigSchema","import_bridge_abstract","HttpModuleProxy","AbstractModuleProxy","createCount","constructor","params","Math","floor","console","log","proxyQueryHandler","query","payloads","archiving","isAllowedArchivingQuery","schema","forget","storeToArchivists","result","querySender","sendBridgeQuery","moduleAddress","flat","HttpBridgeModuleResolver","AbstractBridgeModuleResolver","querySender","params","moduleUrl","address","URL","rootUrl","resolveHandler","id","options","parentResult","length","idParts","split","untransformedFirstPart","assertEx","shift","firstPart","ResolveHelper","transformModuleIdentifier","moduleAddress","isAddress","remainderParts","join","account","Account","randomSync","additionalSigners","archiving","config","schema","ModuleConfigSchema","host","onQuerySendFinished","onQuerySendStarted","logger","debug","proxy","HttpModuleProxy","state","configSchema","find","payload","ConfigSchema","setConfig","start","wrapped","wrapModuleWithType","instance","asModuleInstance","upResolver","add","downResolver","result","resolve","HttpBridgeBase","AbstractBridge","axios","AxiosJson","configSchemas","HttpBridgeConfigSchema","defaultConfigSchema","defaultFailureRetryTime","defaultMaxConnections","defaultMaxPayloadSizeWarning","maxFailureCacheSize","_axios","_discoverRootsMutex","Mutex","_failureTimeCache","LRUCache","max","_querySemaphore","_resolver","params","clientUrl","assertEx","config","client","url","nodeUrl","failureRetryTime","maxConnections","maxPayloadSizeWarning","querySemaphore","Semaphore","resolver","HttpBridgeModuleResolver","additionalSigners","archiving","resolveArchivists","resolveArchivingArchivists","bind","bridge","onQuerySendFinished","args","forget","emit","module","onQuerySendStarted","querySender","root","rootUrl","wrapperAccount","account","exposeHandler","_id","_options","Error","exposedHandler","getRoots","force","runExclusive","_roots","undefined","state","getRootState","logger","debug","length","nodeManifest","find","isPayloadOfSchemaType","NodeManifestPayloadSchema","mods","resolveRootNode","filter","exists","moduleUrl","address","URL","sendBridgeQuery","targetAddress","query","payloads","lastFailureTime","get","now","Date","timeSincePreviousFailure","delete","acquire","payloadSize","JSON","stringify","warn","moduleAddress","schema","href","result","post","status","error","data","ex","toJsonString","release","unexposeHandler","queryPayload","ModuleStateQuerySchema","boundQuery","bindQuery","response","toString","errors","message","rootModule","resolveHandler","at","constructor","name","rootNode","asAttachableNodeInstance","id","downResolver","addResolver","creatableModule","HttpBridge","HttpBridgeBase","creatableModule"]}
1
+ {"version":3,"sources":["../../src/index-browser.ts","../../src/HttpBridgeClientOnly.ts","../../src/HttpBridgeBase.ts","../../src/HttpBridgeConfig.ts","../../src/HttpBridgeModuleResolver.ts","../../src/ModuleProxy/ModuleProxy.ts"],"sourcesContent":["export * from './HttpBridgeClientOnly'\nexport * from './HttpBridgeConfig'\n","import { BridgeParams } from '@xyo-network/bridge-model'\nimport { AnyConfigSchema, creatableModule } from '@xyo-network/module-model'\n\nimport { HttpBridgeBase } from './HttpBridgeBase'\nimport { HttpBridgeConfig } from './HttpBridgeConfig'\n\nexport interface HttpBridgeParams extends BridgeParams<AnyConfigSchema<HttpBridgeConfig>> {}\n\n@creatableModule()\nexport class HttpBridge<TParams extends HttpBridgeParams> extends HttpBridgeBase<TParams> {}\n","import { assertEx } from '@xylabs/assert'\nimport { AxiosError, 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 { ModuleManifestPayload, NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport {\n AnyConfigSchema,\n creatableModule,\n ModuleIdentifier,\n ModuleInstance,\n ModuleQueryResult,\n ModuleStateQuery,\n ModuleStateQuerySchema,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { asAttachableNodeInstance } from '@xyo-network/node-model'\nimport { isPayloadOfSchemaType, Payload, Schema, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex, Semaphore } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport { HttpBridgeConfig, HttpBridgeConfigSchema } from './HttpBridgeConfig'\nimport { HttpBridgeModuleResolver } from './HttpBridgeModuleResolver'\nimport { BridgeQuerySender } from './ModuleProxy'\n\nexport interface HttpBridgeParams extends BridgeParams<AnyConfigSchema<HttpBridgeConfig>> {\n axios?: AxiosJson\n}\n\n@creatableModule()\nexport class HttpBridgeBase<TParams extends HttpBridgeParams> extends AbstractBridge<TParams> implements BridgeModule<TParams>, BridgeQuerySender {\n static axios = new AxiosJson()\n static override readonly configSchemas: Schema[] = [...super.configSchemas, HttpBridgeConfigSchema]\n static override readonly defaultConfigSchema: Schema = HttpBridgeConfigSchema\n static defaultFailureRetryTime = 1000 * 60\n static defaultMaxConnections = 4\n static defaultMaxPayloadSizeWarning = 256 * 256\n static maxFailureCacheSize = 1000\n\n private _axios?: AxiosJson\n private _discoverRootsMutex = new Mutex()\n private _failureTimeCache = new LRUCache<Address, number>({ max: HttpBridgeBase.maxFailureCacheSize })\n private _querySemaphore?: Semaphore\n private _resolver?: HttpBridgeModuleResolver\n\n get axios() {\n this._axios = this._axios ?? this.params.axios ?? HttpBridgeBase.axios\n return this._axios\n }\n\n get clientUrl() {\n // eslint-disable-next-line deprecation/deprecation\n return assertEx(this.config.client?.url ?? this.config.nodeUrl, () => 'No Url Set')\n }\n\n get failureRetryTime() {\n return this.config.failureRetryTime ?? HttpBridgeBase.defaultFailureRetryTime\n }\n\n get maxConnections() {\n return this.config.maxConnections ?? HttpBridgeBase.defaultMaxConnections\n }\n\n get maxPayloadSizeWarning() {\n return this.config.maxPayloadSizeWarning ?? HttpBridgeBase.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, 'module'>) => {\n forget(this.emit('querySendFinished', { module: this, ...args }))\n },\n onQuerySendStarted: (args: Omit<QuerySendStartedEventArgs, 'module'>) => {\n forget(this.emit('querySendStarted', { module: 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 async connect(id: ModuleIdentifier): Promise<Address | undefined> {\n const transformedId = assertEx(await ResolveHelper.transformModuleIdentifier(id), () => `Unable to transform module identifier: ${id}`)\n //check if already connected\n const existingInstance = await this.resolve<ModuleInstance>(transformedId)\n if (existingInstance) {\n return existingInstance.address\n }\n\n //use the resolver to create the proxy instance\n const [instance] = await this.resolver.resolveHandler<ModuleInstance>(id)\n return this.connectInstance(instance)\n }\n\n async disconnect(id: ModuleIdentifier): Promise<Address | undefined> {\n const transformedId = assertEx(await ResolveHelper.transformModuleIdentifier(id), () => `Unable to transform module identifier: ${id}`)\n const instance = await this.resolve<ModuleInstance>(transformedId)\n if (instance) {\n this.downResolver.remove(instance.address)\n return instance.address\n }\n }\n\n 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<WithMeta<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 protected connectInstance(instance?: ModuleInstance): Address | undefined {\n if (instance) {\n this.downResolver.add(instance)\n /*if (maxDepth > 0) {\n const node = asNodeInstance(instance)\n if (node) {\n const state = await node.state()\n const children = (state?.filter(isPayloadOfSchemaType<AddressPayload>(AddressSchema)).map((s) => s.address) ?? []).filter(\n (a) => a !== instance.address,\n )\n await Promise.all(children.map((child) => this.connect(child, maxDepth - 1)))\n }\n }*/\n this.logger?.log(`Connect: ${instance.id}`)\n return instance.address\n }\n }\n\n 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.connectInstance(rootNode)\n return [rootNode]\n }\n return []\n }\n}\n","import { EmptyObject } from '@xylabs/object'\nimport { BridgeConfig } from '@xyo-network/bridge-model'\n\nexport type HttpBridgeConfigSchema = 'network.xyo.bridge.http.config'\nexport const HttpBridgeConfigSchema: HttpBridgeConfigSchema = 'network.xyo.bridge.http.config'\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 { Address, isAddress } from '@xylabs/hex'\nimport { Account } from '@xyo-network/account'\nimport { AbstractBridgeModuleResolver, BridgeModuleResolverParams, wrapModuleWithType } from '@xyo-network/bridge-abstract'\nimport { ConfigPayload, ConfigSchema } from '@xyo-network/config-payload-plugin'\nimport {\n asModuleInstance,\n ModuleConfig,\n ModuleConfigSchema,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { Mutex } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport { BridgeQuerySender, HttpModuleProxy, HttpModuleProxyParams } from './ModuleProxy'\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>({ 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 = await this._resolvedCacheMutex.runExclusive(async () => {\n const cachedMod = this._resolvedCache.get(firstPart as Address)\n if (cachedMod) {\n const result = idParts.length <= 0 ? cachedMod : cachedMod.resolve(remainderParts, { ...options, maxDepth: (options?.maxDepth ?? 5) - 1 })\n return result as T\n }\n const account = Account.randomSync()\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 console.log(`creating HttpProxy [${firstPart}] ${id}`)\n\n const proxy = new HttpModuleProxy<T, HttpModuleProxyParams>(finalParams)\n\n const state = await proxy.state()\n if (state) {\n const configSchema = (state.find((payload) => payload.schema === ConfigSchema) as ConfigPayload | undefined)?.config\n const config = assertEx(\n state.find((payload) => payload.schema === configSchema),\n () => 'Unable to locate config',\n ) as ModuleConfig\n proxy.setConfig(config)\n }\n\n console.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 { Address, isAddress } from '@xylabs/hex'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractModuleProxy, ModuleProxyParams } from '@xyo-network/bridge-abstract'\nimport {\n AttachableModuleInstance,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleQueryResult,\n ResolveHelper,\n ResolveHelperConfig,\n} from '@xyo-network/module-model'\nimport { 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{\n static createCount = 0\n\n constructor(params: TParams) {\n HttpModuleProxy.createCount = HttpModuleProxy.createCount + 1\n if (Math.floor(HttpModuleProxy.createCount / 10) === HttpModuleProxy.createCount / 10) {\n console.log(`HttpModuleProxy.createCount: ${HttpModuleProxy.createCount}`)\n }\n super(params)\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>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n /** @deprecated use '*' if trying to resolve all */\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | 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 module: this,\n transformers: this.moduleIdentifierTransformers,\n upResolver: this.upResolver,\n }\n if (idOrFilter === '*') {\n return (await this.publicChildren()) as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const parts = idOrFilter.split(':')\n const first = assertEx(parts.shift(), () => 'Missing first')\n const remainingPath = parts.join(':')\n const address =\n isAddress(first) ? first\n : this.id === first ? 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 case 'object': {\n return (await ResolveHelper.resolve(config, idOrFilter, options)).filter((mod) => mod.address !== this.address)\n }\n default: {\n return (await ResolveHelper.resolve(config, idOrFilter, options)).filter((mod) => mod.address !== this.address)\n }\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;ACCA,IAAAA,uBAAiD;;;ACDjD,IAAAC,iBAAyB;AACzB,mBAAsC;AACtC,IAAAC,iBAAuB;AACvB,IAAAC,iBAAuB;AAEvB,oBAA6B;AAI7B,IAAAC,0BAA+B;AAS/B,4BAAsF;AACtF,IAAAC,uBASO;AACP,wBAAyC;AACzC,2BAAiE;AACjE,IAAAC,sBAAiC;AACjC,IAAAC,oBAAyB;;;AC5BlB,IAAMC,yBAAiD;;;ACJ9D,IAAAC,iBAAyB;AACzB,IAAAC,cAAmC;AACnC,qBAAwB;AACxB,IAAAC,0BAA6F;AAC7F,mCAA4C;AAC5C,IAAAC,uBAQO;AACP,yBAAsB;AACtB,uBAAyB;;;ACfzB,oBAAyB;AACzB,oBAAuB;AACvB,oBAAuB;AACvB,iBAAmC;AAEnC,6BAAuD;AACvD,0BASO;AAeA,IAAMC,kBAAN,MAAMA,yBAMHC,2CAAAA;EApCV,OAoCUA;;;EAGR,OAAOC,cAAc;EAErBC,YAAYC,QAAiB;AAC3BJ,qBAAgBE,cAAcF,iBAAgBE,cAAc;AAC5D,QAAIG,KAAKC,MAAMN,iBAAgBE,cAAc,EAAA,MAAQF,iBAAgBE,cAAc,IAAI;AACrFK,cAAQC,IAAI,gCAAgCR,iBAAgBE,WAAW,EAAE;IAC3E;AACA,UAAME,MAAAA;EACR;EAEA,MAAMK,kBAAmEC,OAAUC,WAAsB,CAAA,GAAgC;AACvI,QAAI,KAAKC,aAAa,KAAKC,wBAAwBH,MAAMI,MAAM,GAAG;AAChEC,gCAAO,KAAKC,kBAAkB;QAACN;WAAWC,YAAY,CAAA;OAAI,CAAA;IAC5D;AACA,UAAMM,SAAS,MAAM,KAAKb,OAAOc,YAAYC,gBAAgB,KAAKf,OAAOgB,eAAeV,OAAOC,QAAAA;AAC/F,QAAI,KAAKC,aAAa,KAAKC,wBAAwBH,MAAMI,MAAM,GAAG;AAChEC,gCAAO,KAAKC,kBAAkBC,OAAOI,KAAI,CAAA,CAAA;IAC3C;AACA,WAAOJ;EACT;EAEA,MAAeK,iBAA4C;AACzD,YACE,MAAMC,QAAQC,IACZC,OAAOC,OAAO,MAAM,KAAKC,gBAAe,CAAA,EACrCC,OAAOC,oBAAAA,EACPC,IAAI,CAACC,YAAY,KAAKC,QAAQD,OAAAA,CAAAA,CAAAA,GAEnCH,OAAOC,oBAAAA;EACX;EASA,MAAeG,QACbC,aAAiD,KACjDC,UAAkC,CAAC,GACL;AAC9B,UAAMC,SAA8B;MAClCJ,SAAS,KAAKA;MACdK,MAAM,KAAKA;MACXC,cAAc,KAAKA;MACnBC,QAAQ,KAAKA;MACbC,QAAQ;MACRC,cAAc,KAAKC;MACnBC,YAAY,KAAKA;IACnB;AACA,QAAIT,eAAe,KAAK;AACtB,aAAQ,MAAM,KAAKX,eAAc;IACnC;AACA,YAAQ,OAAOW,YAAAA;MACb,KAAK,UAAU;AACb,cAAMU,QAAQV,WAAWW,MAAM,GAAA;AAC/B,cAAMC,YAAQC,wBAASH,MAAMI,MAAK,GAAI,MAAM,eAAA;AAC5C,cAAMC,gBAAgBL,MAAMM,KAAK,GAAA;AACjC,cAAMlB,cACJmB,sBAAUL,KAAAA,IAASA,QACjB,KAAKM,OAAON,QAAQ,KAAKd,UACzB,KAAKqB,mBAAmBP,KAAAA;AAC5B,YAAI,CAACd,QAAS,QAAOsB;AACrB,cAAMC,gBAAiB,MAAM,KAAKlD,OAAOmD,KAAKvB,QAAQD,OAAAA;AACtD,eAAQiB,gBAAgB,MAAMM,eAAetB,QAAQgB,aAAAA,IAAiBM;MACxE;MACA,KAAK,UAAU;AACb,gBAAQ,MAAME,kCAAcxB,QAAQG,QAAQF,YAAYC,OAAAA,GAAUN,OAAO,CAAC6B,QAAQA,IAAI1B,YAAY,KAAKA,OAAO;MAChH;MACA,SAAS;AACP,gBAAQ,MAAMyB,kCAAcxB,QAAQG,QAAQF,YAAYC,OAAAA,GAAUN,OAAO,CAAC6B,QAAQA,IAAI1B,YAAY,KAAKA,OAAO;MAChH;IACF;EACF;AACF;;;AD1FO,IAAM2B,2BAAN,cAEGC,qDAAAA;EA1BV,OA0BUA;;;EACEC,iBAAiB,IAAIC,0BAAkC;IAAEC,KAAK;EAAK,CAAA;EACnEC,sBAAsB,IAAIC,yBAAAA;EAEpC,IAAIC,cAAc;AAChB,WAAO,KAAKC,OAAOD;EACrB;EAEAE,UAAUC,SAAkB;AAC1B,WAAO,IAAIC,IAAID,SAAS,KAAKF,OAAOI,OAAO;EAC7C;EAEA,MAAeC,eACbC,IACAC,SACAP,QACc;AACd,UAAMQ,eAAe,MAAM,MAAMH,eAAeC,IAAIC,OAAAA;AACpD,QAAIC,aAAaC,SAAS,GAAG;AAC3B,aAAOD;IACT;AACA,UAAME,UAAUJ,GAAGK,MAAM,GAAA;AACzB,UAAMC,6BAAyBC,yBAASH,QAAQI,MAAK,GAAI,MAAM,2BAAA;AAC/D,UAAMC,YAAY,MAAMC,mCAAcC,0BAA0BL,sBAAAA;AAChEC,qCAASK,uBAAUH,SAAAA,GAAY,MAAM,2BAA2BA,SAAAA,EAAW;AAC3E,UAAMI,iBAAiBT,QAAQU,KAAK,GAAA;AACpC,UAAMC,WAAc,MAAM,KAAKxB,oBAAoByB,aAAa,YAAA;AAC9D,YAAMC,YAAY,KAAK7B,eAAe8B,IAAIT,SAAAA;AAC1C,UAAIQ,WAAW;AACb,cAAME,UAASf,QAAQD,UAAU,IAAIc,YAAYA,UAAUG,QAAQP,gBAAgB;UAAE,GAAGZ;UAASoB,WAAWpB,SAASoB,YAAY,KAAK;QAAE,CAAA;AACxI,eAAOF;MACT;AACA,YAAMG,UAAUC,uBAAQC,WAAU;AAClC,YAAMC,cAAqC;QACzCH;QACAI,WAAW,KAAKhC,OAAOgC;QACvBC,QAAQ;UAAEC,QAAQC;QAAmB;QACrCC,MAAM;QACNC,eAAetB;QACfuB,qBAAqB,KAAKtC,OAAOsC;QACjCC,oBAAoB,KAAKvC,OAAOuC;QAChCxC,aAAa,KAAKC,OAAOD;QACzB,GAAGC;MACL;AAEA,WAAKwC,QAAQC,MAAM,uBAAuB1B,SAAAA,KAAcT,EAAAA,EAAI;AAC5DoC,cAAQC,IAAI,uBAAuB5B,SAAAA,KAAcT,EAAAA,EAAI;AAErD,YAAMsC,QAAQ,IAAIC,gBAA0Cd,WAAAA;AAE5D,YAAMe,QAAQ,MAAMF,MAAME,MAAK;AAC/B,UAAIA,OAAO;AACT,cAAMC,eAAgBD,MAAME,KAAK,CAACC,YAAYA,QAAQf,WAAWgB,yCAAAA,GAA6CjB;AAC9G,cAAMA,aAASpB,yBACbiC,MAAME,KAAK,CAACC,YAAYA,QAAQf,WAAWa,YAAAA,GAC3C,MAAM,yBAAA;AAERH,cAAMO,UAAUlB,MAAAA;MAClB;AAEAS,cAAQC,IAAI,sBAAsB5B,SAAAA,KAAc6B,MAAMtC,EAAE,EAAE;AAE1D,YAAMsC,MAAMQ,QAAK;AACjB,YAAMC,cAAUC,4CAAmBV,OAAOhB,OAAAA;AAC1Cf,uCAAS0C,uCAAoBF,SAAS,CAAC,CAAA,GAAI,MAAM,+BAA+B/C,EAAAA,GAAK;AACrF,WAAKZ,eAAe8D,IAAIH,QAAQnD,SAASmD,OAAAA;AACzC,aAAOA;IACT,CAAA;AACA,UAAM5B,SAASN,eAAeV,SAAS,IAAI,MAAMY,SAASK,QAAQP,gBAAgBZ,OAAAA,IAAWc;AAC7F,WAAOI,SAAS;MAACA;QAAU,CAAA;EAC7B;AACF;;;;;;;;;;AFtDO,IAAMgC,iBAAN,MAAMA,wBAAyDC,uCAAAA;SAAAA;;;EACpE,OAAOC,QAAQ,IAAIC,uBAAAA;EACnB,OAAyBC,gBAA0B;OAAI,MAAMA;IAAeC;;EAC5E,OAAyBC,sBAA8BD;EACvD,OAAOE,0BAA0B,MAAO;EACxC,OAAOC,wBAAwB;EAC/B,OAAOC,+BAA+B,MAAM;EAC5C,OAAOC,sBAAsB;EAErBC;EACAC,sBAAsB,IAAIC,0BAAAA;EAC1BC,oBAAoB,IAAIC,2BAA0B;IAAEC,KAAKhB,gBAAeU;EAAoB,CAAA;EAC5FO;EACAC;EAER,IAAIhB,QAAQ;AACV,SAAKS,SAAS,KAAKA,UAAU,KAAKQ,OAAOjB,SAASF,gBAAeE;AACjE,WAAO,KAAKS;EACd;EAEA,IAAIS,YAAY;AAEd,eAAOC,yBAAS,KAAKC,OAAOC,QAAQC,OAAO,KAAKF,OAAOG,SAAS,MAAM,YAAA;EACxE;EAEA,IAAIC,mBAAmB;AACrB,WAAO,KAAKJ,OAAOI,oBAAoB1B,gBAAeO;EACxD;EAEA,IAAIoB,iBAAiB;AACnB,WAAO,KAAKL,OAAOK,kBAAkB3B,gBAAeQ;EACtD;EAEA,IAAIoB,wBAAwB;AAC1B,WAAO,KAAKN,OAAOM,yBAAyB5B,gBAAeS;EAC7D;EAEA,IAAIoB,iBAAiB;AACnB,SAAKZ,kBAAkB,KAAKA,mBAAmB,IAAIa,8BAAU,KAAKH,cAAc;AAChF,WAAO,KAAKV;EACd;EAEA,IAAac,WAAW;AACtB,SAAKb,YACH,KAAKA,aACL,IAAIc,yBAAyB;MAC3BC,mBAAmB,KAAKA;MACxBC,WAAW;QAAE,GAAG,KAAKA;QAAWC,mBAAmB,KAAKC,2BAA2BC,KAAK,IAAI;MAAE;MAC9FC,QAAQ;MACRC,qBAAqB,wBAACC,SAAAA;AACpBC,mCAAO,KAAKC,KAAK,qBAAqB;UAAEC,QAAQ;UAAM,GAAGH;QAAK,CAAA,CAAA;MAChE,GAFqB;MAGrBI,oBAAoB,wBAACJ,SAAAA;AACnBC,mCAAO,KAAKC,KAAK,oBAAoB;UAAEC,QAAQ;UAAM,GAAGH;QAAK,CAAA,CAAA;MAC/D,GAFoB;MAGpBK,aAAa;MACbC,MAAM;MACNC,SAAS,KAAK3B;MACd4B,gBAAgB,KAAKC;IACvB,CAAA;AACF,WAAO,KAAK/B;EACd;EAEA,MAAMgC,QAAQC,IAAoD;AAChE,UAAMC,oBAAgB/B,yBAAS,MAAMgC,mCAAcC,0BAA0BH,EAAAA,GAAK,MAAM,0CAA0CA,EAAAA,EAAI;AAEtI,UAAMI,mBAAmB,MAAM,KAAKC,QAAwBJ,aAAAA;AAC5D,QAAIG,kBAAkB;AACpB,aAAOA,iBAAiBE;IAC1B;AAGA,UAAM,CAACC,QAAAA,IAAY,MAAM,KAAK3B,SAAS4B,eAA+BR,EAAAA;AACtE,WAAO,KAAKS,gBAAgBF,QAAAA;EAC9B;EAEA,MAAMG,WAAWV,IAAoD;AACnE,UAAMC,oBAAgB/B,yBAAS,MAAMgC,mCAAcC,0BAA0BH,EAAAA,GAAK,MAAM,0CAA0CA,EAAAA,EAAI;AACtI,UAAMO,WAAW,MAAM,KAAKF,QAAwBJ,aAAAA;AACpD,QAAIM,UAAU;AACZ,WAAKI,aAAaC,OAAOL,SAASD,OAAO;AACzC,aAAOC,SAASD;IAClB;EACF;EAESO,cAAcC,KAAaC,UAA0E;AAC5G,UAAM,IAAIC,MAAM,aAAA;EAClB;EAESC,iBAAwC;AAC/C,UAAM,IAAID,MAAM,aAAA;EAClB;EAEA,MAAME,SAASC,OAA4C;AACzD,WAAO,MAAM,KAAK1D,oBAAoB2D,aAAa,YAAA;AACjD,UAAI,KAAKC,WAAWC,UAAaH,OAAO;AACtC,cAAMI,QAAQ,MAAM,KAAKC,aAAY;AACrC,aAAKC,QAAQC,MAAM,mCAAmCH,OAAOI,MAAAA,GAAS;AACtE,cAAMC,eAAeL,OAAOM,SAAKC,4CAAqDC,+CAAAA,CAAAA;AACtF,YAAIH,cAAc;AAChB,gBAAMI,QAAQ,MAAM,KAAKC,gBAAgBL,YAAAA,GAAeM,OAAOC,qBAAAA;AAC/D,eAAKV,QAAQC,MAAM,6BAA6BM,KAAKL,MAAM,GAAG;AAC9D,eAAKN,SAASW;QAChB,OAAO;AACL,eAAKX,SAAS,CAAA;QAChB;MACF;AACA,aAAO,KAAKA;IACd,CAAA;EACF;EAEAe,UAAU9B,SAAkB;AAC1B,WAAO,IAAI+B,IAAI/B,SAAS,KAAKrC,SAAS;EACxC;EAEA,MAAMqE,gBACJC,eACAC,OACAC,UACkC;AAClC,UAAMC,kBAAkB,KAAK/E,kBAAkBgF,IAAIJ,aAAAA;AACnD,QAAIG,oBAAoBpB,QAAW;AACjC,YAAMsB,MAAMC,KAAKD,IAAG;AACpB,YAAME,2BAA2BF,MAAMF;AACvC,UAAII,2BAA2B,KAAKvE,kBAAkB;AACpD,cAAM,IAAIyC,MAAM,kCAAkCuB,aAAAA,MAAmBO,wBAAAA,SAAiC;MACxG;AACA,WAAKnF,kBAAkBoF,OAAOR,aAAAA;IAChC;AACA,QAAI;AACF,YAAM,KAAK7D,eAAesE,QAAO;AACjC,YAAMC,cAAcC,KAAKC,UAAU;QAACX;QAAOC;OAAS,EAAEd;AACtD,UAAIsB,cAAc,KAAKxE,uBAAuB;AAC5C,aAAKgD,QAAQ2B,KACX,iCAAiCH,WAAAA,WAAsB,KAAK3C,OAAO,KAAK,KAAK+C,aAAa,MAAMb,MAAMc,MAAM,MAAMb,UAAUd,MAAAA,GAAS;MAEzI;AACA,YAAMS,YAAY,KAAKA,UAAUG,aAAAA,EAAegB;AAChD,YAAMC,SAAS,MAAM,KAAKzG,MAAM0G,KAA2CrB,WAAW;QAACI;QAAOC;OAAS;AACvG,UAAIe,OAAOE,WAAW,KAAK;AACzB,cAAM,4BAA4BtB,SAAAA,MAAeoB,OAAOE,MAAM;MAChE;AACA,UAAIF,OAAOE,UAAU,KAAK;AACxB,aAAKjC,QAAQkC,MAAM,uBAAuBvB,SAAAA,GAAY;AACtD,cAAM,uBAAuBA,SAAAA,MAAeoB,OAAOE,MAAM;MAC3D;AACA,aAAOF,OAAOI,MAAMA;IACtB,SAASC,IAAI;AACX,YAAMF,QAAQE;AACd,WAAKpC,QAAQkC,MAAM,cAAUG,4BAAaH,KAAAA,CAAAA,EAAQ;AAClD,YAAMA;IACR,UAAA;AACE,WAAKjF,eAAeqF,QAAO;IAC7B;EACF;EAESC,gBAAgBlD,KAAaC,UAA4E;AAChH,UAAM,IAAIC,MAAM,aAAA;EAClB;EAEUP,gBAAgBF,UAAgD;AACxE,QAAIA,UAAU;AACZ,WAAKI,aAAasD,IAAI1D,QAAAA;AAWtB,WAAKkB,QAAQyC,IAAI,YAAY3D,SAASP,EAAE,EAAE;AAC1C,aAAOO,SAASD;IAClB;EACF;EAEA,MAAckB,eAAe;AAC3B,UAAM2C,eAAiC;MAAEb,QAAQc;IAAuB;AACxE,UAAMC,aAAa,MAAM,KAAKC,UAAUH,YAAAA;AACxC,QAAI;AACF,YAAMI,WAAW,MAAM,KAAKxH,MAAM0G,KAAqC,KAAKxF,UAAUuG,SAAQ,GAAIH,UAAAA;AAClG,UAAIE,SAASb,WAAW,KAAK;AAC3B,eAAO,CAAA;MACT;AACA,YAAM,CAAA,EAAGjB,UAAUgC,MAAAA,IAAUF,SAASX,KAAKA;AAC3C,UAAIa,OAAO9C,SAAS,GAAG;AACrB,cAAM,IAAIX,MAAM,wBAAwBkC,KAAKC,UAAUsB,QAAQ,MAAM,CAAA,CAAA,EAAI;MAC3E;AACA,aAAOhC;IACT,SAASoB,IAAI;AACX,YAAMF,QAAQE;AACd,WAAKpC,QAAQ2B,KAAK,qCAAqCO,MAAMe,OAAO,KAAK,KAAKzG,SAAS,GAAG;IAC5F;EACF;EAEA,MAAcgE,gBAAgBL,cAAgE;AAC5F,UAAM+C,iBAAazG,0BAEf,MAAM,KAAKU,SAAS4B,mBAClBtC,yBAAS0D,aAAa8B,QAAQpD,SAAS,MAAM,qBAAA,GAC7CgB,QACA;MAAEsD,UAAUhD;IAAa,CAAA,GAE3BiD,GAAG,CAAA,GACL,MAAM,mBAAmBjD,aAAa8B,QAAQpD,OAAAA,GAAU;AAE1DpC,iCAASyG,WAAWG,YAAYC,SAAS,mBAAmB,MAAM,6BAAA;AAClE,UAAMC,eAAWC,4CAAyBN,YAAY,4BAAA;AACtD,QAAIK,UAAU;AACZ,WAAKvD,OAAOC,MAAM,aAAasD,SAAShF,EAAE,EAAE;AAC5C,WAAKS,gBAAgBuE,QAAAA;AACrB,aAAO;QAACA;;IACV;AACA,WAAO,CAAA;EACT;AACF;AAzNanI,iBAAAA,aAAAA;MADZqI,sCAAAA;GACYrI,cAAAA;;;;;;;;;;ADlCN,IAAMsI,aAAN,cAA2DC,eAAAA;SAAAA;;;AAAyB;AAA9ED,aAAAA,cAAAA;MADZE,sCAAAA;GACYF,UAAAA;","names":["import_module_model","import_assert","import_exists","import_forget","import_bridge_abstract","import_module_model","import_async_mutex","import_lru_cache","HttpBridgeConfigSchema","import_assert","import_hex","import_bridge_abstract","import_module_model","HttpModuleProxy","AbstractModuleProxy","createCount","constructor","params","Math","floor","console","log","proxyQueryHandler","query","payloads","archiving","isAllowedArchivingQuery","schema","forget","storeToArchivists","result","querySender","sendBridgeQuery","moduleAddress","flat","publicChildren","Promise","all","Object","values","childAddressMap","filter","exists","map","address","resolve","idOrFilter","options","config","dead","downResolver","logger","module","transformers","moduleIdentifierTransformers","upResolver","parts","split","first","assertEx","shift","remainingPath","join","isAddress","id","childAddressByName","undefined","firstInstance","host","ResolveHelper","mod","HttpBridgeModuleResolver","AbstractBridgeModuleResolver","_resolvedCache","LRUCache","max","_resolvedCacheMutex","Mutex","querySender","params","moduleUrl","address","URL","rootUrl","resolveHandler","id","options","parentResult","length","idParts","split","untransformedFirstPart","assertEx","shift","firstPart","ResolveHelper","transformModuleIdentifier","isAddress","remainderParts","join","instance","runExclusive","cachedMod","get","result","resolve","maxDepth","account","Account","randomSync","finalParams","archiving","config","schema","ModuleConfigSchema","host","moduleAddress","onQuerySendFinished","onQuerySendStarted","logger","debug","console","log","proxy","HttpModuleProxy","state","configSchema","find","payload","ConfigSchema","setConfig","start","wrapped","wrapModuleWithType","asModuleInstance","set","HttpBridgeBase","AbstractBridge","axios","AxiosJson","configSchemas","HttpBridgeConfigSchema","defaultConfigSchema","defaultFailureRetryTime","defaultMaxConnections","defaultMaxPayloadSizeWarning","maxFailureCacheSize","_axios","_discoverRootsMutex","Mutex","_failureTimeCache","LRUCache","max","_querySemaphore","_resolver","params","clientUrl","assertEx","config","client","url","nodeUrl","failureRetryTime","maxConnections","maxPayloadSizeWarning","querySemaphore","Semaphore","resolver","HttpBridgeModuleResolver","additionalSigners","archiving","resolveArchivists","resolveArchivingArchivists","bind","bridge","onQuerySendFinished","args","forget","emit","module","onQuerySendStarted","querySender","root","rootUrl","wrapperAccount","account","connect","id","transformedId","ResolveHelper","transformModuleIdentifier","existingInstance","resolve","address","instance","resolveHandler","connectInstance","disconnect","downResolver","remove","exposeHandler","_id","_options","Error","exposedHandler","getRoots","force","runExclusive","_roots","undefined","state","getRootState","logger","debug","length","nodeManifest","find","isPayloadOfSchemaType","NodeManifestPayloadSchema","mods","resolveRootNode","filter","exists","moduleUrl","URL","sendBridgeQuery","targetAddress","query","payloads","lastFailureTime","get","now","Date","timeSincePreviousFailure","delete","acquire","payloadSize","JSON","stringify","warn","moduleAddress","schema","href","result","post","status","error","data","ex","toJsonString","release","unexposeHandler","add","log","queryPayload","ModuleStateQuerySchema","boundQuery","bindQuery","response","toString","errors","message","rootModule","manifest","at","constructor","name","rootNode","asAttachableNodeInstance","creatableModule","HttpBridge","HttpBridgeBase","creatableModule"]}