@xyo-network/bridge-websocket 2.94.4 → 2.94.6
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/Bridge.d.cts +21 -0
- package/dist/browser/Bridge.d.cts.map +1 -0
- package/dist/browser/Bridge.d.mts +21 -0
- package/dist/browser/Bridge.d.mts.map +1 -0
- package/dist/browser/Bridge.d.ts +21 -0
- package/dist/browser/Bridge.d.ts.map +1 -0
- package/dist/browser/Config.d.cts +12 -0
- package/dist/browser/Config.d.cts.map +1 -0
- package/dist/browser/Config.d.mts +12 -0
- package/dist/browser/Config.d.mts.map +1 -0
- package/dist/browser/Config.d.ts +12 -0
- package/dist/browser/Config.d.ts.map +1 -0
- package/dist/browser/ModuleProxy/ModuleProxy.d.cts +18 -0
- package/dist/browser/ModuleProxy/ModuleProxy.d.cts.map +1 -0
- package/dist/browser/ModuleProxy/ModuleProxy.d.mts +18 -0
- package/dist/browser/ModuleProxy/ModuleProxy.d.mts.map +1 -0
- package/dist/browser/ModuleProxy/ModuleProxy.d.ts +18 -0
- package/dist/browser/ModuleProxy/ModuleProxy.d.ts.map +1 -0
- package/dist/browser/ModuleProxy/index.d.cts +2 -0
- package/dist/browser/ModuleProxy/index.d.cts.map +1 -0
- package/dist/browser/ModuleProxy/index.d.mts +2 -0
- package/dist/browser/ModuleProxy/index.d.mts.map +1 -0
- package/dist/browser/ModuleProxy/index.d.ts +2 -0
- package/dist/browser/ModuleProxy/index.d.ts.map +1 -0
- package/dist/browser/ModuleResolver.d.cts +11 -0
- package/dist/browser/ModuleResolver.d.cts.map +1 -0
- package/dist/browser/ModuleResolver.d.mts +11 -0
- package/dist/browser/ModuleResolver.d.mts.map +1 -0
- package/dist/browser/ModuleResolver.d.ts +11 -0
- package/dist/browser/ModuleResolver.d.ts.map +1 -0
- package/dist/browser/index.cjs +147 -2
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.d.cts +2 -1
- package/dist/browser/index.d.cts.map +1 -1
- package/dist/browser/index.d.mts +2 -1
- package/dist/browser/index.d.mts.map +1 -1
- package/dist/browser/index.d.ts +2 -1
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +148 -3
- package/dist/browser/index.js.map +1 -1
- package/dist/node/Bridge.d.cts +21 -0
- package/dist/node/Bridge.d.cts.map +1 -0
- package/dist/node/Bridge.d.mts +21 -0
- package/dist/node/Bridge.d.mts.map +1 -0
- package/dist/node/Bridge.d.ts +21 -0
- package/dist/node/Bridge.d.ts.map +1 -0
- package/dist/node/Config.d.cts +12 -0
- package/dist/node/Config.d.cts.map +1 -0
- package/dist/node/Config.d.mts +12 -0
- package/dist/node/Config.d.mts.map +1 -0
- package/dist/node/Config.d.ts +12 -0
- package/dist/node/Config.d.ts.map +1 -0
- package/dist/node/ModuleProxy/ModuleProxy.d.cts +18 -0
- package/dist/node/ModuleProxy/ModuleProxy.d.cts.map +1 -0
- package/dist/node/ModuleProxy/ModuleProxy.d.mts +18 -0
- package/dist/node/ModuleProxy/ModuleProxy.d.mts.map +1 -0
- package/dist/node/ModuleProxy/ModuleProxy.d.ts +18 -0
- package/dist/node/ModuleProxy/ModuleProxy.d.ts.map +1 -0
- package/dist/node/ModuleProxy/index.d.cts +2 -0
- package/dist/node/ModuleProxy/index.d.cts.map +1 -0
- package/dist/node/ModuleProxy/index.d.mts +2 -0
- package/dist/node/ModuleProxy/index.d.mts.map +1 -0
- package/dist/node/ModuleProxy/index.d.ts +2 -0
- package/dist/node/ModuleProxy/index.d.ts.map +1 -0
- package/dist/node/ModuleResolver.d.cts +11 -0
- package/dist/node/ModuleResolver.d.cts.map +1 -0
- package/dist/node/ModuleResolver.d.mts +11 -0
- package/dist/node/ModuleResolver.d.mts.map +1 -0
- package/dist/node/ModuleResolver.d.ts +11 -0
- package/dist/node/ModuleResolver.d.ts.map +1 -0
- package/dist/node/index.cjs +153 -3
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +2 -1
- package/dist/node/index.d.cts.map +1 -1
- package/dist/node/index.d.mts +2 -1
- package/dist/node/index.d.mts.map +1 -1
- package/dist/node/index.d.ts +2 -1
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +152 -3
- package/dist/node/index.js.map +1 -1
- package/package.json +19 -2
- package/src/Bridge.ts +54 -0
- package/src/Config.ts +16 -0
- package/src/ModuleProxy/ModuleProxy.ts +34 -0
- package/src/ModuleProxy/index.ts +1 -0
- package/src/ModuleResolver.ts +76 -0
- package/src/index.ts +2 -1
- package/src/spec/socketServer.ts +68 -0
package/dist/node/index.cjs
CHANGED
|
@@ -3,6 +3,8 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
7
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
8
|
var __export = (target, all) => {
|
|
7
9
|
for (var name in all)
|
|
8
10
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -16,16 +18,164 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
18
|
return to;
|
|
17
19
|
};
|
|
18
20
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
var __publicField = (obj, key, value) => {
|
|
22
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
23
|
+
return value;
|
|
24
|
+
};
|
|
19
25
|
|
|
20
26
|
// src/index.ts
|
|
21
27
|
var src_exports = {};
|
|
22
28
|
__export(src_exports, {
|
|
23
|
-
|
|
29
|
+
WebsocketBridge: () => WebsocketBridge,
|
|
30
|
+
WebsocketBridgeConfigSchema: () => WebsocketBridgeConfigSchema
|
|
24
31
|
});
|
|
25
32
|
module.exports = __toCommonJS(src_exports);
|
|
26
|
-
|
|
33
|
+
|
|
34
|
+
// src/Bridge.ts
|
|
35
|
+
var import_assert2 = require("@xylabs/assert");
|
|
36
|
+
var import_abstract_bridge3 = require("@xyo-network/abstract-bridge");
|
|
37
|
+
var import_module_model2 = require("@xyo-network/module-model");
|
|
38
|
+
|
|
39
|
+
// src/Config.ts
|
|
40
|
+
var WebsocketBridgeConfigSchema = "network.xyo.bridge.websocket.config";
|
|
41
|
+
|
|
42
|
+
// src/ModuleResolver.ts
|
|
43
|
+
var import_assert = require("@xylabs/assert");
|
|
44
|
+
var import_hex = require("@xylabs/hex");
|
|
45
|
+
var import_abstract_bridge2 = require("@xyo-network/abstract-bridge");
|
|
46
|
+
var import_account = require("@xyo-network/account");
|
|
47
|
+
var import_config_payload_plugin = require("@xyo-network/config-payload-plugin");
|
|
48
|
+
var import_module_model = require("@xyo-network/module-model");
|
|
49
|
+
|
|
50
|
+
// src/ModuleProxy/ModuleProxy.ts
|
|
51
|
+
var import_abstract_bridge = require("@xyo-network/abstract-bridge");
|
|
52
|
+
var _WebsocketModuleProxy = class _WebsocketModuleProxy extends import_abstract_bridge.AbstractModuleProxy {
|
|
53
|
+
async proxyQueryHandler(query, payloads = []) {
|
|
54
|
+
var _a;
|
|
55
|
+
const { client, moduleUrl, maxPayloadSizeWarning } = this.params;
|
|
56
|
+
const payloadSize = JSON.stringify([
|
|
57
|
+
query,
|
|
58
|
+
payloads
|
|
59
|
+
]).length;
|
|
60
|
+
if (maxPayloadSizeWarning && payloadSize > maxPayloadSizeWarning) {
|
|
61
|
+
(_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}]`);
|
|
62
|
+
}
|
|
63
|
+
await Promise.resolve();
|
|
64
|
+
throw new Error("Unsupported");
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
__name(_WebsocketModuleProxy, "WebsocketModuleProxy");
|
|
68
|
+
var WebsocketModuleProxy = _WebsocketModuleProxy;
|
|
69
|
+
|
|
70
|
+
// src/ModuleResolver.ts
|
|
71
|
+
var _WebsocketBridgeModuleResolver = class _WebsocketBridgeModuleResolver extends import_abstract_bridge2.AbstractBridgeModuleResolver {
|
|
72
|
+
moduleUrl(address) {
|
|
73
|
+
return new URL(address, this.options.url);
|
|
74
|
+
}
|
|
75
|
+
async resolveHandler(id, options) {
|
|
76
|
+
var _a;
|
|
77
|
+
const parentResult = await super.resolveHandler(id, options);
|
|
78
|
+
if (parentResult) {
|
|
79
|
+
return parentResult;
|
|
80
|
+
}
|
|
81
|
+
if (id === "*") {
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
const idParts = id.split(":");
|
|
85
|
+
const firstPart = (0, import_assert.assertEx)(idParts.shift(), () => "Missing firstPart");
|
|
86
|
+
const moduleAddress = firstPart;
|
|
87
|
+
(0, import_assert.assertEx)((0, import_hex.isAddress)(firstPart), () => `Invalid module address: ${firstPart}`);
|
|
88
|
+
const remainderParts = idParts.join(":");
|
|
89
|
+
const params = {
|
|
90
|
+
account: import_account.Account.randomSync(),
|
|
91
|
+
config: {
|
|
92
|
+
schema: import_module_model.ModuleConfigSchema
|
|
93
|
+
},
|
|
94
|
+
host: this,
|
|
95
|
+
moduleAddress,
|
|
96
|
+
moduleUrl: this.moduleUrl(moduleAddress).href
|
|
97
|
+
};
|
|
98
|
+
const proxy = new WebsocketModuleProxy(params);
|
|
99
|
+
if (proxy) {
|
|
100
|
+
const state = await proxy.state();
|
|
101
|
+
if (state) {
|
|
102
|
+
const configSchema = (_a = state.find((payload) => payload.schema === import_config_payload_plugin.ConfigSchema)) == null ? void 0 : _a.config;
|
|
103
|
+
const config = (0, import_assert.assertEx)(state.find((payload) => payload.schema === configSchema), () => "Unable to locate config");
|
|
104
|
+
proxy.setConfig(config);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
await proxy.start();
|
|
108
|
+
const wrapped = (0, import_assert.assertEx)((0, import_abstract_bridge2.wrapModuleWithType)(proxy, import_account.Account.randomSync()), () => `Failed to wrapModuleWithType [${id}]`);
|
|
109
|
+
const as = (0, import_assert.assertEx)((0, import_module_model.asModuleInstance)(wrapped, {}), () => `Failed to asModuleInstance [${id}]`);
|
|
110
|
+
proxy.upResolver.add(as);
|
|
111
|
+
proxy.downResolver.add(as);
|
|
112
|
+
if (remainderParts.length > 0) {
|
|
113
|
+
const result = await wrapped.resolve(remainderParts, options);
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
return as;
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
__name(_WebsocketBridgeModuleResolver, "WebsocketBridgeModuleResolver");
|
|
120
|
+
var WebsocketBridgeModuleResolver = _WebsocketBridgeModuleResolver;
|
|
121
|
+
|
|
122
|
+
// src/Bridge.ts
|
|
123
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
124
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
125
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
126
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
127
|
+
else
|
|
128
|
+
for (var i = decorators.length - 1; i >= 0; i--)
|
|
129
|
+
if (d = decorators[i])
|
|
130
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
131
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
132
|
+
}
|
|
133
|
+
__name(_ts_decorate, "_ts_decorate");
|
|
134
|
+
var _WebsocketBridge = class _WebsocketBridge extends import_abstract_bridge3.AbstractBridge {
|
|
135
|
+
_resolver;
|
|
136
|
+
get resolver() {
|
|
137
|
+
this._resolver = this._resolver ?? new WebsocketBridgeModuleResolver({
|
|
138
|
+
bridge: this,
|
|
139
|
+
url: this.url,
|
|
140
|
+
wrapperAccount: this.account
|
|
141
|
+
});
|
|
142
|
+
return this._resolver;
|
|
143
|
+
}
|
|
144
|
+
get url() {
|
|
145
|
+
return (0, import_assert2.assertEx)(this.config.url, () => "No Url Set");
|
|
146
|
+
}
|
|
147
|
+
async discoverRoots() {
|
|
148
|
+
return await Promise.resolve([]);
|
|
149
|
+
}
|
|
150
|
+
exposeHandler(_id, _options) {
|
|
151
|
+
throw new Error("Unsupported");
|
|
152
|
+
}
|
|
153
|
+
exposedHandler() {
|
|
154
|
+
throw new Error("Unsupported");
|
|
155
|
+
}
|
|
156
|
+
async startHandler() {
|
|
157
|
+
const { discoverRoot = true, legacyMode } = this.config;
|
|
158
|
+
if (discoverRoot || legacyMode) {
|
|
159
|
+
await this.discoverRoots();
|
|
160
|
+
}
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
unexposeHandler(_id, _options) {
|
|
164
|
+
throw new Error("Unsupported");
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
__name(_WebsocketBridge, "WebsocketBridge");
|
|
168
|
+
__publicField(_WebsocketBridge, "configSchemas", [
|
|
169
|
+
WebsocketBridgeConfigSchema
|
|
170
|
+
]);
|
|
171
|
+
__publicField(_WebsocketBridge, "maxPayloadSizeWarning", 256 * 256);
|
|
172
|
+
var WebsocketBridge = _WebsocketBridge;
|
|
173
|
+
WebsocketBridge = _ts_decorate([
|
|
174
|
+
(0, import_module_model2.creatableModule)()
|
|
175
|
+
], WebsocketBridge);
|
|
27
176
|
// Annotate the CommonJS export names for ESM import in node:
|
|
28
177
|
0 && (module.exports = {
|
|
29
|
-
|
|
178
|
+
WebsocketBridge,
|
|
179
|
+
WebsocketBridgeConfigSchema
|
|
30
180
|
});
|
|
31
181
|
//# sourceMappingURL=index.cjs.map
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export const TODO = true\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;;;;;AAAO,IAAMA,OAAO;","names":["TODO"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/Bridge.ts","../../src/Config.ts","../../src/ModuleResolver.ts","../../src/ModuleProxy/ModuleProxy.ts"],"sourcesContent":["export * from './Bridge'\nexport * from './Config'\n","import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractBridge } from '@xyo-network/abstract-bridge'\nimport { BridgeExposeOptions, BridgeModule, BridgeParams, BridgeUnexposeOptions } from '@xyo-network/bridge-model'\nimport { AnyConfigSchema, creatableModule, ModuleInstance } from '@xyo-network/module-model'\n\nimport { WebsocketBridgeConfig, WebsocketBridgeConfigSchema } from './Config'\nimport { WebsocketBridgeModuleResolver } from './ModuleResolver'\n\nexport type WebsocketBridgeParams<TConfig extends AnyConfigSchema<WebsocketBridgeConfig> = AnyConfigSchema<WebsocketBridgeConfig>> =\n BridgeParams<TConfig>\n\n@creatableModule()\nexport class WebsocketBridge<TParams extends WebsocketBridgeParams> extends AbstractBridge<TParams> implements BridgeModule<TParams> {\n static override configSchemas = [WebsocketBridgeConfigSchema]\n static maxPayloadSizeWarning = 256 * 256\n\n private _resolver?: WebsocketBridgeModuleResolver\n\n override get resolver() {\n this._resolver = this._resolver ?? new WebsocketBridgeModuleResolver({ bridge: this, url: this.url, wrapperAccount: this.account })\n return this._resolver\n }\n\n get url() {\n return assertEx(this.config.url, () => 'No Url Set')\n }\n\n override async discoverRoots(): Promise<ModuleInstance[]> {\n return await Promise.resolve([])\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 // eslint-disable-next-line deprecation/deprecation\n const { discoverRoot = true, legacyMode } = this.config\n if (discoverRoot || legacyMode) {\n await this.discoverRoots()\n }\n return true\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'\nexport type WebsocketBridgeConfigSchema = typeof WebsocketBridgeConfigSchema\n\nexport type WebsocketBridgeConfig<TConfig extends EmptyObject = EmptyObject, TSchema extends string | void = void> = BridgeConfig<\n {\n discoverRoot?: boolean\n /** @deprecated Do not use this for any new development */\n legacyMode?: boolean\n schema: WebsocketBridgeConfigSchema\n url?: string\n } & TConfig,\n TSchema extends string ? TSchema : WebsocketBridgeConfigSchema\n>\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { AbstractBridgeModuleResolver, BridgeModuleResolverOptions, wrapModuleWithType } from '@xyo-network/abstract-bridge'\nimport { Account } from '@xyo-network/account'\nimport { ConfigPayload, ConfigSchema } from '@xyo-network/config-payload-plugin'\nimport { asModuleInstance, ModuleConfig, ModuleConfigSchema, ModuleFilterOptions, ModuleIdentifier, ModuleInstance } from '@xyo-network/module-model'\n\nimport { WebsocketModuleProxy, WebsocketModuleProxyParams } from './ModuleProxy'\n\nexport interface WebsocketBridgeModuleResolverOptions extends BridgeModuleResolverOptions {\n url: string\n}\n\nexport class WebsocketBridgeModuleResolver<\n T extends WebsocketBridgeModuleResolverOptions = WebsocketBridgeModuleResolverOptions,\n> extends AbstractBridgeModuleResolver<T> {\n moduleUrl(address: Address) {\n return new URL(address, this.options.url)\n }\n\n override async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\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 firstPart = assertEx(idParts.shift(), () => 'Missing firstPart')\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 moduleUrl: this.moduleUrl(moduleAddress).href,\n }\n\n //console.log(`creating WebsocketProxy [${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 as = assertEx(asModuleInstance<T>(wrapped, {}), () => `Failed to asModuleInstance [${id}]`)\n proxy.upResolver.add(as)\n proxy.downResolver.add(as)\n\n if (remainderParts.length > 0) {\n const result = await wrapped.resolve<T>(remainderParts, options)\n return result\n }\n\n //console.log(`resolved: ${proxy.address} [${wrapped.constructor.name}] [${as.constructor.name}]`)\n return as\n }\n}\n","import { AbstractModuleProxy, ModuleProxyParams } from '@xyo-network/abstract-bridge'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { io as Client } from 'socket.io-client'\n\nexport type WebsocketModuleProxyParams = ModuleProxyParams & {\n client?: typeof Client\n maxPayloadSizeWarning?: number\n moduleUrl: string\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 async proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads: Payload[] = []): Promise<ModuleQueryResult> {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { client, moduleUrl, maxPayloadSizeWarning } = this.params\n const payloadSize = JSON.stringify([query, payloads]).length\n if (maxPayloadSizeWarning && payloadSize > maxPayloadSizeWarning) {\n this.logger?.warn(\n `Large targetQuery being sent: ${payloadSize} bytes [${this.address}][${this.moduleAddress}] [${query.schema}] [${payloads?.length}]`,\n )\n }\n await Promise.resolve()\n throw new Error('Unsupported')\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;ACAA,IAAAA,iBAAyB;AAGzB,IAAAC,0BAA+B;AAE/B,IAAAC,uBAAiE;;;ACF1D,IAAMC,8BAA8B;;;ACH3C,oBAAyB;AACzB,iBAAmC;AACnC,IAAAC,0BAA8F;AAC9F,qBAAwB;AACxB,mCAA4C;AAC5C,0BAA0H;;;ACL1H,6BAAuD;AAYhD,IAAMC,wBAAN,MAAMA,8BAMHC,2CAAAA;EAGR,MAAMC,kBAAmEC,OAAUC,WAAsB,CAAA,GAAgC;AArB3I;AAuBI,UAAM,EAAEC,QAAQC,WAAWC,sBAAqB,IAAK,KAAKC;AAC1D,UAAMC,cAAcC,KAAKC,UAAU;MAACR;MAAOC;KAAS,EAAEQ;AACtD,QAAIL,yBAAyBE,cAAcF,uBAAuB;AAChE,iBAAKM,WAAL,mBAAaC,KACX,iCAAiCL,WAAAA,WAAsB,KAAKM,OAAO,KAAK,KAAKC,aAAa,MAAMb,MAAMc,MAAM,MAAMb,qCAAUQ,MAAAA;IAEhI;AACA,UAAMM,QAAQC,QAAO;AACrB,UAAM,IAAIC,MAAM,aAAA;EAClB;AACF;AAfUnB;AANH,IAAMD,uBAAN;;;ADCA,IAAMqB,iCAAN,MAAMA,uCAEHC,qDAAAA;EACRC,UAAUC,SAAkB;AAC1B,WAAO,IAAIC,IAAID,SAAS,KAAKE,QAAQC,GAAG;EAC1C;EAEA,MAAeC,eACbC,IACAH,SAC8B;AAvBlC;AAwBI,UAAMI,eAAe,MAAM,MAAMF,eAAeC,IAAIH,OAAAA;AACpD,QAAII,cAAc;AAChB,aAAOA;IACT;AACA,QAAID,OAAO,KAAK;AACd,aAAO,CAAA;IACT;AACA,UAAME,UAAUF,GAAGG,MAAM,GAAA;AACzB,UAAMC,gBAAYC,wBAASH,QAAQI,MAAK,GAAI,MAAM,mBAAA;AAClD,UAAMC,gBAAgBH;AACtBC,oCAASG,sBAAUJ,SAAAA,GAAY,MAAM,2BAA2BA,SAAAA,EAAW;AAC3E,UAAMK,iBAAiBP,QAAQQ,KAAK,GAAA;AACpC,UAAMC,SAAqC;MACzCC,SAASC,uBAAQC,WAAU;MAC3BC,QAAQ;QAAEC,QAAQC;MAAmB;MACrCC,MAAM;MACNX;MACAb,WAAW,KAAKA,UAAUa,aAAAA,EAAeY;IAC3C;AAIA,UAAMC,QAAQ,IAAIC,qBAAoDV,MAAAA;AAEtE,QAAIS,OAAO;AACT,YAAME,QAAQ,MAAMF,MAAME,MAAK;AAC/B,UAAIA,OAAO;AACT,cAAMC,gBAAgBD,WAAME,KAAK,CAACC,YAAYA,QAAQT,WAAWU,yCAAAA,MAA3CJ,mBAAwFP;AAC9G,cAAMA,aAASV,wBACbiB,MAAME,KAAK,CAACC,YAAYA,QAAQT,WAAWO,YAAAA,GAC3C,MAAM,yBAAA;AAERH,cAAMO,UAAUZ,MAAAA;MAClB;IACF;AAEA,UAAMK,MAAMQ,MAAK;AAEjB,UAAMC,cAAUxB,4BAASyB,4CAAmBV,OAAOP,uBAAQC,WAAU,CAAA,GAAqB,MAAM,iCAAiCd,EAAAA,GAAK;AACtI,UAAM+B,SAAK1B,4BAAS2B,sCAAoBH,SAAS,CAAC,CAAA,GAAI,MAAM,+BAA+B7B,EAAAA,GAAK;AAChGoB,UAAMa,WAAWC,IAAIH,EAAAA;AACrBX,UAAMe,aAAaD,IAAIH,EAAAA;AAEvB,QAAItB,eAAe2B,SAAS,GAAG;AAC7B,YAAMC,SAAS,MAAMR,QAAQS,QAAW7B,gBAAgBZ,OAAAA;AACxD,aAAOwC;IACT;AAGA,WAAON;EACT;AACF;AA5DUtC;AAFH,IAAMD,gCAAN;;;;;;;;;;;;;;AFCA,IAAM+C,mBAAN,MAAMA,yBAA+DC,uCAAAA;EAIlEC;EAER,IAAaC,WAAW;AACtB,SAAKD,YAAY,KAAKA,aAAa,IAAIE,8BAA8B;MAAEC,QAAQ;MAAMC,KAAK,KAAKA;MAAKC,gBAAgB,KAAKC;IAAQ,CAAA;AACjI,WAAO,KAAKN;EACd;EAEA,IAAII,MAAM;AACR,eAAOG,yBAAS,KAAKC,OAAOJ,KAAK,MAAM,YAAA;EACzC;EAEA,MAAeK,gBAA2C;AACxD,WAAO,MAAMC,QAAQC,QAAQ,CAAA,CAAE;EACjC;EAESC,cAAcC,KAAaC,UAA0E;AAC5G,UAAM,IAAIC,MAAM,aAAA;EAClB;EAESC,iBAAwC;AAC/C,UAAM,IAAID,MAAM,aAAA;EAClB;EAEA,MAAeE,eAAiC;AAE9C,UAAM,EAAEC,eAAe,MAAMC,WAAU,IAAK,KAAKX;AACjD,QAAIU,gBAAgBC,YAAY;AAC9B,YAAM,KAAKV,cAAa;IAC1B;AACA,WAAO;EACT;EAESW,gBAAgBP,KAAaC,UAA4E;AAChH,UAAM,IAAIC,MAAM,aAAA;EAClB;AACF;AAvC4EhB;AAC1E,cADWD,kBACKuB,iBAAgB;EAACC;;AACjC,cAFWxB,kBAEJyB,yBAAwB,MAAM;AAFhC,IAAMzB,kBAAN;AAAMA,kBAAAA,aAAAA;MADZ0B,sCAAAA;GACY1B,eAAAA;","names":["import_assert","import_abstract_bridge","import_module_model","WebsocketBridgeConfigSchema","import_abstract_bridge","WebsocketModuleProxy","AbstractModuleProxy","proxyQueryHandler","query","payloads","client","moduleUrl","maxPayloadSizeWarning","params","payloadSize","JSON","stringify","length","logger","warn","address","moduleAddress","schema","Promise","resolve","Error","WebsocketBridgeModuleResolver","AbstractBridgeModuleResolver","moduleUrl","address","URL","options","url","resolveHandler","id","parentResult","idParts","split","firstPart","assertEx","shift","moduleAddress","isAddress","remainderParts","join","params","account","Account","randomSync","config","schema","ModuleConfigSchema","host","href","proxy","WebsocketModuleProxy","state","configSchema","find","payload","ConfigSchema","setConfig","start","wrapped","wrapModuleWithType","as","asModuleInstance","upResolver","add","downResolver","length","result","resolve","WebsocketBridge","AbstractBridge","_resolver","resolver","WebsocketBridgeModuleResolver","bridge","url","wrapperAccount","account","assertEx","config","discoverRoots","Promise","resolve","exposeHandler","_id","_options","Error","exposedHandler","startHandler","discoverRoot","legacyMode","unexposeHandler","configSchemas","WebsocketBridgeConfigSchema","maxPayloadSizeWarning","creatableModule"]}
|
package/dist/node/index.d.cts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA"}
|
package/dist/node/index.d.mts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA"}
|
package/dist/node/index.d.ts
CHANGED
package/dist/node/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA"}
|
package/dist/node/index.js
CHANGED
|
@@ -1,6 +1,155 @@
|
|
|
1
|
-
|
|
2
|
-
var
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
4
|
+
var __publicField = (obj, key, value) => {
|
|
5
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
6
|
+
return value;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
// src/Bridge.ts
|
|
10
|
+
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
11
|
+
import { AbstractBridge } from "@xyo-network/abstract-bridge";
|
|
12
|
+
import { creatableModule } from "@xyo-network/module-model";
|
|
13
|
+
|
|
14
|
+
// src/Config.ts
|
|
15
|
+
var WebsocketBridgeConfigSchema = "network.xyo.bridge.websocket.config";
|
|
16
|
+
|
|
17
|
+
// src/ModuleResolver.ts
|
|
18
|
+
import { assertEx } from "@xylabs/assert";
|
|
19
|
+
import { isAddress } from "@xylabs/hex";
|
|
20
|
+
import { AbstractBridgeModuleResolver, wrapModuleWithType } from "@xyo-network/abstract-bridge";
|
|
21
|
+
import { Account } from "@xyo-network/account";
|
|
22
|
+
import { ConfigSchema } from "@xyo-network/config-payload-plugin";
|
|
23
|
+
import { asModuleInstance, ModuleConfigSchema } from "@xyo-network/module-model";
|
|
24
|
+
|
|
25
|
+
// src/ModuleProxy/ModuleProxy.ts
|
|
26
|
+
import { AbstractModuleProxy } from "@xyo-network/abstract-bridge";
|
|
27
|
+
var _WebsocketModuleProxy = class _WebsocketModuleProxy extends AbstractModuleProxy {
|
|
28
|
+
async proxyQueryHandler(query, payloads = []) {
|
|
29
|
+
var _a;
|
|
30
|
+
const { client, moduleUrl, maxPayloadSizeWarning } = this.params;
|
|
31
|
+
const payloadSize = JSON.stringify([
|
|
32
|
+
query,
|
|
33
|
+
payloads
|
|
34
|
+
]).length;
|
|
35
|
+
if (maxPayloadSizeWarning && payloadSize > maxPayloadSizeWarning) {
|
|
36
|
+
(_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}]`);
|
|
37
|
+
}
|
|
38
|
+
await Promise.resolve();
|
|
39
|
+
throw new Error("Unsupported");
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
__name(_WebsocketModuleProxy, "WebsocketModuleProxy");
|
|
43
|
+
var WebsocketModuleProxy = _WebsocketModuleProxy;
|
|
44
|
+
|
|
45
|
+
// src/ModuleResolver.ts
|
|
46
|
+
var _WebsocketBridgeModuleResolver = class _WebsocketBridgeModuleResolver extends AbstractBridgeModuleResolver {
|
|
47
|
+
moduleUrl(address) {
|
|
48
|
+
return new URL(address, this.options.url);
|
|
49
|
+
}
|
|
50
|
+
async resolveHandler(id, options) {
|
|
51
|
+
var _a;
|
|
52
|
+
const parentResult = await super.resolveHandler(id, options);
|
|
53
|
+
if (parentResult) {
|
|
54
|
+
return parentResult;
|
|
55
|
+
}
|
|
56
|
+
if (id === "*") {
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
const idParts = id.split(":");
|
|
60
|
+
const firstPart = assertEx(idParts.shift(), () => "Missing firstPart");
|
|
61
|
+
const moduleAddress = firstPart;
|
|
62
|
+
assertEx(isAddress(firstPart), () => `Invalid module address: ${firstPart}`);
|
|
63
|
+
const remainderParts = idParts.join(":");
|
|
64
|
+
const params = {
|
|
65
|
+
account: Account.randomSync(),
|
|
66
|
+
config: {
|
|
67
|
+
schema: ModuleConfigSchema
|
|
68
|
+
},
|
|
69
|
+
host: this,
|
|
70
|
+
moduleAddress,
|
|
71
|
+
moduleUrl: this.moduleUrl(moduleAddress).href
|
|
72
|
+
};
|
|
73
|
+
const proxy = new WebsocketModuleProxy(params);
|
|
74
|
+
if (proxy) {
|
|
75
|
+
const state = await proxy.state();
|
|
76
|
+
if (state) {
|
|
77
|
+
const configSchema = (_a = state.find((payload) => payload.schema === ConfigSchema)) == null ? void 0 : _a.config;
|
|
78
|
+
const config = assertEx(state.find((payload) => payload.schema === configSchema), () => "Unable to locate config");
|
|
79
|
+
proxy.setConfig(config);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
await proxy.start();
|
|
83
|
+
const wrapped = assertEx(wrapModuleWithType(proxy, Account.randomSync()), () => `Failed to wrapModuleWithType [${id}]`);
|
|
84
|
+
const as = assertEx(asModuleInstance(wrapped, {}), () => `Failed to asModuleInstance [${id}]`);
|
|
85
|
+
proxy.upResolver.add(as);
|
|
86
|
+
proxy.downResolver.add(as);
|
|
87
|
+
if (remainderParts.length > 0) {
|
|
88
|
+
const result = await wrapped.resolve(remainderParts, options);
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
return as;
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
__name(_WebsocketBridgeModuleResolver, "WebsocketBridgeModuleResolver");
|
|
95
|
+
var WebsocketBridgeModuleResolver = _WebsocketBridgeModuleResolver;
|
|
96
|
+
|
|
97
|
+
// src/Bridge.ts
|
|
98
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
99
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
100
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
101
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
102
|
+
else
|
|
103
|
+
for (var i = decorators.length - 1; i >= 0; i--)
|
|
104
|
+
if (d = decorators[i])
|
|
105
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
106
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
107
|
+
}
|
|
108
|
+
__name(_ts_decorate, "_ts_decorate");
|
|
109
|
+
var _WebsocketBridge = class _WebsocketBridge extends AbstractBridge {
|
|
110
|
+
_resolver;
|
|
111
|
+
get resolver() {
|
|
112
|
+
this._resolver = this._resolver ?? new WebsocketBridgeModuleResolver({
|
|
113
|
+
bridge: this,
|
|
114
|
+
url: this.url,
|
|
115
|
+
wrapperAccount: this.account
|
|
116
|
+
});
|
|
117
|
+
return this._resolver;
|
|
118
|
+
}
|
|
119
|
+
get url() {
|
|
120
|
+
return assertEx2(this.config.url, () => "No Url Set");
|
|
121
|
+
}
|
|
122
|
+
async discoverRoots() {
|
|
123
|
+
return await Promise.resolve([]);
|
|
124
|
+
}
|
|
125
|
+
exposeHandler(_id, _options) {
|
|
126
|
+
throw new Error("Unsupported");
|
|
127
|
+
}
|
|
128
|
+
exposedHandler() {
|
|
129
|
+
throw new Error("Unsupported");
|
|
130
|
+
}
|
|
131
|
+
async startHandler() {
|
|
132
|
+
const { discoverRoot = true, legacyMode } = this.config;
|
|
133
|
+
if (discoverRoot || legacyMode) {
|
|
134
|
+
await this.discoverRoots();
|
|
135
|
+
}
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
unexposeHandler(_id, _options) {
|
|
139
|
+
throw new Error("Unsupported");
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
__name(_WebsocketBridge, "WebsocketBridge");
|
|
143
|
+
__publicField(_WebsocketBridge, "configSchemas", [
|
|
144
|
+
WebsocketBridgeConfigSchema
|
|
145
|
+
]);
|
|
146
|
+
__publicField(_WebsocketBridge, "maxPayloadSizeWarning", 256 * 256);
|
|
147
|
+
var WebsocketBridge = _WebsocketBridge;
|
|
148
|
+
WebsocketBridge = _ts_decorate([
|
|
149
|
+
creatableModule()
|
|
150
|
+
], WebsocketBridge);
|
|
3
151
|
export {
|
|
4
|
-
|
|
152
|
+
WebsocketBridge,
|
|
153
|
+
WebsocketBridgeConfigSchema
|
|
5
154
|
};
|
|
6
155
|
//# sourceMappingURL=index.js.map
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export const TODO = true\n"],"mappings":";AAAO,IAAMA,OAAO;","names":["TODO"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Bridge.ts","../../src/Config.ts","../../src/ModuleResolver.ts","../../src/ModuleProxy/ModuleProxy.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractBridge } from '@xyo-network/abstract-bridge'\nimport { BridgeExposeOptions, BridgeModule, BridgeParams, BridgeUnexposeOptions } from '@xyo-network/bridge-model'\nimport { AnyConfigSchema, creatableModule, ModuleInstance } from '@xyo-network/module-model'\n\nimport { WebsocketBridgeConfig, WebsocketBridgeConfigSchema } from './Config'\nimport { WebsocketBridgeModuleResolver } from './ModuleResolver'\n\nexport type WebsocketBridgeParams<TConfig extends AnyConfigSchema<WebsocketBridgeConfig> = AnyConfigSchema<WebsocketBridgeConfig>> =\n BridgeParams<TConfig>\n\n@creatableModule()\nexport class WebsocketBridge<TParams extends WebsocketBridgeParams> extends AbstractBridge<TParams> implements BridgeModule<TParams> {\n static override configSchemas = [WebsocketBridgeConfigSchema]\n static maxPayloadSizeWarning = 256 * 256\n\n private _resolver?: WebsocketBridgeModuleResolver\n\n override get resolver() {\n this._resolver = this._resolver ?? new WebsocketBridgeModuleResolver({ bridge: this, url: this.url, wrapperAccount: this.account })\n return this._resolver\n }\n\n get url() {\n return assertEx(this.config.url, () => 'No Url Set')\n }\n\n override async discoverRoots(): Promise<ModuleInstance[]> {\n return await Promise.resolve([])\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 // eslint-disable-next-line deprecation/deprecation\n const { discoverRoot = true, legacyMode } = this.config\n if (discoverRoot || legacyMode) {\n await this.discoverRoots()\n }\n return true\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'\nexport type WebsocketBridgeConfigSchema = typeof WebsocketBridgeConfigSchema\n\nexport type WebsocketBridgeConfig<TConfig extends EmptyObject = EmptyObject, TSchema extends string | void = void> = BridgeConfig<\n {\n discoverRoot?: boolean\n /** @deprecated Do not use this for any new development */\n legacyMode?: boolean\n schema: WebsocketBridgeConfigSchema\n url?: string\n } & TConfig,\n TSchema extends string ? TSchema : WebsocketBridgeConfigSchema\n>\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { AbstractBridgeModuleResolver, BridgeModuleResolverOptions, wrapModuleWithType } from '@xyo-network/abstract-bridge'\nimport { Account } from '@xyo-network/account'\nimport { ConfigPayload, ConfigSchema } from '@xyo-network/config-payload-plugin'\nimport { asModuleInstance, ModuleConfig, ModuleConfigSchema, ModuleFilterOptions, ModuleIdentifier, ModuleInstance } from '@xyo-network/module-model'\n\nimport { WebsocketModuleProxy, WebsocketModuleProxyParams } from './ModuleProxy'\n\nexport interface WebsocketBridgeModuleResolverOptions extends BridgeModuleResolverOptions {\n url: string\n}\n\nexport class WebsocketBridgeModuleResolver<\n T extends WebsocketBridgeModuleResolverOptions = WebsocketBridgeModuleResolverOptions,\n> extends AbstractBridgeModuleResolver<T> {\n moduleUrl(address: Address) {\n return new URL(address, this.options.url)\n }\n\n override async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\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 firstPart = assertEx(idParts.shift(), () => 'Missing firstPart')\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 moduleUrl: this.moduleUrl(moduleAddress).href,\n }\n\n //console.log(`creating WebsocketProxy [${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 as = assertEx(asModuleInstance<T>(wrapped, {}), () => `Failed to asModuleInstance [${id}]`)\n proxy.upResolver.add(as)\n proxy.downResolver.add(as)\n\n if (remainderParts.length > 0) {\n const result = await wrapped.resolve<T>(remainderParts, options)\n return result\n }\n\n //console.log(`resolved: ${proxy.address} [${wrapped.constructor.name}] [${as.constructor.name}]`)\n return as\n }\n}\n","import { AbstractModuleProxy, ModuleProxyParams } from '@xyo-network/abstract-bridge'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { io as Client } from 'socket.io-client'\n\nexport type WebsocketModuleProxyParams = ModuleProxyParams & {\n client?: typeof Client\n maxPayloadSizeWarning?: number\n moduleUrl: string\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 async proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads: Payload[] = []): Promise<ModuleQueryResult> {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { client, moduleUrl, maxPayloadSizeWarning } = this.params\n const payloadSize = JSON.stringify([query, payloads]).length\n if (maxPayloadSizeWarning && payloadSize > maxPayloadSizeWarning) {\n this.logger?.warn(\n `Large targetQuery being sent: ${payloadSize} bytes [${this.address}][${this.moduleAddress}] [${query.schema}] [${payloads?.length}]`,\n )\n }\n await Promise.resolve()\n throw new Error('Unsupported')\n }\n}\n"],"mappings":"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","names":["assertEx","AbstractBridge","creatableModule","WebsocketBridgeConfigSchema","assertEx","isAddress","AbstractBridgeModuleResolver","wrapModuleWithType","Account","ConfigSchema","asModuleInstance","ModuleConfigSchema","AbstractModuleProxy","WebsocketModuleProxy","AbstractModuleProxy","proxyQueryHandler","query","payloads","client","moduleUrl","maxPayloadSizeWarning","params","payloadSize","JSON","stringify","length","logger","warn","address","moduleAddress","schema","Promise","resolve","Error","WebsocketBridgeModuleResolver","AbstractBridgeModuleResolver","moduleUrl","address","URL","options","url","resolveHandler","id","parentResult","idParts","split","firstPart","assertEx","shift","moduleAddress","isAddress","remainderParts","join","params","account","Account","randomSync","config","schema","ModuleConfigSchema","host","href","proxy","WebsocketModuleProxy","state","configSchema","find","payload","ConfigSchema","setConfig","start","wrapped","wrapModuleWithType","as","asModuleInstance","upResolver","add","downResolver","length","result","resolve","WebsocketBridge","AbstractBridge","_resolver","resolver","WebsocketBridgeModuleResolver","bridge","url","wrapperAccount","account","assertEx","config","discoverRoots","Promise","resolve","exposeHandler","_id","_options","Error","exposedHandler","startHandler","discoverRoot","legacyMode","unexposeHandler","configSchemas","WebsocketBridgeConfigSchema","maxPayloadSizeWarning","creatableModule"]}
|
package/package.json
CHANGED
|
@@ -10,12 +10,29 @@
|
|
|
10
10
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
+
"@xylabs/assert": "^3.0.25",
|
|
13
14
|
"@xylabs/hex": "^3.0.25",
|
|
14
|
-
"
|
|
15
|
+
"@xylabs/object": "^3.0.25",
|
|
16
|
+
"@xylabs/promise": "^3.0.25",
|
|
17
|
+
"@xyo-network/abstract-bridge": "~2.94.7",
|
|
18
|
+
"@xyo-network/account": "~2.94.7",
|
|
19
|
+
"@xyo-network/boundwitness-model": "~2.94.7",
|
|
20
|
+
"@xyo-network/bridge-model": "~2.94.7",
|
|
21
|
+
"@xyo-network/config-payload-plugin": "~2.94.7",
|
|
22
|
+
"@xyo-network/module-model": "~2.94.7",
|
|
23
|
+
"@xyo-network/payload-model": "~2.94.7",
|
|
24
|
+
"socket.io": "^4.7.5",
|
|
25
|
+
"socket.io-client": "^4.7.5"
|
|
15
26
|
},
|
|
16
27
|
"devDependencies": {
|
|
17
28
|
"@xylabs/ts-scripts-yarn3": "^3.5.2",
|
|
18
29
|
"@xylabs/tsconfig": "^3.5.2",
|
|
30
|
+
"@xyo-network/account": "~2.94.7",
|
|
31
|
+
"@xyo-network/archivist-model": "~2.94.7",
|
|
32
|
+
"@xyo-network/node-memory": "~2.94.7",
|
|
33
|
+
"@xyo-network/node-model": "~2.94.7",
|
|
34
|
+
"@xyo-network/payload-builder": "~2.94.7",
|
|
35
|
+
"@xyo-network/payload-wrapper": "~2.94.7",
|
|
19
36
|
"socket.io-client": "^4.7.5",
|
|
20
37
|
"typescript": "^5.4.3"
|
|
21
38
|
},
|
|
@@ -58,6 +75,6 @@
|
|
|
58
75
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
|
|
59
76
|
},
|
|
60
77
|
"sideEffects": false,
|
|
61
|
-
"version": "2.94.
|
|
78
|
+
"version": "2.94.6",
|
|
62
79
|
"type": "module"
|
|
63
80
|
}
|
package/src/Bridge.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { assertEx } from '@xylabs/assert'
|
|
2
|
+
import { Address } from '@xylabs/hex'
|
|
3
|
+
import { Promisable } from '@xylabs/promise'
|
|
4
|
+
import { AbstractBridge } from '@xyo-network/abstract-bridge'
|
|
5
|
+
import { BridgeExposeOptions, BridgeModule, BridgeParams, BridgeUnexposeOptions } from '@xyo-network/bridge-model'
|
|
6
|
+
import { AnyConfigSchema, creatableModule, ModuleInstance } from '@xyo-network/module-model'
|
|
7
|
+
|
|
8
|
+
import { WebsocketBridgeConfig, WebsocketBridgeConfigSchema } from './Config'
|
|
9
|
+
import { WebsocketBridgeModuleResolver } from './ModuleResolver'
|
|
10
|
+
|
|
11
|
+
export type WebsocketBridgeParams<TConfig extends AnyConfigSchema<WebsocketBridgeConfig> = AnyConfigSchema<WebsocketBridgeConfig>> =
|
|
12
|
+
BridgeParams<TConfig>
|
|
13
|
+
|
|
14
|
+
@creatableModule()
|
|
15
|
+
export class WebsocketBridge<TParams extends WebsocketBridgeParams> extends AbstractBridge<TParams> implements BridgeModule<TParams> {
|
|
16
|
+
static override configSchemas = [WebsocketBridgeConfigSchema]
|
|
17
|
+
static maxPayloadSizeWarning = 256 * 256
|
|
18
|
+
|
|
19
|
+
private _resolver?: WebsocketBridgeModuleResolver
|
|
20
|
+
|
|
21
|
+
override get resolver() {
|
|
22
|
+
this._resolver = this._resolver ?? new WebsocketBridgeModuleResolver({ bridge: this, url: this.url, wrapperAccount: this.account })
|
|
23
|
+
return this._resolver
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
get url() {
|
|
27
|
+
return assertEx(this.config.url, () => 'No Url Set')
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
override async discoverRoots(): Promise<ModuleInstance[]> {
|
|
31
|
+
return await Promise.resolve([])
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
override exposeHandler(_id: string, _options?: BridgeExposeOptions | undefined): Promisable<ModuleInstance[]> {
|
|
35
|
+
throw new Error('Unsupported')
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
override exposedHandler(): Promisable<Address[]> {
|
|
39
|
+
throw new Error('Unsupported')
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
override async startHandler(): Promise<boolean> {
|
|
43
|
+
// eslint-disable-next-line deprecation/deprecation
|
|
44
|
+
const { discoverRoot = true, legacyMode } = this.config
|
|
45
|
+
if (discoverRoot || legacyMode) {
|
|
46
|
+
await this.discoverRoots()
|
|
47
|
+
}
|
|
48
|
+
return true
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
override unexposeHandler(_id: string, _options?: BridgeUnexposeOptions | undefined): Promisable<ModuleInstance[]> {
|
|
52
|
+
throw new Error('Unsupported')
|
|
53
|
+
}
|
|
54
|
+
}
|
package/src/Config.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { EmptyObject } from '@xylabs/object'
|
|
2
|
+
import { BridgeConfig } from '@xyo-network/bridge-model'
|
|
3
|
+
|
|
4
|
+
export const WebsocketBridgeConfigSchema = 'network.xyo.bridge.websocket.config'
|
|
5
|
+
export type WebsocketBridgeConfigSchema = typeof WebsocketBridgeConfigSchema
|
|
6
|
+
|
|
7
|
+
export type WebsocketBridgeConfig<TConfig extends EmptyObject = EmptyObject, TSchema extends string | void = void> = BridgeConfig<
|
|
8
|
+
{
|
|
9
|
+
discoverRoot?: boolean
|
|
10
|
+
/** @deprecated Do not use this for any new development */
|
|
11
|
+
legacyMode?: boolean
|
|
12
|
+
schema: WebsocketBridgeConfigSchema
|
|
13
|
+
url?: string
|
|
14
|
+
} & TConfig,
|
|
15
|
+
TSchema extends string ? TSchema : WebsocketBridgeConfigSchema
|
|
16
|
+
>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { AbstractModuleProxy, ModuleProxyParams } from '@xyo-network/abstract-bridge'
|
|
2
|
+
import { QueryBoundWitness } from '@xyo-network/boundwitness-model'
|
|
3
|
+
import { ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model'
|
|
4
|
+
import { Payload } from '@xyo-network/payload-model'
|
|
5
|
+
import { io as Client } from 'socket.io-client'
|
|
6
|
+
|
|
7
|
+
export type WebsocketModuleProxyParams = ModuleProxyParams & {
|
|
8
|
+
client?: typeof Client
|
|
9
|
+
maxPayloadSizeWarning?: number
|
|
10
|
+
moduleUrl: string
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export class WebsocketModuleProxy<
|
|
14
|
+
TWrappedModule extends ModuleInstance = ModuleInstance,
|
|
15
|
+
TParams extends Omit<WebsocketModuleProxyParams, 'config'> & { config: TWrappedModule['config'] } = Omit<WebsocketModuleProxyParams, 'config'> & {
|
|
16
|
+
config: TWrappedModule['config']
|
|
17
|
+
},
|
|
18
|
+
>
|
|
19
|
+
extends AbstractModuleProxy<TWrappedModule, TParams>
|
|
20
|
+
implements ModuleInstance<TParams, TWrappedModule['eventData']>
|
|
21
|
+
{
|
|
22
|
+
async proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads: Payload[] = []): Promise<ModuleQueryResult> {
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
24
|
+
const { client, moduleUrl, maxPayloadSizeWarning } = this.params
|
|
25
|
+
const payloadSize = JSON.stringify([query, payloads]).length
|
|
26
|
+
if (maxPayloadSizeWarning && payloadSize > maxPayloadSizeWarning) {
|
|
27
|
+
this.logger?.warn(
|
|
28
|
+
`Large targetQuery being sent: ${payloadSize} bytes [${this.address}][${this.moduleAddress}] [${query.schema}] [${payloads?.length}]`,
|
|
29
|
+
)
|
|
30
|
+
}
|
|
31
|
+
await Promise.resolve()
|
|
32
|
+
throw new Error('Unsupported')
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ModuleProxy'
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { assertEx } from '@xylabs/assert'
|
|
2
|
+
import { Address, isAddress } from '@xylabs/hex'
|
|
3
|
+
import { AbstractBridgeModuleResolver, BridgeModuleResolverOptions, wrapModuleWithType } from '@xyo-network/abstract-bridge'
|
|
4
|
+
import { Account } from '@xyo-network/account'
|
|
5
|
+
import { ConfigPayload, ConfigSchema } from '@xyo-network/config-payload-plugin'
|
|
6
|
+
import { asModuleInstance, ModuleConfig, ModuleConfigSchema, ModuleFilterOptions, ModuleIdentifier, ModuleInstance } from '@xyo-network/module-model'
|
|
7
|
+
|
|
8
|
+
import { WebsocketModuleProxy, WebsocketModuleProxyParams } from './ModuleProxy'
|
|
9
|
+
|
|
10
|
+
export interface WebsocketBridgeModuleResolverOptions extends BridgeModuleResolverOptions {
|
|
11
|
+
url: string
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export class WebsocketBridgeModuleResolver<
|
|
15
|
+
T extends WebsocketBridgeModuleResolverOptions = WebsocketBridgeModuleResolverOptions,
|
|
16
|
+
> extends AbstractBridgeModuleResolver<T> {
|
|
17
|
+
moduleUrl(address: Address) {
|
|
18
|
+
return new URL(address, this.options.url)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
override async resolveHandler<T extends ModuleInstance = ModuleInstance>(
|
|
22
|
+
id: ModuleIdentifier,
|
|
23
|
+
options?: ModuleFilterOptions<T>,
|
|
24
|
+
): Promise<T | T[] | undefined> {
|
|
25
|
+
const parentResult = await super.resolveHandler(id, options)
|
|
26
|
+
if (parentResult) {
|
|
27
|
+
return parentResult
|
|
28
|
+
}
|
|
29
|
+
if (id === '*') {
|
|
30
|
+
return []
|
|
31
|
+
}
|
|
32
|
+
const idParts = id.split(':')
|
|
33
|
+
const firstPart = assertEx(idParts.shift(), () => 'Missing firstPart')
|
|
34
|
+
const moduleAddress = firstPart as Address
|
|
35
|
+
assertEx(isAddress(firstPart), () => `Invalid module address: ${firstPart}`)
|
|
36
|
+
const remainderParts = idParts.join(':')
|
|
37
|
+
const params: WebsocketModuleProxyParams = {
|
|
38
|
+
account: Account.randomSync(),
|
|
39
|
+
config: { schema: ModuleConfigSchema },
|
|
40
|
+
host: this,
|
|
41
|
+
moduleAddress,
|
|
42
|
+
moduleUrl: this.moduleUrl(moduleAddress).href,
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
//console.log(`creating WebsocketProxy [${moduleAddress}] ${id}`)
|
|
46
|
+
|
|
47
|
+
const proxy = new WebsocketModuleProxy<T, WebsocketModuleProxyParams>(params)
|
|
48
|
+
//calling state here to get the config
|
|
49
|
+
if (proxy) {
|
|
50
|
+
const state = await proxy.state()
|
|
51
|
+
if (state) {
|
|
52
|
+
const configSchema = (state.find((payload) => payload.schema === ConfigSchema) as ConfigPayload | undefined)?.config
|
|
53
|
+
const config = assertEx(
|
|
54
|
+
state.find((payload) => payload.schema === configSchema),
|
|
55
|
+
() => 'Unable to locate config',
|
|
56
|
+
) as ModuleConfig
|
|
57
|
+
proxy.setConfig(config)
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
await proxy.start()
|
|
62
|
+
|
|
63
|
+
const wrapped = assertEx(wrapModuleWithType(proxy, Account.randomSync()) as unknown as T, () => `Failed to wrapModuleWithType [${id}]`)
|
|
64
|
+
const as = assertEx(asModuleInstance<T>(wrapped, {}), () => `Failed to asModuleInstance [${id}]`)
|
|
65
|
+
proxy.upResolver.add(as)
|
|
66
|
+
proxy.downResolver.add(as)
|
|
67
|
+
|
|
68
|
+
if (remainderParts.length > 0) {
|
|
69
|
+
const result = await wrapped.resolve<T>(remainderParts, options)
|
|
70
|
+
return result
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
//console.log(`resolved: ${proxy.address} [${wrapped.constructor.name}] [${as.constructor.name}]`)
|
|
74
|
+
return as
|
|
75
|
+
}
|
|
76
|
+
}
|