@xyo-network/bridge-http 2.103.8 → 2.104.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/dist/browser/{HttpBridge.d.cts → HttpBridgeBase.d.cts} +3 -3
  2. package/dist/browser/HttpBridgeBase.d.cts.map +1 -0
  3. package/dist/browser/{HttpBridge.d.ts → HttpBridgeBase.d.mts} +3 -3
  4. package/dist/browser/HttpBridgeBase.d.mts.map +1 -0
  5. package/dist/browser/{HttpBridge.d.mts → HttpBridgeBase.d.ts} +3 -3
  6. package/dist/browser/HttpBridgeBase.d.ts.map +1 -0
  7. package/dist/browser/HttpBridgeClientOnly.d.cts +9 -0
  8. package/dist/browser/HttpBridgeClientOnly.d.cts.map +1 -0
  9. package/dist/browser/HttpBridgeClientOnly.d.mts +9 -0
  10. package/dist/browser/HttpBridgeClientOnly.d.mts.map +1 -0
  11. package/dist/browser/HttpBridgeClientOnly.d.ts +9 -0
  12. package/dist/browser/HttpBridgeClientOnly.d.ts.map +1 -0
  13. package/dist/browser/HttpBridgeConfig.d.cts +7 -0
  14. package/dist/browser/HttpBridgeConfig.d.cts.map +1 -1
  15. package/dist/browser/HttpBridgeConfig.d.mts +7 -0
  16. package/dist/browser/HttpBridgeConfig.d.mts.map +1 -1
  17. package/dist/browser/HttpBridgeConfig.d.ts +7 -0
  18. package/dist/browser/HttpBridgeConfig.d.ts.map +1 -1
  19. package/dist/browser/HttpBridgeFull.d.cts +29 -0
  20. package/dist/browser/HttpBridgeFull.d.cts.map +1 -0
  21. package/dist/browser/HttpBridgeFull.d.mts +29 -0
  22. package/dist/browser/HttpBridgeFull.d.mts.map +1 -0
  23. package/dist/browser/HttpBridgeFull.d.ts +29 -0
  24. package/dist/browser/HttpBridgeFull.d.ts.map +1 -0
  25. package/dist/browser/HttpBridgeModuleResolver.d.cts.map +1 -1
  26. package/dist/browser/HttpBridgeModuleResolver.d.mts.map +1 -1
  27. package/dist/browser/HttpBridgeModuleResolver.d.ts.map +1 -1
  28. package/dist/browser/{index.cjs → index-browser.cjs} +47 -21
  29. package/dist/browser/index-browser.cjs.map +1 -0
  30. package/dist/browser/index-browser.d.cts +3 -0
  31. package/dist/browser/index-browser.d.cts.map +1 -0
  32. package/dist/browser/index-browser.d.mts +3 -0
  33. package/dist/browser/index-browser.d.mts.map +1 -0
  34. package/dist/browser/index-browser.d.ts +3 -0
  35. package/dist/browser/index-browser.d.ts.map +1 -0
  36. package/dist/browser/{index.js → index-browser.js} +43 -17
  37. package/dist/browser/index-browser.js.map +1 -0
  38. package/dist/browser/index.d.cts +1 -1
  39. package/dist/browser/index.d.cts.map +1 -1
  40. package/dist/browser/index.d.mts +1 -1
  41. package/dist/browser/index.d.mts.map +1 -1
  42. package/dist/browser/index.d.ts +1 -1
  43. package/dist/browser/index.d.ts.map +1 -1
  44. package/dist/neutral/{HttpBridge.d.cts → HttpBridgeBase.d.cts} +3 -3
  45. package/dist/neutral/HttpBridgeBase.d.cts.map +1 -0
  46. package/dist/neutral/HttpBridgeBase.d.mts +43 -0
  47. package/dist/neutral/HttpBridgeBase.d.mts.map +1 -0
  48. package/dist/neutral/HttpBridgeBase.d.ts +43 -0
  49. package/dist/neutral/HttpBridgeBase.d.ts.map +1 -0
  50. package/dist/neutral/HttpBridgeClientOnly.d.cts +9 -0
  51. package/dist/neutral/HttpBridgeClientOnly.d.cts.map +1 -0
  52. package/dist/neutral/HttpBridgeClientOnly.d.mts +9 -0
  53. package/dist/neutral/HttpBridgeClientOnly.d.mts.map +1 -0
  54. package/dist/neutral/HttpBridgeClientOnly.d.ts +9 -0
  55. package/dist/neutral/HttpBridgeClientOnly.d.ts.map +1 -0
  56. package/dist/neutral/HttpBridgeConfig.d.cts +7 -0
  57. package/dist/neutral/HttpBridgeConfig.d.cts.map +1 -1
  58. package/dist/neutral/HttpBridgeConfig.d.mts +7 -0
  59. package/dist/neutral/HttpBridgeConfig.d.mts.map +1 -1
  60. package/dist/neutral/HttpBridgeConfig.d.ts +7 -0
  61. package/dist/neutral/HttpBridgeConfig.d.ts.map +1 -1
  62. package/dist/neutral/HttpBridgeFull.d.cts +29 -0
  63. package/dist/neutral/HttpBridgeFull.d.cts.map +1 -0
  64. package/dist/neutral/HttpBridgeFull.d.mts +29 -0
  65. package/dist/neutral/HttpBridgeFull.d.mts.map +1 -0
  66. package/dist/neutral/HttpBridgeFull.d.ts +29 -0
  67. package/dist/neutral/HttpBridgeFull.d.ts.map +1 -0
  68. package/dist/neutral/HttpBridgeModuleResolver.d.cts.map +1 -1
  69. package/dist/neutral/HttpBridgeModuleResolver.d.mts.map +1 -1
  70. package/dist/neutral/HttpBridgeModuleResolver.d.ts.map +1 -1
  71. package/dist/neutral/{index.cjs → index-browser.cjs} +47 -21
  72. package/dist/neutral/index-browser.cjs.map +1 -0
  73. package/dist/neutral/index-browser.d.cts +3 -0
  74. package/dist/neutral/index-browser.d.cts.map +1 -0
  75. package/dist/neutral/index-browser.d.mts +3 -0
  76. package/dist/neutral/index-browser.d.mts.map +1 -0
  77. package/dist/neutral/index-browser.d.ts +3 -0
  78. package/dist/neutral/index-browser.d.ts.map +1 -0
  79. package/dist/neutral/{index.js → index-browser.js} +43 -17
  80. package/dist/neutral/index-browser.js.map +1 -0
  81. package/dist/neutral/index.d.cts +1 -1
  82. package/dist/neutral/index.d.cts.map +1 -1
  83. package/dist/neutral/index.d.mts +1 -1
  84. package/dist/neutral/index.d.mts.map +1 -1
  85. package/dist/neutral/index.d.ts +1 -1
  86. package/dist/neutral/index.d.ts.map +1 -1
  87. package/dist/node/HttpBridgeBase.d.cts +43 -0
  88. package/dist/node/HttpBridgeBase.d.cts.map +1 -0
  89. package/dist/node/HttpBridgeBase.d.mts +43 -0
  90. package/dist/node/HttpBridgeBase.d.mts.map +1 -0
  91. package/dist/node/HttpBridgeBase.d.ts +43 -0
  92. package/dist/node/HttpBridgeBase.d.ts.map +1 -0
  93. package/dist/node/HttpBridgeClientOnly.d.cts +9 -0
  94. package/dist/node/HttpBridgeClientOnly.d.cts.map +1 -0
  95. package/dist/node/HttpBridgeClientOnly.d.mts +9 -0
  96. package/dist/node/HttpBridgeClientOnly.d.mts.map +1 -0
  97. package/dist/node/HttpBridgeClientOnly.d.ts +9 -0
  98. package/dist/node/HttpBridgeClientOnly.d.ts.map +1 -0
  99. package/dist/node/HttpBridgeConfig.d.cts +7 -0
  100. package/dist/node/HttpBridgeConfig.d.cts.map +1 -1
  101. package/dist/node/HttpBridgeConfig.d.mts +7 -0
  102. package/dist/node/HttpBridgeConfig.d.mts.map +1 -1
  103. package/dist/node/HttpBridgeConfig.d.ts +7 -0
  104. package/dist/node/HttpBridgeConfig.d.ts.map +1 -1
  105. package/dist/node/HttpBridgeFull.d.cts +29 -0
  106. package/dist/node/HttpBridgeFull.d.cts.map +1 -0
  107. package/dist/node/HttpBridgeFull.d.mts +29 -0
  108. package/dist/node/HttpBridgeFull.d.mts.map +1 -0
  109. package/dist/node/HttpBridgeFull.d.ts +29 -0
  110. package/dist/node/HttpBridgeFull.d.ts.map +1 -0
  111. package/dist/node/HttpBridgeModuleResolver.d.cts.map +1 -1
  112. package/dist/node/HttpBridgeModuleResolver.d.mts.map +1 -1
  113. package/dist/node/HttpBridgeModuleResolver.d.ts.map +1 -1
  114. package/dist/node/index-browser.d.cts +3 -0
  115. package/dist/node/index-browser.d.cts.map +1 -0
  116. package/dist/node/index-browser.d.mts +3 -0
  117. package/dist/node/index-browser.d.mts.map +1 -0
  118. package/dist/node/index-browser.d.ts +3 -0
  119. package/dist/node/index-browser.d.ts.map +1 -0
  120. package/dist/node/index.cjs +197 -27
  121. package/dist/node/index.cjs.map +1 -1
  122. package/dist/node/index.d.cts +1 -1
  123. package/dist/node/index.d.cts.map +1 -1
  124. package/dist/node/index.d.mts +1 -1
  125. package/dist/node/index.d.mts.map +1 -1
  126. package/dist/node/index.d.ts +1 -1
  127. package/dist/node/index.d.ts.map +1 -1
  128. package/dist/node/index.js +188 -27
  129. package/dist/node/index.js.map +1 -1
  130. package/package.json +38 -33
  131. package/src/{HttpBridge.ts → HttpBridgeBase.ts} +14 -13
  132. package/src/HttpBridgeClientOnly.ts +10 -0
  133. package/src/HttpBridgeConfig.ts +7 -0
  134. package/src/HttpBridgeFull.ts +143 -0
  135. package/src/HttpBridgeModuleResolver.ts +2 -0
  136. package/src/index-browser.ts +2 -0
  137. package/src/index.ts +1 -1
  138. package/xy.config.ts +17 -0
  139. package/dist/browser/HttpBridge.d.cts.map +0 -1
  140. package/dist/browser/HttpBridge.d.mts.map +0 -1
  141. package/dist/browser/HttpBridge.d.ts.map +0 -1
  142. package/dist/browser/index.cjs.map +0 -1
  143. package/dist/browser/index.js.map +0 -1
  144. package/dist/neutral/HttpBridge.d.cts.map +0 -1
  145. package/dist/neutral/HttpBridge.d.mts +0 -43
  146. package/dist/neutral/HttpBridge.d.mts.map +0 -1
  147. package/dist/neutral/HttpBridge.d.ts +0 -43
  148. package/dist/neutral/HttpBridge.d.ts.map +0 -1
  149. package/dist/neutral/index.cjs.map +0 -1
  150. package/dist/neutral/index.js.map +0 -1
  151. package/dist/node/HttpBridge.d.cts +0 -43
  152. package/dist/node/HttpBridge.d.cts.map +0 -1
  153. package/dist/node/HttpBridge.d.mts +0 -43
  154. package/dist/node/HttpBridge.d.mts.map +0 -1
  155. package/dist/node/HttpBridge.d.ts +0 -43
  156. package/dist/node/HttpBridge.d.ts.map +0 -1
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
@@ -19,6 +20,14 @@ var __copyProps = (to, from, except, desc) => {
19
20
  }
