@cello-protocol/client 0.0.21 → 0.0.23

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.
Files changed (57) hide show
  1. package/dist/client-send-helpers.d.ts +25 -0
  2. package/dist/client-send-helpers.d.ts.map +1 -0
  3. package/dist/client-send-helpers.js +118 -0
  4. package/dist/client-send-helpers.js.map +1 -0
  5. package/dist/client-startup.d.ts +74 -0
  6. package/dist/client-startup.d.ts.map +1 -0
  7. package/dist/client-startup.js +338 -0
  8. package/dist/client-startup.js.map +1 -0
  9. package/dist/client-wiring.d.ts +120 -0
  10. package/dist/client-wiring.d.ts.map +1 -0
  11. package/dist/client-wiring.js +289 -0
  12. package/dist/client-wiring.js.map +1 -0
  13. package/dist/client.d.ts +29 -169
  14. package/dist/client.d.ts.map +1 -1
  15. package/dist/client.js +222 -5396
  16. package/dist/client.js.map +1 -1
  17. package/dist/connection-inbound-handler.d.ts +47 -0
  18. package/dist/connection-inbound-handler.d.ts.map +1 -0
  19. package/dist/connection-inbound-handler.js +325 -0
  20. package/dist/connection-inbound-handler.js.map +1 -0
  21. package/dist/connection-manager.d.ts +191 -0
  22. package/dist/connection-manager.d.ts.map +1 -0
  23. package/dist/connection-manager.js +692 -0
  24. package/dist/connection-manager.js.map +1 -0
  25. package/dist/frame-dispatch.d.ts +28 -0
  26. package/dist/frame-dispatch.d.ts.map +1 -0
  27. package/dist/frame-dispatch.js +118 -0
  28. package/dist/frame-dispatch.js.map +1 -0
  29. package/dist/network-directory-node.d.ts +2 -0
  30. package/dist/network-directory-node.d.ts.map +1 -1
  31. package/dist/network-directory-node.js +24 -16
  32. package/dist/network-directory-node.js.map +1 -1
  33. package/dist/registration-manager.d.ts +54 -0
  34. package/dist/registration-manager.d.ts.map +1 -0
  35. package/dist/registration-manager.js +249 -0
  36. package/dist/registration-manager.js.map +1 -0
  37. package/dist/relay-stream-manager.d.ts +136 -0
  38. package/dist/relay-stream-manager.d.ts.map +1 -0
  39. package/dist/relay-stream-manager.js +834 -0
  40. package/dist/relay-stream-manager.js.map +1 -0
  41. package/dist/seal-manager.d.ts +133 -0
  42. package/dist/seal-manager.d.ts.map +1 -0
  43. package/dist/seal-manager.js +803 -0
  44. package/dist/seal-manager.js.map +1 -0
  45. package/dist/session-assignment-parser.d.ts +33 -0
  46. package/dist/session-assignment-parser.d.ts.map +1 -0
  47. package/dist/session-assignment-parser.js +149 -0
  48. package/dist/session-assignment-parser.js.map +1 -0
  49. package/dist/session-manager.d.ts +132 -0
  50. package/dist/session-manager.d.ts.map +1 -0
  51. package/dist/session-manager.js +611 -0
  52. package/dist/session-manager.js.map +1 -0
  53. package/dist/signaling-manager.d.ts +85 -0
  54. package/dist/signaling-manager.d.ts.map +1 -0
  55. package/dist/signaling-manager.js +605 -0
  56. package/dist/signaling-manager.js.map +1 -0
  57. package/package.json +2 -2
