agent-comms 8.8.1 → 8.9.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 +7 -1
- package/dist/core/election-sessions.d.ts +2 -0
- package/dist/core/election-sessions.d.ts.map +1 -1
- package/dist/core/election-sessions.js +4 -0
- package/dist/core/election-sessions.js.map +1 -1
- package/dist/core/gossip-directory.d.ts +3 -0
- package/dist/core/gossip-directory.d.ts.map +1 -1
- package/dist/core/gossip-directory.js +11 -2
- package/dist/core/gossip-directory.js.map +1 -1
- package/dist/core/gossip-extensions.d.ts +3 -0
- package/dist/core/gossip-extensions.d.ts.map +1 -1
- package/dist/core/gossip-extensions.js +17 -0
- package/dist/core/gossip-extensions.js.map +1 -1
- package/dist/core/hub-link.d.ts +13 -5
- package/dist/core/hub-link.d.ts.map +1 -1
- package/dist/core/hub-link.js +28 -6
- package/dist/core/hub-link.js.map +1 -1
- package/dist/core/hub-session.d.ts +11 -0
- package/dist/core/hub-session.d.ts.map +1 -1
- package/dist/core/hub-session.js +28 -1
- package/dist/core/hub-session.js.map +1 -1
- package/dist/core/mesh-store.d.ts +1 -1
- package/dist/core/mesh-store.d.ts.map +1 -1
- package/dist/core/mesh-store.js +4 -14
- package/dist/core/mesh-store.js.map +1 -1
- package/dist/core/relay-role.d.ts +61 -0
- package/dist/core/relay-role.d.ts.map +1 -0
- package/dist/core/relay-role.js +147 -0
- package/dist/core/relay-role.js.map +1 -0
- package/dist/core/relay-selection.d.ts +35 -0
- package/dist/core/relay-selection.d.ts.map +1 -0
- package/dist/core/relay-selection.js +80 -0
- package/dist/core/relay-selection.js.map +1 -0
- package/dist/core/relay-server.d.ts +48 -0
- package/dist/core/relay-server.d.ts.map +1 -0
- package/dist/core/relay-server.js +181 -0
- package/dist/core/relay-server.js.map +1 -0
- package/dist/core/relay-uplink.d.ts +22 -0
- package/dist/core/relay-uplink.d.ts.map +1 -0
- package/dist/core/relay-uplink.js +62 -0
- package/dist/core/relay-uplink.js.map +1 -0
- package/dist/core/transport.d.ts +4 -0
- package/dist/core/transport.d.ts.map +1 -1
- package/dist/core/wire-mesh-transport-options.d.ts +2 -0
- package/dist/core/wire-mesh-transport-options.d.ts.map +1 -1
- package/dist/core/wire-mesh-transport-options.js.map +1 -1
- package/dist/core/wire-mesh-transport.d.ts +3 -2
- package/dist/core/wire-mesh-transport.d.ts.map +1 -1
- package/dist/core/wire-mesh-transport.js +23 -20
- package/dist/core/wire-mesh-transport.js.map +1 -1
- package/dist/core/ws-dial.d.ts +3 -0
- package/dist/core/ws-dial.d.ts.map +1 -1
- package/dist/core/ws-dial.js +3 -2
- package/dist/core/ws-dial.js.map +1 -1
- package/dist/test/bridge-mesh-version-drift.integration.test.js +2 -9
- package/dist/test/bridge-mesh-version-drift.integration.test.js.map +1 -1
- package/dist/test/bridge-mesh.integration.test.js +3 -8
- package/dist/test/bridge-mesh.integration.test.js.map +1 -1
- package/dist/test/broadcast-window.integration.test.js +6 -5
- package/dist/test/broadcast-window.integration.test.js.map +1 -1
- package/dist/test/cc-peer-alias-reply-routing.integration.test.js +3 -7
- package/dist/test/cc-peer-alias-reply-routing.integration.test.js.map +1 -1
- package/dist/test/cc-peer-fronted-approval.integration.test.js +3 -7
- package/dist/test/cc-peer-fronted-approval.integration.test.js.map +1 -1
- package/dist/test/chat-controller-mesh-errors.integration.test.js +2 -7
- package/dist/test/chat-controller-mesh-errors.integration.test.js.map +1 -1
- package/dist/test/coordinator-failover-hub.integration.test.js +3 -7
- package/dist/test/coordinator-failover-hub.integration.test.js.map +1 -1
- package/dist/test/coordinator-failover.integration.test.js +6 -14
- package/dist/test/coordinator-failover.integration.test.js.map +1 -1
- package/dist/test/coordinator-socket-error.integration.test.js +4 -3
- package/dist/test/coordinator-socket-error.integration.test.js.map +1 -1
- package/dist/test/dm-admission.integration.test.js +4 -8
- package/dist/test/dm-admission.integration.test.js.map +1 -1
- package/dist/test/dm-delivery-status.integration.test.js +2 -7
- package/dist/test/dm-delivery-status.integration.test.js.map +1 -1
- package/dist/test/dm-first-contact.integration.test.js +4 -8
- package/dist/test/dm-first-contact.integration.test.js.map +1 -1
- package/dist/test/dm-grant-tool.integration.test.js +4 -8
- package/dist/test/dm-grant-tool.integration.test.js.map +1 -1
- package/dist/test/dm-send-capability-admission.integration.test.js +7 -11
- package/dist/test/dm-send-capability-admission.integration.test.js.map +1 -1
- package/dist/test/dm-send-principal-delegation.integration.test.js +2 -6
- package/dist/test/dm-send-principal-delegation.integration.test.js.map +1 -1
- package/dist/test/gateway-trust.integration.test.js +33 -14
- package/dist/test/gateway-trust.integration.test.js.map +1 -1
- package/dist/test/gossip-directory.unit.test.js +14 -0
- package/dist/test/gossip-directory.unit.test.js.map +1 -1
- package/dist/test/hub-exposure.integration.test.js +5 -7
- package/dist/test/hub-exposure.integration.test.js.map +1 -1
- package/dist/test/hub-link.unit.test.js +53 -7
- package/dist/test/hub-link.unit.test.js.map +1 -1
- package/dist/test/hub-peer-per-store.integration.test.js +9 -14
- package/dist/test/hub-peer-per-store.integration.test.js.map +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 +12 -11
- package/dist/test/listener-policy.integration.test.js.map +1 -1
- package/dist/test/mesh-e2e.integration.test.js +6 -11
- package/dist/test/mesh-e2e.integration.test.js.map +1 -1
- package/dist/test/principal-membership-trust.integration.test.js +10 -15
- package/dist/test/principal-membership-trust.integration.test.js.map +1 -1
- package/dist/test/relay-role.integration.test.d.ts +5 -0
- package/dist/test/relay-role.integration.test.d.ts.map +1 -0
- package/dist/test/relay-role.integration.test.js +134 -0
- package/dist/test/relay-role.integration.test.js.map +1 -0
- package/dist/test/relay-selection.unit.test.d.ts +5 -0
- package/dist/test/relay-selection.unit.test.d.ts.map +1 -0
- package/dist/test/relay-selection.unit.test.js +103 -0
- package/dist/test/relay-selection.unit.test.js.map +1 -0
- package/dist/test/room-destroy-revocation.integration.test.js +2 -6
- package/dist/test/room-destroy-revocation.integration.test.js.map +1 -1
- package/dist/test/room-invite-directed.integration.test.js +3 -7
- package/dist/test/room-invite-directed.integration.test.js.map +1 -1
- package/dist/test/room-join-approval-timeout.integration.test.js +3 -7
- package/dist/test/room-join-approval-timeout.integration.test.js.map +1 -1
- package/dist/test/room-kick-revocation.integration.test.js +2 -6
- package/dist/test/room-kick-revocation.integration.test.js.map +1 -1
- package/dist/test/room-leave-revocation.integration.test.js +3 -7
- package/dist/test/room-leave-revocation.integration.test.js.map +1 -1
- package/dist/test/room-read-directed.integration.test.js +3 -7
- package/dist/test/room-read-directed.integration.test.js.map +1 -1
- package/dist/test/room-send-directed.integration.test.js +4 -8
- package/dist/test/room-send-directed.integration.test.js.map +1 -1
- package/dist/test/room-send-retry.integration.test.js +7 -6
- package/dist/test/room-send-retry.integration.test.js.map +1 -1
- package/dist/test/room-state-sync.integration.test.js +4 -8
- package/dist/test/room-state-sync.integration.test.js.map +1 -1
- package/dist/test/test-transport.d.ts.map +1 -1
- package/dist/test/test-transport.js +2 -0
- package/dist/test/test-transport.js.map +1 -1
- package/dist/test/visibility.integration.test.js +6 -6
- package/dist/test/visibility.integration.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The relay selection policy (agent-comms#342): a relay on this machine, then one on the local network, then any trusted relay-offering device, then the configured public hub, with deny-by-default trust for every offer not from a machine-local peer.
|
|
3
|
+
*/
|
|
4
|
+
import { describe, expect, it } from "vitest";
|
|
5
|
+
import { selectRelay } from "../core/relay-selection.js";
|
|
6
|
+
const DEVICE_ID_HEX_LENGTH = 64;
|
|
7
|
+
const PUBLIC_HUB = "wss://mesh.example.com/";
|
|
8
|
+
const OWN = "0".repeat(DEVICE_ID_HEX_LENGTH);
|
|
9
|
+
const MACHINE_PEER = "1".repeat(DEVICE_ID_HEX_LENGTH);
|
|
10
|
+
const LAN_PEER = "2".repeat(DEVICE_ID_HEX_LENGTH);
|
|
11
|
+
const REMOTE_PEER = "3".repeat(DEVICE_ID_HEX_LENGTH);
|
|
12
|
+
const STRANGER = "4".repeat(DEVICE_ID_HEX_LENGTH);
|
|
13
|
+
const machineOffer = {
|
|
14
|
+
deviceHex: MACHINE_PEER,
|
|
15
|
+
addresses: ["ws://127.0.0.1:4100/", "ws://192.168.1.10:4100/"],
|
|
16
|
+
machineLocal: true,
|
|
17
|
+
};
|
|
18
|
+
const lanOffer = {
|
|
19
|
+
deviceHex: LAN_PEER,
|
|
20
|
+
addresses: ["ws://127.0.0.1:4200/", "ws://10.0.0.7:4200/"],
|
|
21
|
+
machineLocal: false,
|
|
22
|
+
};
|
|
23
|
+
const remoteOffer = {
|
|
24
|
+
deviceHex: REMOTE_PEER,
|
|
25
|
+
addresses: ["wss://relay.example.net/"],
|
|
26
|
+
machineLocal: false,
|
|
27
|
+
};
|
|
28
|
+
function select(offers, trusted = [LAN_PEER, REMOTE_PEER]) {
|
|
29
|
+
return selectRelay({
|
|
30
|
+
offers,
|
|
31
|
+
isTrusted: (hex) => trusted.includes(hex),
|
|
32
|
+
ownDeviceHex: OWN,
|
|
33
|
+
publicHubUrl: PUBLIC_HUB,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
describe("selectRelay", () => {
|
|
37
|
+
it("prefers a relay on this machine, over its loopback address", () => {
|
|
38
|
+
expect(select([remoteOffer, lanOffer, machineOffer])).toEqual({
|
|
39
|
+
url: "ws://127.0.0.1:4100/",
|
|
40
|
+
tier: "machine",
|
|
41
|
+
deviceHex: MACHINE_PEER,
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
it("falls to a trusted relay on the local network next, over its private address", () => {
|
|
45
|
+
expect(select([remoteOffer, lanOffer])).toEqual({
|
|
46
|
+
url: "ws://10.0.0.7:4200/",
|
|
47
|
+
tier: "lan",
|
|
48
|
+
deviceHex: LAN_PEER,
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
it("falls to any trusted relay-offering device next", () => {
|
|
52
|
+
expect(select([remoteOffer])).toEqual({
|
|
53
|
+
url: "wss://relay.example.net/",
|
|
54
|
+
tier: "trusted",
|
|
55
|
+
deviceHex: REMOTE_PEER,
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
it("falls back to the configured public hub when no offer qualifies", () => {
|
|
59
|
+
expect(select([])).toEqual({ url: PUBLIC_HUB, tier: "public" });
|
|
60
|
+
});
|
|
61
|
+
it("never uses an offer from an untrusted device, however well placed", () => {
|
|
62
|
+
const strangerOffer = {
|
|
63
|
+
deviceHex: STRANGER,
|
|
64
|
+
addresses: ["ws://192.168.1.99:4300/", "wss://stranger.example.org/"],
|
|
65
|
+
machineLocal: false,
|
|
66
|
+
};
|
|
67
|
+
expect(select([strangerOffer, remoteOffer])).toEqual({
|
|
68
|
+
url: "wss://relay.example.net/",
|
|
69
|
+
tier: "trusted",
|
|
70
|
+
deviceHex: REMOTE_PEER,
|
|
71
|
+
});
|
|
72
|
+
expect(select([strangerOffer])).toEqual({
|
|
73
|
+
url: PUBLIC_HUB,
|
|
74
|
+
tier: "public",
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
it("never reaches a device learned through a hub over a loopback address, which would only reach this machine", () => {
|
|
78
|
+
const loopbackOnly = {
|
|
79
|
+
deviceHex: REMOTE_PEER,
|
|
80
|
+
addresses: ["ws://127.0.0.1:4400/"],
|
|
81
|
+
machineLocal: false,
|
|
82
|
+
};
|
|
83
|
+
expect(select([loopbackOnly])).toEqual({ url: PUBLIC_HUB, tier: "public" });
|
|
84
|
+
});
|
|
85
|
+
it("never relays through this store's own offer", () => {
|
|
86
|
+
expect(select([{ ...machineOffer, deviceHex: OWN }])).toEqual({
|
|
87
|
+
url: PUBLIC_HUB,
|
|
88
|
+
tier: "public",
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
it("ignores an address that is not a ws:// or wss:// URL", () => {
|
|
92
|
+
expect(select([{ ...remoteOffer, addresses: ["tcp://relay.example.net:9"] }])).toEqual({ url: PUBLIC_HUB, tier: "public" });
|
|
93
|
+
});
|
|
94
|
+
it("breaks a tie within a tier by lowest device-id, so every store hearing the same offers chooses alike", () => {
|
|
95
|
+
const otherLan = {
|
|
96
|
+
deviceHex: "1".repeat(DEVICE_ID_HEX_LENGTH),
|
|
97
|
+
addresses: ["ws://192.168.5.5:4500/"],
|
|
98
|
+
machineLocal: false,
|
|
99
|
+
};
|
|
100
|
+
expect(select([lanOffer, otherLan], [LAN_PEER, otherLan.deviceHex]).deviceHex).toBe(otherLan.deviceHex);
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
//# sourceMappingURL=relay-selection.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay-selection.unit.test.js","sourceRoot":"","sources":["../../src/test/relay-selection.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,12 +4,8 @@
|
|
|
4
4
|
import { test, expect } from "vitest";
|
|
5
5
|
import { MeshStore } from "../core/mesh-store.js";
|
|
6
6
|
import { waitFor, wireTestTransport } from "./test-transport.js";
|
|
7
|
+
import { freeLocalPort } from "./hub-helpers.js";
|
|
7
8
|
const REVOCATION_DRAIN_SETTLE_MS = 300;
|
|
8
|
-
let nextPort = 21_410;
|
|
9
|
-
function freshPort() {
|
|
10
|
-
nextPort += 1;
|
|
11
|
-
return nextPort;
|
|
12
|
-
}
|
|
13
9
|
async function makeRegisteredStore(port, name) {
|
|
14
10
|
const store = new MeshStore({ coordinatorPort: port });
|
|
15
11
|
await wireTestTransport(store);
|
|
@@ -33,7 +29,7 @@ async function joinAndAccept(owner, member, roomId) {
|
|
|
33
29
|
await joinPromise;
|
|
34
30
|
}
|
|
35
31
|
test("destroying a room revokes every member's own grant for every peer, not just the owner", async () => {
|
|
36
|
-
const port =
|
|
32
|
+
const port = await freeLocalPort();
|
|
37
33
|
const owner = await makeRegisteredStore(port, "owner");
|
|
38
34
|
const memberA = await makeRegisteredStore(port, "member-a");
|
|
39
35
|
const memberB = await makeRegisteredStore(port, "member-b");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-destroy-revocation.integration.test.js","sourceRoot":"","sources":["../../src/test/room-destroy-revocation.integration.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"room-destroy-revocation.integration.test.js","sourceRoot":"","sources":["../../src/test/room-destroy-revocation.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,11 +5,7 @@ import { test, expect } from "vitest";
|
|
|
5
5
|
import { MeshStore } from "../core/mesh-store.js";
|
|
6
6
|
import { loadRoomTokens } from "../core/identity-store.js";
|
|
7
7
|
import { waitFor, wireTestTransport } from "./test-transport.js";
|
|
8
|
-
|
|
9
|
-
function freshPort() {
|
|
10
|
-
nextPort += 1;
|
|
11
|
-
return nextPort;
|
|
12
|
-
}
|
|
8
|
+
import { freeLocalPort } from "./hub-helpers.js";
|
|
13
9
|
async function makeConnectedPair(port) {
|
|
14
10
|
const owner = new MeshStore({ coordinatorPort: port });
|
|
15
11
|
await wireTestTransport(owner);
|
|
@@ -37,7 +33,7 @@ async function makeConnectedPair(port) {
|
|
|
37
33
|
return { owner, target, targetSlot };
|
|
38
34
|
}
|
|
39
35
|
test("inviting a target delivers a real room_invite carrying the room's own name/description and the inviter's own name/cwd", async () => {
|
|
40
|
-
const { owner, target, targetSlot } = await makeConnectedPair(
|
|
36
|
+
const { owner, target, targetSlot } = await makeConnectedPair(await freeLocalPort());
|
|
41
37
|
try {
|
|
42
38
|
const room = await owner.createRoom({
|
|
43
39
|
name: "General Chat",
|
|
@@ -69,7 +65,7 @@ test("inviting a target delivers a real room_invite carrying the room's own name
|
|
|
69
65
|
}
|
|
70
66
|
});
|
|
71
67
|
test("inviting an unreachable target throws rather than silently dropping the invite", async () => {
|
|
72
|
-
const owner = new MeshStore({ coordinatorPort:
|
|
68
|
+
const owner = new MeshStore({ coordinatorPort: await freeLocalPort() });
|
|
73
69
|
await wireTestTransport(owner);
|
|
74
70
|
await owner.init();
|
|
75
71
|
await owner.registerAgent({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-invite-directed.integration.test.js","sourceRoot":"","sources":["../../src/test/room-invite-directed.integration.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"room-invite-directed.integration.test.js","sourceRoot":"","sources":["../../src/test/room-invite-directed.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,11 +5,7 @@ import { test, expect } from "vitest";
|
|
|
5
5
|
import { MeshStore } from "../core/mesh-store.js";
|
|
6
6
|
import { dmRoomPath } from "../core/room-path.js";
|
|
7
7
|
import { waitFor, wireTestTransport } from "./test-transport.js";
|
|
8
|
-
|
|
9
|
-
function freshPort() {
|
|
10
|
-
nextPort += 1;
|
|
11
|
-
return nextPort;
|
|
12
|
-
}
|
|
8
|
+
import { freeLocalPort } from "./hub-helpers.js";
|
|
13
9
|
/** Short enough to keep the test fast, long enough that an immediate accept always lands inside it. */
|
|
14
10
|
const APPROVAL_WINDOW_MS = 600;
|
|
15
11
|
async function makeConnectedPair(port) {
|
|
@@ -43,7 +39,7 @@ async function makeConnectedPair(port) {
|
|
|
43
39
|
return { a, b };
|
|
44
40
|
}
|
|
45
41
|
test("an unanswered first sendDm rejects with a timeout once the approval window passes, and nothing is left pending or recorded", async () => {
|
|
46
|
-
const { a, b } = await makeConnectedPair(
|
|
42
|
+
const { a, b } = await makeConnectedPair(await freeLocalPort());
|
|
47
43
|
try {
|
|
48
44
|
const dmPath = dmRoomPath(a.peerId, b.peerId);
|
|
49
45
|
const send = a.sendDm(a.peerId, b.peerId, "anyone there");
|
|
@@ -59,7 +55,7 @@ test("an unanswered first sendDm rejects with a timeout once the approval window
|
|
|
59
55
|
}
|
|
60
56
|
});
|
|
61
57
|
test("a decision inside the window still admits the requester, and the cleared window never fires afterwards", async () => {
|
|
62
|
-
const { a, b } = await makeConnectedPair(
|
|
58
|
+
const { a, b } = await makeConnectedPair(await freeLocalPort());
|
|
63
59
|
try {
|
|
64
60
|
const dmPath = dmRoomPath(a.peerId, b.peerId);
|
|
65
61
|
const first = a.sendDm(a.peerId, b.peerId, "first");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-join-approval-timeout.integration.test.js","sourceRoot":"","sources":["../../src/test/room-join-approval-timeout.integration.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"room-join-approval-timeout.integration.test.js","sourceRoot":"","sources":["../../src/test/room-join-approval-timeout.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,11 +6,7 @@
|
|
|
6
6
|
import { test, expect } from "vitest";
|
|
7
7
|
import { MeshStore } from "../core/mesh-store.js";
|
|
8
8
|
import { waitFor, wireTestTransport } from "./test-transport.js";
|
|
9
|
-
|
|
10
|
-
function freshPort() {
|
|
11
|
-
nextPort += 1;
|
|
12
|
-
return nextPort;
|
|
13
|
-
}
|
|
9
|
+
import { freeLocalPort } from "./hub-helpers.js";
|
|
14
10
|
/** How long to wait for B's own drain loop to have processed the kick's revocation-announce off the wire, since there's no observable side effect from outside B's own store to wait on affirmatively instead. */
|
|
15
11
|
const REVOCATION_ANNOUNCE_SETTLE_DELAY_MS = 300;
|
|
16
12
|
async function makeRegisteredStore(port, name) {
|
|
@@ -37,7 +33,7 @@ async function joinAndAccept(owner, member, roomId) {
|
|
|
37
33
|
await joinPromise;
|
|
38
34
|
}
|
|
39
35
|
test("kicking a member revokes their room:member token for every peer, not just the owner", async () => {
|
|
40
|
-
const port =
|
|
36
|
+
const port = await freeLocalPort();
|
|
41
37
|
const owner = await makeRegisteredStore(port, "owner");
|
|
42
38
|
const memberA = await makeRegisteredStore(port, "member-a");
|
|
43
39
|
const memberB = await makeRegisteredStore(port, "member-b");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-kick-revocation.integration.test.js","sourceRoot":"","sources":["../../src/test/room-kick-revocation.integration.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"room-kick-revocation.integration.test.js","sourceRoot":"","sources":["../../src/test/room-kick-revocation.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,11 +5,7 @@ import { test, expect } from "vitest";
|
|
|
5
5
|
import { MeshStore } from "../core/mesh-store.js";
|
|
6
6
|
import { loadRoomTokens } from "../core/identity-store.js";
|
|
7
7
|
import { waitFor, wireTestTransport } from "./test-transport.js";
|
|
8
|
-
|
|
9
|
-
function freshPort() {
|
|
10
|
-
nextPort += 1;
|
|
11
|
-
return nextPort;
|
|
12
|
-
}
|
|
8
|
+
import { freeLocalPort } from "./hub-helpers.js";
|
|
13
9
|
async function makeRegisteredStore(port, name) {
|
|
14
10
|
const store = new MeshStore({ coordinatorPort: port });
|
|
15
11
|
const slot = await wireTestTransport(store);
|
|
@@ -33,7 +29,7 @@ async function joinAndAccept(owner, member, roomId) {
|
|
|
33
29
|
await joinPromise;
|
|
34
30
|
}
|
|
35
31
|
test("a member leaving revokes its own grant and notifies the other members", async () => {
|
|
36
|
-
const port =
|
|
32
|
+
const port = await freeLocalPort();
|
|
37
33
|
const { store: owner } = await makeRegisteredStore(port, "owner");
|
|
38
34
|
const { store: memberA, slot: aSlot } = await makeRegisteredStore(port, "member-a");
|
|
39
35
|
const { store: memberB } = await makeRegisteredStore(port, "member-b");
|
|
@@ -65,7 +61,7 @@ test("a member leaving revokes its own grant and notifies the other members", as
|
|
|
65
61
|
}
|
|
66
62
|
});
|
|
67
63
|
test("declining an invite before ever joining revokes the pushed grant and notifies the owner", async () => {
|
|
68
|
-
const port =
|
|
64
|
+
const port = await freeLocalPort();
|
|
69
65
|
const { store: owner } = await makeRegisteredStore(port, "owner");
|
|
70
66
|
const { store: target, slot: targetSlot } = await makeRegisteredStore(port, "target");
|
|
71
67
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-leave-revocation.integration.test.js","sourceRoot":"","sources":["../../src/test/room-leave-revocation.integration.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"room-leave-revocation.integration.test.js","sourceRoot":"","sources":["../../src/test/room-leave-revocation.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,11 +11,7 @@ import { MeshStore } from "../core/mesh-store.js";
|
|
|
11
11
|
import { loadOrCreateIdentity, saveRoomToken } from "../core/identity-store.js";
|
|
12
12
|
import { toIdentityPort } from "../core/wire-mesh-identity.js";
|
|
13
13
|
import { waitFor, wireTestTransport } from "./test-transport.js";
|
|
14
|
-
|
|
15
|
-
function freshPort() {
|
|
16
|
-
nextPort += 1;
|
|
17
|
-
return nextPort;
|
|
18
|
-
}
|
|
14
|
+
import { freeLocalPort } from "./hub-helpers.js";
|
|
19
15
|
async function makeConnectedPair(port) {
|
|
20
16
|
const owner = new MeshStore({ coordinatorPort: port });
|
|
21
17
|
const ownerSlot = await wireTestTransport(owner);
|
|
@@ -63,7 +59,7 @@ async function grantMembership(ownerSlot, bearerSlot, roomPath, bearerDeviceHex)
|
|
|
63
59
|
saveRoomToken(bearerSlot, roomPath, verdict.token);
|
|
64
60
|
}
|
|
65
61
|
test("reading a directed room.send notifies only its own author via room.read", async () => {
|
|
66
|
-
const { owner, ownerSlot, member, memberSlot } = await makeConnectedPair(
|
|
62
|
+
const { owner, ownerSlot, member, memberSlot } = await makeConnectedPair(await freeLocalPort());
|
|
67
63
|
try {
|
|
68
64
|
const room = await owner.createRoom({
|
|
69
65
|
name: "general",
|
|
@@ -106,7 +102,7 @@ test("reading a directed room.send notifies only its own author via room.read",
|
|
|
106
102
|
}
|
|
107
103
|
});
|
|
108
104
|
test("reading a message from a peer with no room:member token for it does nothing beyond the local readBy update", async () => {
|
|
109
|
-
const { owner, ownerSlot, member, memberSlot } = await makeConnectedPair(
|
|
105
|
+
const { owner, ownerSlot, member, memberSlot } = await makeConnectedPair(await freeLocalPort());
|
|
110
106
|
try {
|
|
111
107
|
const room = await owner.createRoom({
|
|
112
108
|
name: "general",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-read-directed.integration.test.js","sourceRoot":"","sources":["../../src/test/room-read-directed.integration.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"room-read-directed.integration.test.js","sourceRoot":"","sources":["../../src/test/room-read-directed.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,12 +11,8 @@ import { MeshStore } from "../core/mesh-store.js";
|
|
|
11
11
|
import { loadOrCreateIdentity, saveRoomToken } from "../core/identity-store.js";
|
|
12
12
|
import { toIdentityPort } from "../core/wire-mesh-identity.js";
|
|
13
13
|
import { waitFor, wireTestTransport } from "./test-transport.js";
|
|
14
|
+
import { freeLocalPort } from "./hub-helpers.js";
|
|
14
15
|
const TOKEN_TTL_MS = 60_000;
|
|
15
|
-
let nextPort = 20_970;
|
|
16
|
-
function freshPort() {
|
|
17
|
-
nextPort += 1;
|
|
18
|
-
return nextPort;
|
|
19
|
-
}
|
|
20
16
|
async function makeConnectedPair(port) {
|
|
21
17
|
const owner = new MeshStore({ coordinatorPort: port });
|
|
22
18
|
const ownerSlot = await wireTestTransport(owner);
|
|
@@ -63,7 +59,7 @@ async function grantMembership(ownerSlot, memberSlot, roomPath, memberDeviceHex)
|
|
|
63
59
|
saveRoomToken(memberSlot, roomPath, verdict.token);
|
|
64
60
|
}
|
|
65
61
|
test("a directed room.send delivers to the recipient's own onDelivery", async () => {
|
|
66
|
-
const { owner, ownerSlot, member, memberSlot } = await makeConnectedPair(
|
|
62
|
+
const { owner, ownerSlot, member, memberSlot } = await makeConnectedPair(await freeLocalPort());
|
|
67
63
|
try {
|
|
68
64
|
const room = await owner.createRoom({
|
|
69
65
|
name: "general",
|
|
@@ -92,7 +88,7 @@ test("a directed room.send delivers to the recipient's own onDelivery", async ()
|
|
|
92
88
|
}
|
|
93
89
|
});
|
|
94
90
|
test("a directed room.send from a member (not just the owner) also delivers", async () => {
|
|
95
|
-
const { owner, ownerSlot, member, memberSlot } = await makeConnectedPair(
|
|
91
|
+
const { owner, ownerSlot, member, memberSlot } = await makeConnectedPair(await freeLocalPort());
|
|
96
92
|
try {
|
|
97
93
|
const room = await owner.createRoom({
|
|
98
94
|
name: "general",
|
|
@@ -114,7 +110,7 @@ test("a directed room.send from a member (not just the owner) also delivers", as
|
|
|
114
110
|
}
|
|
115
111
|
});
|
|
116
112
|
test("sendRoomMessageDirected throws when this store holds no token for the room", async () => {
|
|
117
|
-
const { owner, member } = await makeConnectedPair(
|
|
113
|
+
const { owner, member } = await makeConnectedPair(await freeLocalPort());
|
|
118
114
|
try {
|
|
119
115
|
const room = await owner.createRoom({
|
|
120
116
|
name: "general",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-send-directed.integration.test.js","sourceRoot":"","sources":["../../src/test/room-send-directed.integration.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"room-send-directed.integration.test.js","sourceRoot":"","sources":["../../src/test/room-send-directed.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ import { loadOrCreateUserIdentity } from "../core/user-identity.js";
|
|
|
17
17
|
import { loadOrCreateMachineIdentity } from "../core/machine-identity.js";
|
|
18
18
|
import { openAccountLedger } from "../core/account-ledger-store.js";
|
|
19
19
|
import { ownerNamedRoomPath } from "../core/room-path.js";
|
|
20
|
-
|
|
20
|
+
import { freeLocalPort } from "./hub-helpers.js";
|
|
21
21
|
/** How many polling attempts {@link waitFor} makes before failing. */
|
|
22
22
|
const WAIT_FOR_MAX_ATTEMPTS = 20;
|
|
23
23
|
/** Delay between each {@link waitFor} polling attempt. */
|
|
@@ -34,8 +34,8 @@ const sleep = async (ms) => new Promise((r) => {
|
|
|
34
34
|
setTimeout(r, ms);
|
|
35
35
|
});
|
|
36
36
|
/** A peer wired like a real bridge: WireMeshTransport, device-id peer ID, and a persisted identity slot so createRoom can mint and persist the owner's own room:member grant. */
|
|
37
|
-
async function makePeer(identity, slot) {
|
|
38
|
-
const store = new MeshStore({ coordinatorPort
|
|
37
|
+
async function makePeer(coordinatorPort, identity, slot) {
|
|
38
|
+
const store = new MeshStore({ coordinatorPort });
|
|
39
39
|
store.peerId = deviceIdToHex(Uint8Array.from(identity.deviceId));
|
|
40
40
|
store.setTransport(new WireMeshTransport(store.events, identity, {
|
|
41
41
|
roomVerbHandlers: store.roomVerbHandlers,
|
|
@@ -73,6 +73,7 @@ async function waitFor(what, check) {
|
|
|
73
73
|
expect(false, `timed out waiting for ${what}`).toBeTruthy();
|
|
74
74
|
}
|
|
75
75
|
async function main() {
|
|
76
|
+
const port = await freeLocalPort();
|
|
76
77
|
const dir = fs.mkdtempSync(path.join(tmpdir(), "agent-comms-send-retry-"));
|
|
77
78
|
const slot = { harness: "pi", cwd: "/tmp/project", dir };
|
|
78
79
|
const slotA = {
|
|
@@ -81,7 +82,7 @@ async function main() {
|
|
|
81
82
|
dir: fs.mkdtempSync(path.join(tmpdir(), "agent-comms-send-retry-a-")),
|
|
82
83
|
};
|
|
83
84
|
// A is a normal ephemeral bridge that stays up throughout.
|
|
84
|
-
const a = await makePeer(loadOrCreateIdentity(slotA), slotA);
|
|
85
|
+
const a = await makePeer(port, loadOrCreateIdentity(slotA), slotA);
|
|
85
86
|
await a.store.init();
|
|
86
87
|
await a.store.registerAgent({
|
|
87
88
|
name: "peer-a",
|
|
@@ -101,7 +102,7 @@ async function main() {
|
|
|
101
102
|
await sleep(ROOM_CREATE_SETTLE_MS);
|
|
102
103
|
// B joins with a persisted identity and becomes a room member -- a real admitted join, since the room already replicating to B via legacy full-state-sync says nothing about B holding a room:member token for it.
|
|
103
104
|
const identityB = loadOrCreateIdentity(slot);
|
|
104
|
-
const b1 = await makePeer(identityB, slot);
|
|
105
|
+
const b1 = await makePeer(port, identityB, slot);
|
|
105
106
|
await b1.store.init();
|
|
106
107
|
// Registration must wait for the TLS data connections to establish (#23).
|
|
107
108
|
await sleep(TLS_CONNECT_SETTLE_MS);
|
|
@@ -128,7 +129,7 @@ async function main() {
|
|
|
128
129
|
// B restarts in the same slot: same identity, same agent ID, same persisted room:member token -- the queued send retries the moment the reconnection to A completes.
|
|
129
130
|
const identityB2 = loadOrCreateIdentity(slot);
|
|
130
131
|
expect(deviceIdToHex(Uint8Array.from(identityB2.deviceId))).toBe(deviceIdToHex(Uint8Array.from(identityB.deviceId)));
|
|
131
|
-
const b2 = await makePeer(identityB2, slot);
|
|
132
|
+
const b2 = await makePeer(port, identityB2, slot);
|
|
132
133
|
b2.store.onDelivery = (_id, ev) => {
|
|
133
134
|
b2.deliveries.push(ev);
|
|
134
135
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-send-retry.integration.test.js","sourceRoot":"","sources":["../../src/test/room-send-retry.integration.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,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,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GAEpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"room-send-retry.integration.test.js","sourceRoot":"","sources":["../../src/test/room-send-retry.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,7 @@
|
|
|
4
4
|
import { test, expect } from "vitest";
|
|
5
5
|
import { MeshStore } from "../core/mesh-store.js";
|
|
6
6
|
import { waitFor, wireTestTransport } from "./test-transport.js";
|
|
7
|
-
|
|
8
|
-
function freshPort() {
|
|
9
|
-
nextPort += 1;
|
|
10
|
-
return nextPort;
|
|
11
|
-
}
|
|
7
|
+
import { freeLocalPort } from "./hub-helpers.js";
|
|
12
8
|
async function makeConnectedPair(port) {
|
|
13
9
|
const owner = new MeshStore({ coordinatorPort: port });
|
|
14
10
|
await wireTestTransport(owner);
|
|
@@ -45,7 +41,7 @@ async function joinAndAccept(owner, member, roomId) {
|
|
|
45
41
|
await joinPromise;
|
|
46
42
|
}
|
|
47
43
|
test("a joiner's own local room record carries the room's real name, description, and type", async () => {
|
|
48
|
-
const { owner, member } = await makeConnectedPair(
|
|
44
|
+
const { owner, member } = await makeConnectedPair(await freeLocalPort());
|
|
49
45
|
try {
|
|
50
46
|
const room = await owner.createRoom({
|
|
51
47
|
name: "General Chat",
|
|
@@ -69,7 +65,7 @@ test("a joiner's own local room record carries the room's real name, description
|
|
|
69
65
|
}
|
|
70
66
|
});
|
|
71
67
|
test("refreshRoomMembers re-syncs a member's own local room record from the owner", async () => {
|
|
72
|
-
const { owner, member } = await makeConnectedPair(
|
|
68
|
+
const { owner, member } = await makeConnectedPair(await freeLocalPort());
|
|
73
69
|
try {
|
|
74
70
|
const room = await owner.createRoom({
|
|
75
71
|
name: "General Chat",
|
|
@@ -97,7 +93,7 @@ test("refreshRoomMembers re-syncs a member's own local room record from the owne
|
|
|
97
93
|
}
|
|
98
94
|
});
|
|
99
95
|
test("refreshRoomMembers throws for a DM path -- no Room record exists to refresh", async () => {
|
|
100
|
-
const { owner, member } = await makeConnectedPair(
|
|
96
|
+
const { owner, member } = await makeConnectedPair(await freeLocalPort());
|
|
101
97
|
try {
|
|
102
98
|
await expect(member.refreshRoomMembers(`${owner.peerId}+${member.peerId}`)).rejects.toThrow(/not found/i);
|
|
103
99
|
}
|