20
21
  return to;
21
22
  };
23
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
24
+ // If the importer is in node compatibility mode or this is not an ESM
25
+ // file that has been converted to a CommonJS file using a Babel-
26
+ // compatible transform (i.e. "__esModule" has not been set), then set
27
+ // "default" to the CommonJS "module.exports" for node compatibility.
28
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
29
+ mod
30
+ ));
22
31
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
23
32
  var __publicField = (obj, key, value) => {
24
33
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
@@ -34,7 +43,18 @@ __export(src_exports, {
34
43
  });
35
44
  module.exports = __toCommonJS(src_exports);
36
45
 
37
- // src/HttpBridge.ts
46
+ // src/HttpBridgeConfig.ts
47
+ var HttpBridgeConfigSchema = "network.xyo.bridge.http.config";
48
+
49
+ // src/HttpBridgeFull.ts
50
+ var import_assert3 = require("@xylabs/assert");
51
+ var import_exists2 = require("@xylabs/exists");
52
+ var import_object2 = require("@xylabs/object");
53
+ var import_boundwitness_model = require("@xyo-network/boundwitness-model");
54
+ var import_module_model3 = require("@xyo-network/module-model");
55
+ var import_express = __toESM(require("express"), 1);
56
+
57
+ // src/HttpBridgeBase.ts
38
58
  var import_assert2 = require("@xylabs/assert");
39
59
  var import_axios = require("@xylabs/axios");
40
60
  var import_exists = require("@xylabs/exists");
@@ -48,9 +68,6 @@ var import_payload_model = require("@xyo-network/payload-model");
48
68
  var import_async_mutex = require("async-mutex");
49
69
  var import_lru_cache = require("lru-cache");
50
70
 
51
- // src/HttpBridgeConfig.ts
52
- var HttpBridgeConfigSchema = "network.xyo.bridge.http.config";
53
-
54
71
  // src/HttpBridgeModuleResolver.ts
55
72
  var import_assert = require("@xylabs/assert");
56
73
  var import_hex = require("@xylabs/hex");
@@ -120,6 +137,8 @@ var _HttpBridgeModuleResolver = class _HttpBridgeModuleResolver extends import_b
120
137
  },
121
138
  host: this,
122
139
  moduleAddress,
140
+ onQuerySendFinished: this.params.onQuerySendFinished,
141
+ onQuerySendStarted: this.params.onQuerySendStarted,
123
142
  querySender: this.querySender
124
143
  };
125
144
  (_a = this.logger) == null ? void 0 : _a.debug(`creating HttpProxy [${moduleAddress}] ${id}`);
@@ -151,7 +170,7 @@ var _HttpBridgeModuleResolver = class _HttpBridgeModuleResolver extends import_b
151
170
  __name(_HttpBridgeModuleResolver, "HttpBridgeModuleResolver");
152
171
  var HttpBridgeModuleResolver = _HttpBridgeModuleResolver;
153
172
 