@@ -0,0 +1,120 @@
1
+ /**
2
+ * client-wiring.ts — Manager context object builders for CelloClientImpl.
3
+ *
4
+ * Extracted from the CelloClientImpl constructor to keep client.ts under the
5
+ * 600-line AC budget. Each build* function constructs the narrow context
6
+ * interface required by the corresponding manager.
7
+ *
8
+ * All context objects use lazy closures so that cross-manager references
9
+ * resolve at call-time — this is safe because by the time any method is
10
+ * invoked, all managers have been assigned on the facade.
11
+ */
12
+ import type { IThresholdSigner } from "@cello-protocol/crypto";
13
+ import type { KeyProvider } from "@cello-protocol/crypto";
14
+ import type { CelloNode } from "@cello-protocol/transport";
15
+ import type { Stream } from "@libp2p/interface";
16
+ import type { Logger } from "@cello-protocol/interfaces";
17
+ import type { ClientStatePersistence } from "./client-state-persistence.js";
18
+ import type { AgentHashQueue } from "./agent-hash-queue.js";
19
+ import type { RegistrationContext } from "./registration-manager.js";
20
+ import { RegistrationManager } from "./registration-manager.js";
21
+ import type { ConnectionContext } from "./connection-manager.js";
22
+ import { ConnectionManager } from "./connection-manager.js";
23
+ import type { SignalingContext } from "./signaling-manager.js";
24
+ import { SignalingManager } from "./signaling-manager.js";
25
+ import type { SessionContext } from "./session-manager.js";
26
+ import { SessionManager } from "./session-manager.js";
27
+ import type { SealContext } from "./seal-manager.js";
28
+ import { SealManager } from "./seal-manager.js";
29
+ import type { RelayStreamContext } from "./relay-stream-manager.js";
30
+ import { RelayStreamManager } from "./relay-stream-manager.js";
31
+ import type { SessionAssignment } from "@cello-protocol/protocol-types";
32
+ import type { ReceiveAssignmentResult, PeerEntry, SessionRecord } from "./types.js";
33
+ import type { StartupContext } from "./client-startup.js";
34
+ /**
35
+ * The wiring surface of CelloClientImpl — every field and method that the
36
+ * context-builder functions need to close over. Using this interface lets the
37
+ * builders live in a separate module without importing the concrete class.
38
+ */
39
+ export interface ClientWiringSurface {
40
+ readonly node: CelloNode;
41
+ readonly keyProvider: KeyProvider;
42
+ readonly logger: Logger;
43
+ readonly contentGraceMs: number;
44
+ readonly reconnectTimeoutMs: number;
45
+ readonly sealFrostTimeoutMs: number;
46
+ persistence: ClientStatePersistence | null;
47
+ hashQueue: AgentHashQueue | null;
48
+ thresholdSigner: IThresholdSigner | undefined;
49
+ myPubkeyHex: string | null;
50
+ directoryEndpoint: {
51
+ peer_id: string;
52
+ multiaddrs: string[];
53
+ } | null;
54
+ evaluateCallCount: number;
55
+ registrationManager: RegistrationManager;
56
+ connectionManager: ConnectionManager;
57
+ signalingManager: SignalingManager;
58
+ relayStreamManager: RelayStreamManager;
59
+ sealManager: SealManager;
60
+ sessionManager: SessionManager;
61
+ peers: Map<string, PeerEntry>;
62
+ endorsements: Array<Record<string, unknown>>;
63
+ attestations: Array<Record<string, unknown>>;
64
+ loadedPendingHashes: Array<{
65
+ sessionId: string;
66
+ hashHex: string;
67
+ enqueuedAt: number;
68
+ }>;
69
+ openPersistentSignalingStream(directoryPeerId?: string, directoryMultiaddr?: string): Promise<boolean>;
70
+ dispatchSignalingFrame(stream: Stream, frame: Record<string, unknown>): void;
71
+ onSignalingStreamClosed(stream: Stream): void;
72
+ receiveSessionAssignment(assignment: SessionAssignment, myPubkey: Uint8Array): Promise<ReceiveAssignmentResult>;
73
+ }
74
+ /** Build the RegistrationContext for RegistrationManager. */
75
+ export declare function buildRegistrationContext(f: ClientWiringSurface, mlDsaKeyFile: string | undefined): RegistrationContext;
76
+ /** Build the ConnectionContext for ConnectionManager. */
77
+ export declare function buildConnectionContext(f: ClientWiringSurface, connectionTimeoutMs: number, round2TimeoutMs: number, trackEvaluateCount: boolean, whitelist: string[], crossCheckDirectoryOnInbound: boolean): ConnectionContext;
78
+ /** Build the SignalingContext for SignalingManager. */
79
+ export declare function buildSignalingContext(f: ClientWiringSurface): SignalingContext;
80
+ /** Build the SessionContext for SessionManager. */
81
+ export declare function buildSessionContext(f: ClientWiringSurface): SessionContext;
82
+ /** Build the SealContext for SealManager. */
83
+ export declare function buildSealContext(f: ClientWiringSurface): SealContext;
84
+ /** Build the RelayStreamContext for RelayStreamManager. */
85
+ export declare function buildRelayStreamContext(f: ClientWiringSurface): RelayStreamContext;
86
+ /** Construction options that are used by multiple managers but are not facade fields. */
87
+ export interface ManagerConstructionOpts {
88
+ mlDsaKeyFile?: string;
89
+ connectionPolicy?: import("./connection-policy.js").SignalRequirementPolicy;
90
+ connectionTimeoutMs: number;
91
+ round2TimeoutMs: number;
92
+ trackEvaluateCount: boolean;
93
+ whitelist: string[];
94
+ onConnectionPendingReview?: (event: import("@cello-protocol/protocol-types").ConnectionRequestInbound) => void;
95
+ crossCheckDirectoryOnInbound: boolean;
96
+ }
97
+ /**
98
+ * Construct all six managers using the facade surface.
99
+ * Must be called after all facade fields are assigned (so lazy closures are safe).
100
+ * Assigns each manager to the corresponding field on the facade.
101
+ */
102
+ export declare function buildManagers(f: ClientWiringSurface, opts: ManagerConstructionOpts): void;
103
+ /**
104
+ * Build the StartupContext for loadClientStartupState.
105
+ * Extracted from CelloClientImpl.loadPersistedState to keep client.ts under 600 lines.
106
+ */
107
+ export declare function buildStartupContext(f: ClientWiringSurface): StartupContext;
108
+ /**
109
+ * Build and inject a synthetic SessionRecord for test isolation.
110
+ * Extracted from CelloClientImpl.injectTestSession.
111
+ */
112
+ export declare function injectTestSession(f: ClientWiringSurface, sessionIdHex: string, sessionId: Uint8Array, myPubkeyHex: string, directoryPubkey: Uint8Array, status?: SessionRecord["status"], opts?: {
113
+ isInitiator?: boolean;
114
+ }): void;
115
+ /**
116
+ * Route a directory frame to the appropriate SealManager handler.
117
+ * Extracted from CelloClientImpl.injectDirectoryFrame.
118
+ */
119
+ export declare function injectDirectoryFrame(f: ClientWiringSurface, sessionIdHex: string, frame: Record<string, unknown>): void;
120
+ //# sourceMappingURL=client-wiring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-wiring.d.ts","sourceRoot":"","sources":["../src/client-wiring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,289 @@
1
+ /**
2
+ * client-wiring.ts — Manager context object builders for CelloClientImpl.
3
+ *
4
+ * Extracted from the CelloClientImpl constructor to keep client.ts under the
5
+ * 600-line AC budget. Each build* function constructs the narrow context
6
+ * interface required by the corresponding manager.
7
+ *
8
+ * All context objects use lazy closures so that cross-manager references
9
+ * resolve at call-time — this is safe because by the time any method is
10
+ * invoked, all managers have been assigned on the facade.
11
+ */
12
+ import { RegistrationManager } from "./registration-manager.js";
13
+ import { ConnectionManager } from "./connection-manager.js";
14
+ import { SignalingManager } from "./signaling-manager.js";
15
+ import { SessionManager } from "./session-manager.js";
16
+ import { SealManager } from "./seal-manager.js";
17
+ import { RelayStreamManager } from "./relay-stream-manager.js";
18
+ // ─── Per-manager context builders ────────────────────────────────────────────
19
+ /** Build the RegistrationContext for RegistrationManager. */
20
+ export function buildRegistrationContext(f, mlDsaKeyFile) {
21
+ return {
22
+ get node() { return f.node; },
23
+ get keyProvider() { return f.keyProvider; },
24
+ get logger() { return f.logger; },
25
+ get persistence() { return f.persistence; },
26
+ get mlDsaKeyFile() { return mlDsaKeyFile; },
27
+ getMyPubkeyHex: () => f.myPubkeyHex,
28
+ setMyPubkeyHex: (hex) => { f.myPubkeyHex = hex; },
29
+ getDirectoryEndpoint: () => f.directoryEndpoint,
30
+ getThresholdSigner: () => f.thresholdSigner,
31
+ setThresholdSigner: (signer) => { f.thresholdSigner = signer; },
32
+ getMyPrimaryPubkey: () => f.sealManager.getMyPrimaryPubkey(),
33
+ setMyPrimaryPubkey: (pubkey) => { f.sealManager.setMyPrimaryPubkey(new Uint8Array(pubkey)); },
34
+ getPersistentSignalingStream: () => f.signalingManager.getPersistentSignalingStream(),
35
+ openPersistentSignalingStream: () => f.openPersistentSignalingStream(),
36
+ setPendingDkgReadyResolve: (r) => { f.signalingManager.setPendingDkgReadyResolve(r); },
37
+ setPendingRegisterResolve: (r) => { f.signalingManager.setPendingRegisterResolve(r); },
38
+ };
39
+ }
40
+ /** Build the ConnectionContext for ConnectionManager. */
41
+ export function buildConnectionContext(f, connectionTimeoutMs, round2TimeoutMs, trackEvaluateCount, whitelist, crossCheckDirectoryOnInbound) {
42
+ return {
43
+ get logger() { return f.logger; },
44
+ get persistence() { return f.persistence; },
45
+ get connectionTimeoutMs() { return connectionTimeoutMs; },
46
+ get round2TimeoutMs() { return round2TimeoutMs; },
47
+ get trackEvaluateCount() { return trackEvaluateCount; },
48
+ get whitelist() { return whitelist; },
49
+ get crossCheckDirectoryOnInbound() { return crossCheckDirectoryOnInbound; },
50
+ getPersistentSignalingStream: () => f.signalingManager.getPersistentSignalingStream(),
51
+ openPersistentSignalingStream: () => f.openPersistentSignalingStream(),
52
+ incrementEvaluateCallCount: () => { f.evaluateCallCount++; },
53
+ };
54
+ }
55
+ /** Build the SignalingContext for SignalingManager. */
56
+ export function buildSignalingContext(f) {
57
+ return {
58
+ get node() { return f.node; },
59
+ get keyProvider() { return f.keyProvider; },
60
+ get logger() { return f.logger; },
61
+ getMyPubkeyHex: () => f.myPubkeyHex,
62
+ setMyPubkeyHex: (hex) => { f.myPubkeyHex = hex; },
63
+ getDirectoryEndpoint: () => f.directoryEndpoint,
64
+ getDirectoryStream: (id) => f.relayStreamManager.getDirectoryStream(id),
65
+ setDirectoryStream: (id, s) => { f.relayStreamManager.setDirectoryStream(id, s); },
66
+ deleteDirectoryStream: (id) => { f.relayStreamManager.deleteDirectoryStream(id); },
67
+ getPendingConnectionResolverCount: () => f.connectionManager.pendingConnectionRequestResolverCount,
68
+ dispatchSignalingFrame: (stream, frame) => { f.dispatchSignalingFrame(stream, frame); },
69
+ onSignalingStreamClosed: (stream) => { f.onSignalingStreamClosed(stream); },
70
+ getConnectionIdForPeer: (hex) => f.connectionManager.getConnectionIdForPeer(hex),
71
+ hasConnectionPolicy: () => f.connectionManager.hasConnectionPolicy(),
72
+ receiveSessionAssignment: (a, p) => f.receiveSessionAssignment(a, p),
73
+ getSession: (id) => f.sessionManager.getSession(id),
74
+ };
75
+ }
76
+ /** Build the SessionContext for SessionManager. */
77
+ export function buildSessionContext(f) {
78
+ return {
79
+ get logger() { return f.logger; },
80
+ get persistence() { return f.persistence; },
81
+ get keyProvider() { return f.keyProvider; },
82
+ get node() { return f.node; },
83
+ getMyPubkeyHex: () => f.myPubkeyHex,
84
+ setMyPubkeyHex: (hex) => { f.myPubkeyHex = hex; },
85
+ getThresholdSigner: () => f.thresholdSigner,
86
+ getPersistentSignalingStream: () => f.signalingManager.getPersistentSignalingStream(),
87
+ initRelaySession: (id) => { f.relayStreamManager.initSession(id); },
88
+ runRelayStreamReader: (id, stream, myPubkeyHex, iter) => {
89
+ f.relayStreamManager.runRelayStreamReader(id, stream, myPubkeyHex, iter);
90
+ },
91
+ performRelayAuth: (stream, myPubkey) => f.relayStreamManager.performRelayAuth(stream, myPubkey),
92
+ handleContentStream: (stream) => { void f.relayStreamManager.handleContentStream(stream); },
93
+ connectDirectorySignalingStream: (id, assignment, myPubkey) => f.signalingManager.connectDirectorySignalingStream(id, assignment, myPubkey),
94
+ getRelayStream: (id) => f.relayStreamManager.getRelayStream(id),
95
+ };
96
+ }
97
+ /** Build the SealContext for SealManager. */
98
+ export function buildSealContext(f) {
99
+ return {
100
+ get logger() { return f.logger; },
101
+ get persistence() { return f.persistence; },
102
+ get keyProvider() { return f.keyProvider; },
103
+ getMyPubkeyHex: () => f.myPubkeyHex,
104
+ getThresholdSigner: () => f.thresholdSigner,
105
+ getSession: (id) => f.sessionManager.getSession(id),
106
+ getSessions: () => f.sessionManager.getSessions(),
107
+ getOwnPendingContent: (id) => f.sessionManager.getOwnPendingContent(id),
108
+ getPendingAckResolver: (id) => f.sessionManager.getPendingAckResolver(id),
109
+ setPendingAckResolver: (id, r) => { f.sessionManager.setPendingAckResolver(id, r); },
110
+ deletePendingAckResolver: (id) => { f.sessionManager.deletePendingAckResolver(id); },
111
+ getPersistentSignalingStream: () => f.signalingManager.getPersistentSignalingStream(),
112
+ setPersistentSignalingStream: (s) => { f.signalingManager.setPersistentSignalingStream(s); },
113
+ setPersistentSignalingIter: (it) => { f.signalingManager.setPersistentSignalingIter(it); },
114
+ openPersistentSignalingStream: () => f.openPersistentSignalingStream(),
115
+ getRelayStream: (id) => f.relayStreamManager.getRelayStream(id),
116
+ getDirectoryStream: (id) => f.relayStreamManager.getDirectoryStream(id),
117
+ enqueueSessionSealedEvent: (id, root, ts) => {
118
+ f.sessionManager.enqueueSessionSealedEvent(id, root, ts);
119
+ },
120
+ sendContentFrame: (session, content, hash) => f.sessionManager.sendContentFrame(session, content, hash),
121
+ waitForOwnEcho: (id, seq) => f.sessionManager.waitForOwnEcho(id, seq),
122
+ performGapFillReconciliation: (id, from, to, corrId) => f.relayStreamManager.performGapFillReconciliation(id, from, to, corrId),
123
+ };
124
+ }
125
+ /** Build the RelayStreamContext for RelayStreamManager. */
126
+ export function buildRelayStreamContext(f) {
127
+ return {
128
+ get node() { return f.node; },
129
+ get keyProvider() { return f.keyProvider; },
130
+ get logger() { return f.logger; },
131
+ get persistence() { return f.persistence; },
132
+ get contentGraceMs() { return f.contentGraceMs; },
133
+ get reconnectTimeoutMs() { return f.reconnectTimeoutMs; },
134
+ get hashQueue() { return f.hashQueue; },
135
+ getMyPubkeyHex: () => f.myPubkeyHex,
136
+ getSession: (id) => f.sessionManager.getSession(id),
137
+ getSessions: () => f.sessionManager.getSessions(),
138
+ getPendingAckResolver: (id) => f.sessionManager.getPendingAckResolver(id),
139
+ setPendingAckResolver: (id, r) => { f.sessionManager.setPendingAckResolver(id, r); },
140
+ deletePendingAckResolver: (id) => { f.sessionManager.deletePendingAckResolver(id); },
141
+ getOwnPendingContent: (id) => f.sessionManager.getOwnPendingContent(id),
142
+ getOwnEchoResolvers: (id) => f.sessionManager.getOwnEchoResolvers(id),
143
+ getOutboundQueue: (id) => f.sessionManager.getOutboundQueue(id),
144
+ enqueueReceivedMessage: (id, msg) => { f.sessionManager.enqueueReceivedMessage(id, msg); },
145
+ wakeReceiveWaiters: (id) => { f.sessionManager.wakeReceiveWaiters(id); },
146
+ enqueueSessionSealedEvent: (id, root, ts) => {
147
+ f.sessionManager.enqueueSessionSealedEvent(id, root, ts);
148
+ },
149
+ handleSealVerified: (id, frame) => { void f.sealManager.handleSealVerified(id, frame); },
150
+ handleSessionFrostSealed: (id, frame) => { f.sealManager.handleSessionFrostSealed(id, frame); },
151
+ handleSealRejectedTreeMismatch: (id, frame) => { f.sealManager.handleSealRejectedTreeMismatch(id, frame); },
152
+ handleSealUnilateralConfirmed: (id, frame) => { f.sealManager.handleSealUnilateralConfirmed(id, frame); },
153
+ handleSealUnilateralNotification: (id, frame) => { f.sealManager.handleSealUnilateralNotification(id, frame); },
154
+ handleDirectorySessionSealed: (id, frame, dirPubkey) => {
155
+ f.sealManager.handleDirectorySessionSealed(id, frame, dirPubkey);
156
+ },
157
+ handleDirectorySessionSealRejected: (id, frame) => {
158
+ f.sealManager.handleDirectorySessionSealRejected(id, frame);
159
+ },
160
+ onRelayDisconnected: (sessionIdHex, myPubkeyHex) => {
161
+ const session = f.sessionManager.getSession(sessionIdHex);
162
+ if (!session)
163
+ return;
164
+ if (session.desynchronized)
165
+ return;
166
+ if (session.status === "transport_lost")
167
+ return;
168
+ if (session.status === "sealing" ||
169
+ session.status === "sealed" ||
170
+ session.status === "seal_rejected" ||
171
+ session.status === "seal_deferred")
172
+ return;
173
+ session.status = "transport_lost";
174
+ void f.persistence?.persistSession(sessionIdHex, session);
175
+ const ackResolve = f.sessionManager.getPendingAckResolver(sessionIdHex);
176
+ if (ackResolve) {
177
+ f.sessionManager.deletePendingAckResolver(sessionIdHex);
178
+ ackResolve({ ok: false, reason: "transport_unavailable" });
179
+ }
180
+ void f.relayStreamManager.reconnectRelayStream(sessionIdHex, myPubkeyHex);
181
+ },
182
+ };
183
+ }
184
+ /**
185
+ * Construct all six managers using the facade surface.
186
+ * Must be called after all facade fields are assigned (so lazy closures are safe).
187
+ * Assigns each manager to the corresponding field on the facade.
188
+ */
189
+ export function buildManagers(f, opts) {
190
+ f.registrationManager = new RegistrationManager(buildRegistrationContext(f, opts.mlDsaKeyFile));
191
+ f.connectionManager = new ConnectionManager(buildConnectionContext(f, opts.connectionTimeoutMs, opts.round2TimeoutMs, opts.trackEvaluateCount, opts.whitelist, opts.crossCheckDirectoryOnInbound), { connectionPolicy: opts.connectionPolicy, onConnectionPendingReview: opts.onConnectionPendingReview });
192
+ f.signalingManager = new SignalingManager(buildSignalingContext(f));
193
+ f.sessionManager = new SessionManager(buildSessionContext(f));
194
+ f.sealManager = new SealManager(buildSealContext(f), f.sealFrostTimeoutMs);
195
+ f.relayStreamManager = new RelayStreamManager(buildRelayStreamContext(f));
196
+ }
197
+ // ─── Startup context builder ───────────────────────────────────────────────────
198
+ /**
199
+ * Build the StartupContext for loadClientStartupState.
200
+ * Extracted from CelloClientImpl.loadPersistedState to keep client.ts under 600 lines.
201
+ */
202
+ export function buildStartupContext(f) {
203
+ return {
204
+ get node() { return f.node; },
205
+ get logger() { return f.logger; },
206
+ get persistence() { return f.persistence; },
207
+ getDirectoryEndpoint: () => f.directoryEndpoint,
208
+ getThresholdSigner: () => f.thresholdSigner,
209
+ setThresholdSigner: (s) => { f.thresholdSigner = s; },
210
+ getMyPubkeyHex: () => f.myPubkeyHex,
211
+ setMyPubkeyHex: (hex) => { f.myPubkeyHex = hex; },
212
+ setRegistrationState: (s) => { f.registrationManager.setRegistrationState(s); },
213
+ setMlDsaProvider: (p) => { f.registrationManager.setMlDsaProvider(p); },
214
+ addConnection: (id, rec) => { f.connectionManager.addConnection(id, rec); },
215
+ addConnectionByPeer: (pk, id) => { f.connectionManager.addConnectionByPeer(pk, id); },
216
+ addProfileUncheckedPeer: (pk) => { f.connectionManager.addProfileUncheckedPeer(pk); },
217
+ setConnectionPolicy: (pol) => { f.connectionManager.setPolicy(pol); },
218
+ addPeer: (hex, entry) => { f.peers.set(hex, entry); },
219
+ hasPeer: (hex) => f.peers.has(hex),
220
+ setEndorsements: (e) => { f.endorsements = e; },
221
+ setAttestations: (a) => { f.attestations = a; },
222
+ setLoadedPendingHashes: (h) => { f.loadedPendingHashes = h; },
223
+ getSessionById: (id) => f.sessionManager.getSession(id),
224
+ setSession: (id, rec) => { f.sessionManager.setSession(id, rec); },
225
+ initSessionMessageQueue: (id) => { f.sessionManager.initSessionMessageQueue(id); },
226
+ getMyPrimaryPubkey: () => f.sealManager.getMyPrimaryPubkey(),
227
+ setMyPrimaryPubkey: (pk) => { f.sealManager.setMyPrimaryPubkey(pk); },
228
+ restoreDecidedRequest: (id) => { f.connectionManager.restoreDecidedRequest(id); },
229
+ restorePendingInboundRequest: (opts) => { f.connectionManager.restorePendingInboundRequest(opts); },
230
+ restoreReviewQueueItem: (opts) => { f.connectionManager.restoreReviewQueueItem(opts); },
231
+ };
232
+ }
233
+ // ─── Test injection helpers ────────────────────────────────────────────────────
234
+ /**
235
+ * Build and inject a synthetic SessionRecord for test isolation.
236
+ * Extracted from CelloClientImpl.injectTestSession.
237
+ */
238
+ export function injectTestSession(f, sessionIdHex, sessionId, myPubkeyHex, directoryPubkey, status = "active", opts) {
239
+ const record = {
240
+ session_id: sessionId,
241
+ counterparty_pubkey: new Uint8Array(32),
242
+ counterparty_peer_id: "",
243
+ counterparty_multiaddrs: [],
244
+ relay_endpoint: { peer_id: "", multiaddrs: [] },
245
+ directory_endpoint: { peer_id: "", multiaddrs: [] },
246
+ directory_pubkey: directoryPubkey,
247
+ genesis_prev_root: new Uint8Array(32),
248
+ last_seen_seq: 0, last_sent_seq: 0, status,
249
+ local_tree_leaves: [], next_expected_seq: 1, desynchronized: false,
250
+ };
251
+ f.sessionManager.setSession(sessionIdHex, record);
252
+ if (!f.myPubkeyHex)
253
+ f.myPubkeyHex = myPubkeyHex;
254
+ if (opts?.isInitiator) {
255
+ f.sealManager.markSealInitiated(sessionIdHex);
256
+ f.sealManager.markFrostCeremonyParticipant(sessionIdHex);
257
+ }
258
+ }
259
+ /**
260
+ * Route a directory frame to the appropriate SealManager handler.
261
+ * Extracted from CelloClientImpl.injectDirectoryFrame.
262
+ */
263
+ export function injectDirectoryFrame(f, sessionIdHex, frame) {
264
+ const session = f.sessionManager.getSession(sessionIdHex);
265
+ if (!session)
266
+ throw new Error(`injectDirectoryFrame: session not found: ${sessionIdHex}`);
267
+ if (frame["type"] === "session_sealed") {
268
+ f.sealManager.handleDirectorySessionSealed(sessionIdHex, frame, session.directory_pubkey);
269
+ }
270
+ else if (frame["type"] === "session_seal_rejected") {
271
+ f.sealManager.handleDirectorySessionSealRejected(sessionIdHex, frame);
272
+ }
273
+ else if (frame["type"] === "seal_rejected_tree_mismatch") {
274
+ f.sealManager.handleSealRejectedTreeMismatch(sessionIdHex, frame);
275
+ }
276
+ else if (frame["type"] === "seal_unilateral_confirmed") {
277
+ f.sealManager.handleSealUnilateralConfirmed(sessionIdHex, frame);
278
+ }
279
+ else if (frame["type"] === "seal_unilateral_notification") {
280
+ f.sealManager.handleSealUnilateralNotification(sessionIdHex, frame);
281
+ }
282
+ else if (frame["type"] === "seal_verified") {
283
+ void f.sealManager.handleSealVerified(sessionIdHex, frame);
284
+ }
285
+ else if (frame["type"] === "session_frost_sealed") {
286
+ f.sealManager.handleSessionFrostSealed(sessionIdHex, frame);
287
+ }
288
+ }
289
+ //# sourceMappingURL=client-wiring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-wiring.js","sourceRoot":"","sources":["../src/client-wiring.ts"],"names":[],"mappings":"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"}