agent-comms 8.3.1 → 8.4.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 +27 -16
- package/dist/bridges/user/web/frontend/mesh-client.js +1 -1
- package/dist/bridges/user/web/frontend/mesh-client.js.map +1 -1
- package/dist/bridges/user/web/server.d.ts +1 -1
- package/dist/bridges/user/web/server.d.ts.map +1 -1
- package/dist/bridges/user/web/server.js +6 -12
- package/dist/bridges/user/web/server.js.map +1 -1
- package/dist/bridges/user/web/test/lan-web-server.integration.test.js +30 -1
- package/dist/bridges/user/web/test/lan-web-server.integration.test.js.map +1 -1
- package/dist/bridges/user/web/test/orpc-router.integration.test.js +15 -1
- package/dist/bridges/user/web/test/orpc-router.integration.test.js.map +1 -1
- package/dist/bridges/user/web/test/web-access.unit.test.js +127 -2
- package/dist/bridges/user/web/test/web-access.unit.test.js.map +1 -1
- package/dist/bridges/user/web/web-access.d.ts +9 -6
- package/dist/bridges/user/web/web-access.d.ts.map +1 -1
- package/dist/bridges/user/web/web-access.js +70 -22
- package/dist/bridges/user/web/web-access.js.map +1 -1
- package/dist/core/coordinator-role.d.ts +68 -0
- package/dist/core/coordinator-role.d.ts.map +1 -0
- package/dist/core/coordinator-role.js +161 -0
- package/dist/core/coordinator-role.js.map +1 -0
- package/dist/core/delivery-engine.d.ts.map +1 -1
- package/dist/core/delivery-engine.js +2 -0
- package/dist/core/delivery-engine.js.map +1 -1
- package/dist/core/election-sessions.d.ts +31 -0
- package/dist/core/election-sessions.d.ts.map +1 -0
- package/dist/core/election-sessions.js +59 -0
- package/dist/core/election-sessions.js.map +1 -0
- package/dist/core/loopback-address.d.ts +6 -0
- package/dist/core/loopback-address.d.ts.map +1 -0
- package/dist/core/loopback-address.js +21 -0
- package/dist/core/loopback-address.js.map +1 -0
- package/dist/core/mesh-store-options.d.ts +2 -0
- package/dist/core/mesh-store-options.d.ts.map +1 -1
- package/dist/core/mesh-store.d.ts +8 -2
- package/dist/core/mesh-store.d.ts.map +1 -1
- package/dist/core/mesh-store.js +41 -46
- package/dist/core/mesh-store.js.map +1 -1
- package/dist/core/peer-lifecycle.d.ts +18 -10
- package/dist/core/peer-lifecycle.d.ts.map +1 -1
- package/dist/core/peer-lifecycle.js +50 -9
- package/dist/core/peer-lifecycle.js.map +1 -1
- package/dist/core/pending-connection.d.ts +24 -0
- package/dist/core/pending-connection.d.ts.map +1 -0
- package/dist/core/pending-connection.js +25 -0
- package/dist/core/pending-connection.js.map +1 -0
- package/dist/core/stale-agent-checker.d.ts +4 -2
- package/dist/core/stale-agent-checker.d.ts.map +1 -1
- package/dist/core/stale-agent-checker.js +5 -4
- package/dist/core/stale-agent-checker.js.map +1 -1
- package/dist/core/transport-events.d.ts +2 -0
- package/dist/core/transport-events.d.ts.map +1 -1
- package/dist/core/transport-events.js +8 -0
- package/dist/core/transport-events.js.map +1 -1
- package/dist/core/transport.d.ts +22 -2
- package/dist/core/transport.d.ts.map +1 -1
- package/dist/core/wire-mesh-transport-options.d.ts +14 -0
- package/dist/core/wire-mesh-transport-options.d.ts.map +1 -1
- package/dist/core/wire-mesh-transport-options.js +23 -1
- package/dist/core/wire-mesh-transport-options.js.map +1 -1
- package/dist/core/wire-mesh-transport.d.ts +7 -5
- package/dist/core/wire-mesh-transport.d.ts.map +1 -1
- package/dist/core/wire-mesh-transport.js +53 -52
- package/dist/core/wire-mesh-transport.js.map +1 -1
- package/dist/core/ws-dial.d.ts +3 -1
- package/dist/core/ws-dial.d.ts.map +1 -1
- package/dist/core/ws-dial.js +15 -0
- package/dist/core/ws-dial.js.map +1 -1
- package/dist/test/agent-comms-version-gossip.integration.test.js +2 -0
- package/dist/test/agent-comms-version-gossip.integration.test.js.map +1 -1
- package/dist/test/agent-self-gossip.integration.test.js +2 -0
- package/dist/test/agent-self-gossip.integration.test.js.map +1 -1
- package/dist/test/become-coordinator-actual-port.integration.test.js +2 -0
- package/dist/test/become-coordinator-actual-port.integration.test.js.map +1 -1
- package/dist/test/coordinator-claim-sessions.integration.test.d.ts +5 -0
- package/dist/test/coordinator-claim-sessions.integration.test.d.ts.map +1 -0
- package/dist/test/coordinator-claim-sessions.integration.test.js +276 -0
- package/dist/test/coordinator-claim-sessions.integration.test.js.map +1 -0
- package/dist/test/coordinator-election.integration.test.d.ts +5 -0
- package/dist/test/coordinator-election.integration.test.d.ts.map +1 -0
- package/dist/test/coordinator-election.integration.test.js +182 -0
- package/dist/test/coordinator-election.integration.test.js.map +1 -0
- package/dist/test/coordinator-failover.unit.test.d.ts +1 -1
- package/dist/test/coordinator-failover.unit.test.js +171 -68
- package/dist/test/coordinator-failover.unit.test.js.map +1 -1
- package/dist/test/coordinator-role.unit.test.d.ts +5 -0
- package/dist/test/coordinator-role.unit.test.d.ts.map +1 -0
- package/dist/test/coordinator-role.unit.test.js +296 -0
- package/dist/test/coordinator-role.unit.test.js.map +1 -0
- package/dist/test/data-sync-frame-handling.integration.test.js +2 -0
- package/dist/test/data-sync-frame-handling.integration.test.js.map +1 -1
- package/dist/test/delivery-engine-delivery.unit.test.js +3 -0
- package/dist/test/delivery-engine-delivery.unit.test.js.map +1 -1
- package/dist/test/delivery-engine-directed-notify.unit.test.js +3 -0
- package/dist/test/delivery-engine-directed-notify.unit.test.js.map +1 -1
- package/dist/test/delivery-engine-own-agent.unit.test.js +3 -0
- package/dist/test/delivery-engine-own-agent.unit.test.js.map +1 -1
- package/dist/test/delivery-engine.unit.test.js +12 -0
- package/dist/test/delivery-engine.unit.test.js.map +1 -1
- package/dist/test/gossip-directory-aggregation.integration.test.js +2 -0
- package/dist/test/gossip-directory-aggregation.integration.test.js.map +1 -1
- package/dist/test/gossip-listener-addresses.integration.test.js +2 -0
- package/dist/test/gossip-listener-addresses.integration.test.js.map +1 -1
- package/dist/test/hosted-rooms-gossip.integration.test.js +2 -0
- package/dist/test/hosted-rooms-gossip.integration.test.js.map +1 -1
- package/dist/test/hub-mode-session.integration.test.js +2 -0
- package/dist/test/hub-mode-session.integration.test.js.map +1 -1
- package/dist/test/hub-session-dispatch.unit.test.js +2 -0
- package/dist/test/hub-session-dispatch.unit.test.js.map +1 -1
- package/dist/test/listener-policy.integration.test.js +2 -0
- package/dist/test/listener-policy.integration.test.js.map +1 -1
- package/dist/test/loopback-address.unit.test.d.ts +5 -0
- package/dist/test/loopback-address.unit.test.d.ts.map +1 -0
- package/dist/test/loopback-address.unit.test.js +28 -0
- package/dist/test/loopback-address.unit.test.js.map +1 -0
- package/dist/test/mesh-graph-trace.integration.test.js +2 -0
- package/dist/test/mesh-graph-trace.integration.test.js.map +1 -1
- package/dist/test/mesh-store-orchestration.unit.test.js +23 -6
- package/dist/test/mesh-store-orchestration.unit.test.js.map +1 -1
- package/dist/test/peer-lifecycle.unit.test.js +35 -15
- package/dist/test/peer-lifecycle.unit.test.js.map +1 -1
- package/dist/test/presence-readvertise.integration.test.js +49 -0
- package/dist/test/presence-readvertise.integration.test.js.map +1 -1
- package/dist/test/query-version.integration.test.js +2 -0
- package/dist/test/query-version.integration.test.js.map +1 -1
- package/dist/test/room-join-admission.integration.test.js +3 -0
- package/dist/test/room-join-admission.integration.test.js.map +1 -1
- package/dist/test/room-router.unit.test.js +2 -0
- package/dist/test/room-router.unit.test.js.map +1 -1
- package/dist/test/room-send-retry-queue.integration.test.js +3 -0
- package/dist/test/room-send-retry-queue.integration.test.js.map +1 -1
- package/dist/test/stale-agent-checker.unit.test.js +5 -0
- package/dist/test/stale-agent-checker.unit.test.js.map +1 -1
- package/dist/test/test-transport.d.ts +3 -0
- package/dist/test/test-transport.d.ts.map +1 -1
- package/dist/test/test-transport.js +19 -0
- package/dist/test/test-transport.js.map +1 -1
- package/dist/test/wire-mesh-transport-gateway-trust.integration.test.js +2 -0
- package/dist/test/wire-mesh-transport-gateway-trust.integration.test.js.map +1 -1
- package/dist/test/wire-mesh-transport-hub.integration.test.js +2 -0
- package/dist/test/wire-mesh-transport-hub.integration.test.js.map +1 -1
- package/dist/test/wire-mesh-transport-shutdown-unref.integration.test.js +10 -26
- package/dist/test/wire-mesh-transport-shutdown-unref.integration.test.js.map +1 -1
- package/dist/test/wire-mesh-transport.integration.test.js +51 -51
- package/dist/test/wire-mesh-transport.integration.test.js.map +1 -1
- package/dist/test/wss-remote-connect.integration.test.js +2 -0
- package/dist/test/wss-remote-connect.integration.test.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A connect_request held open awaiting a human decision, how long it may wait, and what happens when it waits too long: WireMeshTransport's pending-connection bookkeeping, split out of wire-mesh-transport.ts to keep it under the repo's max-lines cap.
|
|
3
|
+
*/
|
|
4
|
+
/** How long a connect_request may sit awaiting a human decision before this side gives up and rejects it automatically. Generous on purpose -- this bounds a human approval window, not a network timeout: 5 minutes covers a person genuinely being away from the terminal for a few minutes, while still guaranteeing every unanswered request eventually resolves instead of accumulating in pendingConnections indefinitely. */
|
|
5
|
+
const PENDING_CONNECTION_TIMEOUT_MINUTES = 5;
|
|
6
|
+
const SECONDS_PER_MINUTE = 60;
|
|
7
|
+
const MS_PER_SECOND = 1000;
|
|
8
|
+
export const DEFAULT_PENDING_CONNECTION_TIMEOUT_MS = PENDING_CONNECTION_TIMEOUT_MINUTES * SECONDS_PER_MINUTE * MS_PER_SECOND;
|
|
9
|
+
/** Auto-rejects a connect_request that has sat unanswered past WireMeshTransport's pendingConnectionTimeoutMs: the same respond-then-resolve shape rejectConnection uses (a real error response, not a silent hang), since unlike watchForDisconnect's own cleanup path the requester's session is still very much alive and waiting to hear back. A no-op if the request was already settled by acceptConnection/rejectConnection/disconnect before this timer fired, since entries are deleted exactly once, by whichever path settles first. */
|
|
10
|
+
export function expirePendingConnection(pendingConnections, id) {
|
|
11
|
+
const pending = pendingConnections.get(id);
|
|
12
|
+
if (pending === undefined) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
pendingConnections.delete(id);
|
|
16
|
+
void pending
|
|
17
|
+
.respond({
|
|
18
|
+
result: "error",
|
|
19
|
+
code: "timeout",
|
|
20
|
+
message: "no human decision within the pending-connection timeout",
|
|
21
|
+
})
|
|
22
|
+
.catch(() => undefined);
|
|
23
|
+
pending.resolve("reject");
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=pending-connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending-connection.js","sourceRoot":"","sources":["../../src/core/pending-connection.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,oaAAoa;AACpa,MAAM,kCAAkC,GAAG,CAAC,CAAC;AAC7C,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,CAAC,MAAM,qCAAqC,GAChD,kCAAkC,GAAG,kBAAkB,GAAG,aAAa,CAAC;AAmB1E,mhBAAmhB;AACnhB,MAAM,UAAU,uBAAuB,CACrC,kBAAkD,EAClD,EAAU;IAEV,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IACD,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9B,KAAK,OAAO;SACT,OAAO,CAAC;QACP,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,yDAAyD;KACnE,CAAC;SACD,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC1B,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* StaleAgentChecker
|
|
2
|
+
* StaleAgentChecker: periodic liveness probe, run only by the elected coordinator (agent-comms#341), over every registered agent's own PID, marking a dead process's agent offline and, separately, purging agent records that have sat offline past a fixed threshold. Split out of MeshStore purely to keep mesh-store.ts under the repo's max-lines cap; owns its own probe-interval timer exclusively (nothing outside this class ever reads or writes it).
|
|
3
3
|
*/
|
|
4
4
|
import type { AgentIdentity, AgentStatus, DeliveryEvent } from "./types.js";
|
|
5
5
|
import type { MeshStatePatch, PeerInfo } from "./wire-protocol.js";
|
|
@@ -13,12 +13,14 @@ export interface StaleAgentCheckerDeps {
|
|
|
13
13
|
peerInfo: Map<string, PeerInfo>;
|
|
14
14
|
notifyRoomsOfStatus: (agentId: string, status: AgentStatus) => Promise<void>;
|
|
15
15
|
broadcastPatch: (patch: MeshStatePatch) => Promise<void>;
|
|
16
|
+
/** Raises an agent's sync revision, so the offline record outranks every snapshot taken while the agent was running. */
|
|
17
|
+
bump: (agent: AgentIdentity) => void;
|
|
16
18
|
}
|
|
17
19
|
export declare class StaleAgentChecker {
|
|
18
20
|
private readonly deps;
|
|
19
21
|
private timer;
|
|
20
22
|
constructor(deps: StaleAgentCheckerDeps);
|
|
21
|
-
/** Starts the periodic probe (coordinator
|
|
23
|
+
/** Starts the periodic probe (while this store holds the elected coordinator role). No-op if already running. */
|
|
22
24
|
start(): void;
|
|
23
25
|
/** Stops the periodic probe, if running. */
|
|
24
26
|
stop(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stale-agent-checker.d.ts","sourceRoot":"","sources":["../../src/core/stale-agent-checker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnE,qSAAqS;AACrS,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACnC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAC7C,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChC,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,cAAc,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"stale-agent-checker.d.ts","sourceRoot":"","sources":["../../src/core/stale-agent-checker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnE,qSAAqS;AACrS,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACnC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAC7C,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChC,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,cAAc,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,wHAAwH;IACxH,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CACtC;AAYD,qBAAa,iBAAiB;IAGhB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,KAAK,CAA6C;gBAE7B,IAAI,EAAE,qBAAqB;IAExD,iHAAiH;IACjH,KAAK,IAAI,IAAI;IAOb,4CAA4C;IAC5C,IAAI,IAAI,IAAI;YAOE,gBAAgB;IAiD9B,OAAO,CAAC,cAAc;CAQvB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* StaleAgentChecker
|
|
2
|
+
* StaleAgentChecker: periodic liveness probe, run only by the elected coordinator (agent-comms#341), over every registered agent's own PID, marking a dead process's agent offline and, separately, purging agent records that have sat offline past a fixed threshold. Split out of MeshStore purely to keep mesh-store.ts under the repo's max-lines cap; owns its own probe-interval timer exclusively (nothing outside this class ever reads or writes it).
|
|
3
3
|
*/
|
|
4
|
-
/** How often the coordinator probes registered agent PIDs for liveness. */
|
|
4
|
+
/** How often the elected coordinator probes registered agent PIDs for liveness. */
|
|
5
5
|
const PROBE_INTERVAL_MS = 5000;
|
|
6
6
|
/** How long an agent may sit "offline" before its record is purged entirely, to prevent indefinite accumulation. */
|
|
7
7
|
const OFFLINE_PURGE_THRESHOLD_MINUTES = 30;
|
|
@@ -14,7 +14,7 @@ export class StaleAgentChecker {
|
|
|
14
14
|
constructor(deps) {
|
|
15
15
|
this.deps = deps;
|
|
16
16
|
}
|
|
17
|
-
/** Starts the periodic probe (coordinator
|
|
17
|
+
/** Starts the periodic probe (while this store holds the elected coordinator role). No-op if already running. */
|
|
18
18
|
start() {
|
|
19
19
|
if (this.timer)
|
|
20
20
|
return;
|
|
@@ -30,7 +30,7 @@ export class StaleAgentChecker {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
async probeStaleAgents() {
|
|
33
|
-
const { agents, deliveryQueues, identityCache, peerInfo, notifyRoomsOfStatus, broadcastPatch, } = this.deps;
|
|
33
|
+
const { agents, deliveryQueues, identityCache, peerInfo, notifyRoomsOfStatus, broadcastPatch, bump, } = this.deps;
|
|
34
34
|
const deadIds = [];
|
|
35
35
|
for (const [id, agent] of agents) {
|
|
36
36
|
if (agent.status !== "active")
|
|
@@ -43,6 +43,7 @@ export class StaleAgentChecker {
|
|
|
43
43
|
const agent = agents.get(id);
|
|
44
44
|
if (agent) {
|
|
45
45
|
agent.status = "offline";
|
|
46
|
+
bump(agent);
|
|
46
47
|
agents.set(id, agent);
|
|
47
48
|
await notifyRoomsOfStatus(id, "offline");
|
|
48
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stale-agent-checker.js","sourceRoot":"","sources":["../../src/core/stale-agent-checker.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"stale-agent-checker.js","sourceRoot":"","sources":["../../src/core/stale-agent-checker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiBH,mFAAmF;AACnF,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,oHAAoH;AACpH,MAAM,+BAA+B,GAAG,EAAE,CAAC;AAC3C,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,0BAA0B,GAC9B,+BAA+B,GAAG,kBAAkB,GAAG,aAAa,CAAC;AAEvE,MAAM,OAAO,iBAAiB;IAGC;IAFrB,KAAK,CAA6C;IAE1D,YAA6B,IAA2B;QAA3B,SAAI,GAAJ,IAAI,CAAuB;IAAG,CAAC;IAE5D,iHAAiH;IACjH,KAAK;QACH,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO;QACvB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC/B,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACxB,CAAC;IAED,4CAA4C;IAC5C,IAAI;QACF,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,EACJ,MAAM,EACN,cAAc,EACd,aAAa,EACb,QAAQ,EACR,mBAAmB,EACnB,cAAc,EACd,IAAI,GACL,GAAG,IAAI,CAAC,IAAI,CAAC;QACd,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;gBAAE,SAAS;YACxC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QAED,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,CAAC;gBACZ,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBACtB,MAAM,mBAAmB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAC3C,CAAC;YACD,MAAM,cAAc,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAC7D,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC;QAED,qEAAqE;QACrE,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,0BAA0B,CAAC;QACjE,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;gBAAE,SAAS;YACzC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;YACtD,IAAI,SAAS,GAAG,gBAAgB,EAAE,CAAC;gBACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAClB,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACpB,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzB,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,GAAW;QAChC,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type { TransportEvents } from "./transport.js";
|
|
5
5
|
import type { ConnectionApproval } from "./connection-approval.js";
|
|
6
|
+
import type { CoordinatorRole } from "./coordinator-role.js";
|
|
6
7
|
import type { DeliveryEngine } from "./delivery-engine.js";
|
|
7
8
|
import type { PeerLifecycle } from "./peer-lifecycle.js";
|
|
8
9
|
import type { RoomProtocol } from "./room-protocol.js";
|
|
@@ -12,6 +13,7 @@ export interface TransportEventTargets {
|
|
|
12
13
|
connectionApproval: ConnectionApproval;
|
|
13
14
|
deliveryEngine: DeliveryEngine;
|
|
14
15
|
roomProtocol: RoomProtocol;
|
|
16
|
+
coordinatorRole: CoordinatorRole;
|
|
15
17
|
reportError: (error: unknown) => void;
|
|
16
18
|
}
|
|
17
19
|
/** The TransportEvents object bridges pass to the transport constructor. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport-events.d.ts","sourceRoot":"","sources":["../../src/core/transport-events.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,yRAAyR;AACzR,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,aAAa,CAAC;IAC7B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAED,4EAA4E;AAC5E,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GACrC,eAAe,
|
|
1
|
+
{"version":3,"file":"transport-events.d.ts","sourceRoot":"","sources":["../../src/core/transport-events.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,yRAAyR;AACzR,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,aAAa,CAAC;IAC7B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAED,4EAA4E;AAC5E,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GACrC,eAAe,CAgDjB"}
|
|
@@ -35,6 +35,14 @@ export function createTransportEvents(store) {
|
|
|
35
35
|
onRevocationAnnounce: (entry) => {
|
|
36
36
|
void store.deliveryEngine.handleRevocationAnnounce(entry);
|
|
37
37
|
},
|
|
38
|
+
onCoordinatorClaim: (handle, frame) => {
|
|
39
|
+
void store.coordinatorRole
|
|
40
|
+
.handleClaim(handle, frame)
|
|
41
|
+
.catch(store.reportError);
|
|
42
|
+
},
|
|
43
|
+
onElectionSessionEnrolled: (handle) => {
|
|
44
|
+
void store.coordinatorRole.announceTo(handle).catch(store.reportError);
|
|
45
|
+
},
|
|
38
46
|
onPresenceAdvert: (handle, status) => {
|
|
39
47
|
store.deliveryEngine.handlePresenceAdvert(handle.id, status);
|
|
40
48
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport-events.js","sourceRoot":"","sources":["../../src/core/transport-events.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"transport-events.js","sourceRoot":"","sources":["../../src/core/transport-events.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmBH,4EAA4E;AAC5E,MAAM,UAAU,qBAAqB,CACnC,KAAsC;IAEtC,OAAO;QACL,SAAS,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YACzB,KAAK,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1D,CAAC;QACD,eAAe,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;YAChC,KAAK,KAAK,CAAC,aAAa,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7D,CAAC;QACD,kBAAkB,EAAE,CAAC,MAAM,EAAE,EAAE;YAC7B,KAAK,CAAC,aAAa,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC;QACD,cAAc,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YAC9B,KAAK,KAAK,CAAC,aAAa,CAAC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC3D,CAAC;QACD,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;YACpB,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;QACD,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;YACrB,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;QACD,mBAAmB,EAAE,CAAC,QAAQ,EAAE,EAAE;YAChC,gOAAgO;YAChO,KAAK,KAAK,CAAC,aAAa;iBACrB,uBAAuB,CAAC,QAAQ,CAAC;iBACjC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC9B,CAAC;QACD,mBAAmB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;YACvC,KAAK,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,EAAE,KAAK,CAAC,WAAW;QAC1B,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,KAAK,KAAK,CAAC,cAAc,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAC5D,CAAC;QACD,kBAAkB,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACpC,KAAK,KAAK,CAAC,eAAe;iBACvB,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC;iBAC1B,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC9B,CAAC;QACD,yBAAyB,EAAE,CAAC,MAAM,EAAE,EAAE;YACpC,KAAK,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACzE,CAAC;QACD,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;YACnC,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/D,CAAC;QACD,iBAAiB,EAAE,CAAC,SAAS,EAAE,EAAE;YAC/B,KAAK,KAAK,CAAC,YAAY,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;QAC9D,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/core/transport.d.ts
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* It does not interpret messages — that's MeshStore's job.
|
|
18
18
|
*/
|
|
19
19
|
import type { MeshMessage, PeerInfo } from "./wire-protocol.js";
|
|
20
|
-
import type { CapabilityScope, CapabilityToken, ManageCommand, RevocationEntry } from "wire-mesh-core/generated/protocol";
|
|
20
|
+
import type { CapabilityScope, CapabilityToken, CoordinatorFrame, ManageCommand, RevocationEntry } from "wire-mesh-core/generated/protocol";
|
|
21
21
|
import type { ManageOutcome } from "wire-mesh-core/domain/mesh-session";
|
|
22
22
|
import type { AgentStatus } from "./types.js";
|
|
23
23
|
import type { ConnectToRemoteOptions } from "./wire-mesh-transport-options.js";
|
|
@@ -90,6 +90,14 @@ export interface TransportEvents {
|
|
|
90
90
|
* A peer announced one already-minted revocation-entry over an established session (management.cddl's revocation-announce, flattened to one call per entry). MeshStore should verify it and, if it verifies, record it in its own RevocationView -- a bearer's already-issued token stays valid to every peer that never received this until it does, per the design's own honest "detection with propagation delay" limit.
|
|
91
91
|
*/
|
|
92
92
|
onRevocationAnnounce: (entry: RevocationEntry) => void;
|
|
93
|
+
/**
|
|
94
|
+
* A peer on this machine gossiped a coordinator-frame: a term-based claim to the elected coordinator role (agent-comms#341). Fires only for sessions the transport counts as machine-local, since the duties that role carries are per machine. MeshStore evaluates it against the claim it currently accepts.
|
|
95
|
+
*/
|
|
96
|
+
onCoordinatorClaim: (handle: Readonly<ConnectionHandle>, frame: Readonly<CoordinatorFrame>) => void;
|
|
97
|
+
/**
|
|
98
|
+
* A machine-local session was enrolled in the coordinator election (agent-comms#341), on either end of it: accepted on a loopback listener, or dialled at a loopback address. MeshStore tells the peer at once which claim it accepts, so a joiner learns the incumbent instead of claiming over it, whichever side dialled.
|
|
99
|
+
*/
|
|
100
|
+
onElectionSessionEnrolled: (handle: Readonly<ConnectionHandle>) => void;
|
|
93
101
|
/**
|
|
94
102
|
* A device this side can now route a request to became reachable: the relay hub admitted its directory entry into this side's own view, or an operator trusted it outright. Fires for a route that appears through the hub as well as a direct peer connection, since onPeerConnected only ever covers the latter and a device fronted by a remote gateway has no local session of its own to connect. MeshStore retries anything queued for that device on this.
|
|
95
103
|
*/
|
|
@@ -102,7 +110,7 @@ export interface TransportEvents {
|
|
|
102
110
|
export interface MeshTransport {
|
|
103
111
|
/** The port this instance's data server is listening on (0 before startDataServer). */
|
|
104
112
|
readonly dataPort: number;
|
|
105
|
-
/** Whether this instance
|
|
113
|
+
/** Whether this instance holds the well-known coordinator port listener, the compatibility first-contact address and introduction path. Not the elected coordinator role (agent-comms#341), which is held by gossiped claim and need not be on the peer that bound the port. */
|
|
106
114
|
readonly isCoordinator: boolean;
|
|
107
115
|
/** Whether this instance has a live connection to a coordinator. */
|
|
108
116
|
readonly hasCoordinatorConnection: boolean;
|
|
@@ -149,6 +157,18 @@ export interface MeshTransport {
|
|
|
149
157
|
* Announces one or more already-minted revocation-entries to every connected peer session, best-effort (an unreachable peer misses it and learns of the revocation later, if ever -- the same honest gossip-propagation-delay limit every other broadcast in this codebase already accepts).
|
|
150
158
|
*/
|
|
151
159
|
broadcastRevocation: (entries: readonly RevocationEntry[]) => Promise<void>;
|
|
160
|
+
/**
|
|
161
|
+
* Gossips a coordinator-frame to every machine-local peer session. A failed send is reported through onError rather than thrown, since it only happens on a session that is already closing.
|
|
162
|
+
*/
|
|
163
|
+
broadcastCoordinatorClaim: (frame: Readonly<CoordinatorFrame>) => Promise<void>;
|
|
164
|
+
/**
|
|
165
|
+
* Sends a coordinator-frame to one peer, as an announcement to a new session or an answer to a stale claim. A no-op when that peer has no machine-local session.
|
|
166
|
+
*/
|
|
167
|
+
sendCoordinatorClaim: (handle: Readonly<ConnectionHandle>, frame: Readonly<CoordinatorFrame>) => Promise<void>;
|
|
168
|
+
/**
|
|
169
|
+
* The device-ids of every peer this side has a machine-local session to, the peers that take part in the coordinator election with it. Peers reached only across machines, and peers merely named in a peer list, are not among them.
|
|
170
|
+
*/
|
|
171
|
+
electionPeerIds: () => ReadonlySet<string>;
|
|
152
172
|
/**
|
|
153
173
|
* Sends a real core/room manage-request to a specific member's own established session, returning its outcome (e.g. a room.join request's granted-token, or a room.send's delivery receipt) rather than swallowing it the way send() does for the legacy opaque-frame path. Resolves to a not_connected error outcome if no live session to that member exists, rather than throwing -- the caller (currently room-join, and P3.5's directed fan-out once it lands) decides how to react to an unreachable member.
|
|
154
174
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/core/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,aAAa,EACb,eAAe,EAChB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAM/E;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;AAE3E,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,0EAA0E;IAC1E,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,+EAA+E;IAC/E,EAAE,EAAE,MAAM,CAAC;IACX,wEAAwE;IACxE,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAMD,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAE9E;;OAEG;IACH,eAAe,EAAE,CACf,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,KACrB,IAAI,CAAC;IAEV;;OAEG;IACH,kBAAkB,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAEjE;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAEjC;;OAEG;IACH,cAAc,EAAE,CACd,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,GAAG,EAAE,QAAQ,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,KAChD,IAAI,CAAC;IAEV;;OAEG;IACH,mBAAmB,EAAE,CACnB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,KACC,IAAI,CAAC;IAEV;;OAEG;IACH,UAAU,EAAE,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,KAAK,IAAI,CAAC;IAEjD;;OAEG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;IAEjD;;OAEG;IACH,mBAAmB,EAAE,CAAC,QAAQ,EAAE,SAAS,QAAQ,EAAE,KAAK,IAAI,CAAC;IAE7D;;OAEG;IACH,oBAAoB,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAEvD;;OAEG;IACH,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAE/C;;OAEG;IACH,gBAAgB,EAAE,CAChB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,MAAM,EAAE,WAAW,KAChB,IAAI,CAAC;CACX;AAMD,MAAM,WAAW,aAAa;IAC5B,uFAAuF;IACvF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/core/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import type { GatewayTrustReader } from "./gateway-trust.js";
|
|
|
6
6
|
import type { RoomVerbHandler } from "./room-router.js";
|
|
7
7
|
import type { AgentStatus } from "./types.js";
|
|
8
8
|
import type { AgentSelfAdvert, HostedRoomAdvert } from "./gossip-extensions.js";
|
|
9
|
+
import type { ListenerPolicy } from "./transport.js";
|
|
9
10
|
/** roomVerbHandlers, getCurrentPresence, getHostedRooms, dataStorage, getSelfAgentAdvert, and gatewayTrust each match the field-level doc comment on the WireMeshTransport field they back; pendingConnectionTimeoutMs and presenceReadvertiseIntervalMs default to DEFAULT_PENDING_CONNECTION_TIMEOUT_MS/PRESENCE_READVERTISE_INTERVAL_MS. All eight are optional and bundled into this one options type -- a caller needing only gatewayTrust no longer has to pass `undefined` for every one before it. */
|
|
10
11
|
export interface WireMeshTransportOptions {
|
|
11
12
|
roomVerbHandlers?: Partial<Record<string, RoomVerbHandler>>;
|
|
@@ -40,4 +41,17 @@ export interface ConnectToRemoteOptions {
|
|
|
40
41
|
name: string;
|
|
41
42
|
fingerprint: string;
|
|
42
43
|
}
|
|
44
|
+
/** How an accepted connection is treated, set by the listener that accepted it. fireOnPeerConnected is true only for the data server, whose connections are a known peer's own data dial; requiresApproval quarantines a listener a stranger can dial cold; machineLocal marks a loopback-only listener, whose sessions take part in the coordinator election (election-sessions.ts). */
|
|
45
|
+
export interface AcceptOptions {
|
|
46
|
+
policy: ListenerPolicy | undefined;
|
|
47
|
+
fireOnPeerConnected: boolean;
|
|
48
|
+
requiresApproval: boolean;
|
|
49
|
+
machineLocal: boolean;
|
|
50
|
+
}
|
|
51
|
+
/** The data server: bound on loopback, dialled only by peers that already know its port. */
|
|
52
|
+
export declare const DATA_SERVER_ACCEPT: Readonly<AcceptOptions>;
|
|
53
|
+
/** The default well-known port listener: bound on loopback, but dialled cold, so quarantined until an introduce or an approved connect_request. */
|
|
54
|
+
export declare const DEFAULT_LISTENER_ACCEPT: Readonly<AcceptOptions>;
|
|
55
|
+
/** A listener an operator added with addListener: on whatever interface they chose, so it may cross machines and never carries coordinator claims. */
|
|
56
|
+
export declare function operatorListenerAccept(policy: ListenerPolicy): AcceptOptions;
|
|
43
57
|
//# sourceMappingURL=wire-mesh-transport-options.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire-mesh-transport-options.d.ts","sourceRoot":"","sources":["../../src/core/wire-mesh-transport-options.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"wire-mesh-transport-options.d.ts","sourceRoot":"","sources":["../../src/core/wire-mesh-transport-options.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,8eAA8e;AAC9e,MAAM,WAAW,wBAAwB;IACvC,gBAAgB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAC5D,0BAA0B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD,gKAAgK;IAChK,yBAAyB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,kBAAkB,CAAC,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IACnD,6BAA6B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnD,cAAc,CAAC,EAAE,MAAM,SAAS,gBAAgB,EAAE,CAAC;IACnD,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,eAAe,GAAG,SAAS,CAAC;IACvD,YAAY,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC5C,mNAAmN;IACnN,gBAAgB,CAAC,EAAE,CACjB,KAAK,EAAE,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,KACxE,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7E;AAED,gKAAgK;AAChK,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,yXAAyX;AACzX,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,4FAA4F;AAC5F,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,aAAa,CAKtD,CAAC;AAEF,mJAAmJ;AACnJ,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,aAAa,CAK3D,CAAC;AAEF,sJAAsJ;AACtJ,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,aAAa,CAO5E"}
|
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WireMeshTransport's own constructor options, split out purely to keep wire-mesh-transport.ts under the repo's max-lines cap, the same reason connection-approval.ts, room-router.ts, hub-session.ts, peer-lifecycle.ts, gossip-directory.ts, and listener-registry.ts were each split from that file.
|
|
3
3
|
*/
|
|
4
|
-
|
|
4
|
+
/** The data server: bound on loopback, dialled only by peers that already know its port. */
|
|
5
|
+
export const DATA_SERVER_ACCEPT = {
|
|
6
|
+
policy: undefined,
|
|
7
|
+
fireOnPeerConnected: true,
|
|
8
|
+
requiresApproval: false,
|
|
9
|
+
machineLocal: true,
|
|
10
|
+
};
|
|
11
|
+
/** The default well-known port listener: bound on loopback, but dialled cold, so quarantined until an introduce or an approved connect_request. */
|
|
12
|
+
export const DEFAULT_LISTENER_ACCEPT = {
|
|
13
|
+
policy: "full",
|
|
14
|
+
fireOnPeerConnected: false,
|
|
15
|
+
requiresApproval: true,
|
|
16
|
+
machineLocal: true,
|
|
17
|
+
};
|
|
18
|
+
/** A listener an operator added with addListener: on whatever interface they chose, so it may cross machines and never carries coordinator claims. */
|
|
19
|
+
export function operatorListenerAccept(policy) {
|
|
20
|
+
return {
|
|
21
|
+
policy,
|
|
22
|
+
fireOnPeerConnected: false,
|
|
23
|
+
requiresApproval: true,
|
|
24
|
+
machineLocal: false,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
5
27
|
//# sourceMappingURL=wire-mesh-transport-options.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire-mesh-transport-options.js","sourceRoot":"","sources":["../../src/core/wire-mesh-transport-options.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
1
|
+
{"version":3,"file":"wire-mesh-transport-options.js","sourceRoot":"","sources":["../../src/core/wire-mesh-transport-options.ts"],"names":[],"mappings":"AAAA;;GAEG;AA6CH,4FAA4F;AAC5F,MAAM,CAAC,MAAM,kBAAkB,GAA4B;IACzD,MAAM,EAAE,SAAS;IACjB,mBAAmB,EAAE,IAAI;IACzB,gBAAgB,EAAE,KAAK;IACvB,YAAY,EAAE,IAAI;CACnB,CAAC;AAEF,mJAAmJ;AACnJ,MAAM,CAAC,MAAM,uBAAuB,GAA4B;IAC9D,MAAM,EAAE,MAAM;IACd,mBAAmB,EAAE,KAAK;IAC1B,gBAAgB,EAAE,IAAI;IACtB,YAAY,EAAE,IAAI;CACnB,CAAC;AAEF,sJAAsJ;AACtJ,MAAM,UAAU,sBAAsB,CAAC,MAAsB;IAC3D,OAAO;QACL,MAAM;QACN,mBAAmB,EAAE,KAAK;QAC1B,gBAAgB,EAAE,IAAI;QACtB,YAAY,EAAE,KAAK;KACpB,CAAC;AACJ,CAAC"}
|
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { HubSession } from "./hub-session.js";
|
|
11
11
|
import { type ManageOutcome } from "wire-mesh-core/domain/mesh-session";
|
|
12
|
-
import type { CapabilityScope, CapabilityToken, DataHaveFrame, DataRequestFrame, ManageCommand, PeerAdvert, RevocationEntry } from "wire-mesh-core/generated/protocol";
|
|
12
|
+
import type { CapabilityScope, CapabilityToken, CoordinatorFrame, DataHaveFrame, DataRequestFrame, ManageCommand, PeerAdvert, RevocationEntry } from "wire-mesh-core/generated/protocol";
|
|
13
13
|
import type { MeshMessage, PeerInfo } from "./wire-protocol.js";
|
|
14
14
|
import type { ConnectionHandle, ListenerInfo, ListenerPolicy, MeshGraph, MeshTransport, MeshTraceResult, TransportEvents } from "./transport.js";
|
|
15
15
|
import type { PeerIdentity } from "./identity.js";
|
|
16
|
-
import type
|
|
16
|
+
import { type ConnectToRemoteOptions, type WireMeshTransportOptions } from "./wire-mesh-transport-options.js";
|
|
17
17
|
/** This project's own namespaced domain (registrant "exadev.io", local name "agent-comms-v1"), matching namespaced-domain-id's "<registrant>/<local-name>" shape -- registry/core-domains.md's own recommended pattern for a third party. Exported for test use only: a security test simulating a hostile client that skips connect_request needs to construct a well-formed frame under the same domain/verb/scope this transport itself listens on, rather than duplicating these as separately-maintained magic strings that could silently drift from the real values. */
|
|
18
18
|
export declare const DOMAIN = "exadev.io/agent-comms-v1";
|
|
19
19
|
/** One verb for the entire MeshMessage union: this phase carries every message opaquely rather than modelling each arm as its own verb, which is core/room's own job once P3 gives this substrate real room semantics. */
|
|
@@ -38,6 +38,7 @@ export declare class WireMeshTransport implements MeshTransport {
|
|
|
38
38
|
readonly hub: HubSession;
|
|
39
39
|
private readonly peerSessions;
|
|
40
40
|
private readonly allSessions;
|
|
41
|
+
private readonly electionSessions;
|
|
41
42
|
private readonly knownDevices;
|
|
42
43
|
/** Every device this side has ever heard gossip from, mesh-wide -- not just its own directly-connected peers -- with each one's own latest full advert (addresses, snapshot-seconds, and every open-extension field such as presence/status). See gossip-directory.ts's own listKnownDevicesEntries for the actual implementation, kept out of this already-large file. */
|
|
43
44
|
listKnownDevices(): readonly {
|
|
@@ -90,13 +91,11 @@ export declare class WireMeshTransport implements MeshTransport {
|
|
|
90
91
|
private consumeQuarantined;
|
|
91
92
|
/** Opens a mesh session over an already-established connection, wired to this transport's own frame dispatch and advertised addresses. Every session this transport owns is built exactly this way, whether the connection was accepted by a listener or dialled at a peer, at the coordinator, or at a remote gateway, so the wiring lives here rather than being restated at each call site. */
|
|
92
93
|
private openSession;
|
|
93
|
-
/** Delegates the whole post-approval drain loop to roomRouter
|
|
94
|
+
/** Delegates the whole post-approval drain loop to roomRouter: this transport no longer decodes or routes a MeshMessage itself, only hands the session off. Also starts this session's own independent revocationAnnouncements drain, since a gossiped revocation is not a manage-request and has no verb for roomRouter to dispatch, and its coordinator-frame watch for the same reason, enrolling the session in the election only when machineLocal says it reaches this machine. */
|
|
94
95
|
private consumeIncoming;
|
|
95
96
|
/** Reads every revocation-entry this session's peer announces, for as long as the session lives, handing each one to MeshStore via onRevocationAnnounce -- one call per entry, matching revocationAnnouncements' own per-entry flattening of a revocation-announce frame's entries array. */
|
|
96
97
|
private drainRevocationAnnouncements;
|
|
97
98
|
private watchForDisconnect;
|
|
98
|
-
/** Auto-rejects a connect_request that has sat unanswered past pendingConnectionTimeoutMs -- the same respond-then-resolve shape rejectConnection uses (a real error response, not a silent hang), since unlike watchForDisconnect's own cleanup path the requester's session is still very much alive and waiting to hear back. A no-op if the request was already settled by acceptConnection/rejectConnection/disconnect before this timer fired -- entries are deleted exactly once, by whichever path settles first. */
|
|
99
|
-
private expirePendingConnection;
|
|
100
99
|
startDataServer(): Promise<void>;
|
|
101
100
|
connectToCoordinator(host: string, port: number, peerId: string, dataPort: number): Promise<void>;
|
|
102
101
|
becomeCoordinator(host: string, port: number): Promise<void>;
|
|
@@ -106,6 +105,9 @@ export declare class WireMeshTransport implements MeshTransport {
|
|
|
106
105
|
private sendFrame;
|
|
107
106
|
broadcast(message: MeshMessage): Promise<void>;
|
|
108
107
|
broadcastRevocation(entries: readonly RevocationEntry[]): Promise<void>;
|
|
108
|
+
broadcastCoordinatorClaim(frame: Readonly<CoordinatorFrame>): Promise<void>;
|
|
109
|
+
sendCoordinatorClaim(handle: Readonly<ConnectionHandle>, frame: Readonly<CoordinatorFrame>): Promise<void>;
|
|
110
|
+
electionPeerIds(): ReadonlySet<string>;
|
|
109
111
|
sendRoomRequest(memberId: string, command: ManageCommand, scope: Readonly<CapabilityScope>, token?: CapabilityToken): Promise<ManageOutcome>;
|
|
110
112
|
/** Asks deviceId for its own, currently-running wire-mesh-core version, live, right now (agent-comms#198's own query_version action) -- rides sendRoomRequest's own routing (a direct peerSessions session when one exists, else a trusted hub relay, else "unauthorized") against wire-mesh-core's deliberately-ungated core/version domain (spec/version.cddl): "version:get" on the outer manage-command only exists to satisfy manage-command.verb's own capability-verb grammar, and the scope below (kind "node") is arbitrary -- the receiving side never actually inspects either for this verb. */
|
|
111
113
|
queryVersion(deviceId: string): Promise<ManageOutcome>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire-mesh-transport.d.ts","sourceRoot":"","sources":["../../src/core/wire-mesh-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"wire-mesh-transport.d.ts","sourceRoot":"","sources":["../../src/core/wire-mesh-transport.ts"],"names":[],"mappings":"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"}
|