154
- // src/HttpBridge.ts
173
+ // src/HttpBridgeBase.ts
155
174
  function _ts_decorate(decorators, target, key, desc) {
156
175
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
157
176
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
@@ -163,11 +182,11 @@ function _ts_decorate(decorators, target, key, desc) {
163
182
  return c > 3 && r && Object.defineProperty(target, key, r), r;
164
183
  }
165
184
  __name(_ts_decorate, "_ts_decorate");
166
- var _HttpBridge = class _HttpBridge extends import_bridge_abstract3.AbstractBridge {
185
+ var _HttpBridgeBase = class _HttpBridgeBase extends import_bridge_abstract3.AbstractBridge {
167
186
  _axios;
168
187
  _discoverRootsMutex = new import_async_mutex.Mutex();
169
188
  _failureTimeCache = new import_lru_cache.LRUCache({
170
- max: _HttpBridge.maxFailureCacheSize
189
+ max: _HttpBridgeBase.maxFailureCacheSize
171
190
  });
172
191
  _querySemaphore;
173
192
  _resolver;
@@ -175,17 +194,18 @@ var _HttpBridge = class _HttpBridge extends import_bridge_abstract3.AbstractBrid
175
194
  this._axios = this._axios ?? new import_axios.AxiosJson();
176
195
  return this._axios;
177
196
  }
197
+ get clientUrl() {
198
+ var _a;
199
+ return (0, import_assert2.assertEx)(((_a = this.config.client) == null ? void 0 : _a.url) ?? this.config.nodeUrl, () => "No Url Set");
200
+ }
178
201
  get failureRetryTime() {
179
- return this.config.failureRetryTime ?? _HttpBridge.defaultFailureRetryTime;
202
+ return this.config.failureRetryTime ?? _HttpBridgeBase.defaultFailureRetryTime;
180
203
  }
181
204
  get maxConnections() {
182
- return this.config.maxConnections ?? _HttpBridge.defaultMaxConnections;
205
+ return this.config.maxConnections ?? _HttpBridgeBase.defaultMaxConnections;
183
206
  }
184
207
  get maxPayloadSizeWarning() {
185
- return this.config.maxPayloadSizeWarning ?? _HttpBridge.defaultMaxPayloadSizeWarning;
186
- }
187
- get nodeUrl() {
188
- return (0, import_assert2.assertEx)(this.config.nodeUrl, () => "No Url Set");
208
+ return this.config.maxPayloadSizeWarning ?? _HttpBridgeBase.defaultMaxPayloadSizeWarning;
189
209
  }
190
210
  get querySemaphore() {
191
211
  this._querySemaphore = this._querySemaphore ?? new import_async_mutex.Semaphore(this.maxConnections);
@@ -213,7 +233,7 @@ var _HttpBridge = class _HttpBridge extends import_bridge_abstract3.AbstractBrid
213
233
  },
214
234
  querySender: this,
215
235
  root: this,
216
- rootUrl: this.nodeUrl,
236
+ rootUrl: this.clientUrl,
217
237
  wrapperAccount: this.account
218
238
  });
219
239
  return this._resolver;
@@ -243,7 +263,7 @@ var _HttpBridge = class _HttpBridge extends import_bridge_abstract3.AbstractBrid
243
263
  });
244
264
  }
245
265
  moduleUrl(address) {
246
- return new URL(address, this.nodeUrl);
266
+ return new URL(address, this.clientUrl);
247
267
  }
248
268
  async sendBridgeQuery(targetAddress, query, payloads) {
249
269
  var _a, _b, _c, _d;
@@ -296,7 +316,7 @@ var _HttpBridge = class _HttpBridge extends import_bridge_abstract3.AbstractBrid
296
316
  };
297
317
  const boundQuery = await this.bindQuery(queryPayload);
298
318
  try {
299
- const response = await this.axios.post(this.nodeUrl.toString(), boundQuery);
319
+ const response = await this.axios.post(this.clientUrl.toString(), boundQuery);
300
320
  if (response.status === 404) {
301
321
  return [];
302
322
  }
@@ -307,7 +327,7 @@ var _HttpBridge = class _HttpBridge extends import_bridge_abstract3.AbstractBrid
307
327
  return payloads;
308
328
  } catch (ex) {
309
329
  const error = ex;
310
- (_a = this.logger) == null ? void 0 : _a.warn(`Unable to connect to remote node: ${error.message} [${this.nodeUrl}]`);
330
+ (_a = this.logger) == null ? void 0 : _a.warn(`Unable to connect to remote node: ${error.message} [${this.clientUrl}]`);
311
331
  }
312
332
  }
313
333
  async resolveRootNode(nodeManifest) {
@@ -328,19 +348,169 @@ var _HttpBridge = class _HttpBridge extends import_bridge_abstract3.AbstractBrid
328
348
  return [];
329
349
  }
330
350
  };
