@xyo-network/bridge-http 2.105.1 → 2.106.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/HttpBridgeBase.d.cts +4 -1
- package/dist/browser/HttpBridgeBase.d.cts.map +1 -1
- package/dist/browser/HttpBridgeBase.d.mts +4 -1
- package/dist/browser/HttpBridgeBase.d.mts.map +1 -1
- package/dist/browser/HttpBridgeBase.d.ts +4 -1
- package/dist/browser/HttpBridgeBase.d.ts.map +1 -1
- package/dist/browser/HttpBridgeModuleResolver.d.cts +18 -2
- package/dist/browser/HttpBridgeModuleResolver.d.cts.map +1 -1
- package/dist/browser/HttpBridgeModuleResolver.d.mts +18 -2
- package/dist/browser/HttpBridgeModuleResolver.d.mts.map +1 -1
- package/dist/browser/HttpBridgeModuleResolver.d.ts +18 -2
- package/dist/browser/HttpBridgeModuleResolver.d.ts.map +1 -1
- package/dist/browser/ModuleProxy/ModuleProxy.d.cts +9 -1
- package/dist/browser/ModuleProxy/ModuleProxy.d.cts.map +1 -1
- package/dist/browser/ModuleProxy/ModuleProxy.d.mts +9 -1
- package/dist/browser/ModuleProxy/ModuleProxy.d.mts.map +1 -1
- package/dist/browser/ModuleProxy/ModuleProxy.d.ts +9 -1
- package/dist/browser/ModuleProxy/ModuleProxy.d.ts.map +1 -1
- package/dist/browser/index-browser.cjs +132 -60
- package/dist/browser/index-browser.cjs.map +1 -1
- package/dist/browser/index-browser.js +127 -55
- package/dist/browser/index-browser.js.map +1 -1
- package/dist/neutral/HttpBridgeBase.d.cts +4 -1
- package/dist/neutral/HttpBridgeBase.d.cts.map +1 -1
- package/dist/neutral/HttpBridgeBase.d.mts +4 -1
- package/dist/neutral/HttpBridgeBase.d.mts.map +1 -1
- package/dist/neutral/HttpBridgeBase.d.ts +4 -1
- package/dist/neutral/HttpBridgeBase.d.ts.map +1 -1
- package/dist/neutral/HttpBridgeModuleResolver.d.cts +18 -2
- package/dist/neutral/HttpBridgeModuleResolver.d.cts.map +1 -1
- package/dist/neutral/HttpBridgeModuleResolver.d.mts +18 -2
- package/dist/neutral/HttpBridgeModuleResolver.d.mts.map +1 -1
- package/dist/neutral/HttpBridgeModuleResolver.d.ts +18 -2
- package/dist/neutral/HttpBridgeModuleResolver.d.ts.map +1 -1
- package/dist/neutral/ModuleProxy/ModuleProxy.d.cts +9 -1
- package/dist/neutral/ModuleProxy/ModuleProxy.d.cts.map +1 -1
- package/dist/neutral/ModuleProxy/ModuleProxy.d.mts +9 -1
- package/dist/neutral/ModuleProxy/ModuleProxy.d.mts.map +1 -1
- package/dist/neutral/ModuleProxy/ModuleProxy.d.ts +9 -1
- package/dist/neutral/ModuleProxy/ModuleProxy.d.ts.map +1 -1
- package/dist/neutral/index-browser.cjs +132 -60
- package/dist/neutral/index-browser.cjs.map +1 -1
- package/dist/neutral/index-browser.js +127 -55
- package/dist/neutral/index-browser.js.map +1 -1
- package/dist/node/HttpBridgeBase.d.cts +4 -1
- package/dist/node/HttpBridgeBase.d.cts.map +1 -1
- package/dist/node/HttpBridgeBase.d.mts +4 -1
- package/dist/node/HttpBridgeBase.d.mts.map +1 -1
- package/dist/node/HttpBridgeBase.d.ts +4 -1
- package/dist/node/HttpBridgeBase.d.ts.map +1 -1
- package/dist/node/HttpBridgeModuleResolver.d.cts +18 -2
- package/dist/node/HttpBridgeModuleResolver.d.cts.map +1 -1
- package/dist/node/HttpBridgeModuleResolver.d.mts +18 -2
- package/dist/node/HttpBridgeModuleResolver.d.mts.map +1 -1
- package/dist/node/HttpBridgeModuleResolver.d.ts +18 -2
- package/dist/node/HttpBridgeModuleResolver.d.ts.map +1 -1
- package/dist/node/ModuleProxy/ModuleProxy.d.cts +9 -1
- package/dist/node/ModuleProxy/ModuleProxy.d.cts.map +1 -1
- package/dist/node/ModuleProxy/ModuleProxy.d.mts +9 -1
- package/dist/node/ModuleProxy/ModuleProxy.d.mts.map +1 -1
- package/dist/node/ModuleProxy/ModuleProxy.d.ts +9 -1
- package/dist/node/ModuleProxy/ModuleProxy.d.ts.map +1 -1
- package/dist/node/index.cjs +145 -72
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +139 -66
- package/dist/node/index.js.map +1 -1
- package/package.json +24 -20
- package/src/HttpBridgeBase.ts +52 -5
- package/src/HttpBridgeModuleResolver.ts +42 -35
- package/src/ModuleProxy/ModuleProxy.ts +68 -2
package/dist/node/index.cjs
CHANGED
|
@@ -44,38 +44,44 @@ module.exports = __toCommonJS(src_exports);
|
|
|
44
44
|
var HttpBridgeConfigSchema = "network.xyo.bridge.http.config";
|
|
45
45
|
|
|
46
46
|
// src/HttpBridgeFull.ts
|
|
47
|
-
var
|
|
48
|
-
var
|
|
47
|
+
var import_assert4 = require("@xylabs/assert");
|
|
48
|
+
var import_exists3 = require("@xylabs/exists");
|
|
49
49
|
var import_object2 = require("@xylabs/object");
|
|
50
50
|
var import_boundwitness_model = require("@xyo-network/boundwitness-model");
|
|
51
|
-
var
|
|
51
|
+
var import_module_model4 = require("@xyo-network/module-model");
|
|
52
52
|
var import_express = __toESM(require("express"), 1);
|
|
53
53
|
|
|
54
54
|
// src/HttpBridgeBase.ts
|
|
55
|
-
var
|
|
55
|
+
var import_assert3 = require("@xylabs/assert");
|
|
56
56
|
var import_axios = require("@xylabs/axios");
|
|
57
|
-
var
|
|
57
|
+
var import_exists2 = require("@xylabs/exists");
|
|
58
58
|
var import_forget2 = require("@xylabs/forget");
|
|
59
59
|
var import_object = require("@xylabs/object");
|
|
60
60
|
var import_bridge_abstract3 = require("@xyo-network/bridge-abstract");
|
|
61
61
|
var import_manifest_model = require("@xyo-network/manifest-model");
|
|
62
|
-
var
|
|
62
|
+
var import_module_model3 = require("@xyo-network/module-model");
|
|
63
63
|
var import_node_model = require("@xyo-network/node-model");
|
|
64
64
|
var import_payload_model = require("@xyo-network/payload-model");
|
|
65
|
-
var
|
|
66
|
-
var
|
|
65
|
+
var import_async_mutex2 = require("async-mutex");
|
|
66
|
+
var import_lru_cache2 = require("lru-cache");
|
|
67
67
|
|
|
68
68
|
// src/HttpBridgeModuleResolver.ts
|
|
69
|
-
var
|
|
70
|
-
var
|
|
69
|
+
var import_assert2 = require("@xylabs/assert");
|
|
70
|
+
var import_hex2 = require("@xylabs/hex");
|
|
71
71
|
var import_account = require("@xyo-network/account");
|
|
72
72
|
var import_bridge_abstract2 = require("@xyo-network/bridge-abstract");
|
|
73
73
|
var import_config_payload_plugin = require("@xyo-network/config-payload-plugin");
|
|
74
|
-
var
|
|
74
|
+
var import_module_model2 = require("@xyo-network/module-model");
|
|
75
|
+
var import_async_mutex = require("async-mutex");
|
|
76
|
+
var import_lru_cache = require("lru-cache");
|
|
75
77
|
|
|
76
78
|
// src/ModuleProxy/ModuleProxy.ts
|
|
79
|
+
var import_assert = require("@xylabs/assert");
|
|
80
|
+
var import_exists = require("@xylabs/exists");
|
|
77
81
|
var import_forget = require("@xylabs/forget");
|
|
82
|
+
var import_hex = require("@xylabs/hex");
|
|
78
83
|
var import_bridge_abstract = require("@xyo-network/bridge-abstract");
|
|
84
|
+
var import_module_model = require("@xyo-network/module-model");
|
|
79
85
|
var _HttpModuleProxy = class _HttpModuleProxy extends import_bridge_abstract.AbstractModuleProxy {
|
|
80
86
|
constructor(params) {
|
|
81
87
|
_HttpModuleProxy.createCount = _HttpModuleProxy.createCount + 1;
|
|
@@ -97,6 +103,40 @@ var _HttpModuleProxy = class _HttpModuleProxy extends import_bridge_abstract.Abs
|
|
|
97
103
|
}
|
|
98
104
|
return result;
|
|
99
105
|
}
|
|
106
|
+
async publicChildren() {
|
|
107
|
+
return (await Promise.all(Object.values(await this.childAddressMap()).filter(import_exists.exists).map((address) => this.resolve(address)))).filter(import_exists.exists);
|
|
108
|
+
}
|
|
109
|
+
async resolve(idOrFilter = "*", options = {}) {
|
|
110
|
+
const config = {
|
|
111
|
+
address: this.address,
|
|
112
|
+
dead: this.dead,
|
|
113
|
+
downResolver: this.downResolver,
|
|
114
|
+
logger: this.logger,
|
|
115
|
+
module: this,
|
|
116
|
+
transformers: this.moduleIdentifierTransformers,
|
|
117
|
+
upResolver: this.upResolver
|
|
118
|
+
};
|
|
119
|
+
if (idOrFilter === "*") {
|
|
120
|
+
return await this.publicChildren();
|
|
121
|
+
}
|
|
122
|
+
switch (typeof idOrFilter) {
|
|
123
|
+
case "string": {
|
|
124
|
+
const parts = idOrFilter.split(":");
|
|
125
|
+
const first = (0, import_assert.assertEx)(parts.shift(), () => "Missing first");
|
|
126
|
+
const remainingPath = parts.join(":");
|
|
127
|
+
const address = (0, import_hex.isAddress)(first) ? first : this.id === first ? this.address : this.childAddressByName(first);
|
|
128
|
+
if (!address) return void 0;
|
|
129
|
+
const firstInstance = await this.params.host.resolve(address);
|
|
130
|
+
return remainingPath ? await (firstInstance == null ? void 0 : firstInstance.resolve(remainingPath)) : firstInstance;
|
|
131
|
+
}
|
|
132
|
+
case "object": {
|
|
133
|
+
return (await import_module_model.ResolveHelper.resolve(config, idOrFilter, options)).filter((mod) => mod.address !== this.address);
|
|
134
|
+
}
|
|
135
|
+
default: {
|
|
136
|
+
return (await import_module_model.ResolveHelper.resolve(config, idOrFilter, options)).filter((mod) => mod.address !== this.address);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
100
140
|
};
|
|
101
141
|
__name(_HttpModuleProxy, "HttpModuleProxy");
|
|
102
142
|
__publicField(_HttpModuleProxy, "createCount", 0);
|
|
@@ -104,64 +144,70 @@ var HttpModuleProxy = _HttpModuleProxy;
|
|
|
104
144
|
|
|
105
145
|
// src/HttpBridgeModuleResolver.ts
|
|
106
146
|
var _HttpBridgeModuleResolver = class _HttpBridgeModuleResolver extends import_bridge_abstract2.AbstractBridgeModuleResolver {
|
|
147
|
+
_resolvedCache = new import_lru_cache.LRUCache({
|
|
148
|
+
max: 1e3
|
|
149
|
+
});
|
|
150
|
+
_resolvedCacheMutex = new import_async_mutex.Mutex();
|
|
107
151
|
get querySender() {
|
|
108
152
|
return this.params.querySender;
|
|
109
153
|
}
|
|
110
154
|
moduleUrl(address) {
|
|
111
155
|
return new URL(address, this.params.rootUrl);
|
|
112
156
|
}
|
|
113
|
-
async resolveHandler(id, options) {
|
|
114
|
-
var _a, _b;
|
|
157
|
+
async resolveHandler(id, options, params) {
|
|
115
158
|
const parentResult = await super.resolveHandler(id, options);
|
|
116
159
|
if (parentResult.length > 0) {
|
|
117
160
|
return parentResult;
|
|
118
161
|
}
|
|
119
|
-
if (id === "*") {
|
|
120
|
-
return [];
|
|
121
|
-
}
|
|
122
162
|
const idParts = id.split(":");
|
|
123
|
-
const untransformedFirstPart = (0,
|
|
124
|
-
const firstPart = await
|
|
125
|
-
|
|
126
|
-
(0, import_assert.assertEx)((0, import_hex.isAddress)(firstPart), () => `Invalid module address: ${firstPart}`);
|
|
163
|
+
const untransformedFirstPart = (0, import_assert2.assertEx)(idParts.shift(), () => "Missing module identifier");
|
|
164
|
+
const firstPart = await import_module_model2.ResolveHelper.transformModuleIdentifier(untransformedFirstPart);
|
|
165
|
+
(0, import_assert2.assertEx)((0, import_hex2.isAddress)(firstPart), () => `Invalid module address: ${firstPart}`);
|
|
127
166
|
const remainderParts = idParts.join(":");
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
167
|
+
const instance = await this._resolvedCacheMutex.runExclusive(async () => {
|
|
168
|
+
var _a, _b, _c;
|
|
169
|
+
const cachedMod = this._resolvedCache.get(firstPart);
|
|
170
|
+
if (cachedMod) {
|
|
171
|
+
const result2 = idParts.length <= 0 ? cachedMod : cachedMod.resolve(remainderParts, {
|
|
172
|
+
...options,
|
|
173
|
+
maxDepth: ((options == null ? void 0 : options.maxDepth) ?? 5) - 1
|
|
174
|
+
});
|
|
175
|
+
return result2;
|
|
176
|
+
}
|
|
177
|
+
const account = import_account.Account.randomSync();
|
|
178
|
+
const finalParams = {
|
|
179
|
+
account,
|
|
180
|
+
archiving: this.params.archiving,
|
|
181
|
+
config: {
|
|
182
|
+
schema: import_module_model2.ModuleConfigSchema
|
|
183
|
+
},
|
|
184
|
+
host: this,
|
|
185
|
+
moduleAddress: firstPart,
|
|
186
|
+
onQuerySendFinished: this.params.onQuerySendFinished,
|
|
187
|
+
onQuerySendStarted: this.params.onQuerySendStarted,
|
|
188
|
+
querySender: this.params.querySender,
|
|
189
|
+
...params
|
|
190
|
+
};
|
|
191
|
+
(_a = this.logger) == null ? void 0 : _a.debug(`creating HttpProxy [${firstPart}] ${id}`);
|
|
192
|
+
console.log(`creating HttpProxy [${firstPart}] ${id}`);
|
|
193
|
+
const proxy = new HttpModuleProxy(finalParams);
|
|
144
194
|
const state = await proxy.state();
|
|
145
195
|
if (state) {
|
|
146
196
|
const configSchema = (_b = state.find((payload) => payload.schema === import_config_payload_plugin.ConfigSchema)) == null ? void 0 : _b.config;
|
|
147
|
-
const config = (0,
|
|
197
|
+
const config = (0, import_assert2.assertEx)(state.find((payload) => payload.schema === configSchema), () => "Unable to locate config");
|
|
148
198
|
proxy.setConfig(config);
|
|
149
199
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
}
|
|
162
|
-
return [
|
|
163
|
-
instance
|
|
164
|
-
];
|
|
200
|
+
console.log(`created HttpProxy [${firstPart}] ${proxy.id}`);
|
|
201
|
+
await ((_c = proxy.start) == null ? void 0 : _c.call(proxy));
|
|
202
|
+
const wrapped = (0, import_bridge_abstract2.wrapModuleWithType)(proxy, account);
|
|
203
|
+
(0, import_assert2.assertEx)((0, import_module_model2.asModuleInstance)(wrapped, {}), () => `Failed to asModuleInstance [${id}]`);
|
|
204
|
+
this._resolvedCache.set(wrapped.address, wrapped);
|
|
205
|
+
return wrapped;
|
|
206
|
+
});
|
|
207
|
+
const result = remainderParts.length > 0 ? await instance.resolve(remainderParts, options) : instance;
|
|
208
|
+
return result ? [
|
|
209
|
+
result
|
|
210
|
+
] : [];
|
|
165
211
|
}
|
|
166
212
|
};
|
|
167
213
|
__name(_HttpBridgeModuleResolver, "HttpBridgeModuleResolver");
|
|
@@ -177,8 +223,8 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
177
223
|
__name(_ts_decorate, "_ts_decorate");
|
|
178
224
|
var _HttpBridgeBase = class _HttpBridgeBase extends import_bridge_abstract3.AbstractBridge {
|
|
179
225
|
_axios;
|
|
180
|
-
_discoverRootsMutex = new
|
|
181
|
-
_failureTimeCache = new
|
|
226
|
+
_discoverRootsMutex = new import_async_mutex2.Mutex();
|
|
227
|
+
_failureTimeCache = new import_lru_cache2.LRUCache({
|
|
182
228
|
max: _HttpBridgeBase.maxFailureCacheSize
|
|
183
229
|
});
|
|
184
230
|
_querySemaphore;
|
|
@@ -189,7 +235,7 @@ var _HttpBridgeBase = class _HttpBridgeBase extends import_bridge_abstract3.Abst
|
|
|
189
235
|
}
|
|
190
236
|
get clientUrl() {
|
|
191
237
|
var _a;
|
|
192
|
-
return (0,
|
|
238
|
+
return (0, import_assert3.assertEx)(((_a = this.config.client) == null ? void 0 : _a.url) ?? this.config.nodeUrl, () => "No Url Set");
|
|
193
239
|
}
|
|
194
240
|
get failureRetryTime() {
|
|
195
241
|
return this.config.failureRetryTime ?? _HttpBridgeBase.defaultFailureRetryTime;
|
|
@@ -201,7 +247,7 @@ var _HttpBridgeBase = class _HttpBridgeBase extends import_bridge_abstract3.Abst
|
|
|
201
247
|
return this.config.maxPayloadSizeWarning ?? _HttpBridgeBase.defaultMaxPayloadSizeWarning;
|
|
202
248
|
}
|
|
203
249
|
get querySemaphore() {
|
|
204
|
-
this._querySemaphore = this._querySemaphore ?? new
|
|
250
|
+
this._querySemaphore = this._querySemaphore ?? new import_async_mutex2.Semaphore(this.maxConnections);
|
|
205
251
|
return this._querySemaphore;
|
|
206
252
|
}
|
|
207
253
|
get resolver() {
|
|
@@ -231,6 +277,23 @@ var _HttpBridgeBase = class _HttpBridgeBase extends import_bridge_abstract3.Abst
|
|
|
231
277
|
});
|
|
232
278
|
return this._resolver;
|
|
233
279
|
}
|
|
280
|
+
async connect(id) {
|
|
281
|
+
const transformedId = (0, import_assert3.assertEx)(await import_module_model3.ResolveHelper.transformModuleIdentifier(id), () => `Unable to transform module identifier: ${id}`);
|
|
282
|
+
const existingInstance = await this.resolve(transformedId);
|
|
283
|
+
if (existingInstance) {
|
|
284
|
+
return existingInstance.address;
|
|
285
|
+
}
|
|
286
|
+
const [instance] = await this.resolver.resolveHandler(id);
|
|
287
|
+
return this.connectInstance(instance);
|
|
288
|
+
}
|
|
289
|
+
async disconnect(id) {
|
|
290
|
+
const transformedId = (0, import_assert3.assertEx)(await import_module_model3.ResolveHelper.transformModuleIdentifier(id), () => `Unable to transform module identifier: ${id}`);
|
|
291
|
+
const instance = await this.resolve(transformedId);
|
|
292
|
+
if (instance) {
|
|
293
|
+
this.downResolver.remove(instance.address);
|
|
294
|
+
return instance.address;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
234
297
|
exposeHandler(_id, _options) {
|
|
235
298
|
throw new Error("Unsupported");
|
|
236
299
|
}
|
|
@@ -245,7 +308,7 @@ var _HttpBridgeBase = class _HttpBridgeBase extends import_bridge_abstract3.Abst
|
|
|
245
308
|
(_a = this.logger) == null ? void 0 : _a.debug(`HttpBridge:discoverRoots.state [${state == null ? void 0 : state.length}]`);
|
|
246
309
|
const nodeManifest = state == null ? void 0 : state.find((0, import_payload_model.isPayloadOfSchemaType)(import_manifest_model.NodeManifestPayloadSchema));
|
|
247
310
|
if (nodeManifest) {
|
|
248
|
-
const mods = (await this.resolveRootNode(nodeManifest)).filter(
|
|
311
|
+
const mods = (await this.resolveRootNode(nodeManifest)).filter(import_exists2.exists);
|
|
249
312
|
(_b = this.logger) == null ? void 0 : _b.debug(`HttpBridge:discoverRoots [${mods.length}]`);
|
|
250
313
|
this._roots = mods;
|
|
251
314
|
} else {
|
|
@@ -302,10 +365,18 @@ var _HttpBridgeBase = class _HttpBridgeBase extends import_bridge_abstract3.Abst
|
|
|
302
365
|
unexposeHandler(_id, _options) {
|
|
303
366
|
throw new Error("Unsupported");
|
|
304
367
|
}
|
|
368
|
+
connectInstance(instance) {
|
|
369
|
+
var _a;
|
|
370
|
+
if (instance) {
|
|
371
|
+
this.downResolver.add(instance);
|
|
372
|
+
(_a = this.logger) == null ? void 0 : _a.log(`Connect: ${instance.id}`);
|
|
373
|
+
return instance.address;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
305
376
|
async getRootState() {
|
|
306
377
|
var _a;
|
|
307
378
|
const queryPayload = {
|
|
308
|
-
schema:
|
|
379
|
+
schema: import_module_model3.ModuleStateQuerySchema
|
|
309
380
|
};
|
|
310
381
|
const boundQuery = await this.bindQuery(queryPayload);
|
|
311
382
|
try {
|
|
@@ -325,15 +396,17 @@ var _HttpBridgeBase = class _HttpBridgeBase extends import_bridge_abstract3.Abst
|
|
|
325
396
|
}
|
|
326
397
|
async resolveRootNode(nodeManifest) {
|
|
327
398
|
var _a;
|
|
328
|
-
const rootModule = (0,
|
|
399
|
+
const rootModule = (0, import_assert3.assertEx)((await this.resolver.resolveHandler((0, import_assert3.assertEx)((_a = nodeManifest.status) == null ? void 0 : _a.address, () => "Root has no address"), void 0, {
|
|
400
|
+
manifest: nodeManifest
|
|
401
|
+
})).at(0), () => {
|
|
329
402
|
var _a2;
|
|
330
403
|
return `Root not found [${(_a2 = nodeManifest.status) == null ? void 0 : _a2.address}]`;
|
|
331
404
|
});
|
|
332
|
-
(0,
|
|
405
|
+
(0, import_assert3.assertEx)(rootModule.constructor.name !== "HttpModuleProxy", () => "rootModule is not a Wrapper");
|
|
333
406
|
const rootNode = (0, import_node_model.asAttachableNodeInstance)(rootModule, "Root modules is not a node");
|
|
334
407
|
if (rootNode) {
|
|
335
408
|
this.logger.debug(`rootNode: ${rootNode.id}`);
|
|
336
|
-
this.
|
|
409
|
+
this.connectInstance(rootNode);
|
|
337
410
|
return [
|
|
338
411
|
rootNode
|
|
339
412
|
];
|
|
@@ -354,7 +427,7 @@ __publicField(_HttpBridgeBase, "defaultMaxPayloadSizeWarning", 256 * 256);
|
|
|
354
427
|
__publicField(_HttpBridgeBase, "maxFailureCacheSize", 1e3);
|
|
355
428
|
var HttpBridgeBase = _HttpBridgeBase;
|
|
356
429
|
HttpBridgeBase = _ts_decorate([
|
|
357
|
-
(0,
|
|
430
|
+
(0, import_module_model3.creatableModule)()
|
|
358
431
|
], HttpBridgeBase);
|
|
359
432
|
|
|
360
433
|
// src/HttpBridgeFull.ts
|
|
@@ -384,14 +457,14 @@ var _HttpBridge = class _HttpBridge extends HttpBridgeBase {
|
|
|
384
457
|
var _a, _b;
|
|
385
458
|
const { maxDepth = 5 } = options ?? {};
|
|
386
459
|
console.log(`exposeChild: ${mod.address} ${mod == null ? void 0 : mod.id} ${maxDepth}`);
|
|
387
|
-
(0,
|
|
460
|
+
(0, import_assert4.assertEx)(this.config.host, () => "Not configured as a host");
|
|
388
461
|
this._exposedModules.push(new WeakRef(mod));
|
|
389
462
|
const children = maxDepth > 0 ? await ((_a = mod.publicChildren) == null ? void 0 : _a.call(mod)) ?? [] : [];
|
|
390
463
|
this.logger.log(`childrenToExpose [${mod.id}][${mod.address}]: ${(0, import_object2.toJsonString)(children.map((child) => child.id))}`);
|
|
391
464
|
const exposedChildren = (await Promise.all(children.map((child) => this.exposeChild(child, {
|
|
392
465
|
maxDepth: maxDepth - 1,
|
|
393
466
|
required: false
|
|
394
|
-
})))).flat().filter(
|
|
467
|
+
})))).flat().filter(import_exists3.exists);
|
|
395
468
|
const allExposed = [
|
|
396
469
|
mod,
|
|
397
470
|
...exposedChildren
|
|
@@ -401,7 +474,7 @@ var _HttpBridge = class _HttpBridge extends HttpBridgeBase {
|
|
|
401
474
|
}
|
|
402
475
|
async exposeHandler(address, options) {
|
|
403
476
|
const { required = true } = options ?? {};
|
|
404
|
-
const mod = await (0,
|
|
477
|
+
const mod = await (0, import_module_model4.resolveAddressToInstanceUp)(this, address);
|
|
405
478
|
console.log(`exposeHandler: ${address} ${mod == null ? void 0 : mod.id}`);
|
|
406
479
|
if (required && !mod) {
|
|
407
480
|
throw new Error(`Unable to find required module: ${address}`);
|
|
@@ -415,7 +488,7 @@ var _HttpBridge = class _HttpBridge extends HttpBridgeBase {
|
|
|
415
488
|
return this._exposedModules.map((ref) => {
|
|
416
489
|
var _a;
|
|
417
490
|
return (_a = ref.deref()) == null ? void 0 : _a.address;
|
|
418
|
-
}).filter(
|
|
491
|
+
}).filter(import_exists3.exists);
|
|
419
492
|
}
|
|
420
493
|
async startHandler() {
|
|
421
494
|
return await super.startHandler() && this.startHttpServer();
|
|
@@ -426,12 +499,12 @@ var _HttpBridge = class _HttpBridge extends HttpBridgeBase {
|
|
|
426
499
|
async unexposeHandler(address, options) {
|
|
427
500
|
var _a, _b;
|
|
428
501
|
const { maxDepth = 2, required = true } = options ?? {};
|
|
429
|
-
(0,
|
|
502
|
+
(0, import_assert4.assertEx)(this.config.host, () => "Not configured as a host");
|
|
430
503
|
const mod = (_a = this._exposedModules.find((ref) => {
|
|
431
504
|
var _a2;
|
|
432
505
|
return ((_a2 = ref.deref()) == null ? void 0 : _a2.address) === address;
|
|
433
506
|
})) == null ? void 0 : _a.deref();
|
|
434
|
-
(0,
|
|
507
|
+
(0, import_assert4.assertEx)(!required || mod, () => `Module not exposed: ${address}`);
|
|
435
508
|
this._exposedModules = this._exposedModules.filter((ref) => {
|
|
436
509
|
var _a2;
|
|
437
510
|
return ((_a2 = ref.deref()) == null ? void 0 : _a2.address) !== address;
|
|
@@ -441,7 +514,7 @@ var _HttpBridge = class _HttpBridge extends HttpBridgeBase {
|
|
|
441
514
|
const exposedChildren = (await Promise.all(children.map((child) => this.unexposeHandler(child.address, {
|
|
442
515
|
maxDepth: maxDepth - 1,
|
|
443
516
|
required: false
|
|
444
|
-
})))).flat().filter(
|
|
517
|
+
})))).flat().filter(import_exists3.exists);
|
|
445
518
|
return [
|
|
446
519
|
mod,
|
|
447
520
|
...exposedChildren
|
|
@@ -484,13 +557,13 @@ var _HttpBridge = class _HttpBridge extends HttpBridgeBase {
|
|
|
484
557
|
startHttpServer() {
|
|
485
558
|
var _a;
|
|
486
559
|
if (this.config.host) {
|
|
487
|
-
(0,
|
|
560
|
+
(0, import_assert4.assertEx)(!this._server, () => "Server already started");
|
|
488
561
|
this._server = this.app.listen(((_a = this.config.host) == null ? void 0 : _a.port) ?? 3030);
|
|
489
562
|
}
|
|
490
563
|
return true;
|
|
491
564
|
}
|
|
492
565
|
stopHttpServer() {
|
|
493
|
-
const server = (0,
|
|
566
|
+
const server = (0, import_assert4.assertEx)(this._server, () => "Server not started");
|
|
494
567
|
server.close();
|
|
495
568
|
this._server = void 0;
|
|
496
569
|
return true;
|
|
@@ -499,7 +572,7 @@ var _HttpBridge = class _HttpBridge extends HttpBridgeBase {
|
|
|
499
572
|
__name(_HttpBridge, "HttpBridge");
|
|
500
573
|
var HttpBridge = _HttpBridge;
|
|
501
574
|
HttpBridge = _ts_decorate2([
|
|
502
|
-
(0,
|
|
575
|
+
(0, import_module_model4.creatableModule)()
|
|
503
576
|
], HttpBridge);
|
|
504
577
|
// Annotate the CommonJS export names for ESM import in node:
|
|
505
578
|
0 && (module.exports = {
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/HttpBridgeConfig.ts","../../src/HttpBridgeFull.ts","../../src/HttpBridgeBase.ts","../../src/HttpBridgeModuleResolver.ts","../../src/ModuleProxy/ModuleProxy.ts"],"sourcesContent":["export * from './HttpBridgeConfig'\nexport * from './HttpBridgeFull'\n","import { EmptyObject } from '@xylabs/object'\nimport { BridgeConfig } from '@xyo-network/bridge-model'\n\nexport type HttpBridgeConfigSchema = 'network.xyo.bridge.http.config'\nexport const HttpBridgeConfigSchema: HttpBridgeConfigSchema = 'network.xyo.bridge.http.config'\n\nexport type HttpBridgeConfig<TConfig extends EmptyObject = EmptyObject, TSchema extends string | void = void> = BridgeConfig<\n {\n client?: BridgeConfig['client'] & {\n url: string\n }\n failureRetryTime?: number\n failureTimeCacheMax?: number\n host?: {\n port: number\n }\n maxConnections?: number\n maxPayloadSizeWarning?: number\n /** @deprecated use client.url instead */\n nodeUrl?: string\n schema: HttpBridgeConfigSchema\n } & TConfig,\n TSchema extends string ? TSchema : HttpBridgeConfigSchema\n>\n","import { Server } from 'node:http'\n\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { ApiEnvelopeSuccess } from '@xyo-network/api-models'\nimport { isQueryBoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BridgeExposeOptions, BridgeParams, BridgeUnexposeOptions } from '@xyo-network/bridge-model'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleQueryResult, resolveAddressToInstanceUp } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport express, { Application, Request, Response } from 'express'\n\nimport { HttpBridgeBase } from './HttpBridgeBase'\nimport { HttpBridgeConfig } from './HttpBridgeConfig'\n\nexport interface HttpBridgeParams extends BridgeParams<AnyConfigSchema<HttpBridgeConfig>> {}\n\n@creatableModule()\nexport class HttpBridge<TParams extends HttpBridgeParams> extends HttpBridgeBase<TParams> {\n protected _app?: Application\n protected _exposedModules: WeakRef<ModuleInstance>[] = []\n protected _server?: Server\n\n get app() {\n this._app =\n this._app ??\n (() => {\n const app = express()\n app.use(express.json())\n\n app.post<Payload[]>('/', (req, res) => {\n this.handlePost(req, res)\n })\n\n return app\n })()\n return this._app\n }\n\n async exposeChild(mod: ModuleInstance, options?: BridgeExposeOptions | undefined): Promise<ModuleInstance[]> {\n const { maxDepth = 5 } = options ?? {}\n console.log(`exposeChild: ${mod.address} ${mod?.id} ${maxDepth}`)\n assertEx(this.config.host, () => 'Not configured as a host')\n this._exposedModules.push(new WeakRef(mod))\n const children = maxDepth > 0 ? (await mod.publicChildren?.()) ?? [] : []\n this.logger.log(`childrenToExpose [${mod.id}][${mod.address}]: ${toJsonString(children.map((child) => child.id))}`)\n const exposedChildren = (await Promise.all(children.map((child) => this.exposeChild(child, { maxDepth: maxDepth - 1, required: false }))))\n .flat()\n .filter(exists)\n const allExposed = [mod, ...exposedChildren]\n\n for (const exposedMod of allExposed) this.logger?.log(`exposed: ${exposedMod.address} [${mod.id}]`)\n\n return allExposed\n }\n\n override async exposeHandler(address: Address, options?: BridgeExposeOptions | undefined): Promise<ModuleInstance[]> {\n const { required = true } = options ?? {}\n const mod = await resolveAddressToInstanceUp(this, address)\n console.log(`exposeHandler: ${address} ${mod?.id}`)\n if (required && !mod) {\n throw new Error(`Unable to find required module: ${address}`)\n }\n if (mod) {\n return this.exposeChild(mod, options)\n }\n return []\n }\n\n override exposedHandler(): Address[] {\n return this._exposedModules.map((ref) => ref.deref()?.address).filter(exists)\n }\n\n override async startHandler(): Promise<boolean> {\n return (await super.startHandler()) && this.startHttpServer()\n }\n\n override async stopHandler(_timeout?: number | undefined): Promise<boolean> {\n return (await super.stopHandler()) && this.stopHttpServer()\n }\n\n override async unexposeHandler(address: Address, options?: BridgeUnexposeOptions | undefined): Promise<ModuleInstance[]> {\n const { maxDepth = 2, required = true } = options ?? {}\n assertEx(this.config.host, () => 'Not configured as a host')\n const mod = this._exposedModules.find((ref) => ref.deref()?.address === address)?.deref()\n assertEx(!required || mod, () => `Module not exposed: ${address}`)\n this._exposedModules = this._exposedModules.filter((ref) => ref.deref()?.address !== address)\n if (mod) {\n const children = maxDepth > 0 ? (await mod.publicChildren?.()) ?? [] : []\n const exposedChildren = (\n await Promise.all(children.map((child) => this.unexposeHandler(child.address, { maxDepth: maxDepth - 1, required: false })))\n )\n .flat()\n .filter(exists)\n return [mod, ...exposedChildren]\n }\n return []\n }\n\n protected async callLocalModule(address: Address, query: QueryBoundWitness, payloads: Payload[]): Promise<ModuleQueryResult | null> {\n const mod = this._exposedModules.find((ref) => ref.deref()?.address === address)?.deref()\n if (mod) {\n return await mod.query(query, payloads)\n }\n return null\n }\n\n protected handlePost(req: Request<Payload[]>, res: Response) {\n const allPayloads = req.body as Payload[]\n const query = allPayloads.find(isQueryBoundWitness) as QueryBoundWitness\n const payloads = allPayloads.filter((payload) => !isQueryBoundWitness(payload))\n this.callLocalModule(req.route, query, payloads)\n .then((result) => {\n if (result === null) {\n res.status(404).json({ error: 'Module not found' })\n } else {\n const envelope = {\n data: result,\n } as ApiEnvelopeSuccess<ModuleQueryResult>\n res.json(envelope)\n }\n })\n .catch((ex) => {\n res.status(500).json({ error: (ex as Error).message })\n })\n }\n\n protected startHttpServer() {\n if (this.config.host) {\n assertEx(!this._server, () => 'Server already started')\n this._server = this.app.listen(this.config.host?.port ?? 3030)\n }\n return true\n }\n\n protected stopHttpServer() {\n const server = assertEx(this._server, () => 'Server not started')\n server.close()\n this._server = undefined\n return true\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { AxiosError, AxiosJson } from '@xylabs/axios'\nimport { exists } from '@xylabs/exists'\nimport { forget } from '@xylabs/forget'\nimport { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport { ApiEnvelope } from '@xyo-network/api-models'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractBridge } from '@xyo-network/bridge-abstract'\nimport {\n BridgeExposeOptions,\n BridgeModule,\n BridgeParams,\n BridgeUnexposeOptions,\n QuerySendFinishedEventArgs,\n QuerySendStartedEventArgs,\n} from '@xyo-network/bridge-model'\nimport { NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport {\n AnyConfigSchema,\n creatableModule,\n ModuleInstance,\n ModuleQueryResult,\n ModuleResolverInstance,\n ModuleStateQuery,\n ModuleStateQuerySchema,\n} from '@xyo-network/module-model'\nimport { asAttachableNodeInstance } from '@xyo-network/node-model'\nimport { isPayloadOfSchemaType, Payload, Schema, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex, Semaphore } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport { HttpBridgeConfig, HttpBridgeConfigSchema } from './HttpBridgeConfig'\nimport { HttpBridgeModuleResolver } from './HttpBridgeModuleResolver'\nimport { BridgeQuerySender } from './ModuleProxy'\n\nexport interface HttpBridgeParams extends BridgeParams<AnyConfigSchema<HttpBridgeConfig>> {\n axios?: AxiosJson\n}\n\n@creatableModule()\nexport class HttpBridgeBase<TParams extends HttpBridgeParams> extends AbstractBridge<TParams> implements BridgeModule<TParams>, BridgeQuerySender {\n static axios = new AxiosJson()\n static override readonly configSchemas: Schema[] = [...super.configSchemas, HttpBridgeConfigSchema]\n static override readonly defaultConfigSchema: Schema = HttpBridgeConfigSchema\n static defaultFailureRetryTime = 1000 * 60\n static defaultMaxConnections = 4\n static defaultMaxPayloadSizeWarning = 256 * 256\n static maxFailureCacheSize = 1000\n\n private _axios?: AxiosJson\n private _discoverRootsMutex = new Mutex()\n private _failureTimeCache = new LRUCache<Address, number>({ max: HttpBridgeBase.maxFailureCacheSize })\n private _querySemaphore?: Semaphore\n private _resolver?: HttpBridgeModuleResolver\n\n get axios() {\n this._axios = this._axios ?? this.params.axios ?? HttpBridgeBase.axios\n return this._axios\n }\n\n get clientUrl() {\n // eslint-disable-next-line deprecation/deprecation\n return assertEx(this.config.client?.url ?? this.config.nodeUrl, () => 'No Url Set')\n }\n\n get failureRetryTime() {\n return this.config.failureRetryTime ?? HttpBridgeBase.defaultFailureRetryTime\n }\n\n get maxConnections() {\n return this.config.maxConnections ?? HttpBridgeBase.defaultMaxConnections\n }\n\n get maxPayloadSizeWarning() {\n return this.config.maxPayloadSizeWarning ?? HttpBridgeBase.defaultMaxPayloadSizeWarning\n }\n\n get querySemaphore() {\n this._querySemaphore = this._querySemaphore ?? new Semaphore(this.maxConnections)\n return this._querySemaphore\n }\n\n override get resolver() {\n this._resolver =\n this._resolver ??\n new HttpBridgeModuleResolver({\n additionalSigners: this.additionalSigners,\n archiving: { ...this.archiving, resolveArchivists: this.resolveArchivingArchivists.bind(this) },\n bridge: this,\n onQuerySendFinished: (args: Omit<QuerySendFinishedEventArgs, 'module'>) => {\n forget(this.emit('querySendFinished', { module: this, ...args }))\n },\n onQuerySendStarted: (args: Omit<QuerySendStartedEventArgs, 'module'>) => {\n forget(this.emit('querySendStarted', { module: this, ...args }))\n },\n querySender: this,\n root: this,\n rootUrl: this.clientUrl,\n wrapperAccount: this.account,\n })\n return this._resolver\n }\n\n override exposeHandler(_id: string, _options?: BridgeExposeOptions | undefined): Promisable<ModuleInstance[]> {\n throw new Error('Unsupported')\n }\n\n override exposedHandler(): Promisable<Address[]> {\n throw new Error('Unsupported')\n }\n\n async getRoots(force?: boolean): Promise<ModuleInstance[]> {\n return await this._discoverRootsMutex.runExclusive(async () => {\n if (this._roots === undefined || force) {\n const state = await this.getRootState()\n this.logger?.debug(`HttpBridge:discoverRoots.state [${state?.length}]`)\n const nodeManifest = state?.find(isPayloadOfSchemaType<WithMeta<NodeManifestPayload>>(NodeManifestPayloadSchema))\n if (nodeManifest) {\n const mods = (await this.resolveRootNode(nodeManifest)).filter(exists)\n this.logger?.debug(`HttpBridge:discoverRoots [${mods.length}]`)\n this._roots = mods\n } else {\n this._roots = []\n }\n }\n return this._roots\n })\n }\n\n moduleUrl(address: Address) {\n return new URL(address, this.clientUrl)\n }\n\n async sendBridgeQuery<TOut extends Payload = Payload, TQuery extends QueryBoundWitness = QueryBoundWitness, TIn extends Payload = Payload>(\n targetAddress: Address,\n query: TQuery,\n payloads?: TIn[],\n ): Promise<ModuleQueryResult<TOut>> {\n const lastFailureTime = this._failureTimeCache.get(targetAddress)\n if (lastFailureTime !== undefined) {\n const now = Date.now()\n const timeSincePreviousFailure = now - lastFailureTime\n if (timeSincePreviousFailure > this.failureRetryTime) {\n throw new Error(`target module failed recently [${targetAddress}] [${timeSincePreviousFailure}ms ago]`)\n }\n this._failureTimeCache.delete(targetAddress)\n }\n try {\n await this.querySemaphore.acquire()\n const payloadSize = JSON.stringify([query, payloads]).length\n if (payloadSize > this.maxPayloadSizeWarning) {\n this.logger?.warn(\n `Large targetQuery being sent: ${payloadSize} bytes [${this.address}][${this.moduleAddress}] [${query.schema}] [${payloads?.length}]`,\n )\n }\n const moduleUrl = this.moduleUrl(targetAddress).href\n const result = await this.axios.post<ApiEnvelope<ModuleQueryResult<TOut>>>(moduleUrl, [query, payloads])\n if (result.status === 404) {\n throw `target module not found [${moduleUrl}] [${result.status}]`\n }\n if (result.status >= 400) {\n this.logger?.error(`targetQuery failed [${moduleUrl}]`)\n throw `targetQuery failed [${moduleUrl}] [${result.status}]`\n }\n return result.data?.data\n } catch (ex) {\n const error = ex as AxiosError\n this.logger?.error(`Error: ${toJsonString(error)}`)\n throw error\n } finally {\n this.querySemaphore.release()\n }\n }\n\n override unexposeHandler(_id: string, _options?: BridgeUnexposeOptions | undefined): Promisable<ModuleInstance[]> {\n throw new Error('Unsupported')\n }\n\n private async getRootState() {\n const queryPayload: ModuleStateQuery = { schema: ModuleStateQuerySchema }\n const boundQuery = await this.bindQuery(queryPayload)\n try {\n const response = await this.axios.post<ApiEnvelope<ModuleQueryResult>>(this.clientUrl.toString(), boundQuery)\n if (response.status === 404) {\n return []\n }\n const [, payloads, errors] = response.data.data\n if (errors.length > 0) {\n throw new Error(`getRootState failed: ${JSON.stringify(errors, null, 2)}`)\n }\n return payloads\n } catch (ex) {\n const error = ex as Error\n this.logger?.warn(`Unable to connect to remote node: ${error.message} [${this.clientUrl}]`)\n }\n }\n\n private async resolveRootNode(nodeManifest: NodeManifestPayload): Promise<ModuleInstance[]> {\n const rootModule = assertEx(\n (await this.resolver.resolveHandler(assertEx(nodeManifest.status?.address, () => 'Root has no address'))).at(0),\n () => `Root not found [${nodeManifest.status?.address}]`,\n )\n assertEx(rootModule.constructor.name !== 'HttpModuleProxy', () => 'rootModule is not a Wrapper')\n const rootNode = asAttachableNodeInstance(rootModule, 'Root modules is not a node')\n if (rootNode) {\n this.logger.debug(`rootNode: ${rootNode.id}`)\n this.downResolver.addResolver(rootNode as unknown as ModuleResolverInstance)\n return [rootNode]\n }\n return []\n }\n}\n","import { 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","import_assert","import_exists","import_object","import_module_model","import_assert","import_forget","import_bridge_abstract","import_module_model","import_bridge_abstract","HttpModuleProxy","AbstractModuleProxy","constructor","params","createCount","Math","floor","console","log","proxyQueryHandler","query","payloads","archiving","isAllowedArchivingQuery","schema","forget","storeToArchivists","result","querySender","sendBridgeQuery","moduleAddress","flat","HttpBridgeModuleResolver","AbstractBridgeModuleResolver","querySender","params","moduleUrl","address","URL","rootUrl","resolveHandler","id","options","parentResult","length","idParts","split","untransformedFirstPart","assertEx","shift","firstPart","ResolveHelper","transformModuleIdentifier","moduleAddress","isAddress","remainderParts","join","account","Account","randomSync","additionalSigners","archiving","config","schema","ModuleConfigSchema","host","onQuerySendFinished","onQuerySendStarted","logger","debug","proxy","HttpModuleProxy","state","configSchema","find","payload","ConfigSchema","setConfig","start","wrapped","wrapModuleWithType","instance","asModuleInstance","upResolver","add","downResolver","result","resolve","HttpBridgeBase","AbstractBridge","_axios","_discoverRootsMutex","Mutex","_failureTimeCache","LRUCache","max","maxFailureCacheSize","_querySemaphore","_resolver","axios","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","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","AxiosJson","configSchemas","HttpBridgeConfigSchema","defaultConfigSchema","creatableModule","HttpBridge","HttpBridgeBase","_app","_exposedModules","_server","app","express","use","json","post","req","res","handlePost","exposeChild","mod","options","maxDepth","console","log","address","id","assertEx","config","host","push","WeakRef","children","publicChildren","logger","toJsonString","map","child","exposedChildren","Promise","all","required","flat","filter","exists","allExposed","exposedMod","exposeHandler","resolveAddressToInstanceUp","Error","exposedHandler","ref","deref","startHandler","startHttpServer","stopHandler","_timeout","stopHttpServer","unexposeHandler","find","callLocalModule","query","payloads","allPayloads","body","isQueryBoundWitness","payload","route","then","result","status","error","envelope","data","catch","ex","message","listen","port","server","close","undefined","creatableModule"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/HttpBridgeConfig.ts","../../src/HttpBridgeFull.ts","../../src/HttpBridgeBase.ts","../../src/HttpBridgeModuleResolver.ts","../../src/ModuleProxy/ModuleProxy.ts"],"sourcesContent":["export * from './HttpBridgeConfig'\nexport * from './HttpBridgeFull'\n","import { EmptyObject } from '@xylabs/object'\nimport { BridgeConfig } from '@xyo-network/bridge-model'\n\nexport type HttpBridgeConfigSchema = 'network.xyo.bridge.http.config'\nexport const HttpBridgeConfigSchema: HttpBridgeConfigSchema = 'network.xyo.bridge.http.config'\n\nexport type HttpBridgeConfig<TConfig extends EmptyObject = EmptyObject, TSchema extends string | void = void> = BridgeConfig<\n {\n client?: BridgeConfig['client'] & {\n url: string\n }\n failureRetryTime?: number\n failureTimeCacheMax?: number\n host?: {\n port: number\n }\n maxConnections?: number\n maxPayloadSizeWarning?: number\n /** @deprecated use client.url instead */\n nodeUrl?: string\n schema: HttpBridgeConfigSchema\n } & TConfig,\n TSchema extends string ? TSchema : HttpBridgeConfigSchema\n>\n","import { Server } from 'node:http'\n\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { ApiEnvelopeSuccess } from '@xyo-network/api-models'\nimport { isQueryBoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BridgeExposeOptions, BridgeParams, BridgeUnexposeOptions } from '@xyo-network/bridge-model'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleQueryResult, resolveAddressToInstanceUp } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport express, { Application, Request, Response } from 'express'\n\nimport { HttpBridgeBase } from './HttpBridgeBase'\nimport { HttpBridgeConfig } from './HttpBridgeConfig'\n\nexport interface HttpBridgeParams extends BridgeParams<AnyConfigSchema<HttpBridgeConfig>> {}\n\n@creatableModule()\nexport class HttpBridge<TParams extends HttpBridgeParams> extends HttpBridgeBase<TParams> {\n protected _app?: Application\n protected _exposedModules: WeakRef<ModuleInstance>[] = []\n protected _server?: Server\n\n get app() {\n this._app =\n this._app ??\n (() => {\n const app = express()\n app.use(express.json())\n\n app.post<Payload[]>('/', (req, res) => {\n this.handlePost(req, res)\n })\n\n return app\n })()\n return this._app\n }\n\n async exposeChild(mod: ModuleInstance, options?: BridgeExposeOptions | undefined): Promise<ModuleInstance[]> {\n const { maxDepth = 5 } = options ?? {}\n console.log(`exposeChild: ${mod.address} ${mod?.id} ${maxDepth}`)\n assertEx(this.config.host, () => 'Not configured as a host')\n this._exposedModules.push(new WeakRef(mod))\n const children = maxDepth > 0 ? (await mod.publicChildren?.()) ?? [] : []\n this.logger.log(`childrenToExpose [${mod.id}][${mod.address}]: ${toJsonString(children.map((child) => child.id))}`)\n const exposedChildren = (await Promise.all(children.map((child) => this.exposeChild(child, { maxDepth: maxDepth - 1, required: false }))))\n .flat()\n .filter(exists)\n const allExposed = [mod, ...exposedChildren]\n\n for (const exposedMod of allExposed) this.logger?.log(`exposed: ${exposedMod.address} [${mod.id}]`)\n\n return allExposed\n }\n\n override async exposeHandler(address: Address, options?: BridgeExposeOptions | undefined): Promise<ModuleInstance[]> {\n const { required = true } = options ?? {}\n const mod = await resolveAddressToInstanceUp(this, address)\n console.log(`exposeHandler: ${address} ${mod?.id}`)\n if (required && !mod) {\n throw new Error(`Unable to find required module: ${address}`)\n }\n if (mod) {\n return this.exposeChild(mod, options)\n }\n return []\n }\n\n override exposedHandler(): Address[] {\n return this._exposedModules.map((ref) => ref.deref()?.address).filter(exists)\n }\n\n override async startHandler(): Promise<boolean> {\n return (await super.startHandler()) && this.startHttpServer()\n }\n\n override async stopHandler(_timeout?: number | undefined): Promise<boolean> {\n return (await super.stopHandler()) && this.stopHttpServer()\n }\n\n override async unexposeHandler(address: Address, options?: BridgeUnexposeOptions | undefined): Promise<ModuleInstance[]> {\n const { maxDepth = 2, required = true } = options ?? {}\n assertEx(this.config.host, () => 'Not configured as a host')\n const mod = this._exposedModules.find((ref) => ref.deref()?.address === address)?.deref()\n assertEx(!required || mod, () => `Module not exposed: ${address}`)\n this._exposedModules = this._exposedModules.filter((ref) => ref.deref()?.address !== address)\n if (mod) {\n const children = maxDepth > 0 ? (await mod.publicChildren?.()) ?? [] : []\n const exposedChildren = (\n await Promise.all(children.map((child) => this.unexposeHandler(child.address, { maxDepth: maxDepth - 1, required: false })))\n )\n .flat()\n .filter(exists)\n return [mod, ...exposedChildren]\n }\n return []\n }\n\n protected async callLocalModule(address: Address, query: QueryBoundWitness, payloads: Payload[]): Promise<ModuleQueryResult | null> {\n const mod = this._exposedModules.find((ref) => ref.deref()?.address === address)?.deref()\n if (mod) {\n return await mod.query(query, payloads)\n }\n return null\n }\n\n protected handlePost(req: Request<Payload[]>, res: Response) {\n const allPayloads = req.body as Payload[]\n const query = allPayloads.find(isQueryBoundWitness) as QueryBoundWitness\n const payloads = allPayloads.filter((payload) => !isQueryBoundWitness(payload))\n this.callLocalModule(req.route, query, payloads)\n .then((result) => {\n if (result === null) {\n res.status(404).json({ error: 'Module not found' })\n } else {\n const envelope = {\n data: result,\n } as ApiEnvelopeSuccess<ModuleQueryResult>\n res.json(envelope)\n }\n })\n .catch((ex) => {\n res.status(500).json({ error: (ex as Error).message })\n })\n }\n\n protected startHttpServer() {\n if (this.config.host) {\n assertEx(!this._server, () => 'Server already started')\n this._server = this.app.listen(this.config.host?.port ?? 3030)\n }\n return true\n }\n\n protected stopHttpServer() {\n const server = assertEx(this._server, () => 'Server not started')\n server.close()\n this._server = undefined\n return true\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { AxiosError, AxiosJson } from '@xylabs/axios'\nimport { exists } from '@xylabs/exists'\nimport { forget } from '@xylabs/forget'\nimport { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport { ApiEnvelope } from '@xyo-network/api-models'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractBridge } from '@xyo-network/bridge-abstract'\nimport {\n BridgeExposeOptions,\n BridgeModule,\n BridgeParams,\n BridgeUnexposeOptions,\n QuerySendFinishedEventArgs,\n QuerySendStartedEventArgs,\n} from '@xyo-network/bridge-model'\nimport { ModuleManifestPayload, NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport {\n AnyConfigSchema,\n creatableModule,\n ModuleIdentifier,\n ModuleInstance,\n ModuleQueryResult,\n ModuleStateQuery,\n ModuleStateQuerySchema,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { asAttachableNodeInstance } from '@xyo-network/node-model'\nimport { isPayloadOfSchemaType, Payload, Schema, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex, Semaphore } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport { HttpBridgeConfig, HttpBridgeConfigSchema } from './HttpBridgeConfig'\nimport { HttpBridgeModuleResolver } from './HttpBridgeModuleResolver'\nimport { BridgeQuerySender } from './ModuleProxy'\n\nexport interface HttpBridgeParams extends BridgeParams<AnyConfigSchema<HttpBridgeConfig>> {\n axios?: AxiosJson\n}\n\n@creatableModule()\nexport class HttpBridgeBase<TParams extends HttpBridgeParams> extends AbstractBridge<TParams> implements BridgeModule<TParams>, BridgeQuerySender {\n static axios = new AxiosJson()\n static override readonly configSchemas: Schema[] = [...super.configSchemas, HttpBridgeConfigSchema]\n static override readonly defaultConfigSchema: Schema = HttpBridgeConfigSchema\n static defaultFailureRetryTime = 1000 * 60\n static defaultMaxConnections = 4\n static defaultMaxPayloadSizeWarning = 256 * 256\n static maxFailureCacheSize = 1000\n\n private _axios?: AxiosJson\n private _discoverRootsMutex = new Mutex()\n private _failureTimeCache = new LRUCache<Address, number>({ max: HttpBridgeBase.maxFailureCacheSize })\n private _querySemaphore?: Semaphore\n private _resolver?: HttpBridgeModuleResolver\n\n get axios() {\n this._axios = this._axios ?? this.params.axios ?? HttpBridgeBase.axios\n return this._axios\n }\n\n get clientUrl() {\n // eslint-disable-next-line deprecation/deprecation\n return assertEx(this.config.client?.url ?? this.config.nodeUrl, () => 'No Url Set')\n }\n\n get failureRetryTime() {\n return this.config.failureRetryTime ?? HttpBridgeBase.defaultFailureRetryTime\n }\n\n get maxConnections() {\n return this.config.maxConnections ?? HttpBridgeBase.defaultMaxConnections\n }\n\n get maxPayloadSizeWarning() {\n return this.config.maxPayloadSizeWarning ?? HttpBridgeBase.defaultMaxPayloadSizeWarning\n }\n\n get querySemaphore() {\n this._querySemaphore = this._querySemaphore ?? new Semaphore(this.maxConnections)\n return this._querySemaphore\n }\n\n override get resolver() {\n this._resolver =\n this._resolver ??\n new HttpBridgeModuleResolver({\n additionalSigners: this.additionalSigners,\n archiving: { ...this.archiving, resolveArchivists: this.resolveArchivingArchivists.bind(this) },\n bridge: this,\n onQuerySendFinished: (args: Omit<QuerySendFinishedEventArgs, 'module'>) => {\n forget(this.emit('querySendFinished', { module: this, ...args }))\n },\n onQuerySendStarted: (args: Omit<QuerySendStartedEventArgs, 'module'>) => {\n forget(this.emit('querySendStarted', { module: this, ...args }))\n },\n querySender: this,\n root: this,\n rootUrl: this.clientUrl,\n wrapperAccount: this.account,\n })\n return this._resolver\n }\n\n async connect(id: ModuleIdentifier): Promise<Address | undefined> {\n const transformedId = assertEx(await ResolveHelper.transformModuleIdentifier(id), () => `Unable to transform module identifier: ${id}`)\n //check if already connected\n const existingInstance = await this.resolve<ModuleInstance>(transformedId)\n if (existingInstance) {\n return existingInstance.address\n }\n\n //use the resolver to create the proxy instance\n const [instance] = await this.resolver.resolveHandler<ModuleInstance>(id)\n return this.connectInstance(instance)\n }\n\n async disconnect(id: ModuleIdentifier): Promise<Address | undefined> {\n const transformedId = assertEx(await ResolveHelper.transformModuleIdentifier(id), () => `Unable to transform module identifier: ${id}`)\n const instance = await this.resolve<ModuleInstance>(transformedId)\n if (instance) {\n this.downResolver.remove(instance.address)\n return instance.address\n }\n }\n\n override exposeHandler(_id: string, _options?: BridgeExposeOptions | undefined): Promisable<ModuleInstance[]> {\n throw new Error('Unsupported')\n }\n\n override exposedHandler(): Promisable<Address[]> {\n throw new Error('Unsupported')\n }\n\n async getRoots(force?: boolean): Promise<ModuleInstance[]> {\n return await this._discoverRootsMutex.runExclusive(async () => {\n if (this._roots === undefined || force) {\n const state = await this.getRootState()\n this.logger?.debug(`HttpBridge:discoverRoots.state [${state?.length}]`)\n const nodeManifest = state?.find(isPayloadOfSchemaType<WithMeta<NodeManifestPayload>>(NodeManifestPayloadSchema))\n if (nodeManifest) {\n const mods = (await this.resolveRootNode(nodeManifest)).filter(exists)\n this.logger?.debug(`HttpBridge:discoverRoots [${mods.length}]`)\n this._roots = mods\n } else {\n this._roots = []\n }\n }\n return this._roots\n })\n }\n\n moduleUrl(address: Address) {\n return new URL(address, this.clientUrl)\n }\n\n async sendBridgeQuery<TOut extends Payload = Payload, TQuery extends QueryBoundWitness = QueryBoundWitness, TIn extends Payload = Payload>(\n targetAddress: Address,\n query: TQuery,\n payloads?: TIn[],\n ): Promise<ModuleQueryResult<TOut>> {\n const lastFailureTime = this._failureTimeCache.get(targetAddress)\n if (lastFailureTime !== undefined) {\n const now = Date.now()\n const timeSincePreviousFailure = now - lastFailureTime\n if (timeSincePreviousFailure > this.failureRetryTime) {\n throw new Error(`target module failed recently [${targetAddress}] [${timeSincePreviousFailure}ms ago]`)\n }\n this._failureTimeCache.delete(targetAddress)\n }\n try {\n await this.querySemaphore.acquire()\n const payloadSize = JSON.stringify([query, payloads]).length\n if (payloadSize > this.maxPayloadSizeWarning) {\n this.logger?.warn(\n `Large targetQuery being sent: ${payloadSize} bytes [${this.address}][${this.moduleAddress}] [${query.schema}] [${payloads?.length}]`,\n )\n }\n const moduleUrl = this.moduleUrl(targetAddress).href\n const result = await this.axios.post<ApiEnvelope<ModuleQueryResult<TOut>>>(moduleUrl, [query, payloads])\n if (result.status === 404) {\n throw `target module not found [${moduleUrl}] [${result.status}]`\n }\n if (result.status >= 400) {\n this.logger?.error(`targetQuery failed [${moduleUrl}]`)\n throw `targetQuery failed [${moduleUrl}] [${result.status}]`\n }\n return result.data?.data\n } catch (ex) {\n const error = ex as AxiosError\n this.logger?.error(`Error: ${toJsonString(error)}`)\n throw error\n } finally {\n this.querySemaphore.release()\n }\n }\n\n override unexposeHandler(_id: string, _options?: BridgeUnexposeOptions | undefined): Promisable<ModuleInstance[]> {\n throw new Error('Unsupported')\n }\n\n protected connectInstance(instance?: ModuleInstance): Address | undefined {\n if (instance) {\n this.downResolver.add(instance)\n /*if (maxDepth > 0) {\n const node = asNodeInstance(instance)\n if (node) {\n const state = await node.state()\n const children = (state?.filter(isPayloadOfSchemaType<AddressPayload>(AddressSchema)).map((s) => s.address) ?? []).filter(\n (a) => a !== instance.address,\n )\n await Promise.all(children.map((child) => this.connect(child, maxDepth - 1)))\n }\n }*/\n this.logger?.log(`Connect: ${instance.id}`)\n return instance.address\n }\n }\n\n private async getRootState() {\n const queryPayload: ModuleStateQuery = { schema: ModuleStateQuerySchema }\n const boundQuery = await this.bindQuery(queryPayload)\n try {\n const response = await this.axios.post<ApiEnvelope<ModuleQueryResult>>(this.clientUrl.toString(), boundQuery)\n if (response.status === 404) {\n return []\n }\n const [, payloads, errors] = response.data.data\n if (errors.length > 0) {\n throw new Error(`getRootState failed: ${JSON.stringify(errors, null, 2)}`)\n }\n return payloads\n } catch (ex) {\n const error = ex as Error\n this.logger?.warn(`Unable to connect to remote node: ${error.message} [${this.clientUrl}]`)\n }\n }\n\n private async resolveRootNode(nodeManifest: ModuleManifestPayload): Promise<ModuleInstance[]> {\n const rootModule = assertEx(\n (\n await this.resolver.resolveHandler(\n assertEx(nodeManifest.status?.address, () => 'Root has no address'),\n undefined,\n { manifest: nodeManifest },\n )\n ).at(0),\n () => `Root not found [${nodeManifest.status?.address}]`,\n )\n assertEx(rootModule.constructor.name !== 'HttpModuleProxy', () => 'rootModule is not a Wrapper')\n const rootNode = asAttachableNodeInstance(rootModule, 'Root modules is not a node')\n if (rootNode) {\n this.logger.debug(`rootNode: ${rootNode.id}`)\n this.connectInstance(rootNode)\n return [rootNode]\n }\n return []\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { Account } from '@xyo-network/account'\nimport { AbstractBridgeModuleResolver, BridgeModuleResolverParams, wrapModuleWithType } from '@xyo-network/bridge-abstract'\nimport { ConfigPayload, ConfigSchema } from '@xyo-network/config-payload-plugin'\nimport {\n asModuleInstance,\n ModuleConfig,\n ModuleConfigSchema,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { Mutex } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport { BridgeQuerySender, HttpModuleProxy, HttpModuleProxyParams } from './ModuleProxy'\n\nexport interface HttpBridgeModuleResolverParams extends BridgeModuleResolverParams {\n querySender: BridgeQuerySender\n rootUrl: string\n}\n\nexport class HttpBridgeModuleResolver<\n T extends HttpBridgeModuleResolverParams = HttpBridgeModuleResolverParams,\n> extends AbstractBridgeModuleResolver<T> {\n protected _resolvedCache = new LRUCache<Address, ModuleInstance>({ max: 1000 })\n protected _resolvedCacheMutex = new Mutex()\n\n get querySender() {\n return this.params.querySender\n }\n\n moduleUrl(address: Address) {\n return new URL(address, this.params.rootUrl)\n }\n\n override async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n params?: Partial<HttpModuleProxyParams>,\n ): Promise<T[]> {\n const parentResult = await super.resolveHandler(id, options)\n if (parentResult.length > 0) {\n return parentResult\n }\n const idParts = id.split(':')\n const untransformedFirstPart = assertEx(idParts.shift(), () => 'Missing module identifier')\n const firstPart = await ResolveHelper.transformModuleIdentifier(untransformedFirstPart)\n assertEx(isAddress(firstPart), () => `Invalid module address: ${firstPart}`)\n const remainderParts = idParts.join(':')\n const instance: T = await this._resolvedCacheMutex.runExclusive(async () => {\n const cachedMod = this._resolvedCache.get(firstPart as Address)\n if (cachedMod) {\n const result = idParts.length <= 0 ? cachedMod : cachedMod.resolve(remainderParts, { ...options, maxDepth: (options?.maxDepth ?? 5) - 1 })\n return result as T\n }\n const account = Account.randomSync()\n const finalParams: HttpModuleProxyParams = {\n account,\n archiving: this.params.archiving,\n config: { schema: ModuleConfigSchema },\n host: this,\n moduleAddress: firstPart as Address,\n onQuerySendFinished: this.params.onQuerySendFinished,\n onQuerySendStarted: this.params.onQuerySendStarted,\n querySender: this.params.querySender,\n ...params,\n }\n\n this.logger?.debug(`creating HttpProxy [${firstPart}] ${id}`)\n console.log(`creating HttpProxy [${firstPart}] ${id}`)\n\n const proxy = new HttpModuleProxy<T, HttpModuleProxyParams>(finalParams)\n\n const state = await proxy.state()\n if (state) {\n const configSchema = (state.find((payload) => payload.schema === ConfigSchema) as ConfigPayload | undefined)?.config\n const config = assertEx(\n state.find((payload) => payload.schema === configSchema),\n () => 'Unable to locate config',\n ) as ModuleConfig\n proxy.setConfig(config)\n }\n\n console.log(`created HttpProxy [${firstPart}] ${proxy.id}`)\n\n await proxy.start?.()\n const wrapped = wrapModuleWithType(proxy, account) as unknown as T\n assertEx(asModuleInstance<T>(wrapped, {}), () => `Failed to asModuleInstance [${id}]`)\n this._resolvedCache.set(wrapped.address, wrapped)\n return wrapped as ModuleInstance as T\n })\n const result = remainderParts.length > 0 ? await instance.resolve(remainderParts, options) : instance\n return result ? [result] : []\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { forget } from '@xylabs/forget'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractModuleProxy, ModuleProxyParams } from '@xyo-network/bridge-abstract'\nimport {\n AttachableModuleInstance,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleQueryResult,\n ResolveHelper,\n ResolveHelperConfig,\n} from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport interface BridgeQuerySender {\n sendBridgeQuery: <TOut extends Payload = Payload, TQuery extends QueryBoundWitness = QueryBoundWitness, TIn extends Payload = Payload>(\n targetAddress: Address,\n query: TQuery,\n payloads?: TIn[],\n ) => Promise<ModuleQueryResult<TOut>>\n}\n\nexport type HttpModuleProxyParams = ModuleProxyParams & {\n querySender: BridgeQuerySender\n}\n\nexport class HttpModuleProxy<\n TWrappedModule extends ModuleInstance = ModuleInstance,\n TParams extends Omit<HttpModuleProxyParams, 'config'> & { config: TWrappedModule['config'] } = Omit<HttpModuleProxyParams, 'config'> & {\n config: TWrappedModule['config']\n },\n >\n extends AbstractModuleProxy<TWrappedModule, TParams>\n implements AttachableModuleInstance<TParams, TWrappedModule['eventData']>\n{\n static createCount = 0\n\n constructor(params: TParams) {\n HttpModuleProxy.createCount = HttpModuleProxy.createCount + 1\n if (Math.floor(HttpModuleProxy.createCount / 10) === HttpModuleProxy.createCount / 10) {\n console.log(`HttpModuleProxy.createCount: ${HttpModuleProxy.createCount}`)\n }\n super(params)\n }\n\n async proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads: Payload[] = []): Promise<ModuleQueryResult> {\n if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {\n forget(this.storeToArchivists([query, ...(payloads ?? [])]))\n }\n const result = await this.params.querySender.sendBridgeQuery(this.params.moduleAddress, query, payloads)\n if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {\n forget(this.storeToArchivists(result.flat()))\n }\n return result\n }\n\n override async publicChildren(): Promise<ModuleInstance[]> {\n return (\n await Promise.all(\n Object.values(await this.childAddressMap())\n .filter(exists)\n .map((address) => this.resolve(address)),\n )\n ).filter(exists)\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n /** @deprecated use '*' if trying to resolve all */\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n const config: ResolveHelperConfig = {\n address: this.address,\n dead: this.dead,\n downResolver: this.downResolver,\n logger: this.logger,\n module: this,\n transformers: this.moduleIdentifierTransformers,\n upResolver: this.upResolver,\n }\n if (idOrFilter === '*') {\n return (await this.publicChildren()) as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const parts = idOrFilter.split(':')\n const first = assertEx(parts.shift(), () => 'Missing first')\n const remainingPath = parts.join(':')\n const address =\n isAddress(first) ? first\n : this.id === first ? this.address\n : this.childAddressByName(first)\n if (!address) return undefined\n const firstInstance = (await this.params.host.resolve(address)) as ModuleInstance | undefined\n return (remainingPath ? await firstInstance?.resolve(remainingPath) : firstInstance) as T | undefined\n }\n case 'object': {\n return (await ResolveHelper.resolve(config, idOrFilter, options)).filter((mod) => mod.address !== this.address)\n }\n default: {\n return (await ResolveHelper.resolve(config, idOrFilter, options)).filter((mod) => mod.address !== this.address)\n }\n }\n }\n}\n"],"mappings":"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","names":["HttpBridgeConfigSchema","import_assert","import_exists","import_object","import_module_model","import_assert","import_exists","import_forget","import_bridge_abstract","import_module_model","import_async_mutex","import_lru_cache","import_assert","import_hex","import_bridge_abstract","import_module_model","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","module","transformers","moduleIdentifierTransformers","upResolver","parts","split","first","assertEx","shift","remainingPath","join","isAddress","id","childAddressByName","undefined","firstInstance","host","ResolveHelper","mod","HttpBridgeModuleResolver","AbstractBridgeModuleResolver","_resolvedCache","LRUCache","max","_resolvedCacheMutex","Mutex","querySender","params","moduleUrl","address","URL","rootUrl","resolveHandler","id","options","parentResult","length","idParts","split","untransformedFirstPart","assertEx","shift","firstPart","ResolveHelper","transformModuleIdentifier","isAddress","remainderParts","join","instance","runExclusive","cachedMod","get","result","resolve","maxDepth","account","Account","randomSync","finalParams","archiving","config","schema","ModuleConfigSchema","host","moduleAddress","onQuerySendFinished","onQuerySendStarted","logger","debug","console","log","proxy","HttpModuleProxy","state","configSchema","find","payload","ConfigSchema","setConfig","start","wrapped","wrapModuleWithType","asModuleInstance","set","HttpBridgeBase","AbstractBridge","_axios","_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","module","onQuerySendStarted","querySender","root","rootUrl","wrapperAccount","account","connect","id","transformedId","ResolveHelper","transformModuleIdentifier","existingInstance","resolve","address","instance","resolveHandler","connectInstance","disconnect","downResolver","remove","exposeHandler","_id","_options","Error","exposedHandler","getRoots","force","runExclusive","_roots","undefined","state","getRootState","logger","debug","length","nodeManifest","find","isPayloadOfSchemaType","NodeManifestPayloadSchema","mods","resolveRootNode","filter","exists","moduleUrl","URL","sendBridgeQuery","targetAddress","query","payloads","lastFailureTime","get","now","Date","timeSincePreviousFailure","delete","acquire","payloadSize","JSON","stringify","warn","moduleAddress","schema","href","result","post","status","error","data","ex","toJsonString","release","unexposeHandler","add","log","queryPayload","ModuleStateQuerySchema","boundQuery","bindQuery","response","toString","errors","message","rootModule","manifest","at","constructor","name","rootNode","asAttachableNodeInstance","AxiosJson","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"]}
|