remote-pi 0.1.3 → 0.2.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.
- package/README.md +160 -40
- package/dist/bin/supervisord.d.ts +2 -0
- package/dist/bin/supervisord.js +44 -0
- package/dist/bin/supervisord.js.map +1 -0
- package/dist/config.d.ts +44 -13
- package/dist/config.js +61 -22
- package/dist/config.js.map +1 -1
- package/dist/daemon/client.d.ts +20 -0
- package/dist/daemon/client.js +128 -0
- package/dist/daemon/client.js.map +1 -0
- package/dist/daemon/control_protocol.d.ts +100 -0
- package/dist/daemon/control_protocol.js +63 -0
- package/dist/daemon/control_protocol.js.map +1 -0
- package/dist/daemon/id.d.ts +18 -0
- package/dist/daemon/id.js +30 -0
- package/dist/daemon/id.js.map +1 -0
- package/dist/daemon/install.d.ts +132 -0
- package/dist/daemon/install.js +312 -0
- package/dist/daemon/install.js.map +1 -0
- package/dist/daemon/registry.d.ts +47 -0
- package/dist/daemon/registry.js +123 -0
- package/dist/daemon/registry.js.map +1 -0
- package/dist/daemon/rpc_child.d.ts +76 -0
- package/dist/daemon/rpc_child.js +130 -0
- package/dist/daemon/rpc_child.js.map +1 -0
- package/dist/daemon/supervisor.d.ts +38 -0
- package/dist/daemon/supervisor.js +301 -0
- package/dist/daemon/supervisor.js.map +1 -0
- package/dist/index.d.ts +62 -8
- package/dist/index.js +1226 -301
- package/dist/index.js.map +1 -1
- package/dist/mesh/canonical.d.ts +30 -0
- package/dist/mesh/canonical.js +61 -0
- package/dist/mesh/canonical.js.map +1 -0
- package/dist/mesh/client.d.ts +31 -0
- package/dist/mesh/client.js +56 -0
- package/dist/mesh/client.js.map +1 -0
- package/dist/mesh/encoding.d.ts +36 -0
- package/dist/mesh/encoding.js +53 -0
- package/dist/mesh/encoding.js.map +1 -0
- package/dist/mesh/self_revoke.d.ts +111 -0
- package/dist/mesh/self_revoke.js +182 -0
- package/dist/mesh/self_revoke.js.map +1 -0
- package/dist/mesh/siblings.d.ts +62 -0
- package/dist/mesh/siblings.js +95 -0
- package/dist/mesh/siblings.js.map +1 -0
- package/dist/mesh/types.d.ts +34 -0
- package/dist/mesh/types.js +11 -0
- package/dist/mesh/types.js.map +1 -0
- package/dist/mesh/verify.d.ts +17 -0
- package/dist/mesh/verify.js +77 -0
- package/dist/mesh/verify.js.map +1 -0
- package/dist/pairing/qr.d.ts +16 -5
- package/dist/pairing/qr.js +27 -8
- package/dist/pairing/qr.js.map +1 -1
- package/dist/pairing/storage.d.ts +41 -0
- package/dist/pairing/storage.js +158 -21
- package/dist/pairing/storage.js.map +1 -1
- package/dist/protocol/types.d.ts +23 -0
- package/dist/session/broker.d.ts +74 -0
- package/dist/session/broker.js +142 -4
- package/dist/session/broker.js.map +1 -1
- package/dist/session/broker_remote.d.ts +110 -0
- package/dist/session/broker_remote.js +397 -0
- package/dist/session/broker_remote.js.map +1 -0
- package/dist/session/cwd_lock.d.ts +28 -0
- package/dist/session/cwd_lock.js +89 -0
- package/dist/session/cwd_lock.js.map +1 -0
- package/dist/session/global_config.d.ts +9 -0
- package/dist/session/global_config.js +9 -0
- package/dist/session/global_config.js.map +1 -1
- package/dist/session/leader_election.d.ts +16 -0
- package/dist/session/leader_election.js +22 -0
- package/dist/session/leader_election.js.map +1 -1
- package/dist/session/local_config.d.ts +12 -5
- package/dist/session/local_config.js +24 -3
- package/dist/session/local_config.js.map +1 -1
- package/dist/session/peer.d.ts +28 -1
- package/dist/session/peer.js +69 -2
- package/dist/session/peer.js.map +1 -1
- package/dist/session/peer_inventory.d.ts +13 -0
- package/dist/session/peer_inventory.js +48 -0
- package/dist/session/peer_inventory.js.map +1 -0
- package/dist/session/setup_wizard.d.ts +32 -8
- package/dist/session/setup_wizard.js +45 -33
- package/dist/session/setup_wizard.js.map +1 -1
- package/dist/session/tools.d.ts +15 -7
- package/dist/session/tools.js +145 -31
- package/dist/session/tools.js.map +1 -1
- package/dist/transport/pi_forward_client.d.ts +29 -0
- package/dist/transport/pi_forward_client.js +62 -0
- package/dist/transport/pi_forward_client.js.map +1 -0
- package/dist/ui/footer.js +8 -6
- package/dist/ui/footer.js.map +1 -1
- package/docs/daemon.md +289 -0
- package/package.json +8 -2
- package/service-templates/launchd.plist.template +35 -0
- package/service-templates/systemd.service.template +19 -0
- package/skills/agent-network/SKILL.md +273 -294
package/dist/session/broker.js
CHANGED
|
@@ -4,15 +4,68 @@ import { parse, serialize, uuidv7, EnvelopeError } from "./envelope.js";
|
|
|
4
4
|
const BROKER_NAME = "broker";
|
|
5
5
|
export class Broker {
|
|
6
6
|
peers = new Map();
|
|
7
|
+
/** Peers whose wrapper has signaled they are mid-turn, or to whom the
|
|
8
|
+
* broker has just delivered an envelope (received = commitment). */
|
|
9
|
+
busyPeers = new Set();
|
|
7
10
|
auditPath;
|
|
8
11
|
onRouted;
|
|
9
12
|
server;
|
|
13
|
+
/** Plan/25 Wave C: optional handoff for cross-PC routing. Null = local only. */
|
|
14
|
+
remoteRouter = null;
|
|
10
15
|
constructor(opts) {
|
|
11
16
|
this.server = opts.server;
|
|
12
17
|
this.auditPath = opts.auditPath;
|
|
13
18
|
this.onRouted = opts.onRouted;
|
|
14
19
|
this.server.on("connection", (socket) => this._handleConnection(socket));
|
|
15
20
|
}
|
|
21
|
+
/** Attach (or detach with null) a cross-PC router. Idempotent. */
|
|
22
|
+
setRemoteRouter(router) {
|
|
23
|
+
this.remoteRouter = router;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Plan/25 Wave C entry point: deliver an envelope that arrived from a
|
|
27
|
+
* remote PC (via relay forward) into the local UDS mesh. Skips the
|
|
28
|
+
* `force from = conn.name` rule (that defense is anti-spoof for local
|
|
29
|
+
* peers; cross-PC has its own defense via the relay's verified `from_pc`).
|
|
30
|
+
*
|
|
31
|
+
* Returns the ACK status so the caller (broker_remote) can pack and
|
|
32
|
+
* forward an ACK envelope back across the relay:
|
|
33
|
+
* - `received` — target was idle (or `env.re != null`, see Wave 0
|
|
34
|
+
* bypass rule), envelope delivered, broker marked target busy if
|
|
35
|
+
* this is new work
|
|
36
|
+
* - `busy` — target mid-turn, envelope dropped
|
|
37
|
+
* - `denied` — no such local peer (or write failed) — caller maps to
|
|
38
|
+
* transport_error or denied ACK as it sees fit
|
|
39
|
+
*/
|
|
40
|
+
injectFromRemote(env) {
|
|
41
|
+
if (typeof env.to !== "string" || env.to === "broadcast" || env.to === BROKER_NAME) {
|
|
42
|
+
// Cross-PC is unicast-only at this protocol layer.
|
|
43
|
+
return "denied";
|
|
44
|
+
}
|
|
45
|
+
const targetName = env.to;
|
|
46
|
+
const peer = this.peers.get(targetName);
|
|
47
|
+
if (!peer)
|
|
48
|
+
return "denied";
|
|
49
|
+
// Replies (re != null) bypass the busy gate (plan/25 Wave 0 rule —
|
|
50
|
+
// replies resolve pending state, not new LLM turns).
|
|
51
|
+
const isReply = env.re !== null;
|
|
52
|
+
if (!isReply && this.busyPeers.has(targetName)) {
|
|
53
|
+
void this._appendAudit(env, [], "busy", "relay");
|
|
54
|
+
return "busy";
|
|
55
|
+
}
|
|
56
|
+
const line = serialize(env);
|
|
57
|
+
try {
|
|
58
|
+
peer.socket.write(line);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return "denied";
|
|
62
|
+
}
|
|
63
|
+
if (!isReply)
|
|
64
|
+
this.busyPeers.add(targetName);
|
|
65
|
+
void this._appendAudit(env, [targetName], "received", "relay");
|
|
66
|
+
this.onRouted?.(env, [targetName]);
|
|
67
|
+
return "received";
|
|
68
|
+
}
|
|
16
69
|
/** Peers currently registered. Snapshot, safe to read. */
|
|
17
70
|
peerNames() {
|
|
18
71
|
return [...this.peers.keys()];
|
|
@@ -21,6 +74,7 @@ export class Broker {
|
|
|
21
74
|
for (const p of this.peers.values())
|
|
22
75
|
p.socket.destroy();
|
|
23
76
|
this.peers.clear();
|
|
77
|
+
this.busyPeers.clear();
|
|
24
78
|
await new Promise((resolve) => this.server.close(() => resolve()));
|
|
25
79
|
}
|
|
26
80
|
// ── connection lifecycle ──────────────────────────────────────────────────
|
|
@@ -104,6 +158,7 @@ export class Broker {
|
|
|
104
158
|
if (!conn.name)
|
|
105
159
|
return;
|
|
106
160
|
this.peers.delete(conn.name);
|
|
161
|
+
this.busyPeers.delete(conn.name);
|
|
107
162
|
this._broadcastSystem({ type: "peer_left", name: conn.name }, conn.name);
|
|
108
163
|
}
|
|
109
164
|
// ── routing ───────────────────────────────────────────────────────────────
|
|
@@ -113,23 +168,61 @@ export class Broker {
|
|
|
113
168
|
this._handleBrokerMessage(env);
|
|
114
169
|
return;
|
|
115
170
|
}
|
|
171
|
+
// Plan/25 Wave C: give the cross-PC router a chance to claim this
|
|
172
|
+
// envelope. It returns true when the `to` field carries a known remote
|
|
173
|
+
// prefix and the envelope was packed onto the relay; on miss it falls
|
|
174
|
+
// through so locally-named peers (including ones with literal `:` in
|
|
175
|
+
// their names) still work.
|
|
176
|
+
if (this.remoteRouter && typeof env.to === "string") {
|
|
177
|
+
if (this.remoteRouter.tryRouteOutbound(env))
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
116
180
|
const targets = this._resolveTargets(env);
|
|
117
181
|
const delivered = [];
|
|
118
182
|
const line = serialize(env);
|
|
183
|
+
const isUnicast = typeof env.to === "string" && env.to !== "broadcast";
|
|
184
|
+
// Replies (envelope.re != null) are answers the recipient was already
|
|
185
|
+
// expecting — they resolve pending state at the application layer rather
|
|
186
|
+
// than starting a new LLM turn. Always deliverable; never trigger the
|
|
187
|
+
// busy-on-delivery flip. New work (re == null) keeps the original
|
|
188
|
+
// "received = commitment" semantics.
|
|
189
|
+
const isReply = env.re !== null;
|
|
190
|
+
// Synchronous block — Node's single-threaded loop gives atomicity between
|
|
191
|
+
// busy-check and busy-mark (no await between them). Multiple deliveries in
|
|
192
|
+
// the same `for` iteration may interleave with another peer's writes only
|
|
193
|
+
// at await points; the busy-set transition itself is atomic.
|
|
194
|
+
let ackStatus = "none";
|
|
119
195
|
for (const targetName of targets) {
|
|
120
196
|
const peer = this.peers.get(targetName);
|
|
121
197
|
if (!peer)
|
|
198
|
+
continue; // unknown peer: silent drop (sender times out)
|
|
199
|
+
if (isUnicast && !isReply && this.busyPeers.has(targetName)) {
|
|
200
|
+
// New work for a busy peer → drop + ACK busy. Audit logged below
|
|
201
|
+
// captures the rejection via `ackStatus = "busy"` + delivered=[].
|
|
202
|
+
ackStatus = "busy";
|
|
203
|
+
this._sendAckToSender(env, "busy", targetName);
|
|
122
204
|
continue;
|
|
205
|
+
}
|
|
123
206
|
try {
|
|
124
207
|
peer.socket.write(line);
|
|
125
208
|
delivered.push(targetName);
|
|
209
|
+
if (isUnicast) {
|
|
210
|
+
if (!isReply) {
|
|
211
|
+
// "received = commitment" for new work: peer now owns this
|
|
212
|
+
// envelope and will process it in its upcoming turn. Wrapper's
|
|
213
|
+
// turn_end clears the busy flag.
|
|
214
|
+
this.busyPeers.add(targetName);
|
|
215
|
+
}
|
|
216
|
+
ackStatus = "received";
|
|
217
|
+
this._sendAckToSender(env, "received", targetName);
|
|
218
|
+
}
|
|
126
219
|
}
|
|
127
220
|
catch {
|
|
128
|
-
// peer dropped mid-write — close handler will fire
|
|
221
|
+
// peer dropped mid-write — close handler will fire; treat as silent
|
|
129
222
|
}
|
|
130
223
|
}
|
|
131
224
|
if (this.auditPath)
|
|
132
|
-
await this._appendAudit(env, delivered);
|
|
225
|
+
await this._appendAudit(env, delivered, ackStatus);
|
|
133
226
|
this.onRouted?.(env, delivered);
|
|
134
227
|
}
|
|
135
228
|
_resolveTargets(env) {
|
|
@@ -147,17 +240,42 @@ export class Broker {
|
|
|
147
240
|
return [];
|
|
148
241
|
return [env.to];
|
|
149
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* Writes an ACK envelope to the original sender's socket. Synchronous —
|
|
245
|
+
* the caller is inside `_route` and must keep busy-check/busy-set atomic.
|
|
246
|
+
* Broker → sender: `from="broker"`, `to=env.from`, `re=env.id`,
|
|
247
|
+
* `body={type:"ack", status, target}`.
|
|
248
|
+
*/
|
|
249
|
+
_sendAckToSender(env, status, target) {
|
|
250
|
+
const sender = this.peers.get(env.from);
|
|
251
|
+
if (!sender)
|
|
252
|
+
return; // sender vanished mid-write
|
|
253
|
+
const body = { type: "ack", status, target };
|
|
254
|
+
const ackEnv = {
|
|
255
|
+
from: BROKER_NAME,
|
|
256
|
+
to: env.from,
|
|
257
|
+
id: uuidv7(),
|
|
258
|
+
re: env.id,
|
|
259
|
+
body,
|
|
260
|
+
};
|
|
261
|
+
try {
|
|
262
|
+
sender.socket.write(serialize(ackEnv));
|
|
263
|
+
}
|
|
264
|
+
catch { /* sender dropped; close handler will fire */ }
|
|
265
|
+
}
|
|
150
266
|
_handleBrokerMessage(env) {
|
|
151
267
|
const body = env.body;
|
|
152
268
|
if (!body || typeof body !== "object")
|
|
153
269
|
return;
|
|
154
270
|
if (body.type === "list_peers") {
|
|
271
|
+
const remote = this.remoteRouter ? this.remoteRouter.listRemotePeers() : [];
|
|
272
|
+
const peers = [...this.peerNames(), ...remote];
|
|
155
273
|
const reply = {
|
|
156
274
|
from: BROKER_NAME,
|
|
157
275
|
to: env.from,
|
|
158
276
|
id: uuidv7(),
|
|
159
277
|
re: env.id,
|
|
160
|
-
body: { type: "list_peers_reply", peers
|
|
278
|
+
body: { type: "list_peers_reply", peers },
|
|
161
279
|
};
|
|
162
280
|
const peer = this.peers.get(env.from);
|
|
163
281
|
if (peer) {
|
|
@@ -166,6 +284,17 @@ export class Broker {
|
|
|
166
284
|
}
|
|
167
285
|
catch { /* ignored */ }
|
|
168
286
|
}
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
if (body.type === "turn_state" && typeof body.busy === "boolean") {
|
|
290
|
+
// Peer wrapper notifies its own turn lifecycle. We use `env.from`
|
|
291
|
+
// (forced to conn.name by `_handleLine`) so a peer can never set
|
|
292
|
+
// someone else's busy state.
|
|
293
|
+
if (body.busy)
|
|
294
|
+
this.busyPeers.add(env.from);
|
|
295
|
+
else
|
|
296
|
+
this.busyPeers.delete(env.from);
|
|
297
|
+
return;
|
|
169
298
|
}
|
|
170
299
|
}
|
|
171
300
|
_broadcastSystem(body, excludeName) {
|
|
@@ -185,7 +314,14 @@ export class Broker {
|
|
|
185
314
|
catch { /* ignored */ }
|
|
186
315
|
}
|
|
187
316
|
}
|
|
188
|
-
async _appendAudit(env, delivered
|
|
317
|
+
async _appendAudit(env, delivered, ackStatus,
|
|
318
|
+
/**
|
|
319
|
+
* Plan/25 Wave D: provenance hint for the audit reader. `"relay"` marks
|
|
320
|
+
* envelopes injected via `injectFromRemote` (cross-PC). Local UDS
|
|
321
|
+
* delivery keeps the default `"uds"` so existing audit consumers see
|
|
322
|
+
* a uniform field rather than an undefined hole.
|
|
323
|
+
*/
|
|
324
|
+
via = "uds") {
|
|
189
325
|
if (!this.auditPath)
|
|
190
326
|
return;
|
|
191
327
|
const line = JSON.stringify({
|
|
@@ -195,6 +331,8 @@ export class Broker {
|
|
|
195
331
|
id: env.id,
|
|
196
332
|
re: env.re,
|
|
197
333
|
delivered,
|
|
334
|
+
ack_status: ackStatus,
|
|
335
|
+
via,
|
|
198
336
|
}) + "\n";
|
|
199
337
|
try {
|
|
200
338
|
await mkdir(dirname(this.auditPath), { recursive: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker.js","sourceRoot":"","sources":["../../src/session/broker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"broker.js","sourceRoot":"","sources":["../../src/session/broker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type { Broker, RemoteRouter } from "./broker.js";
|
|
2
|
+
import { type Envelope } from "./envelope.js";
|
|
3
|
+
import type { PiForwardClient } from "../transport/pi_forward_client.js";
|
|
4
|
+
export interface RemotePeerEntry {
|
|
5
|
+
peers: string[];
|
|
6
|
+
pcPubkey: string;
|
|
7
|
+
ts: number;
|
|
8
|
+
}
|
|
9
|
+
interface SiblingInfo {
|
|
10
|
+
pcLabel: string;
|
|
11
|
+
pcPubkey: string;
|
|
12
|
+
}
|
|
13
|
+
export interface BrokerRemoteOptions {
|
|
14
|
+
broker: Broker;
|
|
15
|
+
pi: PiForwardClient;
|
|
16
|
+
selfPcLabel: string;
|
|
17
|
+
selfPcPubkey: string;
|
|
18
|
+
/** Initial siblings (Pis-irmãos of the same Owner). May be extended later. */
|
|
19
|
+
siblings?: SiblingInfo[];
|
|
20
|
+
/** TTL override (testing). */
|
|
21
|
+
cacheTtlMs?: number;
|
|
22
|
+
/** Logger (defaults to console.error). */
|
|
23
|
+
log?: (msg: string) => void;
|
|
24
|
+
}
|
|
25
|
+
export declare class BrokerRemote implements RemoteRouter {
|
|
26
|
+
private readonly broker;
|
|
27
|
+
private readonly pi;
|
|
28
|
+
private readonly selfPcLabel;
|
|
29
|
+
private readonly selfPcPubkey;
|
|
30
|
+
private readonly cacheTtlMs;
|
|
31
|
+
private readonly log;
|
|
32
|
+
/** Siblings: pc_label → pc_pubkey. Authoritative for anti-spoof. */
|
|
33
|
+
private readonly siblingByLabel;
|
|
34
|
+
/** Reverse index built from siblings: pc_pubkey → pc_label. */
|
|
35
|
+
private readonly siblingByPubkey;
|
|
36
|
+
/** Cache of peers per remote pc_label. */
|
|
37
|
+
private readonly remotePeers;
|
|
38
|
+
/** In-flight `peers_request` calls, keyed by pc_label. */
|
|
39
|
+
private readonly pendingFills;
|
|
40
|
+
/** Local peers (UDS) at the moment of last `onLocalPeersChanged` call. */
|
|
41
|
+
private lastLocalPeers;
|
|
42
|
+
private readonly onIncoming;
|
|
43
|
+
private detached;
|
|
44
|
+
constructor(opts: BrokerRemoteOptions);
|
|
45
|
+
/** Bootstrap: announce ourselves AND ask every sibling for their peers.
|
|
46
|
+
* Single helper so `_addSibling` can reuse half of it when a new
|
|
47
|
+
* sibling appears via `setSiblings`. */
|
|
48
|
+
private _bootstrapWithSiblings;
|
|
49
|
+
detach(): void;
|
|
50
|
+
/** Replace or extend the sibling set. Idempotent on identical input.
|
|
51
|
+
* Removes any sibling missing from `next`. Plan/25 Wave B bootstrap:
|
|
52
|
+
* fires `peers_request` at any sibling that wasn't in the previous
|
|
53
|
+
* set so the cache warms up without waiting for their next push. */
|
|
54
|
+
setSiblings(next: SiblingInfo[]): void;
|
|
55
|
+
private _addSibling;
|
|
56
|
+
/** Returns the cached peer list for a remote pc_label, or [] when
|
|
57
|
+
* unknown / expired. */
|
|
58
|
+
getRemotePeers(pcLabel: string): string[];
|
|
59
|
+
/** Returns the full cross-PC inventory: pc_label → peers (TTL-respected). */
|
|
60
|
+
getAllRemote(): Record<string, string[]>;
|
|
61
|
+
/** Returns aggregated remote peer names (`<pc>:<peer>`) for the broker's
|
|
62
|
+
* `list_peers` reply. Skips siblings with no cache entry. */
|
|
63
|
+
listRemotePeers(): string[];
|
|
64
|
+
/**
|
|
65
|
+
* Called whenever the local UDS broker's peer set changes
|
|
66
|
+
* (peer_joined/peer_left). We push a `peers_update` envelope to every
|
|
67
|
+
* sibling so their caches stay fresh without polling.
|
|
68
|
+
*/
|
|
69
|
+
onLocalPeersChanged(peers: string[]): void;
|
|
70
|
+
/**
|
|
71
|
+
* Broker hook (plan/25 Wave C). Inspect `env.to` for a `<pc>:` prefix:
|
|
72
|
+
*
|
|
73
|
+
* - no prefix or prefix == selfPcLabel → return false (broker delivers
|
|
74
|
+
* locally; if same-self prefix is present we DON'T strip it here —
|
|
75
|
+
* the local resolver will treat it as a literal name, which works
|
|
76
|
+
* because local names don't carry colons in practice)
|
|
77
|
+
* - prefix === known sibling label → rewrite `env.from`, pack onto the
|
|
78
|
+
* relay, return true. May trigger a lazy `peers_request` when the
|
|
79
|
+
* cache is empty (returns false on hard cache miss so the broker
|
|
80
|
+
* surfaces a transport_error path; we always optimistically send,
|
|
81
|
+
* and ACK timeout in the sender ends up reporting the failure).
|
|
82
|
+
* - prefix is not a known sibling label → return false (backward-compat
|
|
83
|
+
* for hypothetical local names containing `:`)
|
|
84
|
+
*/
|
|
85
|
+
tryRouteOutbound(env: Envelope): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Entry point for envelopes the relay forwards to us. Receives the
|
|
88
|
+
* envelope verbatim plus the verified `from_pc` (Pi-pubkey of the
|
|
89
|
+
* sender, authoritative — relay-checked).
|
|
90
|
+
*/
|
|
91
|
+
handleIncoming(env: Envelope, fromPc: string): void;
|
|
92
|
+
private _setRemoteCache;
|
|
93
|
+
private _awaitPeersFill;
|
|
94
|
+
private _propagateTransportError;
|
|
95
|
+
private _sendControlEnvelope;
|
|
96
|
+
private _labelForPubkey;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Parse a `<pc>:<peer>` address. Returns null when the input doesn't
|
|
100
|
+
* carry a `:`. Note: callers are responsible for deciding whether the
|
|
101
|
+
* parsed `pcLabel` is meaningful (i.e., matches selfPcLabel or a known
|
|
102
|
+
* sibling); a non-null return here does NOT imply the address is remote.
|
|
103
|
+
* The broker's prefix routing uses this — local names containing literal
|
|
104
|
+
* `:` continue working as long as no sibling carries the same prefix.
|
|
105
|
+
*/
|
|
106
|
+
export declare function parseAddress(to: string): {
|
|
107
|
+
pcLabel: string;
|
|
108
|
+
peerName: string;
|
|
109
|
+
} | null;
|
|
110
|
+
export {};
|