@cello-protocol/daemon 0.0.16 → 0.0.18
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/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +102 -1
- package/dist/daemon.js.map +1 -1
- package/dist/network-directory-node.d.ts +18 -0
- package/dist/network-directory-node.d.ts.map +1 -1
- package/dist/network-directory-node.js +107 -1
- package/dist/network-directory-node.js.map +1 -1
- package/dist/relay-receipt-store.d.ts +97 -0
- package/dist/relay-receipt-store.d.ts.map +1 -0
- package/dist/relay-receipt-store.js +203 -0
- package/dist/relay-receipt-store.js.map +1 -0
- package/dist/session-assignment-parser.d.ts.map +1 -1
- package/dist/session-assignment-parser.js +7 -0
- package/dist/session-assignment-parser.js.map +1 -1
- package/dist/session-ceremony.d.ts +13 -4
- package/dist/session-ceremony.d.ts.map +1 -1
- package/dist/session-ceremony.js +95 -5
- package/dist/session-ceremony.js.map +1 -1
- package/dist/session-node-manager.d.ts +21 -0
- package/dist/session-node-manager.d.ts.map +1 -1
- package/dist/session-node-manager.js +39 -1
- package/dist/session-node-manager.js.map +1 -1
- package/dist/session-relay-client.d.ts +31 -1
- package/dist/session-relay-client.d.ts.map +1 -1
- package/dist/session-relay-client.js +282 -7
- package/dist/session-relay-client.js.map +1 -1
- package/dist/session-seal-leaf-store.d.ts +54 -0
- package/dist/session-seal-leaf-store.d.ts.map +1 -0
- package/dist/session-seal-leaf-store.js +70 -0
- package/dist/session-seal-leaf-store.js.map +1 -0
- package/package.json +4 -4
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
import { createHash } from "node:crypto";
|
|
32
32
|
import * as lp from "it-length-prefixed";
|
|
33
33
|
import { Encoder, decode } from "cbor-x";
|
|
34
|
+
import { evaluateRelayAck } from "./relay-receipt-store.js";
|
|
34
35
|
const CBOR_ENC = new Encoder({ tagUint8Array: false });
|
|
35
36
|
export const RELAY_PROTOCOL_ID = "/cello/relay/1.0.0";
|
|
36
37
|
export const RELAY_AUTH_DOMAIN = "CELLO-RELAY-AUTH-v1";
|
|
@@ -114,6 +115,8 @@ export class AgentRelayClient {
|
|
|
114
115
|
#keyProvider;
|
|
115
116
|
#senderPubkey;
|
|
116
117
|
#logger;
|
|
118
|
+
#receiptStore;
|
|
119
|
+
#sealLeafStore;
|
|
117
120
|
#stream = null;
|
|
118
121
|
#connecting = null;
|
|
119
122
|
#closed = false;
|
|
@@ -129,11 +132,20 @@ export class AgentRelayClient {
|
|
|
129
132
|
// DOD-MSG-4: the sender-signed structure1_cbor of the in-flight submit, paired with its ack so the
|
|
130
133
|
// SubmitResult can carry it (the ack itself only returns the relay's structure2_cbor).
|
|
131
134
|
#pendingStructure1 = null;
|
|
135
|
+
// FED-OPTIONB-SEAL-001: the in-flight submit's leaf kind (0x00 msg / 0x02 ctrl), paired with its ack so
|
|
136
|
+
// #captureReceipt can persist it alongside the Structure2/Structure1 carry bytes for the unilateral seal.
|
|
137
|
+
#pendingLeafKind = null;
|
|
132
138
|
/** The session_id hex of the in-flight submit, so its ack updates the right #lastSeen. */
|
|
133
139
|
#pendingAckSessionHex = null;
|
|
140
|
+
/**
|
|
141
|
+
* FED-OPTIONB-SETUP-001: resolver for the in-flight `client_record_assignment` ack. The ack carries
|
|
142
|
+
* no session_id (like hash_submit_ack), so at most one record is in flight; records are serialized on
|
|
143
|
+
* the same `#submitChain` as submits, guaranteeing no overlap.
|
|
144
|
+
*/
|
|
145
|
+
#pendingRecord = null;
|
|
134
146
|
/** Serializes submits so only one is in flight at a time across all sessions. */
|
|
135
147
|
#submitChain = Promise.resolve();
|
|
136
|
-
/** session_id hex → { the live node to (re)dial from, inbound leaf handler }. */
|
|
148
|
+
/** session_id hex → { the live node to (re)dial from, inbound leaf handler, Option-B assignment to present }. */
|
|
137
149
|
#sessions = new Map();
|
|
138
150
|
constructor(opts) {
|
|
139
151
|
this.#relayPeerId = opts.relayPeerId;
|
|
@@ -141,6 +153,8 @@ export class AgentRelayClient {
|
|
|
141
153
|
this.#keyProvider = opts.keyProvider;
|
|
142
154
|
this.#senderPubkey = opts.senderPubkey;
|
|
143
155
|
this.#logger = opts.logger;
|
|
156
|
+
this.#receiptStore = opts.receiptStore;
|
|
157
|
+
this.#sealLeafStore = opts.sealLeafStore;
|
|
144
158
|
}
|
|
145
159
|
/** The agent's K_local public key as hex — the responder identity for auto-acknowledge (UPGRADE-002). */
|
|
146
160
|
get senderPubkeyHex() {
|
|
@@ -151,8 +165,106 @@ export class AgentRelayClient {
|
|
|
151
165
|
* (idempotent). Storing the node per session lets a pure-receiver session re-establish
|
|
152
166
|
* the shared stream if the node that originally dialed is torn down (L5).
|
|
153
167
|
*/
|
|
154
|
-
registerSession(sessionIdHex, node, onLeafDeliver) {
|
|
155
|
-
this.#sessions.
|
|
168
|
+
registerSession(sessionIdHex, node, onLeafDeliver, assignment) {
|
|
169
|
+
const existing = this.#sessions.get(sessionIdHex);
|
|
170
|
+
this.#sessions.set(sessionIdHex, {
|
|
171
|
+
node,
|
|
172
|
+
onLeafDeliver: onLeafDeliver ?? (() => { }),
|
|
173
|
+
// Carry the assignment forward across re-registration; never lose a recorded flag on re-register.
|
|
174
|
+
assignment: assignment ?? existing?.assignment,
|
|
175
|
+
recorded: existing?.recorded ?? false,
|
|
176
|
+
recordRejected: existing?.recordRejected ?? false,
|
|
177
|
+
});
|
|
178
|
+
// FED-OPTIONB-SETUP-001 (Option B): eagerly present the assignment so the relay records the session
|
|
179
|
+
// (binds peer IDs, creates the session entry) BEFORE the first hash_submit or the counterparty's
|
|
180
|
+
// leaves arrive — matching the timing the old directory→relay recordAssignment dial provided.
|
|
181
|
+
// Best-effort + serialized on the submit chain (the ack carries no session_id, so no overlap).
|
|
182
|
+
if (assignment) {
|
|
183
|
+
this.#submitChain = this.#submitChain
|
|
184
|
+
.then(() => this.#doRecord(node, sessionIdHex))
|
|
185
|
+
.then(() => undefined, () => undefined);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* FED-OPTIONB-SETUP-001: present the directory-signed assignment to the relay (Option B). Idempotent
|
|
190
|
+
* (no-op once `recorded`, or when the session has no assignment — direct/persisted/legacy sessions).
|
|
191
|
+
* The relay reconstructs the TBS and verifies the per-node directory signature against any consortium
|
|
192
|
+
* key. On success the session is recorded; the send/ack is single-in-flight (mirrors #doSubmit).
|
|
193
|
+
*/
|
|
194
|
+
async #doRecord(node, sessionIdHex) {
|
|
195
|
+
if (this.#closed)
|
|
196
|
+
return false;
|
|
197
|
+
const sess = this.#sessions.get(sessionIdHex);
|
|
198
|
+
if (!sess || !sess.assignment)
|
|
199
|
+
return true;
|
|
200
|
+
if (sess.recorded)
|
|
201
|
+
return true;
|
|
202
|
+
// Terminal rejection (code-review M1): a relay that cleanly rejected this assignment will reject it
|
|
203
|
+
// again — stop re-presenting so a misconfigured/forged case can't storm the shared stream.
|
|
204
|
+
if (sess.recordRejected)
|
|
205
|
+
return false;
|
|
206
|
+
if (!(await this.#ensureConnected(node)))
|
|
207
|
+
return false;
|
|
208
|
+
const stream = this.#stream;
|
|
209
|
+
if (!stream)
|
|
210
|
+
return false;
|
|
211
|
+
const a = sess.assignment;
|
|
212
|
+
const frame = CBOR_ENC.encode({
|
|
213
|
+
type: "client_record_assignment",
|
|
214
|
+
session_id: new Uint8Array(Buffer.from(sessionIdHex, "hex")),
|
|
215
|
+
participant_a: a.participantA,
|
|
216
|
+
participant_b: a.participantB,
|
|
217
|
+
session_timestamp: a.sessionTimestamp,
|
|
218
|
+
initiator_session_peer_id: a.initiatorSessionPeerId,
|
|
219
|
+
counterparty_session_peer_id: a.counterpartySessionPeerId,
|
|
220
|
+
assignment_signature: a.assignmentSignature,
|
|
221
|
+
});
|
|
222
|
+
let resolveRec;
|
|
223
|
+
const ackPromise = new Promise((r) => { resolveRec = r; });
|
|
224
|
+
this.#pendingRecord = resolveRec;
|
|
225
|
+
try {
|
|
226
|
+
stream.send(lp.encode.single(frame));
|
|
227
|
+
}
|
|
228
|
+
catch (err) {
|
|
229
|
+
if (this.#pendingRecord === resolveRec)
|
|
230
|
+
this.#pendingRecord = null;
|
|
231
|
+
this.#logger.warn("session.relay.record.send.failed", { relayPeerId: this.#relayPeerId, error: extractErrorMessage(err) });
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
let timer;
|
|
235
|
+
const timeout = new Promise((r) => { timer = setTimeout(() => r("timeout"), HASH_SUBMIT_TIMEOUT_MS); });
|
|
236
|
+
try {
|
|
237
|
+
const result = await Promise.race([ackPromise, timeout]);
|
|
238
|
+
if (result === "ok") {
|
|
239
|
+
sess.recorded = true;
|
|
240
|
+
this.#logger.info("session.relay.assignment.recorded", { relayPeerId: this.#relayPeerId, sessionShort: sessionIdHex.slice(0, 16) });
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
if (result === "timeout") {
|
|
244
|
+
// ONLY here reset the stream: a late ack on this superseded stream would settle a LATER submit's
|
|
245
|
+
// resolver (FIFO desync). recorded stays false ⇒ a transient timeout is retried on reconnect.
|
|
246
|
+
this.#resetStream();
|
|
247
|
+
this.#logger.warn("session.relay.assignment.record.timeout", { relayPeerId: this.#relayPeerId, sessionShort: sessionIdHex.slice(0, 16) });
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
if (result === "rejected") {
|
|
251
|
+
// The relay cleanly rejected (assignment_invalid) — the ack already arrived, the stream is HEALTHY.
|
|
252
|
+
// Do NOT reset (that would tear down sibling sessions' in-flight submits). Mark terminal so we stop
|
|
253
|
+
// re-presenting. The session has no relay witness; sends still complete via the direct path
|
|
254
|
+
// (sovereign-node redundancy) and a hash_submit will fail loud (session_not_found) — diagnosable.
|
|
255
|
+
sess.recordRejected = true;
|
|
256
|
+
this.#logger.warn("session.relay.assignment.record.rejected", { relayPeerId: this.#relayPeerId, sessionShort: sessionIdHex.slice(0, 16) });
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
// "closed": the stream dropped while the record was in flight (settled by the reader/close path).
|
|
260
|
+
// Transient — no reset needed (already gone); recorded stays false ⇒ retried on reconnect.
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
finally {
|
|
264
|
+
clearTimeout(timer);
|
|
265
|
+
if (this.#pendingRecord === resolveRec)
|
|
266
|
+
this.#pendingRecord = null;
|
|
267
|
+
}
|
|
156
268
|
}
|
|
157
269
|
/** Remove a session; caller closes the client when no sessions remain. */
|
|
158
270
|
unregisterSession(sessionIdHex) {
|
|
@@ -168,6 +280,7 @@ export class AgentRelayClient {
|
|
|
168
280
|
this.#pendingAck = null;
|
|
169
281
|
this.#pendingAckSessionHex = null;
|
|
170
282
|
this.#pendingStructure1 = null;
|
|
283
|
+
this.#pendingLeafKind = null;
|
|
171
284
|
if (resolve)
|
|
172
285
|
resolve(r);
|
|
173
286
|
}
|
|
@@ -208,6 +321,89 @@ export class AgentRelayClient {
|
|
|
208
321
|
return false;
|
|
209
322
|
}
|
|
210
323
|
}
|
|
324
|
+
/**
|
|
325
|
+
* RELAYSIG-1: verify a relay `hash_submit_ack`'s signed ordering record and durably store the receipt.
|
|
326
|
+
* The relay signs TBS = SHA-256(content_hash || seq_BE4 || ts_BE8) with its ack-signing key, whose hex is
|
|
327
|
+
* `relay_id`. We verify SELF-CONSISTENCY (the signature binds the sequence ⇒ a FORGED sequence fails) and
|
|
328
|
+
* record the immutable receipt. The authoritative registered-relay check is the directory's at seal
|
|
329
|
+
* (OPTIONB-SEAL). No-op when there is no receipt store, no pending leaf, or the ACK is unsigned.
|
|
330
|
+
*/
|
|
331
|
+
#captureReceipt(frame, structure1Cbor, seq) {
|
|
332
|
+
if (seq < 0 || !structure1Cbor)
|
|
333
|
+
return false;
|
|
334
|
+
let contentHash;
|
|
335
|
+
let sessionId;
|
|
336
|
+
try {
|
|
337
|
+
// Structure 1 = [1, content_hash(32), sender_pubkey(32), session_id(16), last_seen_seq, ts].
|
|
338
|
+
const arr = decode(structure1Cbor);
|
|
339
|
+
contentHash = toU8(arr[1]);
|
|
340
|
+
sessionId = toU8(arr[3]);
|
|
341
|
+
}
|
|
342
|
+
catch {
|
|
343
|
+
// Our OWN just-signed bytes — near-impossible to fail; surface it rather than drop silently.
|
|
344
|
+
this.#logger.warn("relay.receipt.undecodable_leaf", { seq });
|
|
345
|
+
return false;
|
|
346
|
+
}
|
|
347
|
+
const ev = evaluateRelayAck({
|
|
348
|
+
contentHash,
|
|
349
|
+
sessionIdHex: Buffer.from(sessionId).toString("hex"),
|
|
350
|
+
agentPubkeyHex: this.senderPubkeyHex,
|
|
351
|
+
relayId: typeof frame["relay_id"] === "string" ? frame["relay_id"] : undefined,
|
|
352
|
+
relaySignature: frame["relay_signature"] instanceof Uint8Array ? frame["relay_signature"] : undefined,
|
|
353
|
+
timestamp: typeof frame["timestamp"] === "number" ? frame["timestamp"] : undefined,
|
|
354
|
+
sequenceNumber: seq,
|
|
355
|
+
});
|
|
356
|
+
switch (ev.kind) {
|
|
357
|
+
case "unsigned":
|
|
358
|
+
// A relay that SHOULD sign (PERSIST-012) but didn't → no durable witness for this message. Not an
|
|
359
|
+
// error per the DoD (unsigned ACKs are optional), but make it diagnosable instead of invisible.
|
|
360
|
+
this.#logger.debug("relay.receipt.unsigned", { seq, hashShort: Buffer.from(contentHash).toString("hex").slice(0, 16) });
|
|
361
|
+
return false;
|
|
362
|
+
case "bad_relay_id":
|
|
363
|
+
this.#logger.warn("relay.receipt.bad_relay_id", { seq });
|
|
364
|
+
return false;
|
|
365
|
+
case "invalid_signature":
|
|
366
|
+
// FORGED / corrupt ACK — the signature does not bind (hash, seq, ts). REJECT the submit so the send
|
|
367
|
+
// does NOT settle ok on an unverified sequence (a forged ordering record must not drive ordering),
|
|
368
|
+
// and store nothing (DoD: "a forged sequence is rejected"). The send still completes via the direct
|
|
369
|
+
// content path — the relay witness simply degrades to absent for this leaf.
|
|
370
|
+
this.#logger.warn("relay.receipt.signature_invalid", { seq });
|
|
371
|
+
return true;
|
|
372
|
+
case "store": {
|
|
373
|
+
if (!this.#receiptStore)
|
|
374
|
+
return false;
|
|
375
|
+
try {
|
|
376
|
+
const wrote = this.#receiptStore.store(ev.receipt, Date.now());
|
|
377
|
+
if (wrote) {
|
|
378
|
+
this.#logger.info("relay.receipt.stored", { seq, hashShort: ev.receipt.hashHex.slice(0, 16), relayShort: ev.receipt.relayId.slice(0, 16) });
|
|
379
|
+
}
|
|
380
|
+
// FED-OPTIONB-SEAL-001: record this OWN leaf in the seal-leaf log WITH its relay receipt (the
|
|
381
|
+
// relay's signature pins content_hash→seq — the teeth that stop a supplier reordering its own
|
|
382
|
+
// leaves). structure2_cbor rides the ack we just verified; structure1Cbor + the leaf kind are this
|
|
383
|
+
// submit's paired in-flight values. Best-effort + separate from the receipt write.
|
|
384
|
+
const structure2Cbor = frame["structure2_cbor"] instanceof Uint8Array ? frame["structure2_cbor"] : undefined;
|
|
385
|
+
if (this.#sealLeafStore && structure2Cbor && structure1Cbor && this.#pendingLeafKind !== null) {
|
|
386
|
+
this.#sealLeafStore.store(this.senderPubkeyHex, ev.receipt.sessionIdHex, {
|
|
387
|
+
sequenceNumber: seq,
|
|
388
|
+
leafKind: this.#pendingLeafKind,
|
|
389
|
+
senderPubkeyHex: this.senderPubkeyHex,
|
|
390
|
+
structure2Cbor,
|
|
391
|
+
structure1Cbor,
|
|
392
|
+
relayId: ev.receipt.relayId,
|
|
393
|
+
relayTimestamp: ev.receipt.timestamp,
|
|
394
|
+
relaySignatureHex: ev.receipt.signatureHex,
|
|
395
|
+
}, Date.now());
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
catch (err) {
|
|
399
|
+
// A durable-evidence write failure must be LOUD — the relay will not re-emit this ack, so a
|
|
400
|
+
// swallowed write permanently loses a verified receipt (fallback #4).
|
|
401
|
+
this.#logger.error("relay.receipt.store_failed", { seq, error: err instanceof Error ? err.message : String(err) });
|
|
402
|
+
}
|
|
403
|
+
return false;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
211
407
|
#dispatch(frame) {
|
|
212
408
|
const type = frame["type"];
|
|
213
409
|
if (type === "hash_submit_ack") {
|
|
@@ -223,14 +419,36 @@ export class AgentRelayClient {
|
|
|
223
419
|
const s2 = frame["structure2_cbor"];
|
|
224
420
|
const structure2Cbor = s2 instanceof Uint8Array ? s2 : undefined;
|
|
225
421
|
const structure1Cbor = this.#pendingStructure1 ?? undefined;
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
422
|
+
// RELAYSIG-1: verify the relay's signed ordering record and durably store the receipt BEFORE
|
|
423
|
+
// settling (which clears #pendingStructure1, the source of the content hash + session id). A
|
|
424
|
+
// signed-but-INVALID ACK rejects the submit so the send does not settle ok on an unverified sequence.
|
|
425
|
+
const rejectSubmit = this.#captureReceipt(frame, structure1Cbor, seq);
|
|
426
|
+
this.#settlePending(rejectSubmit
|
|
427
|
+
? { ok: false, reason: "relay_ack_signature_invalid" }
|
|
428
|
+
: seq >= 0
|
|
429
|
+
? { ok: true, sequence_number: seq, structure1_cbor: structure1Cbor, structure2_cbor: structure2Cbor }
|
|
430
|
+
: { ok: false, reason: "relay_ack_malformed" });
|
|
229
431
|
}
|
|
230
432
|
else if (type === "hash_submit_error") {
|
|
231
433
|
const reason = typeof frame["reason"] === "string" ? frame["reason"] : "relay_rejected";
|
|
232
434
|
this.#settlePending({ ok: false, reason });
|
|
233
435
|
}
|
|
436
|
+
else if (type === "assignment_ok") {
|
|
437
|
+
// FED-OPTIONB-SETUP-001: the relay verified + recorded our client-presented assignment.
|
|
438
|
+
const r = this.#pendingRecord;
|
|
439
|
+
this.#pendingRecord = null;
|
|
440
|
+
if (r)
|
|
441
|
+
r("ok");
|
|
442
|
+
}
|
|
443
|
+
else if (type === "assignment_invalid") {
|
|
444
|
+
// The relay rejected the assignment (e.g. directory_signature_invalid — not signed by any
|
|
445
|
+
// consortium directory). Fail LOUD: the session has no relay witness until this is resolved.
|
|
446
|
+
this.#logger.warn("session.relay.assignment.invalid", { relayPeerId: this.#relayPeerId, reason: typeof frame["reason"] === "string" ? frame["reason"] : "unknown" });
|
|
447
|
+
const r = this.#pendingRecord;
|
|
448
|
+
this.#pendingRecord = null;
|
|
449
|
+
if (r)
|
|
450
|
+
r("rejected");
|
|
451
|
+
}
|
|
234
452
|
else if (type === "leaf_deliver") {
|
|
235
453
|
const seq = typeof frame["sequence_number"] === "number" ? frame["sequence_number"] : -1;
|
|
236
454
|
const sidHex = Buffer.from(toU8(frame["session_id"])).toString("hex");
|
|
@@ -240,6 +458,38 @@ export class AgentRelayClient {
|
|
|
240
458
|
const authoredByUs = this.#isOwnLeaf(s1);
|
|
241
459
|
if (seq >= 0 && !authoredByUs)
|
|
242
460
|
this.#bumpLastSeen(sidHex, seq);
|
|
461
|
+
// FED-OPTIONB-SEAL-001: record the COUNTERPARTY's delivered leaf in the seal-leaf log (no relay
|
|
462
|
+
// receipt — the relay does not ack-sign a delivery to the recipient). It is pinned at seal by the
|
|
463
|
+
// absent party's sender_signature (unforgeable) + sequence contiguity against our receipt-pinned own
|
|
464
|
+
// leaves. Our OWN echoed leaf is skipped here (it is recorded WITH its receipt on the ack path).
|
|
465
|
+
if (this.#sealLeafStore && seq >= 0 && !authoredByUs) {
|
|
466
|
+
const s2 = frame["structure2_cbor"];
|
|
467
|
+
const structure2Cbor = s2 instanceof Uint8Array ? s2 : undefined;
|
|
468
|
+
let senderHex;
|
|
469
|
+
try {
|
|
470
|
+
senderHex = Buffer.from(toU8(decode(s1)[2])).toString("hex");
|
|
471
|
+
}
|
|
472
|
+
catch {
|
|
473
|
+
senderHex = undefined;
|
|
474
|
+
}
|
|
475
|
+
if (structure2Cbor && s1.length > 0 && senderHex) {
|
|
476
|
+
try {
|
|
477
|
+
this.#sealLeafStore.store(this.senderPubkeyHex, sidHex, {
|
|
478
|
+
sequenceNumber: seq,
|
|
479
|
+
leafKind: typeof frame["leaf_kind"] === "number" ? frame["leaf_kind"] : LEAF_KIND_MSG,
|
|
480
|
+
senderPubkeyHex: senderHex,
|
|
481
|
+
structure2Cbor,
|
|
482
|
+
structure1Cbor: s1,
|
|
483
|
+
}, Date.now());
|
|
484
|
+
}
|
|
485
|
+
catch (err) {
|
|
486
|
+
this.#logger.error("relay.seal_leaf.counterparty.store_failed", { seq, session: sidHex, error: err instanceof Error ? err.message : String(err) });
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
else {
|
|
490
|
+
this.#logger.warn("relay.seal_leaf.counterparty.capture_skipped", { seq, session: sidHex, hasS2: !!structure2Cbor, hasS1: s1.length > 0, hasSender: !!senderHex });
|
|
491
|
+
}
|
|
492
|
+
}
|
|
243
493
|
const session = this.#sessions.get(sidHex);
|
|
244
494
|
if (session && seq >= 0) {
|
|
245
495
|
session.onLeafDeliver({
|
|
@@ -399,6 +649,15 @@ export class AgentRelayClient {
|
|
|
399
649
|
if (this.#stream === stream)
|
|
400
650
|
this.#stream = null;
|
|
401
651
|
this.#settlePending({ ok: false, reason: "relay_stream_closed" });
|
|
652
|
+
// FED-OPTIONB-SETUP-001 (code-review L4): settle an in-flight record too, so #doRecord doesn't
|
|
653
|
+
// wait the full timeout on a dropped stream. "closed" is transient (not a directory rejection) ⇒
|
|
654
|
+
// recorded stays false and it is retried after reconnect.
|
|
655
|
+
{
|
|
656
|
+
const r = this.#pendingRecord;
|
|
657
|
+
this.#pendingRecord = null;
|
|
658
|
+
if (r)
|
|
659
|
+
r("closed");
|
|
660
|
+
}
|
|
402
661
|
// L5: a pure-receiver session issues no submit, so it would never trigger a re-dial
|
|
403
662
|
// after the node that owned the stream is torn down. If sessions remain, proactively
|
|
404
663
|
// re-establish from any still-live registered session node so queued leaf_delivers
|
|
@@ -443,10 +702,16 @@ export class AgentRelayClient {
|
|
|
443
702
|
return { ok: false, reason: "relay_client_closed" };
|
|
444
703
|
if (!(await this.#ensureConnected(node)))
|
|
445
704
|
return { ok: false, reason: "relay_unavailable" };
|
|
705
|
+
const sessionIdHex = Buffer.from(sessionId).toString("hex");
|
|
706
|
+
// FED-OPTIONB-SETUP-001 (Option B): the relay records the session from the CLIENT-presented
|
|
707
|
+
// assignment (the directory no longer dials the relay). Ensure it is recorded BEFORE the first
|
|
708
|
+
// hash_submit — the relay rejects a submit for an unknown session. Idempotent + no-op when there is
|
|
709
|
+
// no assignment to present (direct/persisted/legacy). Runs inline on the submit chain (no re-chaining
|
|
710
|
+
// — #doSubmit is already a chain link), and may reset the stream on failure, so capture #stream after.
|
|
711
|
+
await this.#doRecord(node, sessionIdHex);
|
|
446
712
|
const stream = this.#stream;
|
|
447
713
|
if (!stream)
|
|
448
714
|
return { ok: false, reason: "relay_unavailable" };
|
|
449
|
-
const sessionIdHex = Buffer.from(sessionId).toString("hex");
|
|
450
715
|
// This session's OWN high-water mark (NOT an agent-global one) — the relay's seq_counter
|
|
451
716
|
// is per session and rejects last_seen_seq > seq_counter.
|
|
452
717
|
const lastSeenForSession = this.#lastSeen.get(sessionIdHex) ?? 0;
|
|
@@ -468,6 +733,7 @@ export class AgentRelayClient {
|
|
|
468
733
|
// DOD-MSG-4: remember this submit's sender-signed structure1_cbor so its ack can return the full
|
|
469
734
|
// ordering record (the ack itself carries only the relay's structure2_cbor).
|
|
470
735
|
this.#pendingStructure1 = structure1;
|
|
736
|
+
this.#pendingLeafKind = leafKind;
|
|
471
737
|
try {
|
|
472
738
|
stream.send(lp.encode.single(frame));
|
|
473
739
|
}
|
|
@@ -476,6 +742,7 @@ export class AgentRelayClient {
|
|
|
476
742
|
this.#pendingAck = null;
|
|
477
743
|
this.#pendingAckSessionHex = null;
|
|
478
744
|
this.#pendingStructure1 = null;
|
|
745
|
+
this.#pendingLeafKind = null;
|
|
479
746
|
}
|
|
480
747
|
this.#logger.warn("session.relay.submit.send.failed", { relayPeerId: this.#relayPeerId, error: extractErrorMessage(err) });
|
|
481
748
|
return { ok: false, reason: "relay_submit_send_failed" };
|
|
@@ -497,6 +764,7 @@ export class AgentRelayClient {
|
|
|
497
764
|
this.#pendingAck = null;
|
|
498
765
|
this.#pendingAckSessionHex = null;
|
|
499
766
|
this.#pendingStructure1 = null;
|
|
767
|
+
this.#pendingLeafKind = null;
|
|
500
768
|
}
|
|
501
769
|
}
|
|
502
770
|
}
|
|
@@ -507,6 +775,13 @@ export class AgentRelayClient {
|
|
|
507
775
|
close() {
|
|
508
776
|
this.#closed = true;
|
|
509
777
|
this.#settlePending({ ok: false, reason: "relay_client_closed" });
|
|
778
|
+
// FED-OPTIONB-SETUP-001 (code-review L4): settle any in-flight record so #doRecord resolves promptly.
|
|
779
|
+
{
|
|
780
|
+
const r = this.#pendingRecord;
|
|
781
|
+
this.#pendingRecord = null;
|
|
782
|
+
if (r)
|
|
783
|
+
r("closed");
|
|
784
|
+
}
|
|
510
785
|
const stream = this.#stream;
|
|
511
786
|
this.#stream = null;
|
|
512
787
|
if (stream) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-relay-client.js","sourceRoot":"","sources":["../src/session-relay-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-relay-client.js","sourceRoot":"","sources":["../src/session-relay-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SessionSealLeafStore — FED-OPTIONB-SEAL-001.
|
|
3
|
+
*
|
|
4
|
+
* The per-session leaf log a UNILATERAL seal CARRIES to the directory so the directory rebuilds + verifies
|
|
5
|
+
* the Merkle tree OFFLINE (no directory→relay getSealLeaves dial). It holds BOTH parties' leaves, because a
|
|
6
|
+
* unilateral seal's reported_root spans the whole conversation:
|
|
7
|
+
* - PRESENT-party (own) leaves: captured from this agent's own hash_submit_ack — they carry the relay's
|
|
8
|
+
* signed RECEIPT (relay_id + timestamp + signature over buildRelayAckTbs(content_hash, seq, ts)). That
|
|
9
|
+
* signature is the teeth that pins each own leaf to its canonical sequence (Structure1 does NOT bind
|
|
10
|
+
* seq/prev_root, so without it a supplier could reorder its own leaves).
|
|
11
|
+
* - COUNTERPARTY leaves: captured from leaf_deliver — they carry structure1/structure2 but NO relay
|
|
12
|
+
* receipt (the relay does not ack-sign a delivery to the recipient). They are pinned by the absent
|
|
13
|
+
* party's sender_signature (unforgeable) + the prev_root chain + the signed last_seen_seq causal check +
|
|
14
|
+
* sequence contiguity against the receipt-pinned own leaves.
|
|
15
|
+
*
|
|
16
|
+
* Immutable at a position (agent, session, sequence): INSERT OR IGNORE keeps the first record for a seq.
|
|
17
|
+
*/
|
|
18
|
+
import type { DaemonDatabase } from "./sqlcipher-db.js";
|
|
19
|
+
import type { Logger } from "./types.js";
|
|
20
|
+
/** A carried leaf for the unilateral-seal offline rebuild. Relay-receipt fields present only for own leaves. */
|
|
21
|
+
export interface SealCarryLeaf {
|
|
22
|
+
sequenceNumber: number;
|
|
23
|
+
/** 0x00 message / 0x02 control (SEAL). */
|
|
24
|
+
leafKind: number;
|
|
25
|
+
/** Hex of the leaf author's 32-byte pubkey (present party for own leaves, counterparty for received). */
|
|
26
|
+
senderPubkeyHex: string;
|
|
27
|
+
/** The relay's committed Structure2 (CBOR) for this leaf. */
|
|
28
|
+
structure2Cbor: Uint8Array;
|
|
29
|
+
/** The sender-signed Structure1 (CBOR) for this leaf. */
|
|
30
|
+
structure1Cbor: Uint8Array;
|
|
31
|
+
/** Relay ack-signing pubkey hex (own leaves only). */
|
|
32
|
+
relayId?: string;
|
|
33
|
+
/** Unix ms embedded in the relay ACK TBS (own leaves only). */
|
|
34
|
+
relayTimestamp?: number;
|
|
35
|
+
/** Hex of the 64-byte relay ACK signature (own leaves only). */
|
|
36
|
+
relaySignatureHex?: string;
|
|
37
|
+
}
|
|
38
|
+
export declare class SessionSealLeafStore {
|
|
39
|
+
#private;
|
|
40
|
+
constructor(db: DaemonDatabase, logger: Logger);
|
|
41
|
+
/**
|
|
42
|
+
* Persist a leaf at its canonical position. IMMUTABLE: INSERT OR IGNORE keeps the FIRST record for an
|
|
43
|
+
* (agent, session, sequence) — a later record for the same position (e.g. a re-delivery, or a relay
|
|
44
|
+
* equivocation) cannot overwrite it. Returns true iff a new row was written.
|
|
45
|
+
*/
|
|
46
|
+
store(agentPubkeyHex: string, sessionIdHex: string, leaf: SealCarryLeaf, storedAtMs: number): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* The complete carried leaf chain for a session's UNILATERAL seal, ordered by canonical sequence. The
|
|
49
|
+
* directory rebuilds + verifies this tree OFFLINE. Returns ALL recorded leaves (both parties); the caller
|
|
50
|
+
* carries them verbatim and the directory enforces contiguity + the per-leaf relay-receipt teeth.
|
|
51
|
+
*/
|
|
52
|
+
getCarry(agentPubkeyHex: string, sessionIdHex: string): SealCarryLeaf[];
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=session-seal-leaf-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-seal-leaf-store.d.ts","sourceRoot":"","sources":["../src/session-seal-leaf-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,gHAAgH;AAChH,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,yGAAyG;IACzG,eAAe,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,cAAc,EAAE,UAAU,CAAC;IAC3B,yDAAyD;IACzD,cAAc,EAAE,UAAU,CAAC;IAC3B,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAmBD,qBAAa,oBAAoB;;gBAInB,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM;IAM9C;;;;OAIG;IACH,KAAK,CAAC,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAuBrG;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,aAAa,EAAE;CAkBxE"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
const CREATE_SQL = `
|
|
2
|
+
CREATE TABLE IF NOT EXISTS session_seal_leaves (
|
|
3
|
+
agent_pubkey TEXT NOT NULL,
|
|
4
|
+
session_id TEXT NOT NULL,
|
|
5
|
+
sequence_number INTEGER NOT NULL,
|
|
6
|
+
leaf_kind INTEGER NOT NULL,
|
|
7
|
+
sender_pubkey_hex TEXT NOT NULL,
|
|
8
|
+
structure2_cbor BLOB NOT NULL,
|
|
9
|
+
structure1_cbor BLOB NOT NULL,
|
|
10
|
+
relay_id TEXT,
|
|
11
|
+
relay_timestamp INTEGER,
|
|
12
|
+
relay_signature TEXT,
|
|
13
|
+
stored_at INTEGER NOT NULL,
|
|
14
|
+
PRIMARY KEY (agent_pubkey, session_id, sequence_number)
|
|
15
|
+
);
|
|
16
|
+
`;
|
|
17
|
+
export class SessionSealLeafStore {
|
|
18
|
+
#db;
|
|
19
|
+
#logger;
|
|
20
|
+
constructor(db, logger) {
|
|
21
|
+
this.#db = db;
|
|
22
|
+
this.#logger = logger;
|
|
23
|
+
this.#db.exec(CREATE_SQL);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Persist a leaf at its canonical position. IMMUTABLE: INSERT OR IGNORE keeps the FIRST record for an
|
|
27
|
+
* (agent, session, sequence) — a later record for the same position (e.g. a re-delivery, or a relay
|
|
28
|
+
* equivocation) cannot overwrite it. Returns true iff a new row was written.
|
|
29
|
+
*/
|
|
30
|
+
store(agentPubkeyHex, sessionIdHex, leaf, storedAtMs) {
|
|
31
|
+
const info = this.#db
|
|
32
|
+
.prepare(`INSERT OR IGNORE INTO session_seal_leaves
|
|
33
|
+
(agent_pubkey, session_id, sequence_number, leaf_kind, sender_pubkey_hex, structure2_cbor, structure1_cbor, relay_id, relay_timestamp, relay_signature, stored_at)
|
|
34
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
35
|
+
.run(agentPubkeyHex, sessionIdHex, leaf.sequenceNumber, leaf.leafKind, leaf.senderPubkeyHex, Buffer.from(leaf.structure2Cbor), Buffer.from(leaf.structure1Cbor), leaf.relayId ?? null, leaf.relayTimestamp ?? null, leaf.relaySignatureHex ?? null, storedAtMs);
|
|
36
|
+
return Number(info.changes) > 0;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The complete carried leaf chain for a session's UNILATERAL seal, ordered by canonical sequence. The
|
|
40
|
+
* directory rebuilds + verifies this tree OFFLINE. Returns ALL recorded leaves (both parties); the caller
|
|
41
|
+
* carries them verbatim and the directory enforces contiguity + the per-leaf relay-receipt teeth.
|
|
42
|
+
*/
|
|
43
|
+
getCarry(agentPubkeyHex, sessionIdHex) {
|
|
44
|
+
const rows = this.#db
|
|
45
|
+
.prepare(`SELECT sequence_number, leaf_kind, sender_pubkey_hex, structure2_cbor, structure1_cbor, relay_id, relay_timestamp, relay_signature
|
|
46
|
+
FROM session_seal_leaves WHERE agent_pubkey = ? AND session_id = ? ORDER BY sequence_number ASC`)
|
|
47
|
+
.all(agentPubkeyHex, sessionIdHex);
|
|
48
|
+
return rows.map((r) => ({
|
|
49
|
+
sequenceNumber: r.sequence_number,
|
|
50
|
+
leafKind: r.leaf_kind,
|
|
51
|
+
senderPubkeyHex: r.sender_pubkey_hex,
|
|
52
|
+
structure2Cbor: toU8(r.structure2_cbor),
|
|
53
|
+
structure1Cbor: toU8(r.structure1_cbor),
|
|
54
|
+
relayId: r.relay_id ?? undefined,
|
|
55
|
+
relayTimestamp: r.relay_timestamp ?? undefined,
|
|
56
|
+
relaySignatureHex: r.relay_signature ?? undefined,
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** Normalize a SQLite BLOB (Buffer/Uint8Array/ArrayBuffer) to a Uint8Array. */
|
|
61
|
+
function toU8(v) {
|
|
62
|
+
if (v instanceof Uint8Array)
|
|
63
|
+
return v;
|
|
64
|
+
if (Buffer.isBuffer(v))
|
|
65
|
+
return new Uint8Array(v);
|
|
66
|
+
if (v instanceof ArrayBuffer)
|
|
67
|
+
return new Uint8Array(v);
|
|
68
|
+
return new Uint8Array();
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=session-seal-leaf-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-seal-leaf-store.js","sourceRoot":"","sources":["../src/session-seal-leaf-store.ts"],"names":[],"mappings":"AAuCA,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;CAelB,CAAC;AAEF,MAAM,OAAO,oBAAoB;IACtB,GAAG,CAAiB;IACpB,OAAO,CAAS;IAEzB,YAAY,EAAkB,EAAE,MAAc;QAC5C,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAsB,EAAE,YAAoB,EAAE,IAAmB,EAAE,UAAkB;QACzF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG;aAClB,OAAO,CACN;;kDAE0C,CAC3C;aACA,GAAG,CACF,cAAc,EACd,YAAY,EACZ,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,eAAe,EACpB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAChC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAChC,IAAI,CAAC,OAAO,IAAI,IAAI,EACpB,IAAI,CAAC,cAAc,IAAI,IAAI,EAC3B,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAC9B,UAAU,CACX,CAAC;QACJ,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAC,cAAsB,EAAE,YAAoB;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG;aAClB,OAAO,CACN;2GACmG,CACpG;aACA,GAAG,CAAC,cAAc,EAAE,YAAY,CAAmC,CAAC;QACvE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,cAAc,EAAE,CAAC,CAAC,eAAyB;YAC3C,QAAQ,EAAE,CAAC,CAAC,SAAmB;YAC/B,eAAe,EAAE,CAAC,CAAC,iBAA2B;YAC9C,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC;YACvC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC;YACvC,OAAO,EAAG,CAAC,CAAC,QAA0B,IAAI,SAAS;YACnD,cAAc,EAAG,CAAC,CAAC,eAAiC,IAAI,SAAS;YACjE,iBAAiB,EAAG,CAAC,CAAC,eAAiC,IAAI,SAAS;SACrE,CAAC,CAAC,CAAC;IACN,CAAC;CACF;AAED,+EAA+E;AAC/E,SAAS,IAAI,CAAC,CAAU;IACtB,IAAI,CAAC,YAAY,UAAU;QAAE,OAAO,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,UAAU,CAAC,CAAW,CAAC,CAAC;IAC3D,IAAI,CAAC,YAAY,WAAW;QAAE,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IACvD,OAAO,IAAI,UAAU,EAAE,CAAC;AAC1B,CAAC"}
|