@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.
- package/dist/browser/index-browser.d.ts +105 -3
- package/dist/neutral/index-browser.d.ts +105 -3
- package/dist/node/index.d.ts +128 -3
- package/dist/node/index.mjs +55 -85
- package/dist/node/index.mjs.map +1 -1
- package/package.json +24 -33
- package/dist/browser/HttpBridgeBase.d.cts +0 -45
- package/dist/browser/HttpBridgeBase.d.cts.map +0 -1
- package/dist/browser/HttpBridgeBase.d.mts +0 -45
- package/dist/browser/HttpBridgeBase.d.mts.map +0 -1
- package/dist/browser/HttpBridgeBase.d.ts +0 -45
- package/dist/browser/HttpBridgeBase.d.ts.map +0 -1
- package/dist/browser/HttpBridgeClientOnly.d.cts +0 -9
- package/dist/browser/HttpBridgeClientOnly.d.cts.map +0 -1
- package/dist/browser/HttpBridgeClientOnly.d.mts +0 -9
- package/dist/browser/HttpBridgeClientOnly.d.mts.map +0 -1
- package/dist/browser/HttpBridgeClientOnly.d.ts +0 -9
- package/dist/browser/HttpBridgeClientOnly.d.ts.map +0 -1
- package/dist/browser/HttpBridgeConfig.d.cts +0 -19
- package/dist/browser/HttpBridgeConfig.d.cts.map +0 -1
- package/dist/browser/HttpBridgeConfig.d.mts +0 -19
- package/dist/browser/HttpBridgeConfig.d.mts.map +0 -1
- package/dist/browser/HttpBridgeConfig.d.ts +0 -19
- package/dist/browser/HttpBridgeConfig.d.ts.map +0 -1
- package/dist/browser/HttpBridgeFull.d.cts +0 -35
- package/dist/browser/HttpBridgeFull.d.cts.map +0 -1
- package/dist/browser/HttpBridgeFull.d.mts +0 -35
- package/dist/browser/HttpBridgeFull.d.mts.map +0 -1
- package/dist/browser/HttpBridgeFull.d.ts +0 -35
- package/dist/browser/HttpBridgeFull.d.ts.map +0 -1
- package/dist/browser/HttpBridgeModuleResolver.d.cts +0 -32
- package/dist/browser/HttpBridgeModuleResolver.d.cts.map +0 -1
- package/dist/browser/HttpBridgeModuleResolver.d.mts +0 -32
- package/dist/browser/HttpBridgeModuleResolver.d.mts.map +0 -1
- package/dist/browser/HttpBridgeModuleResolver.d.ts +0 -32
- package/dist/browser/HttpBridgeModuleResolver.d.ts.map +0 -1
- package/dist/browser/ModuleProxy/ModuleProxy.d.cts +0 -27
- package/dist/browser/ModuleProxy/ModuleProxy.d.cts.map +0 -1
- package/dist/browser/ModuleProxy/ModuleProxy.d.mts +0 -27
- package/dist/browser/ModuleProxy/ModuleProxy.d.mts.map +0 -1
- package/dist/browser/ModuleProxy/ModuleProxy.d.ts +0 -27
- package/dist/browser/ModuleProxy/ModuleProxy.d.ts.map +0 -1
- package/dist/browser/ModuleProxy/index.d.cts +0 -2
- package/dist/browser/ModuleProxy/index.d.cts.map +0 -1
- package/dist/browser/ModuleProxy/index.d.mts +0 -2
- package/dist/browser/ModuleProxy/index.d.mts.map +0 -1
- package/dist/browser/ModuleProxy/index.d.ts +0 -2
- package/dist/browser/ModuleProxy/index.d.ts.map +0 -1
- package/dist/browser/index-browser.cjs +0 -416
- package/dist/browser/index-browser.cjs.map +0 -1
- package/dist/browser/index-browser.d.cts +0 -3
- package/dist/browser/index-browser.d.cts.map +0 -1
- package/dist/browser/index-browser.d.mts +0 -3
- package/dist/browser/index-browser.d.mts.map +0 -1
- package/dist/browser/index-browser.d.ts.map +0 -1
- package/dist/browser/index.d.cts +0 -3
- package/dist/browser/index.d.cts.map +0 -1
- package/dist/browser/index.d.mts +0 -3
- package/dist/browser/index.d.mts.map +0 -1
- package/dist/browser/index.d.ts +0 -3
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/neutral/HttpBridgeBase.d.cts +0 -45
- package/dist/neutral/HttpBridgeBase.d.cts.map +0 -1
- package/dist/neutral/HttpBridgeBase.d.mts +0 -45
- package/dist/neutral/HttpBridgeBase.d.mts.map +0 -1
- package/dist/neutral/HttpBridgeBase.d.ts +0 -45
- package/dist/neutral/HttpBridgeBase.d.ts.map +0 -1
- package/dist/neutral/HttpBridgeClientOnly.d.cts +0 -9
- package/dist/neutral/HttpBridgeClientOnly.d.cts.map +0 -1
- package/dist/neutral/HttpBridgeClientOnly.d.mts +0 -9
- package/dist/neutral/HttpBridgeClientOnly.d.mts.map +0 -1
- package/dist/neutral/HttpBridgeClientOnly.d.ts +0 -9
- package/dist/neutral/HttpBridgeClientOnly.d.ts.map +0 -1
- package/dist/neutral/HttpBridgeConfig.d.cts +0 -19
- package/dist/neutral/HttpBridgeConfig.d.cts.map +0 -1
- package/dist/neutral/HttpBridgeConfig.d.mts +0 -19
- package/dist/neutral/HttpBridgeConfig.d.mts.map +0 -1
- package/dist/neutral/HttpBridgeConfig.d.ts +0 -19
- package/dist/neutral/HttpBridgeConfig.d.ts.map +0 -1
- package/dist/neutral/HttpBridgeFull.d.cts +0 -35
- package/dist/neutral/HttpBridgeFull.d.cts.map +0 -1
- package/dist/neutral/HttpBridgeFull.d.mts +0 -35
- package/dist/neutral/HttpBridgeFull.d.mts.map +0 -1
- package/dist/neutral/HttpBridgeFull.d.ts +0 -35
- package/dist/neutral/HttpBridgeFull.d.ts.map +0 -1
- package/dist/neutral/HttpBridgeModuleResolver.d.cts +0 -32
- package/dist/neutral/HttpBridgeModuleResolver.d.cts.map +0 -1
- package/dist/neutral/HttpBridgeModuleResolver.d.mts +0 -32
- package/dist/neutral/HttpBridgeModuleResolver.d.mts.map +0 -1
- package/dist/neutral/HttpBridgeModuleResolver.d.ts +0 -32
- package/dist/neutral/HttpBridgeModuleResolver.d.ts.map +0 -1
- package/dist/neutral/ModuleProxy/ModuleProxy.d.cts +0 -27
- package/dist/neutral/ModuleProxy/ModuleProxy.d.cts.map +0 -1
- package/dist/neutral/ModuleProxy/ModuleProxy.d.mts +0 -27
- package/dist/neutral/ModuleProxy/ModuleProxy.d.mts.map +0 -1
- package/dist/neutral/ModuleProxy/ModuleProxy.d.ts +0 -27
- package/dist/neutral/ModuleProxy/ModuleProxy.d.ts.map +0 -1
- package/dist/neutral/ModuleProxy/index.d.cts +0 -2
- package/dist/neutral/ModuleProxy/index.d.cts.map +0 -1
- package/dist/neutral/ModuleProxy/index.d.mts +0 -2
- package/dist/neutral/ModuleProxy/index.d.mts.map +0 -1
- package/dist/neutral/ModuleProxy/index.d.ts +0 -2
- package/dist/neutral/ModuleProxy/index.d.ts.map +0 -1
- package/dist/neutral/index-browser.cjs +0 -416
- package/dist/neutral/index-browser.cjs.map +0 -1
- package/dist/neutral/index-browser.d.cts +0 -3
- package/dist/neutral/index-browser.d.cts.map +0 -1
- package/dist/neutral/index-browser.d.mts +0 -3
- package/dist/neutral/index-browser.d.mts.map +0 -1
- package/dist/neutral/index-browser.d.ts.map +0 -1
- package/dist/neutral/index.d.cts +0 -3
- package/dist/neutral/index.d.cts.map +0 -1
- package/dist/neutral/index.d.mts +0 -3
- package/dist/neutral/index.d.mts.map +0 -1
- package/dist/neutral/index.d.ts +0 -3
- package/dist/neutral/index.d.ts.map +0 -1
- package/dist/node/HttpBridgeBase.d.cts +0 -45
- package/dist/node/HttpBridgeBase.d.cts.map +0 -1
- package/dist/node/HttpBridgeBase.d.mts +0 -45
- package/dist/node/HttpBridgeBase.d.mts.map +0 -1
- package/dist/node/HttpBridgeBase.d.ts +0 -45
- package/dist/node/HttpBridgeBase.d.ts.map +0 -1
- package/dist/node/HttpBridgeClientOnly.d.cts +0 -9
- package/dist/node/HttpBridgeClientOnly.d.cts.map +0 -1
- package/dist/node/HttpBridgeClientOnly.d.mts +0 -9
- package/dist/node/HttpBridgeClientOnly.d.mts.map +0 -1
- package/dist/node/HttpBridgeClientOnly.d.ts +0 -9
- package/dist/node/HttpBridgeClientOnly.d.ts.map +0 -1
- package/dist/node/HttpBridgeConfig.d.cts +0 -19
- package/dist/node/HttpBridgeConfig.d.cts.map +0 -1
- package/dist/node/HttpBridgeConfig.d.mts +0 -19
- package/dist/node/HttpBridgeConfig.d.mts.map +0 -1
- package/dist/node/HttpBridgeConfig.d.ts +0 -19
- package/dist/node/HttpBridgeConfig.d.ts.map +0 -1
- package/dist/node/HttpBridgeFull.d.cts +0 -35
- package/dist/node/HttpBridgeFull.d.cts.map +0 -1
- package/dist/node/HttpBridgeFull.d.mts +0 -35
- package/dist/node/HttpBridgeFull.d.mts.map +0 -1
- package/dist/node/HttpBridgeFull.d.ts +0 -35
- package/dist/node/HttpBridgeFull.d.ts.map +0 -1
- package/dist/node/HttpBridgeModuleResolver.d.cts +0 -32
- package/dist/node/HttpBridgeModuleResolver.d.cts.map +0 -1
- package/dist/node/HttpBridgeModuleResolver.d.mts +0 -32
- package/dist/node/HttpBridgeModuleResolver.d.mts.map +0 -1
- package/dist/node/HttpBridgeModuleResolver.d.ts +0 -32
- package/dist/node/HttpBridgeModuleResolver.d.ts.map +0 -1
- package/dist/node/ModuleProxy/ModuleProxy.d.cts +0 -27
- package/dist/node/ModuleProxy/ModuleProxy.d.cts.map +0 -1
- package/dist/node/ModuleProxy/ModuleProxy.d.mts +0 -27
- package/dist/node/ModuleProxy/ModuleProxy.d.mts.map +0 -1
- package/dist/node/ModuleProxy/ModuleProxy.d.ts +0 -27
- package/dist/node/ModuleProxy/ModuleProxy.d.ts.map +0 -1
- package/dist/node/ModuleProxy/index.d.cts +0 -2
- package/dist/node/ModuleProxy/index.d.cts.map +0 -1
- package/dist/node/ModuleProxy/index.d.mts +0 -2
- package/dist/node/ModuleProxy/index.d.mts.map +0 -1
- package/dist/node/ModuleProxy/index.d.ts +0 -2
- package/dist/node/ModuleProxy/index.d.ts.map +0 -1
- package/dist/node/index-browser.d.cts +0 -3
- package/dist/node/index-browser.d.cts.map +0 -1
- package/dist/node/index-browser.d.mts +0 -3
- package/dist/node/index-browser.d.mts.map +0 -1
- package/dist/node/index-browser.d.ts +0 -3
- package/dist/node/index-browser.d.ts.map +0 -1
- package/dist/node/index.cjs +0 -631
- package/dist/node/index.cjs.map +0 -1
- package/dist/node/index.d.cts +0 -3
- package/dist/node/index.d.cts.map +0 -1
- package/dist/node/index.d.mts +0 -3
- package/dist/node/index.d.mts.map +0 -1
- package/dist/node/index.d.ts.map +0 -1
package/dist/node/index.mjs
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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: (
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
186
|
-
await
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
277
|
-
const nodeManifest = state
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
327
|
+
this.logger?.error(`targetQuery failed [${moduleUrl}]`);
|
|
322
328
|
throw `targetQuery failed [${moduleUrl}] [${result.status}]`;
|
|
323
329
|
}
|
|
324
|
-
return
|
|
330
|
+
return result.data?.data;
|
|
325
331
|
} catch (ex) {
|
|
326
332
|
const error = ex;
|
|
327
|
-
|
|
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
|
-
|
|
359
|
+
this.logger?.warn(`Unable to connect to remote node: ${error.message} [${this.clientUrl}]`);
|
|
355
360
|
}
|
|
356
361
|
}
|
|
357
362
|
async resolveRootNode(nodeManifest) {
|
|
358
|
-
|
|
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
|
|
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
|
|
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)
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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 =
|
|
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(
|
|
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);
|
package/dist/node/index.mjs.map
CHANGED
|
@@ -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"]}
|