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,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RelayServer: the relay role a bridge serves to its machine and local network (agent-comms#342), wire-mesh-core's transport-agnostic relay-hub domain logic (the same createRelayHub the public hub runs) behind a WebSocket listener. It forwards between its own directly connected clients and, when given an uplink, carries them over it to the upstream hub and back (attachUplink), so a device on the upstream hub and a client of this relay reach each other with each end's own device-id intact. It never routes beyond that: relay payloads are end-to-end encrypted between the two devices using it, so what the relay learns is who talks to whom, never what they say.
|
|
3
|
+
*
|
|
4
|
+
* Admission is deny-by-default, like every other cross-machine decision here: a connection is registered with the hub only once it gossips an advert for a device isAdmitted accepts, and every gossiped advert naming a device it does not accept is dropped before the hub sees it. A connection that never gossips an admitted device can neither be named by a relay-connect nor relay anything, and learns nothing, since the hub's catch-up is sent only in answer to a registered connection's gossip.
|
|
5
|
+
*/
|
|
6
|
+
import { createServer } from "node:http";
|
|
7
|
+
import * as os from "node:os";
|
|
8
|
+
import { WebSocketServer } from "ws";
|
|
9
|
+
import { createRelayHub } from "wire-mesh-core/domain/relay-hub";
|
|
10
|
+
import { deviceIdToHex } from "wire-mesh-core/domain/device-id";
|
|
11
|
+
import { deriveDeviceId, verifyWithPublicKey, } from "wire-mesh-core/adapters/node-identity";
|
|
12
|
+
import { wrapWsSocket } from "./ws-dial.js";
|
|
13
|
+
import { createUplink } from "./relay-uplink.js";
|
|
14
|
+
/** The wildcard IPv4 address: listening on it serves every interface, loopback and the local network alike. */
|
|
15
|
+
export const ALL_INTERFACES_HOST = "0.0.0.0";
|
|
16
|
+
/** The loopback address every relay also offers, so a peer on the same machine reaches it without leaving the host. */
|
|
17
|
+
const LOOPBACK_HOST = "127.0.0.1";
|
|
18
|
+
export class RelayServer {
|
|
19
|
+
options;
|
|
20
|
+
hub = createRelayHub({
|
|
21
|
+
identity: { verify: verifyWithPublicKey, deriveDeviceId },
|
|
22
|
+
});
|
|
23
|
+
/** The devices (hex) each connected client has registered, so an advert for one of them arriving from upstream never displaces the client's own registration. */
|
|
24
|
+
clientDevices = new Map();
|
|
25
|
+
http = createServer();
|
|
26
|
+
wss = new WebSocketServer({ server: this.http });
|
|
27
|
+
port = 0;
|
|
28
|
+
/** Settles once the previous uplink has been forgotten by the hub, which refuses a second while one is attached. */
|
|
29
|
+
uplinkDone = Promise.resolve();
|
|
30
|
+
constructor(options) {
|
|
31
|
+
this.options = options;
|
|
32
|
+
this.wss.on("connection", (socket) => {
|
|
33
|
+
socket.binaryType = "arraybuffer";
|
|
34
|
+
void this.serve(wrapWsSocket(socket));
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/** Binds an OS-assigned port and resolves once listening. */
|
|
38
|
+
async start() {
|
|
39
|
+
await new Promise((resolve, reject) => {
|
|
40
|
+
this.http.once("error", reject);
|
|
41
|
+
this.http.listen(0, this.options.host, () => {
|
|
42
|
+
this.http.off("error", reject);
|
|
43
|
+
resolve();
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
const address = this.http.address();
|
|
47
|
+
if (address === null || typeof address === "string") {
|
|
48
|
+
throw new Error("RelayServer: expected a TCP listen address");
|
|
49
|
+
}
|
|
50
|
+
this.port = address.port;
|
|
51
|
+
// Never what keeps a process alive: the bridge that serves the relay decides when it exits.
|
|
52
|
+
this.http.unref();
|
|
53
|
+
}
|
|
54
|
+
/** Takes the connection to the upstream hub as this relay's uplink (wire-mesh-core's relay-hub fronting, wire-mesh#311): the clients registered here become reachable through the upstream hub and can reach the devices registered there, each end keeping its own device-id. The upstream connection belongs to the caller's own session, so the frames it reads are fed in through the returned feed, and ending the feed detaches the uplink. */
|
|
55
|
+
attachUplink(upstream) {
|
|
56
|
+
const uplink = createUplink(upstream);
|
|
57
|
+
this.uplinkDone = this.uplinkDone
|
|
58
|
+
.then(async () => this.hub.handleUplink(uplink.connection))
|
|
59
|
+
.catch((error) => {
|
|
60
|
+
this.options.onError(error instanceof Error ? error : new Error(String(error)));
|
|
61
|
+
});
|
|
62
|
+
return {
|
|
63
|
+
feed: (frame) => {
|
|
64
|
+
const local = this.withoutClientDevices(frame);
|
|
65
|
+
if (local !== undefined)
|
|
66
|
+
uplink.feed.feed(local);
|
|
67
|
+
},
|
|
68
|
+
end: () => {
|
|
69
|
+
uplink.feed.end();
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/** The URLs this relay is reachable at, for its relay offer: loopback always, and each external IPv4 interface too when it listens on every interface. */
|
|
74
|
+
addresses() {
|
|
75
|
+
const hosts = this.options.host === ALL_INTERFACES_HOST
|
|
76
|
+
? [LOOPBACK_HOST, ...externalIpv4Addresses()]
|
|
77
|
+
: [this.options.host];
|
|
78
|
+
return hosts.map((host) => `ws://${host}:${String(this.port)}/`);
|
|
79
|
+
}
|
|
80
|
+
/** How many clients are connected, admitted or not. */
|
|
81
|
+
connectionCount() {
|
|
82
|
+
return this.wss.clients.size;
|
|
83
|
+
}
|
|
84
|
+
/** How many clients the hub can route to: those whose advert it has accepted. A client that has only just connected is not one until it gossips an advert the hub takes over any fresher one it already holds for that device, which a device moving here from another hub within the same second does not do until its next gossip. */
|
|
85
|
+
routableClientCount() {
|
|
86
|
+
let routable = 0;
|
|
87
|
+
for (const connection of this.clientDevices.keys()) {
|
|
88
|
+
if (this.hub.exportConnection(connection) !== undefined)
|
|
89
|
+
routable += 1;
|
|
90
|
+
}
|
|
91
|
+
return routable;
|
|
92
|
+
}
|
|
93
|
+
/** Closes every client and the listener. */
|
|
94
|
+
async stop() {
|
|
95
|
+
this.hub.stop();
|
|
96
|
+
for (const client of this.wss.clients)
|
|
97
|
+
client.terminate();
|
|
98
|
+
await new Promise((resolve) => {
|
|
99
|
+
this.wss.close(() => {
|
|
100
|
+
resolve();
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
await new Promise((resolve) => {
|
|
104
|
+
this.http.close(() => {
|
|
105
|
+
resolve();
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/** Drives one connection: filters its gossip to admitted devices, registers it with the hub on its first admitted advert, and hands the hub every frame from then on. */
|
|
110
|
+
async serve(connection) {
|
|
111
|
+
let registered = false;
|
|
112
|
+
const devices = new Set();
|
|
113
|
+
this.clientDevices.set(connection, devices);
|
|
114
|
+
try {
|
|
115
|
+
for await (const frame of connection.receive()) {
|
|
116
|
+
const admitted = this.admit(frame);
|
|
117
|
+
if (admitted?.type === "gossip") {
|
|
118
|
+
for (const advert of admitted.peers) {
|
|
119
|
+
devices.add(deviceIdToHex(advert.device));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (admitted === undefined)
|
|
123
|
+
continue;
|
|
124
|
+
if (!registered) {
|
|
125
|
+
if (admitted.type !== "gossip")
|
|
126
|
+
continue;
|
|
127
|
+
this.hub.registerConnection(connection);
|
|
128
|
+
registered = true;
|
|
129
|
+
}
|
|
130
|
+
await this.hub.onFrame(connection, admitted);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
// A connection that fails mid-stream is simply gone; its registration is cleaned up below.
|
|
135
|
+
}
|
|
136
|
+
finally {
|
|
137
|
+
this.clientDevices.delete(connection);
|
|
138
|
+
if (registered)
|
|
139
|
+
this.hub.onDisconnect(connection);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/** The frame from upstream without the adverts of devices a client of this relay has registered, or undefined when nothing is left of it. An advert that came back round through the upstream hub would otherwise displace the client's own registration whenever it was the fresher, and a relay-connect naming the client would then find no route to it. */
|
|
143
|
+
withoutClientDevices(frame) {
|
|
144
|
+
if (frame.type !== "gossip")
|
|
145
|
+
return frame;
|
|
146
|
+
const peers = frame.peers.filter((advert) => {
|
|
147
|
+
const deviceHex = deviceIdToHex(advert.device);
|
|
148
|
+
for (const devices of this.clientDevices.values()) {
|
|
149
|
+
if (devices.has(deviceHex))
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
return true;
|
|
153
|
+
});
|
|
154
|
+
if (peers.length === 0)
|
|
155
|
+
return undefined;
|
|
156
|
+
return { ...frame, peers };
|
|
157
|
+
}
|
|
158
|
+
/** The frame to pass on, or undefined to drop it: gossip keeps only admitted adverts, and nothing else passes before the connection has gossiped one. */
|
|
159
|
+
admit(frame) {
|
|
160
|
+
if (frame.type !== "gossip")
|
|
161
|
+
return frame;
|
|
162
|
+
const peers = frame.peers.filter((advert) => this.options.isAdmitted(deviceIdToHex(advert.device)));
|
|
163
|
+
if (peers.length === 0)
|
|
164
|
+
return undefined;
|
|
165
|
+
return { ...frame, peers };
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function externalIpv4Addresses() {
|
|
169
|
+
const result = [];
|
|
170
|
+
for (const addresses of Object.values(os.networkInterfaces())) {
|
|
171
|
+
if (addresses === undefined)
|
|
172
|
+
continue;
|
|
173
|
+
for (const address of addresses) {
|
|
174
|
+
if (address.family === "IPv4" && !address.internal) {
|
|
175
|
+
result.push(address.address);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return result;
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=relay-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay-server.js","sourceRoot":"","sources":["../../src/core/relay-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The connection a relay hub takes to its upstream hub as its uplink (agent-comms#342), built over a hub session that already owns that connection.
|
|
3
|
+
*
|
|
4
|
+
* A HubSession drives the connection to the public hub through wire-mesh-core's session, whose own receive loop is the one consumer of the connection's frames. The relay hub's handleUplink needs a frame stream of its own, so the session's per-frame observer feeds each frame it reads into this uplink as well, and sends from the hub go out over the same underlying connection. Closing the uplink ends the stream the hub reads and leaves the underlying connection to the session that owns it.
|
|
5
|
+
*/
|
|
6
|
+
import type { Frame } from "wire-mesh-core/generated/protocol";
|
|
7
|
+
import type { Connection } from "wire-mesh-core/ports/transport";
|
|
8
|
+
/** What the owner of the upstream connection drives: each frame it reads from upstream, and the end of the connection. */
|
|
9
|
+
export interface UplinkFeed {
|
|
10
|
+
/** Hands the hub one frame read from upstream. Ignored once the uplink has ended. */
|
|
11
|
+
feed: (frame: Readonly<Frame>) => void;
|
|
12
|
+
/** Ends the stream the hub reads, which makes it forget the uplink. Idempotent. */
|
|
13
|
+
end: () => void;
|
|
14
|
+
}
|
|
15
|
+
export interface Uplink {
|
|
16
|
+
/** The connection handed to the relay hub's handleUplink. */
|
|
17
|
+
connection: Connection;
|
|
18
|
+
feed: UplinkFeed;
|
|
19
|
+
}
|
|
20
|
+
/** Builds the uplink over an upstream connection some other session owns: sends go to it directly, receives come from what the owner feeds in. */
|
|
21
|
+
export declare function createUplink(upstream: Readonly<Connection>): Uplink;
|
|
22
|
+
//# sourceMappingURL=relay-uplink.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay-uplink.d.ts","sourceRoot":"","sources":["../../src/core/relay-uplink.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAEjE,0HAA0H;AAC1H,MAAM,WAAW,UAAU;IACzB,qFAAqF;IACrF,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;IACvC,mFAAmF;IACnF,GAAG,EAAE,MAAM,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IACrB,6DAA6D;IAC7D,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,kJAAkJ;AAClJ,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM,CAqDnE"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The connection a relay hub takes to its upstream hub as its uplink (agent-comms#342), built over a hub session that already owns that connection.
|
|
3
|
+
*
|
|
4
|
+
* A HubSession drives the connection to the public hub through wire-mesh-core's session, whose own receive loop is the one consumer of the connection's frames. The relay hub's handleUplink needs a frame stream of its own, so the session's per-frame observer feeds each frame it reads into this uplink as well, and sends from the hub go out over the same underlying connection. Closing the uplink ends the stream the hub reads and leaves the underlying connection to the session that owns it.
|
|
5
|
+
*/
|
|
6
|
+
/** Builds the uplink over an upstream connection some other session owns: sends go to it directly, receives come from what the owner feeds in. */
|
|
7
|
+
export function createUplink(upstream) {
|
|
8
|
+
const backlog = [];
|
|
9
|
+
const waiters = [];
|
|
10
|
+
let ended = false;
|
|
11
|
+
const feed = {
|
|
12
|
+
feed(frame) {
|
|
13
|
+
if (ended)
|
|
14
|
+
return;
|
|
15
|
+
const waiter = waiters.shift();
|
|
16
|
+
if (waiter === undefined) {
|
|
17
|
+
backlog.push(frame);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
waiter({ value: frame, done: false });
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
end() {
|
|
24
|
+
if (ended)
|
|
25
|
+
return;
|
|
26
|
+
ended = true;
|
|
27
|
+
for (const waiter of waiters.splice(0)) {
|
|
28
|
+
waiter({ value: undefined, done: true });
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
const stream = {
|
|
33
|
+
[Symbol.asyncIterator]() {
|
|
34
|
+
return {
|
|
35
|
+
next: async () => new Promise((resolve) => {
|
|
36
|
+
const next = backlog.shift();
|
|
37
|
+
if (next !== undefined) {
|
|
38
|
+
resolve({ value: next, done: false });
|
|
39
|
+
}
|
|
40
|
+
else if (ended) {
|
|
41
|
+
resolve({ value: undefined, done: true });
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
waiters.push(resolve);
|
|
45
|
+
}
|
|
46
|
+
}),
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
return {
|
|
51
|
+
connection: {
|
|
52
|
+
send: async (frame) => upstream.send(frame),
|
|
53
|
+
receive: () => stream,
|
|
54
|
+
close: async () => {
|
|
55
|
+
feed.end();
|
|
56
|
+
return Promise.resolve();
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
feed,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=relay-uplink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay-uplink.js","sourceRoot":"","sources":["../../src/core/relay-uplink.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH,kJAAkJ;AAClJ,MAAM,UAAU,YAAY,CAAC,QAA8B;IACzD,MAAM,OAAO,GAAY,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAgD,EAAE,CAAC;IAChE,IAAI,KAAK,GAAG,KAAK,CAAC;IAElB,MAAM,IAAI,GAAe;QACvB,IAAI,CAAC,KAAK;YACR,IAAI,KAAK;gBAAE,OAAO;YAClB,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QACD,GAAG;YACD,IAAI,KAAK;gBAAE,OAAO;YAClB,KAAK,GAAG,IAAI,CAAC;YACb,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvC,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;KACF,CAAC;IAEF,MAAM,MAAM,GAAyB;QACnC,CAAC,MAAM,CAAC,aAAa,CAAC;YACpB,OAAO;gBACL,IAAI,EAAE,KAAK,IAAoC,EAAE,CAC/C,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;oBACtB,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;oBAC7B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;wBACvB,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;oBACxC,CAAC;yBAAM,IAAI,KAAK,EAAE,CAAC;wBACjB,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC5C,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACxB,CAAC;gBACH,CAAC,CAAC;aACL,CAAC;QACJ,CAAC;KACF,CAAC;IAEF,OAAO;QACL,UAAU,EAAE;YACV,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3C,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM;YACrB,KAAK,EAAE,KAAK,IAAI,EAAE;gBAChB,IAAI,CAAC,GAAG,EAAE,CAAC;gBACX,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;YAC3B,CAAC;SACF;QACD,IAAI;KACL,CAAC;AACJ,CAAC"}
|
package/dist/core/transport.d.ts
CHANGED
|
@@ -206,6 +206,10 @@ export interface MeshTransport {
|
|
|
206
206
|
* Makes the hub session re-evaluate shouldConnect now instead of at the next poll. A no-op before joinHub. Same optionality caveat as joinHub.
|
|
207
207
|
*/
|
|
208
208
|
reconsiderHub?: () => void;
|
|
209
|
+
/**
|
|
210
|
+
* Tells the transport whether this store holds the elected coordinator role, which makes it the one store on the machine that serves the relay role while it holds an uplink to the configured hub, and keeps its own hub session on that uplink (agent-comms#342). Same optionality caveat as joinHub.
|
|
211
|
+
*/
|
|
212
|
+
setRelayEligible?: (eligible: boolean) => void;
|
|
209
213
|
/**
|
|
210
214
|
* Asks deviceId for its own, currently-running wire-mesh-core version, live, right now rather than whatever it last gossiped (agent-comms#198's own cache-bust query_version action). Optional, same caveat as listKnownDevices/joinHub: WireMeshTransport is the only implementation that offers it today, riding wire-mesh-core's own version.get manage-command (wire-mesh#179).
|
|
211
215
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/core/transport.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/core/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,8 @@ export interface WireMeshTransportOptions {
|
|
|
28
28
|
}>) => Promise<boolean>;
|
|
29
29
|
}>;
|
|
30
30
|
gatewayTrust?: Readonly<GatewayTrustReader>;
|
|
31
|
+
/** The interface the relay this transport serves listens on (agent-comms#342). Defaults to every interface (ALL_INTERFACES_HOST), so the relay reaches the local network; a test serves loopback only. */
|
|
32
|
+
relayListenHost?: string | undefined;
|
|
31
33
|
/** Checks a gossiped membership proof against a principal or machine this side trusts (MembershipProofs.verify). Without it, a directory entry from a device not trusted by id is refused even when it carries a proof. */
|
|
32
34
|
verifyMembership?: (claim: Readonly<{
|
|
33
35
|
proof: string;
|
|
@@ -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,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,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,0lBAA0lB;AAC1lB,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,iXAAiX;IACjX,kBAAkB,CAAC,EAAE,QAAQ,CAAC;QAC5B,SAAS,EAAE,MAAM,oBAAoB,GAAG,SAAS,CAAC;QAClD,eAAe,EAAE,CACf,KAAK,EAAE,QAAQ,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC,KAClD,OAAO,CAAC,OAAO,CAAC,CAAC;KACvB,CAAC,CAAC;IACH,YAAY,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC5C,2NAA2N;IAC3N,gBAAgB,CAAC,EAAE,CACjB,KAAK,EAAE,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,KACrE,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,8JAA8J;AAC9J,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
|
+
{"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,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,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,0lBAA0lB;AAC1lB,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,iXAAiX;IACjX,kBAAkB,CAAC,EAAE,QAAQ,CAAC;QAC5B,SAAS,EAAE,MAAM,oBAAoB,GAAG,SAAS,CAAC;QAClD,eAAe,EAAE,CACf,KAAK,EAAE,QAAQ,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC,KAClD,OAAO,CAAC,OAAO,CAAC,CAAC;KACvB,CAAC,CAAC;IACH,YAAY,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC5C,0MAA0M;IAC1M,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,2NAA2N;IAC3N,gBAAgB,CAAC,EAAE,CACjB,KAAK,EAAE,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,KACrE,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,8JAA8J;AAC9J,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 +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;AAuDH,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"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* connect_request's accept/reject flow maps onto sendManageRequest's own request/response round trip directly, rather than a separate pair of connect_accepted/connect_rejected messages: manage-request-frame already tolerates arbitrary latency between a request and its response, so "waiting for a human to approve" is simply a manage-response that hasn't been sent yet, not a protocol gap needing its own mechanism. connect_request therefore holds its own IncomingManageRequest open (rather than responding immediately) until acceptConnection/rejectConnection is actually called.
|
|
9
9
|
*/
|
|
10
10
|
import { HubSession } from "./hub-session.js";
|
|
11
|
+
import { RelayRole } from "./relay-role.js";
|
|
11
12
|
import { type ManageOutcome } from "wire-mesh-core/domain/mesh-session";
|
|
12
13
|
import type { CapabilityScope, CapabilityToken, CoordinatorFrame, DataHaveFrame, DataRequestFrame, ManageCommand, PeerAdvert, RevocationEntry } from "wire-mesh-core/generated/protocol";
|
|
13
14
|
import type { MeshMessage, PeerInfo } from "./wire-protocol.js";
|
|
@@ -36,6 +37,7 @@ export declare class WireMeshTransport implements MeshTransport {
|
|
|
36
37
|
private coordinatorSession;
|
|
37
38
|
private coordinatorDeviceHex;
|
|
38
39
|
readonly hub: HubSession;
|
|
40
|
+
readonly relay: RelayRole;
|
|
39
41
|
private readonly peerSessions;
|
|
40
42
|
private readonly allSessions;
|
|
41
43
|
private readonly electionSessions;
|
|
@@ -61,8 +63,6 @@ export declare class WireMeshTransport implements MeshTransport {
|
|
|
61
63
|
/** Reads this side's own currently-hosted public/private rooms for the next gossip re-advertisement tick, the same pull-not-push shape getCurrentPresence already established -- createRoom/destroyRoom patch MeshStore's own rooms map and let the next tick pick it up, rather than pushing an update here on every mutation. undefined when no hosted-rooms source was wired in. */
|
|
62
64
|
private readonly getHostedRooms;
|
|
63
65
|
private gossipInterval;
|
|
64
|
-
/** Holds this transport's session on the relay hub, once joinHub has named one. */
|
|
65
|
-
private hubLink;
|
|
66
66
|
/** Reads this side's own gossip-safe agent-identity advert for the next gossip re-advertisement tick, the same pull-not-push shape getCurrentPresence/getHostedRooms already established. undefined when no agent-identity source was wired in, or when MeshStore's own getter decides this agent shouldn't advertise itself this way right now (e.g. not "visible", or no self-agent record yet). */
|
|
67
67
|
private readonly getSelfAgentAdvert;
|
|
68
68
|
/** Reads this side's own currently-running cc-peer package version for the next gossip re-advertisement tick (agent-comms#198). Unlike getCurrentPresence/getHostedRooms/getSelfAgentAdvert (constructor-injected, since MeshStore already has a real value for each at construction time), this is a plain mutable field set post-construction -- bridge-mesh.ts assigns it right after building this transport, mirroring MeshStore's own onDelivery/onError/onCoordinatorRoleChanged convention, so this transport doesn't need its own constructor parameter for a fact only two of many bridges ever have. undefined for every bridge that never loads cc-peer at all. */
|
|
@@ -119,6 +119,7 @@ export declare class WireMeshTransport implements MeshTransport {
|
|
|
119
119
|
private get advertisedAddresses();
|
|
120
120
|
joinHub(url: string, shouldConnect: () => boolean): void;
|
|
121
121
|
reconsiderHub(): void;
|
|
122
|
+
setRelayEligible(eligible: boolean): void;
|
|
122
123
|
shutdown(): Promise<void>;
|
|
123
124
|
unref(): void;
|
|
124
125
|
}
|
|
@@ -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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"}
|
|
@@ -17,9 +17,10 @@ import { advertisedListenerAddresses, listenerPort, listTrackedListeners, regist
|
|
|
17
17
|
import { findPresenceAdvert, KnownDevices, listKnownDevicesEntries, mergeAndAnnounceReachable, readvertiseGossip, startGossipInterval, } from "./gossip-directory.js";
|
|
18
18
|
import { directoryAdmission, staysAdmitted } from "./directory-admission.js";
|
|
19
19
|
import { routeRoomRequestViaHub } from "./hub-forwarding.js";
|
|
20
|
-
import { HubLink } from "./hub-link.js";
|
|
21
20
|
import { ElectionSessions } from "./election-sessions.js";
|
|
22
21
|
import { isLoopbackAddress } from "./loopback-address.js";
|
|
22
|
+
import { RelayRole } from "./relay-role.js";
|
|
23
|
+
import { ALL_INTERFACES_HOST } from "./relay-server.js";
|
|
23
24
|
import { DEFAULT_PENDING_CONNECTION_TIMEOUT_MS, expirePendingConnection, } from "./pending-connection.js";
|
|
24
25
|
import { acceptMeshSession, } from "wire-mesh-core/domain/mesh-session";
|
|
25
26
|
import { deviceIdToHex } from "wire-mesh-core/domain/device-id";
|
|
@@ -70,6 +71,8 @@ export class WireMeshTransport {
|
|
|
70
71
|
coordinatorDeviceHex;
|
|
71
72
|
// -- The hub relay mode (agent-comms#151), owning its own file under the max-lines cap: see hub-session.ts for the full connection model.
|
|
72
73
|
hub;
|
|
74
|
+
// -- Which relay the hub session is held over, and the relay this store serves while it holds the elected coordinator role and an uplink (agent-comms#342): see relay-role.ts.
|
|
75
|
+
relay;
|
|
73
76
|
// -- Every live session, keyed by the peer's authenticated device-id hex (== ConnectionHandle.id) -- covers coordinator-client, coordinator-accepted, and peer data sessions alike, since send()/broadcast() must reach whichever kind of session a peer happens to be reachable through. A single-slot-per-key map by construction: mesh formation genuinely establishes TWO independent sessions to the same peer (see the dataDials comment below), and the second one registered here simply overwrites the first as far as addressing goes -- fine for send()/broadcast() (either socket reaches the same peer), but NOT fine for shutdown, which must close every live session regardless of whether it's still reachable through this map. allSessions below exists specifically so shutdown never leaks the one this map's overwrite silently stopped tracking.
|
|
74
77
|
peerSessions = new Map();
|
|
75
78
|
// -- Every live session this transport has ever created, accepted or dialled, for shutdown's own use only -- never used for addressing (peerSessions is), so it never loses track of one session to another sharing the same peer id.
|
|
@@ -108,8 +111,6 @@ export class WireMeshTransport {
|
|
|
108
111
|
/** Reads this side's own currently-hosted public/private rooms for the next gossip re-advertisement tick, the same pull-not-push shape getCurrentPresence already established -- createRoom/destroyRoom patch MeshStore's own rooms map and let the next tick pick it up, rather than pushing an update here on every mutation. undefined when no hosted-rooms source was wired in. */
|
|
109
112
|
getHostedRooms;
|
|
110
113
|
gossipInterval;
|
|
111
|
-
/** Holds this transport's session on the relay hub, once joinHub has named one. */
|
|
112
|
-
hubLink;
|
|
113
114
|
/** Reads this side's own gossip-safe agent-identity advert for the next gossip re-advertisement tick, the same pull-not-push shape getCurrentPresence/getHostedRooms already established. undefined when no agent-identity source was wired in, or when MeshStore's own getter decides this agent shouldn't advertise itself this way right now (e.g. not "visible", or no self-agent record yet). */
|
|
114
115
|
getSelfAgentAdvert;
|
|
115
116
|
/** Reads this side's own currently-running cc-peer package version for the next gossip re-advertisement tick (agent-comms#198). Unlike getCurrentPresence/getHostedRooms/getSelfAgentAdvert (constructor-injected, since MeshStore already has a real value for each at construction time), this is a plain mutable field set post-construction -- bridge-mesh.ts assigns it right after building this transport, mirroring MeshStore's own onDelivery/onError/onCoordinatorRoleChanged convention, so this transport doesn't need its own constructor parameter for a fact only two of many bridges ever have. undefined for every bridge that never loads cc-peer at all. */
|
|
@@ -120,7 +121,7 @@ export class WireMeshTransport {
|
|
|
120
121
|
gatewayTrust;
|
|
121
122
|
/** See WireMeshTransportOptions's own doc comment -- all eight fields are optional and bundled into one `options` parameter, so a caller needing only gatewayTrust no longer has to pass `undefined` for every one before it. */
|
|
122
123
|
constructor(events, identity, options) {
|
|
123
|
-
const { roomVerbHandlers, pendingConnectionTimeoutMs = DEFAULT_PENDING_CONNECTION_TIMEOUT_MS, roomJoinApprovalTimeoutMs = ROOM_JOIN_APPROVAL_TIMEOUT_MS, getCurrentPresence, presenceReadvertiseIntervalMs = PRESENCE_READVERTISE_INTERVAL_MS, getHostedRooms, dataStorage, getSelfAgentAdvert, accountReplication, gatewayTrust = new GatewayTrust(), verifyMembership, } = options ?? {};
|
|
124
|
+
const { roomVerbHandlers, pendingConnectionTimeoutMs = DEFAULT_PENDING_CONNECTION_TIMEOUT_MS, roomJoinApprovalTimeoutMs = ROOM_JOIN_APPROVAL_TIMEOUT_MS, getCurrentPresence, presenceReadvertiseIntervalMs = PRESENCE_READVERTISE_INTERVAL_MS, getHostedRooms, dataStorage, getSelfAgentAdvert, accountReplication, gatewayTrust = new GatewayTrust(), verifyMembership, relayListenHost = ALL_INTERFACES_HOST, } = options ?? {};
|
|
124
125
|
this.events = events;
|
|
125
126
|
this.wireTransport = createTlsTransport({
|
|
126
127
|
certificatePem: identity.certificate,
|
|
@@ -129,6 +130,17 @@ export class WireMeshTransport {
|
|
|
129
130
|
this.identityReady = toIdentityPort(identity);
|
|
130
131
|
this.gatewayTrust = gatewayTrust;
|
|
131
132
|
this.electionSessions = new ElectionSessions(events);
|
|
133
|
+
this.relay = new RelayRole({
|
|
134
|
+
listenHost: relayListenHost,
|
|
135
|
+
ownDeviceHex: deviceIdToHex(Uint8Array.from(identity.deviceId)),
|
|
136
|
+
knownDevices: this.knownDevices,
|
|
137
|
+
machineLocalPeers: this.electionSessions,
|
|
138
|
+
gatewayTrust,
|
|
139
|
+
readvertise: () => {
|
|
140
|
+
readvertiseGossip(this.gossipOptions());
|
|
141
|
+
},
|
|
142
|
+
events,
|
|
143
|
+
});
|
|
132
144
|
// Built before this.hub below (roomRouter has no dependency on it) so the hub can be wired with a direct this.roomRouter.handleRelayedRequest reference rather than a lazy closure. path.trace (agent-comms#199) is always registered here, ahead of any caller-supplied roomVerbHandlers, since every real construction site wants it answered identically regardless of which room verbs it registers.
|
|
133
145
|
this.roomRouter = createRoomRouter({
|
|
134
146
|
events,
|
|
@@ -182,6 +194,7 @@ export class WireMeshTransport {
|
|
|
182
194
|
getHostedRooms: this.getHostedRooms,
|
|
183
195
|
getSelfAgentAdvert: this.getSelfAgentAdvert,
|
|
184
196
|
getCcPeerVersion: () => this.getCcPeerVersion?.(),
|
|
197
|
+
getRelayOffer: () => this.relay.offer(),
|
|
185
198
|
};
|
|
186
199
|
}
|
|
187
200
|
/** Sends one data-have or data-request frame directly to an already-connected peer: the mechanical send primitive a future catch-up policy calls once it decides to (see DataFrameRouter's dataStorage doc comment). Throws if this side has never received any frame from that peer yet (there is no connection to send on), matching sendManageRequest's own "no reachable session" failure mode for an unknown peer. */
|
|
@@ -626,23 +639,13 @@ export class WireMeshTransport {
|
|
|
626
639
|
// MeshTransport -- Hub (agent-comms#154, per-store since agent-comms#293)
|
|
627
640
|
// -----------------------------------------------------------------------
|
|
628
641
|
joinHub(url, shouldConnect) {
|
|
629
|
-
|
|
630
|
-
return;
|
|
631
|
-
this.hubLink = new HubLink({
|
|
632
|
-
hub: this.hub,
|
|
633
|
-
url,
|
|
634
|
-
shouldConnect,
|
|
635
|
-
onConnected: () => {
|
|
636
|
-
readvertiseGossip(this.gossipOptions());
|
|
637
|
-
},
|
|
638
|
-
onError: (error) => {
|
|
639
|
-
this.events.onError?.(error);
|
|
640
|
-
},
|
|
641
|
-
});
|
|
642
|
-
this.hubLink.start();
|
|
642
|
+
this.relay.joinHub(this.hub, url, shouldConnect);
|
|
643
643
|
}
|
|
644
644
|
reconsiderHub() {
|
|
645
|
-
this.
|
|
645
|
+
this.relay.reconsiderHub();
|
|
646
|
+
}
|
|
647
|
+
setRelayEligible(eligible) {
|
|
648
|
+
this.relay.setEligible(eligible);
|
|
646
649
|
}
|
|
647
650
|
// -----------------------------------------------------------------------
|
|
648
651
|
// MeshTransport -- Shutdown / unref
|
|
@@ -656,7 +659,7 @@ export class WireMeshTransport {
|
|
|
656
659
|
const coordinatorListenersClosing = [
|
|
657
660
|
...this.coordinatorListeners.values(),
|
|
658
661
|
].map(async (tracked) => tracked.listener.close());
|
|
659
|
-
await this.
|
|
662
|
+
await this.relay.stop();
|
|
660
663
|
if (this.gossipInterval !== undefined) {
|
|
661
664
|
clearInterval(this.gossipInterval);
|
|
662
665
|
this.gossipInterval = undefined;
|