@peers-app/peers-sdk 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/context/data-context.d.ts +4 -4
- package/dist/context/data-context.js +1 -1
- package/dist/context/index.d.ts +3 -3
- package/dist/context/index.js +4 -0
- package/dist/context/user-context-singleton.js +13 -14
- package/dist/context/user-context.d.ts +4 -4
- package/dist/context/user-context.js +48 -31
- package/dist/data/assistants.d.ts +1 -1
- package/dist/data/assistants.js +35 -24
- package/dist/data/change-tracking.d.ts +8 -8
- package/dist/data/change-tracking.js +45 -39
- package/dist/data/channels.js +5 -5
- package/dist/data/data-locks.d.ts +2 -2
- package/dist/data/data-locks.js +21 -23
- package/dist/data/data-locks.test.js +73 -75
- package/dist/data/device-sync-info.d.ts +1 -1
- package/dist/data/device-sync-info.js +4 -4
- package/dist/data/devices.d.ts +1 -1
- package/dist/data/devices.js +9 -12
- package/dist/data/embeddings.js +14 -11
- package/dist/data/files/file-read-stream.d.ts +2 -2
- package/dist/data/files/file-read-stream.js +23 -14
- package/dist/data/files/file-write-stream.d.ts +2 -2
- package/dist/data/files/file-write-stream.js +8 -8
- package/dist/data/files/file.types.d.ts +2 -2
- package/dist/data/files/file.types.js +17 -11
- package/dist/data/files/files.d.ts +6 -6
- package/dist/data/files/files.js +17 -19
- package/dist/data/files/files.test.js +213 -214
- package/dist/data/files/index.d.ts +4 -4
- package/dist/data/files/index.js +4 -4
- package/dist/data/group-member-roles.js +2 -2
- package/dist/data/group-members.d.ts +5 -5
- package/dist/data/group-members.js +27 -18
- package/dist/data/group-members.test.js +73 -73
- package/dist/data/group-permissions.d.ts +3 -3
- package/dist/data/group-permissions.js +13 -11
- package/dist/data/group-share.d.ts +2 -2
- package/dist/data/group-share.js +29 -24
- package/dist/data/groups.d.ts +4 -4
- package/dist/data/groups.js +27 -19
- package/dist/data/groups.test.js +44 -44
- package/dist/data/index.d.ts +6 -6
- package/dist/data/index.js +6 -6
- package/dist/data/knowledge/peer-types.js +9 -9
- package/dist/data/messages.d.ts +5 -5
- package/dist/data/messages.js +43 -30
- package/dist/data/orm/client-proxy.data-source.d.ts +4 -4
- package/dist/data/orm/client-proxy.data-source.js +10 -12
- package/dist/data/orm/cursor.d.ts +1 -1
- package/dist/data/orm/cursor.js +2 -2
- package/dist/data/orm/cursor.test.js +92 -93
- package/dist/data/orm/data-query.d.ts +3 -3
- package/dist/data/orm/data-query.js +24 -18
- package/dist/data/orm/data-query.mongo.d.ts +1 -1
- package/dist/data/orm/data-query.mongo.js +49 -51
- package/dist/data/orm/data-query.mongo.test.js +173 -204
- package/dist/data/orm/data-query.sqlite.d.ts +1 -1
- package/dist/data/orm/data-query.sqlite.js +84 -73
- package/dist/data/orm/data-query.sqlite.test.js +164 -176
- package/dist/data/orm/data-query.test.js +216 -224
- package/dist/data/orm/decorators.js +3 -3
- package/dist/data/orm/dependency-injection.test.js +53 -56
- package/dist/data/orm/doc.d.ts +4 -4
- package/dist/data/orm/doc.js +17 -21
- package/dist/data/orm/event-registry.d.ts +1 -1
- package/dist/data/orm/event-registry.test.js +16 -16
- package/dist/data/orm/factory.d.ts +2 -2
- package/dist/data/orm/factory.js +33 -33
- package/dist/data/orm/index.d.ts +10 -10
- package/dist/data/orm/index.js +10 -10
- package/dist/data/orm/multi-cursors.d.ts +1 -1
- package/dist/data/orm/multi-cursors.js +6 -6
- package/dist/data/orm/multi-cursors.test.js +152 -144
- package/dist/data/orm/sql.data-source.d.ts +7 -7
- package/dist/data/orm/sql.data-source.js +88 -93
- package/dist/data/orm/sql.data-source.test.js +109 -101
- package/dist/data/orm/subscribable.data-source.d.ts +4 -4
- package/dist/data/orm/subscribable.data-source.js +5 -5
- package/dist/data/orm/table-container-events.test.js +34 -26
- package/dist/data/orm/table-container.d.ts +6 -6
- package/dist/data/orm/table-container.js +33 -21
- package/dist/data/orm/table-container.test.js +64 -53
- package/dist/data/orm/table-definitions.system.d.ts +3 -3
- package/dist/data/orm/table-definitions.system.js +3 -3
- package/dist/data/orm/table-definitions.type.d.ts +5 -5
- package/dist/data/orm/table-dependencies.d.ts +2 -2
- package/dist/data/orm/table.d.ts +5 -5
- package/dist/data/orm/table.event-source.test.js +105 -115
- package/dist/data/orm/table.js +35 -34
- package/dist/data/orm/types.d.ts +3 -3
- package/dist/data/orm/types.js +26 -25
- package/dist/data/orm/types.test.js +166 -92
- package/dist/data/package-permissions.d.ts +1 -1
- package/dist/data/package-permissions.js +2 -2
- package/dist/data/package-version-permissions.d.ts +1 -1
- package/dist/data/package-version-permissions.js +2 -2
- package/dist/data/package-versions.d.ts +9 -9
- package/dist/data/package-versions.js +47 -33
- package/dist/data/packages.d.ts +2 -2
- package/dist/data/packages.js +36 -18
- package/dist/data/packages.utils.d.ts +2 -2
- package/dist/data/packages.utils.js +4 -4
- package/dist/data/persistent-vars.d.ts +15 -15
- package/dist/data/persistent-vars.js +165 -154
- package/dist/data/table-definitions-table.d.ts +5 -5
- package/dist/data/table-definitions-table.js +13 -12
- package/dist/data/tool-tests.js +6 -6
- package/dist/data/tools.js +29 -19
- package/dist/data/user-permissions.d.ts +1 -1
- package/dist/data/user-permissions.js +5 -5
- package/dist/data/user-permissions.test.js +90 -88
- package/dist/data/user-trust-levels.js +10 -10
- package/dist/data/users.d.ts +4 -4
- package/dist/data/users.js +16 -15
- package/dist/data/voice-messages.d.ts +2 -2
- package/dist/data/voice-messages.js +13 -13
- package/dist/data/welcome-modal.pvar.js +3 -1
- package/dist/data/workflow-logs.js +26 -18
- package/dist/data/workflow-runs.d.ts +6 -6
- package/dist/data/workflow-runs.js +70 -44
- package/dist/data/workflows.d.ts +2 -2
- package/dist/data/workflows.js +7 -9
- package/dist/device/binary-peer-connection-v2.d.ts +7 -7
- package/dist/device/binary-peer-connection-v2.js +32 -28
- package/dist/device/binary-peer-connection-v2.test.js +80 -67
- package/dist/device/binary-peer-connection.d.ts +7 -7
- package/dist/device/binary-peer-connection.js +29 -28
- package/dist/device/binary-peer-connection.test.js +35 -31
- package/dist/device/connection.d.ts +5 -5
- package/dist/device/connection.js +59 -48
- package/dist/device/connection.test.js +74 -68
- package/dist/device/device-election.d.ts +2 -2
- package/dist/device/device-election.js +25 -20
- package/dist/device/device-election.test.js +35 -36
- package/dist/device/device.d.ts +2 -2
- package/dist/device/device.js +10 -4
- package/dist/device/device.test.js +16 -17
- package/dist/device/get-trust-level-fn.d.ts +2 -2
- package/dist/device/get-trust-level-fn.js +22 -11
- package/dist/device/get-trust-level-fn.test.js +58 -58
- package/dist/device/socket-io-binary-peer.d.ts +1 -1
- package/dist/device/socket-io-binary-peer.js +16 -13
- package/dist/device/socket.type.d.ts +2 -2
- package/dist/device/streamed-socket.d.ts +2 -2
- package/dist/device/streamed-socket.js +8 -8
- package/dist/device/streamed-socket.test.js +40 -40
- package/dist/device/tx-encoding.test.js +77 -77
- package/dist/events.d.ts +1 -1
- package/dist/events.js +5 -2
- package/dist/group-invite/group-invite.js +110 -19
- package/dist/group-invite/group-invite.pvars.d.ts +2 -2
- package/dist/group-invite/group-invite.pvars.js +21 -13
- package/dist/group-invite/group-invite.types.d.ts +1 -1
- package/dist/group-invite/index.d.ts +3 -3
- package/dist/group-invite/index.js +1 -1
- package/dist/index.d.ts +25 -24
- package/dist/index.js +30 -25
- package/dist/keys.d.ts +3 -3
- package/dist/keys.js +31 -30
- package/dist/keys.test.js +69 -61
- package/dist/logging/console-logger.d.ts +1 -1
- package/dist/logging/console-logger.js +35 -40
- package/dist/logging/console-logger.test.js +115 -115
- package/dist/logging/console-logs.table.d.ts +3 -3
- package/dist/logging/console-logs.table.js +28 -23
- package/dist/mentions.js +16 -12
- package/dist/observable.d.ts +2 -2
- package/dist/observable.js +15 -9
- package/dist/observable.test.js +47 -47
- package/dist/package-loader/get-require.js +3 -4
- package/dist/package-loader/package-loader.d.ts +2 -2
- package/dist/package-loader/package-loader.js +52 -34
- package/dist/peers-ui/peers-ui.d.ts +2 -2
- package/dist/peers-ui/peers-ui.js +2 -4
- package/dist/peers-ui/peers-ui.types.d.ts +3 -3
- package/dist/peers-ui/peers-ui.types.js +0 -1
- package/dist/rpc-types.d.ts +61 -59
- package/dist/rpc-types.js +61 -55
- package/dist/serial-json.d.ts +1 -1
- package/dist/serial-json.js +50 -43
- package/dist/serial-json.test.js +22 -22
- package/dist/system-ids.js +8 -8
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/tools-factory.d.ts +1 -1
- package/dist/tools/tools-factory.js +2 -2
- package/dist/types/assistant-runner-args.d.ts +3 -3
- package/dist/types/peer-device.d.ts +1 -1
- package/dist/types/peers-package.d.ts +3 -3
- package/dist/types/workflow-logger.d.ts +1 -1
- package/dist/types/workflow-run-context.d.ts +4 -4
- package/dist/types/workflow.d.ts +4 -4
- package/dist/types/workflow.js +27 -14
- package/dist/types/zod-types.d.ts +2 -1
- package/dist/types/zod-types.js +9 -3
- package/dist/user-connect/connection-code.d.ts +1 -1
- package/dist/user-connect/connection-code.js +7 -7
- package/dist/user-connect/connection-code.test.js +106 -106
- package/dist/user-connect/index.d.ts +3 -3
- package/dist/user-connect/index.js +1 -1
- package/dist/user-connect/user-connect.pvars.js +13 -11
- package/dist/user-connect/user-connect.types.d.ts +3 -3
- package/dist/users.query.d.ts +2 -2
- package/dist/users.query.js +40 -30
- package/dist/utils.d.ts +2 -2
- package/dist/utils.js +34 -32
- package/dist/utils.test.js +12 -8
- package/dist/workflow-log-formatter.d.ts +1 -1
- package/dist/workflow-log-formatter.js +17 -18
- package/package.json +14 -8
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const keys_1 = require("../keys");
|
|
4
|
-
const device_1 = require("./device");
|
|
5
4
|
const utils_1 = require("../utils");
|
|
6
5
|
const binary_peer_connection_v2_1 = require("./binary-peer-connection-v2");
|
|
6
|
+
const device_1 = require("./device");
|
|
7
7
|
// Mock binary peer for testing - simulates WebRTC peers
|
|
8
8
|
class MockBinaryPeer {
|
|
9
9
|
dataHandlers = [];
|
|
@@ -12,27 +12,30 @@ class MockBinaryPeer {
|
|
|
12
12
|
otherPeer;
|
|
13
13
|
_bufferedAmount = 0;
|
|
14
14
|
on(event, handler) {
|
|
15
|
-
if (event ===
|
|
15
|
+
if (event === "data") {
|
|
16
16
|
this.dataHandlers.push(handler);
|
|
17
17
|
}
|
|
18
|
-
else if (event ===
|
|
18
|
+
else if (event === "close") {
|
|
19
19
|
this.closeHandlers.push(handler);
|
|
20
20
|
}
|
|
21
|
-
else if (event ===
|
|
21
|
+
else if (event === "drain") {
|
|
22
22
|
this.drainHandlers.push(handler);
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
send(data) {
|
|
26
26
|
if (this.otherPeer) {
|
|
27
|
-
const bytes = typeof data ===
|
|
27
|
+
const bytes = typeof data === "string"
|
|
28
28
|
? Buffer.from(data)
|
|
29
29
|
: Buffer.isBuffer(data)
|
|
30
30
|
? data
|
|
31
31
|
: Buffer.from(data);
|
|
32
32
|
// Simulate async delivery
|
|
33
33
|
setImmediate(() => {
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
const handlers = this.otherPeer?.dataHandlers;
|
|
35
|
+
if (handlers) {
|
|
36
|
+
for (const handler of handlers) {
|
|
37
|
+
handler(bytes);
|
|
38
|
+
}
|
|
36
39
|
}
|
|
37
40
|
});
|
|
38
41
|
}
|
|
@@ -57,29 +60,29 @@ async function getMockPeerPair() {
|
|
|
57
60
|
await (0, utils_1.sleep)(10);
|
|
58
61
|
return { iPeer, rPeer };
|
|
59
62
|
}
|
|
60
|
-
describe(
|
|
61
|
-
describe(
|
|
62
|
-
it(
|
|
63
|
+
describe("binary-peer-connection-v2", () => {
|
|
64
|
+
describe("MockBinaryPeer", () => {
|
|
65
|
+
it("should exchange data between mock peers", async () => {
|
|
63
66
|
const { iPeer, rPeer } = await getMockPeerPair();
|
|
64
|
-
let iPeerDataReceived =
|
|
65
|
-
iPeer.on(
|
|
67
|
+
let iPeerDataReceived = "";
|
|
68
|
+
iPeer.on("data", (data) => {
|
|
66
69
|
iPeerDataReceived += data.toString();
|
|
67
70
|
});
|
|
68
|
-
let rPeerDataReceived =
|
|
69
|
-
rPeer.on(
|
|
71
|
+
let rPeerDataReceived = "";
|
|
72
|
+
rPeer.on("data", (data) => {
|
|
70
73
|
rPeerDataReceived += data.toString();
|
|
71
74
|
});
|
|
72
|
-
rPeer.send(
|
|
73
|
-
iPeer.send(
|
|
75
|
+
rPeer.send("rPeer");
|
|
76
|
+
iPeer.send("iPeer");
|
|
74
77
|
await (0, utils_1.sleep)(50);
|
|
75
|
-
expect(iPeerDataReceived).toBe(
|
|
76
|
-
expect(rPeerDataReceived).toBe(
|
|
78
|
+
expect(iPeerDataReceived).toBe("rPeer");
|
|
79
|
+
expect(rPeerDataReceived).toBe("iPeer");
|
|
77
80
|
iPeer.destroy();
|
|
78
81
|
rPeer.destroy();
|
|
79
82
|
});
|
|
80
83
|
});
|
|
81
|
-
describe(
|
|
82
|
-
it(
|
|
84
|
+
describe("createBinaryPeerSocket RPC", () => {
|
|
85
|
+
it("should do RPC emit/on round-trip", async () => {
|
|
83
86
|
const { iPeer, rPeer } = await getMockPeerPair();
|
|
84
87
|
const socketA = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("a", iPeer, "ws");
|
|
85
88
|
const socketB = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("b", rPeer, "ws");
|
|
@@ -98,7 +101,7 @@ describe('binary-peer-connection-v2', () => {
|
|
|
98
101
|
iPeer.destroy();
|
|
99
102
|
rPeer.destroy();
|
|
100
103
|
});
|
|
101
|
-
it(
|
|
104
|
+
it("should handle RPC errors", async () => {
|
|
102
105
|
const { iPeer, rPeer } = await getMockPeerPair();
|
|
103
106
|
const socketA = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("a", iPeer, "ws");
|
|
104
107
|
const socketB = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("b", rPeer, "ws");
|
|
@@ -114,14 +117,18 @@ describe('binary-peer-connection-v2', () => {
|
|
|
114
117
|
iPeer.destroy();
|
|
115
118
|
rPeer.destroy();
|
|
116
119
|
});
|
|
117
|
-
it(
|
|
120
|
+
it("should handle Uint8Array args without txEncode", async () => {
|
|
118
121
|
const { iPeer, rPeer } = await getMockPeerPair();
|
|
119
122
|
const socketA = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("a", iPeer, "ws");
|
|
120
123
|
const socketB = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("b", rPeer, "ws");
|
|
121
124
|
const testPayload = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);
|
|
122
125
|
socketB.on("binary-event", (args, callback) => {
|
|
123
126
|
const received = args instanceof Uint8Array ? args : new Uint8Array(args);
|
|
124
|
-
callback(null, {
|
|
127
|
+
callback(null, {
|
|
128
|
+
size: received.length,
|
|
129
|
+
first: received[0],
|
|
130
|
+
last: received[received.length - 1],
|
|
131
|
+
});
|
|
125
132
|
});
|
|
126
133
|
const result = await new Promise((resolve, reject) => {
|
|
127
134
|
socketA.emit("binary-event", testPayload, (err, res) => {
|
|
@@ -137,7 +144,7 @@ describe('binary-peer-connection-v2', () => {
|
|
|
137
144
|
iPeer.destroy();
|
|
138
145
|
rPeer.destroy();
|
|
139
146
|
});
|
|
140
|
-
it(
|
|
147
|
+
it("should handle Uint8Array response without txEncode", async () => {
|
|
141
148
|
const { iPeer, rPeer } = await getMockPeerPair();
|
|
142
149
|
const socketA = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("a", iPeer, "ws");
|
|
143
150
|
const socketB = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("b", rPeer, "ws");
|
|
@@ -159,7 +166,7 @@ describe('binary-peer-connection-v2', () => {
|
|
|
159
166
|
iPeer.destroy();
|
|
160
167
|
rPeer.destroy();
|
|
161
168
|
});
|
|
162
|
-
it(
|
|
169
|
+
it("should chunk large RPC messages (>maxFramePayload)", async () => {
|
|
163
170
|
const { iPeer, rPeer } = await getMockPeerPair();
|
|
164
171
|
// Use 'wrtc' to get 64KB maxFramePayload
|
|
165
172
|
const socketA = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("a", iPeer, "wrtc");
|
|
@@ -186,7 +193,7 @@ describe('binary-peer-connection-v2', () => {
|
|
|
186
193
|
iPeer.destroy();
|
|
187
194
|
rPeer.destroy();
|
|
188
195
|
});
|
|
189
|
-
it(
|
|
196
|
+
it("should handle large RPC response (>maxFramePayload)", async () => {
|
|
190
197
|
const { iPeer, rPeer } = await getMockPeerPair();
|
|
191
198
|
const socketA = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("a", iPeer, "wrtc");
|
|
192
199
|
const socketB = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("b", rPeer, "wrtc");
|
|
@@ -212,7 +219,7 @@ describe('binary-peer-connection-v2', () => {
|
|
|
212
219
|
iPeer.destroy();
|
|
213
220
|
rPeer.destroy();
|
|
214
221
|
});
|
|
215
|
-
it(
|
|
222
|
+
it("should handle concurrent RPC calls correctly", async () => {
|
|
216
223
|
const { iPeer, rPeer } = await getMockPeerPair();
|
|
217
224
|
const socketA = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("a", iPeer, "ws");
|
|
218
225
|
const socketB = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("b", rPeer, "ws");
|
|
@@ -232,32 +239,32 @@ describe('binary-peer-connection-v2', () => {
|
|
|
232
239
|
}
|
|
233
240
|
const results = await Promise.all(promises);
|
|
234
241
|
for (let i = 0; i < 10; i++) {
|
|
235
|
-
const r = results.find(r => r.id === i);
|
|
242
|
+
const r = results.find((r) => r.id === i);
|
|
236
243
|
expect(r).toBeDefined();
|
|
237
|
-
expect(r
|
|
244
|
+
expect(r?.value).toBe(i * 10 * 2);
|
|
238
245
|
}
|
|
239
246
|
iPeer.destroy();
|
|
240
247
|
rPeer.destroy();
|
|
241
248
|
});
|
|
242
249
|
});
|
|
243
|
-
describe(
|
|
244
|
-
it(
|
|
250
|
+
describe("createBinaryPeerSocket raw bytes (stream mode)", () => {
|
|
251
|
+
it("should send/receive raw bytes", async () => {
|
|
245
252
|
const { iPeer, rPeer } = await getMockPeerPair();
|
|
246
253
|
const socketA = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("a", iPeer, "ws");
|
|
247
254
|
const socketB = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("b", rPeer, "ws");
|
|
248
255
|
const testData = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);
|
|
249
256
|
const received = new Promise((resolve) => {
|
|
250
|
-
socketB.onRawBytes("test-stream", (data) => {
|
|
257
|
+
socketB.onRawBytes?.("test-stream", (data) => {
|
|
251
258
|
resolve(data);
|
|
252
259
|
});
|
|
253
260
|
});
|
|
254
|
-
await socketA.sendRawBytes("test-stream", testData);
|
|
261
|
+
await socketA.sendRawBytes?.("test-stream", testData);
|
|
255
262
|
const result = await received;
|
|
256
263
|
expect(Buffer.from(result)).toEqual(Buffer.from(testData));
|
|
257
264
|
iPeer.destroy();
|
|
258
265
|
rPeer.destroy();
|
|
259
266
|
});
|
|
260
|
-
it(
|
|
267
|
+
it("should multiplex multiple streams", async () => {
|
|
261
268
|
const { iPeer, rPeer } = await getMockPeerPair();
|
|
262
269
|
const socketA = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("a", iPeer, "ws");
|
|
263
270
|
const socketB = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("b", rPeer, "ws");
|
|
@@ -265,18 +272,18 @@ describe('binary-peer-connection-v2', () => {
|
|
|
265
272
|
"stream-alpha": [],
|
|
266
273
|
"stream-beta": [],
|
|
267
274
|
};
|
|
268
|
-
socketB.onRawBytes("stream-alpha", (data) => results["stream-alpha"].push(new Uint8Array(data)));
|
|
269
|
-
socketB.onRawBytes("stream-beta", (data) => results["stream-beta"].push(new Uint8Array(data)));
|
|
270
|
-
await socketA.sendRawBytes("stream-alpha", new Uint8Array([10, 20, 30]));
|
|
271
|
-
await socketA.sendRawBytes("stream-beta", new Uint8Array([40, 50, 60]));
|
|
272
|
-
await socketA.sendRawBytes("stream-alpha", new Uint8Array([70, 80, 90]));
|
|
275
|
+
socketB.onRawBytes?.("stream-alpha", (data) => results["stream-alpha"].push(new Uint8Array(data)));
|
|
276
|
+
socketB.onRawBytes?.("stream-beta", (data) => results["stream-beta"].push(new Uint8Array(data)));
|
|
277
|
+
await socketA.sendRawBytes?.("stream-alpha", new Uint8Array([10, 20, 30]));
|
|
278
|
+
await socketA.sendRawBytes?.("stream-beta", new Uint8Array([40, 50, 60]));
|
|
279
|
+
await socketA.sendRawBytes?.("stream-alpha", new Uint8Array([70, 80, 90]));
|
|
273
280
|
await (0, utils_1.sleep)(100);
|
|
274
281
|
expect(results["stream-alpha"].length).toBe(2);
|
|
275
282
|
expect(results["stream-beta"].length).toBe(1);
|
|
276
283
|
iPeer.destroy();
|
|
277
284
|
rPeer.destroy();
|
|
278
285
|
});
|
|
279
|
-
it(
|
|
286
|
+
it("should chunk large stream data (>maxFramePayload)", async () => {
|
|
280
287
|
const { iPeer, rPeer } = await getMockPeerPair();
|
|
281
288
|
// Use wrtc for 64KB max frame size
|
|
282
289
|
const socketA = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("a", iPeer, "wrtc");
|
|
@@ -286,11 +293,11 @@ describe('binary-peer-connection-v2', () => {
|
|
|
286
293
|
largeData[i] = i % 256;
|
|
287
294
|
}
|
|
288
295
|
const received = new Promise((resolve) => {
|
|
289
|
-
socketB.onRawBytes("large-stream", (data) => {
|
|
296
|
+
socketB.onRawBytes?.("large-stream", (data) => {
|
|
290
297
|
resolve(data);
|
|
291
298
|
});
|
|
292
299
|
});
|
|
293
|
-
await socketA.sendRawBytes("large-stream", largeData);
|
|
300
|
+
await socketA.sendRawBytes?.("large-stream", largeData);
|
|
294
301
|
const result = await received;
|
|
295
302
|
expect(result.length).toBe(largeData.length);
|
|
296
303
|
// Verify content
|
|
@@ -301,25 +308,27 @@ describe('binary-peer-connection-v2', () => {
|
|
|
301
308
|
iPeer.destroy();
|
|
302
309
|
rPeer.destroy();
|
|
303
310
|
});
|
|
304
|
-
it(
|
|
311
|
+
it("should remove raw bytes handlers", async () => {
|
|
305
312
|
const { iPeer, rPeer } = await getMockPeerPair();
|
|
306
313
|
const socketA = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("a", iPeer, "ws");
|
|
307
314
|
const socketB = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("b", rPeer, "ws");
|
|
308
315
|
let callCount = 0;
|
|
309
|
-
socketB.onRawBytes("temp-stream", () => {
|
|
310
|
-
|
|
316
|
+
socketB.onRawBytes?.("temp-stream", () => {
|
|
317
|
+
callCount++;
|
|
318
|
+
});
|
|
319
|
+
await socketA.sendRawBytes?.("temp-stream", new Uint8Array([1]));
|
|
311
320
|
await (0, utils_1.sleep)(50);
|
|
312
321
|
expect(callCount).toBe(1);
|
|
313
|
-
socketB.removeRawBytesHandler("temp-stream");
|
|
314
|
-
await socketA.sendRawBytes("temp-stream", new Uint8Array([2]));
|
|
322
|
+
socketB.removeRawBytesHandler?.("temp-stream");
|
|
323
|
+
await socketA.sendRawBytes?.("temp-stream", new Uint8Array([2]));
|
|
315
324
|
await (0, utils_1.sleep)(50);
|
|
316
325
|
expect(callCount).toBe(1); // Should not have increased
|
|
317
326
|
iPeer.destroy();
|
|
318
327
|
rPeer.destroy();
|
|
319
328
|
});
|
|
320
329
|
});
|
|
321
|
-
describe(
|
|
322
|
-
it(
|
|
330
|
+
describe("stats tracking", () => {
|
|
331
|
+
it("should track bytes sent and received", async () => {
|
|
323
332
|
const { iPeer, rPeer } = await getMockPeerPair();
|
|
324
333
|
const socketA = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("a", iPeer, "ws");
|
|
325
334
|
const socketB = (0, binary_peer_connection_v2_1.createBinaryPeerSocket)("b", rPeer, "ws");
|
|
@@ -334,27 +343,31 @@ describe('binary-peer-connection-v2', () => {
|
|
|
334
343
|
resolve(res);
|
|
335
344
|
});
|
|
336
345
|
});
|
|
337
|
-
expect(socketA.stats
|
|
338
|
-
expect(socketA.stats
|
|
339
|
-
expect(socketB.stats
|
|
340
|
-
expect(socketB.stats
|
|
346
|
+
expect(socketA.stats?.bytesSent).toBeGreaterThan(0);
|
|
347
|
+
expect(socketA.stats?.messagesSent).toBeGreaterThan(0);
|
|
348
|
+
expect(socketB.stats?.bytesReceived).toBeGreaterThan(0);
|
|
349
|
+
expect(socketB.stats?.messagesReceived).toBeGreaterThan(0);
|
|
341
350
|
iPeer.destroy();
|
|
342
351
|
rPeer.destroy();
|
|
343
352
|
});
|
|
344
353
|
});
|
|
345
|
-
describe(
|
|
346
|
-
it(
|
|
354
|
+
describe("wrapBinaryPeer", () => {
|
|
355
|
+
it("should successfully handshake over wrtc protocol", async () => {
|
|
347
356
|
const { iPeer, rPeer } = await getMockPeerPair();
|
|
348
357
|
const userId = `00000000000000000user001`;
|
|
349
358
|
const keys = (0, keys_1.newKeys)();
|
|
350
359
|
const connectionId = `00000000000000000conn001`;
|
|
351
360
|
const iPeerDeviceId = `000000000000000device001`;
|
|
352
361
|
const iPeerDevice = new device_1.Device(userId, iPeerDeviceId, keys);
|
|
353
|
-
const iPeerConnection = (0, binary_peer_connection_v2_1.wrapBinaryPeer)(connectionId, iPeer, iPeerDevice, true, {
|
|
362
|
+
const iPeerConnection = (0, binary_peer_connection_v2_1.wrapBinaryPeer)(connectionId, iPeer, iPeerDevice, true, {
|
|
363
|
+
protocol: "wrtc",
|
|
364
|
+
});
|
|
354
365
|
const rPeerDeviceId = `000000000000000device002`;
|
|
355
366
|
const rPeerDevice = new device_1.Device(userId, rPeerDeviceId, keys);
|
|
356
|
-
const rPeerConnection = (0, binary_peer_connection_v2_1.wrapBinaryPeer)(connectionId, rPeer, rPeerDevice, false, {
|
|
357
|
-
|
|
367
|
+
const rPeerConnection = (0, binary_peer_connection_v2_1.wrapBinaryPeer)(connectionId, rPeer, rPeerDevice, false, {
|
|
368
|
+
protocol: "wrtc",
|
|
369
|
+
});
|
|
370
|
+
await iPeerConnection.doHandshake(`wrtc://${connectionId}`);
|
|
358
371
|
expect(rPeerConnection.remoteDeviceInfo).toBeDefined();
|
|
359
372
|
expect(rPeerConnection.remoteDeviceInfo?.deviceId).toBe(iPeerDeviceId);
|
|
360
373
|
expect(iPeerConnection.remoteDeviceInfo).toBeDefined();
|
|
@@ -362,7 +375,7 @@ describe('binary-peer-connection-v2', () => {
|
|
|
362
375
|
iPeer.destroy();
|
|
363
376
|
rPeer.destroy();
|
|
364
377
|
});
|
|
365
|
-
it(
|
|
378
|
+
it("should set secureLocal/secureRemote when markTransportSecure is true", async () => {
|
|
366
379
|
const { iPeer, rPeer } = await getMockPeerPair();
|
|
367
380
|
const userId = `00000000000000000user001`;
|
|
368
381
|
const keys = (0, keys_1.newKeys)();
|
|
@@ -370,14 +383,14 @@ describe('binary-peer-connection-v2', () => {
|
|
|
370
383
|
const iPeerDeviceId = `000000000000000device001`;
|
|
371
384
|
const iPeerDevice = new device_1.Device(userId, iPeerDeviceId, keys);
|
|
372
385
|
const iPeerConnection = (0, binary_peer_connection_v2_1.wrapBinaryPeer)(connectionId, iPeer, iPeerDevice, true, {
|
|
373
|
-
protocol:
|
|
374
|
-
markTransportSecure: true
|
|
386
|
+
protocol: "wrtc",
|
|
387
|
+
markTransportSecure: true,
|
|
375
388
|
});
|
|
376
389
|
const rPeerDeviceId = `000000000000000device002`;
|
|
377
390
|
const rPeerDevice = new device_1.Device(userId, rPeerDeviceId, keys);
|
|
378
391
|
const rPeerConnection = (0, binary_peer_connection_v2_1.wrapBinaryPeer)(connectionId, rPeer, rPeerDevice, false, {
|
|
379
|
-
protocol:
|
|
380
|
-
markTransportSecure: true
|
|
392
|
+
protocol: "wrtc",
|
|
393
|
+
markTransportSecure: true,
|
|
381
394
|
});
|
|
382
395
|
expect(iPeerConnection.secureLocal).toBe(true);
|
|
383
396
|
expect(iPeerConnection.secureRemote).toBe(true);
|
|
@@ -387,8 +400,8 @@ describe('binary-peer-connection-v2', () => {
|
|
|
387
400
|
rPeer.destroy();
|
|
388
401
|
});
|
|
389
402
|
});
|
|
390
|
-
describe(
|
|
391
|
-
it(
|
|
403
|
+
describe("backwards compatibility", () => {
|
|
404
|
+
it("wrapWrtc should work as alias and set secure flags", async () => {
|
|
392
405
|
const { iPeer, rPeer } = await getMockPeerPair();
|
|
393
406
|
const userId = `00000000000000000user001`;
|
|
394
407
|
const keys = (0, keys_1.newKeys)();
|
|
@@ -401,13 +414,13 @@ describe('binary-peer-connection-v2', () => {
|
|
|
401
414
|
const rPeerConnection = (0, binary_peer_connection_v2_1.wrapWrtc)(connectionId, rPeer, rPeerDevice, false);
|
|
402
415
|
expect(iPeerConnection.secureLocal).toBe(true);
|
|
403
416
|
expect(iPeerConnection.secureRemote).toBe(true);
|
|
404
|
-
await iPeerConnection.doHandshake(
|
|
417
|
+
await iPeerConnection.doHandshake(`wrtc://${connectionId}`);
|
|
405
418
|
expect(rPeerConnection.remoteDeviceInfo).toBeDefined();
|
|
406
419
|
expect(rPeerConnection.remoteDeviceInfo?.deviceId).toBe(iPeerDeviceId);
|
|
407
420
|
iPeer.destroy();
|
|
408
421
|
rPeer.destroy();
|
|
409
422
|
});
|
|
410
|
-
it(
|
|
423
|
+
it("binary peers should bypass StreamedSocket (handlesOwnEncoding)", async () => {
|
|
411
424
|
const { iPeer } = await getMockPeerPair();
|
|
412
425
|
const userId = `00000000000000000user001`;
|
|
413
426
|
const keys = (0, keys_1.newKeys)();
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { Connection } from "./connection";
|
|
2
|
-
import { Device } from "./device";
|
|
3
|
-
import { ISocket } from "./socket.type";
|
|
4
|
-
type ITrustLevelFn = Connection[
|
|
2
|
+
import type { Device } from "./device";
|
|
3
|
+
import type { ISocket } from "./socket.type";
|
|
4
|
+
type ITrustLevelFn = Connection["getTrustLevel"];
|
|
5
5
|
/**
|
|
6
6
|
* Generic binary peer interface supporting WebRTC and WebSocket transports.
|
|
7
7
|
* Provides a unified abstraction for binary data channel communication.
|
|
8
8
|
*/
|
|
9
9
|
export interface IBinaryPeer {
|
|
10
|
-
on(event:
|
|
11
|
-
on(event:
|
|
12
|
-
on(event:
|
|
10
|
+
on(event: "data", handler: (data: Buffer | Uint8Array) => void): void;
|
|
11
|
+
on(event: "close", handler: () => void): void;
|
|
12
|
+
on(event: "drain", handler: () => void): void;
|
|
13
13
|
send(data: string | Uint8Array | Buffer): void;
|
|
14
14
|
destroy(): void;
|
|
15
15
|
/**
|
|
@@ -21,7 +21,7 @@ export interface IBinaryPeer {
|
|
|
21
21
|
export type IWebRTCPeer = IBinaryPeer;
|
|
22
22
|
export interface WrapBinaryPeerOptions {
|
|
23
23
|
/** Protocol identifier used for server address (e.g., 'wrtc' or 'ws') */
|
|
24
|
-
protocol:
|
|
24
|
+
protocol: "wrtc" | "ws";
|
|
25
25
|
/**
|
|
26
26
|
* Mark the transport as already secure (encrypted at transport layer).
|
|
27
27
|
* When true, sets secureLocal and secureRemote to skip application-level encryption.
|
|
@@ -4,10 +4,10 @@ exports.createBinaryPeerSocket = createBinaryPeerSocket;
|
|
|
4
4
|
exports.wrapBinaryPeer = wrapBinaryPeer;
|
|
5
5
|
exports.wrapWrtc = wrapWrtc;
|
|
6
6
|
const msgpack_1 = require("@msgpack/msgpack");
|
|
7
|
+
const utils_1 = require("../utils");
|
|
7
8
|
const connection_1 = require("./connection");
|
|
8
9
|
const get_trust_level_fn_1 = require("./get-trust-level-fn");
|
|
9
10
|
const streamed_socket_1 = require("./streamed-socket");
|
|
10
|
-
const utils_1 = require("../utils");
|
|
11
11
|
const tx_encoding_1 = require("./tx-encoding");
|
|
12
12
|
// Protocol discriminator bytes for multiplexing RPC and raw byte streams
|
|
13
13
|
const PROTOCOL_RPC = 0x00;
|
|
@@ -21,7 +21,7 @@ const LARGE_MESSAGE_THRESHOLD = 64 * 1024; // 64KB
|
|
|
21
21
|
const RPC_CHUNK_SIZE_WRTC = 16 * 1024; // 16KB for WebRTC (fits in Unix socket kernel buffer)
|
|
22
22
|
const RPC_CHUNK_SIZE_DEFAULT = 512 * 1024; // 512KB for WebSocket
|
|
23
23
|
// Reserved stream ID for RPC messages sent via raw bytes
|
|
24
|
-
const RPC_STREAM_ID =
|
|
24
|
+
const RPC_STREAM_ID = "__rpc";
|
|
25
25
|
// Flags for __rpc stream chunking protocol:
|
|
26
26
|
// Each message on the __rpc stream starts with a 1-byte flag.
|
|
27
27
|
const RPC_FLAG_SINGLE = 0x00; // [0x00][encoded message] - complete in one message
|
|
@@ -56,10 +56,10 @@ function decodeStreamId(bytes) {
|
|
|
56
56
|
function encodeMessage(message) {
|
|
57
57
|
// Check if args/result is a Uint8Array - if so, flag it to keep it as raw bytes
|
|
58
58
|
let isUint8ArrayData = false;
|
|
59
|
-
if (message.type ===
|
|
59
|
+
if (message.type === "call" && message.args instanceof Uint8Array) {
|
|
60
60
|
isUint8ArrayData = true;
|
|
61
61
|
}
|
|
62
|
-
else if (message.type ===
|
|
62
|
+
else if (message.type === "callback" && message.result instanceof Uint8Array) {
|
|
63
63
|
isUint8ArrayData = true;
|
|
64
64
|
}
|
|
65
65
|
// Encode metadata using msgpack (without args/result/error - those go in data)
|
|
@@ -73,7 +73,7 @@ function encodeMessage(message) {
|
|
|
73
73
|
const metadataLength = metadataBytes.length;
|
|
74
74
|
// Encode the data payload (args, result, or error)
|
|
75
75
|
let dataBytes;
|
|
76
|
-
if (message.type ===
|
|
76
|
+
if (message.type === "call" && message.args !== undefined) {
|
|
77
77
|
// If args is already a Uint8Array, use it directly without txEncode
|
|
78
78
|
if (isUint8ArrayData) {
|
|
79
79
|
dataBytes = message.args;
|
|
@@ -82,7 +82,7 @@ function encodeMessage(message) {
|
|
|
82
82
|
dataBytes = (0, tx_encoding_1.txEncode)(message.args);
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
|
-
else if (message.type ===
|
|
85
|
+
else if (message.type === "callback") {
|
|
86
86
|
if (message.error !== undefined) {
|
|
87
87
|
dataBytes = (0, tx_encoding_1.txEncode)({ error: message.error });
|
|
88
88
|
}
|
|
@@ -125,7 +125,7 @@ function decodeMessage(bytes) {
|
|
|
125
125
|
};
|
|
126
126
|
// Decode the data payload
|
|
127
127
|
if (dataBytes.length > 0) {
|
|
128
|
-
if (message.type ===
|
|
128
|
+
if (message.type === "call") {
|
|
129
129
|
// If it was a Uint8Array, use it directly without txDecode
|
|
130
130
|
if (metadata.isUint8ArrayData) {
|
|
131
131
|
message.args = dataBytes;
|
|
@@ -134,7 +134,7 @@ function decodeMessage(bytes) {
|
|
|
134
134
|
message.args = (0, tx_encoding_1.txDecode)(dataBytes);
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
|
-
else if (message.type ===
|
|
137
|
+
else if (message.type === "callback") {
|
|
138
138
|
if (metadata.isUint8ArrayData) {
|
|
139
139
|
// If it was a Uint8Array result, use it directly
|
|
140
140
|
message.result = dataBytes;
|
|
@@ -156,19 +156,18 @@ function decodeMessage(bytes) {
|
|
|
156
156
|
* Creates an ISocket from a binary peer without creating a full Connection.
|
|
157
157
|
* Useful when you need to pass custom localServerAddresses to the Connection.
|
|
158
158
|
*/
|
|
159
|
-
function createBinaryPeerSocket(connectionId, peer, protocol =
|
|
159
|
+
function createBinaryPeerSocket(connectionId, peer, protocol = "binary") {
|
|
160
160
|
const handlers = {};
|
|
161
161
|
const callbacks = {};
|
|
162
162
|
const rawBytesHandlers = {};
|
|
163
163
|
let isClosed = false;
|
|
164
164
|
const stats = (0, streamed_socket_1.createSocketStats)();
|
|
165
165
|
// Map protocol string to TransportType (needed early for threshold calculations)
|
|
166
|
-
const transportType = protocol ===
|
|
167
|
-
protocol === 'ws' ? 'ws' : 'unknown';
|
|
166
|
+
const transportType = protocol === "wrtc" ? "wrtc" : protocol === "ws" ? "ws" : "unknown";
|
|
168
167
|
// Transport-specific thresholds (computed once)
|
|
169
|
-
const HIGH_WATER_MARK = transportType ===
|
|
170
|
-
const LOW_WATER_MARK = transportType ===
|
|
171
|
-
const RPC_CHUNK_SIZE = transportType ===
|
|
168
|
+
const HIGH_WATER_MARK = transportType === "wrtc" ? 128 * 1024 : 4 * 1024 * 1024;
|
|
169
|
+
const LOW_WATER_MARK = transportType === "wrtc" ? 32 * 1024 : 2 * 1024 * 1024;
|
|
170
|
+
const RPC_CHUNK_SIZE = transportType === "wrtc" ? RPC_CHUNK_SIZE_WRTC : RPC_CHUNK_SIZE_DEFAULT;
|
|
172
171
|
// Core sendRawBytes implementation - defined early so sendRPCData can use it
|
|
173
172
|
const sendRawBytesImpl = async (streamId, data) => {
|
|
174
173
|
const sidBytes = getStreamIdBytes(streamId);
|
|
@@ -181,7 +180,7 @@ function createBinaryPeerSocket(connectionId, peer, protocol = 'binary') {
|
|
|
181
180
|
packet.set(data, headerLen);
|
|
182
181
|
// Backpressure: wait for buffer to drain before sending more
|
|
183
182
|
if (peer.getBufferedAmount && peer.getBufferedAmount() > HIGH_WATER_MARK) {
|
|
184
|
-
await new Promise(resolve => {
|
|
183
|
+
await new Promise((resolve) => {
|
|
185
184
|
const checkDrain = () => {
|
|
186
185
|
if (!peer.getBufferedAmount || peer.getBufferedAmount() < LOW_WATER_MARK) {
|
|
187
186
|
resolve();
|
|
@@ -190,7 +189,7 @@ function createBinaryPeerSocket(connectionId, peer, protocol = 'binary') {
|
|
|
190
189
|
setTimeout(checkDrain, 5);
|
|
191
190
|
}
|
|
192
191
|
};
|
|
193
|
-
peer.on(
|
|
192
|
+
peer.on("drain", resolve);
|
|
194
193
|
checkDrain();
|
|
195
194
|
});
|
|
196
195
|
}
|
|
@@ -248,7 +247,7 @@ function createBinaryPeerSocket(connectionId, peer, protocol = 'binary') {
|
|
|
248
247
|
let rpcReassemblyBuffer = null;
|
|
249
248
|
let rpcReassemblyOffset = 0;
|
|
250
249
|
// Handle incoming data
|
|
251
|
-
peer.on(
|
|
250
|
+
peer.on("data", async (data) => {
|
|
252
251
|
try {
|
|
253
252
|
const bytes = new Uint8Array(data);
|
|
254
253
|
stats.bytesReceived += bytes.length;
|
|
@@ -332,7 +331,7 @@ function createBinaryPeerSocket(connectionId, peer, protocol = 'binary') {
|
|
|
332
331
|
}
|
|
333
332
|
});
|
|
334
333
|
// Handle closure
|
|
335
|
-
peer.on(
|
|
334
|
+
peer.on("close", () => {
|
|
336
335
|
if (isClosed)
|
|
337
336
|
return;
|
|
338
337
|
isClosed = true;
|
|
@@ -347,7 +346,7 @@ function createBinaryPeerSocket(connectionId, peer, protocol = 'binary') {
|
|
|
347
346
|
emit(eventName, args, callback) {
|
|
348
347
|
const callbackId = (0, utils_1.newid)();
|
|
349
348
|
callbacks[callbackId] = callback;
|
|
350
|
-
const message = { type:
|
|
349
|
+
const message = { type: "call", eventName, args, callbackId };
|
|
351
350
|
const encoded = encodeMessage(message);
|
|
352
351
|
sendRPCData(encoded);
|
|
353
352
|
},
|
|
@@ -359,7 +358,9 @@ function createBinaryPeerSocket(connectionId, peer, protocol = 'binary') {
|
|
|
359
358
|
delete handlers[eventName];
|
|
360
359
|
}
|
|
361
360
|
else {
|
|
362
|
-
Object.keys(handlers)
|
|
361
|
+
for (const key of Object.keys(handlers)) {
|
|
362
|
+
delete handlers[key];
|
|
363
|
+
}
|
|
363
364
|
}
|
|
364
365
|
},
|
|
365
366
|
disconnect() {
|
|
@@ -371,7 +372,7 @@ function createBinaryPeerSocket(connectionId, peer, protocol = 'binary') {
|
|
|
371
372
|
},
|
|
372
373
|
removeRawBytesHandler(streamId) {
|
|
373
374
|
delete rawBytesHandlers[streamId];
|
|
374
|
-
}
|
|
375
|
+
},
|
|
375
376
|
};
|
|
376
377
|
return socket;
|
|
377
378
|
}
|
|
@@ -379,7 +380,7 @@ function createBinaryPeerSocket(connectionId, peer, protocol = 'binary') {
|
|
|
379
380
|
// sendRPCData automatically routes large messages through raw bytes streaming
|
|
380
381
|
function handleRPCMessage(bytes, handlers, callbacks, sendRPCData) {
|
|
381
382
|
const message = decodeMessage(bytes);
|
|
382
|
-
if (message.type ===
|
|
383
|
+
if (message.type === "callback") {
|
|
383
384
|
const callback = callbacks[message.callbackId];
|
|
384
385
|
if (callback) {
|
|
385
386
|
delete callbacks[message.callbackId];
|
|
@@ -387,7 +388,7 @@ function handleRPCMessage(bytes, handlers, callbacks, sendRPCData) {
|
|
|
387
388
|
}
|
|
388
389
|
return;
|
|
389
390
|
}
|
|
390
|
-
if (message.type ===
|
|
391
|
+
if (message.type === "call") {
|
|
391
392
|
const handler = handlers[message.eventName];
|
|
392
393
|
if (!handler) {
|
|
393
394
|
console.warn(`No handler for event: ${message.eventName}`);
|
|
@@ -396,7 +397,7 @@ function handleRPCMessage(bytes, handlers, callbacks, sendRPCData) {
|
|
|
396
397
|
try {
|
|
397
398
|
const callback = (err, result) => {
|
|
398
399
|
const responseMessage = {
|
|
399
|
-
type:
|
|
400
|
+
type: "callback",
|
|
400
401
|
callbackId: message.callbackId,
|
|
401
402
|
};
|
|
402
403
|
if (err)
|
|
@@ -412,9 +413,9 @@ function handleRPCMessage(bytes, handlers, callbacks, sendRPCData) {
|
|
|
412
413
|
catch (error) {
|
|
413
414
|
console.error("Error in handler", { eventName: message.eventName, error });
|
|
414
415
|
const errorMessage = {
|
|
415
|
-
type:
|
|
416
|
+
type: "callback",
|
|
416
417
|
callbackId: message.callbackId,
|
|
417
|
-
error: error.message
|
|
418
|
+
error: error.message,
|
|
418
419
|
};
|
|
419
420
|
const encoded = encodeMessage(errorMessage);
|
|
420
421
|
sendRPCData(encoded);
|
|
@@ -431,7 +432,7 @@ function wrapBinaryPeer(connectionId, peer, localDevice, initiator, options, get
|
|
|
431
432
|
const socket = createBinaryPeerSocket(connectionId, peer, protocol);
|
|
432
433
|
const serverAddress = `${protocol}://${connectionId}`;
|
|
433
434
|
const localServerAddresses = initiator ? undefined : [serverAddress];
|
|
434
|
-
if (process.env.NODE_ENV !==
|
|
435
|
+
if (process.env.NODE_ENV !== "test") {
|
|
435
436
|
getTrustLevel ??= (0, get_trust_level_fn_1.getTrustLevelFn)(localDevice, serverAddress);
|
|
436
437
|
}
|
|
437
438
|
const connection = new connection_1.Connection(socket, localDevice, localServerAddresses, getTrustLevel);
|
|
@@ -448,5 +449,5 @@ function wrapBinaryPeer(connectionId, peer, localDevice, initiator, options, get
|
|
|
448
449
|
* WebRTC is encrypted at the transport layer (DTLS-SRTP), so we skip application-level encryption.
|
|
449
450
|
*/
|
|
450
451
|
function wrapWrtc(connectionId, peer, localDevice, initiator, getTrustLevel) {
|
|
451
|
-
return wrapBinaryPeer(connectionId, peer, localDevice, initiator, { protocol:
|
|
452
|
+
return wrapBinaryPeer(connectionId, peer, localDevice, initiator, { protocol: "wrtc", markTransportSecure: true }, getTrustLevel);
|
|
452
453
|
}
|