agent-comms 1.32.1 → 1.33.1
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +1 -1
- package/dist/bridges/claude-code/channel.d.ts.map +1 -1
- package/dist/bridges/claude-code/channel.js +4 -10
- package/dist/bridges/claude-code/channel.js.map +1 -1
- package/dist/bridges/codex/tool.d.ts.map +1 -1
- package/dist/bridges/codex/tool.js +3 -11
- package/dist/bridges/codex/tool.js.map +1 -1
- package/dist/bridges/opencode/plugin.d.ts.map +1 -1
- package/dist/bridges/opencode/plugin.js +3 -10
- package/dist/bridges/opencode/plugin.js.map +1 -1
- package/dist/bridges/pi/index.d.ts.map +1 -1
- package/dist/bridges/pi/index.js +4 -10
- package/dist/bridges/pi/index.js.map +1 -1
- package/dist/bridges/user/controller.d.ts.map +1 -1
- package/dist/bridges/user/controller.js +6 -10
- package/dist/bridges/user/controller.js.map +1 -1
- package/dist/core/mesh-store.d.ts +2 -2
- package/dist/core/mesh-store.d.ts.map +1 -1
- package/dist/core/mesh-store.js +2 -2
- package/dist/core/mesh-store.js.map +1 -1
- package/dist/core/wire-mesh-transport.d.ts +1 -1
- package/dist/core/wire-mesh-transport.d.ts.map +1 -1
- package/dist/core/wire-mesh-transport.js +11 -9
- package/dist/core/wire-mesh-transport.js.map +1 -1
- package/dist/core/wire-protocol.d.ts +1 -12
- package/dist/core/wire-protocol.d.ts.map +1 -1
- package/dist/core/wire-protocol.js +1 -1
- package/dist/core/wire-protocol.js.map +1 -1
- package/dist/test/approval.integration.test.js +63 -13
- package/dist/test/approval.integration.test.js.map +1 -1
- package/dist/test/become-coordinator-actual-port.integration.test.d.ts +2 -2
- package/dist/test/become-coordinator-actual-port.integration.test.js +38 -15
- package/dist/test/become-coordinator-actual-port.integration.test.js.map +1 -1
- package/dist/test/bridge-mesh.test.js +1 -1
- package/dist/test/bridge-mesh.test.js.map +1 -1
- package/dist/test/broadcast-window.integration.test.d.ts +2 -2
- package/dist/test/broadcast-window.integration.test.js +7 -6
- package/dist/test/broadcast-window.integration.test.js.map +1 -1
- package/dist/test/downtime-replay.integration.test.js +6 -5
- package/dist/test/downtime-replay.integration.test.js.map +1 -1
- package/dist/test/identity-restart.integration.test.d.ts +1 -1
- package/dist/test/identity-restart.integration.test.js +7 -6
- package/dist/test/identity-restart.integration.test.js.map +1 -1
- package/dist/test/listener-policy.integration.test.js +45 -44
- package/dist/test/listener-policy.integration.test.js.map +1 -1
- package/dist/test/mesh-smoke.runner.d.ts +1 -1
- package/dist/test/mesh-smoke.runner.js +5 -4
- package/dist/test/mesh-smoke.runner.js.map +1 -1
- package/dist/test/test-transport.d.ts +1 -5
- package/dist/test/test-transport.d.ts.map +1 -1
- package/dist/test/test-transport.js +3 -15
- package/dist/test/test-transport.js.map +1 -1
- package/package.json +1 -1
- package/dist/core/tls-transport.d.ts +0 -86
- package/dist/core/tls-transport.d.ts.map +0 -1
- package/dist/core/tls-transport.js +0 -758
- package/dist/core/tls-transport.js.map +0 -1
- package/dist/test/peer-id-verification.integration.test.d.ts +0 -7
- package/dist/test/peer-id-verification.integration.test.d.ts.map +0 -1
- package/dist/test/peer-id-verification.integration.test.js +0 -176
- package/dist/test/peer-id-verification.integration.test.js.map +0 -1
- package/dist/test/tls-transport.integration.test.d.ts +0 -9
- package/dist/test/tls-transport.integration.test.d.ts.map +0 -1
- package/dist/test/tls-transport.integration.test.js +0 -160
- package/dist/test/tls-transport.integration.test.js.map +0 -1
- package/dist/test/wire-mesh-transport-approval.integration.test.d.ts +0 -5
- package/dist/test/wire-mesh-transport-approval.integration.test.d.ts.map +0 -1
- package/dist/test/wire-mesh-transport-approval.integration.test.js +0 -214
- package/dist/test/wire-mesh-transport-approval.integration.test.js.map +0 -1
- package/dist/test/wire-mesh-transport.integration.test.d.ts +0 -5
- package/dist/test/wire-mesh-transport.integration.test.d.ts.map +0 -1
- package/dist/test/wire-mesh-transport.integration.test.js +0 -89
- package/dist/test/wire-mesh-transport.integration.test.js.map +0 -1
|
@@ -8,9 +8,14 @@
|
|
|
8
8
|
import * as net from "node:net";
|
|
9
9
|
import * as assert from "node:assert/strict";
|
|
10
10
|
import { test, describe } from "node:test";
|
|
11
|
+
import { createTlsTransport } from "@exadev/wire-mesh-core/adapters/tls-transport";
|
|
12
|
+
import { acceptMeshSession } from "@exadev/wire-mesh-core/domain/mesh-session";
|
|
11
13
|
import { MeshStore } from "../core/mesh-store.js";
|
|
12
14
|
import { CommsTool } from "../core/tool.js";
|
|
13
15
|
import { buildAction } from "../core/bridge.js";
|
|
16
|
+
import { generateIdentity } from "../core/identity.js";
|
|
17
|
+
import { toIdentityPort } from "../core/wire-mesh-identity.js";
|
|
18
|
+
import { DOMAIN, FRAME_SCOPE, buildCommand, } from "../core/wire-mesh-transport.js";
|
|
14
19
|
import { waitFor, wireTestTransport } from "./test-transport.js";
|
|
15
20
|
/** Find a free port on localhost by binding to port 0. */
|
|
16
21
|
function findFreePort() {
|
|
@@ -24,13 +29,9 @@ function findFreePort() {
|
|
|
24
29
|
server.on("error", reject);
|
|
25
30
|
});
|
|
26
31
|
}
|
|
27
|
-
/**
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
async function uniquePort() {
|
|
31
|
-
portOffset += 10;
|
|
32
|
-
const base = await findFreePort();
|
|
33
|
-
return base + portOffset;
|
|
32
|
+
/** Find a free port for a single test's use. An alias for findFreePort(): asking the OS for a fresh ephemeral port each call already guarantees distinctness from any other currently-bound port, so no arithmetic offset is layered on top -- a prior +offset scheme could push an already-high OS-assigned port past 65535 and fail with ERR_SOCKET_BAD_PORT. */
|
|
33
|
+
function uniquePort() {
|
|
34
|
+
return findFreePort();
|
|
34
35
|
}
|
|
35
36
|
function sleep(ms) {
|
|
36
37
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
@@ -38,7 +39,7 @@ function sleep(ms) {
|
|
|
38
39
|
describe("connection approval", () => {
|
|
39
40
|
void test("coordinator receives connection_request from connecting peer", async () => {
|
|
40
41
|
const portA = await uniquePort();
|
|
41
|
-
const portB =
|
|
42
|
+
const portB = await uniquePort();
|
|
42
43
|
// Set up coordinator (store A)
|
|
43
44
|
const storeA = new MeshStore(portA);
|
|
44
45
|
wireTestTransport(storeA);
|
|
@@ -90,7 +91,7 @@ describe("connection approval", () => {
|
|
|
90
91
|
});
|
|
91
92
|
void test("accept establishes the peer connection", async () => {
|
|
92
93
|
const portA = await uniquePort();
|
|
93
|
-
const portB =
|
|
94
|
+
const portB = await uniquePort();
|
|
94
95
|
const storeA = new MeshStore(portA);
|
|
95
96
|
wireTestTransport(storeA);
|
|
96
97
|
const storeB = new MeshStore(portB);
|
|
@@ -142,7 +143,7 @@ describe("connection approval", () => {
|
|
|
142
143
|
});
|
|
143
144
|
void test("reject closes with reason", async () => {
|
|
144
145
|
const portA = await uniquePort();
|
|
145
|
-
const portB =
|
|
146
|
+
const portB = await uniquePort();
|
|
146
147
|
const storeA = new MeshStore(portA);
|
|
147
148
|
wireTestTransport(storeA);
|
|
148
149
|
const storeB = new MeshStore(portB);
|
|
@@ -193,7 +194,7 @@ describe("connection approval", () => {
|
|
|
193
194
|
});
|
|
194
195
|
void test("mesh_pending lists pending connections", async () => {
|
|
195
196
|
const portA = await uniquePort();
|
|
196
|
-
const portB =
|
|
197
|
+
const portB = await uniquePort();
|
|
197
198
|
const storeA = new MeshStore(portA);
|
|
198
199
|
wireTestTransport(storeA);
|
|
199
200
|
const storeB = new MeshStore(portB);
|
|
@@ -236,6 +237,8 @@ describe("connection approval", () => {
|
|
|
236
237
|
await storeA.acceptConnection(connectionId);
|
|
237
238
|
// No more pending connections after acceptance
|
|
238
239
|
await waitFor(() => storeA.listPendingConnections().length === 0, "pending connection is cleared after accept");
|
|
240
|
+
// connectToRemote (storeB) and acceptConnection's own introduction handling (storeA) both continue asynchronously after this point (state_sync's own connectToPeer round trip) -- shutting down before that settles races storeB's still-in-flight session setup against its own teardown, leaving a session that gets tracked into an already-shut-down transport and never closed. Wait for real convergence first, the same way "accept establishes the peer connection" above already does.
|
|
241
|
+
await waitFor(() => storeB.serialise().agents[storeA.peerId] !== undefined, "connector sees the coordinator agent");
|
|
239
242
|
}
|
|
240
243
|
finally {
|
|
241
244
|
await storeB.shutdown();
|
|
@@ -244,7 +247,7 @@ describe("connection approval", () => {
|
|
|
244
247
|
});
|
|
245
248
|
void test("tool handles mesh_connect/mesh_accept/mesh_reject/mesh_pending actions", async () => {
|
|
246
249
|
const portA = await uniquePort();
|
|
247
|
-
const portB =
|
|
250
|
+
const portB = await uniquePort();
|
|
248
251
|
const storeA = new MeshStore(portA);
|
|
249
252
|
wireTestTransport(storeA);
|
|
250
253
|
const storeB = new MeshStore(portB);
|
|
@@ -336,7 +339,7 @@ describe("connection approval", () => {
|
|
|
336
339
|
});
|
|
337
340
|
void test("tool mesh_reject returns error message", async () => {
|
|
338
341
|
const portA = await uniquePort();
|
|
339
|
-
const portB =
|
|
342
|
+
const portB = await uniquePort();
|
|
340
343
|
const storeA = new MeshStore(portA);
|
|
341
344
|
wireTestTransport(storeA);
|
|
342
345
|
const storeB = new MeshStore(portB);
|
|
@@ -392,5 +395,52 @@ describe("connection approval", () => {
|
|
|
392
395
|
await storeA.shutdown();
|
|
393
396
|
}
|
|
394
397
|
});
|
|
398
|
+
void test("a message other than introduce/connect_request from an unapproved connection is refused, not routed", async () => {
|
|
399
|
+
const portA = await uniquePort();
|
|
400
|
+
const storeA = new MeshStore(portA);
|
|
401
|
+
wireTestTransport(storeA);
|
|
402
|
+
try {
|
|
403
|
+
await storeA.init();
|
|
404
|
+
await storeA.registerAgent({
|
|
405
|
+
name: "coordinator",
|
|
406
|
+
harness: "test",
|
|
407
|
+
cwd: "/test/a",
|
|
408
|
+
pid: process.pid,
|
|
409
|
+
visibility: "visible",
|
|
410
|
+
tags: [],
|
|
411
|
+
});
|
|
412
|
+
// A hostile client that completes a TLS handshake (proving only which key it holds, not that a human approved it) and skips connect_request entirely, going straight for a forged state_update.
|
|
413
|
+
const attackerIdentity = generateIdentity();
|
|
414
|
+
const attackerTransport = createTlsTransport({
|
|
415
|
+
certificatePem: attackerIdentity.certificate,
|
|
416
|
+
privateKeyPem: attackerIdentity.privateKey,
|
|
417
|
+
});
|
|
418
|
+
const connection = await attackerTransport.connect(`127.0.0.1:${String(portA)}`);
|
|
419
|
+
const attackerIdentityPort = await toIdentityPort(attackerIdentity);
|
|
420
|
+
const session = await acceptMeshSession(connection, attackerIdentityPort, [DOMAIN]);
|
|
421
|
+
const forgedAgent = {
|
|
422
|
+
id: "forged-attacker-agent",
|
|
423
|
+
version: 1,
|
|
424
|
+
name: "forged",
|
|
425
|
+
harness: "test",
|
|
426
|
+
cwd: "/forged",
|
|
427
|
+
pid: 1,
|
|
428
|
+
startedAt: new Date().toISOString(),
|
|
429
|
+
visibility: "visible",
|
|
430
|
+
status: "active",
|
|
431
|
+
tags: [],
|
|
432
|
+
subscribedRooms: [],
|
|
433
|
+
};
|
|
434
|
+
const outcome = await session.sendManageRequest(buildCommand({
|
|
435
|
+
method: "state_update",
|
|
436
|
+
patch: { type: "agent_upsert", agent: forgedAgent },
|
|
437
|
+
}), FRAME_SCOPE);
|
|
438
|
+
assert.equal(outcome.result, "error", "an unapproved connection's message must be refused, not routed");
|
|
439
|
+
assert.equal(storeA.serialise().agents[forgedAgent.id], undefined, "a forged state_update from an unapproved connection must never reach mesh-store's own state");
|
|
440
|
+
}
|
|
441
|
+
finally {
|
|
442
|
+
await storeA.shutdown();
|
|
443
|
+
}
|
|
444
|
+
});
|
|
395
445
|
});
|
|
396
446
|
//# sourceMappingURL=approval.integration.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval.integration.test.js","sourceRoot":"","sources":["../../src/test/approval.integration.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"approval.integration.test.js","sourceRoot":"","sources":["../../src/test/approval.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* becomeCoordinator actual-port regression test (#42) — becomeCoordinator(host, 0) must report the OS-assigned port
|
|
2
|
+
* becomeCoordinator/addListener actual-port regression test (#42) — becomeCoordinator(host, 0) and addListener(host, 0, policy) must report the OS-assigned port they actually bound, not the literal 0 they were called with, on every transport whose listener bookkeeping goes through listListeners().
|
|
3
3
|
*
|
|
4
|
-
* Run
|
|
4
|
+
* Run directly with a specific scenario name as an argument, or with none to run every scenario in order.
|
|
5
5
|
*/
|
|
6
6
|
export {};
|
|
7
7
|
//# sourceMappingURL=become-coordinator-actual-port.integration.test.d.ts.map
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* becomeCoordinator actual-port regression test (#42) — becomeCoordinator(host, 0) must report the OS-assigned port
|
|
2
|
+
* becomeCoordinator/addListener actual-port regression test (#42) — becomeCoordinator(host, 0) and addListener(host, 0, policy) must report the OS-assigned port they actually bound, not the literal 0 they were called with, on every transport whose listener bookkeeping goes through listListeners().
|
|
3
3
|
*
|
|
4
|
-
* Run
|
|
4
|
+
* Run directly with a specific scenario name as an argument, or with none to run every scenario in order.
|
|
5
5
|
*/
|
|
6
|
-
import * as tls from "node:tls";
|
|
7
6
|
import * as assert from "node:assert/strict";
|
|
8
|
-
import {
|
|
7
|
+
import { createTlsTransport } from "@exadev/wire-mesh-core/adapters/tls-transport";
|
|
8
|
+
import { acceptMeshSession } from "@exadev/wire-mesh-core/domain/mesh-session";
|
|
9
|
+
import { WireMeshTransport, DOMAIN } from "../core/wire-mesh-transport.js";
|
|
9
10
|
import { generateIdentity } from "../core/identity.js";
|
|
11
|
+
import { toIdentityPort } from "../core/wire-mesh-identity.js";
|
|
10
12
|
function noopEvents() {
|
|
11
13
|
return {
|
|
12
14
|
onMessage: () => undefined,
|
|
@@ -19,21 +21,41 @@ function noopEvents() {
|
|
|
19
21
|
onBecomeCoordinator: () => undefined,
|
|
20
22
|
};
|
|
21
23
|
}
|
|
22
|
-
|
|
24
|
+
/** Connects a real client session to the given port to confirm it's genuinely live, not merely non-zero. */
|
|
25
|
+
async function connectAndClose(port) {
|
|
26
|
+
const clientIdentity = generateIdentity();
|
|
27
|
+
const clientTransport = createTlsTransport({
|
|
28
|
+
certificatePem: clientIdentity.certificate,
|
|
29
|
+
privateKeyPem: clientIdentity.privateKey,
|
|
30
|
+
});
|
|
31
|
+
const connection = await clientTransport.connect(`127.0.0.1:${String(port)}`);
|
|
32
|
+
const clientIdentityPort = await toIdentityPort(clientIdentity);
|
|
33
|
+
const session = await acceptMeshSession(connection, clientIdentityPort, [
|
|
34
|
+
DOMAIN,
|
|
35
|
+
]);
|
|
36
|
+
await session.close();
|
|
37
|
+
}
|
|
38
|
+
async function testBecomeCoordinatorReportsActualPort() {
|
|
23
39
|
const identity = generateIdentity();
|
|
24
|
-
const transport = new
|
|
40
|
+
const transport = new WireMeshTransport(noopEvents(), identity);
|
|
25
41
|
await transport.becomeCoordinator("127.0.0.1", 0);
|
|
26
42
|
const [listener] = transport.listListeners();
|
|
27
43
|
assert.ok(listener);
|
|
28
44
|
assert.notStrictEqual(listener.port, 0);
|
|
29
|
-
await
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
45
|
+
await connectAndClose(listener.port);
|
|
46
|
+
console.log(` ✓ becomeCoordinator reported and bound the same port (${listener.port})`);
|
|
47
|
+
await transport.shutdown();
|
|
48
|
+
}
|
|
49
|
+
async function testAddListenerReportsActualPort() {
|
|
50
|
+
const identity = generateIdentity();
|
|
51
|
+
const transport = new WireMeshTransport(noopEvents(), identity);
|
|
52
|
+
await transport.becomeCoordinator("127.0.0.1", 0);
|
|
53
|
+
const id = await transport.addListener("127.0.0.1", 0, "observe");
|
|
54
|
+
const added = transport.listListeners().find((l) => l.id === id);
|
|
55
|
+
assert.ok(added);
|
|
56
|
+
assert.notStrictEqual(added.port, 0);
|
|
57
|
+
await connectAndClose(added.port);
|
|
58
|
+
console.log(` ✓ addListener reported and bound the same port (${added.port})`);
|
|
37
59
|
await transport.shutdown();
|
|
38
60
|
}
|
|
39
61
|
// ---------------------------------------------------------------------------
|
|
@@ -41,7 +63,8 @@ async function testTlsReportsActualPort() {
|
|
|
41
63
|
// ---------------------------------------------------------------------------
|
|
42
64
|
const testName = process.argv[2];
|
|
43
65
|
const tests = {
|
|
44
|
-
"
|
|
66
|
+
"become-coordinator-reports-actual-port": testBecomeCoordinatorReportsActualPort,
|
|
67
|
+
"add-listener-reports-actual-port": testAddListenerReportsActualPort,
|
|
45
68
|
};
|
|
46
69
|
const selected = testName === undefined
|
|
47
70
|
? Object.entries(tests)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"become-coordinator-actual-port.integration.test.js","sourceRoot":"","sources":["../../src/test/become-coordinator-actual-port.integration.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"become-coordinator-actual-port.integration.test.js","sourceRoot":"","sources":["../../src/test/become-coordinator-actual-port.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ void test("createBridgeMesh sets peerId to deviceIdToHex(identity.deviceId), not
|
|
|
26
26
|
await store.shutdown();
|
|
27
27
|
}
|
|
28
28
|
});
|
|
29
|
-
void test("createBridgeMesh wires a WireMeshTransport
|
|
29
|
+
void test("createBridgeMesh wires a WireMeshTransport", async () => {
|
|
30
30
|
const slot = tempSlot("test-harness");
|
|
31
31
|
const { store } = createBridgeMesh(slot);
|
|
32
32
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-mesh.test.js","sourceRoot":"","sources":["../../src/test/bridge-mesh.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACL,oBAAoB,GAErB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,SAAS,QAAQ,CAAC,OAAe;IAC/B,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,+BAA+B,CAAC,CACrD,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC;AAC/C,CAAC;AAED,KAAK,IAAI,CAAC,mGAAmG,EAAE,KAAK,IAAI,EAAE;IACxH,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,CAAC,WAAW,CAChB,KAAK,CAAC,MAAM,EACZ,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAClD,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC5D,CAAC;YAAS,CAAC;QACT,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,KAAK,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"bridge-mesh.test.js","sourceRoot":"","sources":["../../src/test/bridge-mesh.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Integration test for issue #23: state patches broadcast before the
|
|
2
|
+
* Integration test for issue #23: state patches broadcast before the mesh data connections are established must not be silently lost.
|
|
3
3
|
*
|
|
4
|
-
* Every production bridge calls registerAgent() immediately after store.init() returns, while the fire-and-forget peer dials are still in flight. Broadcasts landing in that window used to have nowhere to go, so the joining peer stayed invisible in established peers' list_agents until some later patch happened to arrive. The
|
|
4
|
+
* Every production bridge calls registerAgent() immediately after store.init() returns, while the fire-and-forget peer dials are still in flight. Broadcasts landing in that window used to have nowhere to go, so the joining peer stayed invisible in established peers' list_agents until some later patch happened to arrive. The transport now queues broadcasts for dialling peers and flushes them when the connection registers.
|
|
5
5
|
*/
|
|
6
6
|
export {};
|
|
7
7
|
//# sourceMappingURL=broadcast-window.integration.test.d.ts.map
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Integration test for issue #23: state patches broadcast before the
|
|
2
|
+
* Integration test for issue #23: state patches broadcast before the mesh data connections are established must not be silently lost.
|
|
3
3
|
*
|
|
4
|
-
* Every production bridge calls registerAgent() immediately after store.init() returns, while the fire-and-forget peer dials are still in flight. Broadcasts landing in that window used to have nowhere to go, so the joining peer stayed invisible in established peers' list_agents until some later patch happened to arrive. The
|
|
4
|
+
* Every production bridge calls registerAgent() immediately after store.init() returns, while the fire-and-forget peer dials are still in flight. Broadcasts landing in that window used to have nowhere to go, so the joining peer stayed invisible in established peers' list_agents until some later patch happened to arrive. The transport now queues broadcasts for dialling peers and flushes them when the connection registers.
|
|
5
5
|
*/
|
|
6
6
|
import * as assert from "node:assert/strict";
|
|
7
|
+
import { deviceIdToHex } from "@exadev/wire-mesh-core/domain/device-id";
|
|
7
8
|
import { MeshStore } from "../core/mesh-store.js";
|
|
8
|
-
import {
|
|
9
|
+
import { WireMeshTransport } from "../core/wire-mesh-transport.js";
|
|
9
10
|
import { generateIdentity } from "../core/identity.js";
|
|
10
11
|
const TEST_PORT = 19890;
|
|
11
12
|
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
12
|
-
/** A peer wired like a real bridge:
|
|
13
|
+
/** A peer wired like a real bridge: WireMeshTransport, device-id peer ID. */
|
|
13
14
|
function makePeer(identity) {
|
|
14
15
|
const store = new MeshStore(TEST_PORT);
|
|
15
|
-
store.peerId = identity.
|
|
16
|
-
store.setTransport(new
|
|
16
|
+
store.peerId = deviceIdToHex(Uint8Array.from(identity.deviceId));
|
|
17
|
+
store.setTransport(new WireMeshTransport(store.events, identity));
|
|
17
18
|
return store;
|
|
18
19
|
}
|
|
19
20
|
/** Poll until the predicate holds, or fail with the message. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast-window.integration.test.js","sourceRoot":"","sources":["../../src/test/broadcast-window.integration.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"broadcast-window.integration.test.js","sourceRoot":"","sources":["../../src/test/broadcast-window.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,17 +7,18 @@ import * as assert from "node:assert/strict";
|
|
|
7
7
|
import * as fs from "node:fs";
|
|
8
8
|
import { tmpdir } from "node:os";
|
|
9
9
|
import path from "node:path";
|
|
10
|
+
import { deviceIdToHex } from "@exadev/wire-mesh-core/domain/device-id";
|
|
10
11
|
import { MeshStore } from "../core/mesh-store.js";
|
|
11
|
-
import {
|
|
12
|
+
import { WireMeshTransport } from "../core/wire-mesh-transport.js";
|
|
12
13
|
import { generateIdentity } from "../core/identity.js";
|
|
13
14
|
import { loadOrCreateIdentity, releaseIdentityLock, } from "../core/identity-store.js";
|
|
14
15
|
const TEST_PORT = 19896;
|
|
15
16
|
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
16
|
-
/** A peer wired like a real bridge:
|
|
17
|
+
/** A peer wired like a real bridge: WireMeshTransport, device-id peer ID. */
|
|
17
18
|
function makePeer(identity) {
|
|
18
19
|
const store = new MeshStore(TEST_PORT);
|
|
19
|
-
store.peerId = identity.
|
|
20
|
-
store.setTransport(new
|
|
20
|
+
store.peerId = deviceIdToHex(Uint8Array.from(identity.deviceId));
|
|
21
|
+
store.setTransport(new WireMeshTransport(store.events, identity));
|
|
21
22
|
const deliveries = [];
|
|
22
23
|
return { store, deliveries };
|
|
23
24
|
}
|
|
@@ -82,7 +83,7 @@ async function main() {
|
|
|
82
83
|
await sleep(200);
|
|
83
84
|
// B restarts in the same slot: same identity, same agent ID.
|
|
84
85
|
const identityB2 = loadOrCreateIdentity(slot);
|
|
85
|
-
assert.equal(identityB2.
|
|
86
|
+
assert.equal(deviceIdToHex(Uint8Array.from(identityB2.deviceId)), deviceIdToHex(Uint8Array.from(identityB.deviceId)));
|
|
86
87
|
const b2 = makePeer(identityB2);
|
|
87
88
|
b2.store.onDelivery = (_id, ev) => {
|
|
88
89
|
b2.deliveries.push(ev);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"downtime-replay.integration.test.js","sourceRoot":"","sources":["../../src/test/downtime-replay.integration.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"downtime-replay.integration.test.js","sourceRoot":"","sources":["../../src/test/downtime-replay.integration.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GAEpB,MAAM,2BAA2B,CAAC;AAInC,MAAM,SAAS,GAAG,KAAK,CAAC;AACxB,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAOpE,6EAA6E;AAC7E,SAAS,QAAQ,CAAC,QAAsB;IACtC,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC;IACvC,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjE,KAAK,CAAC,YAAY,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClE,MAAM,UAAU,GAAoB,EAAE,CAAC;IACvC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAC/B,CAAC;AAED,gEAAgE;AAChE,KAAK,UAAU,OAAO,CACpB,IAAY,EACZ,KAA6B;IAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,MAAM,KAAK,EAAE;YAAE,OAAO;QAC1B,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,IAAI,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC;IACzE,MAAM,IAAI,GAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC;IAEvE,2DAA2D;IAC3D,MAAM,CAAC,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACrB,MAAM,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;QAC1B,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,aAAa;QACtB,GAAG,EAAE,QAAQ;QACb,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IACH,MAAM,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;QACvB,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM;QACrB,WAAW,EAAE,qBAAqB;KACnC,CAAC,CAAC;IACH,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjB,+DAA+D;IAC/D,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC/B,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACtB,0EAA0E;IAC1E,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACjB,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC;QAC3B,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,cAAc;QACnB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IACH,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,OAAO,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC/C,OAAO,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,eAAe;IACf,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC1B,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjB,0CAA0C;IAC1C,MAAM,CAAC,CAAC,KAAK,CAAC,eAAe,CAC3B,UAAU,EACV,CAAC,CAAC,KAAK,CAAC,MAAM,EACd,qBAAqB,CACtB,CAAC;IACF,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjB,6DAA6D;IAC7D,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,CACV,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EACnD,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CACnD,CAAC;IACF,MAAM,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IAChC,EAAE,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE;QAChC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC;IACF,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACtB,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC;QAC3B,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,cAAc;QACnB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IAEH,sEAAsE;IACtE,MAAM,OAAO,CACX,sDAAsD,EACtD,KAAK,IAAI,EAAE,CACT,EAAE,CAAC,UAAU,CAAC,IAAI,CAChB,CAAC,EAAE,EAAE,EAAE,CACL,EAAE,CAAC,IAAI,KAAK,cAAc;QAC1B,EAAE,CAAC,OAAO,CAAC,OAAO,KAAK,qBAAqB,CAC/C,CACJ,CAAC;IAEF,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC1B,MAAM,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACzB,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;AAC7D,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACrB,yHAAyH;IACzH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Integration test for issue #14: a bridge restarted with a persisted identity must keep its agent ID, room membership, and push delivery.
|
|
3
3
|
*
|
|
4
|
-
* Before persistent identities, every restart generated a fresh
|
|
4
|
+
* Before persistent identities, every restart generated a fresh keypair, so the device-id-derived agent ID changed and peers kept targeting the old ID: their messages queued for an agent whose local handler (gated on agentId === peerId) never fired again.
|
|
5
5
|
*/
|
|
6
6
|
export {};
|
|
7
7
|
//# sourceMappingURL=identity-restart.integration.test.d.ts.map
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Integration test for issue #14: a bridge restarted with a persisted identity must keep its agent ID, room membership, and push delivery.
|
|
3
3
|
*
|
|
4
|
-
* Before persistent identities, every restart generated a fresh
|
|
4
|
+
* Before persistent identities, every restart generated a fresh keypair, so the device-id-derived agent ID changed and peers kept targeting the old ID: their messages queued for an agent whose local handler (gated on agentId === peerId) never fired again.
|
|
5
5
|
*/
|
|
6
6
|
import * as assert from "node:assert/strict";
|
|
7
7
|
import * as fs from "node:fs";
|
|
8
8
|
import { tmpdir } from "node:os";
|
|
9
9
|
import path from "node:path";
|
|
10
|
+
import { deviceIdToHex } from "@exadev/wire-mesh-core/domain/device-id";
|
|
10
11
|
import { MeshStore } from "../core/mesh-store.js";
|
|
11
|
-
import {
|
|
12
|
+
import { WireMeshTransport } from "../core/wire-mesh-transport.js";
|
|
12
13
|
import { generateIdentity } from "../core/identity.js";
|
|
13
14
|
import { loadOrCreateIdentity, releaseIdentityLock, } from "../core/identity-store.js";
|
|
14
15
|
const TEST_PORT = 19889;
|
|
15
16
|
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
16
|
-
/** A peer wired like a real bridge:
|
|
17
|
+
/** A peer wired like a real bridge: WireMeshTransport, device-id peer ID. */
|
|
17
18
|
function makePeer(identity) {
|
|
18
19
|
const store = new MeshStore(TEST_PORT);
|
|
19
|
-
store.peerId = identity.
|
|
20
|
-
store.setTransport(new
|
|
20
|
+
store.peerId = deviceIdToHex(Uint8Array.from(identity.deviceId));
|
|
21
|
+
store.setTransport(new WireMeshTransport(store.events, identity));
|
|
21
22
|
const deliveries = [];
|
|
22
23
|
return { store, deliveries };
|
|
23
24
|
}
|
|
@@ -76,7 +77,7 @@ async function main() {
|
|
|
76
77
|
await sleep(200);
|
|
77
78
|
// A restarts in the same slot: same key material, same agent ID.
|
|
78
79
|
const identityA2 = loadOrCreateIdentity(slot);
|
|
79
|
-
assert.equal(identityA2.
|
|
80
|
+
assert.equal(deviceIdToHex(Uint8Array.from(identityA2.deviceId)), deviceIdToHex(Uint8Array.from(identityA.deviceId)));
|
|
80
81
|
const a2 = makePeer(identityA2);
|
|
81
82
|
a2.store.onDelivery = (_id, ev) => {
|
|
82
83
|
a2.deliveries.push(ev);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity-restart.integration.test.js","sourceRoot":"","sources":["../../src/test/identity-restart.integration.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"identity-restart.integration.test.js","sourceRoot":"","sources":["../../src/test/identity-restart.integration.test.ts"],"names":[],"mappings":"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"}
|