331
- __name(_HttpBridge, "HttpBridge");
332
- __publicField(_HttpBridge, "configSchemas", [
333
- ...__superGet(_HttpBridge, _HttpBridge, "configSchemas"),
351
+ __name(_HttpBridgeBase, "HttpBridgeBase");
352
+ __publicField(_HttpBridgeBase, "configSchemas", [
353
+ ...__superGet(_HttpBridgeBase, _HttpBridgeBase, "configSchemas"),
334
354
  HttpBridgeConfigSchema
335
355
  ]);
336
- __publicField(_HttpBridge, "defaultConfigSchema", HttpBridgeConfigSchema);
337
- __publicField(_HttpBridge, "defaultFailureRetryTime", 1e3 * 60);
338
- __publicField(_HttpBridge, "defaultMaxConnections", 4);
339
- __publicField(_HttpBridge, "defaultMaxPayloadSizeWarning", 256 * 256);
340
- __publicField(_HttpBridge, "maxFailureCacheSize", 1e3);
341
- var HttpBridge = _HttpBridge;
342
- HttpBridge = _ts_decorate([
356
+ __publicField(_HttpBridgeBase, "defaultConfigSchema", HttpBridgeConfigSchema);
357
+ __publicField(_HttpBridgeBase, "defaultFailureRetryTime", 1e3 * 60);
358
+ __publicField(_HttpBridgeBase, "defaultMaxConnections", 4);
359
+ __publicField(_HttpBridgeBase, "defaultMaxPayloadSizeWarning", 256 * 256);
360
+ __publicField(_HttpBridgeBase, "maxFailureCacheSize", 1e3);
361
+ var HttpBridgeBase = _HttpBridgeBase;
362
+ HttpBridgeBase = _ts_decorate([
343
363
  (0, import_module_model2.creatableModule)()
364
+ ], HttpBridgeBase);
365
+
366
+ // src/HttpBridgeFull.ts
367
+ function _ts_decorate2(decorators, target, key, desc) {
368
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
369
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
370
+ r = Reflect.decorate(decorators, target, key, desc);
371
+ else
372
+ for (var i = decorators.length - 1; i >= 0; i--)
373
+ if (d = decorators[i])
374
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
375
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
376
+ }
377
+ __name(_ts_decorate2, "_ts_decorate");
378
+ var _HttpBridge = class _HttpBridge extends HttpBridgeBase {
379
+ _app;
380
+ _exposedModules = [];
381
+ _server;
382
+ get app() {
383
+ this._app = this._app ?? (() => {
384
+ const app = (0, import_express.default)();
385
+ app.use(import_express.default.json());
386
+ app.post("/", (req, res) => {
387
+ this.handlePost(req, res);
388
+ });
389
+ return app;
390
+ })();
391
+ return this._app;
392
+ }
393
+ async exposeChild(mod, options) {
394
+ var _a, _b;
395
+ const { maxDepth = 5 } = options ?? {};
396
+ console.log(`exposeChild: ${mod.address} ${mod == null ? void 0 : mod.id} ${maxDepth}`);
397
+ (0, import_assert3.assertEx)(this.config.host, () => "Not configured as a host");
398
+ this._exposedModules.push(new WeakRef(mod));
399
+ const children = maxDepth > 0 ? await ((_a = mod.publicChildren) == null ? void 0 : _a.call(mod)) ?? [] : [];
400
+ this.logger.log(`childrenToExpose [${mod.id}][${mod.address}]: ${(0, import_object2.toJsonString)(children.map((child) => child.id))}`);
401
+ const exposedChildren = (await Promise.all(children.map((child) => this.exposeChild(child, {
402
+ maxDepth: maxDepth - 1,
403
+ required: false
404
+ })))).flat().filter(import_exists2.exists);
405
+ const allExposed = [
406
+ mod,
407
+ ...exposedChildren
408
+ ];
409
+ for (const exposedMod of allExposed)
410
+ (_b = this.logger) == null ? void 0 : _b.log(`exposed: ${exposedMod.address} [${mod.id}]`);
411
+ return allExposed;
412
+ }
413
+ async exposeHandler(address, options) {
414
+ const { required = true } = options ?? {};
415
+ const mod = await (0, import_module_model3.resolveAddressToInstanceUp)(this, address);
416
+ console.log(`exposeHandler: ${address} ${mod == null ? void 0 : mod.id}`);
417
+ if (required && !mod) {
418
+ throw new Error(`Unable to find required module: ${address}`);
419
+ }
420
+ if (mod) {
421
+ return this.exposeChild(mod, options);
422
+ }
423
+ return [];
424
+ }
425
+ exposedHandler() {
426
+ return this._exposedModules.map((ref) => {
427
+ var _a;
428
+ return (_a = ref.deref()) == null ? void 0 : _a.address;
429
+ }).filter(import_exists2.exists);
430
+ }
431
+ async startHandler() {
432
+ return await super.startHandler() && this.startHttpServer();
433
+ }
434
+ async stopHandler(_timeout) {
435
+ return await super.stopHandler() && this.stopHttpServer();
436
+ }
437
+ async unexposeHandler(address, options) {
438
+ var _a, _b;
439
+ const { maxDepth = 2, required = true } = options ?? {};
440
+ (0, import_assert3.assertEx)(this.config.host, () => "Not configured as a host");
441
+ const mod = (_a = this._exposedModules.find((ref) => {
442
+ var _a2;
443
+ return ((_a2 = ref.deref()) == null ? void 0 : _a2.address) === address;
444
+ })) == null ? void 0 : _a.deref();
445
+ (0, import_assert3.assertEx)(!required || mod, () => `Module not exposed: ${address}`);
446
+ this._exposedModules = this._exposedModules.filter((ref) => {
447
+ var _a2;
448
+ return ((_a2 = ref.deref()) == null ? void 0 : _a2.address) !== address;
449
+ });
450
+ if (mod) {
451
+ const children = maxDepth > 0 ? await ((_b = mod.publicChildren) == null ? void 0 : _b.call(mod)) ?? [] : [];
452
+ const exposedChildren = (await Promise.all(children.map((child) => this.unexposeHandler(child.address, {
453
+ maxDepth: maxDepth - 1,
454
+ required: false
455
+ })))).flat().filter(import_exists2.exists);
456
+ return [
457
+ mod,
458
+ ...exposedChildren
459
+ ];
460
+ }
461
+ return [];
462
+ }
463
+ async callLocalModule(address, query, payloads) {
464
+ var _a;
465
+ const mod = (_a = this._exposedModules.find((ref) => {
466
+ var _a2;
467
+ return ((_a2 = ref.deref()) == null ? void 0 : _a2.address) === address;
468
+ })) == null ? void 0 : _a.deref();
469
+ if (mod) {
470
+ return await mod.query(query, payloads);
471
+ }
472
+ return null;
473
+ }
474
+ handlePost(req, res) {
475
+ const allPayloads = req.body;
476
+ const query = allPayloads.find(import_boundwitness_model.isQueryBoundWitness);
477
+ const payloads = allPayloads.filter((payload) => !(0, import_boundwitness_model.isQueryBoundWitness)(payload));
478
+ this.callLocalModule(req.route, query, payloads).then((result) => {
479
+ if (result === null) {
480
+ res.status(404).json({
481
+ error: "Module not found"
482
+ });
483
+ } else {
484
+ const envelope = {
485
+ data: result
486
+ };
487
+ res.json(envelope);
488
+ }
489
+ }).catch((ex) => {
490
+ res.status(500).json({
491
+ error: ex.message
492
+ });
493
+ });
494
+ }
495
+ startHttpServer() {
496
+ var _a;
497
+ if (this.config.host) {
498
+ (0, import_assert3.assertEx)(!this._server, () => "Server already started");
499
+ this._server = this.app.listen(((_a = this.config.host) == null ? void 0 : _a.port) ?? 3030);
500
+ }
501
+ return true;
502
+ }
503
+ stopHttpServer() {
504
+ const server = (0, import_assert3.assertEx)(this._server, () => "Server not started");
505
+ server.close();
506
+ this._server = void 0;
507
+ return true;
508
+ }
509
+ };
510
+ __name(_HttpBridge, "HttpBridge");
511
+ var HttpBridge = _HttpBridge;
512
+ HttpBridge = _ts_decorate2([
513
+ (0, import_module_model3.creatableModule)()
344
514
  ], HttpBridge);
345
515
  // Annotate the CommonJS export names for ESM import in node:
346
516
  0 && (module.exports = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/HttpBridge.ts","../../src/HttpBridgeConfig.ts","../../src/HttpBridgeModuleResolver.ts","../../src/ModuleProxy/ModuleProxy.ts"],"sourcesContent":["export * from './HttpBridge'\nexport * from './HttpBridgeConfig'\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\n@creatableModule()\nexport class HttpBridge<TParams extends HttpBridgeParams> extends AbstractBridge<TParams> implements BridgeModule<TParams>, BridgeQuerySender {\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: HttpBridge.maxFailureCacheSize })\n private _querySemaphore?: Semaphore\n private _resolver?: HttpBridgeModuleResolver\n\n get axios() {\n this._axios = this._axios ?? new AxiosJson()\n return this._axios\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 nodeUrl() {\n return assertEx(this.config.nodeUrl, () => 'No Url Set')\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.nodeUrl,\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.nodeUrl)\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.nodeUrl.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.nodeUrl}]`)\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 failureRetryTime?: number\n failureTimeCacheMax?: number\n maxConnections?: number\n maxPayloadSizeWarning?: number\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 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_assert","import_forget","import_bridge_abstract","import_module_model","HttpBridgeConfigSchema","import_bridge_abstract","HttpModuleProxy","AbstractModuleProxy","constructor","params","createCount","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","logger","debug","proxy","HttpModuleProxy","state","configSchema","find","payload","ConfigSchema","setConfig","start","wrapped","wrapModuleWithType","instance","asModuleInstance","upResolver","add","downResolver","result","resolve","HttpBridge","AbstractBridge","_axios","_discoverRootsMutex","Mutex","_failureTimeCache","LRUCache","max","maxFailureCacheSize","_querySemaphore","_resolver","axios","AxiosJson","failureRetryTime","config","defaultFailureRetryTime","maxConnections","defaultMaxConnections","maxPayloadSizeWarning","defaultMaxPayloadSizeWarning","nodeUrl","assertEx","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","configSchemas","HttpBridgeConfigSchema","defaultConfigSchema","creatableModule"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/HttpBridgeConfig.ts","../../src/HttpBridgeFull.ts","../../src/HttpBridgeBase.ts","../../src/HttpBridgeModuleResolver.ts","../../src/ModuleProxy/ModuleProxy.ts"],"sourcesContent":["export * from './HttpBridgeConfig'\nexport * from './HttpBridgeFull'\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 { Server } from 'node:http'\n\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { ApiEnvelopeSuccess } from '@xyo-network/api-models'\nimport { isQueryBoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BridgeExposeOptions, BridgeParams, BridgeUnexposeOptions } from '@xyo-network/bridge-model'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleQueryResult, resolveAddressToInstanceUp } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport express, { Application, Request, Response } from 'express'\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 protected _app?: Application\n protected _exposedModules: WeakRef<ModuleInstance>[] = []\n protected _server?: Server\n\n get app() {\n this._app =\n this._app ??\n (() => {\n const app = express()\n app.use(express.json())\n\n app.post<Payload[]>('/', (req, res) => {\n this.handlePost(req, res)\n })\n\n return app\n })()\n return this._app\n }\n\n async exposeChild(mod: ModuleInstance, options?: BridgeExposeOptions | undefined): Promise<ModuleInstance[]> {\n const { maxDepth = 5 } = options ?? {}\n console.log(`exposeChild: ${mod.address} ${mod?.id} ${maxDepth}`)\n assertEx(this.config.host, () => 'Not configured as a host')\n this._exposedModules.push(new WeakRef(mod))\n const children = maxDepth > 0 ? (await mod.publicChildren?.()) ?? [] : []\n this.logger.log(`childrenToExpose [${mod.id}][${mod.address}]: ${toJsonString(children.map((child) => child.id))}`)\n const exposedChildren = (await Promise.all(children.map((child) => this.exposeChild(child, { maxDepth: maxDepth - 1, required: false }))))\n .flat()\n .filter(exists)\n const allExposed = [mod, ...exposedChildren]\n\n for (const exposedMod of allExposed) this.logger?.log(`exposed: ${exposedMod.address} [${mod.id}]`)\n\n return allExposed\n }\n\n override async exposeHandler(address: Address, options?: BridgeExposeOptions | undefined): Promise<ModuleInstance[]> {\n const { required = true } = options ?? {}\n const mod = await resolveAddressToInstanceUp(this, address)\n console.log(`exposeHandler: ${address} ${mod?.id}`)\n if (required && !mod) {\n throw new Error(`Unable to find required module: ${address}`)\n }\n if (mod) {\n return this.exposeChild(mod, options)\n }\n return []\n }\n\n override exposedHandler(): Address[] {\n return this._exposedModules.map((ref) => ref.deref()?.address).filter(exists)\n }\n\n override async startHandler(): Promise<boolean> {\n return (await super.startHandler()) && this.startHttpServer()\n }\n\n override async stopHandler(_timeout?: number | undefined): Promise<boolean> {\n return (await super.stopHandler()) && this.stopHttpServer()\n }\n\n override async unexposeHandler(address: Address, options?: BridgeUnexposeOptions | undefined): Promise<ModuleInstance[]> {\n const { maxDepth = 2, required = true } = options ?? {}\n assertEx(this.config.host, () => 'Not configured as a host')\n const mod = this._exposedModules.find((ref) => ref.deref()?.address === address)?.deref()\n assertEx(!required || mod, () => `Module not exposed: ${address}`)\n this._exposedModules = this._exposedModules.filter((ref) => ref.deref()?.address !== address)\n if (mod) {\n const children = maxDepth > 0 ? (await mod.publicChildren?.()) ?? [] : []\n const exposedChildren = (\n await Promise.all(children.map((child) => this.unexposeHandler(child.address, { maxDepth: maxDepth - 1, required: false })))\n )\n .flat()\n .filter(exists)\n return [mod, ...exposedChildren]\n }\n return []\n }\n\n protected async callLocalModule(address: Address, query: QueryBoundWitness, payloads: Payload[]): Promise<ModuleQueryResult | null> {\n const mod = this._exposedModules.find((ref) => ref.deref()?.address === address)?.deref()\n if (mod) {\n return await mod.query(query, payloads)\n }\n return null\n }\n\n protected handlePost(req: Request<Payload[]>, res: Response) {\n const allPayloads = req.body as Payload[]\n const query = allPayloads.find(isQueryBoundWitness) as QueryBoundWitness\n const payloads = allPayloads.filter((payload) => !isQueryBoundWitness(payload))\n this.callLocalModule(req.route, query, payloads)\n .then((result) => {\n if (result === null) {\n res.status(404).json({ error: 'Module not found' })\n } else {\n const envelope = {\n data: result,\n } as ApiEnvelopeSuccess<ModuleQueryResult>\n res.json(envelope)\n }\n })\n .catch((ex) => {\n res.status(500).json({ error: (ex as Error).message })\n })\n }\n\n protected startHttpServer() {\n if (this.config.host) {\n assertEx(!this._server, () => 'Server already started')\n this._server = this.app.listen(this.config.host?.port ?? 3030)\n }\n return true\n }\n\n protected stopHttpServer() {\n const server = assertEx(this._server, () => 'Server not started')\n server.close()\n this._server = undefined\n return true\n }\n}\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\n@creatableModule()\nexport class HttpBridgeBase<TParams extends HttpBridgeParams> extends AbstractBridge<TParams> implements BridgeModule<TParams>, BridgeQuerySender {\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 ?? new AxiosJson()\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 { 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;ACIO,IAAMA,yBAAiD;;;ACF9D,IAAAC,iBAAyB;AACzB,IAAAC,iBAAuB;AAEvB,IAAAC,iBAA6B;AAE7B,gCAAuD;AAEvD,IAAAC,uBAAgH;AAEhH,qBAAwD;;;ACXxD,IAAAC,iBAAyB;AACzB,mBAAsC;AACtC,oBAAuB;AACvB,IAAAC,iBAAuB;AAEvB,oBAA6B;AAI7B,IAAAC,0BAA+B;AAS/B,4BAA+D;AAC/D,IAAAC,uBAQO;AACP,wBAAyC;AACzC,2BAAiE;AACjE,yBAAiC;AACjC,uBAAyB;;;AC/BzB,oBAAyB;AACzB,iBAAmC;AACnC,qBAAwB;AACxB,IAAAC,0BAA6F;AAC7F,mCAA4C;AAC5C,0BAQO;;;ACbP,oBAAuB;AAGvB,6BAAuD;AAgBhD,IAAMC,mBAAN,MAAMA,yBAMHC,2CAAAA;EAKRC,YAAYC,QAAiB;AAC3BH,qBAAgBI,cAAcJ,iBAAgBI,cAAc;AAC5D,QAAIC,KAAKC,MAAMN,iBAAgBI,cAAc,EAAA,MAAQJ,iBAAgBI,cAAc,IAAI;AACrFG,cAAQC,IAAI,gCAAgCR,iBAAgBI,WAAW,EAAE;IAC3E;AACA,UAAMD,MAAAA;EACR;EAEA,MAAMM,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,KAAKd,OAAOe,YAAYC,gBAAgB,KAAKhB,OAAOiB,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;AACF;AAvBUhB;AAGR,cATWD,kBASJI,eAAc;AAThB,IAAMJ,kBAAN;;;ADGA,IAAMsB,4BAAN,MAAMA,kCAEHC,qDAAAA;EACR,IAAIC,cAAc;AAChB,WAAO,KAAKC,OAAOD;EACrB;EAEAE,UAAUC,SAAkB;AAC1B,WAAO,IAAIC,IAAID,SAAS,KAAKF,OAAOI,OAAO;EAC7C;EAEA,MAAeC,eAA0DC,IAAsBC,SAAgD;AAjCjJ;AAkCI,UAAMC,eAAe,MAAM,MAAMH,eAAeC,IAAIC,OAAAA;AACpD,QAAIC,aAAaC,SAAS,GAAG;AAC3B,aAAOD;IACT;AACA,QAAIF,OAAO,KAAK;AACd,aAAO,CAAA;IACT;AACA,UAAMI,UAAUJ,GAAGK,MAAM,GAAA;AACzB,UAAMC,6BAAyBC,wBAASH,QAAQI,MAAK,GAAI,MAAM,8BAA8BR,EAAAA,EAAI;AACjG,UAAMS,YAAY,MAAMC,kCAAcC,0BAA0BL,sBAAAA;AAChE,UAAMM,gBAAgBH;AACtBF,oCAASM,sBAAUJ,SAAAA,GAAY,MAAM,2BAA2BA,SAAAA,EAAW;AAC3E,UAAMK,iBAAiBV,QAAQW,KAAK,GAAA;AACpC,UAAMrB,SAAgC;MACpCsB,SAASC,uBAAQC,WAAU;MAC3BC,mBAAmB,KAAKzB,OAAOyB;MAC/BC,WAAW,KAAK1B,OAAO0B;MACvBC,QAAQ;QAAEC,QAAQC;MAAmB;MACrCC,MAAM;MACNZ;MACAa,qBAAqB,KAAK/B,OAAO+B;MACjCC,oBAAoB,KAAKhC,OAAOgC;MAChCjC,aAAa,KAAKA;IACpB;AAEA,eAAKkC,WAAL,mBAAaC,MAAM,uBAAuBhB,aAAAA,KAAkBZ,EAAAA;AAE5D,UAAM6B,QAAQ,IAAIC,gBAA0CpC,MAAAA;AAE5D,QAAImC,OAAO;AACT,YAAME,QAAQ,MAAMF,MAAME,MAAK;AAC/B,UAAIA,OAAO;AACT,cAAMC,gBAAgBD,WAAME,KAAK,CAACC,YAAYA,QAAQZ,WAAWa,yCAAAA,MAA3CJ,mBAAwFV;AAC9G,cAAMA,aAASd,wBACbwB,MAAME,KAAK,CAACC,YAAYA,QAAQZ,WAAWU,YAAAA,GAC3C,MAAM,yBAAA;AAERH,cAAMO,UAAUf,MAAAA;MAClB;IACF;AAEA,UAAMQ,MAAMQ,MAAK;AAEjB,UAAMC,cAAU/B,4BAASgC,4CAAmBV,OAAOZ,uBAAQC,WAAU,CAAA,GAAqB,MAAM,iCAAiClB,EAAAA,GAAK;AACtI,UAAMwC,eAAWjC,4BAASkC,sCAAoBH,SAAS,CAAC,CAAA,GAAI,MAAM,+BAA+BtC,EAAAA,GAAK;AACtG6B,UAAMa,WAAWC,IAAIH,QAAAA;AACrBX,UAAMe,aAAaD,IAAIH,QAAAA;AAEvB,QAAI1B,eAAeX,SAAS,GAAG;AAC7B,YAAM0C,SAAS,MAAMP,QAAQQ,QAAWhC,gBAAgBb,OAAAA;AACxD,aAAO4C,SAAS;QAACA;UAAU,CAAA;IAC7B;AAGA,WAAO;MAACL;;EACV;AACF;AAlEUhD;AAFH,IAAMD,2BAAN;;;;;;;;;;;;;;ADkBA,IAAMwD,kBAAN,MAAMA,wBAAyDC,uCAAAA;EAQ5DC;EACAC,sBAAsB,IAAIC,yBAAAA;EAC1BC,oBAAoB,IAAIC,0BAA0B;IAAEC,KAAKP,gBAAeQ;EAAoB,CAAA;EAC5FC;EACAC;EAER,IAAIC,QAAQ;AACV,SAAKT,SAAS,KAAKA,UAAU,IAAIU,uBAAAA;AACjC,WAAO,KAAKV;EACd;EAEA,IAAIW,YAAY;;AAEd,eAAOC,2BAAS,UAAKC,OAAOC,WAAZ,mBAAoBC,QAAO,KAAKF,OAAOG,SAAS,MAAM,YAAA;EACxE;EAEA,IAAIC,mBAAmB;AACrB,WAAO,KAAKJ,OAAOI,oBAAoBnB,gBAAeoB;EACxD;EAEA,IAAIC,iBAAiB;AACnB,WAAO,KAAKN,OAAOM,kBAAkBrB,gBAAesB;EACtD;EAEA,IAAIC,wBAAwB;AAC1B,WAAO,KAAKR,OAAOQ,yBAAyBvB,gBAAewB;EAC7D;EAEA,IAAIC,iBAAiB;AACnB,SAAKhB,kBAAkB,KAAKA,mBAAmB,IAAIiB,6BAAU,KAAKL,cAAc;AAChF,WAAO,KAAKZ;EACd;EAEA,IAAakB,WAAW;AACtB,SAAKjB,YACH,KAAKA,aACL,IAAIkB,yBAAyB;MAC3BC,mBAAmB,KAAKA;MACxBC,WAAW;QAAE,GAAG,KAAKA;QAAWC,mBAAmB,KAAKC,2BAA2BC,KAAK,IAAI;MAAE;MAC9FC,QAAQ;MACRC,qBAAqB,CAACC,SAAAA;AACpBC,mCAAO,KAAKC,KAAK,qBAAqB;UAAEC,QAAQ;UAAM,GAAGH;QAAK,CAAA,CAAA;MAChE;MACAI,oBAAoB,CAACJ,SAAAA;AACnBC,mCAAO,KAAKC,KAAK,oBAAoB;UAAEC,QAAQ;UAAM,GAAGH;QAAK,CAAA,CAAA;MAC/D;MACAK,aAAa;MACbC,MAAM;MACNC,SAAS,KAAK9B;MACd+B,gBAAgB,KAAKC;IACvB,CAAA;AACF,WAAO,KAAKnC;EACd;EAESoC,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,KAAKjD,oBAAoBkD,aAAa,YAAA;;AACjD,UAAI,KAAKC,WAAWC,UAAaH,OAAO;AACtC,cAAMI,QAAQ,MAAM,KAAKC,aAAY;AACrC,mBAAKC,WAAL,mBAAaC,MAAM,mCAAmCH,+BAAOI,MAAAA;AAC7D,cAAMC,eAAeL,+BAAOM,SAAKC,4CAAqDC,+CAAAA;AACtF,YAAIH,cAAc;AAChB,gBAAMI,QAAQ,MAAM,KAAKC,gBAAgBL,YAAAA,GAAeM,OAAOC,oBAAAA;AAC/D,qBAAKV,WAAL,mBAAaC,MAAM,6BAA6BM,KAAKL,MAAM;AAC3D,eAAKN,SAASW;QAChB,OAAO;AACL,eAAKX,SAAS,CAAA;QAChB;MACF;AACA,aAAO,KAAKA;IACd,CAAA;EACF;EAEAe,UAAUC,SAAkB;AAC1B,WAAO,IAAIC,IAAID,SAAS,KAAKzD,SAAS;EACxC;EAEA,MAAM2D,gBACJC,eACAC,OACAC,UACkC;;AAClC,UAAMC,kBAAkB,KAAKvE,kBAAkBwE,IAAIJ,aAAAA;AACnD,QAAIG,oBAAoBrB,QAAW;AACjC,YAAMuB,MAAMC,KAAKD,IAAG;AACpB,YAAME,2BAA2BF,MAAMF;AACvC,UAAII,2BAA2B,KAAK7D,kBAAkB;AACpD,cAAM,IAAI8B,MAAM,kCAAkCwB,aAAAA,MAAmBO,wBAAAA,SAAiC;MACxG;AACA,WAAK3E,kBAAkB4E,OAAOR,aAAAA;IAChC;AACA,QAAI;AACF,YAAM,KAAKhD,eAAeyD,QAAO;AACjC,YAAMC,cAAcC,KAAKC,UAAU;QAACX;QAAOC;OAAS,EAAEf;AACtD,UAAIuB,cAAc,KAAK5D,uBAAuB;AAC5C,mBAAKmC,WAAL,mBAAa4B,KACX,iCAAiCH,WAAAA,WAAsB,KAAKb,OAAO,KAAK,KAAKiB,aAAa,MAAMb,MAAMc,MAAM,MAAMb,qCAAUf,MAAAA;MAEhI;AACA,YAAMS,YAAY,KAAKA,UAAUI,aAAAA,EAAegB;AAChD,YAAMC,SAAS,MAAM,KAAK/E,MAAMgF,KAA2CtB,WAAW;QAACK;QAAOC;OAAS;AACvG,UAAIe,OAAOE,WAAW,KAAK;AACzB,cAAM,4BAA4BvB,SAAAA,MAAeqB,OAAOE,MAAM;MAChE;AACA,UAAIF,OAAOE,UAAU,KAAK;AACxB,mBAAKlC,WAAL,mBAAamC,MAAM,uBAAuBxB,SAAAA;AAC1C,cAAM,uBAAuBA,SAAAA,MAAeqB,OAAOE,MAAM;MAC3D;AACA,cAAOF,YAAOI,SAAPJ,mBAAaI;IACtB,SAASC,IAAI;AACX,YAAMF,QAAQE;AACd,iBAAKrC,WAAL,mBAAamC,MAAM,cAAUG,4BAAaH,KAAAA,CAAAA;AAC1C,YAAMA;IACR,UAAA;AACE,WAAKpE,eAAewE,QAAO;IAC7B;EACF;EAESC,gBAAgBnD,KAAaC,UAA4E;AAChH,UAAM,IAAIC,MAAM,aAAA;EAClB;EAEA,MAAcQ,eAAe;;AAC3B,UAAM0C,eAAiC;MAAEX,QAAQY;IAAuB;AACxE,UAAMC,aAAa,MAAM,KAAKC,UAAUH,YAAAA;AACxC,QAAI;AACF,YAAMI,WAAW,MAAM,KAAK5F,MAAMgF,KAAqC,KAAK9E,UAAU2F,SAAQ,GAAIH,UAAAA;AAClG,UAAIE,SAASX,WAAW,KAAK;AAC3B,eAAO,CAAA;MACT;AACA,YAAM,CAAA,EAAGjB,UAAU8B,MAAAA,IAAUF,SAAST,KAAKA;AAC3C,UAAIW,OAAO7C,SAAS,GAAG;AACrB,cAAM,IAAIX,MAAM,wBAAwBmC,KAAKC,UAAUoB,QAAQ,MAAM,CAAA,CAAA,EAAI;MAC3E;AACA,aAAO9B;IACT,SAASoB,IAAI;AACX,YAAMF,QAAQE;AACd,iBAAKrC,WAAL,mBAAa4B,KAAK,qCAAqCO,MAAMa,OAAO,KAAK,KAAK7F,SAAS;IACzF;EACF;EAEA,MAAcqD,gBAAgBL,cAA8D;;AAC1F,UAAM8C,iBAAa7F,0BAChB,MAAM,KAAKa,SAASiF,mBAAe9F,0BAAS+C,kBAAa+B,WAAb/B,mBAAqBS,SAAS,MAAM,qBAAA,CAAA,GAAyBuC,GAAG,CAAA,GAC7G,MAAA;;AAAM,iCAAmBhD,MAAAA,aAAa+B,WAAb/B,gBAAAA,IAAqBS,OAAAA;KAAU;AAE1DxD,iCAAS6F,WAAWG,YAAYC,SAAS,mBAAmB,MAAM,6BAAA;AAClE,UAAMC,eAAWC,4CAAyBN,YAAY,4BAAA;AACtD,QAAIK,UAAU;AACZ,WAAKtD,OAAOC,MAAM,aAAaqD,SAASE,EAAE,EAAE;AAC5C,WAAKC,aAAaC,YAAYJ,QAAAA;AAC9B,aAAO;QAACA;;IACV;AACA,WAAO,CAAA;EACT;AACF;AA1KsE/G;AACpE,cADWD,iBACcqH,iBAA0B;KAAI,6CAAMA;EAAeC;;AAC5E,cAFWtH,iBAEcuH,uBAA8BD;AACvD,cAHWtH,iBAGJoB,2BAA0B,MAAO;AACxC,cAJWpB,iBAIJsB,yBAAwB;AAC/B,cALWtB,iBAKJwB,gCAA+B,MAAM;AAC5C,cANWxB,iBAMJQ,uBAAsB;AANxB,IAAMR,iBAAN;AAAMA,iBAAAA,aAAAA;MADZwH,sCAAAA;GACYxH,cAAAA;;;;;;;;;;;;;;ADrBN,IAAMyH,cAAN,MAAMA,oBAAqDC,eAAAA;EACtDC;EACAC,kBAA6C,CAAA;EAC7CC;EAEV,IAAIC,MAAM;AACR,SAAKH,OACH,KAAKA,SACJ,MAAA;AACC,YAAMG,UAAMC,eAAAA,SAAAA;AACZD,UAAIE,IAAID,eAAAA,QAAQE,KAAI,CAAA;AAEpBH,UAAII,KAAgB,KAAK,CAACC,KAAKC,QAAAA;AAC7B,aAAKC,WAAWF,KAAKC,GAAAA;MACvB,CAAA;AAEA,aAAON;IACT,GAAA;AACF,WAAO,KAAKH;EACd;EAEA,MAAMW,YAAYC,KAAqBC,SAAsE;;AAC3G,UAAM,EAAEC,WAAW,EAAC,IAAKD,WAAW,CAAC;AACrCE,YAAQC,IAAI,gBAAgBJ,IAAIK,OAAO,IAAIL,2BAAKM,EAAAA,IAAMJ,QAAAA,EAAU;AAChEK,iCAAS,KAAKC,OAAOC,MAAM,MAAM,0BAAA;AACjC,SAAKpB,gBAAgBqB,KAAK,IAAIC,QAAQX,GAAAA,CAAAA;AACtC,UAAMY,WAAWV,WAAW,IAAK,QAAMF,SAAIa,mBAAJb,iCAA2B,CAAA,IAAK,CAAA;AACvE,SAAKc,OAAOV,IAAI,qBAAqBJ,IAAIM,EAAE,KAAKN,IAAIK,OAAO,UAAMU,6BAAaH,SAASI,IAAI,CAACC,UAAUA,MAAMX,EAAE,CAAA,CAAA,EAAI;AAClH,UAAMY,mBAAmB,MAAMC,QAAQC,IAAIR,SAASI,IAAI,CAACC,UAAU,KAAKlB,YAAYkB,OAAO;MAAEf,UAAUA,WAAW;MAAGmB,UAAU;IAAM,CAAA,CAAA,CAAA,GAClIC,KAAI,EACJC,OAAOC,qBAAAA;AACV,UAAMC,aAAa;MAACzB;SAAQkB;;AAE5B,eAAWQ,cAAcD;AAAY,iBAAKX,WAAL,mBAAaV,IAAI,YAAYsB,WAAWrB,OAAO,KAAKL,IAAIM,EAAE;AAE/F,WAAOmB;EACT;EAEA,MAAeE,cAActB,SAAkBJ,SAAsE;AACnH,UAAM,EAAEoB,WAAW,KAAI,IAAKpB,WAAW,CAAC;AACxC,UAAMD,MAAM,UAAM4B,iDAA2B,MAAMvB,OAAAA;AACnDF,YAAQC,IAAI,kBAAkBC,OAAAA,IAAWL,2BAAKM,EAAAA,EAAI;AAClD,QAAIe,YAAY,CAACrB,KAAK;AACpB,YAAM,IAAI6B,MAAM,mCAAmCxB,OAAAA,EAAS;IAC9D;AACA,QAAIL,KAAK;AACP,aAAO,KAAKD,YAAYC,KAAKC,OAAAA;IAC/B;AACA,WAAO,CAAA;EACT;EAES6B,iBAA4B;AACnC,WAAO,KAAKzC,gBAAgB2B,IAAI,CAACe,QAAAA;;AAAQA,uBAAIC,MAAK,MAATD,mBAAa1B;KAAAA,EAASkB,OAAOC,qBAAAA;EACxE;EAEA,MAAeS,eAAiC;AAC9C,WAAQ,MAAM,MAAMA,aAAAA,KAAmB,KAAKC,gBAAe;EAC7D;EAEA,MAAeC,YAAYC,UAAiD;AAC1E,WAAQ,MAAM,MAAMD,YAAAA,KAAkB,KAAKE,eAAc;EAC3D;EAEA,MAAeC,gBAAgBjC,SAAkBJ,SAAwE;;AACvH,UAAM,EAAEC,WAAW,GAAGmB,WAAW,KAAI,IAAKpB,WAAW,CAAC;AACtDM,iCAAS,KAAKC,OAAOC,MAAM,MAAM,0BAAA;AACjC,UAAMT,OAAM,UAAKX,gBAAgBkD,KAAK,CAACR,QAAAA;;AAAQA,eAAAA,MAAAA,IAAIC,MAAK,MAATD,gBAAAA,IAAa1B,aAAYA;KAAAA,MAA5D,mBAAsE2B;AAClFzB,iCAAS,CAACc,YAAYrB,KAAK,MAAM,uBAAuBK,OAAAA,EAAS;AACjE,SAAKhB,kBAAkB,KAAKA,gBAAgBkC,OAAO,CAACQ,QAAAA;;AAAQA,eAAAA,MAAAA,IAAIC,MAAK,MAATD,gBAAAA,IAAa1B,aAAYA;KAAAA;AACrF,QAAIL,KAAK;AACP,YAAMY,WAAWV,WAAW,IAAK,QAAMF,SAAIa,mBAAJb,iCAA2B,CAAA,IAAK,CAAA;AACvE,YAAMkB,mBACJ,MAAMC,QAAQC,IAAIR,SAASI,IAAI,CAACC,UAAU,KAAKqB,gBAAgBrB,MAAMZ,SAAS;QAAEH,UAAUA,WAAW;QAAGmB,UAAU;MAAM,CAAA,CAAA,CAAA,GAEvHC,KAAI,EACJC,OAAOC,qBAAAA;AACV,aAAO;QAACxB;WAAQkB;;IAClB;AACA,WAAO,CAAA;EACT;EAEA,MAAgBsB,gBAAgBnC,SAAkBoC,OAA0BC,UAAwD;;AAClI,UAAM1C,OAAM,UAAKX,gBAAgBkD,KAAK,CAACR,QAAAA;;AAAQA,eAAAA,MAAAA,IAAIC,MAAK,MAATD,gBAAAA,IAAa1B,aAAYA;KAAAA,MAA5D,mBAAsE2B;AAClF,QAAIhC,KAAK;AACP,aAAO,MAAMA,IAAIyC,MAAMA,OAAOC,QAAAA;IAChC;AACA,WAAO;EACT;EAEU5C,WAAWF,KAAyBC,KAAe;AAC3D,UAAM8C,cAAc/C,IAAIgD;AACxB,UAAMH,QAAQE,YAAYJ,KAAKM,6CAAAA;AAC/B,UAAMH,WAAWC,YAAYpB,OAAO,CAACuB,YAAY,KAACD,+CAAoBC,OAAAA,CAAAA;AACtE,SAAKN,gBAAgB5C,IAAImD,OAAON,OAAOC,QAAAA,EACpCM,KAAK,CAACC,WAAAA;AACL,UAAIA,WAAW,MAAM;AACnBpD,YAAIqD,OAAO,GAAA,EAAKxD,KAAK;UAAEyD,OAAO;QAAmB,CAAA;MACnD,OAAO;AACL,cAAMC,WAAW;UACfC,MAAMJ;QACR;AACApD,YAAIH,KAAK0D,QAAAA;MACX;IACF,CAAA,EACCE,MAAM,CAACC,OAAAA;AACN1D,UAAIqD,OAAO,GAAA,EAAKxD,KAAK;QAAEyD,OAAQI,GAAaC;MAAQ,CAAA;IACtD,CAAA;EACJ;EAEUtB,kBAAkB;;AAC1B,QAAI,KAAK1B,OAAOC,MAAM;AACpBF,mCAAS,CAAC,KAAKjB,SAAS,MAAM,wBAAA;AAC9B,WAAKA,UAAU,KAAKC,IAAIkE,SAAO,UAAKjD,OAAOC,SAAZ,mBAAkBiD,SAAQ,IAAA;IAC3D;AACA,WAAO;EACT;EAEUrB,iBAAiB;AACzB,UAAMsB,aAASpD,yBAAS,KAAKjB,SAAS,MAAM,oBAAA;AAC5CqE,WAAOC,MAAK;AACZ,SAAKtE,UAAUuE;AACf,WAAO;EACT;AACF;AA3HkE1E;AAA3D,IAAMD,aAAN;AAAMA,aAAAA,cAAAA;MADZ4E,sCAAAA;GACY5E,UAAAA;","names":["HttpBridgeConfigSchema","import_assert","import_exists","import_object","import_module_model","import_assert","import_forget","import_bridge_abstract","import_module_model","import_bridge_abstract","HttpModuleProxy","AbstractModuleProxy","constructor","params","createCount","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","_discoverRootsMutex","Mutex","_failureTimeCache","LRUCache","max","maxFailureCacheSize","_querySemaphore","_resolver","axios","AxiosJson","clientUrl","assertEx","config","client","url","nodeUrl","failureRetryTime","defaultFailureRetryTime","maxConnections","defaultMaxConnections","maxPayloadSizeWarning","defaultMaxPayloadSizeWarning","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","configSchemas","HttpBridgeConfigSchema","defaultConfigSchema","creatableModule","HttpBridge","HttpBridgeBase","_app","_exposedModules","_server","app","express","use","json","post","req","res","handlePost","exposeChild","mod","options","maxDepth","console","log","address","id","assertEx","config","host","push","WeakRef","children","publicChildren","logger","toJsonString","map","child","exposedChildren","Promise","all","required","flat","filter","exists","allExposed","exposedMod","exposeHandler","resolveAddressToInstanceUp","Error","exposedHandler","ref","deref","startHandler","startHttpServer","stopHandler","_timeout","stopHttpServer","unexposeHandler","find","callLocalModule","query","payloads","allPayloads","body","isQueryBoundWitness","payload","route","then","result","status","error","envelope","data","catch","ex","message","listen","port","server","close","undefined","creatableModule"]}
@@ -1,3 +1,3 @@
1
- export * from './HttpBridge';
2
1
  export * from './HttpBridgeConfig';
2
+ export * from './HttpBridgeFull';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA"}
@@ -1,3 +1,3 @@
1
- export * from './HttpBridge';
2
1
  export * from './HttpBridgeConfig';
2
+ export * from './HttpBridgeFull';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA"}
@@ -1,3 +1,3 @@
1
- export * from './HttpBridge';
2
1
  export * from './HttpBridgeConfig';
2
+ export * from './HttpBridgeFull';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA"}