@automerge/automerge-repo-network-websocket 2.5.5 → 2.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketServerAdapter.d.ts","sourceRoot":"","sources":["../src/WebSocketServerAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAKpD,OAAO,EAEL,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,MAAM,EACZ,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAEL,iBAAiB,EAElB,MAAM,eAAe,CAAA;AAOtB,qBAAa,sBAAuB,SAAQ,cAAc;;IAyBtD,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,iBAAiB;IAzB3B,OAAO,EAAE;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAK;IAQ7C,OAAO;IAIP,SAAS;gBAYC,MAAM,EAAE,eAAe,EACvB,iBAAiB,SAAO;IAKlC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY;IAyCnD,UAAU;IAQV,IAAI,CAAC,OAAO,EAAE,iBAAiB;IAqB/B,cAAc,CAAC,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"WebSocketServerAdapter.d.ts","sourceRoot":"","sources":["../src/WebSocketServerAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAKpD,OAAO,EAEL,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,MAAM,EACZ,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAEL,iBAAiB,EAElB,MAAM,eAAe,CAAA;AAOtB,qBAAa,sBAAuB,SAAQ,cAAc;;IAyBtD,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,iBAAiB;IAzB3B,OAAO,EAAE;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAK;IAQ7C,OAAO;IAIP,SAAS;gBAYC,MAAM,EAAE,eAAe,EACvB,iBAAiB,SAAO;IAKlC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY;IAyCnD,UAAU;IAQV,IAAI,CAAC,OAAO,EAAE,iBAAiB;IAqB/B,cAAc,CAAC,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS;CA8E3D"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@automerge/automerge-repo-network-websocket",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.6",
|
|
4
4
|
"description": "isomorphic node/browser Websocket network adapter for Automerge Repo",
|
|
5
5
|
"repository": "https://github.com/automerge/automerge-repo/tree/master/packages/automerge-repo-network-websocket",
|
|
6
6
|
"author": "Peter van Hardenberg <pvh@pvh.ca>",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"test": "vitest"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@automerge/automerge-repo": "2.5.
|
|
16
|
+
"@automerge/automerge-repo": "2.5.6",
|
|
17
17
|
"cbor-x": "^1.3.0",
|
|
18
18
|
"debug": "^4.3.4",
|
|
19
19
|
"eventemitter3": "^5.0.1",
|
|
@@ -31,5 +31,5 @@
|
|
|
31
31
|
"publishConfig": {
|
|
32
32
|
"access": "public"
|
|
33
33
|
},
|
|
34
|
-
"gitHead": "
|
|
34
|
+
"gitHead": "38d06b9d9ef0bbe1e0693d3b859015f38897f34b"
|
|
35
35
|
}
|
package/test/Websocket.test.ts
CHANGED
|
@@ -454,6 +454,71 @@ describe("Websocket adapters", () => {
|
|
|
454
454
|
})
|
|
455
455
|
})
|
|
456
456
|
|
|
457
|
+
it("should ignore messages from a socket replaced by a same-peer-ID reconnect", async () => {
|
|
458
|
+
const { serverSocket, server, serverUrl } = await setupServer()
|
|
459
|
+
const serverAdapter = new WebSocketServerAdapter(serverSocket)
|
|
460
|
+
const serverSideSockets: WebSocket[] = []
|
|
461
|
+
serverSocket.on("connection", socket => {
|
|
462
|
+
serverSideSockets.push(socket)
|
|
463
|
+
})
|
|
464
|
+
serverAdapter.connect(serverPeerId, {
|
|
465
|
+
storageId: undefined,
|
|
466
|
+
isEphemeral: true,
|
|
467
|
+
})
|
|
468
|
+
|
|
469
|
+
const firstSocket = new WebSocket(serverUrl)
|
|
470
|
+
await once(firstSocket, "open")
|
|
471
|
+
firstSocket.send(
|
|
472
|
+
CBOR.encode({
|
|
473
|
+
type: "join",
|
|
474
|
+
senderId: browserPeerId,
|
|
475
|
+
supportedProtocolVersions: ["1"],
|
|
476
|
+
})
|
|
477
|
+
)
|
|
478
|
+
await messageOrTimeout(firstSocket)
|
|
479
|
+
|
|
480
|
+
const secondSocket = new WebSocket(serverUrl)
|
|
481
|
+
await once(secondSocket, "open")
|
|
482
|
+
secondSocket.send(
|
|
483
|
+
CBOR.encode({
|
|
484
|
+
type: "join",
|
|
485
|
+
senderId: browserPeerId,
|
|
486
|
+
supportedProtocolVersions: ["1"],
|
|
487
|
+
})
|
|
488
|
+
)
|
|
489
|
+
await messageOrTimeout(secondSocket)
|
|
490
|
+
|
|
491
|
+
let staleMessageReceived = false
|
|
492
|
+
serverAdapter.once("message", message => {
|
|
493
|
+
if (message.senderId === browserPeerId) {
|
|
494
|
+
staleMessageReceived = true
|
|
495
|
+
}
|
|
496
|
+
})
|
|
497
|
+
|
|
498
|
+
// Simulate a late message event from the old server-side socket. The
|
|
499
|
+
// client socket has already been closed by the reconnect handling, so
|
|
500
|
+
// using the captured server socket lets this test exercise the adapter's
|
|
501
|
+
// stale-socket guard directly.
|
|
502
|
+
serverSideSockets[0].emit(
|
|
503
|
+
"message",
|
|
504
|
+
CBOR.encode({
|
|
505
|
+
type: "sync",
|
|
506
|
+
senderId: browserPeerId,
|
|
507
|
+
targetId: serverPeerId,
|
|
508
|
+
documentId,
|
|
509
|
+
data: new Uint8Array([1]),
|
|
510
|
+
})
|
|
511
|
+
)
|
|
512
|
+
|
|
513
|
+
await pause(100)
|
|
514
|
+
firstSocket.close()
|
|
515
|
+
secondSocket.close()
|
|
516
|
+
serverSocket.close()
|
|
517
|
+
server.close()
|
|
518
|
+
|
|
519
|
+
assert.equal(staleMessageReceived, false)
|
|
520
|
+
})
|
|
521
|
+
|
|
457
522
|
it("should disconnect existing peers on reconnect before announcing them", async () => {
|
|
458
523
|
// This test exercises a sync loop which is exposed in the following
|
|
459
524
|
// sequence of events:
|