@xyo-network/bridge-http 2.103.8 → 2.104.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/{HttpBridge.d.cts → HttpBridgeBase.d.cts} +3 -3
- package/dist/browser/HttpBridgeBase.d.cts.map +1 -0
- package/dist/browser/{HttpBridge.d.ts → HttpBridgeBase.d.mts} +3 -3
- package/dist/browser/HttpBridgeBase.d.mts.map +1 -0
- package/dist/browser/{HttpBridge.d.mts → HttpBridgeBase.d.ts} +3 -3
- package/dist/browser/HttpBridgeBase.d.ts.map +1 -0
- package/dist/browser/HttpBridgeClientOnly.d.cts +9 -0
- package/dist/browser/HttpBridgeClientOnly.d.cts.map +1 -0
- package/dist/browser/HttpBridgeClientOnly.d.mts +9 -0
- package/dist/browser/HttpBridgeClientOnly.d.mts.map +1 -0
- package/dist/browser/HttpBridgeClientOnly.d.ts +9 -0
- package/dist/browser/HttpBridgeClientOnly.d.ts.map +1 -0
- package/dist/browser/HttpBridgeConfig.d.cts +7 -0
- package/dist/browser/HttpBridgeConfig.d.cts.map +1 -1
- package/dist/browser/HttpBridgeConfig.d.mts +7 -0
- package/dist/browser/HttpBridgeConfig.d.mts.map +1 -1
- package/dist/browser/HttpBridgeConfig.d.ts +7 -0
- package/dist/browser/HttpBridgeConfig.d.ts.map +1 -1
- package/dist/browser/HttpBridgeFull.d.cts +29 -0
- package/dist/browser/HttpBridgeFull.d.cts.map +1 -0
- package/dist/browser/HttpBridgeFull.d.mts +29 -0
- package/dist/browser/HttpBridgeFull.d.mts.map +1 -0
- package/dist/browser/HttpBridgeFull.d.ts +29 -0
- package/dist/browser/HttpBridgeFull.d.ts.map +1 -0
- package/dist/browser/HttpBridgeModuleResolver.d.cts.map +1 -1
- package/dist/browser/HttpBridgeModuleResolver.d.mts.map +1 -1
- package/dist/browser/HttpBridgeModuleResolver.d.ts.map +1 -1
- package/dist/browser/{index.cjs → index-browser.cjs} +47 -21
- package/dist/browser/index-browser.cjs.map +1 -0
- package/dist/browser/index-browser.d.cts +3 -0
- package/dist/browser/index-browser.d.cts.map +1 -0
- package/dist/browser/index-browser.d.mts +3 -0
- package/dist/browser/index-browser.d.mts.map +1 -0
- package/dist/browser/index-browser.d.ts +3 -0
- package/dist/browser/index-browser.d.ts.map +1 -0
- package/dist/browser/{index.js → index-browser.js} +43 -17
- package/dist/browser/index-browser.js.map +1 -0
- package/dist/browser/index.d.cts +1 -1
- package/dist/browser/index.d.cts.map +1 -1
- package/dist/browser/index.d.mts +1 -1
- package/dist/browser/index.d.mts.map +1 -1
- package/dist/browser/index.d.ts +1 -1
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/neutral/{HttpBridge.d.cts → HttpBridgeBase.d.cts} +3 -3
- package/dist/neutral/HttpBridgeBase.d.cts.map +1 -0
- package/dist/neutral/HttpBridgeBase.d.mts +43 -0
- package/dist/neutral/HttpBridgeBase.d.mts.map +1 -0
- package/dist/neutral/HttpBridgeBase.d.ts +43 -0
- package/dist/neutral/HttpBridgeBase.d.ts.map +1 -0
- package/dist/neutral/HttpBridgeClientOnly.d.cts +9 -0
- package/dist/neutral/HttpBridgeClientOnly.d.cts.map +1 -0
- package/dist/neutral/HttpBridgeClientOnly.d.mts +9 -0
- package/dist/neutral/HttpBridgeClientOnly.d.mts.map +1 -0
- package/dist/neutral/HttpBridgeClientOnly.d.ts +9 -0
- package/dist/neutral/HttpBridgeClientOnly.d.ts.map +1 -0
- package/dist/neutral/HttpBridgeConfig.d.cts +7 -0
- package/dist/neutral/HttpBridgeConfig.d.cts.map +1 -1
- package/dist/neutral/HttpBridgeConfig.d.mts +7 -0
- package/dist/neutral/HttpBridgeConfig.d.mts.map +1 -1
- package/dist/neutral/HttpBridgeConfig.d.ts +7 -0
- package/dist/neutral/HttpBridgeConfig.d.ts.map +1 -1
- package/dist/neutral/HttpBridgeFull.d.cts +29 -0
- package/dist/neutral/HttpBridgeFull.d.cts.map +1 -0
- package/dist/neutral/HttpBridgeFull.d.mts +29 -0
- package/dist/neutral/HttpBridgeFull.d.mts.map +1 -0
- package/dist/neutral/HttpBridgeFull.d.ts +29 -0
- package/dist/neutral/HttpBridgeFull.d.ts.map +1 -0
- package/dist/neutral/HttpBridgeModuleResolver.d.cts.map +1 -1
- package/dist/neutral/HttpBridgeModuleResolver.d.mts.map +1 -1
- package/dist/neutral/HttpBridgeModuleResolver.d.ts.map +1 -1
- package/dist/neutral/{index.cjs → index-browser.cjs} +47 -21
- package/dist/neutral/index-browser.cjs.map +1 -0
- package/dist/neutral/index-browser.d.cts +3 -0
- package/dist/neutral/index-browser.d.cts.map +1 -0
- package/dist/neutral/index-browser.d.mts +3 -0
- package/dist/neutral/index-browser.d.mts.map +1 -0
- package/dist/neutral/index-browser.d.ts +3 -0
- package/dist/neutral/index-browser.d.ts.map +1 -0
- package/dist/neutral/{index.js → index-browser.js} +43 -17
- package/dist/neutral/index-browser.js.map +1 -0
- package/dist/neutral/index.d.cts +1 -1
- package/dist/neutral/index.d.cts.map +1 -1
- package/dist/neutral/index.d.mts +1 -1
- package/dist/neutral/index.d.mts.map +1 -1
- package/dist/neutral/index.d.ts +1 -1
- package/dist/neutral/index.d.ts.map +1 -1
- package/dist/node/HttpBridgeBase.d.cts +43 -0
- package/dist/node/HttpBridgeBase.d.cts.map +1 -0
- package/dist/node/HttpBridgeBase.d.mts +43 -0
- package/dist/node/HttpBridgeBase.d.mts.map +1 -0
- package/dist/node/HttpBridgeBase.d.ts +43 -0
- package/dist/node/HttpBridgeBase.d.ts.map +1 -0
- package/dist/node/HttpBridgeClientOnly.d.cts +9 -0
- package/dist/node/HttpBridgeClientOnly.d.cts.map +1 -0
- package/dist/node/HttpBridgeClientOnly.d.mts +9 -0
- package/dist/node/HttpBridgeClientOnly.d.mts.map +1 -0
- package/dist/node/HttpBridgeClientOnly.d.ts +9 -0
- package/dist/node/HttpBridgeClientOnly.d.ts.map +1 -0
- package/dist/node/HttpBridgeConfig.d.cts +7 -0
- package/dist/node/HttpBridgeConfig.d.cts.map +1 -1
- package/dist/node/HttpBridgeConfig.d.mts +7 -0
- package/dist/node/HttpBridgeConfig.d.mts.map +1 -1
- package/dist/node/HttpBridgeConfig.d.ts +7 -0
- package/dist/node/HttpBridgeConfig.d.ts.map +1 -1
- package/dist/node/HttpBridgeFull.d.cts +29 -0
- package/dist/node/HttpBridgeFull.d.cts.map +1 -0
- package/dist/node/HttpBridgeFull.d.mts +29 -0
- package/dist/node/HttpBridgeFull.d.mts.map +1 -0
- package/dist/node/HttpBridgeFull.d.ts +29 -0
- package/dist/node/HttpBridgeFull.d.ts.map +1 -0
- package/dist/node/HttpBridgeModuleResolver.d.cts.map +1 -1
- package/dist/node/HttpBridgeModuleResolver.d.mts.map +1 -1
- package/dist/node/HttpBridgeModuleResolver.d.ts.map +1 -1
- package/dist/node/index-browser.d.cts +3 -0
- package/dist/node/index-browser.d.cts.map +1 -0
- package/dist/node/index-browser.d.mts +3 -0
- package/dist/node/index-browser.d.mts.map +1 -0
- package/dist/node/index-browser.d.ts +3 -0
- package/dist/node/index-browser.d.ts.map +1 -0
- package/dist/node/index.cjs +197 -27
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +1 -1
- package/dist/node/index.d.cts.map +1 -1
- package/dist/node/index.d.mts +1 -1
- package/dist/node/index.d.mts.map +1 -1
- package/dist/node/index.d.ts +1 -1
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +188 -27
- package/dist/node/index.js.map +1 -1
- package/package.json +38 -33
- package/src/{HttpBridge.ts → HttpBridgeBase.ts} +14 -13
- package/src/HttpBridgeClientOnly.ts +10 -0
- package/src/HttpBridgeConfig.ts +7 -0
- package/src/HttpBridgeFull.ts +143 -0
- package/src/HttpBridgeModuleResolver.ts +2 -0
- package/src/index-browser.ts +2 -0
- package/src/index.ts +1 -1
- package/xy.config.ts +17 -0
- package/dist/browser/HttpBridge.d.cts.map +0 -1
- package/dist/browser/HttpBridge.d.mts.map +0 -1
- package/dist/browser/HttpBridge.d.ts.map +0 -1
- package/dist/browser/index.cjs.map +0 -1
- package/dist/browser/index.js.map +0 -1
- package/dist/neutral/HttpBridge.d.cts.map +0 -1
- package/dist/neutral/HttpBridge.d.mts +0 -43
- package/dist/neutral/HttpBridge.d.mts.map +0 -1
- package/dist/neutral/HttpBridge.d.ts +0 -43
- package/dist/neutral/HttpBridge.d.ts.map +0 -1
- package/dist/neutral/index.cjs.map +0 -1
- package/dist/neutral/index.js.map +0 -1
- package/dist/node/HttpBridge.d.cts +0 -43
- package/dist/node/HttpBridge.d.cts.map +0 -1
- package/dist/node/HttpBridge.d.mts +0 -43
- package/dist/node/HttpBridge.d.mts.map +0 -1
- package/dist/node/HttpBridge.d.ts +0 -43
- package/dist/node/HttpBridge.d.ts.map +0 -1
package/dist/node/index.js
CHANGED
|
@@ -9,7 +9,18 @@ var __publicField = (obj, key, value) => {
|
|
|
9
9
|
};
|
|
10
10
|
var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
|
|
11
11
|
|
|
12
|
-
// src/
|
|
12
|
+
// src/HttpBridgeConfig.ts
|
|
13
|
+
var HttpBridgeConfigSchema = "network.xyo.bridge.http.config";
|
|
14
|
+
|
|
15
|
+
// src/HttpBridgeFull.ts
|
|
16
|
+
import { assertEx as assertEx3 } from "@xylabs/assert";
|
|
17
|
+
import { exists as exists2 } from "@xylabs/exists";
|
|
18
|
+
import { toJsonString as toJsonString2 } from "@xylabs/object";
|
|
19
|
+
import { isQueryBoundWitness } from "@xyo-network/boundwitness-model";
|
|
20
|
+
import { creatableModule as creatableModule2, resolveAddressToInstanceUp } from "@xyo-network/module-model";
|
|
21
|
+
import express from "express";
|
|
22
|
+
|
|
23
|
+
// src/HttpBridgeBase.ts
|
|
13
24
|
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
14
25
|
import { AxiosJson } from "@xylabs/axios";
|
|
15
26
|
import { exists } from "@xylabs/exists";
|
|
@@ -23,9 +34,6 @@ import { isPayloadOfSchemaType } from "@xyo-network/payload-model";
|
|
|
23
34
|
import { Mutex, Semaphore } from "async-mutex";
|
|
24
35
|
import { LRUCache } from "lru-cache";
|
|
25
36
|
|
|
26
|
-
// src/HttpBridgeConfig.ts
|
|
27
|
-
var HttpBridgeConfigSchema = "network.xyo.bridge.http.config";
|
|
28
|
-
|
|
29
37
|
// src/HttpBridgeModuleResolver.ts
|
|
30
38
|
import { assertEx } from "@xylabs/assert";
|
|
31
39
|
import { isAddress } from "@xylabs/hex";
|
|
@@ -95,6 +103,8 @@ var _HttpBridgeModuleResolver = class _HttpBridgeModuleResolver extends Abstract
|
|
|
95
103
|
},
|
|
96
104
|
host: this,
|
|
97
105
|
moduleAddress,
|
|
106
|
+
onQuerySendFinished: this.params.onQuerySendFinished,
|
|
107
|
+
onQuerySendStarted: this.params.onQuerySendStarted,
|
|
98
108
|
querySender: this.querySender
|
|
99
109
|
};
|
|
100
110
|
(_a = this.logger) == null ? void 0 : _a.debug(`creating HttpProxy [${moduleAddress}] ${id}`);
|
|
@@ -126,7 +136,7 @@ var _HttpBridgeModuleResolver = class _HttpBridgeModuleResolver extends Abstract
|
|
|
126
136
|
__name(_HttpBridgeModuleResolver, "HttpBridgeModuleResolver");
|
|
127
137
|
var HttpBridgeModuleResolver = _HttpBridgeModuleResolver;
|
|
128
138
|
|
|
129
|
-
// src/
|
|
139
|
+
// src/HttpBridgeBase.ts
|
|
130
140
|
function _ts_decorate(decorators, target, key, desc) {
|
|
131
141
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
132
142
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
@@ -138,11 +148,11 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
138
148
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
139
149
|
}
|
|
140
150
|
__name(_ts_decorate, "_ts_decorate");
|
|
141
|
-
var
|
|
151
|
+
var _HttpBridgeBase = class _HttpBridgeBase extends AbstractBridge {
|
|
142
152
|
_axios;
|
|
143
153
|
_discoverRootsMutex = new Mutex();
|
|
144
154
|
_failureTimeCache = new LRUCache({
|
|
145
|
-
max:
|
|
155
|
+
max: _HttpBridgeBase.maxFailureCacheSize
|
|
146
156
|
});
|
|
147
157
|
_querySemaphore;
|
|
148
158
|
_resolver;
|
|
@@ -150,17 +160,18 @@ var _HttpBridge = class _HttpBridge extends AbstractBridge {
|
|
|
150
160
|
this._axios = this._axios ?? new AxiosJson();
|
|
151
161
|
return this._axios;
|
|
152
162
|
}
|
|
163
|
+
get clientUrl() {
|
|
164
|
+
var _a;
|
|
165
|
+
return assertEx2(((_a = this.config.client) == null ? void 0 : _a.url) ?? this.config.nodeUrl, () => "No Url Set");
|
|
166
|
+
}
|
|
153
167
|
get failureRetryTime() {
|
|
154
|
-
return this.config.failureRetryTime ??
|
|
168
|
+
return this.config.failureRetryTime ?? _HttpBridgeBase.defaultFailureRetryTime;
|
|
155
169
|
}
|
|
156
170
|
get maxConnections() {
|
|
157
|
-
return this.config.maxConnections ??
|
|
171
|
+
return this.config.maxConnections ?? _HttpBridgeBase.defaultMaxConnections;
|
|
158
172
|
}
|
|
159
173
|
get maxPayloadSizeWarning() {
|
|
160
|
-
return this.config.maxPayloadSizeWarning ??
|
|
161
|
-
}
|
|
162
|
-
get nodeUrl() {
|
|
163
|
-
return assertEx2(this.config.nodeUrl, () => "No Url Set");
|
|
174
|
+
return this.config.maxPayloadSizeWarning ?? _HttpBridgeBase.defaultMaxPayloadSizeWarning;
|
|
164
175
|
}
|
|
165
176
|
get querySemaphore() {
|
|
166
177
|
this._querySemaphore = this._querySemaphore ?? new Semaphore(this.maxConnections);
|
|
@@ -188,7 +199,7 @@ var _HttpBridge = class _HttpBridge extends AbstractBridge {
|
|
|
188
199
|
},
|
|
189
200
|
querySender: this,
|
|
190
201
|
root: this,
|
|
191
|
-
rootUrl: this.
|
|
202
|
+
rootUrl: this.clientUrl,
|
|
192
203
|
wrapperAccount: this.account
|
|
193
204
|
});
|
|
194
205
|
return this._resolver;
|
|
@@ -218,7 +229,7 @@ var _HttpBridge = class _HttpBridge extends AbstractBridge {
|
|
|
218
229
|
});
|
|
219
230
|
}
|
|
220
231
|
moduleUrl(address) {
|
|
221
|
-
return new URL(address, this.
|
|
232
|
+
return new URL(address, this.clientUrl);
|
|
222
233
|
}
|
|
223
234
|
async sendBridgeQuery(targetAddress, query, payloads) {
|
|
224
235
|
var _a, _b, _c, _d;
|
|
@@ -271,7 +282,7 @@ var _HttpBridge = class _HttpBridge extends AbstractBridge {
|
|
|
271
282
|
};
|
|
272
283
|
const boundQuery = await this.bindQuery(queryPayload);
|
|
273
284
|
try {
|
|
274
|
-
const response = await this.axios.post(this.
|
|
285
|
+
const response = await this.axios.post(this.clientUrl.toString(), boundQuery);
|
|
275
286
|
if (response.status === 404) {
|
|
276
287
|
return [];
|
|
277
288
|
}
|
|
@@ -282,7 +293,7 @@ var _HttpBridge = class _HttpBridge extends AbstractBridge {
|
|
|
282
293
|
return payloads;
|
|
283
294
|
} catch (ex) {
|
|
284
295
|
const error = ex;
|
|
285
|
-
(_a = this.logger) == null ? void 0 : _a.warn(`Unable to connect to remote node: ${error.message} [${this.
|
|
296
|
+
(_a = this.logger) == null ? void 0 : _a.warn(`Unable to connect to remote node: ${error.message} [${this.clientUrl}]`);
|
|
286
297
|
}
|
|
287
298
|
}
|
|
288
299
|
async resolveRootNode(nodeManifest) {
|
|
@@ -303,19 +314,169 @@ var _HttpBridge = class _HttpBridge extends AbstractBridge {
|
|
|
303
314
|
return [];
|
|
304
315
|
}
|
|
305
316
|
};
|
|
306
|
-
__name(
|
|
307
|
-
__publicField(
|
|
308
|
-
...__superGet(
|
|
317
|
+
__name(_HttpBridgeBase, "HttpBridgeBase");
|
|
318
|
+
__publicField(_HttpBridgeBase, "configSchemas", [
|
|
319
|
+
...__superGet(_HttpBridgeBase, _HttpBridgeBase, "configSchemas"),
|
|
309
320
|
HttpBridgeConfigSchema
|
|
310
321
|
]);
|
|
311
|
-
__publicField(
|
|
312
|
-
__publicField(
|
|
313
|
-
__publicField(
|
|
314
|
-
__publicField(
|
|
315
|
-
__publicField(
|
|
316
|
-
var
|
|
317
|
-
|
|
322
|
+
__publicField(_HttpBridgeBase, "defaultConfigSchema", HttpBridgeConfigSchema);
|
|
323
|
+
__publicField(_HttpBridgeBase, "defaultFailureRetryTime", 1e3 * 60);
|
|
324
|
+
__publicField(_HttpBridgeBase, "defaultMaxConnections", 4);
|
|
325
|
+
__publicField(_HttpBridgeBase, "defaultMaxPayloadSizeWarning", 256 * 256);
|
|
326
|
+
__publicField(_HttpBridgeBase, "maxFailureCacheSize", 1e3);
|
|
327
|
+
var HttpBridgeBase = _HttpBridgeBase;
|
|
328
|
+
HttpBridgeBase = _ts_decorate([
|
|
318
329
|
creatableModule()
|
|
330
|
+
], HttpBridgeBase);
|
|
331
|
+
|
|
332
|
+
// src/HttpBridgeFull.ts
|
|
333
|
+
function _ts_decorate2(decorators, target, key, desc) {
|
|
334
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
335
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
336
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
337
|
+
else
|
|
338
|
+
for (var i = decorators.length - 1; i >= 0; i--)
|
|
339
|
+
if (d = decorators[i])
|
|
340
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
341
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
342
|
+
}
|
|
343
|
+
__name(_ts_decorate2, "_ts_decorate");
|
|
344
|
+
var _HttpBridge = class _HttpBridge extends HttpBridgeBase {
|
|
345
|
+
_app;
|
|
346
|
+
_exposedModules = [];
|
|
347
|
+
_server;
|
|
348
|
+
get app() {
|
|
349
|
+
this._app = this._app ?? (() => {
|
|
350
|
+
const app = express();
|
|
351
|
+
app.use(express.json());
|
|
352
|
+
app.post("/", (req, res) => {
|
|
353
|
+
this.handlePost(req, res);
|
|
354
|
+
});
|
|
355
|
+
return app;
|
|
356
|
+
})();
|
|
357
|
+
return this._app;
|
|
358
|
+
}
|
|
359
|
+
async exposeChild(mod, options) {
|
|
360
|
+
var _a, _b;
|
|
361
|
+
const { maxDepth = 5 } = options ?? {};
|
|
362
|
+
console.log(`exposeChild: ${mod.address} ${mod == null ? void 0 : mod.id} ${maxDepth}`);
|
|
363
|
+
assertEx3(this.config.host, () => "Not configured as a host");
|
|
364
|
+
this._exposedModules.push(new WeakRef(mod));
|
|
365
|
+
const children = maxDepth > 0 ? await ((_a = mod.publicChildren) == null ? void 0 : _a.call(mod)) ?? [] : [];
|
|
366
|
+
this.logger.log(`childrenToExpose [${mod.id}][${mod.address}]: ${toJsonString2(children.map((child) => child.id))}`);
|
|
367
|
+
const exposedChildren = (await Promise.all(children.map((child) => this.exposeChild(child, {
|
|
368
|
+
maxDepth: maxDepth - 1,
|
|
369
|
+
required: false
|
|
370
|
+
})))).flat().filter(exists2);
|
|
371
|
+
const allExposed = [
|
|
372
|
+
mod,
|
|
373
|
+
...exposedChildren
|
|
374
|
+
];
|
|
375
|
+
for (const exposedMod of allExposed)
|
|
376
|
+
(_b = this.logger) == null ? void 0 : _b.log(`exposed: ${exposedMod.address} [${mod.id}]`);
|
|
377
|
+
return allExposed;
|
|
378
|
+
}
|
|
379
|
+
async exposeHandler(address, options) {
|
|
380
|
+
const { required = true } = options ?? {};
|
|
381
|
+
const mod = await resolveAddressToInstanceUp(this, address);
|
|
382
|
+
console.log(`exposeHandler: ${address} ${mod == null ? void 0 : mod.id}`);
|
|
383
|
+
if (required && !mod) {
|
|
384
|
+
throw new Error(`Unable to find required module: ${address}`);
|
|
385
|
+
}
|
|
386
|
+
if (mod) {
|
|
387
|
+
return this.exposeChild(mod, options);
|
|
388
|
+
}
|
|
389
|
+
return [];
|
|
390
|
+
}
|
|
391
|
+
exposedHandler() {
|
|
392
|
+
return this._exposedModules.map((ref) => {
|
|
393
|
+
var _a;
|
|
394
|
+
return (_a = ref.deref()) == null ? void 0 : _a.address;
|
|
395
|
+
}).filter(exists2);
|
|
396
|
+
}
|
|
397
|
+
async startHandler() {
|
|
398
|
+
return await super.startHandler() && this.startHttpServer();
|
|
399
|
+
}
|
|
400
|
+
async stopHandler(_timeout) {
|
|
401
|
+
return await super.stopHandler() && this.stopHttpServer();
|
|
402
|
+
}
|
|
403
|
+
async unexposeHandler(address, options) {
|
|
404
|
+
var _a, _b;
|
|
405
|
+
const { maxDepth = 2, required = true } = options ?? {};
|
|
406
|
+
assertEx3(this.config.host, () => "Not configured as a host");
|
|
407
|
+
const mod = (_a = this._exposedModules.find((ref) => {
|
|
408
|
+
var _a2;
|
|
409
|
+
return ((_a2 = ref.deref()) == null ? void 0 : _a2.address) === address;
|
|
410
|
+
})) == null ? void 0 : _a.deref();
|
|
411
|
+
assertEx3(!required || mod, () => `Module not exposed: ${address}`);
|
|
412
|
+
this._exposedModules = this._exposedModules.filter((ref) => {
|
|
413
|
+
var _a2;
|
|
414
|
+
return ((_a2 = ref.deref()) == null ? void 0 : _a2.address) !== address;
|
|
415
|
+
});
|
|
416
|
+
if (mod) {
|
|
417
|
+
const children = maxDepth > 0 ? await ((_b = mod.publicChildren) == null ? void 0 : _b.call(mod)) ?? [] : [];
|
|
418
|
+
const exposedChildren = (await Promise.all(children.map((child) => this.unexposeHandler(child.address, {
|
|
419
|
+
maxDepth: maxDepth - 1,
|
|
420
|
+
required: false
|
|
421
|
+
})))).flat().filter(exists2);
|
|
422
|
+
return [
|
|
423
|
+
mod,
|
|
424
|
+
...exposedChildren
|
|
425
|
+
];
|
|
426
|
+
}
|
|
427
|
+
return [];
|
|
428
|
+
}
|
|
429
|
+
async callLocalModule(address, query, payloads) {
|
|
430
|
+
var _a;
|
|
431
|
+
const mod = (_a = this._exposedModules.find((ref) => {
|
|
432
|
+
var _a2;
|
|
433
|
+
return ((_a2 = ref.deref()) == null ? void 0 : _a2.address) === address;
|
|
434
|
+
})) == null ? void 0 : _a.deref();
|
|
435
|
+
if (mod) {
|
|
436
|
+
return await mod.query(query, payloads);
|
|
437
|
+
}
|
|
438
|
+
return null;
|
|
439
|
+
}
|
|
440
|
+
handlePost(req, res) {
|
|
441
|
+
const allPayloads = req.body;
|
|
442
|
+
const query = allPayloads.find(isQueryBoundWitness);
|
|
443
|
+
const payloads = allPayloads.filter((payload) => !isQueryBoundWitness(payload));
|
|
444
|
+
this.callLocalModule(req.route, query, payloads).then((result) => {
|
|
445
|
+
if (result === null) {
|
|
446
|
+
res.status(404).json({
|
|
447
|
+
error: "Module not found"
|
|
448
|
+
});
|
|
449
|
+
} else {
|
|
450
|
+
const envelope = {
|
|
451
|
+
data: result
|
|
452
|
+
};
|
|
453
|
+
res.json(envelope);
|
|
454
|
+
}
|
|
455
|
+
}).catch((ex) => {
|
|
456
|
+
res.status(500).json({
|
|
457
|
+
error: ex.message
|
|
458
|
+
});
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
startHttpServer() {
|
|
462
|
+
var _a;
|
|
463
|
+
if (this.config.host) {
|
|
464
|
+
assertEx3(!this._server, () => "Server already started");
|
|
465
|
+
this._server = this.app.listen(((_a = this.config.host) == null ? void 0 : _a.port) ?? 3030);
|
|
466
|
+
}
|
|
467
|
+
return true;
|
|
468
|
+
}
|
|
469
|
+
stopHttpServer() {
|
|
470
|
+
const server = assertEx3(this._server, () => "Server not started");
|
|
471
|
+
server.close();
|
|
472
|
+
this._server = void 0;
|
|
473
|
+
return true;
|
|
474
|
+
}
|
|
475
|
+
};
|
|
476
|
+
__name(_HttpBridge, "HttpBridge");
|
|
477
|
+
var HttpBridge = _HttpBridge;
|
|
478
|
+
HttpBridge = _ts_decorate2([
|
|
479
|
+
creatableModule2()
|
|
319
480
|
], HttpBridge);
|
|
320
481
|
export {
|
|
321
482
|
HttpBridge,
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/HttpBridge.ts","../../src/HttpBridgeConfig.ts","../../src/HttpBridgeModuleResolver.ts","../../src/ModuleProxy/ModuleProxy.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { AxiosError, AxiosJson } from '@xylabs/axios'\nimport { exists } from '@xylabs/exists'\nimport { forget } from '@xylabs/forget'\nimport { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport { ApiEnvelope } from '@xyo-network/api-models'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractBridge } from '@xyo-network/bridge-abstract'\nimport {\n BridgeExposeOptions,\n BridgeModule,\n BridgeParams,\n BridgeUnexposeOptions,\n QuerySendFinishedEventArgs,\n QuerySendStartedEventArgs,\n} from '@xyo-network/bridge-model'\nimport { NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport {\n AnyConfigSchema,\n creatableModule,\n ModuleInstance,\n ModuleQueryResult,\n ModuleResolverInstance,\n ModuleStateQuery,\n ModuleStateQuerySchema,\n} from '@xyo-network/module-model'\nimport { asAttachableNodeInstance } from '@xyo-network/node-model'\nimport { isPayloadOfSchemaType, Payload, Schema, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex, Semaphore } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport { HttpBridgeConfig, HttpBridgeConfigSchema } from './HttpBridgeConfig'\nimport { HttpBridgeModuleResolver } from './HttpBridgeModuleResolver'\nimport { BridgeQuerySender } from './ModuleProxy'\n\nexport interface HttpBridgeParams extends BridgeParams<AnyConfigSchema<HttpBridgeConfig>> {}\n\n@creatableModule()\nexport class HttpBridge<TParams extends HttpBridgeParams> extends AbstractBridge<TParams> implements BridgeModule<TParams>, BridgeQuerySender {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, HttpBridgeConfigSchema]\n static override readonly defaultConfigSchema: Schema = HttpBridgeConfigSchema\n static defaultFailureRetryTime = 1000 * 60\n static defaultMaxConnections = 4\n static defaultMaxPayloadSizeWarning = 256 * 256\n static maxFailureCacheSize = 1000\n\n private _axios?: AxiosJson\n private _discoverRootsMutex = new Mutex()\n private _failureTimeCache = new LRUCache<Address, number>({ max: HttpBridge.maxFailureCacheSize })\n private _querySemaphore?: Semaphore\n private _resolver?: HttpBridgeModuleResolver\n\n get axios() {\n this._axios = this._axios ?? new AxiosJson()\n return this._axios\n }\n\n get failureRetryTime() {\n return this.config.failureRetryTime ?? HttpBridge.defaultFailureRetryTime\n }\n\n get maxConnections() {\n return this.config.maxConnections ?? HttpBridge.defaultMaxConnections\n }\n\n get maxPayloadSizeWarning() {\n return this.config.maxPayloadSizeWarning ?? HttpBridge.defaultMaxPayloadSizeWarning\n }\n\n get nodeUrl() {\n return assertEx(this.config.nodeUrl, () => 'No Url Set')\n }\n\n get querySemaphore() {\n this._querySemaphore = this._querySemaphore ?? new Semaphore(this.maxConnections)\n return this._querySemaphore\n }\n\n override get resolver() {\n this._resolver =\n this._resolver ??\n new HttpBridgeModuleResolver({\n additionalSigners: this.additionalSigners,\n archiving: { ...this.archiving, resolveArchivists: this.resolveArchivingArchivists.bind(this) },\n bridge: this,\n onQuerySendFinished: (args: Omit<QuerySendFinishedEventArgs, 'module'>) => {\n forget(this.emit('querySendFinished', { module: this, ...args }))\n },\n onQuerySendStarted: (args: Omit<QuerySendStartedEventArgs, 'module'>) => {\n forget(this.emit('querySendStarted', { module: this, ...args }))\n },\n querySender: this,\n root: this,\n rootUrl: this.nodeUrl,\n wrapperAccount: this.account,\n })\n return this._resolver\n }\n\n override exposeHandler(_id: string, _options?: BridgeExposeOptions | undefined): Promisable<ModuleInstance[]> {\n throw new Error('Unsupported')\n }\n\n override exposedHandler(): Promisable<Address[]> {\n throw new Error('Unsupported')\n }\n\n async getRoots(force?: boolean): Promise<ModuleInstance[]> {\n return await this._discoverRootsMutex.runExclusive(async () => {\n if (this._roots === undefined || force) {\n const state = await this.getRootState()\n this.logger?.debug(`HttpBridge:discoverRoots.state [${state?.length}]`)\n const nodeManifest = state?.find(isPayloadOfSchemaType<WithMeta<NodeManifestPayload>>(NodeManifestPayloadSchema))\n if (nodeManifest) {\n const mods = (await this.resolveRootNode(nodeManifest)).filter(exists)\n this.logger?.debug(`HttpBridge:discoverRoots [${mods.length}]`)\n this._roots = mods\n } else {\n this._roots = []\n }\n }\n return this._roots\n })\n }\n\n moduleUrl(address: Address) {\n return new URL(address, this.nodeUrl)\n }\n\n async sendBridgeQuery<TOut extends Payload = Payload, TQuery extends QueryBoundWitness = QueryBoundWitness, TIn extends Payload = Payload>(\n targetAddress: Address,\n query: TQuery,\n payloads?: TIn[],\n ): Promise<ModuleQueryResult<TOut>> {\n const lastFailureTime = this._failureTimeCache.get(targetAddress)\n if (lastFailureTime !== undefined) {\n const now = Date.now()\n const timeSincePreviousFailure = now - lastFailureTime\n if (timeSincePreviousFailure > this.failureRetryTime) {\n throw new Error(`target module failed recently [${targetAddress}] [${timeSincePreviousFailure}ms ago]`)\n }\n this._failureTimeCache.delete(targetAddress)\n }\n try {\n await this.querySemaphore.acquire()\n const payloadSize = JSON.stringify([query, payloads]).length\n if (payloadSize > this.maxPayloadSizeWarning) {\n this.logger?.warn(\n `Large targetQuery being sent: ${payloadSize} bytes [${this.address}][${this.moduleAddress}] [${query.schema}] [${payloads?.length}]`,\n )\n }\n const moduleUrl = this.moduleUrl(targetAddress).href\n const result = await this.axios.post<ApiEnvelope<ModuleQueryResult<TOut>>>(moduleUrl, [query, payloads])\n if (result.status === 404) {\n throw `target module not found [${moduleUrl}] [${result.status}]`\n }\n if (result.status >= 400) {\n this.logger?.error(`targetQuery failed [${moduleUrl}]`)\n throw `targetQuery failed [${moduleUrl}] [${result.status}]`\n }\n return result.data?.data\n } catch (ex) {\n const error = ex as AxiosError\n this.logger?.error(`Error: ${toJsonString(error)}`)\n throw error\n } finally {\n this.querySemaphore.release()\n }\n }\n\n override unexposeHandler(_id: string, _options?: BridgeUnexposeOptions | undefined): Promisable<ModuleInstance[]> {\n throw new Error('Unsupported')\n }\n\n private async getRootState() {\n const queryPayload: ModuleStateQuery = { schema: ModuleStateQuerySchema }\n const boundQuery = await this.bindQuery(queryPayload)\n try {\n const response = await this.axios.post<ApiEnvelope<ModuleQueryResult>>(this.nodeUrl.toString(), boundQuery)\n if (response.status === 404) {\n return []\n }\n const [, payloads, errors] = response.data.data\n if (errors.length > 0) {\n throw new Error(`getRootState failed: ${JSON.stringify(errors, null, 2)}`)\n }\n return payloads\n } catch (ex) {\n const error = ex as Error\n this.logger?.warn(`Unable to connect to remote node: ${error.message} [${this.nodeUrl}]`)\n }\n }\n\n private async resolveRootNode(nodeManifest: NodeManifestPayload): Promise<ModuleInstance[]> {\n const rootModule = assertEx(\n (await this.resolver.resolveHandler(assertEx(nodeManifest.status?.address, () => 'Root has no address'))).at(0),\n () => `Root not found [${nodeManifest.status?.address}]`,\n )\n assertEx(rootModule.constructor.name !== 'HttpModuleProxy', () => 'rootModule is not a Wrapper')\n const rootNode = asAttachableNodeInstance(rootModule, 'Root modules is not a node')\n if (rootNode) {\n this.logger.debug(`rootNode: ${rootNode.id}`)\n this.downResolver.addResolver(rootNode as unknown as ModuleResolverInstance)\n return [rootNode]\n }\n return []\n }\n}\n","import { EmptyObject } from '@xylabs/object'\nimport { BridgeConfig } from '@xyo-network/bridge-model'\n\nexport type HttpBridgeConfigSchema = 'network.xyo.bridge.http.config'\nexport const HttpBridgeConfigSchema: HttpBridgeConfigSchema = 'network.xyo.bridge.http.config'\n\nexport type HttpBridgeConfig<TConfig extends EmptyObject = EmptyObject, TSchema extends string | void = void> = BridgeConfig<\n {\n failureRetryTime?: number\n failureTimeCacheMax?: number\n maxConnections?: number\n maxPayloadSizeWarning?: number\n nodeUrl?: string\n schema: HttpBridgeConfigSchema\n } & TConfig,\n TSchema extends string ? TSchema : HttpBridgeConfigSchema\n>\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { Account } from '@xyo-network/account'\nimport { AbstractBridgeModuleResolver, BridgeModuleResolverParams, wrapModuleWithType } from '@xyo-network/bridge-abstract'\nimport { ConfigPayload, ConfigSchema } from '@xyo-network/config-payload-plugin'\nimport {\n asModuleInstance,\n ModuleConfig,\n ModuleConfigSchema,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ResolveHelper,\n} from '@xyo-network/module-model'\n\nimport { BridgeQuerySender, HttpModuleProxy, HttpModuleProxyParams } from './ModuleProxy'\n\nexport interface HttpBridgeModuleResolverParams extends BridgeModuleResolverParams {\n querySender: BridgeQuerySender\n rootUrl: string\n}\n\nexport class HttpBridgeModuleResolver<\n T extends HttpBridgeModuleResolverParams = HttpBridgeModuleResolverParams,\n> extends AbstractBridgeModuleResolver<T> {\n get querySender() {\n return this.params.querySender\n }\n\n moduleUrl(address: Address) {\n return new URL(address, this.params.rootUrl)\n }\n\n override async resolveHandler<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T[]> {\n const parentResult = await super.resolveHandler(id, options)\n if (parentResult.length > 0) {\n return parentResult\n }\n if (id === '*') {\n return []\n }\n const idParts = id.split(':')\n const untransformedFirstPart = assertEx(idParts.shift(), () => `Invalid module identifier: ${id}`)\n const firstPart = await ResolveHelper.transformModuleIdentifier(untransformedFirstPart)\n const moduleAddress = firstPart as Address\n assertEx(isAddress(firstPart), () => `Invalid module address: ${firstPart}`)\n const remainderParts = idParts.join(':')\n const params: HttpModuleProxyParams = {\n account: Account.randomSync(),\n additionalSigners: this.params.additionalSigners,\n archiving: this.params.archiving,\n config: { schema: ModuleConfigSchema },\n host: this,\n moduleAddress,\n querySender: this.querySender,\n }\n\n this.logger?.debug(`creating HttpProxy [${moduleAddress}] ${id}`)\n\n const proxy = new HttpModuleProxy<T, HttpModuleProxyParams>(params)\n //calling state here to get the config\n if (proxy) {\n const state = await proxy.state()\n if (state) {\n const configSchema = (state.find((payload) => payload.schema === ConfigSchema) as ConfigPayload | undefined)?.config\n const config = assertEx(\n state.find((payload) => payload.schema === configSchema),\n () => 'Unable to locate config',\n ) as ModuleConfig\n proxy.setConfig(config)\n }\n }\n\n await proxy.start()\n\n const wrapped = assertEx(wrapModuleWithType(proxy, Account.randomSync()) as unknown as T, () => `Failed to wrapModuleWithType [${id}]`)\n const instance = assertEx(asModuleInstance<T>(wrapped, {}), () => `Failed to asModuleInstance [${id}]`)\n proxy.upResolver.add(instance)\n proxy.downResolver.add(instance)\n\n if (remainderParts.length > 0) {\n const result = await wrapped.resolve<T>(remainderParts, options)\n return result ? [result] : []\n }\n\n //console.log(`resolved: ${proxy.address} [${wrapped.constructor.name}] [${as.constructor.name}]`)\n return [instance]\n }\n}\n","import { forget } from '@xylabs/forget'\nimport { Address } from '@xylabs/hex'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractModuleProxy, ModuleProxyParams } from '@xyo-network/bridge-abstract'\nimport { AttachableModuleInstance, ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport interface BridgeQuerySender {\n sendBridgeQuery: <TOut extends Payload = Payload, TQuery extends QueryBoundWitness = QueryBoundWitness, TIn extends Payload = Payload>(\n targetAddress: Address,\n query: TQuery,\n payloads?: TIn[],\n ) => Promise<ModuleQueryResult<TOut>>\n}\n\nexport type HttpModuleProxyParams = ModuleProxyParams & {\n querySender: BridgeQuerySender\n}\n\nexport class HttpModuleProxy<\n TWrappedModule extends ModuleInstance = ModuleInstance,\n TParams extends Omit<HttpModuleProxyParams, 'config'> & { config: TWrappedModule['config'] } = Omit<HttpModuleProxyParams, 'config'> & {\n config: TWrappedModule['config']\n },\n >\n extends AbstractModuleProxy<TWrappedModule, TParams>\n implements AttachableModuleInstance<TParams, TWrappedModule['eventData']>\n{\n static createCount = 0\n\n constructor(params: TParams) {\n HttpModuleProxy.createCount = HttpModuleProxy.createCount + 1\n if (Math.floor(HttpModuleProxy.createCount / 10) === HttpModuleProxy.createCount / 10) {\n console.log(`HttpModuleProxy.createCount: ${HttpModuleProxy.createCount}`)\n }\n super(params)\n }\n\n async proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads: Payload[] = []): Promise<ModuleQueryResult> {\n if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {\n forget(this.storeToArchivists([query, ...(payloads ?? [])]))\n }\n const result = await this.params.querySender.sendBridgeQuery(this.params.moduleAddress, query, payloads)\n if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {\n forget(this.storeToArchivists(result.flat()))\n }\n return result\n }\n}\n"],"mappings":"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","names":["assertEx","AxiosJson","exists","forget","toJsonString","AbstractBridge","NodeManifestPayloadSchema","creatableModule","ModuleStateQuerySchema","asAttachableNodeInstance","isPayloadOfSchemaType","Mutex","Semaphore","LRUCache","HttpBridgeConfigSchema","assertEx","isAddress","Account","AbstractBridgeModuleResolver","wrapModuleWithType","ConfigSchema","asModuleInstance","ModuleConfigSchema","ResolveHelper","forget","AbstractModuleProxy","HttpModuleProxy","AbstractModuleProxy","constructor","params","createCount","Math","floor","console","log","proxyQueryHandler","query","payloads","archiving","isAllowedArchivingQuery","schema","forget","storeToArchivists","result","querySender","sendBridgeQuery","moduleAddress","flat","HttpBridgeModuleResolver","AbstractBridgeModuleResolver","querySender","params","moduleUrl","address","URL","rootUrl","resolveHandler","id","options","parentResult","length","idParts","split","untransformedFirstPart","assertEx","shift","firstPart","ResolveHelper","transformModuleIdentifier","moduleAddress","isAddress","remainderParts","join","account","Account","randomSync","additionalSigners","archiving","config","schema","ModuleConfigSchema","host","logger","debug","proxy","HttpModuleProxy","state","configSchema","find","payload","ConfigSchema","setConfig","start","wrapped","wrapModuleWithType","instance","asModuleInstance","upResolver","add","downResolver","result","resolve","HttpBridge","AbstractBridge","_axios","_discoverRootsMutex","Mutex","_failureTimeCache","LRUCache","max","maxFailureCacheSize","_querySemaphore","_resolver","axios","AxiosJson","failureRetryTime","config","defaultFailureRetryTime","maxConnections","defaultMaxConnections","maxPayloadSizeWarning","defaultMaxPayloadSizeWarning","nodeUrl","assertEx","querySemaphore","Semaphore","resolver","HttpBridgeModuleResolver","additionalSigners","archiving","resolveArchivists","resolveArchivingArchivists","bind","bridge","onQuerySendFinished","args","forget","emit","module","onQuerySendStarted","querySender","root","rootUrl","wrapperAccount","account","exposeHandler","_id","_options","Error","exposedHandler","getRoots","force","runExclusive","_roots","undefined","state","getRootState","logger","debug","length","nodeManifest","find","isPayloadOfSchemaType","NodeManifestPayloadSchema","mods","resolveRootNode","filter","exists","moduleUrl","address","URL","sendBridgeQuery","targetAddress","query","payloads","lastFailureTime","get","now","Date","timeSincePreviousFailure","delete","acquire","payloadSize","JSON","stringify","warn","moduleAddress","schema","href","result","post","status","error","data","ex","toJsonString","release","unexposeHandler","queryPayload","ModuleStateQuerySchema","boundQuery","bindQuery","response","toString","errors","message","rootModule","resolveHandler","at","constructor","name","rootNode","asAttachableNodeInstance","id","downResolver","addResolver","configSchemas","HttpBridgeConfigSchema","defaultConfigSchema","creatableModule"]}
|
|
1
|
+
{"version":3,"sources":["../../src/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 { ApiEnvelopeSuccess } from '@xyo-network/api-models'\nimport { isQueryBoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BridgeExposeOptions, BridgeParams, BridgeUnexposeOptions } from '@xyo-network/bridge-model'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleQueryResult, resolveAddressToInstanceUp } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport express, { Application, Request, Response } from 'express'\n\nimport { HttpBridgeBase } from './HttpBridgeBase'\nimport { HttpBridgeConfig } from './HttpBridgeConfig'\n\nexport interface HttpBridgeParams extends BridgeParams<AnyConfigSchema<HttpBridgeConfig>> {}\n\n@creatableModule()\nexport class HttpBridge<TParams extends HttpBridgeParams> extends HttpBridgeBase<TParams> {\n protected _app?: Application\n protected _exposedModules: WeakRef<ModuleInstance>[] = []\n protected _server?: Server\n\n get app() {\n this._app =\n this._app ??\n (() => {\n const app = express()\n app.use(express.json())\n\n app.post<Payload[]>('/', (req, res) => {\n this.handlePost(req, res)\n })\n\n return app\n })()\n return this._app\n }\n\n async exposeChild(mod: ModuleInstance, options?: BridgeExposeOptions | undefined): Promise<ModuleInstance[]> {\n const { maxDepth = 5 } = options ?? {}\n console.log(`exposeChild: ${mod.address} ${mod?.id} ${maxDepth}`)\n assertEx(this.config.host, () => 'Not configured as a host')\n this._exposedModules.push(new WeakRef(mod))\n const children = maxDepth > 0 ? (await mod.publicChildren?.()) ?? [] : []\n this.logger.log(`childrenToExpose [${mod.id}][${mod.address}]: ${toJsonString(children.map((child) => child.id))}`)\n const exposedChildren = (await Promise.all(children.map((child) => this.exposeChild(child, { maxDepth: maxDepth - 1, required: false }))))\n .flat()\n .filter(exists)\n const allExposed = [mod, ...exposedChildren]\n\n for (const exposedMod of allExposed) this.logger?.log(`exposed: ${exposedMod.address} [${mod.id}]`)\n\n return allExposed\n }\n\n override async exposeHandler(address: Address, options?: BridgeExposeOptions | undefined): Promise<ModuleInstance[]> {\n const { required = true } = options ?? {}\n const mod = await resolveAddressToInstanceUp(this, address)\n console.log(`exposeHandler: ${address} ${mod?.id}`)\n if (required && !mod) {\n throw new Error(`Unable to find required module: ${address}`)\n }\n if (mod) {\n return this.exposeChild(mod, options)\n }\n return []\n }\n\n override exposedHandler(): Address[] {\n return this._exposedModules.map((ref) => ref.deref()?.address).filter(exists)\n }\n\n override async startHandler(): Promise<boolean> {\n return (await super.startHandler()) && this.startHttpServer()\n }\n\n override async stopHandler(_timeout?: number | undefined): Promise<boolean> {\n return (await super.stopHandler()) && this.stopHttpServer()\n }\n\n override async unexposeHandler(address: Address, options?: BridgeUnexposeOptions | undefined): Promise<ModuleInstance[]> {\n const { maxDepth = 2, required = true } = options ?? {}\n assertEx(this.config.host, () => 'Not configured as a host')\n const mod = this._exposedModules.find((ref) => ref.deref()?.address === address)?.deref()\n assertEx(!required || mod, () => `Module not exposed: ${address}`)\n this._exposedModules = this._exposedModules.filter((ref) => ref.deref()?.address !== address)\n if (mod) {\n const children = maxDepth > 0 ? (await mod.publicChildren?.()) ?? [] : []\n const exposedChildren = (\n await Promise.all(children.map((child) => this.unexposeHandler(child.address, { maxDepth: maxDepth - 1, required: false })))\n )\n .flat()\n .filter(exists)\n return [mod, ...exposedChildren]\n }\n return []\n }\n\n protected async callLocalModule(address: Address, query: QueryBoundWitness, payloads: Payload[]): Promise<ModuleQueryResult | null> {\n const mod = this._exposedModules.find((ref) => ref.deref()?.address === address)?.deref()\n if (mod) {\n return await mod.query(query, payloads)\n }\n return null\n }\n\n protected handlePost(req: Request<Payload[]>, res: Response) {\n const allPayloads = req.body as Payload[]\n const query = allPayloads.find(isQueryBoundWitness) as QueryBoundWitness\n const payloads = allPayloads.filter((payload) => !isQueryBoundWitness(payload))\n this.callLocalModule(req.route, query, payloads)\n .then((result) => {\n if (result === null) {\n res.status(404).json({ error: 'Module not found' })\n } else {\n const envelope = {\n data: result,\n } as ApiEnvelopeSuccess<ModuleQueryResult>\n res.json(envelope)\n }\n })\n .catch((ex) => {\n res.status(500).json({ error: (ex as Error).message })\n })\n }\n\n protected startHttpServer() {\n if (this.config.host) {\n assertEx(!this._server, () => 'Server already started')\n this._server = this.app.listen(this.config.host?.port ?? 3030)\n }\n return true\n }\n\n protected stopHttpServer() {\n const server = assertEx(this._server, () => 'Server not started')\n server.close()\n this._server = undefined\n return true\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { AxiosError, AxiosJson } from '@xylabs/axios'\nimport { exists } from '@xylabs/exists'\nimport { forget } from '@xylabs/forget'\nimport { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport { ApiEnvelope } from '@xyo-network/api-models'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractBridge } from '@xyo-network/bridge-abstract'\nimport {\n BridgeExposeOptions,\n BridgeModule,\n BridgeParams,\n BridgeUnexposeOptions,\n QuerySendFinishedEventArgs,\n QuerySendStartedEventArgs,\n} from '@xyo-network/bridge-model'\nimport { NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport {\n AnyConfigSchema,\n creatableModule,\n ModuleInstance,\n ModuleQueryResult,\n ModuleResolverInstance,\n ModuleStateQuery,\n ModuleStateQuerySchema,\n} from '@xyo-network/module-model'\nimport { asAttachableNodeInstance } from '@xyo-network/node-model'\nimport { isPayloadOfSchemaType, Payload, Schema, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex, Semaphore } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport { HttpBridgeConfig, HttpBridgeConfigSchema } from './HttpBridgeConfig'\nimport { HttpBridgeModuleResolver } from './HttpBridgeModuleResolver'\nimport { BridgeQuerySender } from './ModuleProxy'\n\nexport interface HttpBridgeParams extends BridgeParams<AnyConfigSchema<HttpBridgeConfig>> {}\n\n@creatableModule()\nexport class HttpBridgeBase<TParams extends HttpBridgeParams> extends AbstractBridge<TParams> implements BridgeModule<TParams>, BridgeQuerySender {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, HttpBridgeConfigSchema]\n static override readonly defaultConfigSchema: Schema = HttpBridgeConfigSchema\n static defaultFailureRetryTime = 1000 * 60\n static defaultMaxConnections = 4\n static defaultMaxPayloadSizeWarning = 256 * 256\n static maxFailureCacheSize = 1000\n\n private _axios?: AxiosJson\n private _discoverRootsMutex = new Mutex()\n private _failureTimeCache = new LRUCache<Address, number>({ max: HttpBridgeBase.maxFailureCacheSize })\n private _querySemaphore?: Semaphore\n private _resolver?: HttpBridgeModuleResolver\n\n get axios() {\n this._axios = this._axios ?? new AxiosJson()\n return this._axios\n }\n\n get clientUrl() {\n // eslint-disable-next-line deprecation/deprecation\n return assertEx(this.config.client?.url ?? this.config.nodeUrl, () => 'No Url Set')\n }\n\n get failureRetryTime() {\n return this.config.failureRetryTime ?? HttpBridgeBase.defaultFailureRetryTime\n }\n\n get maxConnections() {\n return this.config.maxConnections ?? HttpBridgeBase.defaultMaxConnections\n }\n\n get maxPayloadSizeWarning() {\n return this.config.maxPayloadSizeWarning ?? HttpBridgeBase.defaultMaxPayloadSizeWarning\n }\n\n get querySemaphore() {\n this._querySemaphore = this._querySemaphore ?? new Semaphore(this.maxConnections)\n return this._querySemaphore\n }\n\n override get resolver() {\n this._resolver =\n this._resolver ??\n new HttpBridgeModuleResolver({\n additionalSigners: this.additionalSigners,\n archiving: { ...this.archiving, resolveArchivists: this.resolveArchivingArchivists.bind(this) },\n bridge: this,\n onQuerySendFinished: (args: Omit<QuerySendFinishedEventArgs, 'module'>) => {\n forget(this.emit('querySendFinished', { module: this, ...args }))\n },\n onQuerySendStarted: (args: Omit<QuerySendStartedEventArgs, 'module'>) => {\n forget(this.emit('querySendStarted', { module: this, ...args }))\n },\n querySender: this,\n root: this,\n rootUrl: this.clientUrl,\n wrapperAccount: this.account,\n })\n return this._resolver\n }\n\n override exposeHandler(_id: string, _options?: BridgeExposeOptions | undefined): Promisable<ModuleInstance[]> {\n throw new Error('Unsupported')\n }\n\n override exposedHandler(): Promisable<Address[]> {\n throw new Error('Unsupported')\n }\n\n async getRoots(force?: boolean): Promise<ModuleInstance[]> {\n return await this._discoverRootsMutex.runExclusive(async () => {\n if (this._roots === undefined || force) {\n const state = await this.getRootState()\n this.logger?.debug(`HttpBridge:discoverRoots.state [${state?.length}]`)\n const nodeManifest = state?.find(isPayloadOfSchemaType<WithMeta<NodeManifestPayload>>(NodeManifestPayloadSchema))\n if (nodeManifest) {\n const mods = (await this.resolveRootNode(nodeManifest)).filter(exists)\n this.logger?.debug(`HttpBridge:discoverRoots [${mods.length}]`)\n this._roots = mods\n } else {\n this._roots = []\n }\n }\n return this._roots\n })\n }\n\n moduleUrl(address: Address) {\n return new URL(address, this.clientUrl)\n }\n\n async sendBridgeQuery<TOut extends Payload = Payload, TQuery extends QueryBoundWitness = QueryBoundWitness, TIn extends Payload = Payload>(\n targetAddress: Address,\n query: TQuery,\n payloads?: TIn[],\n ): Promise<ModuleQueryResult<TOut>> {\n const lastFailureTime = this._failureTimeCache.get(targetAddress)\n if (lastFailureTime !== undefined) {\n const now = Date.now()\n const timeSincePreviousFailure = now - lastFailureTime\n if (timeSincePreviousFailure > this.failureRetryTime) {\n throw new Error(`target module failed recently [${targetAddress}] [${timeSincePreviousFailure}ms ago]`)\n }\n this._failureTimeCache.delete(targetAddress)\n }\n try {\n await this.querySemaphore.acquire()\n const payloadSize = JSON.stringify([query, payloads]).length\n if (payloadSize > this.maxPayloadSizeWarning) {\n this.logger?.warn(\n `Large targetQuery being sent: ${payloadSize} bytes [${this.address}][${this.moduleAddress}] [${query.schema}] [${payloads?.length}]`,\n )\n }\n const moduleUrl = this.moduleUrl(targetAddress).href\n const result = await this.axios.post<ApiEnvelope<ModuleQueryResult<TOut>>>(moduleUrl, [query, payloads])\n if (result.status === 404) {\n throw `target module not found [${moduleUrl}] [${result.status}]`\n }\n if (result.status >= 400) {\n this.logger?.error(`targetQuery failed [${moduleUrl}]`)\n throw `targetQuery failed [${moduleUrl}] [${result.status}]`\n }\n return result.data?.data\n } catch (ex) {\n const error = ex as AxiosError\n this.logger?.error(`Error: ${toJsonString(error)}`)\n throw error\n } finally {\n this.querySemaphore.release()\n }\n }\n\n override unexposeHandler(_id: string, _options?: BridgeUnexposeOptions | undefined): Promisable<ModuleInstance[]> {\n throw new Error('Unsupported')\n }\n\n private async getRootState() {\n const queryPayload: ModuleStateQuery = { schema: ModuleStateQuerySchema }\n const boundQuery = await this.bindQuery(queryPayload)\n try {\n const response = await this.axios.post<ApiEnvelope<ModuleQueryResult>>(this.clientUrl.toString(), boundQuery)\n if (response.status === 404) {\n return []\n }\n const [, payloads, errors] = response.data.data\n if (errors.length > 0) {\n throw new Error(`getRootState failed: ${JSON.stringify(errors, null, 2)}`)\n }\n return payloads\n } catch (ex) {\n const error = ex as Error\n this.logger?.warn(`Unable to connect to remote node: ${error.message} [${this.clientUrl}]`)\n }\n }\n\n private async resolveRootNode(nodeManifest: NodeManifestPayload): Promise<ModuleInstance[]> {\n const rootModule = assertEx(\n (await this.resolver.resolveHandler(assertEx(nodeManifest.status?.address, () => 'Root has no address'))).at(0),\n () => `Root not found [${nodeManifest.status?.address}]`,\n )\n assertEx(rootModule.constructor.name !== 'HttpModuleProxy', () => 'rootModule is not a Wrapper')\n const rootNode = asAttachableNodeInstance(rootModule, 'Root modules is not a node')\n if (rootNode) {\n this.logger.debug(`rootNode: ${rootNode.id}`)\n this.downResolver.addResolver(rootNode as unknown as ModuleResolverInstance)\n return [rootNode]\n }\n return []\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { Account } from '@xyo-network/account'\nimport { AbstractBridgeModuleResolver, BridgeModuleResolverParams, wrapModuleWithType } from '@xyo-network/bridge-abstract'\nimport { ConfigPayload, ConfigSchema } from '@xyo-network/config-payload-plugin'\nimport {\n asModuleInstance,\n ModuleConfig,\n ModuleConfigSchema,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ResolveHelper,\n} from '@xyo-network/module-model'\n\nimport { BridgeQuerySender, HttpModuleProxy, HttpModuleProxyParams } from './ModuleProxy'\n\nexport interface HttpBridgeModuleResolverParams extends BridgeModuleResolverParams {\n querySender: BridgeQuerySender\n rootUrl: string\n}\n\nexport class HttpBridgeModuleResolver<\n T extends HttpBridgeModuleResolverParams = HttpBridgeModuleResolverParams,\n> extends AbstractBridgeModuleResolver<T> {\n get querySender() {\n return this.params.querySender\n }\n\n moduleUrl(address: Address) {\n return new URL(address, this.params.rootUrl)\n }\n\n override async resolveHandler<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T[]> {\n const parentResult = await super.resolveHandler(id, options)\n if (parentResult.length > 0) {\n return parentResult\n }\n if (id === '*') {\n return []\n }\n const idParts = id.split(':')\n const untransformedFirstPart = assertEx(idParts.shift(), () => `Invalid module identifier: ${id}`)\n const firstPart = await ResolveHelper.transformModuleIdentifier(untransformedFirstPart)\n const moduleAddress = firstPart as Address\n assertEx(isAddress(firstPart), () => `Invalid module address: ${firstPart}`)\n const remainderParts = idParts.join(':')\n const params: HttpModuleProxyParams = {\n account: Account.randomSync(),\n additionalSigners: this.params.additionalSigners,\n archiving: this.params.archiving,\n config: { schema: ModuleConfigSchema },\n host: this,\n moduleAddress,\n onQuerySendFinished: this.params.onQuerySendFinished,\n onQuerySendStarted: this.params.onQuerySendStarted,\n querySender: this.querySender,\n }\n\n this.logger?.debug(`creating HttpProxy [${moduleAddress}] ${id}`)\n\n const proxy = new HttpModuleProxy<T, HttpModuleProxyParams>(params)\n //calling state here to get the config\n if (proxy) {\n const state = await proxy.state()\n if (state) {\n const configSchema = (state.find((payload) => payload.schema === ConfigSchema) as ConfigPayload | undefined)?.config\n const config = assertEx(\n state.find((payload) => payload.schema === configSchema),\n () => 'Unable to locate config',\n ) as ModuleConfig\n proxy.setConfig(config)\n }\n }\n\n await proxy.start()\n\n const wrapped = assertEx(wrapModuleWithType(proxy, Account.randomSync()) as unknown as T, () => `Failed to wrapModuleWithType [${id}]`)\n const instance = assertEx(asModuleInstance<T>(wrapped, {}), () => `Failed to asModuleInstance [${id}]`)\n proxy.upResolver.add(instance)\n proxy.downResolver.add(instance)\n\n if (remainderParts.length > 0) {\n const result = await wrapped.resolve<T>(remainderParts, options)\n return result ? [result] : []\n }\n\n //console.log(`resolved: ${proxy.address} [${wrapped.constructor.name}] [${as.constructor.name}]`)\n return [instance]\n }\n}\n","import { forget } from '@xylabs/forget'\nimport { Address } from '@xylabs/hex'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractModuleProxy, ModuleProxyParams } from '@xyo-network/bridge-abstract'\nimport { AttachableModuleInstance, ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport interface BridgeQuerySender {\n sendBridgeQuery: <TOut extends Payload = Payload, TQuery extends QueryBoundWitness = QueryBoundWitness, TIn extends Payload = Payload>(\n targetAddress: Address,\n query: TQuery,\n payloads?: TIn[],\n ) => Promise<ModuleQueryResult<TOut>>\n}\n\nexport type HttpModuleProxyParams = ModuleProxyParams & {\n querySender: BridgeQuerySender\n}\n\nexport class HttpModuleProxy<\n TWrappedModule extends ModuleInstance = ModuleInstance,\n TParams extends Omit<HttpModuleProxyParams, 'config'> & { config: TWrappedModule['config'] } = Omit<HttpModuleProxyParams, 'config'> & {\n config: TWrappedModule['config']\n },\n >\n extends AbstractModuleProxy<TWrappedModule, TParams>\n implements AttachableModuleInstance<TParams, TWrappedModule['eventData']>\n{\n static createCount = 0\n\n constructor(params: TParams) {\n HttpModuleProxy.createCount = HttpModuleProxy.createCount + 1\n if (Math.floor(HttpModuleProxy.createCount / 10) === HttpModuleProxy.createCount / 10) {\n console.log(`HttpModuleProxy.createCount: ${HttpModuleProxy.createCount}`)\n }\n super(params)\n }\n\n async proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads: Payload[] = []): Promise<ModuleQueryResult> {\n if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {\n forget(this.storeToArchivists([query, ...(payloads ?? [])]))\n }\n const result = await this.params.querySender.sendBridgeQuery(this.params.moduleAddress, query, payloads)\n if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {\n forget(this.storeToArchivists(result.flat()))\n }\n return result\n }\n}\n"],"mappings":"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","names":["HttpBridgeConfigSchema","assertEx","exists","toJsonString","isQueryBoundWitness","creatableModule","resolveAddressToInstanceUp","express","assertEx","AxiosJson","exists","forget","toJsonString","AbstractBridge","NodeManifestPayloadSchema","creatableModule","ModuleStateQuerySchema","asAttachableNodeInstance","isPayloadOfSchemaType","Mutex","Semaphore","LRUCache","assertEx","isAddress","Account","AbstractBridgeModuleResolver","wrapModuleWithType","ConfigSchema","asModuleInstance","ModuleConfigSchema","ResolveHelper","forget","AbstractModuleProxy","HttpModuleProxy","AbstractModuleProxy","constructor","params","createCount","Math","floor","console","log","proxyQueryHandler","query","payloads","archiving","isAllowedArchivingQuery","schema","forget","storeToArchivists","result","querySender","sendBridgeQuery","moduleAddress","flat","HttpBridgeModuleResolver","AbstractBridgeModuleResolver","querySender","params","moduleUrl","address","URL","rootUrl","resolveHandler","id","options","parentResult","length","idParts","split","untransformedFirstPart","assertEx","shift","firstPart","ResolveHelper","transformModuleIdentifier","moduleAddress","isAddress","remainderParts","join","account","Account","randomSync","additionalSigners","archiving","config","schema","ModuleConfigSchema","host","onQuerySendFinished","onQuerySendStarted","logger","debug","proxy","HttpModuleProxy","state","configSchema","find","payload","ConfigSchema","setConfig","start","wrapped","wrapModuleWithType","instance","asModuleInstance","upResolver","add","downResolver","result","resolve","HttpBridgeBase","AbstractBridge","_axios","_discoverRootsMutex","Mutex","_failureTimeCache","LRUCache","max","maxFailureCacheSize","_querySemaphore","_resolver","axios","AxiosJson","clientUrl","assertEx","config","client","url","nodeUrl","failureRetryTime","defaultFailureRetryTime","maxConnections","defaultMaxConnections","maxPayloadSizeWarning","defaultMaxPayloadSizeWarning","querySemaphore","Semaphore","resolver","HttpBridgeModuleResolver","additionalSigners","archiving","resolveArchivists","resolveArchivingArchivists","bind","bridge","onQuerySendFinished","args","forget","emit","module","onQuerySendStarted","querySender","root","rootUrl","wrapperAccount","account","exposeHandler","_id","_options","Error","exposedHandler","getRoots","force","runExclusive","_roots","undefined","state","getRootState","logger","debug","length","nodeManifest","find","isPayloadOfSchemaType","NodeManifestPayloadSchema","mods","resolveRootNode","filter","exists","moduleUrl","address","URL","sendBridgeQuery","targetAddress","query","payloads","lastFailureTime","get","now","Date","timeSincePreviousFailure","delete","acquire","payloadSize","JSON","stringify","warn","moduleAddress","schema","href","result","post","status","error","data","ex","toJsonString","release","unexposeHandler","queryPayload","ModuleStateQuerySchema","boundQuery","bindQuery","response","toString","errors","message","rootModule","resolveHandler","at","constructor","name","rootNode","asAttachableNodeInstance","id","downResolver","addResolver","configSchemas","HttpBridgeConfigSchema","defaultConfigSchema","creatableModule","HttpBridge","HttpBridgeBase","_app","_exposedModules","_server","app","express","use","json","post","req","res","handlePost","exposeChild","mod","options","maxDepth","console","log","address","id","assertEx","config","host","push","WeakRef","children","publicChildren","logger","toJsonString","map","child","exposedChildren","Promise","all","required","flat","filter","exists","allExposed","exposedMod","exposeHandler","resolveAddressToInstanceUp","Error","exposedHandler","ref","deref","startHandler","startHttpServer","stopHandler","_timeout","stopHttpServer","unexposeHandler","find","callLocalModule","query","payloads","allPayloads","body","isQueryBoundWitness","payload","route","then","result","status","error","envelope","data","catch","ex","message","listen","port","server","close","undefined","creatableModule"]}
|
package/package.json
CHANGED
|
@@ -10,51 +10,55 @@
|
|
|
10
10
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@xylabs/assert": "^3.5.
|
|
14
|
-
"@xylabs/axios": "^3.5.
|
|
15
|
-
"@xylabs/exists": "^3.5.
|
|
16
|
-
"@xylabs/forget": "^3.5.
|
|
17
|
-
"@xylabs/hex": "^3.5.
|
|
18
|
-
"@xylabs/object": "^3.5.
|
|
19
|
-
"@xylabs/promise": "^3.5.
|
|
20
|
-
"@xyo-network/account": "~2.
|
|
21
|
-
"@xyo-network/api-models": "~2.
|
|
22
|
-
"@xyo-network/boundwitness-model": "~2.
|
|
23
|
-
"@xyo-network/bridge-abstract": "~2.
|
|
24
|
-
"@xyo-network/bridge-model": "~2.
|
|
25
|
-
"@xyo-network/config-payload-plugin": "~2.
|
|
26
|
-
"@xyo-network/manifest-model": "~2.
|
|
27
|
-
"@xyo-network/module-model": "~2.
|
|
28
|
-
"@xyo-network/node-model": "~2.
|
|
29
|
-
"@xyo-network/payload-model": "~2.
|
|
13
|
+
"@xylabs/assert": "^3.5.1",
|
|
14
|
+
"@xylabs/axios": "^3.5.1",
|
|
15
|
+
"@xylabs/exists": "^3.5.1",
|
|
16
|
+
"@xylabs/forget": "^3.5.1",
|
|
17
|
+
"@xylabs/hex": "^3.5.1",
|
|
18
|
+
"@xylabs/object": "^3.5.1",
|
|
19
|
+
"@xylabs/promise": "^3.5.1",
|
|
20
|
+
"@xyo-network/account": "~2.104.0",
|
|
21
|
+
"@xyo-network/api-models": "~2.104.0",
|
|
22
|
+
"@xyo-network/boundwitness-model": "~2.104.0",
|
|
23
|
+
"@xyo-network/bridge-abstract": "~2.104.0",
|
|
24
|
+
"@xyo-network/bridge-model": "~2.104.0",
|
|
25
|
+
"@xyo-network/config-payload-plugin": "~2.104.0",
|
|
26
|
+
"@xyo-network/manifest-model": "~2.104.0",
|
|
27
|
+
"@xyo-network/module-model": "~2.104.0",
|
|
28
|
+
"@xyo-network/node-model": "~2.104.0",
|
|
29
|
+
"@xyo-network/payload-model": "~2.104.0",
|
|
30
30
|
"async-mutex": "^0.5.0",
|
|
31
31
|
"lru-cache": "^10.2.2"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
+
"@types/express": "^4.17.21",
|
|
34
35
|
"@xylabs/ts-scripts-yarn3": "^3.10.4",
|
|
35
36
|
"@xylabs/tsconfig": "^3.10.4",
|
|
36
|
-
"@xyo-network/account": "~2.
|
|
37
|
-
"@xyo-network/archivist-model": "~2.
|
|
38
|
-
"@xyo-network/diviner-model": "~2.
|
|
39
|
-
"@xyo-network/module-resolver": "~2.
|
|
40
|
-
"@xyo-network/node-memory": "~2.
|
|
41
|
-
"@xyo-network/node-model": "~2.
|
|
42
|
-
"@xyo-network/payload-builder": "~2.
|
|
43
|
-
"@xyo-network/payload-wrapper": "~2.
|
|
37
|
+
"@xyo-network/account": "~2.104.0",
|
|
38
|
+
"@xyo-network/archivist-model": "~2.104.0",
|
|
39
|
+
"@xyo-network/diviner-model": "~2.104.0",
|
|
40
|
+
"@xyo-network/module-resolver": "~2.104.0",
|
|
41
|
+
"@xyo-network/node-memory": "~2.104.0",
|
|
42
|
+
"@xyo-network/node-model": "~2.104.0",
|
|
43
|
+
"@xyo-network/payload-builder": "~2.104.0",
|
|
44
|
+
"@xyo-network/payload-wrapper": "~2.104.0",
|
|
45
|
+
"express": "^4.19.2",
|
|
44
46
|
"typescript": "^5.4.5"
|
|
45
47
|
},
|
|
48
|
+
"optionalDependencies": {
|
|
49
|
+
"express": "^4.19.2"
|
|
50
|
+
},
|
|
46
51
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
47
|
-
"types": "dist/node/index.d.ts",
|
|
48
52
|
"exports": {
|
|
49
53
|
".": {
|
|
50
54
|
"browser": {
|
|
51
55
|
"require": {
|
|
52
|
-
"types": "./dist/browser/index.d.cts",
|
|
53
|
-
"default": "./dist/browser/index.cjs"
|
|
56
|
+
"types": "./dist/browser/index-browser.d.cts",
|
|
57
|
+
"default": "./dist/browser/index-browser.cjs"
|
|
54
58
|
},
|
|
55
59
|
"import": {
|
|
56
|
-
"types": "./dist/browser/index.d.mts",
|
|
57
|
-
"default": "./dist/browser/index.js"
|
|
60
|
+
"types": "./dist/browser/index-browser.d.mts",
|
|
61
|
+
"default": "./dist/browser/index-browser.js"
|
|
58
62
|
}
|
|
59
63
|
},
|
|
60
64
|
"node": {
|
|
@@ -70,8 +74,9 @@
|
|
|
70
74
|
},
|
|
71
75
|
"./package.json": "./package.json"
|
|
72
76
|
},
|
|
73
|
-
"main": "dist/
|
|
74
|
-
"module": "dist/
|
|
77
|
+
"main": "dist/neutral/index-browser.cjs",
|
|
78
|
+
"module": "dist/neutral/index-browser.js",
|
|
79
|
+
"types": "dist/neutral/index-browser.d.ts",
|
|
75
80
|
"homepage": "https://xyo.network",
|
|
76
81
|
"license": "LGPL-3.0-only",
|
|
77
82
|
"publishConfig": {
|
|
@@ -82,6 +87,6 @@
|
|
|
82
87
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
|
|
83
88
|
},
|
|
84
89
|
"sideEffects": false,
|
|
85
|
-
"version": "2.
|
|
90
|
+
"version": "2.104.0",
|
|
86
91
|
"type": "module"
|
|
87
92
|
}
|
|
@@ -38,7 +38,7 @@ import { BridgeQuerySender } from './ModuleProxy'
|
|
|
38
38
|
export interface HttpBridgeParams extends BridgeParams<AnyConfigSchema<HttpBridgeConfig>> {}
|
|
39
39
|
|
|
40
40
|
@creatableModule()
|
|
41
|
-
export class
|
|
41
|
+
export class HttpBridgeBase<TParams extends HttpBridgeParams> extends AbstractBridge<TParams> implements BridgeModule<TParams>, BridgeQuerySender {
|
|
42
42
|
static override readonly configSchemas: Schema[] = [...super.configSchemas, HttpBridgeConfigSchema]
|
|
43
43
|
static override readonly defaultConfigSchema: Schema = HttpBridgeConfigSchema
|
|
44
44
|
static defaultFailureRetryTime = 1000 * 60
|
|
@@ -48,7 +48,7 @@ export class HttpBridge<TParams extends HttpBridgeParams> extends AbstractBridge
|
|
|
48
48
|
|
|
49
49
|
private _axios?: AxiosJson
|
|
50
50
|
private _discoverRootsMutex = new Mutex()
|
|
51
|
-
private _failureTimeCache = new LRUCache<Address, number>({ max:
|
|
51
|
+
private _failureTimeCache = new LRUCache<Address, number>({ max: HttpBridgeBase.maxFailureCacheSize })
|
|
52
52
|
private _querySemaphore?: Semaphore
|
|
53
53
|
private _resolver?: HttpBridgeModuleResolver
|
|
54
54
|
|
|
@@ -57,20 +57,21 @@ export class HttpBridge<TParams extends HttpBridgeParams> extends AbstractBridge
|
|
|
57
57
|
return this._axios
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
get clientUrl() {
|
|
61
|
+
// eslint-disable-next-line deprecation/deprecation
|
|
62
|
+
return assertEx(this.config.client?.url ?? this.config.nodeUrl, () => 'No Url Set')
|
|
63
|
+
}
|
|
64
|
+
|
|
60
65
|
get failureRetryTime() {
|
|
61
|
-
return this.config.failureRetryTime ??
|
|
66
|
+
return this.config.failureRetryTime ?? HttpBridgeBase.defaultFailureRetryTime
|
|
62
67
|
}
|
|
63
68
|
|
|
64
69
|
get maxConnections() {
|
|
65
|
-
return this.config.maxConnections ??
|
|
70
|
+
return this.config.maxConnections ?? HttpBridgeBase.defaultMaxConnections
|
|
66
71
|
}
|
|
67
72
|
|
|
68
73
|
get maxPayloadSizeWarning() {
|
|
69
|
-
return this.config.maxPayloadSizeWarning ??
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
get nodeUrl() {
|
|
73
|
-
return assertEx(this.config.nodeUrl, () => 'No Url Set')
|
|
74
|
+
return this.config.maxPayloadSizeWarning ?? HttpBridgeBase.defaultMaxPayloadSizeWarning
|
|
74
75
|
}
|
|
75
76
|
|
|
76
77
|
get querySemaphore() {
|
|
@@ -93,7 +94,7 @@ export class HttpBridge<TParams extends HttpBridgeParams> extends AbstractBridge
|
|
|
93
94
|
},
|
|
94
95
|
querySender: this,
|
|
95
96
|
root: this,
|
|
96
|
-
rootUrl: this.
|
|
97
|
+
rootUrl: this.clientUrl,
|
|
97
98
|
wrapperAccount: this.account,
|
|
98
99
|
})
|
|
99
100
|
return this._resolver
|
|
@@ -126,7 +127,7 @@ export class HttpBridge<TParams extends HttpBridgeParams> extends AbstractBridge
|
|
|
126
127
|
}
|
|
127
128
|
|
|
128
129
|
moduleUrl(address: Address) {
|
|
129
|
-
return new URL(address, this.
|
|
130
|
+
return new URL(address, this.clientUrl)
|
|
130
131
|
}
|
|
131
132
|
|
|
132
133
|
async sendBridgeQuery<TOut extends Payload = Payload, TQuery extends QueryBoundWitness = QueryBoundWitness, TIn extends Payload = Payload>(
|
|
@@ -178,7 +179,7 @@ export class HttpBridge<TParams extends HttpBridgeParams> extends AbstractBridge
|
|
|
178
179
|
const queryPayload: ModuleStateQuery = { schema: ModuleStateQuerySchema }
|
|
179
180
|
const boundQuery = await this.bindQuery(queryPayload)
|
|
180
181
|
try {
|
|
181
|
-
const response = await this.axios.post<ApiEnvelope<ModuleQueryResult>>(this.
|
|
182
|
+
const response = await this.axios.post<ApiEnvelope<ModuleQueryResult>>(this.clientUrl.toString(), boundQuery)
|
|
182
183
|
if (response.status === 404) {
|
|
183
184
|
return []
|
|
184
185
|
}
|
|
@@ -189,7 +190,7 @@ export class HttpBridge<TParams extends HttpBridgeParams> extends AbstractBridge
|
|
|
189
190
|
return payloads
|
|
190
191
|
} catch (ex) {
|
|
191
192
|
const error = ex as Error
|
|
192
|
-
this.logger?.warn(`Unable to connect to remote node: ${error.message} [${this.
|
|
193
|
+
this.logger?.warn(`Unable to connect to remote node: ${error.message} [${this.clientUrl}]`)
|
|
193
194
|
}
|
|
194
195
|
}
|
|
195
196
|
|