cojson-transport-ws 0.9.19 → 0.9.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
1
 
2
- > cojson-transport-ws@0.9.19 build /home/runner/work/jazz/jazz/packages/cojson-transport-ws
2
+ > cojson-transport-ws@0.9.23 build /home/runner/work/jazz/jazz/packages/cojson-transport-ws
3
3
  > rm -rf ./dist && tsc --sourceMap --outDir dist
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # cojson-transport-nodejs-ws
2
2
 
3
+ ## 0.9.23
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [70c9a5d]
8
+ - cojson@0.9.23
9
+
10
+ ## 0.9.22
11
+
12
+ ### Patch Changes
13
+
14
+ - 14b6149: Handle websocket errors and add an onSuccess callback
15
+
3
16
  ## 0.9.19
4
17
 
5
18
  ### Patch Changes
package/dist/index.js CHANGED
@@ -82,7 +82,7 @@ function createClosedEventEmitter(callback = () => { }) {
82
82
  callback();
83
83
  };
84
84
  }
85
- export function createWebSocketPeer({ id, websocket, role, expectPings = true, batchingByDefault = true, deletePeerStateOnClose = false, onClose, }) {
85
+ export function createWebSocketPeer({ id, websocket, role, expectPings = true, batchingByDefault = true, deletePeerStateOnClose = false, onSuccess, onClose, }) {
86
86
  const incoming = new cojsonInternals.Channel();
87
87
  const emitClosedEvent = createClosedEventEmitter(onClose);
88
88
  function handleClose() {
@@ -92,6 +92,12 @@ export function createWebSocketPeer({ id, websocket, role, expectPings = true, b
92
92
  emitClosedEvent();
93
93
  }
94
94
  websocket.addEventListener("close", handleClose);
95
+ websocket.addEventListener("error", (err) => {
96
+ logger.warn(err.message);
97
+ if (err.message.includes("ECONNREFUSED")) {
98
+ websocket.close();
99
+ }
100
+ });
95
101
  const pingTimeout = createPingTimeoutListener(expectPings, () => {
96
102
  incoming
97
103
  .push("PingTimeout")
@@ -99,6 +105,7 @@ export function createWebSocketPeer({ id, websocket, role, expectPings = true, b
99
105
  emitClosedEvent();
100
106
  });
101
107
  const outgoingMessages = createOutgoingMessagesManager(websocket, batchingByDefault);
108
+ let isFirstMessage = true;
102
109
  function handleIncomingMsg(event) {
103
110
  if (event.data === "") {
104
111
  return;
@@ -108,6 +115,12 @@ export function createWebSocketPeer({ id, websocket, role, expectPings = true, b
108
115
  logger.warn("Error while deserializing messages: " + getErrorMessage(result.error));
109
116
  return;
110
117
  }
118
+ if (isFirstMessage) {
119
+ // The only way to know that the connection has been correctly established with our sync server
120
+ // is to track that we got a message from the server.
121
+ onSuccess?.();
122
+ isFirstMessage = false;
123
+ }
111
124
  const { messages } = result;
112
125
  if (messages.length > 1) {
113
126
  // If more than one message is received, the other peer supports batching
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -112,6 +112,23 @@ describe("createWebSocketPeer", () => {
112
112
  };
113
113
  await expect(peer.outgoing.push(message)).rejects.toThrow("WebSocket closed");
114
114
  });
115
+ test("should call onSuccess handler after receiving first message", () => {
116
+ const onSuccess = vi.fn();
117
+ const { listeners } = setup({ onSuccess });
118
+ const messageHandler = listeners.get("message");
119
+ const message = {
120
+ action: "known",
121
+ id: "co_ztest",
122
+ header: false,
123
+ sessions: {},
124
+ };
125
+ // First message should trigger onSuccess
126
+ messageHandler?.(new MessageEvent("message", { data: JSON.stringify(message) }));
127
+ expect(onSuccess).toHaveBeenCalledTimes(1);
128
+ // Subsequent messages should not trigger onSuccess again
129
+ messageHandler?.(new MessageEvent("message", { data: JSON.stringify(message) }));
130
+ expect(onSuccess).toHaveBeenCalledTimes(1);
131
+ });
115
132
  describe("batchingByDefault = true", () => {
116
133
  test("should batch outgoing messages", async () => {
117
134
  const { peer, mockWebSocket } = setup();
@@ -1 +1 @@
1
- {"version":3,"file":"createWebSocketPeer.test.js","sourceRoot":"","sources":["../../src/tests/createWebSocketPeer.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createWebSocketPeer.test.js","sourceRoot":"","sources":["../../src/tests/createWebSocketPeer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ import { ControlledAgent, LocalNode, WasmCrypto } from "cojson";
2
+ import { afterEach, beforeEach, describe, expect, test } from "vitest";
3
+ import { WebSocket } from "ws";
4
+ import { createWebSocketPeer } from "../index";
5
+ import { startSyncServer } from "./syncServer";
6
+ describe("WebSocket Peer Integration", () => {
7
+ let server;
8
+ let syncServerUrl;
9
+ let crypto;
10
+ beforeEach(async () => {
11
+ crypto = await WasmCrypto.create();
12
+ const result = await startSyncServer();
13
+ server = result;
14
+ syncServerUrl = result.syncServer;
15
+ });
16
+ afterEach(() => {
17
+ server.close();
18
+ });
19
+ test("should establish connection between client and server nodes", async () => {
20
+ // Create client node
21
+ const clientAgent = crypto.newRandomAgentSecret();
22
+ const clientNode = new LocalNode(new ControlledAgent(clientAgent, crypto), crypto.newRandomSessionID(crypto.getAgentID(clientAgent)), crypto);
23
+ // Create WebSocket connection
24
+ const ws = new WebSocket(syncServerUrl);
25
+ // Track connection success
26
+ let connectionEstablished = false;
27
+ // Create peer and add to client node
28
+ const peer = createWebSocketPeer({
29
+ id: "test-client",
30
+ websocket: ws,
31
+ role: "server",
32
+ onSuccess: () => {
33
+ connectionEstablished = true;
34
+ },
35
+ });
36
+ clientNode.syncManager.addPeer(peer);
37
+ // Wait for connection to establish
38
+ await new Promise((resolve) => {
39
+ const checkConnection = setInterval(() => {
40
+ if (connectionEstablished) {
41
+ clearInterval(checkConnection);
42
+ resolve();
43
+ }
44
+ }, 100);
45
+ });
46
+ expect(connectionEstablished).toBe(true);
47
+ expect(clientNode.syncManager.getPeers()).toHaveLength(1);
48
+ });
49
+ test("should sync data between nodes through WebSocket connection", async () => {
50
+ const clientAgent = crypto.newRandomAgentSecret();
51
+ const clientNode = new LocalNode(new ControlledAgent(clientAgent, crypto), crypto.newRandomSessionID(crypto.getAgentID(clientAgent)), crypto);
52
+ const ws = new WebSocket(syncServerUrl);
53
+ const peer = createWebSocketPeer({
54
+ id: "test-client",
55
+ websocket: ws,
56
+ role: "server",
57
+ });
58
+ clientNode.syncManager.addPeer(peer);
59
+ // Create a test group
60
+ const group = clientNode.createGroup();
61
+ const map = group.createMap();
62
+ map.set("testKey", "testValue", "trusting");
63
+ // Wait for sync
64
+ await map.core.waitForSync();
65
+ console.log("synced");
66
+ // Verify data reached the server
67
+ const serverNode = server.localNode;
68
+ const serverMap = await serverNode.load(map.id);
69
+ expect(serverMap.get("testKey")).toBe("testValue");
70
+ });
71
+ test("should handle disconnection and cleanup", async () => {
72
+ const clientAgent = crypto.newRandomAgentSecret();
73
+ const clientNode = new LocalNode(new ControlledAgent(clientAgent, crypto), crypto.newRandomSessionID(crypto.getAgentID(clientAgent)), crypto);
74
+ const ws = new WebSocket(syncServerUrl);
75
+ let disconnectCalled = false;
76
+ const peer = createWebSocketPeer({
77
+ id: "test-client",
78
+ websocket: ws,
79
+ role: "server",
80
+ onClose: () => {
81
+ disconnectCalled = true;
82
+ },
83
+ });
84
+ clientNode.syncManager.addPeer(peer);
85
+ // Wait for connection to establish
86
+ await new Promise((resolve) => setTimeout(resolve, 200));
87
+ // Close the server
88
+ server.close();
89
+ // Wait for disconnect handling
90
+ await new Promise((resolve) => setTimeout(resolve, 200));
91
+ expect(disconnectCalled).toBe(true);
92
+ expect(ws.readyState).toBe(WebSocket.CLOSED);
93
+ });
94
+ });
95
+ //# sourceMappingURL=integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../src/tests/integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { createServer } from "http";
2
+ import { ControlledAgent, LocalNode, WasmCrypto } from "cojson";
3
+ import { WebSocketServer } from "ws";
4
+ import { createWebSocketPeer } from "../index";
5
+ export const startSyncServer = async (port) => {
6
+ const crypto = await WasmCrypto.create();
7
+ const server = createServer((req, res) => {
8
+ if (req.url === "/health") {
9
+ res.writeHead(200);
10
+ res.end("ok");
11
+ }
12
+ });
13
+ const wss = new WebSocketServer({ noServer: true });
14
+ const agentSecret = crypto.newRandomAgentSecret();
15
+ const agentID = crypto.getAgentID(agentSecret);
16
+ const localNode = new LocalNode(new ControlledAgent(agentSecret, crypto), crypto.newRandomSessionID(agentID), crypto);
17
+ const connections = new Set();
18
+ wss.on("connection", function connection(ws, req) {
19
+ connections.add(ws);
20
+ const sendPing = () => {
21
+ ws.send(JSON.stringify({
22
+ type: "ping",
23
+ time: Date.now(),
24
+ dc: "unknown",
25
+ }));
26
+ };
27
+ // ping/pong for the connection liveness
28
+ const pinging = setInterval(sendPing, 100);
29
+ sendPing(); // Immediately send a ping to the client to signal that the connection is established
30
+ ws.on("close", () => {
31
+ clearInterval(pinging);
32
+ connections.delete(ws);
33
+ });
34
+ const clientId = new Date().toISOString();
35
+ localNode.syncManager.addPeer(createWebSocketPeer({
36
+ id: clientId,
37
+ role: "client",
38
+ websocket: ws,
39
+ expectPings: false,
40
+ batchingByDefault: false,
41
+ deletePeerStateOnClose: true,
42
+ }));
43
+ ws.on("error", (e) => console.error(`Error on connection ${clientId}:`, e));
44
+ });
45
+ server.on("upgrade", function upgrade(req, socket, head) {
46
+ if (req.url !== "/health") {
47
+ wss.handleUpgrade(req, socket, head, function done(ws) {
48
+ wss.emit("connection", ws, req);
49
+ });
50
+ }
51
+ });
52
+ server.listen(port ?? 0);
53
+ port = server.address().port;
54
+ const syncServer = `ws://localhost:${port}`;
55
+ return {
56
+ close: () => {
57
+ connections.forEach((ws) => ws.close());
58
+ server.close();
59
+ },
60
+ syncServer,
61
+ port,
62
+ localNode,
63
+ };
64
+ };
65
+ //# sourceMappingURL=syncServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncServer.js","sourceRoot":"","sources":["../../src/tests/syncServer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,16 +1,17 @@
1
1
  {
2
2
  "name": "cojson-transport-ws",
3
3
  "type": "module",
4
- "version": "0.9.19",
4
+ "version": "0.9.23",
5
5
  "main": "dist/index.js",
6
6
  "types": "src/index.ts",
7
7
  "license": "MIT",
8
8
  "dependencies": {
9
- "cojson": "0.9.19",
10
- "typescript": "~5.6.2"
9
+ "typescript": "~5.6.2",
10
+ "cojson": "0.9.23"
11
11
  },
12
12
  "devDependencies": {
13
- "@types/ws": "8.5.10"
13
+ "@types/ws": "8.5.10",
14
+ "ws": "^8.14.2"
14
15
  },
15
16
  "scripts": {
16
17
  "dev": "tsc --watch --sourceMap --outDir dist",
package/src/index.ts CHANGED
@@ -21,6 +21,7 @@ export type CreateWebSocketPeerOpts = {
21
21
  batchingByDefault?: boolean;
22
22
  deletePeerStateOnClose?: boolean;
23
23
  onClose?: () => void;
24
+ onSuccess?: () => void;
24
25
  };
25
26
 
26
27
  function createPingTimeoutListener(enabled: boolean, callback: () => void) {
@@ -127,6 +128,7 @@ export function createWebSocketPeer({
127
128
  expectPings = true,
128
129
  batchingByDefault = true,
129
130
  deletePeerStateOnClose = false,
131
+ onSuccess,
130
132
  onClose,
131
133
  }: CreateWebSocketPeerOpts): Peer {
132
134
  const incoming = new cojsonInternals.Channel<
@@ -142,6 +144,13 @@ export function createWebSocketPeer({
142
144
  }
143
145
 
144
146
  websocket.addEventListener("close", handleClose);
147
+ websocket.addEventListener("error" as any, (err) => {
148
+ logger.warn(err.message);
149
+
150
+ if (err.message.includes("ECONNREFUSED")) {
151
+ websocket.close();
152
+ }
153
+ });
145
154
 
146
155
  const pingTimeout = createPingTimeoutListener(expectPings, () => {
147
156
  incoming
@@ -154,6 +163,7 @@ export function createWebSocketPeer({
154
163
  websocket,
155
164
  batchingByDefault,
156
165
  );
166
+ let isFirstMessage = true;
157
167
 
158
168
  function handleIncomingMsg(event: { data: unknown }) {
159
169
  if (event.data === "") {
@@ -169,6 +179,13 @@ export function createWebSocketPeer({
169
179
  return;
170
180
  }
171
181
 
182
+ if (isFirstMessage) {
183
+ // The only way to know that the connection has been correctly established with our sync server
184
+ // is to track that we got a message from the server.
185
+ onSuccess?.();
186
+ isFirstMessage = false;
187
+ }
188
+
172
189
  const { messages } = result;
173
190
 
174
191
  if (messages.length > 1) {
@@ -170,6 +170,31 @@ describe("createWebSocketPeer", () => {
170
170
  );
171
171
  });
172
172
 
173
+ test("should call onSuccess handler after receiving first message", () => {
174
+ const onSuccess = vi.fn();
175
+ const { listeners } = setup({ onSuccess });
176
+
177
+ const messageHandler = listeners.get("message");
178
+ const message: SyncMessage = {
179
+ action: "known",
180
+ id: "co_ztest",
181
+ header: false,
182
+ sessions: {},
183
+ };
184
+
185
+ // First message should trigger onSuccess
186
+ messageHandler?.(
187
+ new MessageEvent("message", { data: JSON.stringify(message) }),
188
+ );
189
+ expect(onSuccess).toHaveBeenCalledTimes(1);
190
+
191
+ // Subsequent messages should not trigger onSuccess again
192
+ messageHandler?.(
193
+ new MessageEvent("message", { data: JSON.stringify(message) }),
194
+ );
195
+ expect(onSuccess).toHaveBeenCalledTimes(1);
196
+ });
197
+
173
198
  describe("batchingByDefault = true", () => {
174
199
  test("should batch outgoing messages", async () => {
175
200
  const { peer, mockWebSocket } = setup();
@@ -0,0 +1,132 @@
1
+ import { ControlledAgent, LocalNode, WasmCrypto } from "cojson";
2
+ import { afterEach, beforeEach, describe, expect, test } from "vitest";
3
+ import { WebSocket } from "ws";
4
+ import { createWebSocketPeer } from "../index";
5
+ import { startSyncServer } from "./syncServer";
6
+
7
+ describe("WebSocket Peer Integration", () => {
8
+ let server: any;
9
+ let syncServerUrl: string;
10
+ let crypto: WasmCrypto;
11
+
12
+ beforeEach(async () => {
13
+ crypto = await WasmCrypto.create();
14
+ const result = await startSyncServer();
15
+ server = result;
16
+ syncServerUrl = result.syncServer;
17
+ });
18
+
19
+ afterEach(() => {
20
+ server.close();
21
+ });
22
+
23
+ test("should establish connection between client and server nodes", async () => {
24
+ // Create client node
25
+ const clientAgent = crypto.newRandomAgentSecret();
26
+ const clientNode = new LocalNode(
27
+ new ControlledAgent(clientAgent, crypto),
28
+ crypto.newRandomSessionID(crypto.getAgentID(clientAgent)),
29
+ crypto,
30
+ );
31
+
32
+ // Create WebSocket connection
33
+ const ws = new WebSocket(syncServerUrl);
34
+
35
+ // Track connection success
36
+ let connectionEstablished = false;
37
+
38
+ // Create peer and add to client node
39
+ const peer = createWebSocketPeer({
40
+ id: "test-client",
41
+ websocket: ws,
42
+ role: "server",
43
+ onSuccess: () => {
44
+ connectionEstablished = true;
45
+ },
46
+ });
47
+
48
+ clientNode.syncManager.addPeer(peer);
49
+
50
+ // Wait for connection to establish
51
+ await new Promise<void>((resolve) => {
52
+ const checkConnection = setInterval(() => {
53
+ if (connectionEstablished) {
54
+ clearInterval(checkConnection);
55
+ resolve();
56
+ }
57
+ }, 100);
58
+ });
59
+
60
+ expect(connectionEstablished).toBe(true);
61
+ expect(clientNode.syncManager.getPeers()).toHaveLength(1);
62
+ });
63
+
64
+ test("should sync data between nodes through WebSocket connection", async () => {
65
+ const clientAgent = crypto.newRandomAgentSecret();
66
+ const clientNode = new LocalNode(
67
+ new ControlledAgent(clientAgent, crypto),
68
+ crypto.newRandomSessionID(crypto.getAgentID(clientAgent)),
69
+ crypto,
70
+ );
71
+
72
+ const ws = new WebSocket(syncServerUrl);
73
+
74
+ const peer = createWebSocketPeer({
75
+ id: "test-client",
76
+ websocket: ws,
77
+ role: "server",
78
+ });
79
+
80
+ clientNode.syncManager.addPeer(peer);
81
+
82
+ // Create a test group
83
+ const group = clientNode.createGroup();
84
+ const map = group.createMap();
85
+ map.set("testKey", "testValue", "trusting");
86
+
87
+ // Wait for sync
88
+ await map.core.waitForSync();
89
+ console.log("synced");
90
+
91
+ // Verify data reached the server
92
+ const serverNode = server.localNode;
93
+ const serverMap = await serverNode.load(map.id);
94
+
95
+ expect(serverMap.get("testKey")).toBe("testValue");
96
+ });
97
+
98
+ test("should handle disconnection and cleanup", async () => {
99
+ const clientAgent = crypto.newRandomAgentSecret();
100
+ const clientNode = new LocalNode(
101
+ new ControlledAgent(clientAgent, crypto),
102
+ crypto.newRandomSessionID(crypto.getAgentID(clientAgent)),
103
+ crypto,
104
+ );
105
+
106
+ const ws = new WebSocket(syncServerUrl);
107
+ let disconnectCalled = false;
108
+
109
+ const peer = createWebSocketPeer({
110
+ id: "test-client",
111
+ websocket: ws,
112
+ role: "server",
113
+ onClose: () => {
114
+ disconnectCalled = true;
115
+ },
116
+ });
117
+
118
+ clientNode.syncManager.addPeer(peer);
119
+
120
+ // Wait for connection to establish
121
+ await new Promise((resolve) => setTimeout(resolve, 200));
122
+
123
+ // Close the server
124
+ server.close();
125
+
126
+ // Wait for disconnect handling
127
+ await new Promise((resolve) => setTimeout(resolve, 200));
128
+
129
+ expect(disconnectCalled).toBe(true);
130
+ expect(ws.readyState).toBe(WebSocket.CLOSED);
131
+ });
132
+ });
@@ -0,0 +1,89 @@
1
+ import { createServer } from "http";
2
+ import { ControlledAgent, LocalNode, WasmCrypto } from "cojson";
3
+ import { WebSocket, WebSocketServer } from "ws";
4
+ import { createWebSocketPeer } from "../index";
5
+
6
+ export const startSyncServer = async (port?: number) => {
7
+ const crypto = await WasmCrypto.create();
8
+
9
+ const server = createServer((req, res) => {
10
+ if (req.url === "/health") {
11
+ res.writeHead(200);
12
+ res.end("ok");
13
+ }
14
+ });
15
+ const wss = new WebSocketServer({ noServer: true });
16
+
17
+ const agentSecret = crypto.newRandomAgentSecret();
18
+ const agentID = crypto.getAgentID(agentSecret);
19
+
20
+ const localNode = new LocalNode(
21
+ new ControlledAgent(agentSecret, crypto),
22
+ crypto.newRandomSessionID(agentID),
23
+ crypto,
24
+ );
25
+
26
+ const connections = new Set<WebSocket>();
27
+
28
+ wss.on("connection", function connection(ws, req) {
29
+ connections.add(ws);
30
+
31
+ const sendPing = () => {
32
+ ws.send(
33
+ JSON.stringify({
34
+ type: "ping",
35
+ time: Date.now(),
36
+ dc: "unknown",
37
+ }),
38
+ );
39
+ };
40
+
41
+ // ping/pong for the connection liveness
42
+ const pinging = setInterval(sendPing, 100);
43
+
44
+ sendPing(); // Immediately send a ping to the client to signal that the connection is established
45
+
46
+ ws.on("close", () => {
47
+ clearInterval(pinging);
48
+ connections.delete(ws);
49
+ });
50
+
51
+ const clientId = new Date().toISOString();
52
+
53
+ localNode.syncManager.addPeer(
54
+ createWebSocketPeer({
55
+ id: clientId,
56
+ role: "client",
57
+ websocket: ws,
58
+ expectPings: false,
59
+ batchingByDefault: false,
60
+ deletePeerStateOnClose: true,
61
+ }),
62
+ );
63
+
64
+ ws.on("error", (e) => console.error(`Error on connection ${clientId}:`, e));
65
+ });
66
+
67
+ server.on("upgrade", function upgrade(req, socket, head) {
68
+ if (req.url !== "/health") {
69
+ wss.handleUpgrade(req, socket, head, function done(ws) {
70
+ wss.emit("connection", ws, req);
71
+ });
72
+ }
73
+ });
74
+
75
+ server.listen(port ?? 0);
76
+
77
+ port = (server.address() as { port: number }).port;
78
+ const syncServer = `ws://localhost:${port}`;
79
+
80
+ return {
81
+ close: () => {
82
+ connections.forEach((ws) => ws.close());
83
+ server.close();
84
+ },
85
+ syncServer,
86
+ port,
87
+ localNode,
88
+ };
89
+ };