@cello-protocol/daemon 0.0.193 → 0.0.195
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/assignment-verify.d.ts +39 -11
- package/dist/assignment-verify.d.ts.map +1 -1
- package/dist/assignment-verify.js +133 -17
- package/dist/assignment-verify.js.map +1 -1
- package/dist/authorship-verification.d.ts +70 -0
- package/dist/authorship-verification.d.ts.map +1 -0
- package/dist/authorship-verification.js +441 -0
- package/dist/authorship-verification.js.map +1 -0
- package/dist/daemon.js +4 -1
- package/dist/daemon.js.map +1 -1
- package/dist/db-identity-store.d.ts +1 -0
- package/dist/db-identity-store.d.ts.map +1 -1
- package/dist/db-identity-store.js +19 -1
- package/dist/db-identity-store.js.map +1 -1
- package/dist/held-content.d.ts +141 -0
- package/dist/held-content.d.ts.map +1 -0
- package/dist/held-content.js +388 -0
- package/dist/held-content.js.map +1 -0
- package/dist/inbound-refusals.d.ts +283 -0
- package/dist/inbound-refusals.d.ts.map +1 -0
- package/dist/inbound-refusals.js +919 -0
- package/dist/inbound-refusals.js.map +1 -0
- package/dist/inbound-sessions.d.ts +1 -1
- package/dist/inbound-sessions.d.ts.map +1 -1
- package/dist/inbound-sessions.js +189 -32
- package/dist/inbound-sessions.js.map +1 -1
- package/dist/initiate-session-handler.d.ts.map +1 -1
- package/dist/initiate-session-handler.js +82 -0
- package/dist/initiate-session-handler.js.map +1 -1
- package/dist/outbound-sessions.d.ts.map +1 -1
- package/dist/outbound-sessions.js +108 -8
- package/dist/outbound-sessions.js.map +1 -1
- package/dist/park-recovery.d.ts +205 -0
- package/dist/park-recovery.d.ts.map +1 -0
- package/dist/park-recovery.js +600 -0
- package/dist/park-recovery.js.map +1 -0
- package/dist/refusal-notices.d.ts +196 -0
- package/dist/refusal-notices.d.ts.map +1 -0
- package/dist/refusal-notices.js +496 -0
- package/dist/refusal-notices.js.map +1 -0
- package/dist/refusal-reasons.d.ts +34 -0
- package/dist/refusal-reasons.d.ts.map +1 -1
- package/dist/refusal-reasons.js +84 -0
- package/dist/refusal-reasons.js.map +1 -1
- package/dist/registration-manager.d.ts.map +1 -1
- package/dist/registration-manager.js +126 -5
- package/dist/registration-manager.js.map +1 -1
- package/dist/registration-persistence.d.ts +18 -0
- package/dist/registration-persistence.d.ts.map +1 -1
- package/dist/registration-persistence.js +6 -0
- package/dist/registration-persistence.js.map +1 -1
- package/dist/session-assignment-parser.d.ts.map +1 -1
- package/dist/session-assignment-parser.js +23 -1
- package/dist/session-assignment-parser.js.map +1 -1
- package/dist/session-ceremony.d.ts +12 -7
- package/dist/session-ceremony.d.ts.map +1 -1
- package/dist/session-ceremony.js +12 -7
- package/dist/session-ceremony.js.map +1 -1
- package/dist/session-ephemerals.d.ts +271 -0
- package/dist/session-ephemerals.d.ts.map +1 -0
- package/dist/session-ephemerals.js +546 -0
- package/dist/session-ephemerals.js.map +1 -0
- package/dist/session-leaf-records.d.ts +132 -0
- package/dist/session-leaf-records.d.ts.map +1 -0
- package/dist/session-leaf-records.js +320 -0
- package/dist/session-leaf-records.js.map +1 -0
- package/dist/session-liveness.d.ts +135 -0
- package/dist/session-liveness.d.ts.map +1 -0
- package/dist/session-liveness.js +347 -0
- package/dist/session-liveness.js.map +1 -0
- package/dist/session-node-manager.d.ts +293 -1652
- package/dist/session-node-manager.d.ts.map +1 -1
- package/dist/session-node-manager.js +1039 -9659
- package/dist/session-node-manager.js.map +1 -1
- package/dist/session-node-types.d.ts +933 -0
- package/dist/session-node-types.d.ts.map +1 -0
- package/dist/session-node-types.js +576 -0
- package/dist/session-node-types.js.map +1 -0
- package/dist/session-own-chain-store.d.ts +65 -0
- package/dist/session-own-chain-store.d.ts.map +1 -0
- package/dist/session-own-chain-store.js +75 -0
- package/dist/session-own-chain-store.js.map +1 -0
- package/dist/session-queries.d.ts +476 -0
- package/dist/session-queries.d.ts.map +1 -0
- package/dist/session-queries.js +1006 -0
- package/dist/session-queries.js.map +1 -0
- package/dist/session-records.d.ts +320 -0
- package/dist/session-records.d.ts.map +1 -0
- package/dist/session-records.js +792 -0
- package/dist/session-records.js.map +1 -0
- package/dist/session-relay-client.d.ts +35 -3
- package/dist/session-relay-client.d.ts.map +1 -1
- package/dist/session-relay-client.js +211 -30
- package/dist/session-relay-client.js.map +1 -1
- package/dist/session-salts.d.ts +390 -0
- package/dist/session-salts.d.ts.map +1 -0
- package/dist/session-salts.js +1457 -0
- package/dist/session-salts.js.map +1 -0
- package/dist/session-schema.d.ts +30 -0
- package/dist/session-schema.d.ts.map +1 -0
- package/dist/session-schema.js +786 -0
- package/dist/session-schema.js.map +1 -0
- package/dist/standing-receivers.d.ts +280 -0
- package/dist/standing-receivers.d.ts.map +1 -0
- package/dist/standing-receivers.js +1100 -0
- package/dist/standing-receivers.js.map +1 -0
- package/dist/transport-selector.d.ts +13 -0
- package/dist/transport-selector.d.ts.map +1 -1
- package/dist/transport-selector.js.map +1 -1
- package/dist/witness-alerts.d.ts +40 -0
- package/dist/witness-alerts.d.ts.map +1 -0
- package/dist/witness-alerts.js +102 -0
- package/dist/witness-alerts.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CELLO Daemon — MAIL THAT WAITED
|
|
3
|
+
*
|
|
4
|
+
* Split out of `session-node-manager.ts` by 036-GODFILE, Part 6. The relay store-and-forward path:
|
|
5
|
+
* depositing content the counterparty could not take live, recovering it when they come back, and
|
|
6
|
+
* the backstop sweep that drains it even when a trigger is missing.
|
|
7
|
+
*
|
|
8
|
+
* Moved verbatim, comments included.
|
|
9
|
+
*
|
|
10
|
+
* ⚠️ THE BACKSTOP SWEEP EXISTS BECAUSE THE INCIDENT WAS A MISSING TRIGGER, and a missing trigger is
|
|
11
|
+
* invisible: the daemon looked healthy, the content was intact on the relay, and the only thing that
|
|
12
|
+
* ever moved it was a human restarting the daemon. Do not delete it as redundant — the trigger-driven
|
|
13
|
+
* drains are what deliver, and this is what bounds the cost of the next gap in trigger coverage to
|
|
14
|
+
* one interval of latency.
|
|
15
|
+
*/
|
|
16
|
+
import type { Logger, SessionRecord } from "./types.js";
|
|
17
|
+
import type { SealCarryLeaf } from "./session-seal-leaf-store.js";
|
|
18
|
+
import type { SessionTree } from "./session-tree.js";
|
|
19
|
+
import type { InboundRefusals } from "./inbound-refusals.js";
|
|
20
|
+
import { type ParkedDrainReason, type ParkAttempt, type ActiveSessionEntry } from "./session-node-types.js";
|
|
21
|
+
import { type ParkAuthFailure } from "./park-envelope.js";
|
|
22
|
+
/** What park recovery needs from the manager, stated explicitly rather than handed `this`. */
|
|
23
|
+
export interface ParkContext {
|
|
24
|
+
readonly logger: Logger;
|
|
25
|
+
readonly refusals: InboundRefusals;
|
|
26
|
+
shuttingDown(): boolean;
|
|
27
|
+
sessionKey(agentName: string, sessionId: string): string;
|
|
28
|
+
requireAgentId(agentName: string): string;
|
|
29
|
+
ownPubkeyHex(agentName: string): string | null;
|
|
30
|
+
/** The live session entry, when one exists. Park works for sessions that have none. */
|
|
31
|
+
activeEntry(key: string): ActiveSessionEntry | undefined;
|
|
32
|
+
/** Agents currently holding a standing receiver — the backstop sweep's population. */
|
|
33
|
+
agentsWithLiveReceiver(): Iterable<string>;
|
|
34
|
+
agentWantsReceiver(agentName: string): boolean;
|
|
35
|
+
getSessionRecord(agentName: string, sessionId: string): SessionRecord | null;
|
|
36
|
+
getSealCarry(agentName: string, sessionId: string): readonly SealCarryLeaf[];
|
|
37
|
+
getSessionTree(agentName: string, sessionId: string): SessionTree;
|
|
38
|
+
recordOrderingRecord(agentName: string, sessionId: string, structure1Cbor: Uint8Array, structure2Cbor: Uint8Array, contentHash: Uint8Array, correlationId?: string): number | null;
|
|
39
|
+
ingestReceivedContent(agentName: string, sessionId: string, content: Uint8Array, contentHash: Uint8Array, correlationId?: string, recoveredSeq?: number, contentHashAlgIn?: string | null): Promise<{
|
|
40
|
+
ok: true;
|
|
41
|
+
leafIndex: number;
|
|
42
|
+
sequenceNumber: number;
|
|
43
|
+
held?: boolean;
|
|
44
|
+
appendedCount?: number;
|
|
45
|
+
screenedOut?: boolean;
|
|
46
|
+
} | {
|
|
47
|
+
ok: false;
|
|
48
|
+
reason: string;
|
|
49
|
+
}>;
|
|
50
|
+
witnessReceivedLeaf(agentName: string, sessionId: string, contentHash: Uint8Array, structure1Cbor: Uint8Array, senderSignature: Uint8Array, leafKind: number, correlationId?: string): void;
|
|
51
|
+
noteAcknowledgeable(agentName: string, sessionId: string, canonicalSeq: number, contentHash: Uint8Array): void;
|
|
52
|
+
}
|
|
53
|
+
export declare class ParkRecovery {
|
|
54
|
+
#private;
|
|
55
|
+
constructor(ctx: ParkContext, parkedDrainBackstopMs: number);
|
|
56
|
+
/**
|
|
57
|
+
* Arm the backstop clock from the START of watching, not from the epoch — otherwise the first
|
|
58
|
+
* tick always fires a sweep on top of the install drain that just ran.
|
|
59
|
+
*/
|
|
60
|
+
armBackstopClock(now: number): void;
|
|
61
|
+
/** Arm the park-deposit fault. Returns the count now armed. */
|
|
62
|
+
injectParkFault(count: number, cause?: string): number;
|
|
63
|
+
/** Remaining armed park faults — so a test can assert the fault was actually consumed. */
|
|
64
|
+
getParkFaultRemaining(): number;
|
|
65
|
+
/**
|
|
66
|
+
* MSG-001-3b (2b): inject the live content-park deposit (seal + ContentParkClient.deposit).
|
|
67
|
+
* Injected by the composition root (daemon.ts). When absent, a not-confirmed send still records
|
|
68
|
+
* the durable awaiting entry (crash backstop) but does not deposit live.
|
|
69
|
+
* DOD-LEAVEMSG-1 (cello-unit-reviewer HIGH fix): the hook returns a TYPED result — `{ok:true}` or
|
|
70
|
+
* `{ok:false, reason}` — mirroring RetryQueue's ParkFn contract. It must NEVER resolve `{ok:true}`
|
|
71
|
+
* merely because it didn't throw: the production hook's own failure branches (standing receiver
|
|
72
|
+
* unavailable, relay explicitly rejects the deposit) log-and-return without throwing, and a
|
|
73
|
+
* throw-only contract would silently report those as success — the exact "system lies about its
|
|
74
|
+
* own health" bug the reviewer caught (a park that never happened reported to the operator as
|
|
75
|
+
* "dispatched to relay," with the durable retry_queue backstop skipped because sendContent's own
|
|
76
|
+
* caller only enqueues on an honest {ok:false}).
|
|
77
|
+
*/
|
|
78
|
+
setContentParkHook(fn: (args: {
|
|
79
|
+
agentName: string;
|
|
80
|
+
sessionId: string;
|
|
81
|
+
recipientPubkeyHex: string;
|
|
82
|
+
relayPeerId: string;
|
|
83
|
+
relayAddrs: readonly string[];
|
|
84
|
+
contentHashHex: string;
|
|
85
|
+
content: Uint8Array;
|
|
86
|
+
structure1Cbor?: Uint8Array;
|
|
87
|
+
structure2Cbor?: Uint8Array;
|
|
88
|
+
structure1Signature?: Uint8Array;
|
|
89
|
+
leafKind?: number;
|
|
90
|
+
contentHashAlg: string | undefined;
|
|
91
|
+
}) => Promise<{
|
|
92
|
+
ok: true;
|
|
93
|
+
} | {
|
|
94
|
+
ok: false;
|
|
95
|
+
reason: string;
|
|
96
|
+
cause?: string;
|
|
97
|
+
retryAfterMs?: number;
|
|
98
|
+
}>): void;
|
|
99
|
+
/**
|
|
100
|
+
* DOD-PARK-DRAIN-1: inject the parked-mailbox drain (daemon.ts → contentPark.autoRecoverForAgent).
|
|
101
|
+
*
|
|
102
|
+
* The manager owns the two events that mean "content may be waiting for this agent on a relay":
|
|
103
|
+
* a standing receiver was (re)built, and the slow backstop sweep. It does not own the drain
|
|
104
|
+
* itself — that needs the agent's key provider and the inbound ingest funnel. So it calls out.
|
|
105
|
+
*
|
|
106
|
+
* Injected by the composition root, not passed to the constructor: the manager is built long
|
|
107
|
+
* before the content park exists (content-park.ts documents why that ordering is load-bearing).
|
|
108
|
+
*/
|
|
109
|
+
setParkedDrainHook(fn: (agentName: string, reason: ParkedDrainReason) => void): void;
|
|
110
|
+
/** Ask for a drain. Never throws — a broken drain must never cost the caller its receiver. */
|
|
111
|
+
fireParkedDrain(agentName: string, reason: ParkedDrainReason): void;
|
|
112
|
+
/**
|
|
113
|
+
* MSG-001-3b (2b): deposit un-confirmed content to the relay store-and-forward backstop — keyed
|
|
114
|
+
* to the recipient, on the SAME relay this session is witnessed by — so an offline recipient
|
|
115
|
+
* recovers it (at the sequence the witness already assigned, R1). Best-effort, never throws.
|
|
116
|
+
* DOD-LEAVEMSG-1: returns whether the deposit actually succeeded (false if no hook/relay is
|
|
117
|
+
* configured, or the hook rejects) so a caller with a live response to shape (sendContent) can
|
|
118
|
+
* distinguish "genuinely parked" from "nothing recoverable" instead of guessing. Callers that
|
|
119
|
+
* fire this from an async backstop with no live caller (the TTF-expiry path) may ignore the
|
|
120
|
+
* result — the deposit itself and its logging are unchanged either way.
|
|
121
|
+
*/
|
|
122
|
+
/**
|
|
123
|
+
* `contentHashAlg` is `string | undefined`, NOT optional — B2b-1 review F4's shape, applied to the
|
|
124
|
+
* last place it was missing.
|
|
125
|
+
*
|
|
126
|
+
* Optional, dropping it at a call site was neither a typecheck error nor a test failure, because
|
|
127
|
+
* absent silently means `sha256` and that is the only value in play today. Measured: the
|
|
128
|
+
* direct-dial-fail route's mutant SURVIVED the whole daemon suite. Requiring the argument — even
|
|
129
|
+
* when its value is `undefined` — forces each of the three callers to state what this message was
|
|
130
|
+
* hashed under, so a new fourth caller cannot omit it by accident.
|
|
131
|
+
*/
|
|
132
|
+
parkContent(agentName: string, sessionId: string, contentHashHex: string, content: Uint8Array, structure1Cbor: Uint8Array | undefined, structure2Cbor: Uint8Array | undefined, contentHashAlg: string | undefined, structure1Signature?: Uint8Array, parkLeafKind?: number): Promise<ParkAttempt>;
|
|
133
|
+
/** DOD-M12B-INDEX-1 — this agent's own K_local pubkey, for attributing its own held content.
|
|
134
|
+
* Null when it cannot be resolved: an UNATTRIBUTED annex row is true, a falsely attributed one
|
|
135
|
+
* is not, and this is the record that outlives the session. */
|
|
136
|
+
/**
|
|
137
|
+
* Test seam for `#recoverOwnSealCtrlLeaf` (documented on the method itself, below). The
|
|
138
|
+
* distinction it draws — "there is none" versus "I could not tell" — is the whole safety
|
|
139
|
+
* property, and it had no coverage at any level.
|
|
140
|
+
*/
|
|
141
|
+
recoverOwnSealCtrlLeafForTest(agentName: string, sessionId: string): {
|
|
142
|
+
reportedRootHex: string;
|
|
143
|
+
sequenceNumber: number;
|
|
144
|
+
} | "none" | "unknown";
|
|
145
|
+
/**
|
|
146
|
+
* DOD-M12B-INTERRUPTED-ESCALATE-1 — our own SEAL ctrl leaf, if a previous run already posted one.
|
|
147
|
+
*
|
|
148
|
+
* Returns the two values a unilateral escalation runs on, rebuilt from durable state:
|
|
149
|
+
* the ctrl leaf's relay-assigned sequence, and the root the tree WOULD have with that leaf
|
|
150
|
+
* appended. The content hash cannot be recomputed — the seal payload embeds a `close_timestamp`
|
|
151
|
+
* — so it is read out of the signed Structure 1 the store already holds.
|
|
152
|
+
*
|
|
153
|
+
* Null when there is no own ctrl leaf, which is the ordinary first-close case.
|
|
154
|
+
*/
|
|
155
|
+
recoverOwnSealCtrlLeaf(agentName: string, sessionId: string): {
|
|
156
|
+
reportedRootHex: string;
|
|
157
|
+
sequenceNumber: number;
|
|
158
|
+
} | "none" | "unknown";
|
|
159
|
+
/**
|
|
160
|
+
* SEC-1 — THE ONLY WAY PARKED CONTENT ENTERS THE TRANSCRIPT.
|
|
161
|
+
*
|
|
162
|
+
* Authentication and ingest are FUSED here on purpose, and must stay fused. A caller cannot ingest
|
|
163
|
+
* parked content without passing the signature gate, because this is the only entry point. Exposing
|
|
164
|
+
* a separate `decode → ingest` path — with the signature check as its own optional step — is a
|
|
165
|
+
* downgrade attack: an attacker omits the thing that triggers the check, and the check never runs.
|
|
166
|
+
* A gate the caller can skip by leaving a field out is not a gate.
|
|
167
|
+
*
|
|
168
|
+
* FAILS CLOSED. No signature / bad signature / signer is not this session's counterparty / no
|
|
169
|
+
* session at all → REFUSED, nothing is appended, nothing is written, and the caller MUST NOT
|
|
170
|
+
* confirm-delete the entry from the relay (a forgery must not be able to evict itself, and a
|
|
171
|
+
* genuine bug must not silently eat mail).
|
|
172
|
+
*/
|
|
173
|
+
recoverParkedEntry(agentName: string, sessionId: string, recipientPubkey: Uint8Array, unsealed: Uint8Array, contentHash: Uint8Array, correlationId?: string): Promise<{
|
|
174
|
+
ok: true;
|
|
175
|
+
leafIndex: number;
|
|
176
|
+
sequenceNumber: number;
|
|
177
|
+
held?: boolean;
|
|
178
|
+
appendedCount?: number;
|
|
179
|
+
screenedOut?: boolean;
|
|
180
|
+
} | {
|
|
181
|
+
ok: false;
|
|
182
|
+
reason: string;
|
|
183
|
+
}>;
|
|
184
|
+
/**
|
|
185
|
+
* Review M4: bounded memo of parked entries we have already refused, so a mailbox stuffed with
|
|
186
|
+
* forgeries cannot force an unbounded unseal+verify on every reconnect. FIFO-capped — the cap
|
|
187
|
+
* matters more than the retention: forgetting an entry only costs one extra verification, whereas
|
|
188
|
+
* an unbounded map would be a memory leak fed by a remote party (the exact class the DOD-MSG-4
|
|
189
|
+
* review already caught once in the offered-moniker map).
|
|
190
|
+
*/
|
|
191
|
+
rememberRefusedParkedEntry(key: string, reason: ParkAuthFailure): void;
|
|
192
|
+
/**
|
|
193
|
+
* DOD-PARK-DRAIN-1: the backstop sweep — every agent holding a standing receiver gets a drain
|
|
194
|
+
* every #parkedDrainBackstopMs, whether or not anything happened.
|
|
195
|
+
*
|
|
196
|
+
* The trigger-driven drains (agent start, receiver rebuild, signaling reconnect) are what
|
|
197
|
+
* actually deliver. This exists because the incident was a MISSING trigger, and a missing
|
|
198
|
+
* trigger is invisible: the daemon looked healthy, the content was intact on the relay, and the
|
|
199
|
+
* only thing that ever moved it was a human restarting the daemon. With the sweep, the worst a
|
|
200
|
+
* future gap in trigger coverage can cost is one interval of latency. Safe by construction —
|
|
201
|
+
* ingest is deduped and the relay is delete-on-confirm, so a redundant drain pulls nothing.
|
|
202
|
+
*/
|
|
203
|
+
parkedDrainBackstopTick(now: number): void;
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=park-recovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"park-recovery.d.ts","sourceRoot":"","sources":["../src/park-recovery.ts"],"names":[],"mappings":"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"}
|