@xyo-network/bridge-http 2.106.0 → 2.107.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/HttpBridgeBase.d.cts.map +1 -1
- package/dist/browser/HttpBridgeBase.d.mts.map +1 -1
- package/dist/browser/HttpBridgeBase.d.ts.map +1 -1
- package/dist/browser/HttpBridgeConfig.d.cts +0 -1
- package/dist/browser/HttpBridgeConfig.d.cts.map +1 -1
- package/dist/browser/HttpBridgeConfig.d.mts +0 -1
- package/dist/browser/HttpBridgeConfig.d.mts.map +1 -1
- package/dist/browser/HttpBridgeConfig.d.ts +0 -1
- package/dist/browser/HttpBridgeConfig.d.ts.map +1 -1
- package/dist/browser/HttpBridgeFull.d.cts +0 -1
- package/dist/browser/HttpBridgeFull.d.cts.map +1 -1
- package/dist/browser/HttpBridgeFull.d.mts +0 -1
- package/dist/browser/HttpBridgeFull.d.mts.map +1 -1
- package/dist/browser/HttpBridgeFull.d.ts +0 -1
- package/dist/browser/HttpBridgeFull.d.ts.map +1 -1
- package/dist/browser/HttpBridgeModuleResolver.d.cts +6 -6
- package/dist/browser/HttpBridgeModuleResolver.d.mts +6 -6
- package/dist/browser/HttpBridgeModuleResolver.d.ts +6 -6
- package/dist/browser/ModuleProxy/ModuleProxy.d.cts +0 -2
- package/dist/browser/ModuleProxy/ModuleProxy.d.cts.map +1 -1
- package/dist/browser/ModuleProxy/ModuleProxy.d.mts +0 -2
- package/dist/browser/ModuleProxy/ModuleProxy.d.mts.map +1 -1
- package/dist/browser/ModuleProxy/ModuleProxy.d.ts +0 -2
- package/dist/browser/ModuleProxy/ModuleProxy.d.ts.map +1 -1
- package/dist/browser/index-browser.cjs +1 -413
- package/dist/browser/index-browser.cjs.map +1 -1
- package/dist/browser/index-browser.js +1 -392
- package/dist/browser/index-browser.js.map +1 -1
- package/dist/neutral/HttpBridgeBase.d.cts.map +1 -1
- package/dist/neutral/HttpBridgeBase.d.mts.map +1 -1
- package/dist/neutral/HttpBridgeBase.d.ts.map +1 -1
- package/dist/neutral/HttpBridgeConfig.d.cts +0 -1
- package/dist/neutral/HttpBridgeConfig.d.cts.map +1 -1
- package/dist/neutral/HttpBridgeConfig.d.mts +0 -1
- package/dist/neutral/HttpBridgeConfig.d.mts.map +1 -1
- package/dist/neutral/HttpBridgeConfig.d.ts +0 -1
- package/dist/neutral/HttpBridgeConfig.d.ts.map +1 -1
- package/dist/neutral/HttpBridgeFull.d.cts +0 -1
- package/dist/neutral/HttpBridgeFull.d.cts.map +1 -1
- package/dist/neutral/HttpBridgeFull.d.mts +0 -1
- package/dist/neutral/HttpBridgeFull.d.mts.map +1 -1
- package/dist/neutral/HttpBridgeFull.d.ts +0 -1
- package/dist/neutral/HttpBridgeFull.d.ts.map +1 -1
- package/dist/neutral/HttpBridgeModuleResolver.d.cts +6 -6
- package/dist/neutral/HttpBridgeModuleResolver.d.mts +6 -6
- package/dist/neutral/HttpBridgeModuleResolver.d.ts +6 -6
- package/dist/neutral/ModuleProxy/ModuleProxy.d.cts +0 -2
- package/dist/neutral/ModuleProxy/ModuleProxy.d.cts.map +1 -1
- package/dist/neutral/ModuleProxy/ModuleProxy.d.mts +0 -2
- package/dist/neutral/ModuleProxy/ModuleProxy.d.mts.map +1 -1
- package/dist/neutral/ModuleProxy/ModuleProxy.d.ts +0 -2
- package/dist/neutral/ModuleProxy/ModuleProxy.d.ts.map +1 -1
- package/dist/neutral/index-browser.cjs +1 -413
- package/dist/neutral/index-browser.cjs.map +1 -1
- package/dist/neutral/index-browser.js +1 -392
- package/dist/neutral/index-browser.js.map +1 -1
- package/dist/node/HttpBridgeBase.d.cts.map +1 -1
- package/dist/node/HttpBridgeBase.d.mts.map +1 -1
- package/dist/node/HttpBridgeBase.d.ts.map +1 -1
- package/dist/node/HttpBridgeConfig.d.cts +0 -1
- package/dist/node/HttpBridgeConfig.d.cts.map +1 -1
- package/dist/node/HttpBridgeConfig.d.mts +0 -1
- package/dist/node/HttpBridgeConfig.d.mts.map +1 -1
- package/dist/node/HttpBridgeConfig.d.ts +0 -1
- package/dist/node/HttpBridgeConfig.d.ts.map +1 -1
- package/dist/node/HttpBridgeFull.d.cts +0 -1
- package/dist/node/HttpBridgeFull.d.cts.map +1 -1
- package/dist/node/HttpBridgeFull.d.mts +0 -1
- package/dist/node/HttpBridgeFull.d.mts.map +1 -1
- package/dist/node/HttpBridgeFull.d.ts +0 -1
- package/dist/node/HttpBridgeFull.d.ts.map +1 -1
- package/dist/node/HttpBridgeModuleResolver.d.cts +6 -6
- package/dist/node/HttpBridgeModuleResolver.d.mts +6 -6
- package/dist/node/HttpBridgeModuleResolver.d.ts +6 -6
- package/dist/node/ModuleProxy/ModuleProxy.d.cts +0 -2
- package/dist/node/ModuleProxy/ModuleProxy.d.cts.map +1 -1
- package/dist/node/ModuleProxy/ModuleProxy.d.mts +0 -2
- package/dist/node/ModuleProxy/ModuleProxy.d.mts.map +1 -1
- package/dist/node/ModuleProxy/ModuleProxy.d.ts +0 -2
- package/dist/node/ModuleProxy/ModuleProxy.d.ts.map +1 -1
- package/dist/node/index.cjs +1 -571
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +1 -536
- package/dist/node/index.js.map +1 -1
- package/package.json +22 -22
- package/src/HttpBridgeBase.ts +0 -1
package/dist/node/index.js
CHANGED
|
@@ -1,537 +1,2 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
3
|
-
var __reflectGet = Reflect.get;
|
|
4
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
5
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
7
|
-
var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
|
|
8
|
-
|
|
9
|
-
// src/HttpBridgeConfig.ts
|
|
10
|
-
var HttpBridgeConfigSchema = "network.xyo.bridge.http.config";
|
|
11
|
-
|
|
12
|
-
// src/HttpBridgeFull.ts
|
|
13
|
-
import { assertEx as assertEx4 } from "@xylabs/assert";
|
|
14
|
-
import { exists as exists3 } from "@xylabs/exists";
|
|
15
|
-
import { toJsonString as toJsonString2 } from "@xylabs/object";
|
|
16
|
-
import { isQueryBoundWitness } from "@xyo-network/boundwitness-model";
|
|
17
|
-
import { creatableModule as creatableModule2, resolveAddressToInstanceUp } from "@xyo-network/module-model";
|
|
18
|
-
import express from "express";
|
|
19
|
-
|
|
20
|
-
// src/HttpBridgeBase.ts
|
|
21
|
-
import { assertEx as assertEx3 } from "@xylabs/assert";
|
|
22
|
-
import { AxiosJson } from "@xylabs/axios";
|
|
23
|
-
import { exists as exists2 } from "@xylabs/exists";
|
|
24
|
-
import { forget as forget2 } from "@xylabs/forget";
|
|
25
|
-
import { toJsonString } from "@xylabs/object";
|
|
26
|
-
import { AbstractBridge } from "@xyo-network/bridge-abstract";
|
|
27
|
-
import { NodeManifestPayloadSchema } from "@xyo-network/manifest-model";
|
|
28
|
-
import { creatableModule, ModuleStateQuerySchema } from "@xyo-network/module-model";
|
|
29
|
-
import { asAttachableNodeInstance } from "@xyo-network/node-model";
|
|
30
|
-
import { isPayloadOfSchemaType } from "@xyo-network/payload-model";
|
|
31
|
-
import { Mutex as Mutex2, Semaphore } from "async-mutex";
|
|
32
|
-
import { LRUCache as LRUCache2 } from "lru-cache";
|
|
33
|
-
|
|
34
|
-
// src/HttpBridgeModuleResolver.ts
|
|
35
|
-
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
36
|
-
import { isAddress as isAddress2 } from "@xylabs/hex";
|
|
37
|
-
import { Account } from "@xyo-network/account";
|
|
38
|
-
import { AbstractBridgeModuleResolver, wrapModuleWithType } from "@xyo-network/bridge-abstract";
|
|
39
|
-
import { ConfigSchema } from "@xyo-network/config-payload-plugin";
|
|
40
|
-
import { asModuleInstance, isModuleInstance, ModuleConfigSchema, ResolveHelper as ResolveHelper2 } from "@xyo-network/module-model";
|
|
41
|
-
import { Mutex } from "async-mutex";
|
|
42
|
-
import { LRUCache } from "lru-cache";
|
|
43
|
-
|
|
44
|
-
// src/ModuleProxy/ModuleProxy.ts
|
|
45
|
-
import { assertEx } from "@xylabs/assert";
|
|
46
|
-
import { exists } from "@xylabs/exists";
|
|
47
|
-
import { forget } from "@xylabs/forget";
|
|
48
|
-
import { isAddress } from "@xylabs/hex";
|
|
49
|
-
import { AbstractModuleProxy } from "@xyo-network/bridge-abstract";
|
|
50
|
-
import { ResolveHelper } from "@xyo-network/module-model";
|
|
51
|
-
var _HttpModuleProxy = class _HttpModuleProxy extends AbstractModuleProxy {
|
|
52
|
-
constructor(params) {
|
|
53
|
-
_HttpModuleProxy.createCount = _HttpModuleProxy.createCount + 1;
|
|
54
|
-
if (Math.floor(_HttpModuleProxy.createCount / 10) === _HttpModuleProxy.createCount / 10) {
|
|
55
|
-
console.log(`HttpModuleProxy.createCount: ${_HttpModuleProxy.createCount}`);
|
|
56
|
-
}
|
|
57
|
-
super(params);
|
|
58
|
-
}
|
|
59
|
-
async proxyQueryHandler(query, payloads = []) {
|
|
60
|
-
if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {
|
|
61
|
-
forget(this.storeToArchivists([
|
|
62
|
-
query,
|
|
63
|
-
...payloads ?? []
|
|
64
|
-
]));
|
|
65
|
-
}
|
|
66
|
-
const result = await this.params.querySender.sendBridgeQuery(this.params.moduleAddress, query, payloads);
|
|
67
|
-
if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {
|
|
68
|
-
forget(this.storeToArchivists(result.flat()));
|
|
69
|
-
}
|
|
70
|
-
return result;
|
|
71
|
-
}
|
|
72
|
-
async publicChildren() {
|
|
73
|
-
return (await Promise.all(Object.values(await this.childAddressMap()).filter(exists).map((address) => this.resolve(address)))).filter(exists);
|
|
74
|
-
}
|
|
75
|
-
async resolve(idOrFilter = "*", options = {}) {
|
|
76
|
-
const config = {
|
|
77
|
-
address: this.address,
|
|
78
|
-
dead: this.dead,
|
|
79
|
-
downResolver: this.downResolver,
|
|
80
|
-
logger: this.logger,
|
|
81
|
-
module: this,
|
|
82
|
-
transformers: this.moduleIdentifierTransformers,
|
|
83
|
-
upResolver: this.upResolver
|
|
84
|
-
};
|
|
85
|
-
if (idOrFilter === "*") {
|
|
86
|
-
return await this.publicChildren();
|
|
87
|
-
}
|
|
88
|
-
switch (typeof idOrFilter) {
|
|
89
|
-
case "string": {
|
|
90
|
-
const parts = idOrFilter.split(":");
|
|
91
|
-
const first = assertEx(parts.shift(), () => "Missing first");
|
|
92
|
-
const remainingPath = parts.join(":");
|
|
93
|
-
const address = isAddress(first) ? first : this.id === first ? this.address : this.childAddressByName(first);
|
|
94
|
-
if (!address) return void 0;
|
|
95
|
-
const firstInstance = await this.params.host.resolve(address);
|
|
96
|
-
return remainingPath ? await (firstInstance == null ? void 0 : firstInstance.resolve(remainingPath)) : firstInstance;
|
|
97
|
-
}
|
|
98
|
-
case "object": {
|
|
99
|
-
return (await ResolveHelper.resolve(config, idOrFilter, options)).filter((mod) => mod.address !== this.address);
|
|
100
|
-
}
|
|
101
|
-
default: {
|
|
102
|
-
return (await ResolveHelper.resolve(config, idOrFilter, options)).filter((mod) => mod.address !== this.address);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
__name(_HttpModuleProxy, "HttpModuleProxy");
|
|
108
|
-
__publicField(_HttpModuleProxy, "createCount", 0);
|
|
109
|
-
var HttpModuleProxy = _HttpModuleProxy;
|
|
110
|
-
|
|
111
|
-
// src/HttpBridgeModuleResolver.ts
|
|
112
|
-
var NotFoundModule = {
|
|
113
|
-
notFound: true
|
|
114
|
-
};
|
|
115
|
-
var _HttpBridgeModuleResolver = class _HttpBridgeModuleResolver extends AbstractBridgeModuleResolver {
|
|
116
|
-
_resolvedCache = new LRUCache({
|
|
117
|
-
max: 1e3
|
|
118
|
-
});
|
|
119
|
-
_resolvedCacheMutex = new Mutex();
|
|
120
|
-
get querySender() {
|
|
121
|
-
return this.params.querySender;
|
|
122
|
-
}
|
|
123
|
-
moduleUrl(address) {
|
|
124
|
-
return new URL(address, this.params.rootUrl);
|
|
125
|
-
}
|
|
126
|
-
async resolveHandler(id, options, params) {
|
|
127
|
-
const parentResult = await super.resolveHandler(id, options);
|
|
128
|
-
if (parentResult.length > 0) {
|
|
129
|
-
return parentResult;
|
|
130
|
-
}
|
|
131
|
-
const idParts = id.split(":");
|
|
132
|
-
const untransformedFirstPart = assertEx2(idParts.shift(), () => "Missing module identifier");
|
|
133
|
-
const firstPart = await ResolveHelper2.transformModuleIdentifier(untransformedFirstPart);
|
|
134
|
-
assertEx2(isAddress2(firstPart), () => `Invalid module address: ${firstPart}`);
|
|
135
|
-
const remainderParts = idParts.join(":");
|
|
136
|
-
const instance = await this._resolvedCacheMutex.runExclusive(async () => {
|
|
137
|
-
var _a, _b, _c, _d;
|
|
138
|
-
const cachedMod = this._resolvedCache.get(firstPart);
|
|
139
|
-
if (cachedMod) {
|
|
140
|
-
if (isModuleInstance(cachedMod)) {
|
|
141
|
-
const result2 = idParts.length <= 0 ? cachedMod : cachedMod.resolve(remainderParts, {
|
|
142
|
-
...options,
|
|
143
|
-
maxDepth: ((options == null ? void 0 : options.maxDepth) ?? 5) - 1
|
|
144
|
-
});
|
|
145
|
-
return result2;
|
|
146
|
-
} else {
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
const account = Account.randomSync();
|
|
151
|
-
const finalParams = {
|
|
152
|
-
account,
|
|
153
|
-
archiving: this.params.archiving,
|
|
154
|
-
config: {
|
|
155
|
-
schema: ModuleConfigSchema
|
|
156
|
-
},
|
|
157
|
-
host: this,
|
|
158
|
-
moduleAddress: firstPart,
|
|
159
|
-
onQuerySendFinished: this.params.onQuerySendFinished,
|
|
160
|
-
onQuerySendStarted: this.params.onQuerySendStarted,
|
|
161
|
-
querySender: this.params.querySender,
|
|
162
|
-
...params
|
|
163
|
-
};
|
|
164
|
-
(_a = this.logger) == null ? void 0 : _a.debug(`creating HttpProxy [${firstPart}] ${id}`);
|
|
165
|
-
console.log(`creating HttpProxy [${firstPart}] ${id}`);
|
|
166
|
-
const proxy = new HttpModuleProxy(finalParams);
|
|
167
|
-
let state;
|
|
168
|
-
try {
|
|
169
|
-
state = await proxy.state();
|
|
170
|
-
} catch (ex) {
|
|
171
|
-
const error = ex;
|
|
172
|
-
(_b = this.logger) == null ? void 0 : _b.log(error.message);
|
|
173
|
-
}
|
|
174
|
-
if (!state) {
|
|
175
|
-
this._resolvedCache.set(firstPart, NotFoundModule);
|
|
176
|
-
return;
|
|
177
|
-
}
|
|
178
|
-
const configSchema = (_c = state.find((payload) => payload.schema === ConfigSchema)) == null ? void 0 : _c.config;
|
|
179
|
-
const config = assertEx2(state.find((payload) => payload.schema === configSchema), () => "Unable to locate config");
|
|
180
|
-
proxy.setConfig(config);
|
|
181
|
-
console.log(`created HttpProxy [${firstPart}] ${proxy.id}`);
|
|
182
|
-
await ((_d = proxy.start) == null ? void 0 : _d.call(proxy));
|
|
183
|
-
const wrapped = wrapModuleWithType(proxy, account);
|
|
184
|
-
assertEx2(asModuleInstance(wrapped, {}), () => `Failed to asModuleInstance [${id}]`);
|
|
185
|
-
this._resolvedCache.set(wrapped.address, wrapped);
|
|
186
|
-
return wrapped;
|
|
187
|
-
});
|
|
188
|
-
const result = remainderParts.length > 0 ? await (instance == null ? void 0 : instance.resolve(remainderParts, options)) : instance;
|
|
189
|
-
return result ? [
|
|
190
|
-
result
|
|
191
|
-
] : [];
|
|
192
|
-
}
|
|
193
|
-
};
|
|
194
|
-
__name(_HttpBridgeModuleResolver, "HttpBridgeModuleResolver");
|
|
195
|
-
var HttpBridgeModuleResolver = _HttpBridgeModuleResolver;
|
|
196
|
-
|
|
197
|
-
// src/HttpBridgeBase.ts
|
|
198
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
199
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
200
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
201
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
202
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
203
|
-
}
|
|
204
|
-
__name(_ts_decorate, "_ts_decorate");
|
|
205
|
-
var _HttpBridgeBase = class _HttpBridgeBase extends AbstractBridge {
|
|
206
|
-
_axios;
|
|
207
|
-
_discoverRootsMutex = new Mutex2();
|
|
208
|
-
_failureTimeCache = new LRUCache2({
|
|
209
|
-
max: _HttpBridgeBase.maxFailureCacheSize
|
|
210
|
-
});
|
|
211
|
-
_querySemaphore;
|
|
212
|
-
_resolver;
|
|
213
|
-
get axios() {
|
|
214
|
-
this._axios = this._axios ?? this.params.axios ?? _HttpBridgeBase.axios;
|
|
215
|
-
return this._axios;
|
|
216
|
-
}
|
|
217
|
-
get clientUrl() {
|
|
218
|
-
var _a;
|
|
219
|
-
return assertEx3(((_a = this.config.client) == null ? void 0 : _a.url) ?? this.config.nodeUrl, () => "No Url Set");
|
|
220
|
-
}
|
|
221
|
-
get failureRetryTime() {
|
|
222
|
-
return this.config.failureRetryTime ?? _HttpBridgeBase.defaultFailureRetryTime;
|
|
223
|
-
}
|
|
224
|
-
get maxConnections() {
|
|
225
|
-
return this.config.maxConnections ?? _HttpBridgeBase.defaultMaxConnections;
|
|
226
|
-
}
|
|
227
|
-
get maxPayloadSizeWarning() {
|
|
228
|
-
return this.config.maxPayloadSizeWarning ?? _HttpBridgeBase.defaultMaxPayloadSizeWarning;
|
|
229
|
-
}
|
|
230
|
-
get querySemaphore() {
|
|
231
|
-
this._querySemaphore = this._querySemaphore ?? new Semaphore(this.maxConnections);
|
|
232
|
-
return this._querySemaphore;
|
|
233
|
-
}
|
|
234
|
-
get resolver() {
|
|
235
|
-
this._resolver = this._resolver ?? new HttpBridgeModuleResolver({
|
|
236
|
-
additionalSigners: this.additionalSigners,
|
|
237
|
-
archiving: {
|
|
238
|
-
...this.archiving,
|
|
239
|
-
resolveArchivists: this.resolveArchivingArchivists.bind(this)
|
|
240
|
-
},
|
|
241
|
-
bridge: this,
|
|
242
|
-
onQuerySendFinished: /* @__PURE__ */ __name((args) => {
|
|
243
|
-
forget2(this.emit("querySendFinished", {
|
|
244
|
-
module: this,
|
|
245
|
-
...args
|
|
246
|
-
}));
|
|
247
|
-
}, "onQuerySendFinished"),
|
|
248
|
-
onQuerySendStarted: /* @__PURE__ */ __name((args) => {
|
|
249
|
-
forget2(this.emit("querySendStarted", {
|
|
250
|
-
module: this,
|
|
251
|
-
...args
|
|
252
|
-
}));
|
|
253
|
-
}, "onQuerySendStarted"),
|
|
254
|
-
querySender: this,
|
|
255
|
-
root: this,
|
|
256
|
-
rootUrl: this.clientUrl,
|
|
257
|
-
wrapperAccount: this.account
|
|
258
|
-
});
|
|
259
|
-
return this._resolver;
|
|
260
|
-
}
|
|
261
|
-
exposeHandler(_id, _options) {
|
|
262
|
-
throw new Error("Unsupported");
|
|
263
|
-
}
|
|
264
|
-
exposedHandler() {
|
|
265
|
-
throw new Error("Unsupported");
|
|
266
|
-
}
|
|
267
|
-
async getRoots(force) {
|
|
268
|
-
return await this._discoverRootsMutex.runExclusive(async () => {
|
|
269
|
-
var _a, _b;
|
|
270
|
-
if (this._roots === void 0 || force) {
|
|
271
|
-
const state = await this.getRootState();
|
|
272
|
-
(_a = this.logger) == null ? void 0 : _a.debug(`HttpBridge:discoverRoots.state [${state == null ? void 0 : state.length}]`);
|
|
273
|
-
const nodeManifest = state == null ? void 0 : state.find(isPayloadOfSchemaType(NodeManifestPayloadSchema));
|
|
274
|
-
if (nodeManifest) {
|
|
275
|
-
const mods = (await this.resolveRootNode(nodeManifest)).filter(exists2);
|
|
276
|
-
(_b = this.logger) == null ? void 0 : _b.debug(`HttpBridge:discoverRoots [${mods.length}]`);
|
|
277
|
-
this._roots = mods;
|
|
278
|
-
} else {
|
|
279
|
-
this._roots = [];
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
return this._roots;
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
|
-
moduleUrl(address) {
|
|
286
|
-
return new URL(address, this.clientUrl);
|
|
287
|
-
}
|
|
288
|
-
async sendBridgeQuery(targetAddress, query, payloads) {
|
|
289
|
-
var _a, _b, _c, _d;
|
|
290
|
-
const lastFailureTime = this._failureTimeCache.get(targetAddress);
|
|
291
|
-
if (lastFailureTime !== void 0) {
|
|
292
|
-
const now = Date.now();
|
|
293
|
-
const timeSincePreviousFailure = now - lastFailureTime;
|
|
294
|
-
if (timeSincePreviousFailure > this.failureRetryTime) {
|
|
295
|
-
throw new Error(`target module failed recently [${targetAddress}] [${timeSincePreviousFailure}ms ago]`);
|
|
296
|
-
}
|
|
297
|
-
this._failureTimeCache.delete(targetAddress);
|
|
298
|
-
}
|
|
299
|
-
try {
|
|
300
|
-
await this.querySemaphore.acquire();
|
|
301
|
-
const payloadSize = JSON.stringify([
|
|
302
|
-
query,
|
|
303
|
-
payloads
|
|
304
|
-
]).length;
|
|
305
|
-
if (payloadSize > this.maxPayloadSizeWarning) {
|
|
306
|
-
(_a = this.logger) == null ? void 0 : _a.warn(`Large targetQuery being sent: ${payloadSize} bytes [${this.address}][${this.moduleAddress}] [${query.schema}] [${payloads == null ? void 0 : payloads.length}]`);
|
|
307
|
-
}
|
|
308
|
-
const moduleUrl = this.moduleUrl(targetAddress).href;
|
|
309
|
-
const result = await this.axios.post(moduleUrl, [
|
|
310
|
-
query,
|
|
311
|
-
payloads
|
|
312
|
-
]);
|
|
313
|
-
if (result.status === 404) {
|
|
314
|
-
throw `target module not found [${moduleUrl}] [${result.status}]`;
|
|
315
|
-
}
|
|
316
|
-
if (result.status >= 400) {
|
|
317
|
-
(_b = this.logger) == null ? void 0 : _b.error(`targetQuery failed [${moduleUrl}]`);
|
|
318
|
-
throw `targetQuery failed [${moduleUrl}] [${result.status}]`;
|
|
319
|
-
}
|
|
320
|
-
return (_c = result.data) == null ? void 0 : _c.data;
|
|
321
|
-
} catch (ex) {
|
|
322
|
-
const error = ex;
|
|
323
|
-
(_d = this.logger) == null ? void 0 : _d.error(`Error: ${toJsonString(error)}`);
|
|
324
|
-
throw error;
|
|
325
|
-
} finally {
|
|
326
|
-
this.querySemaphore.release();
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
unexposeHandler(_id, _options) {
|
|
330
|
-
throw new Error("Unsupported");
|
|
331
|
-
}
|
|
332
|
-
async getRootState() {
|
|
333
|
-
var _a;
|
|
334
|
-
const queryPayload = {
|
|
335
|
-
schema: ModuleStateQuerySchema
|
|
336
|
-
};
|
|
337
|
-
const boundQuery = await this.bindQuery(queryPayload);
|
|
338
|
-
try {
|
|
339
|
-
const response = await this.axios.post(this.clientUrl.toString(), boundQuery);
|
|
340
|
-
if (response.status === 404) {
|
|
341
|
-
return [];
|
|
342
|
-
}
|
|
343
|
-
const [, payloads, errors] = response.data.data;
|
|
344
|
-
if (errors.length > 0) {
|
|
345
|
-
throw new Error(`getRootState failed: ${JSON.stringify(errors, null, 2)}`);
|
|
346
|
-
}
|
|
347
|
-
return payloads;
|
|
348
|
-
} catch (ex) {
|
|
349
|
-
const error = ex;
|
|
350
|
-
(_a = this.logger) == null ? void 0 : _a.warn(`Unable to connect to remote node: ${error.message} [${this.clientUrl}]`);
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
async resolveRootNode(nodeManifest) {
|
|
354
|
-
var _a;
|
|
355
|
-
const rootModule = assertEx3((await this.resolver.resolveHandler(assertEx3((_a = nodeManifest.status) == null ? void 0 : _a.address, () => "Root has no address"), void 0, {
|
|
356
|
-
manifest: nodeManifest
|
|
357
|
-
})).at(0), () => {
|
|
358
|
-
var _a2;
|
|
359
|
-
return `Root not found [${(_a2 = nodeManifest.status) == null ? void 0 : _a2.address}]`;
|
|
360
|
-
});
|
|
361
|
-
assertEx3(rootModule.constructor.name !== "HttpModuleProxy", () => "rootModule is not a Wrapper");
|
|
362
|
-
const rootNode = asAttachableNodeInstance(rootModule, "Root modules is not a node");
|
|
363
|
-
if (rootNode) {
|
|
364
|
-
this.logger.debug(`rootNode: ${rootNode.id}`);
|
|
365
|
-
this.downResolver.addResolver(rootNode);
|
|
366
|
-
return [
|
|
367
|
-
rootNode
|
|
368
|
-
];
|
|
369
|
-
}
|
|
370
|
-
return [];
|
|
371
|
-
}
|
|
372
|
-
};
|
|
373
|
-
__name(_HttpBridgeBase, "HttpBridgeBase");
|
|
374
|
-
__publicField(_HttpBridgeBase, "axios", new AxiosJson());
|
|
375
|
-
__publicField(_HttpBridgeBase, "configSchemas", [
|
|
376
|
-
...__superGet(_HttpBridgeBase, _HttpBridgeBase, "configSchemas"),
|
|
377
|
-
HttpBridgeConfigSchema
|
|
378
|
-
]);
|
|
379
|
-
__publicField(_HttpBridgeBase, "defaultConfigSchema", HttpBridgeConfigSchema);
|
|
380
|
-
__publicField(_HttpBridgeBase, "defaultFailureRetryTime", 1e3 * 60);
|
|
381
|
-
__publicField(_HttpBridgeBase, "defaultMaxConnections", 4);
|
|
382
|
-
__publicField(_HttpBridgeBase, "defaultMaxPayloadSizeWarning", 256 * 256);
|
|
383
|
-
__publicField(_HttpBridgeBase, "maxFailureCacheSize", 1e3);
|
|
384
|
-
var HttpBridgeBase = _HttpBridgeBase;
|
|
385
|
-
HttpBridgeBase = _ts_decorate([
|
|
386
|
-
creatableModule()
|
|
387
|
-
], HttpBridgeBase);
|
|
388
|
-
|
|
389
|
-
// src/HttpBridgeFull.ts
|
|
390
|
-
function _ts_decorate2(decorators, target, key, desc) {
|
|
391
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
392
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
393
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
394
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
395
|
-
}
|
|
396
|
-
__name(_ts_decorate2, "_ts_decorate");
|
|
397
|
-
var _HttpBridge = class _HttpBridge extends HttpBridgeBase {
|
|
398
|
-
_app;
|
|
399
|
-
_exposedModules = [];
|
|
400
|
-
_server;
|
|
401
|
-
get app() {
|
|
402
|
-
this._app = this._app ?? (() => {
|
|
403
|
-
const app = express();
|
|
404
|
-
app.use(express.json());
|
|
405
|
-
app.post("/", (req, res) => {
|
|
406
|
-
this.handlePost(req, res);
|
|
407
|
-
});
|
|
408
|
-
return app;
|
|
409
|
-
})();
|
|
410
|
-
return this._app;
|
|
411
|
-
}
|
|
412
|
-
async exposeChild(mod, options) {
|
|
413
|
-
var _a, _b;
|
|
414
|
-
const { maxDepth = 5 } = options ?? {};
|
|
415
|
-
console.log(`exposeChild: ${mod.address} ${mod == null ? void 0 : mod.id} ${maxDepth}`);
|
|
416
|
-
assertEx4(this.config.host, () => "Not configured as a host");
|
|
417
|
-
this._exposedModules.push(new WeakRef(mod));
|
|
418
|
-
const children = maxDepth > 0 ? await ((_a = mod.publicChildren) == null ? void 0 : _a.call(mod)) ?? [] : [];
|
|
419
|
-
this.logger.log(`childrenToExpose [${mod.id}][${mod.address}]: ${toJsonString2(children.map((child) => child.id))}`);
|
|
420
|
-
const exposedChildren = (await Promise.all(children.map((child) => this.exposeChild(child, {
|
|
421
|
-
maxDepth: maxDepth - 1,
|
|
422
|
-
required: false
|
|
423
|
-
})))).flat().filter(exists3);
|
|
424
|
-
const allExposed = [
|
|
425
|
-
mod,
|
|
426
|
-
...exposedChildren
|
|
427
|
-
];
|
|
428
|
-
for (const exposedMod of allExposed) (_b = this.logger) == null ? void 0 : _b.log(`exposed: ${exposedMod.address} [${mod.id}]`);
|
|
429
|
-
return allExposed;
|
|
430
|
-
}
|
|
431
|
-
async exposeHandler(address, options) {
|
|
432
|
-
const { required = true } = options ?? {};
|
|
433
|
-
const mod = await resolveAddressToInstanceUp(this, address);
|
|
434
|
-
console.log(`exposeHandler: ${address} ${mod == null ? void 0 : mod.id}`);
|
|
435
|
-
if (required && !mod) {
|
|
436
|
-
throw new Error(`Unable to find required module: ${address}`);
|
|
437
|
-
}
|
|
438
|
-
if (mod) {
|
|
439
|
-
return this.exposeChild(mod, options);
|
|
440
|
-
}
|
|
441
|
-
return [];
|
|
442
|
-
}
|
|
443
|
-
exposedHandler() {
|
|
444
|
-
return this._exposedModules.map((ref) => {
|
|
445
|
-
var _a;
|
|
446
|
-
return (_a = ref.deref()) == null ? void 0 : _a.address;
|
|
447
|
-
}).filter(exists3);
|
|
448
|
-
}
|
|
449
|
-
async startHandler() {
|
|
450
|
-
return await super.startHandler() && this.startHttpServer();
|
|
451
|
-
}
|
|
452
|
-
async stopHandler(_timeout) {
|
|
453
|
-
return await super.stopHandler() && this.stopHttpServer();
|
|
454
|
-
}
|
|
455
|
-
async unexposeHandler(address, options) {
|
|
456
|
-
var _a, _b;
|
|
457
|
-
const { maxDepth = 2, required = true } = options ?? {};
|
|
458
|
-
assertEx4(this.config.host, () => "Not configured as a host");
|
|
459
|
-
const mod = (_a = this._exposedModules.find((ref) => {
|
|
460
|
-
var _a2;
|
|
461
|
-
return ((_a2 = ref.deref()) == null ? void 0 : _a2.address) === address;
|
|
462
|
-
})) == null ? void 0 : _a.deref();
|
|
463
|
-
assertEx4(!required || mod, () => `Module not exposed: ${address}`);
|
|
464
|
-
this._exposedModules = this._exposedModules.filter((ref) => {
|
|
465
|
-
var _a2;
|
|
466
|
-
return ((_a2 = ref.deref()) == null ? void 0 : _a2.address) !== address;
|
|
467
|
-
});
|
|
468
|
-
if (mod) {
|
|
469
|
-
const children = maxDepth > 0 ? await ((_b = mod.publicChildren) == null ? void 0 : _b.call(mod)) ?? [] : [];
|
|
470
|
-
const exposedChildren = (await Promise.all(children.map((child) => this.unexposeHandler(child.address, {
|
|
471
|
-
maxDepth: maxDepth - 1,
|
|
472
|
-
required: false
|
|
473
|
-
})))).flat().filter(exists3);
|
|
474
|
-
return [
|
|
475
|
-
mod,
|
|
476
|
-
...exposedChildren
|
|
477
|
-
];
|
|
478
|
-
}
|
|
479
|
-
return [];
|
|
480
|
-
}
|
|
481
|
-
async callLocalModule(address, query, payloads) {
|
|
482
|
-
var _a;
|
|
483
|
-
const mod = (_a = this._exposedModules.find((ref) => {
|
|
484
|
-
var _a2;
|
|
485
|
-
return ((_a2 = ref.deref()) == null ? void 0 : _a2.address) === address;
|
|
486
|
-
})) == null ? void 0 : _a.deref();
|
|
487
|
-
if (mod) {
|
|
488
|
-
return await mod.query(query, payloads);
|
|
489
|
-
}
|
|
490
|
-
return null;
|
|
491
|
-
}
|
|
492
|
-
handlePost(req, res) {
|
|
493
|
-
const allPayloads = req.body;
|
|
494
|
-
const query = allPayloads.find(isQueryBoundWitness);
|
|
495
|
-
const payloads = allPayloads.filter((payload) => !isQueryBoundWitness(payload));
|
|
496
|
-
this.callLocalModule(req.route, query, payloads).then((result) => {
|
|
497
|
-
if (result === null) {
|
|
498
|
-
res.status(404).json({
|
|
499
|
-
error: "Module not found"
|
|
500
|
-
});
|
|
501
|
-
} else {
|
|
502
|
-
const envelope = {
|
|
503
|
-
data: result
|
|
504
|
-
};
|
|
505
|
-
res.json(envelope);
|
|
506
|
-
}
|
|
507
|
-
}).catch((ex) => {
|
|
508
|
-
res.status(500).json({
|
|
509
|
-
error: ex.message
|
|
510
|
-
});
|
|
511
|
-
});
|
|
512
|
-
}
|
|
513
|
-
startHttpServer() {
|
|
514
|
-
var _a;
|
|
515
|
-
if (this.config.host) {
|
|
516
|
-
assertEx4(!this._server, () => "Server already started");
|
|
517
|
-
this._server = this.app.listen(((_a = this.config.host) == null ? void 0 : _a.port) ?? 3030);
|
|
518
|
-
}
|
|
519
|
-
return true;
|
|
520
|
-
}
|
|
521
|
-
stopHttpServer() {
|
|
522
|
-
const server = assertEx4(this._server, () => "Server not started");
|
|
523
|
-
server.close();
|
|
524
|
-
this._server = void 0;
|
|
525
|
-
return true;
|
|
526
|
-
}
|
|
527
|
-
};
|
|
528
|
-
__name(_HttpBridge, "HttpBridge");
|
|
529
|
-
var HttpBridge = _HttpBridge;
|
|
530
|
-
HttpBridge = _ts_decorate2([
|
|
531
|
-
creatableModule2()
|
|
532
|
-
], HttpBridge);
|
|
533
|
-
export {
|
|
534
|
-
HttpBridge,
|
|
535
|
-
HttpBridgeConfigSchema
|
|
536
|
-
};
|
|
1
|
+
var j=Object.defineProperty;var V=Object.getPrototypeOf;var X=Reflect.get;var Y=(d,e,t)=>e in d?j(d,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):d[e]=t;var u=(d,e)=>j(d,"name",{value:e,configurable:!0});var m=(d,e,t)=>Y(d,typeof e!="symbol"?e+"":e,t);var N=(d,e,t)=>X(V(d),t,e);var P="network.xyo.bridge.http.config";import{assertEx as v}from"@xylabs/assert";import{exists as U}from"@xylabs/exists";import{toJsonString as be}from"@xylabs/object";import{isQueryBoundWitness as I}from"@xyo-network/boundwitness-model";import{creatableModule as Pe,resolveAddressToInstanceUp as _e}from"@xyo-network/module-model";import L from"express";import{assertEx as R}from"@xylabs/assert";import{AxiosJson as fe}from"@xylabs/axios";import{exists as me}from"@xylabs/exists";import{forget as z}from"@xylabs/forget";import{toJsonString as pe}from"@xylabs/object";import{AbstractBridge as ge}from"@xyo-network/bridge-abstract";import{NodeManifestPayloadSchema as xe}from"@xyo-network/manifest-model";import{creatableModule as ye,ModuleStateQuerySchema as ve}from"@xyo-network/module-model";import{asAttachableNodeInstance as we}from"@xyo-network/node-model";import{isPayloadOfSchemaType as Se}from"@xyo-network/payload-model";import{Mutex as Ce,Semaphore as $e}from"async-mutex";import{LRUCache as Me}from"lru-cache";import{assertEx as $}from"@xylabs/assert";import{isAddress as ee}from"@xylabs/hex";import{Account as te}from"@xyo-network/account";import{AbstractBridgeModuleResolver as re,wrapModuleWithType as se}from"@xyo-network/bridge-abstract";import{ConfigSchema as oe}from"@xyo-network/config-payload-plugin";import{asModuleInstance as ie,isModuleInstance as ne,ModuleConfigSchema as ae,ResolveHelper as le}from"@xyo-network/module-model";import{Mutex as de}from"async-mutex";import{LRUCache as ce}from"lru-cache";import{assertEx as Z}from"@xylabs/assert";import{exists as F}from"@xylabs/exists";import{forget as D}from"@xylabs/forget";import{isAddress as k}from"@xylabs/hex";import{AbstractModuleProxy as B}from"@xyo-network/bridge-abstract";import{ResolveHelper as W}from"@xyo-network/module-model";var p=class p extends B{constructor(e){p.createCount=p.createCount+1,Math.floor(p.createCount/10)===p.createCount/10&&console.log(`HttpModuleProxy.createCount: ${p.createCount}`),super(e)}async proxyQueryHandler(e,t=[]){this.archiving&&this.isAllowedArchivingQuery(e.schema)&&D(this.storeToArchivists([e,...t??[]]));let o=await this.params.querySender.sendBridgeQuery(this.params.moduleAddress,e,t);return this.archiving&&this.isAllowedArchivingQuery(e.schema)&&D(this.storeToArchivists(o.flat())),o}async publicChildren(){return(await Promise.all(Object.values(await this.childAddressMap()).filter(F).map(e=>this.resolve(e)))).filter(F)}async resolve(e="*",t={}){let o={address:this.address,dead:this.dead,downResolver:this.downResolver,logger:this.logger,module:this,transformers:this.moduleIdentifierTransformers,upResolver:this.upResolver};if(e==="*")return await this.publicChildren();switch(typeof e){case"string":{let r=e.split(":"),s=Z(r.shift(),()=>"Missing first"),i=r.join(":"),n=k(s)?s:this.id===s?this.address:this.childAddressByName(s);if(!n)return;let l=await this.params.host.resolve(n);return i?await(l==null?void 0:l.resolve(i)):l}case"object":return(await W.resolve(o,e,t)).filter(r=>r.address!==this.address);default:return(await W.resolve(o,e,t)).filter(r=>r.address!==this.address)}}};u(p,"HttpModuleProxy"),m(p,"createCount",0);var C=p;var he={notFound:!0},_=class _ extends re{_resolvedCache=new ce({max:1e3});_resolvedCacheMutex=new de;get querySender(){return this.params.querySender}moduleUrl(e){return new URL(e,this.params.rootUrl)}async resolveHandler(e,t,o){let r=await super.resolveHandler(e,t);if(r.length>0)return r;let s=e.split(":"),i=$(s.shift(),()=>"Missing module identifier"),n=await le.transformModuleIdentifier(i);$(ee(n),()=>`Invalid module address: ${n}`);let l=s.join(":"),a=await this._resolvedCacheMutex.runExclusive(async()=>{var Q,H,T,E;let f=this._resolvedCache.get(n);if(f)return ne(f)?s.length<=0?f:f.resolve(l,{...t,maxDepth:((t==null?void 0:t.maxDepth)??5)-1}):void 0;let q=te.randomSync(),O={account:q,archiving:this.params.archiving,config:{schema:ae},host:this,moduleAddress:n,onQuerySendFinished:this.params.onQuerySendFinished,onQuerySendStarted:this.params.onQuerySendStarted,querySender:this.params.querySender,...o};(Q=this.logger)==null||Q.debug(`creating HttpProxy [${n}] ${e}`),console.log(`creating HttpProxy [${n}] ${e}`);let g=new C(O),w;try{w=await g.state()}catch(x){let K=x;(H=this.logger)==null||H.log(K.message)}if(!w){this._resolvedCache.set(n,he);return}let J=(T=w.find(x=>x.schema===oe))==null?void 0:T.config,G=$(w.find(x=>x.schema===J),()=>"Unable to locate config");g.setConfig(G),console.log(`created HttpProxy [${n}] ${g.id}`),await((E=g.start)==null?void 0:E.call(g));let S=se(g,q);return $(ie(S,{}),()=>`Failed to asModuleInstance [${e}]`),this._resolvedCache.set(S.address,S),S}),h=l.length>0?await(a==null?void 0:a.resolve(l,t)):a;return h?[h]:[]}};u(_,"HttpBridgeModuleResolver");var M=_;function ue(d,e,t,o){var r=arguments.length,s=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(d,e,t,o);else for(var n=d.length-1;n>=0;n--)(i=d[n])&&(s=(r<3?i(s):r>3?i(e,t,s):i(e,t))||s);return r>3&&s&&Object.defineProperty(e,t,s),s}u(ue,"_ts_decorate");var c=class c extends ge{_axios;_discoverRootsMutex=new Ce;_failureTimeCache=new Me({max:c.maxFailureCacheSize});_querySemaphore;_resolver;get axios(){return this._axios=this._axios??this.params.axios??c.axios,this._axios}get clientUrl(){var e;return R(((e=this.config.client)==null?void 0:e.url)??this.config.nodeUrl,()=>"No Url Set")}get failureRetryTime(){return this.config.failureRetryTime??c.defaultFailureRetryTime}get maxConnections(){return this.config.maxConnections??c.defaultMaxConnections}get maxPayloadSizeWarning(){return this.config.maxPayloadSizeWarning??c.defaultMaxPayloadSizeWarning}get querySemaphore(){return this._querySemaphore=this._querySemaphore??new $e(this.maxConnections),this._querySemaphore}get resolver(){return this._resolver=this._resolver??new M({additionalSigners:this.additionalSigners,archiving:{...this.archiving,resolveArchivists:this.resolveArchivingArchivists.bind(this)},bridge:this,onQuerySendFinished:u(e=>{z(this.emit("querySendFinished",{module:this,...e}))},"onQuerySendFinished"),onQuerySendStarted:u(e=>{z(this.emit("querySendStarted",{module:this,...e}))},"onQuerySendStarted"),querySender:this,root:this,rootUrl:this.clientUrl,wrapperAccount:this.account}),this._resolver}exposeHandler(e,t){throw new Error("Unsupported")}exposedHandler(){throw new Error("Unsupported")}async getRoots(e){return await this._discoverRootsMutex.runExclusive(async()=>{var t,o;if(this._roots===void 0||e){let r=await this.getRootState();(t=this.logger)==null||t.debug(`HttpBridge:discoverRoots.state [${r==null?void 0:r.length}]`);let s=r==null?void 0:r.find(Se(xe));if(s){let i=(await this.resolveRootNode(s)).filter(me);(o=this.logger)==null||o.debug(`HttpBridge:discoverRoots [${i.length}]`),this._roots=i}else this._roots=[]}return this._roots})}moduleUrl(e){return new URL(e,this.clientUrl)}async sendBridgeQuery(e,t,o){var s,i,n,l;let r=this._failureTimeCache.get(e);if(r!==void 0){let h=Date.now()-r;if(h>this.failureRetryTime)throw new Error(`target module failed recently [${e}] [${h}ms ago]`);this._failureTimeCache.delete(e)}try{await this.querySemaphore.acquire();let a=JSON.stringify([t,o]).length;a>this.maxPayloadSizeWarning&&((s=this.logger)==null||s.warn(`Large targetQuery being sent: ${a} bytes [${this.address}][${this.moduleAddress}] [${t.schema}] [${o==null?void 0:o.length}]`));let h=this.moduleUrl(e).href,f=await this.axios.post(h,[t,o]);if(f.status===404)throw`target module not found [${h}] [${f.status}]`;if(f.status>=400)throw(i=this.logger)==null||i.error(`targetQuery failed [${h}]`),`targetQuery failed [${h}] [${f.status}]`;return(n=f.data)==null?void 0:n.data}catch(a){let h=a;throw(l=this.logger)==null||l.error(`Error: ${pe(h)}`),h}finally{this.querySemaphore.release()}}unexposeHandler(e,t){throw new Error("Unsupported")}async getRootState(){var o;let e={schema:ve},t=await this.bindQuery(e);try{let r=await this.axios.post(this.clientUrl.toString(),t);if(r.status===404)return[];let[,s,i]=r.data.data;if(i.length>0)throw new Error(`getRootState failed: ${JSON.stringify(i,null,2)}`);return s}catch(r){let s=r;(o=this.logger)==null||o.warn(`Unable to connect to remote node: ${s.message} [${this.clientUrl}]`)}}async resolveRootNode(e){var r;let t=R((await this.resolver.resolveHandler(R((r=e.status)==null?void 0:r.address,()=>"Root has no address"),void 0,{manifest:e})).at(0),()=>{var s;return`Root not found [${(s=e.status)==null?void 0:s.address}]`});R(t.constructor.name!=="HttpModuleProxy",()=>"rootModule is not a Wrapper");let o=we(t,"Root modules is not a node");return o?(this.logger.debug(`rootNode: ${o.id}`),this.downResolver.addResolver(o),[o]):[]}};u(c,"HttpBridgeBase"),m(c,"axios",new fe),m(c,"configSchemas",[...N(c,c,"configSchemas"),P]),m(c,"defaultConfigSchema",P),m(c,"defaultFailureRetryTime",1e3*60),m(c,"defaultMaxConnections",4),m(c,"defaultMaxPayloadSizeWarning",256*256),m(c,"maxFailureCacheSize",1e3);var y=c;y=ue([ye()],y);function Re(d,e,t,o){var r=arguments.length,s=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(d,e,t,o);else for(var n=d.length-1;n>=0;n--)(i=d[n])&&(s=(r<3?i(s):r>3?i(e,t,s):i(e,t))||s);return r>3&&s&&Object.defineProperty(e,t,s),s}u(Re,"_ts_decorate");var A=class A extends y{_app;_exposedModules=[];_server;get app(){return this._app=this._app??(()=>{let e=L();return e.use(L.json()),e.post("/",(t,o)=>{this.handlePost(t,o)}),e})(),this._app}async exposeChild(e,t){var n,l;let{maxDepth:o=5}=t??{};console.log(`exposeChild: ${e.address} ${e==null?void 0:e.id} ${o}`),v(this.config.host,()=>"Not configured as a host"),this._exposedModules.push(new WeakRef(e));let r=o>0?await((n=e.publicChildren)==null?void 0:n.call(e))??[]:[];this.logger.log(`childrenToExpose [${e.id}][${e.address}]: ${be(r.map(a=>a.id))}`);let s=(await Promise.all(r.map(a=>this.exposeChild(a,{maxDepth:o-1,required:!1})))).flat().filter(U),i=[e,...s];for(let a of i)(l=this.logger)==null||l.log(`exposed: ${a.address} [${e.id}]`);return i}async exposeHandler(e,t){let{required:o=!0}=t??{},r=await _e(this,e);if(console.log(`exposeHandler: ${e} ${r==null?void 0:r.id}`),o&&!r)throw new Error(`Unable to find required module: ${e}`);return r?this.exposeChild(r,t):[]}exposedHandler(){return this._exposedModules.map(e=>{var t;return(t=e.deref())==null?void 0:t.address}).filter(U)}async startHandler(){return await super.startHandler()&&this.startHttpServer()}async stopHandler(e){return await super.stopHandler()&&this.stopHttpServer()}async unexposeHandler(e,t){var i,n;let{maxDepth:o=2,required:r=!0}=t??{};v(this.config.host,()=>"Not configured as a host");let s=(i=this._exposedModules.find(l=>{var a;return((a=l.deref())==null?void 0:a.address)===e}))==null?void 0:i.deref();if(v(!r||s,()=>`Module not exposed: ${e}`),this._exposedModules=this._exposedModules.filter(l=>{var a;return((a=l.deref())==null?void 0:a.address)!==e}),s){let l=o>0?await((n=s.publicChildren)==null?void 0:n.call(s))??[]:[],a=(await Promise.all(l.map(h=>this.unexposeHandler(h.address,{maxDepth:o-1,required:!1})))).flat().filter(U);return[s,...a]}return[]}async callLocalModule(e,t,o){var s;let r=(s=this._exposedModules.find(i=>{var n;return((n=i.deref())==null?void 0:n.address)===e}))==null?void 0:s.deref();return r?await r.query(t,o):null}handlePost(e,t){let o=e.body,r=o.find(I),s=o.filter(i=>!I(i));this.callLocalModule(e.route,r,s).then(i=>{if(i===null)t.status(404).json({error:"Module not found"});else{let n={data:i};t.json(n)}}).catch(i=>{t.status(500).json({error:i.message})})}startHttpServer(){var e;return this.config.host&&(v(!this._server,()=>"Server already started"),this._server=this.app.listen(((e=this.config.host)==null?void 0:e.port)??3030)),!0}stopHttpServer(){return v(this._server,()=>"Server not started").close(),this._server=void 0,!0}};u(A,"HttpBridge");var b=A;b=Re([Pe()],b);export{b as HttpBridge,P as HttpBridgeConfigSchema};
|
|
537
2
|
//# sourceMappingURL=index.js.map
|