@cello-protocol/client 0.0.3 → 0.0.5

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.
@@ -0,0 +1,290 @@
1
+ /**
2
+ * CELLO-PERSIST-024 — Client State Persistence Layer
3
+ *
4
+ * Provides structured DB operations for persisting and loading client state
5
+ * using the V2 SQLCipher schema. All methods operate on the structured tables
6
+ * (not the deprecated client_store KV table).
7
+ *
8
+ * Security invariants:
9
+ * SI-001: signing_share MUST NOT appear in any log event or error message.
10
+ * SI-002: secret_key_blob MUST NOT appear in any log event or error message.
11
+ * SI-003: db_key is never stored — derived at runtime from K_local via HKDF.
12
+ * SI-004: relay_ack_receipts is append-only (INSERT OR IGNORE).
13
+ */
14
+ import type { Logger } from "@cello-protocol/interfaces";
15
+ import type { SQLCipherClientStore } from "./sqlcipher-client-store.js";
16
+ import type { SignalRequirementPolicy } from "./connection-policy.js";
17
+ import type { SessionRecord } from "./types.js";
18
+ export interface FrostKeyShareRow {
19
+ agent_pubkey: string;
20
+ epoch_id: string;
21
+ primary_pubkey: string;
22
+ identifier: string;
23
+ signing_share: Buffer | Uint8Array;
24
+ threshold: number;
25
+ participants: number;
26
+ commitments_cbor: Buffer | Uint8Array;
27
+ verifying_shares_cbor: Buffer | Uint8Array;
28
+ dkg_method: string;
29
+ is_active: number;
30
+ }
31
+ export interface MlDsaKeypairRow {
32
+ agent_pubkey: string;
33
+ ml_dsa_pubkey: string;
34
+ secret_key_blob: Buffer | Uint8Array;
35
+ algorithm: string;
36
+ }
37
+ export interface RegistrationStateRow {
38
+ agent_pubkey: string;
39
+ agent_id: string;
40
+ primary_pubkey: string;
41
+ ml_dsa_pubkey: string;
42
+ registered_at: number;
43
+ status: string;
44
+ }
45
+ export interface ConnectionRow {
46
+ connection_id: string;
47
+ agent_pubkey: string;
48
+ counterparty_pubkey: string;
49
+ counterparty_primary_pubkey: string;
50
+ counterparty_ml_dsa_pubkey: string;
51
+ established_at: number;
52
+ status: string;
53
+ profile_unchecked: number;
54
+ }
55
+ export interface ConnectionPolicyRow {
56
+ agent_pubkey: string;
57
+ mode: string;
58
+ review_mode: string;
59
+ }
60
+ export interface ConnectionPolicyRequirementRow {
61
+ agent_pubkey: string;
62
+ position: number;
63
+ signal_type: string;
64
+ condition_json: string;
65
+ }
66
+ export interface SessionRow {
67
+ session_id: string;
68
+ agent_pubkey: string;
69
+ counterparty_pubkey: Buffer | Uint8Array;
70
+ counterparty_peer_id: string;
71
+ counterparty_multiaddrs: string;
72
+ relay_peer_id: string;
73
+ relay_multiaddrs: string;
74
+ directory_peer_id: string;
75
+ directory_multiaddrs: string;
76
+ directory_pubkey: Buffer | Uint8Array;
77
+ genesis_prev_root: Buffer | Uint8Array;
78
+ last_seen_seq: number;
79
+ last_sent_seq: number;
80
+ next_expected_seq: number;
81
+ status: string;
82
+ desynchronized: number;
83
+ leaf_count: number;
84
+ sealed_root: Buffer | Uint8Array | null;
85
+ seal_type: string | null;
86
+ close_timestamp: number | null;
87
+ frost_signature: Buffer | Uint8Array | null;
88
+ signer_pubkey: Buffer | Uint8Array | null;
89
+ directory_signature: Buffer | Uint8Array | null;
90
+ }
91
+ export interface SessionTreeLeafRow {
92
+ session_id: string;
93
+ agent_pubkey: string;
94
+ leaf_index: number;
95
+ leaf_kind: string;
96
+ s2_cbor: Buffer | Uint8Array;
97
+ sequence_number: number;
98
+ }
99
+ export interface PeerRow {
100
+ agent_pubkey: string;
101
+ peer_pubkey_hex: string;
102
+ peer_id: string;
103
+ multiaddrs: string;
104
+ }
105
+ export interface PendingHashRow {
106
+ id: number;
107
+ agent_pubkey: string;
108
+ session_id: string;
109
+ hash_hex: string;
110
+ enqueued_at: number;
111
+ }
112
+ export interface DecidedConnectionRequestRow {
113
+ request_id: string;
114
+ agent_pubkey: string;
115
+ decision: string;
116
+ }
117
+ export interface PendingConnectionRequestRow {
118
+ request_id: string;
119
+ agent_pubkey: string;
120
+ from_pubkey: string;
121
+ package_cbor: Buffer | Uint8Array;
122
+ round: number;
123
+ }
124
+ export interface ClientStatePersistenceOptions {
125
+ store: SQLCipherClientStore;
126
+ agentPubkey: string;
127
+ keyFilePath: string;
128
+ logger: Logger;
129
+ }
130
+ /**
131
+ * Client state persistence layer.
132
+ *
133
+ * Provides type-safe methods for persisting and loading all durable state
134
+ * from the V2 structured SQLCipher schema.
135
+ */
136
+ export declare class ClientStatePersistence {
137
+ #private;
138
+ constructor(opts: ClientStatePersistenceOptions);
139
+ /** Upsert the agent row (called on every startup). */
140
+ upsertAgent(): Promise<void>;
141
+ /** Persist a FROST key share after DKG completes. */
142
+ persistFrostKeyShare(opts: {
143
+ epochId: string;
144
+ primaryPubkey: string;
145
+ identifier: string;
146
+ signingShare: Uint8Array;
147
+ threshold: number;
148
+ participants: number;
149
+ commitmentsCbor: Uint8Array;
150
+ verifyingSharesCbor: Uint8Array;
151
+ dkgMethod: "trusted_dealer" | "network_dkg";
152
+ }): Promise<void>;
153
+ /** Load the active FROST key share for this agent. */
154
+ loadActiveFrostKeyShare(): Promise<FrostKeyShareRow | undefined>;
155
+ /** Persist an ML-DSA keypair after registration. */
156
+ persistMlDsaKeypair(opts: {
157
+ mlDsaPubkey: string;
158
+ secretKeyBlob: Uint8Array;
159
+ }): Promise<void>;
160
+ /** Load the ML-DSA keypair for this agent. */
161
+ loadMlDsaKeypair(): Promise<MlDsaKeypairRow | undefined>;
162
+ /** Persist registration state after successful register(). */
163
+ persistRegistrationState(opts: {
164
+ agentId: string;
165
+ primaryPubkey: string;
166
+ mlDsaPubkey: string;
167
+ registeredAt: number;
168
+ }): Promise<void>;
169
+ /** Load registration state for this agent. */
170
+ loadRegistrationState(): Promise<RegistrationStateRow | undefined>;
171
+ /** Persist a connection record. */
172
+ persistConnection(opts: {
173
+ connectionId: string;
174
+ counterpartyPubkey: string;
175
+ counterpartyPrimaryPubkey?: string;
176
+ counterpartyMlDsaPubkey?: string;
177
+ establishedAt: number;
178
+ profileUnchecked?: boolean;
179
+ }): Promise<void>;
180
+ /** Load all connections for this agent. */
181
+ loadConnections(): Promise<ConnectionRow[]>;
182
+ /** Persist connection policy (upsert mode + requirements in a single transaction). */
183
+ persistConnectionPolicy(policy: SignalRequirementPolicy): Promise<void>;
184
+ /** Load connection policy for this agent. */
185
+ loadConnectionPolicy(): Promise<SignalRequirementPolicy | undefined>;
186
+ /** Persist a session record. */
187
+ persistSession(sessionIdHex: string, record: SessionRecord): Promise<void>;
188
+ /** Load all sessions for this agent. */
189
+ loadSessions(): Promise<SessionRow[]>;
190
+ /** Persist a single session tree leaf. */
191
+ persistSessionTreeLeaf(opts: {
192
+ sessionIdHex: string;
193
+ leafIndex: number;
194
+ leafKind: "msg" | "ctrl";
195
+ s2Cbor: Uint8Array;
196
+ sequenceNumber: number;
197
+ }): Promise<void>;
198
+ /** Load all leaves for a session in order. */
199
+ loadSessionTreeLeaves(sessionIdHex: string): Promise<SessionTreeLeafRow[]>;
200
+ /** Persist a peer record. */
201
+ persistPeer(opts: {
202
+ peerPubkeyHex: string;
203
+ peerId: string;
204
+ multiaddrs: string[];
205
+ }): Promise<void>;
206
+ /** Load all peers for this agent. */
207
+ loadPeers(): Promise<PeerRow[]>;
208
+ /** Persist a pending hash entry. */
209
+ persistPendingHash(opts: {
210
+ sessionId: string;
211
+ hashHex: string;
212
+ enqueuedAt: number;
213
+ }): Promise<void>;
214
+ /** Remove a pending hash after ACK is stored. */
215
+ removePendingHash(sessionId: string, hashHex: string): Promise<void>;
216
+ /** Load all pending hashes for this agent. */
217
+ loadPendingHashes(): Promise<PendingHashRow[]>;
218
+ /** Persist a relay ACK receipt. SI-004: INSERT OR IGNORE — first ACK wins. */
219
+ persistRelayAckReceipt(opts: {
220
+ hashHex: string;
221
+ sessionId: string;
222
+ relayId: string;
223
+ relayPubkeyHex: string;
224
+ sequenceNumber: number;
225
+ relayTimestamp: number;
226
+ signatureHex: string;
227
+ }): Promise<{
228
+ isDuplicate: boolean;
229
+ }>;
230
+ /** Cache a relay pubkey. */
231
+ persistKnownRelay(relayId: string, relayPubkeyHex: string, source: string): Promise<void>;
232
+ /** Look up a cached relay pubkey. */
233
+ lookupKnownRelay(relayId: string): Promise<string | undefined>;
234
+ /** Persist a pending inbound connection request. */
235
+ persistPendingConnectionRequest(opts: {
236
+ requestId: string;
237
+ fromPubkey: string;
238
+ packageCbor: Uint8Array;
239
+ round: number;
240
+ }): Promise<void>;
241
+ /** Remove from pending and insert into decided (atomic — wrapped in a transaction). */
242
+ decidePendingConnectionRequest(requestId: string, decision: "accepted" | "rejected" | "more_disclosure"): Promise<void>;
243
+ /** Load pending connection requests. */
244
+ loadPendingConnectionRequests(): Promise<PendingConnectionRequestRow[]>;
245
+ /** Load decided connection request IDs. */
246
+ loadDecidedConnectionRequests(): Promise<DecidedConnectionRequestRow[]>;
247
+ /** Load non-expired endorsements. */
248
+ loadEndorsements(nowMs: number): Promise<Array<Record<string, unknown>>>;
249
+ /** Load non-expired attestations. */
250
+ loadAttestations(nowMs: number): Promise<Array<Record<string, unknown>>>;
251
+ /** Persist backup metadata. */
252
+ persistBackupMetadata(opts: {
253
+ completedAt: string;
254
+ destinationUrl: string;
255
+ checksum: string;
256
+ }): Promise<void>;
257
+ /** Load backup metadata. */
258
+ loadBackupMetadata(): Promise<{
259
+ destination_url: string;
260
+ checksum: string;
261
+ completed_at: string;
262
+ } | undefined>;
263
+ /**
264
+ * Load all durable state from DB and emit the batch summary event.
265
+ * Returns counts and booleans for client.startup.state.loaded.
266
+ */
267
+ loadStartupState(): Promise<{
268
+ hasFrostShare: boolean;
269
+ hasMlDsaKeypair: boolean;
270
+ hasRegistration: boolean;
271
+ hasPolicy: boolean;
272
+ connectionCount: number;
273
+ sessionCount: number;
274
+ leafCount: number;
275
+ pendingHashCount: number;
276
+ frostShare: FrostKeyShareRow | undefined;
277
+ mlDsaKeypair: MlDsaKeypairRow | undefined;
278
+ registrationState: RegistrationStateRow | undefined;
279
+ connectionPolicy: SignalRequirementPolicy | undefined;
280
+ connections: ConnectionRow[];
281
+ sessions: SessionRow[];
282
+ peers: PeerRow[];
283
+ pendingHashes: PendingHashRow[];
284
+ decidedRequests: DecidedConnectionRequestRow[];
285
+ pendingConnectionRequests: PendingConnectionRequestRow[];
286
+ endorsements: Array<Record<string, unknown>>;
287
+ attestations: Array<Record<string, unknown>>;
288
+ }>;
289
+ }
290
+ //# sourceMappingURL=client-state-persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-state-persistence.d.ts","sourceRoot":"","sources":["../src/client-state-persistence.ts"],"names":[],"mappings":"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"}