@dxos/websocket-rpc 0.8.4-main.a4bbb77 → 0.8.4-main.abd8ff62ef
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/lib/{browser → neutral}/index.mjs +45 -120
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/{browser → neutral}/meta.json +1 -1
- package/dist/types/src/client.d.ts +2 -2
- package/dist/types/src/client.d.ts.map +1 -1
- package/dist/types/src/server.d.ts +3 -3
- package/dist/types/src/server.d.ts.map +1 -1
- package/dist/types/src/token-auth.d.ts +1 -1
- package/dist/types/src/token-auth.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -13
- package/src/client.ts +2 -2
- package/src/e2e.node.test.ts +1 -1
- package/src/server.ts +5 -6
- package/src/token-auth.ts +1 -2
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -279
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
|
@@ -16,12 +16,7 @@ var authenticateRequestWithTokenAuth = (request, socket, upgradeHead, token, cb)
|
|
|
16
16
|
if (!protocolHeader) {
|
|
17
17
|
log("upgrade unauthorized, header missing", {
|
|
18
18
|
header: request.headers["sec-websocket-protocol"]
|
|
19
|
-
}, {
|
|
20
|
-
F: __dxlog_file,
|
|
21
|
-
L: 29,
|
|
22
|
-
S: void 0,
|
|
23
|
-
C: (f, a) => f(...a)
|
|
24
|
-
});
|
|
19
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 13, S: void 0 });
|
|
25
20
|
socket.write("HTTP/1.1 401 Unauthorized\r\n\r\n");
|
|
26
21
|
socket.destroy();
|
|
27
22
|
return;
|
|
@@ -32,12 +27,7 @@ var authenticateRequestWithTokenAuth = (request, socket, upgradeHead, token, cb)
|
|
|
32
27
|
log("upgrade unauthorized", {
|
|
33
28
|
token,
|
|
34
29
|
foo: encodedToken
|
|
35
|
-
}, {
|
|
36
|
-
F: __dxlog_file,
|
|
37
|
-
L: 41,
|
|
38
|
-
S: void 0,
|
|
39
|
-
C: (f, a) => f(...a)
|
|
40
|
-
});
|
|
30
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 24, S: void 0 });
|
|
41
31
|
socket.write("HTTP/1.1 401 Unauthorized\r\n\r\n");
|
|
42
32
|
socket.destroy();
|
|
43
33
|
return;
|
|
@@ -53,37 +43,49 @@ var WebSocketWithTokenAuth = class extends WebSocket {
|
|
|
53
43
|
super(url, wsProtocols);
|
|
54
44
|
log("encodedToken", {
|
|
55
45
|
encodedToken
|
|
56
|
-
}, {
|
|
57
|
-
F: __dxlog_file,
|
|
58
|
-
L: 56,
|
|
59
|
-
S: this,
|
|
60
|
-
C: (f, a) => f(...a)
|
|
61
|
-
});
|
|
46
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 41, S: this });
|
|
62
47
|
}
|
|
63
48
|
};
|
|
64
49
|
|
|
65
50
|
// src/client.ts
|
|
66
|
-
|
|
67
|
-
if (key in obj) {
|
|
68
|
-
Object.defineProperty(obj, key, {
|
|
69
|
-
value,
|
|
70
|
-
enumerable: true,
|
|
71
|
-
configurable: true,
|
|
72
|
-
writable: true
|
|
73
|
-
});
|
|
74
|
-
} else {
|
|
75
|
-
obj[key] = value;
|
|
76
|
-
}
|
|
77
|
-
return obj;
|
|
78
|
-
}
|
|
51
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/core/mesh/websocket-rpc/src/client.ts";
|
|
79
52
|
function _ts_decorate(decorators, target, key, desc) {
|
|
80
53
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
81
54
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
82
55
|
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;
|
|
83
56
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
84
57
|
}
|
|
85
|
-
var __dxlog_file2 = "/__w/dxos/dxos/packages/core/mesh/websocket-rpc/src/client.ts";
|
|
86
58
|
var WebsocketRpcClient = class {
|
|
59
|
+
_params;
|
|
60
|
+
_socket;
|
|
61
|
+
_rpc;
|
|
62
|
+
_connectTrigger = new Trigger();
|
|
63
|
+
connected = new Event();
|
|
64
|
+
disconnected = new Event();
|
|
65
|
+
error = new Event();
|
|
66
|
+
constructor(_params) {
|
|
67
|
+
this._params = _params;
|
|
68
|
+
this._rpc = createProtoRpcPeer({
|
|
69
|
+
requested: this._params.requested,
|
|
70
|
+
exposed: this._params.exposed,
|
|
71
|
+
handlers: this._params.handlers,
|
|
72
|
+
noHandshake: this._params.noHandshake,
|
|
73
|
+
port: {
|
|
74
|
+
send: (msg) => {
|
|
75
|
+
this._socket.send(msg);
|
|
76
|
+
},
|
|
77
|
+
subscribe: (cb) => {
|
|
78
|
+
this._socket.onmessage = async (msg) => {
|
|
79
|
+
if (typeof Blob !== "undefined" && msg.data instanceof Blob) {
|
|
80
|
+
cb(Buffer.from(await msg.data.arrayBuffer()));
|
|
81
|
+
} else {
|
|
82
|
+
cb(msg.data);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
87
89
|
get url() {
|
|
88
90
|
return this._params.url;
|
|
89
91
|
}
|
|
@@ -94,20 +96,10 @@ var WebsocketRpcClient = class {
|
|
|
94
96
|
this._socket = new WebSocket2(this._params.url);
|
|
95
97
|
}
|
|
96
98
|
this._socket.onopen = async () => {
|
|
97
|
-
log2("Socket open", void 0, {
|
|
98
|
-
F: __dxlog_file2,
|
|
99
|
-
L: 62,
|
|
100
|
-
S: this,
|
|
101
|
-
C: (f, a) => f(...a)
|
|
102
|
-
});
|
|
99
|
+
log2("Socket open", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 56, S: this });
|
|
103
100
|
try {
|
|
104
101
|
await this._rpc.open();
|
|
105
|
-
log2(`RPC open ${this._params.url}`, void 0, {
|
|
106
|
-
F: __dxlog_file2,
|
|
107
|
-
L: 65,
|
|
108
|
-
S: this,
|
|
109
|
-
C: (f, a) => f(...a)
|
|
110
|
-
});
|
|
102
|
+
log2(`RPC open ${this._params.url}`, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 59, S: this });
|
|
111
103
|
this.connected.emit();
|
|
112
104
|
this._connectTrigger.wake();
|
|
113
105
|
} catch (err) {
|
|
@@ -115,24 +107,14 @@ var WebsocketRpcClient = class {
|
|
|
115
107
|
}
|
|
116
108
|
};
|
|
117
109
|
this._socket.onclose = async () => {
|
|
118
|
-
log2(`Disconnected ${this._params.url}`, void 0, {
|
|
119
|
-
F: __dxlog_file2,
|
|
120
|
-
L: 74,
|
|
121
|
-
S: this,
|
|
122
|
-
C: (f, a) => f(...a)
|
|
123
|
-
});
|
|
110
|
+
log2(`Disconnected ${this._params.url}`, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 67, S: this });
|
|
124
111
|
this.disconnected.emit();
|
|
125
112
|
await this.close();
|
|
126
113
|
};
|
|
127
114
|
this._socket.onerror = (event) => {
|
|
128
115
|
log2.error(event.message ?? "Socket error", {
|
|
129
116
|
url: this._params.url
|
|
130
|
-
}, {
|
|
131
|
-
F: __dxlog_file2,
|
|
132
|
-
L: 81,
|
|
133
|
-
S: this,
|
|
134
|
-
C: (f, a) => f(...a)
|
|
135
|
-
});
|
|
117
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 73, S: this });
|
|
136
118
|
const error = event.error ?? new Error(event.message);
|
|
137
119
|
this.error.emit(error);
|
|
138
120
|
this._connectTrigger.throw(error);
|
|
@@ -143,52 +125,13 @@ var WebsocketRpcClient = class {
|
|
|
143
125
|
try {
|
|
144
126
|
await this._rpc?.close();
|
|
145
127
|
} catch (err) {
|
|
146
|
-
log2.catch(err, void 0, {
|
|
147
|
-
F: __dxlog_file2,
|
|
148
|
-
L: 94,
|
|
149
|
-
S: this,
|
|
150
|
-
C: (f, a) => f(...a)
|
|
151
|
-
});
|
|
128
|
+
log2.catch(err, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 86, S: this });
|
|
152
129
|
}
|
|
153
130
|
this._socket?.close();
|
|
154
131
|
}
|
|
155
132
|
get rpc() {
|
|
156
133
|
return this._rpc.rpc;
|
|
157
134
|
}
|
|
158
|
-
constructor(_params) {
|
|
159
|
-
_define_property(this, "_params", void 0);
|
|
160
|
-
_define_property(this, "_socket", void 0);
|
|
161
|
-
_define_property(this, "_rpc", void 0);
|
|
162
|
-
_define_property(this, "_connectTrigger", void 0);
|
|
163
|
-
_define_property(this, "connected", void 0);
|
|
164
|
-
_define_property(this, "disconnected", void 0);
|
|
165
|
-
_define_property(this, "error", void 0);
|
|
166
|
-
this._params = _params;
|
|
167
|
-
this._connectTrigger = new Trigger();
|
|
168
|
-
this.connected = new Event();
|
|
169
|
-
this.disconnected = new Event();
|
|
170
|
-
this.error = new Event();
|
|
171
|
-
this._rpc = createProtoRpcPeer({
|
|
172
|
-
requested: this._params.requested,
|
|
173
|
-
exposed: this._params.exposed,
|
|
174
|
-
handlers: this._params.handlers,
|
|
175
|
-
noHandshake: this._params.noHandshake,
|
|
176
|
-
port: {
|
|
177
|
-
send: (msg) => {
|
|
178
|
-
this._socket.send(msg);
|
|
179
|
-
},
|
|
180
|
-
subscribe: (cb) => {
|
|
181
|
-
this._socket.onmessage = async (msg) => {
|
|
182
|
-
if (typeof Blob !== "undefined" && msg.data instanceof Blob) {
|
|
183
|
-
cb(Buffer.from(await msg.data.arrayBuffer()));
|
|
184
|
-
} else {
|
|
185
|
-
cb(msg.data);
|
|
186
|
-
}
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
135
|
};
|
|
193
136
|
_ts_decorate([
|
|
194
137
|
logInfo
|
|
@@ -198,21 +141,13 @@ _ts_decorate([
|
|
|
198
141
|
import WebSocket3 from "isomorphic-ws";
|
|
199
142
|
import { log as log3 } from "@dxos/log";
|
|
200
143
|
import { createProtoRpcPeer as createProtoRpcPeer2 } from "@dxos/rpc";
|
|
201
|
-
function _define_property2(obj, key, value) {
|
|
202
|
-
if (key in obj) {
|
|
203
|
-
Object.defineProperty(obj, key, {
|
|
204
|
-
value,
|
|
205
|
-
enumerable: true,
|
|
206
|
-
configurable: true,
|
|
207
|
-
writable: true
|
|
208
|
-
});
|
|
209
|
-
} else {
|
|
210
|
-
obj[key] = value;
|
|
211
|
-
}
|
|
212
|
-
return obj;
|
|
213
|
-
}
|
|
214
144
|
var __dxlog_file3 = "/__w/dxos/dxos/packages/core/mesh/websocket-rpc/src/server.ts";
|
|
215
145
|
var WebsocketRpcServer = class {
|
|
146
|
+
_params;
|
|
147
|
+
_server;
|
|
148
|
+
constructor(_params) {
|
|
149
|
+
this._params = _params;
|
|
150
|
+
}
|
|
216
151
|
handleUpgrade(request, socket, head) {
|
|
217
152
|
this._server?.handleUpgrade(request, socket, head, (ws) => {
|
|
218
153
|
this._server?.emit("connection", ws, request);
|
|
@@ -226,12 +161,7 @@ var WebsocketRpcServer = class {
|
|
|
226
161
|
log3("connection", {
|
|
227
162
|
url: request.url,
|
|
228
163
|
headers: request.headers
|
|
229
|
-
}, {
|
|
230
|
-
F: __dxlog_file3,
|
|
231
|
-
L: 41,
|
|
232
|
-
S: this,
|
|
233
|
-
C: (f, a) => f(...a)
|
|
234
|
-
});
|
|
164
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 23, S: this });
|
|
235
165
|
const info = {
|
|
236
166
|
request
|
|
237
167
|
};
|
|
@@ -264,11 +194,6 @@ var WebsocketRpcServer = class {
|
|
|
264
194
|
async close() {
|
|
265
195
|
this._server?.close();
|
|
266
196
|
}
|
|
267
|
-
constructor(_params) {
|
|
268
|
-
_define_property2(this, "_params", void 0);
|
|
269
|
-
_define_property2(this, "_server", void 0);
|
|
270
|
-
this._params = _params;
|
|
271
|
-
}
|
|
272
197
|
};
|
|
273
198
|
export {
|
|
274
199
|
WebSocketWithTokenAuth,
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/client.ts", "../../../src/token-auth.ts", "../../../src/server.ts"],
|
|
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 { type ProtoRpcPeer, type ProtoRpcPeerOptions, createProtoRpcPeer } from '@dxos/rpc';\n\nimport { WebSocketWithTokenAuth } from './token-auth';\n\nexport type WebsocketRpcClientProps<C, S> = {\n url: string;\n authenticationToken?: string;\n} & Pick<ProtoRpcPeerOptions<C, S>, 'requested' | 'exposed' | 'handlers' | 'noHandshake'>;\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 constructor(private readonly _params: WebsocketRpcClientProps<C, S>) {\n this._rpc = createProtoRpcPeer({\n requested: this._params.requested,\n exposed: this._params.exposed,\n handlers: this._params.handlers,\n noHandshake: this._params.noHandshake,\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(): Promise<void> {\n if (this._params.authenticationToken) {\n this._socket = new WebSocketWithTokenAuth(this._params.url, this._params.authenticationToken);\n } else {\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 // Browsers do not include the error message in the event object, so we cannot discern 401 errors from other errors.\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(): Promise<void> {\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 2024 DXOS.org\n//\n\n// Implement WS header-based auth similar to https://github.com/kubernetes/kubernetes/commit/714f97d7baf4975ad3aa47735a868a81a984d1f0\n// https://stackoverflow.com/questions/4361173/http-headers-in-websockets-client-api/77060459#77060459\n\nimport { type IncomingMessage } from 'http';\nimport WebSocket from 'isomorphic-ws';\nimport { type Socket } from 'node:net';\n\nimport { log } from '@dxos/log';\n\nconst PROTOCOL_TOKEN_PREFIX = 'base64url.bearer.authorization.dxos.org';\n\n// TODO: implement middleware which removes the token from the request\n\nexport const authenticateRequestWithTokenAuth = (\n request: IncomingMessage,\n socket: Socket,\n upgradeHead: Buffer,\n token: string,\n cb: (request: IncomingMessage, socket: Socket, upgradeHead: Buffer) => void,\n) => {\n const protocolHeader = request.headers['sec-websocket-protocol'];\n\n if (!protocolHeader) {\n log('upgrade unauthorized, header missing', { header: request.headers['sec-websocket-protocol'] });\n socket.write('HTTP/1.1 401 Unauthorized\\r\\n\\r\\n');\n socket.destroy();\n return;\n }\n\n const tokenHeader = protocolHeader.replace(new RegExp(`^${PROTOCOL_TOKEN_PREFIX}.`), '');\n\n // padding characters are not allowed as a websocket protocol.\n const encodedToken = Buffer.from(token).toString('base64').replace(/=*$/, '');\n\n if (tokenHeader !== encodedToken) {\n log('upgrade unauthorized', { token, foo: encodedToken });\n socket.write('HTTP/1.1 401 Unauthorized\\r\\n\\r\\n');\n socket.destroy();\n return;\n }\n\n cb(request, socket, upgradeHead);\n};\n\nexport class WebSocketWithTokenAuth extends WebSocket {\n constructor(url: string, token: string) {\n const encodedToken = Buffer.from(token).toString('base64').replace(/=*$/, '');\n\n const wsProtocols = [`base64url.bearer.authorization.dxos.org.${encodedToken}`];\n super(url, wsProtocols);\n log('encodedToken', {\n encodedToken,\n });\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type IncomingMessage } from 'http';\nimport WebSocket from 'isomorphic-ws';\nimport { type Socket } from 'node:net';\n\nimport { log } from '@dxos/log';\nimport { type ProtoRpcPeer, type ProtoRpcPeerOptions, createProtoRpcPeer } 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 WebsocketRpcServerProps<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: WebsocketRpcServerProps<C, S>) {}\n handleUpgrade(request: IncomingMessage, socket: Socket, head: Buffer): void {\n this._server?.handleUpgrade(request, socket, head, (ws: WebSocket) => {\n this._server?.emit('connection', ws, request);\n });\n }\n\n async open(): Promise<void> {\n this._server = new WebSocket.Server({\n ...this._params,\n });\n this._server.on('connection', async (socket: WebSocket, request: IncomingMessage) => {\n log('connection', { url: request.url, headers: request.headers });\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(): Promise<void> {\n this._server?.close();\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["WebSocket", "Trigger", "log", "logInfo", "createProtoRpcPeer", "WebSocketWithTokenAuth", "WebSocket", "log", "PROTOCOL_TOKEN_PREFIX", "authenticateRequestWithTokenAuth", "protocolHeader", "request", "socket", "encodedToken", "token", "toString", "foo", "write", "WebSocketWithTokenAuth", "wsProtocols", "__dxlog_file", "_socket", "_rpc", "_connectTrigger", "connected", "Event", "disconnected", "error", "_params", "createProtoRpcPeer", "requested", "exposed", "handlers", "noHandshake", "port", "send", "subscribe", "onmessage", "cb", "Buffer", "arrayBuffer", "msg", "WebSocketWithTokenAuth", "WebSocket", "log", "emit", "err", "url", "event", "message", "throw", "catch", "WebSocket", "log", "createProtoRpcPeer", "__dxlog_file", "WebsocketRpcServer", "_server", "handleUpgrade", "request", "emit", "headers", "options", "port", "subscribe", "cb", "from", "msg", "data", "socket", "onclose", "onClose", "close"]
|
|
7
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/token-auth.ts":{"bytes":
|
|
1
|
+
{"inputs":{"src/token-auth.ts":{"bytes":6552,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/client.ts":{"bytes":11605,"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":"src/token-auth.ts","kind":"import-statement","original":"./token-auth"}],"format":"esm"},"src/server.ts":{"bytes":7320,"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"},"src/index.ts":{"bytes":546,"imports":[{"path":"src/client.ts","kind":"import-statement","original":"./client"},{"path":"src/server.ts","kind":"import-statement","original":"./server"},{"path":"src/token-auth.ts","kind":"import-statement","original":"./token-auth"}],"format":"esm"}},"outputs":{"dist/lib/neutral/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":12065},"dist/lib/neutral/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":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true}],"exports":["WebSocketWithTokenAuth","WebsocketRpcClient","WebsocketRpcServer","authenticateRequestWithTokenAuth"],"entryPoint":"src/index.ts","inputs":{"src/client.ts":{"bytesInOutput":3279},"src/token-auth.ts":{"bytesInOutput":1578},"src/index.ts":{"bytesInOutput":0},"src/server.ts":{"bytesInOutput":1661}},"bytes":6779}}}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Event } from '@dxos/async';
|
|
2
2
|
import { type ProtoRpcPeerOptions } from '@dxos/rpc';
|
|
3
|
-
export type
|
|
3
|
+
export type WebsocketRpcClientProps<C, S> = {
|
|
4
4
|
url: string;
|
|
5
5
|
authenticationToken?: string;
|
|
6
6
|
} & Pick<ProtoRpcPeerOptions<C, S>, 'requested' | 'exposed' | 'handlers' | 'noHandshake'>;
|
|
@@ -12,7 +12,7 @@ export declare class WebsocketRpcClient<C, S> {
|
|
|
12
12
|
readonly connected: Event<void>;
|
|
13
13
|
readonly disconnected: Event<void>;
|
|
14
14
|
readonly error: Event<Error>;
|
|
15
|
-
constructor(_params:
|
|
15
|
+
constructor(_params: WebsocketRpcClientProps<C, S>);
|
|
16
16
|
get url(): string;
|
|
17
17
|
open(): Promise<void>;
|
|
18
18
|
close(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/client.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAW,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAqB,KAAK,mBAAmB,EAAsB,MAAM,WAAW,CAAC;AAI5F,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/client.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAW,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAqB,KAAK,mBAAmB,EAAsB,MAAM,WAAW,CAAC;AAI5F,MAAM,MAAM,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,CAAC,CAAC;AAE1F,qBAAa,kBAAkB,CAAC,CAAC,EAAE,CAAC;IAStB,OAAO,CAAC,QAAQ,CAAC,OAAO;IARpC,OAAO,CAAC,OAAO,CAAC,CAAY;IAC5B,OAAO,CAAC,IAAI,CAAC,CAAkB;IAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IAEjD,QAAQ,CAAC,SAAS,cAAe;IACjC,QAAQ,CAAC,YAAY,cAAe;IACpC,QAAQ,CAAC,KAAK,eAAsB;IAEpC,YAA6B,OAAO,EAAE,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,EAqBlE;IAED,IACI,GAAG,WAEN;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAiC1B;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAO3B;IAED,IAAI,GAAG,MAEN;CACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type IncomingMessage } from 'http';
|
|
2
|
-
import { type Socket } from 'node:net';
|
|
3
2
|
import WebSocket from 'isomorphic-ws';
|
|
3
|
+
import { type Socket } from 'node:net';
|
|
4
4
|
import { type ProtoRpcPeer, type ProtoRpcPeerOptions } from '@dxos/rpc';
|
|
5
5
|
export type ConnectionInfo = {
|
|
6
6
|
request: IncomingMessage;
|
|
@@ -9,13 +9,13 @@ export type ConnectionHandler<C, S> = {
|
|
|
9
9
|
onOpen?: (rpc: ProtoRpcPeer<C>) => Promise<void>;
|
|
10
10
|
onClose?: (rpc: ProtoRpcPeer<C>) => Promise<void>;
|
|
11
11
|
} & Pick<ProtoRpcPeerOptions<C, S>, 'requested' | 'exposed' | 'handlers'>;
|
|
12
|
-
export type
|
|
12
|
+
export type WebsocketRpcServerProps<C, S> = {
|
|
13
13
|
onConnection: (info: ConnectionInfo) => Promise<ConnectionHandler<C, S>>;
|
|
14
14
|
} & WebSocket.ServerOptions;
|
|
15
15
|
export declare class WebsocketRpcServer<C, S> {
|
|
16
16
|
private readonly _params;
|
|
17
17
|
private _server?;
|
|
18
|
-
constructor(_params:
|
|
18
|
+
constructor(_params: WebsocketRpcServerProps<C, S>);
|
|
19
19
|
handleUpgrade(request: IncomingMessage, socket: Socket, head: Buffer): void;
|
|
20
20
|
open(): Promise<void>;
|
|
21
21
|
close(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,SAAS,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAGvC,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAsB,MAAM,WAAW,CAAC;AAE5F,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,IAAI;IACpC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;AAE1E,MAAM,MAAM,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI;IAC1C,YAAY,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAC1E,GAAG,SAAS,CAAC,aAAa,CAAC;AAE5B,qBAAa,kBAAkB,CAAC,CAAC,EAAE,CAAC;IAGtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,OAAO,CAAC,CAAmB;IAEnC,YAA6B,OAAO,EAAE,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAI;IACvE,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAI1E;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAmC1B;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;CACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type IncomingMessage } from 'http';
|
|
2
|
-
import { type Socket } from 'node:net';
|
|
3
2
|
import WebSocket from 'isomorphic-ws';
|
|
3
|
+
import { type Socket } from 'node:net';
|
|
4
4
|
export declare const authenticateRequestWithTokenAuth: (request: IncomingMessage, socket: Socket, upgradeHead: Buffer, token: string, cb: (request: IncomingMessage, socket: Socket, upgradeHead: Buffer) => void) => void;
|
|
5
5
|
export declare class WebSocketWithTokenAuth extends WebSocket {
|
|
6
6
|
constructor(url: string, token: string);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-auth.d.ts","sourceRoot":"","sources":["../../../src/token-auth.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"token-auth.d.ts","sourceRoot":"","sources":["../../../src/token-auth.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,SAAS,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAQvC,eAAO,MAAM,gCAAgC,YAClC,eAAe,UAChB,MAAM,eACD,MAAM,SACZ,MAAM,MACT,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,SAwB5E,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,SAAS;IACnD,YAAY,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAQrC;CACF"}
|