@xyo-network/bridge-http 2.111.3 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/dist/browser/index-browser.d.ts +105 -3
  2. package/dist/neutral/index-browser.d.ts +105 -3
  3. package/dist/node/index.d.ts +128 -3
  4. package/dist/node/index.mjs +55 -85
  5. package/dist/node/index.mjs.map +1 -1
  6. package/package.json +24 -33
  7. package/dist/browser/HttpBridgeBase.d.cts +0 -45
  8. package/dist/browser/HttpBridgeBase.d.cts.map +0 -1
  9. package/dist/browser/HttpBridgeBase.d.mts +0 -45
  10. package/dist/browser/HttpBridgeBase.d.mts.map +0 -1
  11. package/dist/browser/HttpBridgeBase.d.ts +0 -45
  12. package/dist/browser/HttpBridgeBase.d.ts.map +0 -1
  13. package/dist/browser/HttpBridgeClientOnly.d.cts +0 -9
  14. package/dist/browser/HttpBridgeClientOnly.d.cts.map +0 -1
  15. package/dist/browser/HttpBridgeClientOnly.d.mts +0 -9
  16. package/dist/browser/HttpBridgeClientOnly.d.mts.map +0 -1
  17. package/dist/browser/HttpBridgeClientOnly.d.ts +0 -9
  18. package/dist/browser/HttpBridgeClientOnly.d.ts.map +0 -1
  19. package/dist/browser/HttpBridgeConfig.d.cts +0 -19
  20. package/dist/browser/HttpBridgeConfig.d.cts.map +0 -1
  21. package/dist/browser/HttpBridgeConfig.d.mts +0 -19
  22. package/dist/browser/HttpBridgeConfig.d.mts.map +0 -1
  23. package/dist/browser/HttpBridgeConfig.d.ts +0 -19
  24. package/dist/browser/HttpBridgeConfig.d.ts.map +0 -1
  25. package/dist/browser/HttpBridgeFull.d.cts +0 -35
  26. package/dist/browser/HttpBridgeFull.d.cts.map +0 -1
  27. package/dist/browser/HttpBridgeFull.d.mts +0 -35
  28. package/dist/browser/HttpBridgeFull.d.mts.map +0 -1
  29. package/dist/browser/HttpBridgeFull.d.ts +0 -35
  30. package/dist/browser/HttpBridgeFull.d.ts.map +0 -1
  31. package/dist/browser/HttpBridgeModuleResolver.d.cts +0 -32
  32. package/dist/browser/HttpBridgeModuleResolver.d.cts.map +0 -1
  33. package/dist/browser/HttpBridgeModuleResolver.d.mts +0 -32
  34. package/dist/browser/HttpBridgeModuleResolver.d.mts.map +0 -1
  35. package/dist/browser/HttpBridgeModuleResolver.d.ts +0 -32
  36. package/dist/browser/HttpBridgeModuleResolver.d.ts.map +0 -1
  37. package/dist/browser/ModuleProxy/ModuleProxy.d.cts +0 -27
  38. package/dist/browser/ModuleProxy/ModuleProxy.d.cts.map +0 -1
  39. package/dist/browser/ModuleProxy/ModuleProxy.d.mts +0 -27
  40. package/dist/browser/ModuleProxy/ModuleProxy.d.mts.map +0 -1
  41. package/dist/browser/ModuleProxy/ModuleProxy.d.ts +0 -27
  42. package/dist/browser/ModuleProxy/ModuleProxy.d.ts.map +0 -1
  43. package/dist/browser/ModuleProxy/index.d.cts +0 -2
  44. package/dist/browser/ModuleProxy/index.d.cts.map +0 -1
  45. package/dist/browser/ModuleProxy/index.d.mts +0 -2
  46. package/dist/browser/ModuleProxy/index.d.mts.map +0 -1
  47. package/dist/browser/ModuleProxy/index.d.ts +0 -2
  48. package/dist/browser/ModuleProxy/index.d.ts.map +0 -1
  49. package/dist/browser/index-browser.cjs +0 -416
  50. package/dist/browser/index-browser.cjs.map +0 -1
  51. package/dist/browser/index-browser.d.cts +0 -3
  52. package/dist/browser/index-browser.d.cts.map +0 -1
  53. package/dist/browser/index-browser.d.mts +0 -3
  54. package/dist/browser/index-browser.d.mts.map +0 -1
  55. package/dist/browser/index-browser.d.ts.map +0 -1
  56. package/dist/browser/index.d.cts +0 -3
  57. package/dist/browser/index.d.cts.map +0 -1
  58. package/dist/browser/index.d.mts +0 -3
  59. package/dist/browser/index.d.mts.map +0 -1
  60. package/dist/browser/index.d.ts +0 -3
  61. package/dist/browser/index.d.ts.map +0 -1
  62. package/dist/neutral/HttpBridgeBase.d.cts +0 -45
  63. package/dist/neutral/HttpBridgeBase.d.cts.map +0 -1
  64. package/dist/neutral/HttpBridgeBase.d.mts +0 -45
  65. package/dist/neutral/HttpBridgeBase.d.mts.map +0 -1
  66. package/dist/neutral/HttpBridgeBase.d.ts +0 -45
  67. package/dist/neutral/HttpBridgeBase.d.ts.map +0 -1
  68. package/dist/neutral/HttpBridgeClientOnly.d.cts +0 -9
  69. package/dist/neutral/HttpBridgeClientOnly.d.cts.map +0 -1
  70. package/dist/neutral/HttpBridgeClientOnly.d.mts +0 -9
  71. package/dist/neutral/HttpBridgeClientOnly.d.mts.map +0 -1
  72. package/dist/neutral/HttpBridgeClientOnly.d.ts +0 -9
  73. package/dist/neutral/HttpBridgeClientOnly.d.ts.map +0 -1
  74. package/dist/neutral/HttpBridgeConfig.d.cts +0 -19
  75. package/dist/neutral/HttpBridgeConfig.d.cts.map +0 -1
  76. package/dist/neutral/HttpBridgeConfig.d.mts +0 -19
  77. package/dist/neutral/HttpBridgeConfig.d.mts.map +0 -1
  78. package/dist/neutral/HttpBridgeConfig.d.ts +0 -19
  79. package/dist/neutral/HttpBridgeConfig.d.ts.map +0 -1
  80. package/dist/neutral/HttpBridgeFull.d.cts +0 -35
  81. package/dist/neutral/HttpBridgeFull.d.cts.map +0 -1
  82. package/dist/neutral/HttpBridgeFull.d.mts +0 -35
  83. package/dist/neutral/HttpBridgeFull.d.mts.map +0 -1
  84. package/dist/neutral/HttpBridgeFull.d.ts +0 -35
  85. package/dist/neutral/HttpBridgeFull.d.ts.map +0 -1
  86. package/dist/neutral/HttpBridgeModuleResolver.d.cts +0 -32
  87. package/dist/neutral/HttpBridgeModuleResolver.d.cts.map +0 -1
  88. package/dist/neutral/HttpBridgeModuleResolver.d.mts +0 -32
  89. package/dist/neutral/HttpBridgeModuleResolver.d.mts.map +0 -1
  90. package/dist/neutral/HttpBridgeModuleResolver.d.ts +0 -32
  91. package/dist/neutral/HttpBridgeModuleResolver.d.ts.map +0 -1
  92. package/dist/neutral/ModuleProxy/ModuleProxy.d.cts +0 -27
  93. package/dist/neutral/ModuleProxy/ModuleProxy.d.cts.map +0 -1
  94. package/dist/neutral/ModuleProxy/ModuleProxy.d.mts +0 -27
  95. package/dist/neutral/ModuleProxy/ModuleProxy.d.mts.map +0 -1
  96. package/dist/neutral/ModuleProxy/ModuleProxy.d.ts +0 -27
  97. package/dist/neutral/ModuleProxy/ModuleProxy.d.ts.map +0 -1
  98. package/dist/neutral/ModuleProxy/index.d.cts +0 -2
  99. package/dist/neutral/ModuleProxy/index.d.cts.map +0 -1
  100. package/dist/neutral/ModuleProxy/index.d.mts +0 -2
  101. package/dist/neutral/ModuleProxy/index.d.mts.map +0 -1
  102. package/dist/neutral/ModuleProxy/index.d.ts +0 -2
  103. package/dist/neutral/ModuleProxy/index.d.ts.map +0 -1
  104. package/dist/neutral/index-browser.cjs +0 -416
  105. package/dist/neutral/index-browser.cjs.map +0 -1
  106. package/dist/neutral/index-browser.d.cts +0 -3
  107. package/dist/neutral/index-browser.d.cts.map +0 -1
  108. package/dist/neutral/index-browser.d.mts +0 -3
  109. package/dist/neutral/index-browser.d.mts.map +0 -1
  110. package/dist/neutral/index-browser.d.ts.map +0 -1
  111. package/dist/neutral/index.d.cts +0 -3
  112. package/dist/neutral/index.d.cts.map +0 -1
  113. package/dist/neutral/index.d.mts +0 -3
  114. package/dist/neutral/index.d.mts.map +0 -1
  115. package/dist/neutral/index.d.ts +0 -3
  116. package/dist/neutral/index.d.ts.map +0 -1
  117. package/dist/node/HttpBridgeBase.d.cts +0 -45
  118. package/dist/node/HttpBridgeBase.d.cts.map +0 -1
  119. package/dist/node/HttpBridgeBase.d.mts +0 -45
  120. package/dist/node/HttpBridgeBase.d.mts.map +0 -1
  121. package/dist/node/HttpBridgeBase.d.ts +0 -45
  122. package/dist/node/HttpBridgeBase.d.ts.map +0 -1
  123. package/dist/node/HttpBridgeClientOnly.d.cts +0 -9
  124. package/dist/node/HttpBridgeClientOnly.d.cts.map +0 -1
  125. package/dist/node/HttpBridgeClientOnly.d.mts +0 -9
  126. package/dist/node/HttpBridgeClientOnly.d.mts.map +0 -1
  127. package/dist/node/HttpBridgeClientOnly.d.ts +0 -9
  128. package/dist/node/HttpBridgeClientOnly.d.ts.map +0 -1
  129. package/dist/node/HttpBridgeConfig.d.cts +0 -19
  130. package/dist/node/HttpBridgeConfig.d.cts.map +0 -1
  131. package/dist/node/HttpBridgeConfig.d.mts +0 -19
  132. package/dist/node/HttpBridgeConfig.d.mts.map +0 -1
  133. package/dist/node/HttpBridgeConfig.d.ts +0 -19
  134. package/dist/node/HttpBridgeConfig.d.ts.map +0 -1
  135. package/dist/node/HttpBridgeFull.d.cts +0 -35
  136. package/dist/node/HttpBridgeFull.d.cts.map +0 -1
  137. package/dist/node/HttpBridgeFull.d.mts +0 -35
  138. package/dist/node/HttpBridgeFull.d.mts.map +0 -1
  139. package/dist/node/HttpBridgeFull.d.ts +0 -35
  140. package/dist/node/HttpBridgeFull.d.ts.map +0 -1
  141. package/dist/node/HttpBridgeModuleResolver.d.cts +0 -32
  142. package/dist/node/HttpBridgeModuleResolver.d.cts.map +0 -1
  143. package/dist/node/HttpBridgeModuleResolver.d.mts +0 -32
  144. package/dist/node/HttpBridgeModuleResolver.d.mts.map +0 -1
  145. package/dist/node/HttpBridgeModuleResolver.d.ts +0 -32
  146. package/dist/node/HttpBridgeModuleResolver.d.ts.map +0 -1
  147. package/dist/node/ModuleProxy/ModuleProxy.d.cts +0 -27
  148. package/dist/node/ModuleProxy/ModuleProxy.d.cts.map +0 -1
  149. package/dist/node/ModuleProxy/ModuleProxy.d.mts +0 -27
  150. package/dist/node/ModuleProxy/ModuleProxy.d.mts.map +0 -1
  151. package/dist/node/ModuleProxy/ModuleProxy.d.ts +0 -27
  152. package/dist/node/ModuleProxy/ModuleProxy.d.ts.map +0 -1
  153. package/dist/node/ModuleProxy/index.d.cts +0 -2
  154. package/dist/node/ModuleProxy/index.d.cts.map +0 -1
  155. package/dist/node/ModuleProxy/index.d.mts +0 -2
  156. package/dist/node/ModuleProxy/index.d.mts.map +0 -1
  157. package/dist/node/ModuleProxy/index.d.ts +0 -2
  158. package/dist/node/ModuleProxy/index.d.ts.map +0 -1
  159. package/dist/node/index-browser.d.cts +0 -3
  160. package/dist/node/index-browser.d.cts.map +0 -1
  161. package/dist/node/index-browser.d.mts +0 -3
  162. package/dist/node/index-browser.d.mts.map +0 -1
  163. package/dist/node/index-browser.d.ts +0 -3
  164. package/dist/node/index-browser.d.ts.map +0 -1
  165. package/dist/node/index.cjs +0 -631
  166. package/dist/node/index.cjs.map +0 -1
  167. package/dist/node/index.d.cts +0 -3
  168. package/dist/node/index.d.cts.map +0 -1
  169. package/dist/node/index.d.mts +0 -3
  170. package/dist/node/index.d.mts.map +0 -1
  171. package/dist/node/index.d.ts.map +0 -1
