@dxos/websocket-rpc 0.1.56-main.e47dfd1 → 0.1.56-main.ed2f871
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.
|
@@ -81,8 +81,7 @@ var WebsocketRpcClient = class {
|
|
|
81
81
|
await this.close();
|
|
82
82
|
};
|
|
83
83
|
this._socket.onerror = (event) => {
|
|
84
|
-
|
|
85
|
-
log.error((_a = event.message) != null ? _a : "Socket error", {
|
|
84
|
+
log.error(event.message ?? "Socket error", {
|
|
86
85
|
url: this._params.url
|
|
87
86
|
}, {
|
|
88
87
|
F: __dxlog_file,
|
|
@@ -90,16 +89,15 @@ var WebsocketRpcClient = class {
|
|
|
90
89
|
S: this,
|
|
91
90
|
C: (f, a) => f(...a)
|
|
92
91
|
});
|
|
93
|
-
const error =
|
|
92
|
+
const error = event.error ?? new Error(event.message);
|
|
94
93
|
this.error.emit(error);
|
|
95
94
|
this._connectTrigger.throw(error);
|
|
96
95
|
};
|
|
97
96
|
await this._connectTrigger.wait();
|
|
98
97
|
}
|
|
99
98
|
async close() {
|
|
100
|
-
var _a, _b;
|
|
101
99
|
try {
|
|
102
|
-
await
|
|
100
|
+
await this._rpc?.close();
|
|
103
101
|
} catch (err) {
|
|
104
102
|
log.catch(err, void 0, {
|
|
105
103
|
F: __dxlog_file,
|
|
@@ -108,7 +106,7 @@ var WebsocketRpcClient = class {
|
|
|
108
106
|
C: (f, a) => f(...a)
|
|
109
107
|
});
|
|
110
108
|
}
|
|
111
|
-
|
|
109
|
+
this._socket?.close();
|
|
112
110
|
}
|
|
113
111
|
get rpc() {
|
|
114
112
|
return this._rpc.rpc;
|
|
@@ -162,16 +160,15 @@ var WebsocketRpcServer = class {
|
|
|
162
160
|
}
|
|
163
161
|
});
|
|
164
162
|
await rpc.open();
|
|
165
|
-
await
|
|
163
|
+
await onOpen?.(rpc);
|
|
166
164
|
socket.onclose = async () => {
|
|
167
|
-
await
|
|
165
|
+
await onClose?.(rpc);
|
|
168
166
|
await rpc.close();
|
|
169
167
|
};
|
|
170
168
|
});
|
|
171
169
|
}
|
|
172
170
|
async close() {
|
|
173
|
-
|
|
174
|
-
(_a = this._server) == null ? void 0 : _a.close();
|
|
171
|
+
this._server?.close();
|
|
175
172
|
}
|
|
176
173
|
};
|
|
177
174
|
export {
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/client.ts", "../../../src/server.ts"],
|
|
4
4
|
"sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport WebSocket from 'isomorphic-ws';\n\nimport { Event, Trigger } from '@dxos/async';\nimport { log, logInfo } from '@dxos/log';\nimport { createProtoRpcPeer, ProtoRpcPeer, ProtoRpcPeerOptions } from '@dxos/rpc';\n\nexport type WebsocketRpcClientParams<C, S> = {\n url: string;\n} & Pick<ProtoRpcPeerOptions<C, S>, 'requested' | 'exposed' | 'handlers'>;\n\nexport class WebsocketRpcClient<C, S> {\n private _socket?: WebSocket;\n private _rpc?: ProtoRpcPeer<C>;\n private readonly _connectTrigger = new Trigger();\n\n readonly connected = new Event();\n readonly disconnected = new Event();\n readonly error = new Event<Error>();\n\n // prettier-ignore\n constructor(\n private readonly _params: WebsocketRpcClientParams<C, S>\n ) {\n\n this._rpc = createProtoRpcPeer({\n requested: this._params.requested,\n exposed: this._params.exposed,\n handlers: this._params.handlers,\n port: {\n send: (msg) => {\n this._socket!.send(msg);\n },\n subscribe: (cb) => {\n this._socket!.onmessage = async (msg: WebSocket.MessageEvent) => {\n if (typeof Blob !== 'undefined' && msg.data instanceof Blob) {\n cb(Buffer.from(await msg.data.arrayBuffer()));\n } else {\n cb(msg.data as any);\n }\n };\n }\n }\n });\n }\n\n @logInfo\n get url() {\n return this._params.url;\n }\n\n async open() {\n this._socket = new WebSocket(this._params.url);\n\n this._socket.onopen = async () => {\n log('Socket open');\n try {\n await this._rpc!.open();\n log(`RPC open ${this._params.url}`);\n this.connected.emit();\n this._connectTrigger.wake();\n } catch (err: any) {\n this.error.emit(err);\n }\n };\n\n this._socket.onclose = async () => {\n log(`Disconnected ${this._params.url}`);\n this.disconnected.emit();\n await this.close();\n };\n\n this._socket.onerror = (event: WebSocket.ErrorEvent) => {\n log.error(event.message ?? 'Socket error', { url: this._params.url });\n const error = event.error ?? new Error(event.message);\n this.error.emit(error);\n this._connectTrigger.throw(error);\n };\n\n await this._connectTrigger.wait();\n }\n\n async close() {\n try {\n await this._rpc?.close();\n } catch (err) {\n log.catch(err);\n }\n this._socket?.close();\n }\n\n get rpc() {\n return this._rpc!.rpc;\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { IncomingMessage } from 'http';\nimport WebSocket from 'isomorphic-ws';\n\nimport { log } from '@dxos/log';\nimport { createProtoRpcPeer, ProtoRpcPeer, ProtoRpcPeerOptions } from '@dxos/rpc';\n\nexport type ConnectionInfo = {\n request: IncomingMessage;\n};\n\nexport type ConnectionHandler<C, S> = {\n onOpen?: (rpc: ProtoRpcPeer<C>) => Promise<void>;\n onClose?: (rpc: ProtoRpcPeer<C>) => Promise<void>;\n} & Pick<ProtoRpcPeerOptions<C, S>, 'requested' | 'exposed' | 'handlers'>;\n\nexport type WebsocketRpcServerParams<C, S> = {\n onConnection: (info: ConnectionInfo) => Promise<ConnectionHandler<C, S>>;\n} & WebSocket.ServerOptions;\n\nexport class WebsocketRpcServer<C, S> {\n private _server?: WebSocket.Server;\n\n constructor(private readonly _params: WebsocketRpcServerParams<C, S>) {}\n\n async open() {\n this._server = new WebSocket.Server({\n ...this._params,\n });\n this._server.on('connection', async (socket, request) => {\n log('connection', { request });\n const info: ConnectionInfo = {\n request,\n };\n const { onOpen, onClose, ...options } = await this._params.onConnection(info);\n const rpc = createProtoRpcPeer<C, S>({\n ...options,\n port: {\n send: (msg) => {\n socket.send(msg);\n },\n subscribe: (cb) => {\n socket.onmessage = async (msg: WebSocket.MessageEvent) => {\n if (typeof Blob !== 'undefined' && msg.data instanceof Blob) {\n cb(Buffer.from(await msg.data.arrayBuffer()));\n } else {\n cb(msg.data as any);\n }\n };\n },\n },\n });\n\n await rpc.open();\n await onOpen?.(rpc);\n socket.onclose = async () => {\n await onClose?.(rpc);\n await rpc.close();\n };\n });\n }\n\n async close() {\n this._server?.close();\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;AAIA,OAAOA,eAAe;AAEtB,SAASC,OAAOC,eAAe;AAC/B,SAASC,KAAKC,eAAe;AAC7B,SAASC,0BAA6D;;;;;;;;;;;;AAM/D,IAAMC,qBAAN,MAAMA;;EAUXC,YACmBC,SACjB;mBADiBA;SARFC,kBAAkB,IAAIP,QAAAA;SAE9BQ,YAAY,IAAIT,MAAAA;SAChBU,eAAe,IAAIV,MAAAA;SACnBW,QAAQ,IAAIX,MAAAA;AAOnB,SAAKY,OAAOR,mBAAmB;MAC7BS,WAAW,KAAKN,QAAQM;MACxBC,SAAS,KAAKP,QAAQO;MACtBC,UAAU,KAAKR,QAAQQ;MACvBC,MAAM;QACJC,MAAM,CAACC,QAAAA;AACL,eAAKC,QAASF,KAAKC,GAAAA;QACrB;QACAE,WAAW,CAACC,OAAAA;AACV,eAAKF,QAASG,YAAY,OAAOJ,QAAAA;AAC/B,gBAAI,OAAOK,SAAS,eAAeL,IAAIM,gBAAgBD,MAAM;AAC3DF,iBAAGI,OAAOC,KAAK,MAAMR,IAAIM,KAAKG,YAAW,CAAA,CAAA;YAC3C,OAAO;AACLN,iBAAGH,IAAIM,IAAI;YACb;UACF;QACF;MACF;IACF,CAAA;EACF;EAEA,IACII,MAAM;AACR,WAAO,KAAKrB,QAAQqB;EACtB;EAEA,MAAMC,OAAO;AACX,SAAKV,UAAU,IAAIpB,UAAU,KAAKQ,QAAQqB,GAAG;AAE7C,SAAKT,QAAQW,SAAS,YAAA;AACpB5B,UAAI,eAAA,QAAA;;;;;;AACJ,UAAI;AACF,cAAM,KAAKU,KAAMiB,KAAI;AACrB3B,YAAI,YAAY,KAAKK,QAAQqB,
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["WebSocket", "Event", "Trigger", "log", "logInfo", "createProtoRpcPeer", "WebsocketRpcClient", "constructor", "_params", "_connectTrigger", "connected", "disconnected", "error", "_rpc", "requested", "exposed", "handlers", "port", "send", "msg", "_socket", "subscribe", "cb", "onmessage", "Blob", "data", "Buffer", "from", "arrayBuffer", "url", "open", "onopen", "emit", "wake", "err", "onclose", "close", "onerror", "event", "message", "Error", "throw", "wait", "catch", "rpc", "WebSocket", "log", "createProtoRpcPeer", "WebsocketRpcServer", "constructor", "_params", "open", "_server", "Server", "on", "socket", "request", "info", "onOpen", "onClose", "options", "onConnection", "rpc", "port", "send", "msg", "subscribe", "cb", "onmessage", "Blob", "data", "Buffer", "from", "arrayBuffer", "onclose", "close"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"packages/core/mesh/websocket-rpc/src/client.ts":{"bytes":10873,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true}]},"packages/core/mesh/websocket-rpc/src/server.ts":{"bytes":6350,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true}]},"packages/core/mesh/websocket-rpc/src/index.ts":{"bytes":552,"imports":[{"path":"packages/core/mesh/websocket-rpc/src/client.ts","kind":"import-statement","original":"./client"},{"path":"packages/core/mesh/websocket-rpc/src/server.ts","kind":"import-statement","original":"./server"}]}},"outputs":{"packages/core/mesh/websocket-rpc/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":
|
|
1
|
+
{"inputs":{"packages/core/mesh/websocket-rpc/src/client.ts":{"bytes":10873,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true}],"format":"esm"},"packages/core/mesh/websocket-rpc/src/server.ts":{"bytes":6350,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true}],"format":"esm"},"packages/core/mesh/websocket-rpc/src/index.ts":{"bytes":552,"imports":[{"path":"packages/core/mesh/websocket-rpc/src/client.ts","kind":"import-statement","original":"./client"},{"path":"packages/core/mesh/websocket-rpc/src/server.ts","kind":"import-statement","original":"./server"}],"format":"esm"}},"outputs":{"packages/core/mesh/websocket-rpc/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":8038},"packages/core/mesh/websocket-rpc/dist/lib/browser/index.mjs":{"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true},{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true}],"exports":["WebsocketRpcClient","WebsocketRpcServer"],"entryPoint":"packages/core/mesh/websocket-rpc/src/index.ts","inputs":{"packages/core/mesh/websocket-rpc/src/client.ts":{"bytesInOutput":3291},"packages/core/mesh/websocket-rpc/src/index.ts":{"bytesInOutput":0},"packages/core/mesh/websocket-rpc/src/server.ts":{"bytesInOutput":1474}},"bytes":4990}}}
|
package/dist/lib/node/index.cjs
CHANGED
|
@@ -116,8 +116,7 @@ var WebsocketRpcClient = class {
|
|
|
116
116
|
await this.close();
|
|
117
117
|
};
|
|
118
118
|
this._socket.onerror = (event) => {
|
|
119
|
-
|
|
120
|
-
import_log.log.error((_a = event.message) != null ? _a : "Socket error", {
|
|
119
|
+
import_log.log.error(event.message ?? "Socket error", {
|
|
121
120
|
url: this._params.url
|
|
122
121
|
}, {
|
|
123
122
|
F: __dxlog_file,
|
|
@@ -125,16 +124,15 @@ var WebsocketRpcClient = class {
|
|
|
125
124
|
S: this,
|
|
126
125
|
C: (f, a) => f(...a)
|
|
127
126
|
});
|
|
128
|
-
const error =
|
|
127
|
+
const error = event.error ?? new Error(event.message);
|
|
129
128
|
this.error.emit(error);
|
|
130
129
|
this._connectTrigger.throw(error);
|
|
131
130
|
};
|
|
132
131
|
await this._connectTrigger.wait();
|
|
133
132
|
}
|
|
134
133
|
async close() {
|
|
135
|
-
var _a, _b;
|
|
136
134
|
try {
|
|
137
|
-
await
|
|
135
|
+
await this._rpc?.close();
|
|
138
136
|
} catch (err) {
|
|
139
137
|
import_log.log.catch(err, void 0, {
|
|
140
138
|
F: __dxlog_file,
|
|
@@ -143,7 +141,7 @@ var WebsocketRpcClient = class {
|
|
|
143
141
|
C: (f, a) => f(...a)
|
|
144
142
|
});
|
|
145
143
|
}
|
|
146
|
-
|
|
144
|
+
this._socket?.close();
|
|
147
145
|
}
|
|
148
146
|
get rpc() {
|
|
149
147
|
return this._rpc.rpc;
|
|
@@ -197,16 +195,15 @@ var WebsocketRpcServer = class {
|
|
|
197
195
|
}
|
|
198
196
|
});
|
|
199
197
|
await rpc.open();
|
|
200
|
-
await
|
|
198
|
+
await onOpen?.(rpc);
|
|
201
199
|
socket.onclose = async () => {
|
|
202
|
-
await
|
|
200
|
+
await onClose?.(rpc);
|
|
203
201
|
await rpc.close();
|
|
204
202
|
};
|
|
205
203
|
});
|
|
206
204
|
}
|
|
207
205
|
async close() {
|
|
208
|
-
|
|
209
|
-
(_a = this._server) == null ? void 0 : _a.close();
|
|
206
|
+
this._server?.close();
|
|
210
207
|
}
|
|
211
208
|
};
|
|
212
209
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/index.ts", "../../../src/client.ts", "../../../src/server.ts"],
|
|
4
4
|
"sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nexport * from './client';\nexport * from './server';\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport WebSocket from 'isomorphic-ws';\n\nimport { Event, Trigger } from '@dxos/async';\nimport { log, logInfo } from '@dxos/log';\nimport { createProtoRpcPeer, ProtoRpcPeer, ProtoRpcPeerOptions } from '@dxos/rpc';\n\nexport type WebsocketRpcClientParams<C, S> = {\n url: string;\n} & Pick<ProtoRpcPeerOptions<C, S>, 'requested' | 'exposed' | 'handlers'>;\n\nexport class WebsocketRpcClient<C, S> {\n private _socket?: WebSocket;\n private _rpc?: ProtoRpcPeer<C>;\n private readonly _connectTrigger = new Trigger();\n\n readonly connected = new Event();\n readonly disconnected = new Event();\n readonly error = new Event<Error>();\n\n // prettier-ignore\n constructor(\n private readonly _params: WebsocketRpcClientParams<C, S>\n ) {\n\n this._rpc = createProtoRpcPeer({\n requested: this._params.requested,\n exposed: this._params.exposed,\n handlers: this._params.handlers,\n port: {\n send: (msg) => {\n this._socket!.send(msg);\n },\n subscribe: (cb) => {\n this._socket!.onmessage = async (msg: WebSocket.MessageEvent) => {\n if (typeof Blob !== 'undefined' && msg.data instanceof Blob) {\n cb(Buffer.from(await msg.data.arrayBuffer()));\n } else {\n cb(msg.data as any);\n }\n };\n }\n }\n });\n }\n\n @logInfo\n get url() {\n return this._params.url;\n }\n\n async open() {\n this._socket = new WebSocket(this._params.url);\n\n this._socket.onopen = async () => {\n log('Socket open');\n try {\n await this._rpc!.open();\n log(`RPC open ${this._params.url}`);\n this.connected.emit();\n this._connectTrigger.wake();\n } catch (err: any) {\n this.error.emit(err);\n }\n };\n\n this._socket.onclose = async () => {\n log(`Disconnected ${this._params.url}`);\n this.disconnected.emit();\n await this.close();\n };\n\n this._socket.onerror = (event: WebSocket.ErrorEvent) => {\n log.error(event.message ?? 'Socket error', { url: this._params.url });\n const error = event.error ?? new Error(event.message);\n this.error.emit(error);\n this._connectTrigger.throw(error);\n };\n\n await this._connectTrigger.wait();\n }\n\n async close() {\n try {\n await this._rpc?.close();\n } catch (err) {\n log.catch(err);\n }\n this._socket?.close();\n }\n\n get rpc() {\n return this._rpc!.rpc;\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { IncomingMessage } from 'http';\nimport WebSocket from 'isomorphic-ws';\n\nimport { log } from '@dxos/log';\nimport { createProtoRpcPeer, ProtoRpcPeer, ProtoRpcPeerOptions } from '@dxos/rpc';\n\nexport type ConnectionInfo = {\n request: IncomingMessage;\n};\n\nexport type ConnectionHandler<C, S> = {\n onOpen?: (rpc: ProtoRpcPeer<C>) => Promise<void>;\n onClose?: (rpc: ProtoRpcPeer<C>) => Promise<void>;\n} & Pick<ProtoRpcPeerOptions<C, S>, 'requested' | 'exposed' | 'handlers'>;\n\nexport type WebsocketRpcServerParams<C, S> = {\n onConnection: (info: ConnectionInfo) => Promise<ConnectionHandler<C, S>>;\n} & WebSocket.ServerOptions;\n\nexport class WebsocketRpcServer<C, S> {\n private _server?: WebSocket.Server;\n\n constructor(private readonly _params: WebsocketRpcServerParams<C, S>) {}\n\n async open() {\n this._server = new WebSocket.Server({\n ...this._params,\n });\n this._server.on('connection', async (socket, request) => {\n log('connection', { request });\n const info: ConnectionInfo = {\n request,\n };\n const { onOpen, onClose, ...options } = await this._params.onConnection(info);\n const rpc = createProtoRpcPeer<C, S>({\n ...options,\n port: {\n send: (msg) => {\n socket.send(msg);\n },\n subscribe: (cb) => {\n socket.onmessage = async (msg: WebSocket.MessageEvent) => {\n if (typeof Blob !== 'undefined' && msg.data instanceof Blob) {\n cb(Buffer.from(await msg.data.arrayBuffer()));\n } else {\n cb(msg.data as any);\n }\n };\n },\n },\n });\n\n await rpc.open();\n await onOpen?.(rpc);\n socket.onclose = async () => {\n await onClose?.(rpc);\n await rpc.close();\n };\n });\n }\n\n async close() {\n this._server?.close();\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;ACIA,2BAAsB;AAEtB,mBAA+B;AAC/B,iBAA6B;AAC7B,iBAAsE;;;;;;;;;;;;AAM/D,IAAMA,qBAAN,MAAMA;;EAUXC,YACmBC,SACjB;mBADiBA;SARFC,kBAAkB,IAAIC,qBAAAA;SAE9BC,YAAY,IAAIC,mBAAAA;SAChBC,eAAe,IAAID,mBAAAA;SACnBE,QAAQ,IAAIF,mBAAAA;AAOnB,SAAKG,WAAOC,+BAAmB;MAC7BC,WAAW,KAAKT,QAAQS;MACxBC,SAAS,KAAKV,QAAQU;MACtBC,UAAU,KAAKX,QAAQW;MACvBC,MAAM;QACJC,MAAM,CAACC,QAAAA;AACL,eAAKC,QAASF,KAAKC,GAAAA;QACrB;QACAE,WAAW,CAACC,OAAAA;AACV,eAAKF,QAASG,YAAY,OAAOJ,QAAAA;AAC/B,gBAAI,OAAOK,SAAS,eAAeL,IAAIM,gBAAgBD,MAAM;AAC3DF,iBAAGI,OAAOC,KAAK,MAAMR,IAAIM,KAAKG,YAAW,CAAA,CAAA;YAC3C,OAAO;AACLN,iBAAGH,IAAIM,IAAI;YACb;UACF;QACF;MACF;IACF,CAAA;EACF;EAEA,IACII,MAAM;AACR,WAAO,KAAKxB,QAAQwB;EACtB;EAEA,MAAMC,OAAO;AACX,SAAKV,UAAU,IAAIW,qBAAAA,QAAU,KAAK1B,QAAQwB,GAAG;AAE7C,SAAKT,QAAQY,SAAS,YAAA;AACpBC,0BAAI,eAAA,QAAA;;;;;;AACJ,UAAI;AACF,cAAM,KAAKrB,KAAMkB,KAAI;AACrBG,4BAAI,YAAY,KAAK5B,QAAQwB,
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["WebsocketRpcClient", "constructor", "_params", "_connectTrigger", "Trigger", "connected", "Event", "disconnected", "error", "_rpc", "createProtoRpcPeer", "requested", "exposed", "handlers", "port", "send", "msg", "_socket", "subscribe", "cb", "onmessage", "Blob", "data", "Buffer", "from", "arrayBuffer", "url", "open", "WebSocket", "onopen", "log", "emit", "wake", "err", "onclose", "close", "onerror", "event", "message", "Error", "throw", "wait", "catch", "rpc", "logInfo", "import_isomorphic_ws", "import_log", "import_rpc", "WebsocketRpcServer", "constructor", "_params", "open", "_server", "WebSocket", "Server", "on", "socket", "request", "log", "info", "onOpen", "onClose", "options", "onConnection", "rpc", "createProtoRpcPeer", "port", "send", "msg", "subscribe", "cb", "onmessage", "Blob", "data", "Buffer", "from", "arrayBuffer", "onclose", "close"]
|
|
7
7
|
}
|
package/dist/lib/node/meta.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"packages/core/mesh/websocket-rpc/src/client.ts":{"bytes":10873,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true}]},"packages/core/mesh/websocket-rpc/src/server.ts":{"bytes":6350,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true}]},"packages/core/mesh/websocket-rpc/src/index.ts":{"bytes":552,"imports":[{"path":"packages/core/mesh/websocket-rpc/src/client.ts","kind":"import-statement","original":"./client"},{"path":"packages/core/mesh/websocket-rpc/src/server.ts","kind":"import-statement","original":"./server"}]}},"outputs":{"packages/core/mesh/websocket-rpc/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":
|
|
1
|
+
{"inputs":{"packages/core/mesh/websocket-rpc/src/client.ts":{"bytes":10873,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true}],"format":"esm"},"packages/core/mesh/websocket-rpc/src/server.ts":{"bytes":6350,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true}],"format":"esm"},"packages/core/mesh/websocket-rpc/src/index.ts":{"bytes":552,"imports":[{"path":"packages/core/mesh/websocket-rpc/src/client.ts","kind":"import-statement","original":"./client"},{"path":"packages/core/mesh/websocket-rpc/src/server.ts","kind":"import-statement","original":"./server"}],"format":"esm"}},"outputs":{"packages/core/mesh/websocket-rpc/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":8228},"packages/core/mesh/websocket-rpc/dist/lib/node/index.cjs":{"imports":[{"path":"isomorphic-ws","kind":"require-call","external":true},{"path":"@dxos/async","kind":"require-call","external":true},{"path":"@dxos/log","kind":"require-call","external":true},{"path":"@dxos/rpc","kind":"require-call","external":true},{"path":"isomorphic-ws","kind":"require-call","external":true},{"path":"@dxos/log","kind":"require-call","external":true},{"path":"@dxos/rpc","kind":"require-call","external":true}],"exports":[],"entryPoint":"packages/core/mesh/websocket-rpc/src/index.ts","inputs":{"packages/core/mesh/websocket-rpc/src/index.ts":{"bytesInOutput":189},"packages/core/mesh/websocket-rpc/src/client.ts":{"bytesInOutput":3467},"packages/core/mesh/websocket-rpc/src/server.ts":{"bytesInOutput":1516}},"bytes":6889}}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/websocket-rpc",
|
|
3
|
-
"version": "0.1.56-main.
|
|
3
|
+
"version": "0.1.56-main.ed2f871",
|
|
4
4
|
"description": "websocket-rpc",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -19,15 +19,15 @@
|
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"isomorphic-ws": "^4.0.1",
|
|
21
21
|
"ws": "^7.4.4",
|
|
22
|
-
"@dxos/async": "0.1.56-main.
|
|
23
|
-
"@dxos/codec-protobuf": "0.1.56-main.
|
|
24
|
-
"@dxos/context": "0.1.56-main.
|
|
25
|
-
"@dxos/keys": "0.1.56-main.
|
|
26
|
-
"@dxos/log": "0.1.56-main.
|
|
27
|
-
"@dxos/node-std": "0.1.56-main.
|
|
28
|
-
"@dxos/protocols": "0.1.56-main.
|
|
29
|
-
"@dxos/rpc": "0.1.56-main.
|
|
30
|
-
"@dxos/util": "0.1.56-main.
|
|
22
|
+
"@dxos/async": "0.1.56-main.ed2f871",
|
|
23
|
+
"@dxos/codec-protobuf": "0.1.56-main.ed2f871",
|
|
24
|
+
"@dxos/context": "0.1.56-main.ed2f871",
|
|
25
|
+
"@dxos/keys": "0.1.56-main.ed2f871",
|
|
26
|
+
"@dxos/log": "0.1.56-main.ed2f871",
|
|
27
|
+
"@dxos/node-std": "0.1.56-main.ed2f871",
|
|
28
|
+
"@dxos/protocols": "0.1.56-main.ed2f871",
|
|
29
|
+
"@dxos/rpc": "0.1.56-main.ed2f871",
|
|
30
|
+
"@dxos/util": "0.1.56-main.ed2f871"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@types/node": "^18.11.9",
|