@xyo-network/bridge-websocket 2.107.3 → 2.107.5

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.
@@ -1,2 +1,283 @@
1
- var E=Object.defineProperty;var O=Object.getPrototypeOf;var b=Reflect.get;var z=(n,e,r)=>e in n?E(n,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):n[e]=r;var u=(n,e)=>E(n,"name",{value:e,configurable:!0});var l=(n,e,r)=>z(n,typeof e!="symbol"?e+"":e,r);var M=(n,e,r)=>b(O(n),r,e);import{createServer as k}from"node:http";import{assertEx as ee}from"@xylabs/assert";import{creatableModule as re}from"@xyo-network/module-model";import{Server as te}from"socket.io";import{assertEx as V}from"@xylabs/assert";import{AbstractBridge as X}from"@xyo-network/bridge-abstract";import{creatableModule as Y}from"@xyo-network/module-model";import{Semaphore as Z}from"async-mutex";import{LRUCache as B}from"lru-cache";var x="network.xyo.bridge.websocket.config";import{assertEx as d}from"@xylabs/assert";import{isAddress as D}from"@xylabs/hex";import{Account as j}from"@xyo-network/account";import{AbstractBridgeModuleResolver as Q,wrapModuleWithType as _}from"@xyo-network/bridge-abstract";import{ConfigSchema as L}from"@xyo-network/config-payload-plugin";import{asModuleInstance as N,ModuleConfigSchema as G,ResolveHelper as J}from"@xyo-network/module-model";import{AbstractModuleProxy as I}from"@xyo-network/bridge-abstract";var h=class h extends I{constructor(e){h.createCount=h.createCount+1,Math.floor(h.createCount/10)===h.createCount/10&&console.log(`WebsocketModuleProxy.createCount: ${h.createCount}`),super(e)}async proxyQueryHandler(e,r=[]){return await this.params.querySender.sendBridgeQuery(this.params.moduleAddress,e,r)}};u(h,"WebsocketModuleProxy"),l(h,"createCount",0);var y=h;var q=class q extends Q{get querySender(){return this.params.querySender}async resolveHandler(e,r){var P,T;let o=await super.resolveHandler(e,r);if(o)return o;if(e==="*")return[];let s=e.split(":"),t=d(s.shift(),()=>`Invalid module identifier: ${e}`),a=await J.transformModuleIdentifier(t),c=a;d(D(a),()=>`Invalid module address: ${a}`);let R=s.join(":"),$={account:j.randomSync(),config:{schema:G},host:this,moduleAddress:c,querySender:this.querySender};(P=this.logger)==null||P.debug(`creating HttpProxy [${c}] ${e}`);let p=new y($);if(p){let m=await p.state();if(m){let A=(T=m.find(g=>g.schema===L))==null?void 0:T.config,F=d(m.find(g=>g.schema===A),()=>"Unable to locate config");p.setConfig(F)}}await p.start();let C=d(_(p,j.randomSync()),()=>`Failed to wrapModuleWithType [${e}]`),w=d(N(C,{}),()=>`Failed to asModuleInstance [${e}]`);if(p.upResolver.add(w),p.downResolver.add(w),R.length>0){let m=await C.resolve(R,r);return m?[m]:[]}return[w]}};u(q,"WebsocketBridgeModuleResolver");var S=q;function K(n,e,r,o){var s=arguments.length,t=s<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,r):o,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")t=Reflect.decorate(n,e,r,o);else for(var c=n.length-1;c>=0;c--)(a=n[c])&&(t=(s<3?a(t):s>3?a(e,r,t):a(e,r))||t);return s>3&&t&&Object.defineProperty(e,r,t),t}u(K,"_ts_decorate");var i=class i extends X{_failureTimeCache=new B({max:i.maxFailureCacheSize});_querySemaphore;_resolver;get client(){return this.config.client}get failureRetryTime(){var e;return((e=this.client)==null?void 0:e.failureRetryTime)??i.defaultFailureRetryTime}get maxConnections(){var e;return((e=this.client)==null?void 0:e.maxConnections)??i.defaultMaxConnections}get maxPayloadSizeWarning(){var e;return((e=this.client)==null?void 0:e.maxPayloadSizeWarning)??i.defaultMaxPayloadSizeWarning}get querySemaphore(){return this._querySemaphore=this._querySemaphore??new Z(this.maxConnections),this._querySemaphore}get resolver(){return this._resolver=this._resolver??new S({archiving:{...this.archiving,resolveArchivists:this.resolveArchivingArchivists.bind(this)},bridge:this,querySender:this,root:this,wrapperAccount:this.account}),this._resolver}get url(){var e;return V((e=this.config.client)==null?void 0:e.url,()=>"No Url Set")}exposeHandler(e,r){throw new Error("Unsupported")}exposedHandler(){throw new Error("Unsupported")}async getRoots(){return await Promise.resolve([])}async sendBridgeQuery(e,r,o){let s=this._failureTimeCache.get(e);if(s!==void 0){let a=Date.now()-s;if(a>this.failureRetryTime)throw new Error(`target module failed recently [${e}] [${a}ms ago]`);this._failureTimeCache.delete(e)}try{throw await this.querySemaphore.acquire(),new Error("Unsupported")}catch(t){throw t}finally{this.querySemaphore.release()}}unexposeHandler(e,r){throw new Error("Unsupported")}};u(i,"WebsocketClientBridge"),l(i,"configSchemas",[...M(i,i,"configSchemas"),x]),l(i,"defaultConfigSchema",x),l(i,"defaultFailureRetryTime",1e3*60),l(i,"defaultMaxConnections",4),l(i,"defaultMaxPayloadSizeWarning",256*256),l(i,"maxFailureCacheSize",1e3);var f=i;f=K([Y()],f);function W(n,e,r,o){var s=arguments.length,t=s<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,r):o,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")t=Reflect.decorate(n,e,r,o);else for(var c=n.length-1;c>=0;c--)(a=n[c])&&(t=(s<3?a(t):s>3?a(e,r,t):a(e,r))||t);return s>3&&t&&Object.defineProperty(e,r,t),t}u(W,"_ts_decorate");var U={join:"join",query:"query"},oe=8080,H=class H extends f{httpServer;server;get host(){return this.config.host}exposeHandler(e,r){throw new Error("Unsupported")}exposedHandler(){throw new Error("Unsupported")}async startHandler(){return this.host&&this.startServer(),await super.startHandler()}async stopHandler(){return this.host&&this.stopServer(),await super.stopHandler()}startServer(){if(this.httpServer)throw new Error("Http Server already started");if(this.server)throw new Error("Socket Server already started");let e=ee(this.host,()=>"No Host Configured");this.httpServer=k(),this.server=new te(this.httpServer),this.server.on("connection",r=>{r.on(U.join,async o=>{await r.join(o),console.log(`User ${r.id} has connected to module ${o}`)}),r.on(U.query,({address:o,query:s})=>{r.to(o).emit("message",s)})}),this.httpServer.listen(e.port??oe)}stopServer(){var e,r;(e=this.server)==null||e.close(),this.server=void 0,(r=this.httpServer)==null||r.close(),this.httpServer=void 0}};u(H,"WebsocketBridge");var v=H;v=W([re()],v);export{U as BridgeCommands,v as WebsocketBridge,x as WebsocketBridgeConfigSchema};
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/Bridge.ts
10
+ import { createServer as createHttpServer } from "node:http";
11
+ import { assertEx as assertEx3 } from "@xylabs/assert";
12
+ import { creatableModule as creatableModule2 } from "@xyo-network/module-model";
13
+ import { Server } from "socket.io";
14
+
15
+ // src/ClientBridge.ts
16
+ import { assertEx as assertEx2 } from "@xylabs/assert";
17
+ import { AbstractBridge } from "@xyo-network/bridge-abstract";
18
+ import { creatableModule } from "@xyo-network/module-model";
19
+ import { Semaphore } from "async-mutex";
20
+ import { LRUCache } from "lru-cache";
21
+
22
+ // src/Config.ts
23
+ var WebsocketBridgeConfigSchema = "network.xyo.bridge.websocket.config";
24
+
25
+ // src/WebsocketBridgeModuleResolver.ts
26
+ import { assertEx } from "@xylabs/assert";
27
+ import { isAddress } from "@xylabs/hex";
28
+ import { Account } from "@xyo-network/account";
29
+ import { AbstractBridgeModuleResolver, wrapModuleWithType } from "@xyo-network/bridge-abstract";
30
+ import { ConfigSchema } from "@xyo-network/config-payload-plugin";
31
+ import { asModuleInstance, ModuleConfigSchema, ResolveHelper } from "@xyo-network/module-model";
32
+
33
+ // src/ModuleProxy/ModuleProxy.ts
34
+ import { AbstractModuleProxy } from "@xyo-network/bridge-abstract";
35
+ var _WebsocketModuleProxy = class _WebsocketModuleProxy extends AbstractModuleProxy {
36
+ constructor(params) {
37
+ _WebsocketModuleProxy.createCount = _WebsocketModuleProxy.createCount + 1;
38
+ if (Math.floor(_WebsocketModuleProxy.createCount / 10) === _WebsocketModuleProxy.createCount / 10) {
39
+ console.log(`WebsocketModuleProxy.createCount: ${_WebsocketModuleProxy.createCount}`);
40
+ }
41
+ super(params);
42
+ }
43
+ async proxyQueryHandler(query, payloads = []) {
44
+ return await this.params.querySender.sendBridgeQuery(this.params.moduleAddress, query, payloads);
45
+ }
46
+ };
47
+ __name(_WebsocketModuleProxy, "WebsocketModuleProxy");
48
+ __publicField(_WebsocketModuleProxy, "createCount", 0);
49
+ var WebsocketModuleProxy = _WebsocketModuleProxy;
50
+
51
+ // src/WebsocketBridgeModuleResolver.ts
52
+ var _WebsocketBridgeModuleResolver = class _WebsocketBridgeModuleResolver extends AbstractBridgeModuleResolver {
53
+ get querySender() {
54
+ return this.params.querySender;
55
+ }
56
+ async resolveHandler(id, options) {
57
+ var _a, _b;
58
+ const parentResult = await super.resolveHandler(id, options);
59
+ if (parentResult) {
60
+ return parentResult;
61
+ }
62
+ if (id === "*") {
63
+ return [];
64
+ }
65
+ const idParts = id.split(":");
66
+ const untransformedFirstPart = assertEx(idParts.shift(), () => `Invalid module identifier: ${id}`);
67
+ const firstPart = await ResolveHelper.transformModuleIdentifier(untransformedFirstPart);
68
+ const moduleAddress = firstPart;
69
+ assertEx(isAddress(firstPart), () => `Invalid module address: ${firstPart}`);
70
+ const remainderParts = idParts.join(":");
71
+ const params = {
72
+ account: Account.randomSync(),
73
+ config: {
74
+ schema: ModuleConfigSchema
75
+ },
76
+ host: this,
77
+ moduleAddress,
78
+ querySender: this.querySender
79
+ };
80
+ (_a = this.logger) == null ? void 0 : _a.debug(`creating HttpProxy [${moduleAddress}] ${id}`);
81
+ const proxy = new WebsocketModuleProxy(params);
82
+ if (proxy) {
83
+ const state = await proxy.state();
84
+ if (state) {
85
+ const configSchema = (_b = state.find((payload) => payload.schema === ConfigSchema)) == null ? void 0 : _b.config;
86
+ const config = assertEx(state.find((payload) => payload.schema === configSchema), () => "Unable to locate config");
87
+ proxy.setConfig(config);
88
+ }
89
+ }
90
+ await proxy.start();
91
+ const wrapped = assertEx(wrapModuleWithType(proxy, Account.randomSync()), () => `Failed to wrapModuleWithType [${id}]`);
92
+ const instance = assertEx(asModuleInstance(wrapped, {}), () => `Failed to asModuleInstance [${id}]`);
93
+ proxy.upResolver.add(instance);
94
+ proxy.downResolver.add(instance);
95
+ if (remainderParts.length > 0) {
96
+ const result = await wrapped.resolve(remainderParts, options);
97
+ return result ? [
98
+ result
99
+ ] : [];
100
+ }
101
+ return [
102
+ instance
103
+ ];
104
+ }
105
+ };
106
+ __name(_WebsocketBridgeModuleResolver, "WebsocketBridgeModuleResolver");
107
+ var WebsocketBridgeModuleResolver = _WebsocketBridgeModuleResolver;
108
+
109
+ // src/ClientBridge.ts
110
+ function _ts_decorate(decorators, target, key, desc) {
111
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
112
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
113
+ 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;
114
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
115
+ }
116
+ __name(_ts_decorate, "_ts_decorate");
117
+ var _WebsocketClientBridge = class _WebsocketClientBridge extends AbstractBridge {
118
+ _failureTimeCache = new LRUCache({
119
+ max: _WebsocketClientBridge.maxFailureCacheSize
120
+ });
121
+ _querySemaphore;
122
+ _resolver;
123
+ get client() {
124
+ return this.config.client;
125
+ }
126
+ get failureRetryTime() {
127
+ var _a;
128
+ return ((_a = this.client) == null ? void 0 : _a.failureRetryTime) ?? _WebsocketClientBridge.defaultFailureRetryTime;
129
+ }
130
+ get maxConnections() {
131
+ var _a;
132
+ return ((_a = this.client) == null ? void 0 : _a.maxConnections) ?? _WebsocketClientBridge.defaultMaxConnections;
133
+ }
134
+ get maxPayloadSizeWarning() {
135
+ var _a;
136
+ return ((_a = this.client) == null ? void 0 : _a.maxPayloadSizeWarning) ?? _WebsocketClientBridge.defaultMaxPayloadSizeWarning;
137
+ }
138
+ get querySemaphore() {
139
+ this._querySemaphore = this._querySemaphore ?? new Semaphore(this.maxConnections);
140
+ return this._querySemaphore;
141
+ }
142
+ get resolver() {
143
+ this._resolver = this._resolver ?? new WebsocketBridgeModuleResolver({
144
+ archiving: {
145
+ ...this.archiving,
146
+ resolveArchivists: this.resolveArchivingArchivists.bind(this)
147
+ },
148
+ bridge: this,
149
+ querySender: this,
150
+ root: this,
151
+ wrapperAccount: this.account
152
+ });
153
+ return this._resolver;
154
+ }
155
+ get url() {
156
+ var _a;
157
+ return assertEx2((_a = this.config.client) == null ? void 0 : _a.url, () => "No Url Set");
158
+ }
159
+ exposeHandler(_id, _options) {
160
+ throw new Error("Unsupported");
161
+ }
162
+ exposedHandler() {
163
+ throw new Error("Unsupported");
164
+ }
165
+ async getRoots() {
166
+ return await Promise.resolve([]);
167
+ }
168
+ async sendBridgeQuery(targetAddress, _query, _payloads) {
169
+ const lastFailureTime = this._failureTimeCache.get(targetAddress);
170
+ if (lastFailureTime !== void 0) {
171
+ const now = Date.now();
172
+ const timeSincePreviousFailure = now - lastFailureTime;
173
+ if (timeSincePreviousFailure > this.failureRetryTime) {
174
+ throw new Error(`target module failed recently [${targetAddress}] [${timeSincePreviousFailure}ms ago]`);
175
+ }
176
+ this._failureTimeCache.delete(targetAddress);
177
+ }
178
+ try {
179
+ await this.querySemaphore.acquire();
180
+ throw new Error("Unsupported");
181
+ } catch (ex) {
182
+ const error = ex;
183
+ throw error;
184
+ } finally {
185
+ this.querySemaphore.release();
186
+ }
187
+ }
188
+ unexposeHandler(_id, _options) {
189
+ throw new Error("Unsupported");
190
+ }
191
+ };
192
+ __name(_WebsocketClientBridge, "WebsocketClientBridge");
193
+ __publicField(_WebsocketClientBridge, "configSchemas", [
194
+ ...__superGet(_WebsocketClientBridge, _WebsocketClientBridge, "configSchemas"),
195
+ WebsocketBridgeConfigSchema
196
+ ]);
197
+ __publicField(_WebsocketClientBridge, "defaultConfigSchema", WebsocketBridgeConfigSchema);
198
+ __publicField(_WebsocketClientBridge, "defaultFailureRetryTime", 1e3 * 60);
199
+ __publicField(_WebsocketClientBridge, "defaultMaxConnections", 4);
200
+ __publicField(_WebsocketClientBridge, "defaultMaxPayloadSizeWarning", 256 * 256);
201
+ __publicField(_WebsocketClientBridge, "maxFailureCacheSize", 1e3);
202
+ var WebsocketClientBridge = _WebsocketClientBridge;
203
+ WebsocketClientBridge = _ts_decorate([
204
+ creatableModule()
205
+ ], WebsocketClientBridge);
206
+
207
+ // src/Bridge.ts
208
+ function _ts_decorate2(decorators, target, key, desc) {
209
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
210
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
211
+ 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;
212
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
213
+ }
214
+ __name(_ts_decorate2, "_ts_decorate");
215
+ var BridgeCommands = {
216
+ join: "join",
217
+ query: "query"
218
+ };
219
+ var DEFAULT_HOST_PORT = 8080;
220
+ var _WebsocketBridge = class _WebsocketBridge extends WebsocketClientBridge {
221
+ httpServer;
222
+ server;
223
+ get host() {
224
+ return this.config.host;
225
+ }
226
+ exposeHandler(_id, _options) {
227
+ throw new Error("Unsupported");
228
+ }
229
+ exposedHandler() {
230
+ throw new Error("Unsupported");
231
+ }
232
+ async startHandler() {
233
+ if (this.host) {
234
+ this.startServer();
235
+ }
236
+ return await super.startHandler();
237
+ }
238
+ async stopHandler() {
239
+ if (this.host) {
240
+ this.stopServer();
241
+ }
242
+ return await super.stopHandler();
243
+ }
244
+ startServer() {
245
+ if (this.httpServer) {
246
+ throw new Error("Http Server already started");
247
+ }
248
+ if (this.server) {
249
+ throw new Error("Socket Server already started");
250
+ }
251
+ const host = assertEx3(this.host, () => "No Host Configured");
252
+ this.httpServer = createHttpServer();
253
+ this.server = new Server(this.httpServer);
254
+ this.server.on("connection", (socket) => {
255
+ socket.on(BridgeCommands.join, async (address) => {
256
+ await socket.join(address);
257
+ console.log(`User ${socket.id} has connected to module ${address}`);
258
+ });
259
+ socket.on(BridgeCommands.query, ({ address, query }) => {
260
+ socket.to(address).emit("message", query);
261
+ });
262
+ });
263
+ this.httpServer.listen(host.port ?? DEFAULT_HOST_PORT);
264
+ }
265
+ stopServer() {
266
+ var _a, _b;
267
+ (_a = this.server) == null ? void 0 : _a.close();
268
+ this.server = void 0;
269
+ (_b = this.httpServer) == null ? void 0 : _b.close();
270
+ this.httpServer = void 0;
271
+ }
272
+ };
273
+ __name(_WebsocketBridge, "WebsocketBridge");
274
+ var WebsocketBridge = _WebsocketBridge;
275
+ WebsocketBridge = _ts_decorate2([
276
+ creatableModule2()
277
+ ], WebsocketBridge);
278
+ export {
279
+ BridgeCommands,
280
+ WebsocketBridge,
281
+ WebsocketBridgeConfigSchema
282
+ };
2
283
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Bridge.ts","../../src/ClientBridge.ts","../../src/Config.ts","../../src/WebsocketBridgeModuleResolver.ts","../../src/ModuleProxy/ModuleProxy.ts"],"sourcesContent":["import { createServer as createHttpServer, Server as HttpServer } from 'node:http'\n\nimport { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport { BridgeExposeOptions, BridgeModule } from '@xyo-network/bridge-model'\nimport { AnyConfigSchema, creatableModule, ModuleInstance } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { Server, Socket } from 'socket.io'\n\nimport { WebsocketClientBridge } from './ClientBridge'\nimport { WebsocketBridgeConfig } from './Config'\nimport { WebsocketBridgeParams } from './Params'\n\nexport const BridgeCommands = {\n join: 'join',\n query: 'query',\n}\n\nconst DEFAULT_HOST_PORT = 8080\n\n@creatableModule()\nexport class WebsocketBridge<\n TParams extends WebsocketBridgeParams<AnyConfigSchema<WebsocketBridgeConfig>> = WebsocketBridgeParams<WebsocketBridgeConfig>,\n >\n extends WebsocketClientBridge<TParams>\n implements BridgeModule<TParams>\n{\n httpServer?: HttpServer\n server?: Server\n\n get host() {\n return this.config.host\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 override async startHandler(): Promise<boolean> {\n if (this.host) {\n this.startServer()\n }\n return await super.startHandler()\n }\n\n override async stopHandler(): Promise<boolean> {\n if (this.host) {\n this.stopServer()\n }\n return await super.stopHandler()\n }\n\n private startServer() {\n if (this.httpServer) {\n throw new Error('Http Server already started')\n }\n if (this.server) {\n throw new Error('Socket Server already started')\n }\n const host = assertEx(this.host, () => 'No Host Configured')\n this.httpServer = createHttpServer()\n this.server = new Server(this.httpServer)\n\n this.server.on('connection', (socket: Socket) => {\n socket.on(BridgeCommands.join, async (address: Address) => {\n await socket.join(address)\n console.log(`User ${socket.id} has connected to module ${address}`)\n })\n\n socket.on(BridgeCommands.query, ({ address, query }: { address: Address; query: Payload[] }) => {\n socket.to(address).emit('message', query)\n })\n })\n this.httpServer.listen(host.port ?? DEFAULT_HOST_PORT)\n }\n\n private stopServer() {\n this.server?.close()\n this.server = undefined\n this.httpServer?.close()\n this.httpServer = undefined\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractBridge } from '@xyo-network/bridge-abstract'\nimport { BridgeExposeOptions, BridgeModule, BridgeUnexposeOptions } from '@xyo-network/bridge-model'\nimport { creatableModule, ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport { Semaphore } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport { WebsocketBridgeConfigSchema } from './Config'\nimport { WebsocketBridgeQuerySender } from './ModuleProxy'\nimport { WebsocketBridgeParams } from './Params'\nimport { WebsocketBridgeModuleResolver } from './WebsocketBridgeModuleResolver'\n\n@creatableModule()\nexport class WebsocketClientBridge<TParams extends WebsocketBridgeParams = WebsocketBridgeParams>\n extends AbstractBridge<TParams>\n implements BridgeModule<TParams>, WebsocketBridgeQuerySender\n{\n static override readonly configSchemas: Schema[] = [...super.configSchemas, WebsocketBridgeConfigSchema]\n static override readonly defaultConfigSchema: Schema = WebsocketBridgeConfigSchema\n static defaultFailureRetryTime = 1000 * 60\n static defaultMaxConnections = 4\n static defaultMaxPayloadSizeWarning = 256 * 256\n static maxFailureCacheSize = 1000\n\n private _failureTimeCache = new LRUCache<Address, number>({ max: WebsocketClientBridge.maxFailureCacheSize })\n private _querySemaphore?: Semaphore\n\n private _resolver?: WebsocketBridgeModuleResolver\n\n get client() {\n return this.config.client\n }\n\n get failureRetryTime() {\n return this.client?.failureRetryTime ?? WebsocketClientBridge.defaultFailureRetryTime\n }\n\n get maxConnections() {\n return this.client?.maxConnections ?? WebsocketClientBridge.defaultMaxConnections\n }\n\n get maxPayloadSizeWarning() {\n return this.client?.maxPayloadSizeWarning ?? WebsocketClientBridge.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 WebsocketBridgeModuleResolver({\n archiving: { ...this.archiving, resolveArchivists: this.resolveArchivingArchivists.bind(this) },\n bridge: this,\n querySender: this,\n root: this,\n wrapperAccount: this.account,\n })\n return this._resolver\n }\n\n get url() {\n return assertEx(this.config.client?.url, () => 'No Url Set')\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(): Promise<ModuleInstance[]> {\n return await Promise.resolve([])\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 throw new Error('Unsupported')\n } catch (ex) {\n const error = ex as 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","import { EmptyObject } from '@xylabs/object'\nimport { BridgeConfig } from '@xyo-network/bridge-model'\n\nexport const WebsocketBridgeConfigSchema = 'network.xyo.bridge.websocket.config' as const\nexport type WebsocketBridgeConfigSchema = typeof WebsocketBridgeConfigSchema\n\nexport type WebsocketBridgeConfig<TConfig extends EmptyObject = EmptyObject, TSchema extends string | void = void> = BridgeConfig<\n {\n schema: WebsocketBridgeConfigSchema\n } & TConfig,\n TSchema extends string ? TSchema : WebsocketBridgeConfigSchema,\n {\n failureRetryTime?: number\n failureTimeCacheMax?: number\n maxConnections?: number\n maxPayloadSizeWarning?: number\n url: string\n },\n {\n port?: number\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 { WebsocketBridgeQuerySender, WebsocketModuleProxy, WebsocketModuleProxyParams } from './ModuleProxy'\n\nexport interface WebsocketBridgeModuleResolverParams extends BridgeModuleResolverParams {\n querySender: WebsocketBridgeQuerySender\n}\n\nexport class WebsocketBridgeModuleResolver<\n T extends WebsocketBridgeModuleResolverParams = WebsocketBridgeModuleResolverParams,\n> extends AbstractBridgeModuleResolver<T> {\n get querySender() {\n return this.params.querySender\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) {\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: WebsocketModuleProxyParams = {\n account: Account.randomSync(),\n config: { schema: ModuleConfigSchema },\n host: this,\n moduleAddress,\n querySender: this.querySender,\n }\n\n this.logger?.debug(`creating HttpProxy [${moduleAddress}] ${id}`)\n\n const proxy = new WebsocketModuleProxy<T, WebsocketModuleProxyParams>(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 { Address } from '@xylabs/hex'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractModuleProxy, ModuleProxyParams } from '@xyo-network/bridge-abstract'\nimport { ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport interface WebsocketBridgeQuerySender {\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 WebsocketModuleProxyParams = ModuleProxyParams & {\n querySender: WebsocketBridgeQuerySender\n}\n\nexport class WebsocketModuleProxy<\n TWrappedModule extends ModuleInstance = ModuleInstance,\n TParams extends Omit<WebsocketModuleProxyParams, 'config'> & { config: TWrappedModule['config'] } = Omit<WebsocketModuleProxyParams, 'config'> & {\n config: TWrappedModule['config']\n },\n >\n extends AbstractModuleProxy<TWrappedModule, TParams>\n implements ModuleInstance<TParams, TWrappedModule['eventData']>\n{\n static createCount = 0\n\n constructor(params: TParams) {\n WebsocketModuleProxy.createCount = WebsocketModuleProxy.createCount + 1\n if (Math.floor(WebsocketModuleProxy.createCount / 10) === WebsocketModuleProxy.createCount / 10) {\n console.log(`WebsocketModuleProxy.createCount: ${WebsocketModuleProxy.createCount}`)\n }\n super(params)\n }\n\n async proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads: Payload[] = []): Promise<ModuleQueryResult> {\n return await this.params.querySender.sendBridgeQuery(this.params.moduleAddress, query, payloads)\n }\n}\n"],"mappings":"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","names":["createServer","createHttpServer","assertEx","creatableModule","Server","assertEx","AbstractBridge","creatableModule","Semaphore","LRUCache","WebsocketBridgeConfigSchema","assertEx","isAddress","Account","AbstractBridgeModuleResolver","wrapModuleWithType","ConfigSchema","asModuleInstance","ModuleConfigSchema","ResolveHelper","AbstractModuleProxy","WebsocketModuleProxy","AbstractModuleProxy","constructor","params","createCount","Math","floor","console","log","proxyQueryHandler","query","payloads","querySender","sendBridgeQuery","moduleAddress","__publicField","_WebsocketModuleProxy","WebsocketBridgeModuleResolver","AbstractBridgeModuleResolver","querySender","params","resolveHandler","id","options","_a","_b","parentResult","idParts","split","untransformedFirstPart","assertEx","shift","firstPart","ResolveHelper","transformModuleIdentifier","moduleAddress","isAddress","remainderParts","join","account","Account","randomSync","config","schema","ModuleConfigSchema","host","logger","debug","proxy","WebsocketModuleProxy","state","configSchema","find","payload","ConfigSchema","setConfig","start","wrapped","wrapModuleWithType","instance","asModuleInstance","upResolver","add","downResolver","length","result","resolve","_WebsocketBridgeModuleResolver","WebsocketClientBridge","AbstractBridge","_failureTimeCache","LRUCache","max","maxFailureCacheSize","_querySemaphore","_resolver","client","config","failureRetryTime","_a","defaultFailureRetryTime","maxConnections","defaultMaxConnections","maxPayloadSizeWarning","defaultMaxPayloadSizeWarning","querySemaphore","Semaphore","resolver","WebsocketBridgeModuleResolver","archiving","resolveArchivists","resolveArchivingArchivists","bind","bridge","querySender","root","wrapperAccount","account","url","assertEx","exposeHandler","_id","_options","Error","exposedHandler","getRoots","Promise","resolve","sendBridgeQuery","targetAddress","_query","_payloads","lastFailureTime","get","undefined","timeSincePreviousFailure","Date","now","delete","acquire","ex","release","unexposeHandler","__publicField","configSchemas","__superGet","_WebsocketClientBridge","WebsocketBridgeConfigSchema","defaultConfigSchema","BridgeCommands","join","query","DEFAULT_HOST_PORT","WebsocketBridge","WebsocketClientBridge","httpServer","server","host","config","exposeHandler","_id","_options","Error","exposedHandler","startHandler","startServer","stopHandler","stopServer","assertEx","createHttpServer","Server","on","socket","address","console","log","id","to","emit","listen","port","_a","close","undefined","_b","_WebsocketBridge"]}
1
+ {"version":3,"sources":["../../src/Bridge.ts","../../src/ClientBridge.ts","../../src/Config.ts","../../src/WebsocketBridgeModuleResolver.ts","../../src/ModuleProxy/ModuleProxy.ts"],"sourcesContent":["import { createServer as createHttpServer, Server as HttpServer } from 'node:http'\n\nimport { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport { BridgeExposeOptions, BridgeModule } from '@xyo-network/bridge-model'\nimport { AnyConfigSchema, creatableModule, ModuleInstance } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { Server, Socket } from 'socket.io'\n\nimport { WebsocketClientBridge } from './ClientBridge'\nimport { WebsocketBridgeConfig } from './Config'\nimport { WebsocketBridgeParams } from './Params'\n\nexport const BridgeCommands = {\n join: 'join',\n query: 'query',\n}\n\nconst DEFAULT_HOST_PORT = 8080\n\n@creatableModule()\nexport class WebsocketBridge<\n TParams extends WebsocketBridgeParams<AnyConfigSchema<WebsocketBridgeConfig>> = WebsocketBridgeParams<WebsocketBridgeConfig>,\n >\n extends WebsocketClientBridge<TParams>\n implements BridgeModule<TParams>\n{\n httpServer?: HttpServer\n server?: Server\n\n get host() {\n return this.config.host\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 override async startHandler(): Promise<boolean> {\n if (this.host) {\n this.startServer()\n }\n return await super.startHandler()\n }\n\n override async stopHandler(): Promise<boolean> {\n if (this.host) {\n this.stopServer()\n }\n return await super.stopHandler()\n }\n\n private startServer() {\n if (this.httpServer) {\n throw new Error('Http Server already started')\n }\n if (this.server) {\n throw new Error('Socket Server already started')\n }\n const host = assertEx(this.host, () => 'No Host Configured')\n this.httpServer = createHttpServer()\n this.server = new Server(this.httpServer)\n\n this.server.on('connection', (socket: Socket) => {\n socket.on(BridgeCommands.join, async (address: Address) => {\n await socket.join(address)\n console.log(`User ${socket.id} has connected to module ${address}`)\n })\n\n socket.on(BridgeCommands.query, ({ address, query }: { address: Address; query: Payload[] }) => {\n socket.to(address).emit('message', query)\n })\n })\n this.httpServer.listen(host.port ?? DEFAULT_HOST_PORT)\n }\n\n private stopServer() {\n this.server?.close()\n this.server = undefined\n this.httpServer?.close()\n this.httpServer = undefined\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractBridge } from '@xyo-network/bridge-abstract'\nimport { BridgeExposeOptions, BridgeModule, BridgeUnexposeOptions } from '@xyo-network/bridge-model'\nimport { creatableModule, ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport { Semaphore } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport { WebsocketBridgeConfigSchema } from './Config'\nimport { WebsocketBridgeQuerySender } from './ModuleProxy'\nimport { WebsocketBridgeParams } from './Params'\nimport { WebsocketBridgeModuleResolver } from './WebsocketBridgeModuleResolver'\n\n@creatableModule()\nexport class WebsocketClientBridge<TParams extends WebsocketBridgeParams = WebsocketBridgeParams>\n extends AbstractBridge<TParams>\n implements BridgeModule<TParams>, WebsocketBridgeQuerySender\n{\n static override readonly configSchemas: Schema[] = [...super.configSchemas, WebsocketBridgeConfigSchema]\n static override readonly defaultConfigSchema: Schema = WebsocketBridgeConfigSchema\n static defaultFailureRetryTime = 1000 * 60\n static defaultMaxConnections = 4\n static defaultMaxPayloadSizeWarning = 256 * 256\n static maxFailureCacheSize = 1000\n\n private _failureTimeCache = new LRUCache<Address, number>({ max: WebsocketClientBridge.maxFailureCacheSize })\n private _querySemaphore?: Semaphore\n\n private _resolver?: WebsocketBridgeModuleResolver\n\n get client() {\n return this.config.client\n }\n\n get failureRetryTime() {\n return this.client?.failureRetryTime ?? WebsocketClientBridge.defaultFailureRetryTime\n }\n\n get maxConnections() {\n return this.client?.maxConnections ?? WebsocketClientBridge.defaultMaxConnections\n }\n\n get maxPayloadSizeWarning() {\n return this.client?.maxPayloadSizeWarning ?? WebsocketClientBridge.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 WebsocketBridgeModuleResolver({\n archiving: { ...this.archiving, resolveArchivists: this.resolveArchivingArchivists.bind(this) },\n bridge: this,\n querySender: this,\n root: this,\n wrapperAccount: this.account,\n })\n return this._resolver\n }\n\n get url() {\n return assertEx(this.config.client?.url, () => 'No Url Set')\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(): Promise<ModuleInstance[]> {\n return await Promise.resolve([])\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 throw new Error('Unsupported')\n } catch (ex) {\n const error = ex as 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","import { EmptyObject } from '@xylabs/object'\nimport { BridgeConfig } from '@xyo-network/bridge-model'\n\nexport const WebsocketBridgeConfigSchema = 'network.xyo.bridge.websocket.config' as const\nexport type WebsocketBridgeConfigSchema = typeof WebsocketBridgeConfigSchema\n\nexport type WebsocketBridgeConfig<TConfig extends EmptyObject = EmptyObject, TSchema extends string | void = void> = BridgeConfig<\n {\n schema: WebsocketBridgeConfigSchema\n } & TConfig,\n TSchema extends string ? TSchema : WebsocketBridgeConfigSchema,\n {\n failureRetryTime?: number\n failureTimeCacheMax?: number\n maxConnections?: number\n maxPayloadSizeWarning?: number\n url: string\n },\n {\n port?: number\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 { WebsocketBridgeQuerySender, WebsocketModuleProxy, WebsocketModuleProxyParams } from './ModuleProxy'\n\nexport interface WebsocketBridgeModuleResolverParams extends BridgeModuleResolverParams {\n querySender: WebsocketBridgeQuerySender\n}\n\nexport class WebsocketBridgeModuleResolver<\n T extends WebsocketBridgeModuleResolverParams = WebsocketBridgeModuleResolverParams,\n> extends AbstractBridgeModuleResolver<T> {\n get querySender() {\n return this.params.querySender\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) {\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: WebsocketModuleProxyParams = {\n account: Account.randomSync(),\n config: { schema: ModuleConfigSchema },\n host: this,\n moduleAddress,\n querySender: this.querySender,\n }\n\n this.logger?.debug(`creating HttpProxy [${moduleAddress}] ${id}`)\n\n const proxy = new WebsocketModuleProxy<T, WebsocketModuleProxyParams>(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 { Address } from '@xylabs/hex'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractModuleProxy, ModuleProxyParams } from '@xyo-network/bridge-abstract'\nimport { ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport interface WebsocketBridgeQuerySender {\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 WebsocketModuleProxyParams = ModuleProxyParams & {\n querySender: WebsocketBridgeQuerySender\n}\n\nexport class WebsocketModuleProxy<\n TWrappedModule extends ModuleInstance = ModuleInstance,\n TParams extends Omit<WebsocketModuleProxyParams, 'config'> & { config: TWrappedModule['config'] } = Omit<WebsocketModuleProxyParams, 'config'> & {\n config: TWrappedModule['config']\n },\n >\n extends AbstractModuleProxy<TWrappedModule, TParams>\n implements ModuleInstance<TParams, TWrappedModule['eventData']>\n{\n static createCount = 0\n\n constructor(params: TParams) {\n WebsocketModuleProxy.createCount = WebsocketModuleProxy.createCount + 1\n if (Math.floor(WebsocketModuleProxy.createCount / 10) === WebsocketModuleProxy.createCount / 10) {\n console.log(`WebsocketModuleProxy.createCount: ${WebsocketModuleProxy.createCount}`)\n }\n super(params)\n }\n\n async proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads: Payload[] = []): Promise<ModuleQueryResult> {\n return await this.params.querySender.sendBridgeQuery(this.params.moduleAddress, query, payloads)\n }\n}\n"],"mappings":"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","names":["createServer","createHttpServer","assertEx","creatableModule","Server","assertEx","AbstractBridge","creatableModule","Semaphore","LRUCache","WebsocketBridgeConfigSchema","assertEx","isAddress","Account","AbstractBridgeModuleResolver","wrapModuleWithType","ConfigSchema","asModuleInstance","ModuleConfigSchema","ResolveHelper","AbstractModuleProxy","WebsocketModuleProxy","AbstractModuleProxy","constructor","params","createCount","Math","floor","console","log","proxyQueryHandler","query","payloads","querySender","sendBridgeQuery","moduleAddress","WebsocketBridgeModuleResolver","AbstractBridgeModuleResolver","querySender","params","resolveHandler","id","options","parentResult","idParts","split","untransformedFirstPart","assertEx","shift","firstPart","ResolveHelper","transformModuleIdentifier","moduleAddress","isAddress","remainderParts","join","account","Account","randomSync","config","schema","ModuleConfigSchema","host","logger","debug","proxy","WebsocketModuleProxy","state","configSchema","find","payload","ConfigSchema","setConfig","start","wrapped","wrapModuleWithType","instance","asModuleInstance","upResolver","add","downResolver","length","result","resolve","WebsocketClientBridge","AbstractBridge","_failureTimeCache","LRUCache","max","maxFailureCacheSize","_querySemaphore","_resolver","client","config","failureRetryTime","defaultFailureRetryTime","maxConnections","defaultMaxConnections","maxPayloadSizeWarning","defaultMaxPayloadSizeWarning","querySemaphore","Semaphore","resolver","WebsocketBridgeModuleResolver","archiving","resolveArchivists","resolveArchivingArchivists","bind","bridge","querySender","root","wrapperAccount","account","url","assertEx","exposeHandler","_id","_options","Error","exposedHandler","getRoots","Promise","resolve","sendBridgeQuery","targetAddress","_query","_payloads","lastFailureTime","get","undefined","now","Date","timeSincePreviousFailure","delete","acquire","ex","error","release","unexposeHandler","configSchemas","WebsocketBridgeConfigSchema","defaultConfigSchema","BridgeCommands","join","query","DEFAULT_HOST_PORT","WebsocketBridge","WebsocketClientBridge","httpServer","server","host","config","exposeHandler","_id","_options","Error","exposedHandler","startHandler","startServer","stopHandler","stopServer","assertEx","createHttpServer","Server","on","socket","address","console","log","id","to","emit","listen","port","close","undefined"]}
package/package.json CHANGED
@@ -14,26 +14,26 @@
14
14
  "@xylabs/hex": "^3.5.1",
15
15
  "@xylabs/object": "^3.5.1",
16
16
  "@xylabs/promise": "^3.5.1",
17
- "@xyo-network/account": "~2.107.3",
18
- "@xyo-network/boundwitness-model": "~2.107.3",
19
- "@xyo-network/bridge-abstract": "~2.107.3",
20
- "@xyo-network/bridge-model": "~2.107.3",
21
- "@xyo-network/config-payload-plugin": "~2.107.3",
22
- "@xyo-network/module-model": "~2.107.3",
23
- "@xyo-network/payload-model": "~2.107.3",
17
+ "@xyo-network/account": "~2.107.5",
18
+ "@xyo-network/boundwitness-model": "~2.107.5",
19
+ "@xyo-network/bridge-abstract": "~2.107.5",
20
+ "@xyo-network/bridge-model": "~2.107.5",
21
+ "@xyo-network/config-payload-plugin": "~2.107.5",
22
+ "@xyo-network/module-model": "~2.107.5",
23
+ "@xyo-network/payload-model": "~2.107.5",
24
24
  "async-mutex": "^0.5.0",
25
25
  "lru-cache": "^10.2.2",
26
26
  "socket.io": "^4.7.5"
27
27
  },
28
28
  "devDependencies": {
29
- "@xylabs/ts-scripts-yarn3": "^3.11.9",
30
- "@xylabs/tsconfig": "^3.11.9",
31
- "@xyo-network/account": "~2.107.3",
32
- "@xyo-network/archivist-model": "~2.107.3",
33
- "@xyo-network/node-memory": "~2.107.3",
34
- "@xyo-network/node-model": "~2.107.3",
35
- "@xyo-network/payload-builder": "~2.107.3",
36
- "@xyo-network/payload-wrapper": "~2.107.3",
29
+ "@xylabs/ts-scripts-yarn3": "^3.11.10",
30
+ "@xylabs/tsconfig": "^3.11.10",
31
+ "@xyo-network/account": "~2.107.5",
32
+ "@xyo-network/archivist-model": "~2.107.5",
33
+ "@xyo-network/node-memory": "~2.107.5",
34
+ "@xyo-network/node-model": "~2.107.5",
35
+ "@xyo-network/payload-builder": "~2.107.5",
36
+ "@xyo-network/payload-wrapper": "~2.107.5",
37
37
  "socket.io-client": "^4.7.5",
38
38
  "typescript": "^5.5.2"
39
39
  },
@@ -76,6 +76,6 @@
76
76
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
77
77
  },
78
78
  "sideEffects": false,
79
- "version": "2.107.3",
79
+ "version": "2.107.5",
80
80
  "type": "module"
81
81
  }