@@ -1,10 +1,5 @@
1
1
  var __defProp = Object.defineProperty;
2
- var __getProtoOf = Object.getPrototypeOf;
3
- var __reflectGet = Reflect.get;
4
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
7
- var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
8
3
 
9
4
  // src/HttpBridgeConfig.ts
10
5
  var HttpBridgeConfigSchema = "network.xyo.bridge.http.config";
@@ -50,7 +45,11 @@ import { forget } from "@xylabs/forget";
50
45
  import { isAddress } from "@xylabs/hex";
51
46
  import { AbstractModuleProxy } from "@xyo-network/bridge-abstract";
52
47
  import { ResolveHelper } from "@xyo-network/module-model";
53
- var _HttpModuleProxy = class _HttpModuleProxy extends AbstractModuleProxy {
48
+ var HttpModuleProxy = class _HttpModuleProxy extends AbstractModuleProxy {
49
+ static {
50
+ __name(this, "HttpModuleProxy");
51
+ }
52
+ static createCount = 0;
54
53
  constructor(params) {
55
54
  _HttpModuleProxy.createCount = _HttpModuleProxy.createCount + 1;
56
55
  super(params);
@@ -98,7 +97,7 @@ var _HttpModuleProxy = class _HttpModuleProxy extends AbstractModuleProxy {
98
97
  const address = isAddress(first) ? first : this.id === first ? this.address : this.childAddressByName(first);
99
98
  if (!address) return void 0;
100
99
  const firstInstance = await this.params.host.resolve(address);
101
- return remainingPath ? await (firstInstance == null ? void 0 : firstInstance.resolve(remainingPath)) : firstInstance;
100
+ return remainingPath ? await firstInstance?.resolve(remainingPath) : firstInstance;
102
101
  }
103
102
  case "object": {
104
103
  return (await ResolveHelper.resolve(config, idOrFilter, options)).filter((mod) => mod.address !== this.address);
@@ -109,15 +108,15 @@ var _HttpModuleProxy = class _HttpModuleProxy extends AbstractModuleProxy {
109
108
  }
110
109
  }
111
110
  };
112
- __name(_HttpModuleProxy, "HttpModuleProxy");
113
- __publicField(_HttpModuleProxy, "createCount", 0);
114
- var HttpModuleProxy = _HttpModuleProxy;
115
111
 
116
112
  // src/HttpBridgeModuleResolver.ts
117
113
  var NotFoundModule = {
118
114
  notFound: true
119
115
  };
120
- var _HttpBridgeModuleResolver = class _HttpBridgeModuleResolver extends AbstractBridgeModuleResolver {
116
+ var HttpBridgeModuleResolver = class extends AbstractBridgeModuleResolver {
117
+ static {
118
+ __name(this, "HttpBridgeModuleResolver");
119
+ }
121
120
  _resolvedCache = new LRUCache({
122
121
  max: 1e3
123
122
  });
@@ -139,13 +138,12 @@ var _HttpBridgeModuleResolver = class _HttpBridgeModuleResolver extends Abstract
139
138
  assertEx2(isAddress2(firstPart), () => `Invalid module address: ${firstPart}`);
140
139
  const remainderParts = idParts.join(":");
141
140
  const instance = await this._resolvedCacheMutex.runExclusive(async () => {
142
- var _a, _b, _c, _d, _e;
143
141
  const cachedMod = this._resolvedCache.get(firstPart);
144
142
  if (cachedMod) {
145
143
  if (isModuleInstance(cachedMod)) {
146
144
  const result2 = idParts.length <= 0 ? cachedMod : cachedMod.resolve(remainderParts, {
147
145
  ...options,
148
- maxDepth: ((options == null ? void 0 : options.maxDepth) ?? 5) - 1
146
+ maxDepth: (options?.maxDepth ?? 5) - 1
149
147
  });
150
148
  return result2;
151
149
  } else {
@@ -166,37 +164,35 @@ var _HttpBridgeModuleResolver = class _HttpBridgeModuleResolver extends Abstract
166
164
  querySender: this.params.querySender,
167
165
  ...params
168
166
  };
169
- (_a = this.logger) == null ? void 0 : _a.debug(`creating HttpProxy [${firstPart}] ${id}`);
167
+ this.logger?.debug(`creating HttpProxy [${firstPart}] ${id}`);
170
168
  const proxy = new HttpModuleProxy(finalParams);
171
169
  let state;
172
170
  try {
173
171
  state = await proxy.state();
174
172
  } catch (ex) {
175
173
  const error = ex;
176
- (_b = this.logger) == null ? void 0 : _b.log(error.message);
174
+ this.logger?.log(error.message);
177
175
  }
178
176
  if (!state) {
179
177
  this._resolvedCache.set(firstPart, NotFoundModule);
180
178
  return;
181
179
  }
182
- const configSchema = (_c = state.find((payload) => payload.schema === ConfigSchema)) == null ? void 0 : _c.config;
180
+ const configSchema = state.find((payload) => payload.schema === ConfigSchema)?.config;
183
181
  const config = assertEx2(state.find((payload) => payload.schema === configSchema), () => "Unable to locate config");
184
182
  proxy.setConfig(config);
185
- (_d = this.logger) == null ? void 0 : _d.log(`created HttpProxy [${firstPart}] ${proxy.id}`);
186
- await ((_e = proxy.start) == null ? void 0 : _e.call(proxy));
183
+ this.logger?.log(`created HttpProxy [${firstPart}] ${proxy.id}`);
184
+ await proxy.start?.();
187
185
  const wrapped = wrapModuleWithType(proxy, account);
188
186
  assertEx2(asModuleInstance(wrapped, {}), () => `Failed to asModuleInstance [${id}]`);
189
187
  this._resolvedCache.set(wrapped.address, wrapped);
190
188
  return wrapped;
191
189
  });
192
- const result = remainderParts.length > 0 ? await (instance == null ? void 0 : instance.resolve(remainderParts, options)) : instance;
190
+ const result = remainderParts.length > 0 ? await instance?.resolve(remainderParts, options) : instance;
193
191
  return result ? [
194
192
  result
195
193
  ] : [];
196
194
  }
197
195
  };
198
- __name(_HttpBridgeModuleResolver, "HttpBridgeModuleResolver");
199
- var HttpBridgeModuleResolver = _HttpBridgeModuleResolver;
200
196
 
201
197
  // src/HttpBridgeBase.ts
202
198
  function _ts_decorate(decorators, target, key, desc) {
@@ -206,7 +202,20 @@ function _ts_decorate(decorators, target, key, desc) {
206
202
  return c > 3 && r && Object.defineProperty(target, key, r), r;
207
203
  }
208
204
  __name(_ts_decorate, "_ts_decorate");
209
- var _HttpBridgeBase = class _HttpBridgeBase extends AbstractBridge {
205
+ var HttpBridgeBase = class _HttpBridgeBase extends AbstractBridge {
206
+ static {
207
+ __name(this, "HttpBridgeBase");
208
+ }
209
+ static axios = new AxiosJson();
210
+ static configSchemas = [
211
+ ...super.configSchemas,
212
+ HttpBridgeConfigSchema
213
+ ];
214
+ static defaultConfigSchema = HttpBridgeConfigSchema;
215
+ static defaultFailureRetryTime = 1e3 * 60;
216
+ static defaultMaxConnections = 4;
217
+ static defaultMaxPayloadSizeWarning = 256 * 256;
218
+ static maxFailureCacheSize = 1e3;
210
219
  _axios;
211
220
  _discoverRootsMutex = new Mutex2();
212
221
  _failureTimeCache = new LRUCache2({
@@ -219,8 +228,7 @@ var _HttpBridgeBase = class _HttpBridgeBase extends AbstractBridge {
219
228
  return this._axios;
220
229
  }
221
230
  get clientUrl() {
222
- var _a;
223
- return assertEx3(((_a = this.config.client) == null ? void 0 : _a.url) ?? this.config.nodeUrl, () => "No Url Set");
231
+ return assertEx3(this.config.client?.url ?? this.config.nodeUrl, () => "No Url Set");
224
232
  }
225
233
  get failureRetryTime() {
226
234
  return this.config.failureRetryTime ?? _HttpBridgeBase.defaultFailureRetryTime;
@@ -270,14 +278,13 @@ var _HttpBridgeBase = class _HttpBridgeBase extends AbstractBridge {
270
278
  }
271
279
  async getRoots(force) {
272
280
  return await this._discoverRootsMutex.runExclusive(async () => {
273
- var _a, _b;
274
281
  if (this._roots === void 0 || force) {
275
282
  const state = await this.getRootState();
276
- (_a = this.logger) == null ? void 0 : _a.debug(`HttpBridge:discoverRoots.state [${state == null ? void 0 : state.length}]`);
277
- const nodeManifest = state == null ? void 0 : state.find(isPayloadOfSchemaType(NodeManifestPayloadSchema));
283
+ this.logger?.debug(`HttpBridge:discoverRoots.state [${state?.length}]`);
284
+ const nodeManifest = state?.find(isPayloadOfSchemaType(NodeManifestPayloadSchema));
278
285
  if (nodeManifest) {
279
286
  const mods = (await this.resolveRootNode(nodeManifest)).filter(exists2);
280
- (_b = this.logger) == null ? void 0 : _b.debug(`HttpBridge:discoverRoots [${mods.length}]`);
287
+ this.logger?.debug(`HttpBridge:discoverRoots [${mods.length}]`);
281
288
  this._roots = mods;
282
289
  } else {
283
290
  this._roots = [];
@@ -290,7 +297,6 @@ var _HttpBridgeBase = class _HttpBridgeBase extends AbstractBridge {
290
297
  return new URL(address, this.clientUrl);
291
298
  }
292
299
  async sendBridgeQuery(targetAddress, query, payloads) {
293
- var _a, _b, _c, _d;
294
300
  const lastFailureTime = this._failureTimeCache.get(targetAddress);
295
301
  if (lastFailureTime !== void 0) {
296
302
  const now = Date.now();
@@ -307,7 +313,7 @@ var _HttpBridgeBase = class _HttpBridgeBase extends AbstractBridge {
307
313
  payloads
308
314
  ]).length;
309
315
  if (payloadSize > this.maxPayloadSizeWarning) {
310
- (_a = this.logger) == null ? void 0 : _a.warn(`Large targetQuery being sent: ${payloadSize} bytes [${this.address}][${this.moduleAddress}] [${query.schema}] [${payloads == null ? void 0 : payloads.length}]`);
316
+ this.logger?.warn(`Large targetQuery being sent: ${payloadSize} bytes [${this.address}][${this.moduleAddress}] [${query.schema}] [${payloads?.length}]`);
311
317
  }
312
318
  const moduleUrl = this.moduleUrl(targetAddress).href;
313
319
  const result = await this.axios.post(moduleUrl, [
@@ -318,13 +324,13 @@ var _HttpBridgeBase = class _HttpBridgeBase extends AbstractBridge {
318
324
  throw `target module not found [${moduleUrl}] [${result.status}]`;
319
325
  }
320
326
  if (result.status >= 400) {
321
- (_b = this.logger) == null ? void 0 : _b.error(`targetQuery failed [${moduleUrl}]`);
327
+ this.logger?.error(`targetQuery failed [${moduleUrl}]`);
322
328
  throw `targetQuery failed [${moduleUrl}] [${result.status}]`;
323
329
  }
324
- return (_c = result.data) == null ? void 0 : _c.data;
330
+ return result.data?.data;
325
331
  } catch (ex) {
326
332
  const error = ex;
327
- (_d = this.logger) == null ? void 0 : _d.error(`Error: ${toJsonString(error)}`);
333
+ this.logger?.error(`Error: ${toJsonString(error)}`);
328
334
  throw error;
329
335
  } finally {
330
336
  this.querySemaphore.release();
@@ -334,7 +340,6 @@ var _HttpBridgeBase = class _HttpBridgeBase extends AbstractBridge {
334
340
  throw new Error("Unsupported");
335
341
  }
336
342
  async getRootState() {
337
- var _a;
338
343
  const queryPayload = {
339
344
  schema: ModuleStateQuerySchema
340
345
  };
@@ -351,17 +356,13 @@ var _HttpBridgeBase = class _HttpBridgeBase extends AbstractBridge {
351
356
  return payloads;
352
357
  } catch (ex) {
353
358
  const error = ex;
354
- (_a = this.logger) == null ? void 0 : _a.warn(`Unable to connect to remote node: ${error.message} [${this.clientUrl}]`);
359
+ this.logger?.warn(`Unable to connect to remote node: ${error.message} [${this.clientUrl}]`);
355
360
  }
356
361
  }
357
362
  async resolveRootNode(nodeManifest) {
358
- var _a;
359
- const rootModule = assertEx3((await this.resolver.resolveHandler(assertEx3((_a = nodeManifest.status) == null ? void 0 : _a.address, () => "Root has no address"), void 0, {
363
+ const rootModule = assertEx3((await this.resolver.resolveHandler(assertEx3(nodeManifest.status?.address, () => "Root has no address"), void 0, {
360
364
  manifest: nodeManifest
361
- })).at(0), () => {
362
- var _a2;
363
- return `Root not found [${(_a2 = nodeManifest.status) == null ? void 0 : _a2.address}]`;
364
- });
365
+ })).at(0), () => `Root not found [${nodeManifest.status?.address}]`);
365
366
  assertEx3(rootModule.constructor.name !== "HttpModuleProxy", () => "rootModule is not a Wrapper");
366
367
  const rootNode = asAttachableNodeInstance(rootModule, "Root modules is not a node");
367
368
  if (rootNode) {
@@ -374,18 +375,6 @@ var _HttpBridgeBase = class _HttpBridgeBase extends AbstractBridge {
374
375
  return [];
375
376
  }
376
377
  };
377
- __name(_HttpBridgeBase, "HttpBridgeBase");
378
- __publicField(_HttpBridgeBase, "axios", new AxiosJson());
379
- __publicField(_HttpBridgeBase, "configSchemas", [
380
- ...__superGet(_HttpBridgeBase, _HttpBridgeBase, "configSchemas"),
381
- HttpBridgeConfigSchema
382
- ]);
383
- __publicField(_HttpBridgeBase, "defaultConfigSchema", HttpBridgeConfigSchema);
384
- __publicField(_HttpBridgeBase, "defaultFailureRetryTime", 1e3 * 60);
385
- __publicField(_HttpBridgeBase, "defaultMaxConnections", 4);
386
- __publicField(_HttpBridgeBase, "defaultMaxPayloadSizeWarning", 256 * 256);
387
- __publicField(_HttpBridgeBase, "maxFailureCacheSize", 1e3);
388
- var HttpBridgeBase = _HttpBridgeBase;
389
378
  HttpBridgeBase = _ts_decorate([
390
379
  creatableModule()
391
380
  ], HttpBridgeBase);
@@ -398,7 +387,10 @@ function _ts_decorate2(decorators, target, key, desc) {
398
387
  return c > 3 && r && Object.defineProperty(target, key, r), r;
399
388
  }
400
389
  __name(_ts_decorate2, "_ts_decorate");
401
- var _HttpBridge = class _HttpBridge extends HttpBridgeBase {
390
+ var HttpBridge = class extends HttpBridgeBase {
391
+ static {
392
+ __name(this, "HttpBridge");
393
+ }
402
394
  _app;
403
395
  _exposedModules = [];
404
396
  _server;
@@ -407,11 +399,10 @@ var _HttpBridge = class _HttpBridge extends HttpBridgeBase {
407
399
  return assertEx4(this._app, () => "App not initialized");
408
400
  }
409
401
  async exposeChild(mod, options) {
410
- var _a, _b;
411
402
  const { maxDepth = 5 } = options ?? {};
412
403
  assertEx4(this.config.host, () => "Not configured as a host");
413
404
  this._exposedModules.push(new WeakRef(mod));
414
- const children = maxDepth > 0 ? await ((_a = mod.publicChildren) == null ? void 0 : _a.call(mod)) ?? [] : [];
405
+ const children = maxDepth > 0 ? await mod.publicChildren?.() ?? [] : [];
415
406
  this.logger.log(`childrenToExpose [${mod.id}][${mod.address}]: ${toJsonString2(children.map((child) => child.id))}`);
416
407
  const exposedChildren = (await Promise.all(children.map((child) => this.exposeChild(child, {
417
408
  maxDepth: maxDepth - 1,
@@ -421,7 +412,7 @@ var _HttpBridge = class _HttpBridge extends HttpBridgeBase {
421
412
  mod,
422
413
  ...exposedChildren
423
414
  ];
424
- for (const exposedMod of allExposed) (_b = this.logger) == null ? void 0 : _b.log(`exposed: ${exposedMod.address} [${mod.id}]`);
415
+ for (const exposedMod of allExposed) this.logger?.log(`exposed: ${exposedMod.address} [${mod.id}]`);
425
416
  return allExposed;
426
417
  }
427
418
  async exposeHandler(address, options) {
@@ -436,10 +427,7 @@ var _HttpBridge = class _HttpBridge extends HttpBridgeBase {
436
427
  return [];
437
428
  }
438
429
  exposedHandler() {
439
- return this._exposedModules.map((ref) => {
440
- var _a;
441
- return (_a = ref.deref()) == null ? void 0 : _a.address;
442
- }).filter(exists3);
430
+ return this._exposedModules.map((ref) => ref.deref()?.address).filter(exists3);
443
431
  }
444
432
  async startHandler() {
445
433
  return await super.startHandler() && await this.startHttpServer();
@@ -448,20 +436,13 @@ var _HttpBridge = class _HttpBridge extends HttpBridgeBase {
448
436
  return await super.stopHandler() && await this.stopHttpServer();
449
437
  }
450
438
  async unexposeHandler(address, options) {
451
- var _a, _b;
452
439
  const { maxDepth = 2, required = true } = options ?? {};
453
440
  assertEx4(this.config.host, () => "Not configured as a host");
454
- const mod = (_a = this._exposedModules.find((ref) => {
455
- var _a2;
456
- return ((_a2 = ref.deref()) == null ? void 0 : _a2.address) === address;
457
- })) == null ? void 0 : _a.deref();
441
+ const mod = this._exposedModules.find((ref) => ref.deref()?.address === address)?.deref();
458
442
  assertEx4(!required || mod, () => `Module not exposed: ${address}`);
459
- this._exposedModules = this._exposedModules.filter((ref) => {
460
- var _a2;
461
- return ((_a2 = ref.deref()) == null ? void 0 : _a2.address) !== address;
462
- });
443
+ this._exposedModules = this._exposedModules.filter((ref) => ref.deref()?.address !== address);
463
444
  if (mod) {
464
- const children = maxDepth > 0 ? await ((_b = mod.publicChildren) == null ? void 0 : _b.call(mod)) ?? [] : [];
445
+ const children = maxDepth > 0 ? await mod.publicChildren?.() ?? [] : [];
465
446
  const exposedChildren = (await Promise.all(children.map((child) => this.unexposeHandler(child.address, {
466
447
  maxDepth: maxDepth - 1,
467
448
  required: false
@@ -474,24 +455,16 @@ var _HttpBridge = class _HttpBridge extends HttpBridgeBase {
474
455
  return [];
475
456
  }
476
457
  async callLocalModule(address, query, payloads) {
477
- var _a;
478
- const mod = (_a = this._exposedModules.find((ref) => {
479
- var _a2;
480
- return ((_a2 = ref.deref()) == null ? void 0 : _a2.address) === address;
481
- })) == null ? void 0 : _a.deref();
458
+ const mod = this._exposedModules.find((ref) => ref.deref()?.address === address)?.deref();
482
459
  return mod ? await mod.query(query, payloads) : null;
483
460
  }
484
461
  async handleGet(req, res) {
485
- var _a;
486
462
  const { address } = req.params;
487
463
  try {
488
464
  if (address == this.address) {
489
465
  res.json(await this.stateQuery(this.account));
490
466
  } else {
491
- const mod = (_a = this._exposedModules.find((ref) => {
492
- var _a2;
493
- return ((_a2 = ref.deref()) == null ? void 0 : _a2.address) === address;
494
- })) == null ? void 0 : _a.deref();
467
+ const mod = this._exposedModules.find((ref) => ref.deref()?.address === address)?.deref();
495
468
  if (mod) {
496
469
  res.json(await mod.stateQuery(this.account));
497
470
  } else {
@@ -559,10 +532,9 @@ var _HttpBridge = class _HttpBridge extends HttpBridgeBase {
559
532
  return app;
560
533
  }
561
534
  startHttpServer() {
562
- var _a;
563
535
  if (this.config.host) {
564
536
  assertEx4(!this._server, () => "Server already started");
565
- this._server = this.app.listen(((_a = this.config.host) == null ? void 0 : _a.port) ?? 3030);
537
+ this._server = this.app.listen(this.config.host?.port ?? 3030);
566
538
  }
567
539
  return Promise.resolve(true);
568
540
  }
@@ -584,8 +556,6 @@ var _HttpBridge = class _HttpBridge extends HttpBridgeBase {
584
556
  return Promise.resolve(true);
585
557
  }
586
558
  };
587
- __name(_HttpBridge, "HttpBridge");
588
- var HttpBridge = _HttpBridge;
589
559
  HttpBridge = _ts_decorate2([
590
560
  creatableModule2()
591
561
  ], HttpBridge);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/HttpBridgeConfig.ts","../../src/HttpBridgeFull.ts","../../src/HttpBridgeBase.ts","../../src/HttpBridgeModuleResolver.ts","../../src/ModuleProxy/ModuleProxy.ts"],"sourcesContent":["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 {\n asyncHandler,\n customPoweredByHeader,\n disableCaseSensitiveRouting,\n disableExpressDefaultPoweredByHeader,\n jsonBodyParser,\n responseProfiler,\n useRequestCounters,\n} from '@xylabs/sdk-api-express-ecs'\nimport { isQueryBoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BridgeExposeOptions, BridgeParams, BridgeUnexposeOptions } from '@xyo-network/bridge-model'\n// import { standardResponses } from '@xyo-network/express-node-middleware'\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'\nimport { StatusCodes } from 'http-status-codes'\n\nimport { HttpBridgeBase } from './HttpBridgeBase.ts'\nimport { HttpBridgeConfig } from './HttpBridgeConfig.ts'\n\n/**\n * The type of the path parameters for the address path.\n */\ntype AddressPathParams = {\n address: Address\n}\n\n/**\n * The type of the request body for the address path.\n */\ntype PostAddressRequestBody = [QueryBoundWitness, undefined | Payload[]]\n\n// TODO: This does not match the error response shape of the legacy bridge BUT it its the\n// shape this bridge is currently returning. Massage this into the standard\n// error shape constructed via middleware.\n/* type ErrorResponseBody = {\n error: string\n} */\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 protected get app() {\n if (!this._app) this._app = this.initializeApp()\n return assertEx(this._app, () => 'App not initialized')\n }\n\n async exposeChild(mod: ModuleInstance, options?: BridgeExposeOptions | undefined): Promise<ModuleInstance[]> {\n const { maxDepth = 5 } = options ?? {}\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 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()) && (await this.startHttpServer())\n }\n\n override async stopHandler(_timeout?: number | undefined): Promise<boolean> {\n return (await super.stopHandler()) && (await 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 return mod ? await mod.query(query, payloads) : null\n }\n\n protected async handleGet(req: Request<AddressPathParams, ModuleQueryResult, PostAddressRequestBody>, res: Response) {\n const { address } = req.params\n try {\n if (address == this.address) {\n res.json(await this.stateQuery(this.account))\n } else {\n const mod = this._exposedModules.find(ref => ref.deref()?.address === address)?.deref()\n // TODO: Use standard errors middleware\n if (mod) {\n res.json(await mod.stateQuery(this.account))\n } else {\n res.status(StatusCodes.NOT_FOUND).json({ error: 'Module not found' })\n }\n }\n } catch (ex) {\n // TODO: Sanitize message\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ error: (ex as Error).message })\n }\n }\n\n protected async handlePost(req: Request<AddressPathParams, ModuleQueryResult, PostAddressRequestBody>, res: Response) {\n const { address } = req.params\n const [bw, payloads = []] = Array.isArray(req.body) ? req.body : []\n const query = isQueryBoundWitness(bw) ? bw : undefined\n if (!query) {\n // TODO: Use standard errors middleware\n res.status(StatusCodes.BAD_REQUEST).json({ error: 'No query provided' })\n return\n }\n try {\n if (address == this.address) {\n const result = await this.query(query, payloads)\n return res.json(result)\n } else {\n const result = await this.callLocalModule(address, query, payloads)\n // TODO: Use standard errors middleware\n if (result === null) {\n res.status(StatusCodes.NOT_FOUND).json({ error: 'Module not found' })\n } else {\n res.json(result)\n }\n }\n } catch (ex) {\n // TODO: Sanitize message\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ error: (ex as Error).message })\n }\n }\n\n protected initializeApp() {\n // Create the express app\n const app = express()\n\n // Add middleware\n app.use(responseProfiler)\n app.use(jsonBodyParser)\n // removed for now since this causes a cycle\n // app.use(standardResponses)\n disableExpressDefaultPoweredByHeader(app)\n app.use(customPoweredByHeader)\n disableCaseSensitiveRouting(app)\n useRequestCounters(app)\n\n // Add routes\n // Redirect all requests to the root to this module's address\n app.get('/', (_req, res) => res.redirect(StatusCodes.MOVED_TEMPORARILY, `/${this.address}`))\n app.post('/', (_req, res) => res.redirect(StatusCodes.TEMPORARY_REDIRECT, `/${this.address}`))\n\n app.get<AddressPathParams, ModuleQueryResult>(\n '/:address',\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n asyncHandler(async (req, res) => await this.handleGet(req, res)),\n )\n app.post<AddressPathParams, ModuleQueryResult, PostAddressRequestBody>(\n '/:address',\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n asyncHandler(async (req, res) => await this.handlePost(req, res)),\n )\n return app\n }\n\n protected startHttpServer(): Promise<boolean> {\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 Promise.resolve(true)\n }\n\n protected stopHttpServer(): Promise<boolean> {\n if (this.config.host) {\n return new Promise((resolve, reject) => {\n if (this._server) {\n this._server.close((err) => {\n if (err) {\n reject(err)\n } else {\n this._server = undefined\n resolve(true)\n }\n })\n }\n })\n }\n return Promise.resolve(true)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { AxiosJson } from '@xylabs/axios'\nimport { exists } from '@xylabs/exists'\nimport { forget } from '@xylabs/forget'\nimport { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport { ApiEnvelope } from '@xyo-network/api-models'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractBridge } from '@xyo-network/bridge-abstract'\nimport {\n BridgeExposeOptions,\n BridgeModule,\n BridgeParams,\n BridgeUnexposeOptions,\n QuerySendFinishedEventArgs,\n QuerySendStartedEventArgs,\n} from '@xyo-network/bridge-model'\nimport { ModuleManifestPayload, 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 type { AxiosError } from 'axios'\nimport { LRUCache } from 'lru-cache'\n\nimport { HttpBridgeConfig, HttpBridgeConfigSchema } from './HttpBridgeConfig.ts'\nimport { HttpBridgeModuleResolver } from './HttpBridgeModuleResolver.ts'\nimport { BridgeQuerySender } from './ModuleProxy/index.ts'\n\nexport interface HttpBridgeParams extends BridgeParams<AnyConfigSchema<HttpBridgeConfig>> {\n axios?: AxiosJson\n}\n\n@creatableModule()\nexport class 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 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, 'mod'>) => {\n forget(this.emit('querySendFinished', { mod: this, ...args }))\n },\n onQuerySendStarted: (args: Omit<QuerySendStartedEventArgs, 'mod'>) => {\n forget(this.emit('querySendStarted', { mod: this, ...args }))\n },\n querySender: this,\n root: this,\n rootUrl: this.clientUrl,\n wrapperAccount: this.account,\n })\n return this._resolver\n }\n\n override exposeHandler(_id: string, _options?: BridgeExposeOptions | undefined): Promisable<ModuleInstance[]> {\n throw new Error('Unsupported')\n }\n\n override exposedHandler(): Promisable<Address[]> {\n throw new Error('Unsupported')\n }\n\n async getRoots(force?: boolean): Promise<ModuleInstance[]> {\n return await this._discoverRootsMutex.runExclusive(async () => {\n if (this._roots === undefined || force) {\n const state = await this.getRootState()\n this.logger?.debug(`HttpBridge:discoverRoots.state [${state?.length}]`)\n const nodeManifest = state?.find(isPayloadOfSchemaType<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: ModuleManifestPayload): Promise<ModuleInstance[]> {\n const rootModule = assertEx(\n (\n await this.resolver.resolveHandler(\n assertEx(nodeManifest.status?.address, () => 'Root has no address'),\n undefined,\n { manifest: nodeManifest },\n )\n ).at(0),\n () => `Root not found [${nodeManifest.status?.address}]`,\n )\n assertEx(rootModule.constructor.name !== 'HttpModuleProxy', () => 'rootModule is not a Wrapper')\n const rootNode = asAttachableNodeInstance(rootModule, 'Root modules is not a node')\n if (rootNode) {\n this.logger.debug(`rootNode: ${rootNode.id}`)\n this.downResolver.addResolver(rootNode as unknown as ModuleResolverInstance)\n return [rootNode]\n }\n return []\n }\n}\n","import { 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 isModuleInstance,\n ModuleConfig,\n ModuleConfigSchema,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport { BridgeQuerySender, HttpModuleProxy, HttpModuleProxyParams } from './ModuleProxy/index.ts'\n\nconst NotFoundModule = { notFound: true }\n\nexport interface HttpBridgeModuleResolverParams extends BridgeModuleResolverParams {\n querySender: BridgeQuerySender\n rootUrl: string\n}\n\nexport class HttpBridgeModuleResolver<\n T extends HttpBridgeModuleResolverParams = HttpBridgeModuleResolverParams,\n> extends AbstractBridgeModuleResolver<T> {\n protected _resolvedCache = new LRUCache<Address, ModuleInstance | typeof NotFoundModule>({ max: 1000 })\n protected _resolvedCacheMutex = new Mutex()\n\n get querySender() {\n return this.params.querySender\n }\n\n moduleUrl(address: Address) {\n return new URL(address, this.params.rootUrl)\n }\n\n override async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n params?: Partial<HttpModuleProxyParams>,\n ): Promise<T[]> {\n const parentResult = await super.resolveHandler(id, options)\n if (parentResult.length > 0) {\n return parentResult\n }\n const idParts = id.split(':')\n const untransformedFirstPart = assertEx(idParts.shift(), () => 'Missing module identifier')\n const firstPart = await ResolveHelper.transformModuleIdentifier(untransformedFirstPart)\n assertEx(isAddress(firstPart), () => `Invalid module address: ${firstPart}`)\n const remainderParts = idParts.join(':')\n const instance: T | undefined = await this._resolvedCacheMutex.runExclusive(async () => {\n const cachedMod = this._resolvedCache.get(firstPart as Address)\n if (cachedMod) {\n if (isModuleInstance(cachedMod)) {\n const result = idParts.length <= 0 ? cachedMod : cachedMod.resolve(remainderParts, { ...options, maxDepth: (options?.maxDepth ?? 5) - 1 })\n return result as T\n } else {\n // return cached 404\n return\n }\n }\n const account = await Account.random()\n const finalParams: HttpModuleProxyParams = {\n account,\n archiving: this.params.archiving,\n config: { schema: ModuleConfigSchema },\n host: this,\n moduleAddress: firstPart as Address,\n onQuerySendFinished: this.params.onQuerySendFinished,\n onQuerySendStarted: this.params.onQuerySendStarted,\n querySender: this.params.querySender,\n ...params,\n }\n\n this.logger?.debug(`creating HttpProxy [${firstPart}] ${id}`)\n\n const proxy = new HttpModuleProxy<T, HttpModuleProxyParams>(finalParams)\n\n let state: Payload[] | undefined\n\n try {\n state = await proxy.state()\n } catch (ex) {\n const error = ex as Error\n this.logger?.log(error.message)\n }\n\n if (!state) {\n // cache the fact that it was not found\n this._resolvedCache.set(firstPart as Address, NotFoundModule)\n return\n }\n\n const configSchema = (state.find(payload => payload.schema === ConfigSchema) as ConfigPayload | undefined)?.config\n const config = assertEx(\n state.find(payload => payload.schema === configSchema),\n () => 'Unable to locate config',\n ) as ModuleConfig\n proxy.setConfig(config)\n\n this.logger?.log(`created HttpProxy [${firstPart}] ${proxy.id}`)\n\n await proxy.start?.()\n const wrapped = wrapModuleWithType(proxy, account) as unknown as T\n assertEx(asModuleInstance<T>(wrapped, {}), () => `Failed to asModuleInstance [${id}]`)\n this._resolvedCache.set(wrapped.address, wrapped)\n return wrapped as ModuleInstance as T\n })\n const result = remainderParts.length > 0 ? await instance?.resolve(remainderParts, options) : instance\n return result ? [result] : []\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { forget } from '@xylabs/forget'\nimport { 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 static createCount = 0\n\n constructor(params: TParams) {\n HttpModuleProxy.createCount = HttpModuleProxy.createCount + 1\n super(params)\n if (Math.floor(HttpModuleProxy.createCount / 10) === HttpModuleProxy.createCount / 10) {\n console.log(`HttpModuleProxy.createCount: ${HttpModuleProxy.createCount}`)\n }\n }\n\n async proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads: Payload[] = []): Promise<ModuleQueryResult> {\n if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {\n forget(this.storeToArchivists([query, ...(payloads ?? [])]))\n }\n const result = await this.params.querySender.sendBridgeQuery(this.params.moduleAddress, query, payloads)\n if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {\n forget(this.storeToArchivists(result.flat()))\n }\n return result\n }\n\n override async publicChildren(): Promise<ModuleInstance[]> {\n return (\n await Promise.all(\n Object.values(await this.childAddressMap())\n .filter(exists)\n .map(address => this.resolve(address)),\n )\n ).filter(exists)\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(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 mod: this,\n transformers: this.moduleIdentifierTransformers,\n upResolver: this.upResolver,\n }\n if (idOrFilter === '*') {\n return [...(await this.publicChildren()), await this.params.host.resolve(this.address)] 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)\n ? first\n : this.id === first\n ? this.address\n : this.childAddressByName(first)\n if (!address) return undefined\n const firstInstance = (await this.params.host.resolve(address)) as ModuleInstance | undefined\n return (remainingPath ? await firstInstance?.resolve(remainingPath) : firstInstance) as T | undefined\n }\n 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":"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","names":["HttpBridgeConfigSchema","assertEx","exists","toJsonString","asyncHandler","customPoweredByHeader","disableCaseSensitiveRouting","disableExpressDefaultPoweredByHeader","jsonBodyParser","responseProfiler","useRequestCounters","isQueryBoundWitness","creatableModule","resolveAddressToInstanceUp","express","StatusCodes","assertEx","AxiosJson","exists","forget","toJsonString","AbstractBridge","NodeManifestPayloadSchema","creatableModule","ModuleStateQuerySchema","asAttachableNodeInstance","isPayloadOfSchemaType","Mutex","Semaphore","LRUCache","assertEx","isAddress","Account","AbstractBridgeModuleResolver","wrapModuleWithType","ConfigSchema","asModuleInstance","isModuleInstance","ModuleConfigSchema","ResolveHelper","Mutex","LRUCache","assertEx","exists","forget","isAddress","AbstractModuleProxy","ResolveHelper","HttpModuleProxy","AbstractModuleProxy","constructor","params","createCount","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","mod","transformers","moduleIdentifierTransformers","upResolver","host","parts","split","first","assertEx","shift","remainingPath","join","isAddress","id","childAddressByName","undefined","firstInstance","ResolveHelper","NotFoundModule","notFound","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","isModuleInstance","result","resolve","maxDepth","account","Account","random","finalParams","archiving","config","schema","ModuleConfigSchema","host","moduleAddress","onQuerySendFinished","onQuerySendStarted","logger","debug","proxy","HttpModuleProxy","state","ex","error","log","message","set","configSchema","find","payload","ConfigSchema","setConfig","start","wrapped","wrapModuleWithType","asModuleInstance","HttpBridgeBase","AbstractBridge","_axios","_discoverRootsMutex","Mutex","_failureTimeCache","LRUCache","max","maxFailureCacheSize","_querySemaphore","_resolver","axios","params","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","mod","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","manifest","at","constructor","name","rootNode","asAttachableNodeInstance","id","downResolver","addResolver","AxiosJson","configSchemas","HttpBridgeConfigSchema","defaultConfigSchema","HttpBridge","HttpBridgeBase","_app","_exposedModules","_server","app","initializeApp","assertEx","exposeChild","mod","options","maxDepth","config","host","push","WeakRef","children","publicChildren","logger","log","id","address","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","handleGet","req","res","params","json","stateQuery","account","status","StatusCodes","NOT_FOUND","error","ex","INTERNAL_SERVER_ERROR","message","handlePost","bw","Array","isArray","body","isQueryBoundWitness","undefined","BAD_REQUEST","result","express","use","responseProfiler","jsonBodyParser","disableExpressDefaultPoweredByHeader","customPoweredByHeader","disableCaseSensitiveRouting","useRequestCounters","get","_req","redirect","MOVED_TEMPORARILY","post","TEMPORARY_REDIRECT","asyncHandler","listen","port","resolve","reject","close","err"]}
1
+ {"version":3,"sources":["../../src/HttpBridgeConfig.ts","../../src/HttpBridgeFull.ts","../../src/HttpBridgeBase.ts","../../src/HttpBridgeModuleResolver.ts","../../src/ModuleProxy/ModuleProxy.ts"],"sourcesContent":["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 {\n asyncHandler,\n customPoweredByHeader,\n disableCaseSensitiveRouting,\n disableExpressDefaultPoweredByHeader,\n jsonBodyParser,\n responseProfiler,\n useRequestCounters,\n} from '@xylabs/sdk-api-express-ecs'\nimport { isQueryBoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BridgeExposeOptions, BridgeParams, BridgeUnexposeOptions } from '@xyo-network/bridge-model'\n// import { standardResponses } from '@xyo-network/express-node-middleware'\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'\nimport { StatusCodes } from 'http-status-codes'\n\nimport { HttpBridgeBase } from './HttpBridgeBase.ts'\nimport { HttpBridgeConfig } from './HttpBridgeConfig.ts'\n\n/**\n * The type of the path parameters for the address path.\n */\ntype AddressPathParams = {\n address: Address\n}\n\n/**\n * The type of the request body for the address path.\n */\ntype PostAddressRequestBody = [QueryBoundWitness, undefined | Payload[]]\n\n// TODO: This does not match the error response shape of the legacy bridge BUT it its the\n// shape this bridge is currently returning. Massage this into the standard\n// error shape constructed via middleware.\n/* type ErrorResponseBody = {\n error: string\n} */\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 protected get app() {\n if (!this._app) this._app = this.initializeApp()\n return assertEx(this._app, () => 'App not initialized')\n }\n\n async exposeChild(mod: ModuleInstance, options?: BridgeExposeOptions | undefined): Promise<ModuleInstance[]> {\n const { maxDepth = 5 } = options ?? {}\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 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()) && (await this.startHttpServer())\n }\n\n override async stopHandler(_timeout?: number | undefined): Promise<boolean> {\n return (await super.stopHandler()) && (await 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 return mod ? await mod.query(query, payloads) : null\n }\n\n protected async handleGet(req: Request<AddressPathParams, ModuleQueryResult, PostAddressRequestBody>, res: Response) {\n const { address } = req.params\n try {\n if (address == this.address) {\n res.json(await this.stateQuery(this.account))\n } else {\n const mod = this._exposedModules.find(ref => ref.deref()?.address === address)?.deref()\n // TODO: Use standard errors middleware\n if (mod) {\n res.json(await mod.stateQuery(this.account))\n } else {\n res.status(StatusCodes.NOT_FOUND).json({ error: 'Module not found' })\n }\n }\n } catch (ex) {\n // TODO: Sanitize message\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ error: (ex as Error).message })\n }\n }\n\n protected async handlePost(req: Request<AddressPathParams, ModuleQueryResult, PostAddressRequestBody>, res: Response) {\n const { address } = req.params\n const [bw, payloads = []] = Array.isArray(req.body) ? req.body : []\n const query = isQueryBoundWitness(bw) ? bw : undefined\n if (!query) {\n // TODO: Use standard errors middleware\n res.status(StatusCodes.BAD_REQUEST).json({ error: 'No query provided' })\n return\n }\n try {\n if (address == this.address) {\n const result = await this.query(query, payloads)\n return res.json(result)\n } else {\n const result = await this.callLocalModule(address, query, payloads)\n // TODO: Use standard errors middleware\n if (result === null) {\n res.status(StatusCodes.NOT_FOUND).json({ error: 'Module not found' })\n } else {\n res.json(result)\n }\n }\n } catch (ex) {\n // TODO: Sanitize message\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ error: (ex as Error).message })\n }\n }\n\n protected initializeApp() {\n // Create the express app\n const app = express()\n\n // Add middleware\n app.use(responseProfiler)\n app.use(jsonBodyParser)\n // removed for now since this causes a cycle\n // app.use(standardResponses)\n disableExpressDefaultPoweredByHeader(app)\n app.use(customPoweredByHeader)\n disableCaseSensitiveRouting(app)\n useRequestCounters(app)\n\n // Add routes\n // Redirect all requests to the root to this module's address\n app.get('/', (_req, res) => res.redirect(StatusCodes.MOVED_TEMPORARILY, `/${this.address}`))\n app.post('/', (_req, res) => res.redirect(StatusCodes.TEMPORARY_REDIRECT, `/${this.address}`))\n\n app.get<AddressPathParams, ModuleQueryResult>(\n '/:address',\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n asyncHandler(async (req, res) => await this.handleGet(req, res)),\n )\n app.post<AddressPathParams, ModuleQueryResult, PostAddressRequestBody>(\n '/:address',\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n asyncHandler(async (req, res) => await this.handlePost(req, res)),\n )\n return app\n }\n\n protected startHttpServer(): Promise<boolean> {\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 Promise.resolve(true)\n }\n\n protected stopHttpServer(): Promise<boolean> {\n if (this.config.host) {\n return new Promise((resolve, reject) => {\n if (this._server) {\n this._server.close((err) => {\n if (err) {\n reject(err)\n } else {\n this._server = undefined\n resolve(true)\n }\n })\n }\n })\n }\n return Promise.resolve(true)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { AxiosJson } from '@xylabs/axios'\nimport { exists } from '@xylabs/exists'\nimport { forget } from '@xylabs/forget'\nimport { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport { ApiEnvelope } from '@xyo-network/api-models'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractBridge } from '@xyo-network/bridge-abstract'\nimport {\n BridgeExposeOptions,\n BridgeModule,\n BridgeParams,\n BridgeUnexposeOptions,\n QuerySendFinishedEventArgs,\n QuerySendStartedEventArgs,\n} from '@xyo-network/bridge-model'\nimport { ModuleManifestPayload, 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 type { AxiosError } from 'axios'\nimport { LRUCache } from 'lru-cache'\n\nimport { HttpBridgeConfig, HttpBridgeConfigSchema } from './HttpBridgeConfig.ts'\nimport { HttpBridgeModuleResolver } from './HttpBridgeModuleResolver.ts'\nimport { BridgeQuerySender } from './ModuleProxy/index.ts'\n\nexport interface HttpBridgeParams extends BridgeParams<AnyConfigSchema<HttpBridgeConfig>> {\n axios?: AxiosJson\n}\n\n@creatableModule()\nexport class 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 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, 'mod'>) => {\n forget(this.emit('querySendFinished', { mod: this, ...args }))\n },\n onQuerySendStarted: (args: Omit<QuerySendStartedEventArgs, 'mod'>) => {\n forget(this.emit('querySendStarted', { mod: this, ...args }))\n },\n querySender: this,\n root: this,\n rootUrl: this.clientUrl,\n wrapperAccount: this.account,\n })\n return this._resolver\n }\n\n override exposeHandler(_id: string, _options?: BridgeExposeOptions | undefined): Promisable<ModuleInstance[]> {\n throw new Error('Unsupported')\n }\n\n override exposedHandler(): Promisable<Address[]> {\n throw new Error('Unsupported')\n }\n\n async getRoots(force?: boolean): Promise<ModuleInstance[]> {\n return await this._discoverRootsMutex.runExclusive(async () => {\n if (this._roots === undefined || force) {\n const state = await this.getRootState()\n this.logger?.debug(`HttpBridge:discoverRoots.state [${state?.length}]`)\n const nodeManifest = state?.find(isPayloadOfSchemaType<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: ModuleManifestPayload): Promise<ModuleInstance[]> {\n const rootModule = assertEx(\n (\n await this.resolver.resolveHandler(\n assertEx(nodeManifest.status?.address, () => 'Root has no address'),\n undefined,\n { manifest: nodeManifest },\n )\n ).at(0),\n () => `Root not found [${nodeManifest.status?.address}]`,\n )\n assertEx(rootModule.constructor.name !== 'HttpModuleProxy', () => 'rootModule is not a Wrapper')\n const rootNode = asAttachableNodeInstance(rootModule, 'Root modules is not a node')\n if (rootNode) {\n this.logger.debug(`rootNode: ${rootNode.id}`)\n this.downResolver.addResolver(rootNode as unknown as ModuleResolverInstance)\n return [rootNode]\n }\n return []\n }\n}\n","import { 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 isModuleInstance,\n ModuleConfig,\n ModuleConfigSchema,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport { BridgeQuerySender, HttpModuleProxy, HttpModuleProxyParams } from './ModuleProxy/index.ts'\n\nconst NotFoundModule = { notFound: true }\n\nexport interface HttpBridgeModuleResolverParams extends BridgeModuleResolverParams {\n querySender: BridgeQuerySender\n rootUrl: string\n}\n\nexport class HttpBridgeModuleResolver<\n T extends HttpBridgeModuleResolverParams = HttpBridgeModuleResolverParams,\n> extends AbstractBridgeModuleResolver<T> {\n protected _resolvedCache = new LRUCache<Address, ModuleInstance | typeof NotFoundModule>({ max: 1000 })\n protected _resolvedCacheMutex = new Mutex()\n\n get querySender() {\n return this.params.querySender\n }\n\n moduleUrl(address: Address) {\n return new URL(address, this.params.rootUrl)\n }\n\n override async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n params?: Partial<HttpModuleProxyParams>,\n ): Promise<T[]> {\n const parentResult = await super.resolveHandler(id, options)\n if (parentResult.length > 0) {\n return parentResult\n }\n const idParts = id.split(':')\n const untransformedFirstPart = assertEx(idParts.shift(), () => 'Missing module identifier')\n const firstPart = await ResolveHelper.transformModuleIdentifier(untransformedFirstPart)\n assertEx(isAddress(firstPart), () => `Invalid module address: ${firstPart}`)\n const remainderParts = idParts.join(':')\n const instance: T | undefined = await this._resolvedCacheMutex.runExclusive(async () => {\n const cachedMod = this._resolvedCache.get(firstPart as Address)\n if (cachedMod) {\n if (isModuleInstance(cachedMod)) {\n const result = idParts.length <= 0 ? cachedMod : cachedMod.resolve(remainderParts, { ...options, maxDepth: (options?.maxDepth ?? 5) - 1 })\n return result as T\n } else {\n // return cached 404\n return\n }\n }\n const account = await Account.random()\n const finalParams: HttpModuleProxyParams = {\n account,\n archiving: this.params.archiving,\n config: { schema: ModuleConfigSchema },\n host: this,\n moduleAddress: firstPart as Address,\n onQuerySendFinished: this.params.onQuerySendFinished,\n onQuerySendStarted: this.params.onQuerySendStarted,\n querySender: this.params.querySender,\n ...params,\n }\n\n this.logger?.debug(`creating HttpProxy [${firstPart}] ${id}`)\n\n const proxy = new HttpModuleProxy<T, HttpModuleProxyParams>(finalParams)\n\n let state: Payload[] | undefined\n\n try {\n state = await proxy.state()\n } catch (ex) {\n const error = ex as Error\n this.logger?.log(error.message)\n }\n\n if (!state) {\n // cache the fact that it was not found\n this._resolvedCache.set(firstPart as Address, NotFoundModule)\n return\n }\n\n const configSchema = (state.find(payload => payload.schema === ConfigSchema) as ConfigPayload | undefined)?.config\n const config = assertEx(\n state.find(payload => payload.schema === configSchema),\n () => 'Unable to locate config',\n ) as ModuleConfig\n proxy.setConfig(config)\n\n this.logger?.log(`created HttpProxy [${firstPart}] ${proxy.id}`)\n\n await proxy.start?.()\n const wrapped = wrapModuleWithType(proxy, account) as unknown as T\n assertEx(asModuleInstance<T>(wrapped, {}), () => `Failed to asModuleInstance [${id}]`)\n this._resolvedCache.set(wrapped.address, wrapped)\n return wrapped as ModuleInstance as T\n })\n const result = remainderParts.length > 0 ? await instance?.resolve(remainderParts, options) : instance\n return result ? [result] : []\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { forget } from '@xylabs/forget'\nimport { 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 static createCount = 0\n\n constructor(params: TParams) {\n HttpModuleProxy.createCount = HttpModuleProxy.createCount + 1\n super(params)\n if (Math.floor(HttpModuleProxy.createCount / 10) === HttpModuleProxy.createCount / 10) {\n console.log(`HttpModuleProxy.createCount: ${HttpModuleProxy.createCount}`)\n }\n }\n\n async proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads: Payload[] = []): Promise<ModuleQueryResult> {\n if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {\n forget(this.storeToArchivists([query, ...(payloads ?? [])]))\n }\n const result = await this.params.querySender.sendBridgeQuery(this.params.moduleAddress, query, payloads)\n if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {\n forget(this.storeToArchivists(result.flat()))\n }\n return result\n }\n\n override async publicChildren(): Promise<ModuleInstance[]> {\n return (\n await Promise.all(\n Object.values(await this.childAddressMap())\n .filter(exists)\n .map(address => this.resolve(address)),\n )\n ).filter(exists)\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(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 mod: this,\n transformers: this.moduleIdentifierTransformers,\n upResolver: this.upResolver,\n }\n if (idOrFilter === '*') {\n return [...(await this.publicChildren()), await this.params.host.resolve(this.address)] 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)\n ? first\n : this.id === first\n ? this.address\n : this.childAddressByName(first)\n if (!address) return undefined\n const firstInstance = (await this.params.host.resolve(address)) as ModuleInstance | undefined\n return (remainingPath ? await firstInstance?.resolve(remainingPath) : firstInstance) as T | undefined\n }\n 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":"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","names":["HttpBridgeConfigSchema","assertEx","exists","toJsonString","asyncHandler","customPoweredByHeader","disableCaseSensitiveRouting","disableExpressDefaultPoweredByHeader","jsonBodyParser","responseProfiler","useRequestCounters","isQueryBoundWitness","creatableModule","resolveAddressToInstanceUp","express","StatusCodes","assertEx","AxiosJson","exists","forget","toJsonString","AbstractBridge","NodeManifestPayloadSchema","creatableModule","ModuleStateQuerySchema","asAttachableNodeInstance","isPayloadOfSchemaType","Mutex","Semaphore","LRUCache","assertEx","isAddress","Account","AbstractBridgeModuleResolver","wrapModuleWithType","ConfigSchema","asModuleInstance","isModuleInstance","ModuleConfigSchema","ResolveHelper","Mutex","LRUCache","assertEx","exists","forget","isAddress","AbstractModuleProxy","ResolveHelper","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","mod","transformers","moduleIdentifierTransformers","upResolver","host","parts","split","first","assertEx","shift","remainingPath","join","isAddress","id","childAddressByName","undefined","firstInstance","ResolveHelper","NotFoundModule","notFound","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","isModuleInstance","result","resolve","maxDepth","account","Account","random","finalParams","archiving","config","schema","ModuleConfigSchema","host","moduleAddress","onQuerySendFinished","onQuerySendStarted","logger","debug","proxy","HttpModuleProxy","state","ex","error","log","message","set","configSchema","find","payload","ConfigSchema","setConfig","start","wrapped","wrapModuleWithType","asModuleInstance","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","mod","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","manifest","at","constructor","name","rootNode","asAttachableNodeInstance","id","downResolver","addResolver","HttpBridge","HttpBridgeBase","_app","_exposedModules","_server","app","initializeApp","assertEx","exposeChild","mod","options","maxDepth","config","host","push","WeakRef","children","publicChildren","logger","log","id","address","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","handleGet","req","res","params","json","stateQuery","account","status","StatusCodes","NOT_FOUND","error","ex","INTERNAL_SERVER_ERROR","message","handlePost","bw","Array","isArray","body","isQueryBoundWitness","undefined","BAD_REQUEST","result","express","use","responseProfiler","jsonBodyParser","disableExpressDefaultPoweredByHeader","customPoweredByHeader","disableCaseSensitiveRouting","useRequestCounters","get","_req","redirect","MOVED_TEMPORARILY","post","TEMPORARY_REDIRECT","asyncHandler","listen","port","resolve","reject","close","err"]}