agent-comms 5.2.5 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +6 -2
  4. package/dist/bridges/user/controller.d.ts +1 -1
  5. package/dist/bridges/user/controller.d.ts.map +1 -1
  6. package/dist/bridges/user/controller.js +1 -1
  7. package/dist/bridges/user/controller.js.map +1 -1
  8. package/dist/core/bridge-mesh.d.ts +2 -2
  9. package/dist/core/bridge-mesh.d.ts.map +1 -1
  10. package/dist/core/bridge-mesh.js +3 -2
  11. package/dist/core/bridge-mesh.js.map +1 -1
  12. package/dist/core/gateway-trust.d.ts +15 -9
  13. package/dist/core/gateway-trust.d.ts.map +1 -1
  14. package/dist/core/gateway-trust.js +49 -21
  15. package/dist/core/gateway-trust.js.map +1 -1
  16. package/dist/core/gossip-directory.d.ts +1 -1
  17. package/dist/core/gossip-directory.d.ts.map +1 -1
  18. package/dist/core/gossip-directory.js +4 -2
  19. package/dist/core/gossip-directory.js.map +1 -1
  20. package/dist/core/hub-forwarding.d.ts +4 -18
  21. package/dist/core/hub-forwarding.d.ts.map +1 -1
  22. package/dist/core/hub-forwarding.js +2 -41
  23. package/dist/core/hub-forwarding.js.map +1 -1
  24. package/dist/core/hub-link.d.ts +58 -0
  25. package/dist/core/hub-link.d.ts.map +1 -0
  26. package/dist/core/hub-link.js +118 -0
  27. package/dist/core/hub-link.js.map +1 -0
  28. package/dist/core/hub-session.d.ts +14 -15
  29. package/dist/core/hub-session.d.ts.map +1 -1
  30. package/dist/core/hub-session.js +30 -51
  31. package/dist/core/hub-session.js.map +1 -1
  32. package/dist/core/identity-store.d.ts +8 -4
  33. package/dist/core/identity-store.d.ts.map +1 -1
  34. package/dist/core/identity-store.js +29 -15
  35. package/dist/core/identity-store.js.map +1 -1
  36. package/dist/core/mesh-graph.d.ts +1 -1
  37. package/dist/core/mesh-graph.js +1 -1
  38. package/dist/core/mesh-store.d.ts +11 -6
  39. package/dist/core/mesh-store.d.ts.map +1 -1
  40. package/dist/core/mesh-store.js +33 -22
  41. package/dist/core/mesh-store.js.map +1 -1
  42. package/dist/core/peer-lifecycle.d.ts +2 -5
  43. package/dist/core/peer-lifecycle.d.ts.map +1 -1
  44. package/dist/core/peer-lifecycle.js +0 -1
  45. package/dist/core/peer-lifecycle.js.map +1 -1
  46. package/dist/core/room-router.d.ts +2 -2
  47. package/dist/core/room-router.d.ts.map +1 -1
  48. package/dist/core/room-router.js +2 -32
  49. package/dist/core/room-router.js.map +1 -1
  50. package/dist/core/shutdown-signals.d.ts +1 -1
  51. package/dist/core/shutdown-signals.js +1 -1
  52. package/dist/core/transport.d.ts +7 -7
  53. package/dist/core/transport.d.ts.map +1 -1
  54. package/dist/core/wire-mesh-transport.d.ts +7 -3
  55. package/dist/core/wire-mesh-transport.d.ts.map +1 -1
  56. package/dist/core/wire-mesh-transport.js +39 -22
  57. package/dist/core/wire-mesh-transport.js.map +1 -1
  58. package/dist/test/bridge-mesh.integration.test.js +15 -1
  59. package/dist/test/bridge-mesh.integration.test.js.map +1 -1
  60. package/dist/test/chat-controller-mesh-errors.integration.test.js +7 -1
  61. package/dist/test/chat-controller-mesh-errors.integration.test.js.map +1 -1
  62. package/dist/test/coordinator-failover-hub.integration.test.d.ts +5 -0
  63. package/dist/test/coordinator-failover-hub.integration.test.d.ts.map +1 -0
  64. package/dist/test/coordinator-failover-hub.integration.test.js +78 -0
  65. package/dist/test/coordinator-failover-hub.integration.test.js.map +1 -0
  66. package/dist/test/coordinator-failover.integration.test.js +3 -6
  67. package/dist/test/coordinator-failover.integration.test.js.map +1 -1
  68. package/dist/test/coordinator-failover.unit.test.js +0 -7
  69. package/dist/test/coordinator-failover.unit.test.js.map +1 -1
  70. package/dist/test/gateway-trust.integration.test.d.ts +1 -1
  71. package/dist/test/gateway-trust.integration.test.js +26 -2
  72. package/dist/test/gateway-trust.integration.test.js.map +1 -1
  73. package/dist/test/gateway-trust.unit.test.js +43 -5
  74. package/dist/test/gateway-trust.unit.test.js.map +1 -1
  75. package/dist/test/hub-exposure.integration.test.d.ts +5 -0
  76. package/dist/test/hub-exposure.integration.test.d.ts.map +1 -0
  77. package/dist/test/hub-exposure.integration.test.js +121 -0
  78. package/dist/test/hub-exposure.integration.test.js.map +1 -0
  79. package/dist/test/hub-helpers.d.ts +18 -3
  80. package/dist/test/hub-helpers.d.ts.map +1 -1
  81. package/dist/test/hub-helpers.js +24 -3
  82. package/dist/test/hub-helpers.js.map +1 -1
  83. package/dist/test/hub-link.unit.test.d.ts +2 -0
  84. package/dist/test/hub-link.unit.test.d.ts.map +1 -0
  85. package/dist/test/hub-link.unit.test.js +210 -0
  86. package/dist/test/hub-link.unit.test.js.map +1 -0
  87. package/dist/test/hub-peer-per-store.integration.test.d.ts +9 -0
  88. package/dist/test/hub-peer-per-store.integration.test.d.ts.map +1 -0
  89. package/dist/test/hub-peer-per-store.integration.test.js +211 -0
  90. package/dist/test/hub-peer-per-store.integration.test.js.map +1 -0
  91. package/dist/test/hub-room-domain-verb-trust-bypass.integration.test.js +2 -2
  92. package/dist/test/hub-room-domain-verb-trust-bypass.integration.test.js.map +1 -1
  93. package/dist/test/hub-session-close.integration.test.js +1 -1
  94. package/dist/test/hub-session-close.integration.test.js.map +1 -1
  95. package/dist/test/hub-session-dispatch.unit.test.js +1 -66
  96. package/dist/test/hub-session-dispatch.unit.test.js.map +1 -1
  97. package/dist/test/identity-store.integration.test.js +24 -32
  98. package/dist/test/identity-store.integration.test.js.map +1 -1
  99. package/dist/test/mesh-graph-trace.integration.test.js +2 -2
  100. package/dist/test/mesh-graph-trace.integration.test.js.map +1 -1
  101. package/dist/test/mesh-smoke.runner.js +1 -3
  102. package/dist/test/mesh-smoke.runner.js.map +1 -1
  103. package/dist/test/mesh-store-orchestration.unit.test.js +11 -41
  104. package/dist/test/mesh-store-orchestration.unit.test.js.map +1 -1
  105. package/dist/test/peer-lifecycle.unit.test.js +0 -8
  106. package/dist/test/peer-lifecycle.unit.test.js.map +1 -1
  107. package/dist/test/principal-membership-trust.integration.test.js +8 -1
  108. package/dist/test/principal-membership-trust.integration.test.js.map +1 -1
  109. package/dist/test/room-join-by-bare-name.integration.test.js +1 -1
  110. package/dist/test/room-join-by-bare-name.integration.test.js.map +1 -1
  111. package/dist/test/test-transport.d.ts +1 -1
  112. package/dist/test/test-transport.d.ts.map +1 -1
  113. package/dist/test/test-transport.js +1 -1
  114. package/dist/test/test-transport.js.map +1 -1
  115. package/dist/test/wire-mesh-transport-hub.integration.test.d.ts +1 -1
  116. package/dist/test/wire-mesh-transport-hub.integration.test.js +96 -9
  117. package/dist/test/wire-mesh-transport-hub.integration.test.js.map +1 -1
  118. package/package.json +1 -1
  119. package/dist/core/coordinator-gateway.d.ts +0 -25
  120. package/dist/core/coordinator-gateway.d.ts.map +0 -1
  121. package/dist/core/coordinator-gateway.js +0 -34
  122. package/dist/core/coordinator-gateway.js.map +0 -1
  123. package/dist/test/coordinator-gateway.unit.test.d.ts +0 -2
  124. package/dist/test/coordinator-gateway.unit.test.d.ts.map +0 -1
  125. package/dist/test/coordinator-gateway.unit.test.js +0 -88
  126. package/dist/test/coordinator-gateway.unit.test.js.map +0 -1
  127. package/dist/test/gateway-forwarding.integration.test.d.ts +0 -9
  128. package/dist/test/gateway-forwarding.integration.test.d.ts.map +0 -1
  129. package/dist/test/gateway-forwarding.integration.test.js +0 -226
  130. package/dist/test/gateway-forwarding.integration.test.js.map +0 -1
  131. package/dist/test/hub-forwarding.unit.test.d.ts +0 -2
  132. package/dist/test/hub-forwarding.unit.test.d.ts.map +0 -1
  133. package/dist/test/hub-forwarding.unit.test.js +0 -102
  134. package/dist/test/hub-forwarding.unit.test.js.map +0 -1
  135. package/dist/test/hub-todevice-routing.integration.test.d.ts +0 -7
  136. package/dist/test/hub-todevice-routing.integration.test.d.ts.map +0 -1
  137. package/dist/test/hub-todevice-routing.integration.test.js +0 -121
  138. package/dist/test/hub-todevice-routing.integration.test.js.map +0 -1
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Unit tests for HubLink (agent-comms#293): the per-store loop that holds a hub session, against a fake session so the dial, the loss of a session and the backoff between dials are all driven directly.
3
+ */
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
5
+ import { HUB_LINK_POLL_INTERVAL_MS, HUB_RECONNECT_INITIAL_DELAY_MS, HUB_RECONNECT_MAX_DELAY_MS, HubLink, } from "../core/hub-link.js";
6
+ const HUB_URL = "wss://hub.example.com/";
7
+ /** A hub session whose dials succeed or fail as scripted and whose live session ends only when the test says so. */
8
+ class FakeHub {
9
+ dials = [];
10
+ disconnects = 0;
11
+ failuresLeft = 0;
12
+ live = false;
13
+ endSession;
14
+ get isConnected() {
15
+ return this.live;
16
+ }
17
+ /** Makes the next `count` dials fail before one succeeds. */
18
+ failNextDials(count) {
19
+ this.failuresLeft = count;
20
+ }
21
+ async connect(url) {
22
+ this.dials.push(url);
23
+ if (this.failuresLeft > 0) {
24
+ this.failuresLeft -= 1;
25
+ throw new Error("hub unreachable");
26
+ }
27
+ this.live = true;
28
+ }
29
+ async disconnect() {
30
+ this.disconnects += 1;
31
+ this.dropSession();
32
+ }
33
+ async whenDisconnected() {
34
+ if (!this.live)
35
+ return;
36
+ await new Promise((resolve) => {
37
+ this.endSession = resolve;
38
+ });
39
+ }
40
+ /** The hub closing the session from its end. */
41
+ dropSession() {
42
+ this.live = false;
43
+ this.endSession?.();
44
+ this.endSession = undefined;
45
+ }
46
+ }
47
+ function newLink(hub, shouldConnect = () => true) {
48
+ let connectedCount = 0;
49
+ const errors = [];
50
+ const link = new HubLink({
51
+ hub,
52
+ url: HUB_URL,
53
+ shouldConnect,
54
+ onConnected: () => {
55
+ connectedCount += 1;
56
+ },
57
+ onError: (error) => {
58
+ errors.push(error);
59
+ },
60
+ });
61
+ return { link, connected: () => connectedCount, errors };
62
+ }
63
+ beforeEach(() => {
64
+ vi.useFakeTimers();
65
+ });
66
+ afterEach(() => {
67
+ vi.useRealTimers();
68
+ });
69
+ describe("HubLink", () => {
70
+ it("dials the configured hub in the background and reports the connection", async () => {
71
+ const hub = new FakeHub();
72
+ const { link, connected } = newLink(hub);
73
+ link.start();
74
+ await vi.advanceTimersByTimeAsync(0);
75
+ expect(hub.dials).toEqual([HUB_URL]);
76
+ expect(connected()).toBe(1);
77
+ await link.stop();
78
+ });
79
+ it("does nothing on a second start while already running", async () => {
80
+ const hub = new FakeHub();
81
+ const { link } = newLink(hub);
82
+ link.start();
83
+ link.start();
84
+ await vi.advanceTimersByTimeAsync(0);
85
+ expect(hub.dials).toHaveLength(1);
86
+ await link.stop();
87
+ });
88
+ it("dials again after the hub ends the session, once the initial delay has passed", async () => {
89
+ const hub = new FakeHub();
90
+ const { link, connected } = newLink(hub);
91
+ link.start();
92
+ await vi.advanceTimersByTimeAsync(0);
93
+ hub.dropSession();
94
+ await vi.advanceTimersByTimeAsync(HUB_RECONNECT_INITIAL_DELAY_MS - 1);
95
+ expect(hub.dials).toHaveLength(1);
96
+ await vi.advanceTimersByTimeAsync(1);
97
+ expect(hub.dials).toHaveLength(2);
98
+ expect(connected()).toBe(2);
99
+ await link.stop();
100
+ });
101
+ it("reports a failed dial and retries, doubling the delay each time up to the ceiling", async () => {
102
+ const hub = new FakeHub();
103
+ const failures = 8;
104
+ hub.failNextDials(failures);
105
+ const { link, errors } = newLink(hub);
106
+ link.start();
107
+ await vi.advanceTimersByTimeAsync(0);
108
+ expect(errors).toHaveLength(1);
109
+ let delayMs = HUB_RECONNECT_INITIAL_DELAY_MS;
110
+ for (let attempt = 1; attempt < failures; attempt += 1) {
111
+ await vi.advanceTimersByTimeAsync(delayMs - 1);
112
+ expect(hub.dials).toHaveLength(attempt);
113
+ await vi.advanceTimersByTimeAsync(1);
114
+ expect(hub.dials).toHaveLength(attempt + 1);
115
+ delayMs = Math.min(delayMs * 2, HUB_RECONNECT_MAX_DELAY_MS);
116
+ }
117
+ expect(errors).toHaveLength(failures);
118
+ expect(delayMs).toBe(HUB_RECONNECT_MAX_DELAY_MS);
119
+ await link.stop();
120
+ });
121
+ it("starts the backoff over after a session has been established", async () => {
122
+ const hub = new FakeHub();
123
+ hub.failNextDials(2);
124
+ const { link } = newLink(hub);
125
+ link.start();
126
+ await vi.advanceTimersByTimeAsync(0);
127
+ await vi.advanceTimersByTimeAsync(HUB_RECONNECT_INITIAL_DELAY_MS);
128
+ await vi.advanceTimersByTimeAsync(HUB_RECONNECT_INITIAL_DELAY_MS * 2);
129
+ expect(hub.isConnected).toBe(true);
130
+ const dialsBeforeDrop = hub.dials.length;
131
+ hub.dropSession();
132
+ await vi.advanceTimersByTimeAsync(HUB_RECONNECT_INITIAL_DELAY_MS);
133
+ expect(hub.dials).toHaveLength(dialsBeforeDrop + 1);
134
+ await link.stop();
135
+ });
136
+ it("stops without waiting out a pending delay, and does not dial again", async () => {
137
+ const hub = new FakeHub();
138
+ hub.failNextDials(1);
139
+ const { link } = newLink(hub);
140
+ link.start();
141
+ await vi.advanceTimersByTimeAsync(0);
142
+ await link.stop();
143
+ await vi.advanceTimersByTimeAsync(HUB_RECONNECT_MAX_DELAY_MS);
144
+ expect(hub.dials).toHaveLength(1);
145
+ expect(hub.disconnects).toBe(1);
146
+ });
147
+ it("drops a live session when stopped, without treating that as a loss to redial", async () => {
148
+ const hub = new FakeHub();
149
+ const { link } = newLink(hub);
150
+ link.start();
151
+ await vi.advanceTimersByTimeAsync(0);
152
+ await link.stop();
153
+ await vi.advanceTimersByTimeAsync(HUB_RECONNECT_MAX_DELAY_MS);
154
+ expect(hub.isConnected).toBe(false);
155
+ expect(hub.dials).toHaveLength(1);
156
+ });
157
+ it("does not dial while the store does not want a session, and dials within a poll once it does", async () => {
158
+ const hub = new FakeHub();
159
+ let wanted = false;
160
+ const { link } = newLink(hub, () => wanted);
161
+ link.start();
162
+ await vi.advanceTimersByTimeAsync(HUB_LINK_POLL_INTERVAL_MS * 2);
163
+ expect(hub.dials).toHaveLength(0);
164
+ wanted = true;
165
+ await vi.advanceTimersByTimeAsync(HUB_LINK_POLL_INTERVAL_MS);
166
+ expect(hub.dials).toHaveLength(1);
167
+ await link.stop();
168
+ });
169
+ it("dials at once on reconsider instead of waiting out the poll", async () => {
170
+ const hub = new FakeHub();
171
+ let wanted = false;
172
+ const { link } = newLink(hub, () => wanted);
173
+ link.start();
174
+ await vi.advanceTimersByTimeAsync(0);
175
+ wanted = true;
176
+ link.reconsider();
177
+ await vi.advanceTimersByTimeAsync(0);
178
+ expect(hub.dials).toHaveLength(1);
179
+ expect(hub.isConnected).toBe(true);
180
+ await link.stop();
181
+ });
182
+ it("drops a live session when the store stops wanting one, and does not redial while it stays unwanted", async () => {
183
+ const hub = new FakeHub();
184
+ let wanted = true;
185
+ const { link } = newLink(hub, () => wanted);
186
+ link.start();
187
+ await vi.advanceTimersByTimeAsync(0);
188
+ expect(hub.isConnected).toBe(true);
189
+ wanted = false;
190
+ link.reconsider();
191
+ await vi.advanceTimersByTimeAsync(0);
192
+ expect(hub.isConnected).toBe(false);
193
+ expect(hub.disconnects).toBe(1);
194
+ await vi.advanceTimersByTimeAsync(HUB_RECONNECT_MAX_DELAY_MS);
195
+ expect(hub.dials).toHaveLength(1);
196
+ await link.stop();
197
+ });
198
+ it("notices a session it no longer wants at the next poll when nobody calls reconsider", async () => {
199
+ const hub = new FakeHub();
200
+ let wanted = true;
201
+ const { link } = newLink(hub, () => wanted);
202
+ link.start();
203
+ await vi.advanceTimersByTimeAsync(0);
204
+ wanted = false;
205
+ await vi.advanceTimersByTimeAsync(HUB_LINK_POLL_INTERVAL_MS);
206
+ expect(hub.isConnected).toBe(false);
207
+ await link.stop();
208
+ });
209
+ });
210
+ //# sourceMappingURL=hub-link.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub-link.unit.test.js","sourceRoot":"","sources":["../../src/test/hub-link.unit.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Integration tests for every store being its own peer on the relay hub (agent-comms#293), the cross-machine leg of the mesh epic (#153). Two independent local meshes ("machine A" and "machine B") on a shared real relay hub (createRelayHub, the same domain logic the production mesh.exadev.io Durable Object runs, served over local WebSockets via hub-helpers.ts): neither mesh is ever directly connected to the other, so anything either side learns about the other arrived via the hub.
3
+ *
4
+ * Machine A has a coordinator (a1) and an ordinary local peer (a2). The point of the tests is that a2, which is not the coordinator, is reachable and can reach out with its own identity, exactly as a1 is: no store depends on the coordinator to speak to another machine.
5
+ *
6
+ * Trust is deny-all by default (agent-comms#156), so every test trusts the specific device ids it needs. See gateway-trust.integration.test.ts for the deny-by-default behaviour itself.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=hub-peer-per-store.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub-peer-per-store.integration.test.d.ts","sourceRoot":"","sources":["../../src/test/hub-peer-per-store.integration.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Integration tests for every store being its own peer on the relay hub (agent-comms#293), the cross-machine leg of the mesh epic (#153). Two independent local meshes ("machine A" and "machine B") on a shared real relay hub (createRelayHub, the same domain logic the production mesh.exadev.io Durable Object runs, served over local WebSockets via hub-helpers.ts): neither mesh is ever directly connected to the other, so anything either side learns about the other arrived via the hub.
3
+ *
4
+ * Machine A has a coordinator (a1) and an ordinary local peer (a2). The point of the tests is that a2, which is not the coordinator, is reachable and can reach out with its own identity, exactly as a1 is: no store depends on the coordinator to speak to another machine.
5
+ *
6
+ * Trust is deny-all by default (agent-comms#156), so every test trusts the specific device ids it needs. See gateway-trust.integration.test.ts for the deny-by-default behaviour itself.
7
+ */
8
+ import { afterEach, describe, expect, it } from "vitest";
9
+ import { MeshStore } from "../core/mesh-store.js";
10
+ import { dmRoomPath } from "../core/room-path.js";
11
+ import { realHubOverWs, TeardownStack } from "./hub-helpers.js";
12
+ import { wireTestTransport } from "./test-transport.js";
13
+ let nextPort = 22_400;
14
+ function freshPort() {
15
+ nextPort += 1;
16
+ return nextPort;
17
+ }
18
+ /** Short enough that a gossip re-advertisement (which carries the registerAgent'd agent/self extension) fires within a test's own poll budget, unlike the 20s production default. */
19
+ const FAST_GOSSIP_INTERVAL_MS = 50;
20
+ const POLL_ATTEMPTS = 100;
21
+ const POLL_INTERVAL_MS = 50;
22
+ const sleep = async (ms) => new Promise((resolve) => {
23
+ setTimeout(resolve, ms);
24
+ });
25
+ /** Polls an async predicate until it holds, matching broadcast-window.integration.test.ts's own established pattern for this -- the shared test-transport.ts waitFor takes a synchronous condition, which can't await a MeshStore's own async listAgents/serialise-derived checks. */
26
+ async function waitFor(what, check) {
27
+ for (let i = 0; i < POLL_ATTEMPTS; i++) {
28
+ if (await check())
29
+ return;
30
+ await sleep(POLL_INTERVAL_MS);
31
+ }
32
+ expect(false, `timed out waiting for ${what}`).toBeTruthy();
33
+ }
34
+ const cleanups = new TeardownStack();
35
+ afterEach(async () => {
36
+ await cleanups.run();
37
+ });
38
+ /** Starts one store on the local mesh at coordinatorPort, dialling hubUrl itself, and registers a visible agent for it unless told otherwise. */
39
+ async function startStore(options) {
40
+ const { coordinatorPort, hubUrl, name, visibility = "visible" } = options;
41
+ const store = new MeshStore({ coordinatorPort, hubUrl });
42
+ await wireTestTransport(store, {
43
+ presenceReadvertiseIntervalMs: FAST_GOSSIP_INTERVAL_MS,
44
+ });
45
+ await store.init();
46
+ cleanups.push(async () => store.shutdown());
47
+ await store.registerAgent({
48
+ name,
49
+ harness: "test",
50
+ cwd: `/test/${name}`,
51
+ pid: process.pid,
52
+ visibility,
53
+ tags: [name],
54
+ });
55
+ return store;
56
+ }
57
+ describe("every store is its own hub peer", () => {
58
+ it("discovers a store that is not its machine's coordinator from another machine, with the agent's own fields", async () => {
59
+ const hub = await realHubOverWs();
60
+ cleanups.push(hub.close);
61
+ const a1 = await startStore({
62
+ coordinatorPort: freshPort(),
63
+ hubUrl: hub.url,
64
+ name: "a1",
65
+ });
66
+ const a2 = await startStore({
67
+ coordinatorPort: a1.coordinatorPort,
68
+ hubUrl: hub.url,
69
+ name: "a2",
70
+ });
71
+ const b1 = await startStore({
72
+ coordinatorPort: freshPort(),
73
+ hubUrl: hub.url,
74
+ name: "b1",
75
+ });
76
+ a2.addTrustedGateway(b1.peerId);
77
+ b1.addTrustedGateway(a2.peerId);
78
+ await waitFor("b1 to learn of a2 via the hub", async () => {
79
+ const agents = await b1.listAgents(b1.peerId);
80
+ return agents.some((agent) => agent.id === a2.peerId);
81
+ });
82
+ const discovered = (await b1.listAgents(b1.peerId)).find((agent) => agent.id === a2.peerId);
83
+ expect(discovered).toMatchObject({
84
+ id: a2.peerId,
85
+ name: "a2",
86
+ harness: "test",
87
+ cwd: "/test/a2",
88
+ visibility: "visible",
89
+ tags: ["a2"],
90
+ });
91
+ });
92
+ it("lets a store that is not its machine's coordinator see a remote agent", async () => {
93
+ const hub = await realHubOverWs();
94
+ cleanups.push(hub.close);
95
+ const a1 = await startStore({
96
+ coordinatorPort: freshPort(),
97
+ hubUrl: hub.url,
98
+ name: "a1",
99
+ });
100
+ const a2 = await startStore({
101
+ coordinatorPort: a1.coordinatorPort,
102
+ hubUrl: hub.url,
103
+ name: "a2",
104
+ });
105
+ const b1 = await startStore({
106
+ coordinatorPort: freshPort(),
107
+ hubUrl: hub.url,
108
+ name: "b1",
109
+ });
110
+ a2.addTrustedGateway(b1.peerId);
111
+ b1.addTrustedGateway(a2.peerId);
112
+ await waitFor("a2 to learn of b1 via the hub", async () => {
113
+ const agents = await a2.listAgents(a2.peerId);
114
+ return agents.some((agent) => agent.id === b1.peerId);
115
+ });
116
+ });
117
+ it("never advertises a hidden or ghost agent across the hub", async () => {
118
+ const hub = await realHubOverWs();
119
+ cleanups.push(hub.close);
120
+ const a1 = await startStore({
121
+ coordinatorPort: freshPort(),
122
+ hubUrl: hub.url,
123
+ name: "a1",
124
+ });
125
+ const aHidden = await startStore({
126
+ coordinatorPort: a1.coordinatorPort,
127
+ hubUrl: hub.url,
128
+ name: "hidden-peer",
129
+ visibility: "hidden",
130
+ });
131
+ const aGhost = await startStore({
132
+ coordinatorPort: a1.coordinatorPort,
133
+ hubUrl: hub.url,
134
+ name: "ghost-peer",
135
+ visibility: "ghost",
136
+ });
137
+ // A visible control peer registered after the hidden and ghost ones: its arrival on b1's side proves gossip had time to propagate, ruling out "nothing arrived at all" as a false-negative explanation.
138
+ const aVisible = await startStore({
139
+ coordinatorPort: a1.coordinatorPort,
140
+ hubUrl: hub.url,
141
+ name: "visible-peer",
142
+ });
143
+ const b1 = await startStore({
144
+ coordinatorPort: freshPort(),
145
+ hubUrl: hub.url,
146
+ name: "b1",
147
+ });
148
+ // Every store trusts b1 and b1 trusts every one of them, so trust is never the reason a hidden or ghost agent fails to appear.
149
+ for (const store of [a1, aHidden, aGhost, aVisible]) {
150
+ store.addTrustedGateway(b1.peerId);
151
+ b1.addTrustedGateway(store.peerId);
152
+ }
153
+ await waitFor("b1 to see the visible control peer, proving gossip had time to propagate", async () => {
154
+ const agents = await b1.listAgents(b1.peerId);
155
+ return agents.some((agent) => agent.id === aVisible.peerId);
156
+ });
157
+ const agents = await b1.listAgents(b1.peerId);
158
+ expect(agents.some((agent) => agent.id === aHidden.peerId)).toBe(false);
159
+ expect(agents.some((agent) => agent.id === aGhost.peerId)).toBe(false);
160
+ });
161
+ it("delivers a direct message from a store that is not its machine's coordinator, attributed to that store's own agent", async () => {
162
+ const hub = await realHubOverWs();
163
+ cleanups.push(hub.close);
164
+ const a1 = await startStore({
165
+ coordinatorPort: freshPort(),
166
+ hubUrl: hub.url,
167
+ name: "a1",
168
+ });
169
+ const a2 = await startStore({
170
+ coordinatorPort: a1.coordinatorPort,
171
+ hubUrl: hub.url,
172
+ name: "a2",
173
+ });
174
+ const b1 = await startStore({
175
+ coordinatorPort: freshPort(),
176
+ hubUrl: hub.url,
177
+ name: "b1",
178
+ });
179
+ // Mutual trust: b1 must trust a2 to accept a2's request, and a2 must trust b1 to route to it at all.
180
+ a2.addTrustedGateway(b1.peerId);
181
+ b1.addTrustedGateway(a2.peerId);
182
+ await waitFor("a2 to learn of b1 via the hub", async () => {
183
+ const agents = await a2.listAgents(a2.peerId);
184
+ return agents.some((agent) => agent.id === b1.peerId);
185
+ });
186
+ // Two-round DM consent, exactly like the local-mesh-only dm-admission.integration.test.ts.
187
+ const dmPath = dmRoomPath(a2.peerId, b1.peerId);
188
+ const requestPromise = a2.requestDmAccess(b1.peerId);
189
+ await waitFor("b1 to see a2's pending DM request via the hub", async () => {
190
+ await Promise.resolve();
191
+ return b1.listPendingRoomJoins().length === 1;
192
+ });
193
+ const [pending] = b1.listPendingRoomJoins();
194
+ expect(pending?.roomPath).toBe(dmPath);
195
+ expect(pending?.requesterId).toBe(a2.peerId);
196
+ b1.acceptRoomJoin(dmPath, a2.peerId);
197
+ await requestPromise;
198
+ const message = await a2.sendDm(a2.peerId, b1.peerId, "hello from a2");
199
+ await waitFor("b1 to receive the DM via the hub", async () => {
200
+ const b1Dms = b1.serialise().dms[dmPath] ?? [];
201
+ return b1Dms.some((m) => m.id === message.message.id);
202
+ });
203
+ const delivered = (b1.serialise().dms[dmPath] ?? []).find((m) => m.id === message.message.id);
204
+ expect(delivered).toMatchObject({
205
+ from: a2.peerId,
206
+ to: b1.peerId,
207
+ content: "hello from a2",
208
+ });
209
+ });
210
+ });
211
+ //# sourceMappingURL=hub-peer-per-store.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub-peer-per-store.integration.test.js","sourceRoot":"","sources":["../../src/test/hub-peer-per-store.integration.test.ts"],"names":[],"mappings":"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"}
@@ -35,8 +35,8 @@ async function connectedOwnerAndRequester(hubUrl) {
35
35
  });
36
36
  requester.gatewayTrust.add(owner.peerId);
37
37
  expect(owner.gatewayTrust.hasAny()).toBe(false);
38
- await ownerTransport.connectHub?.(hubUrl);
39
- await requesterTransport.connectHub?.(hubUrl);
38
+ await ownerTransport.hub.connect(hubUrl);
39
+ await requesterTransport.hub.connect(hubUrl);
40
40
  // The requester's own directory surfacing the owner means the hub verified and registered the owner's advert, which a relay-connect naming the owner needs before it is routed rather than silently dropped. Being connected is not enough.
41
41
  await waitForCondition(() => ownerTransport.hub.isConnected &&
42
42
  requesterTransport.hub.peers().includes(owner.peerId));
@@ -1 +1 @@
1
- {"version":3,"file":"hub-room-domain-verb-trust-bypass.integration.test.js","sourceRoot":"","sources":["../../src/test/hub-room-domain-verb-trust-bypass.integration.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hub-room-domain-verb-trust-bypass.integration.test.js","sourceRoot":"","sources":["../../src/test/hub-room-domain-verb-trust-bypass.integration.test.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,7 @@ test("a gateway drops its held hub connection when the hub goes away", async ()
21
21
  teardown.push(async () => {
22
22
  await store.shutdown();
23
23
  });
24
- await transport.connectHub(hub.url);
24
+ await transport.hub.connect(hub.url);
25
25
  expect(transport.hub.isConnected).toBe(true);
26
26
  await waitForCondition(() => hub.connectionCount() === 1);
27
27
  await hub.close();
@@ -1 +1 @@
1
- {"version":3,"file":"hub-session-close.integration.test.js","sourceRoot":"","sources":["../../src/test/hub-session-close.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,EACL,aAAa,EACb,aAAa,EACb,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,IAAI,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;IAChF,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,aAAa,EAAE,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACvB,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QACjD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;YACxB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC;QACF,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACvB,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,MAAM,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;QAE1D,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QAElB,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAEzD,iJAAiJ;QACjJ,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;YAAS,CAAC;QACT,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAC;IACvB,CAAC;AACH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"hub-session-close.integration.test.js","sourceRoot":"","sources":["../../src/test/hub-session-close.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,EACL,aAAa,EACb,aAAa,EACb,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,IAAI,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;IAChF,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,aAAa,EAAE,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACvB,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QACjD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;YACxB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC;QACF,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACvB,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,MAAM,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;QAE1D,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QAElB,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAEzD,iJAAiJ;QACjJ,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;YAAS,CAAC;QACT,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAC;IACvB,CAAC;AACH,CAAC,CAAC,CAAC"}