@cello-protocol/client 0.0.20 → 0.0.22

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 (53) 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 +337 -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 -5372
  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/registration-manager.d.ts +54 -0
  30. package/dist/registration-manager.d.ts.map +1 -0
  31. package/dist/registration-manager.js +248 -0
  32. package/dist/registration-manager.js.map +1 -0
  33. package/dist/relay-stream-manager.d.ts +136 -0
  34. package/dist/relay-stream-manager.d.ts.map +1 -0
  35. package/dist/relay-stream-manager.js +834 -0
  36. package/dist/relay-stream-manager.js.map +1 -0
  37. package/dist/seal-manager.d.ts +133 -0
  38. package/dist/seal-manager.d.ts.map +1 -0
  39. package/dist/seal-manager.js +803 -0
  40. package/dist/seal-manager.js.map +1 -0
  41. package/dist/session-assignment-parser.d.ts +33 -0
  42. package/dist/session-assignment-parser.d.ts.map +1 -0
  43. package/dist/session-assignment-parser.js +149 -0
  44. package/dist/session-assignment-parser.js.map +1 -0
  45. package/dist/session-manager.d.ts +132 -0
  46. package/dist/session-manager.d.ts.map +1 -0
  47. package/dist/session-manager.js +605 -0
  48. package/dist/session-manager.js.map +1 -0
  49. package/dist/signaling-manager.d.ts +85 -0
  50. package/dist/signaling-manager.d.ts.map +1 -0
  51. package/dist/signaling-manager.js +597 -0
  52. package/dist/signaling-manager.js.map +1 -0
  53. package/package.json +1 -1
@@ -0,0 +1,136 @@
1
+ /**
2
+ * RelayStreamManager — relay reader loop, reconnect logic, cross-check, content frame handling.
3
+ *
4
+ * Extracted from CelloClientImpl. Handles MSG-004 relay stream lifecycle:
5
+ * - #runRelayStreamReader: reads leaf_deliver, hash_submit_ack/error, gap_fill frames
6
+ * - #reconnectRelayStream: SESSION-006 exponential backoff reconnect
7
+ * - #handleInboundLeafDeliver: S2 decode, sequence/signature checks, cross-check pairing
8
+ * - #handleContentStream: content path receiver, cross-check trigger
9
+ * - #crossCheckDelivery / #drainReadyQueue: in-order delivery with prevRoot check
10
+ * - #desync: session desynchronization
11
+ * - #performRelayAuth: challenge-response auth
12
+ * - #performGapFillReconciliation: PERSIST-014 gap fill
13
+ * - #handleGapFillResponse
14
+ *
15
+ * State owned here (not in facade):
16
+ * - #relayStreams, #relayRecvSeq, #reconnectInProgress
17
+ * - #readyQueue, #pendingS2, #pendingContent
18
+ * - #tamperedContentClaims, #pendingGapFillResolvers
19
+ * - #directoryStreams
20
+ */
21
+ import type { CelloNode } from "@cello-protocol/transport";
22
+ import type { Stream } from "@libp2p/interface";
23
+ import type { Structure2 } from "@cello-protocol/protocol-types";
24
+ import type { Logger } from "@cello-protocol/interfaces";
25
+ import type { KeyProvider } from "@cello-protocol/crypto";
26
+ import type { ClientStatePersistence } from "./client-state-persistence.js";
27
+ import type { SessionRecord, ReceivedMessage } from "./types.js";
28
+ import type { AgentHashQueue } from "./agent-hash-queue.js";
29
+ declare const DEFAULT_RECONNECT_TIMEOUT_MS = 60000;
30
+ interface Structure1Fields {
31
+ last_seen_seq: number;
32
+ timestamp: number | bigint;
33
+ }
34
+ interface PendingS2Entry {
35
+ s2: Structure2;
36
+ s2_cbor: Uint8Array;
37
+ s1_fields: Structure1Fields;
38
+ leaf_kind: number;
39
+ sequence_number: number;
40
+ content_hash: Uint8Array;
41
+ is_own_send: boolean;
42
+ arrived_at: number;
43
+ timer_handle: ReturnType<typeof setTimeout>;
44
+ echo_resolve?: () => void;
45
+ }
46
+ interface PendingContentEntry {
47
+ content_bytes: Uint8Array;
48
+ arrived_at: number;
49
+ }
50
+ interface ReadyEntry {
51
+ s2: Structure2;
52
+ s2_cbor: Uint8Array;
53
+ s1_fields: Structure1Fields;
54
+ leaf_kind: number;
55
+ content_bytes: Uint8Array;
56
+ is_own_send: boolean;
57
+ echo_resolve?: () => void;
58
+ }
59
+ /**
60
+ * Narrow interface exposing only what RelayStreamManager needs from external managers.
61
+ * State owned by RelayStreamManager is no longer in this interface.
62
+ */
63
+ export interface RelayStreamContext {
64
+ readonly node: CelloNode;
65
+ readonly keyProvider: KeyProvider;
66
+ readonly logger: Logger;
67
+ readonly persistence: ClientStatePersistence | null;
68
+ readonly contentGraceMs: number;
69
+ readonly reconnectTimeoutMs: number;
70
+ readonly hashQueue: AgentHashQueue | null;
71
+ getMyPubkeyHex(): string | null;
72
+ getSession(sessionIdHex: string): SessionRecord | undefined;
73
+ getSessions(): Map<string, SessionRecord>;
74
+ getPendingAckResolver(sessionIdHex: string): ((v: {
75
+ ok: true;
76
+ sequence_number: number;
77
+ } | {
78
+ ok: false;
79
+ reason: string;
80
+ }) => void) | undefined;
81
+ setPendingAckResolver(sessionIdHex: string, resolve: (v: {
82
+ ok: true;
83
+ sequence_number: number;
84
+ } | {
85
+ ok: false;
86
+ reason: string;
87
+ }) => void): void;
88
+ deletePendingAckResolver(sessionIdHex: string): void;
89
+ getOwnPendingContent(sessionIdHex: string): Map<string, {
90
+ content_bytes: Uint8Array;
91
+ arrived_at: number;
92
+ }> | undefined;
93
+ getOwnEchoResolvers(sessionIdHex: string): Map<number, () => void> | undefined;
94
+ getOutboundQueue(sessionIdHex: string): Promise<void> | undefined;
95
+ enqueueReceivedMessage(sessionIdHex: string, message: ReceivedMessage): void;
96
+ wakeReceiveWaiters(sessionIdHex: string): void;
97
+ enqueueSessionSealedEvent(sessionIdHex: string, sealedRoot: Uint8Array, closeTimestamp: number): void;
98
+ handleSealVerified(sessionIdHex: string, frame: Record<string, unknown>): void;
99
+ handleSessionFrostSealed(sessionIdHex: string, frame: Record<string, unknown>): void;
100
+ handleSealRejectedTreeMismatch(sessionIdHex: string, frame: Record<string, unknown>): void;
101
+ handleSealUnilateralConfirmed(sessionIdHex: string, frame: Record<string, unknown>): void;
102
+ handleSealUnilateralNotification(sessionIdHex: string, frame: Record<string, unknown>): void;
103
+ handleDirectorySessionSealed(sessionIdHex: string, frame: Record<string, unknown>, directoryPubkey: Uint8Array): void;
104
+ handleDirectorySessionSealRejected(sessionIdHex: string, frame: Record<string, unknown>): void;
105
+ onRelayDisconnected(sessionIdHex: string, myPubkeyHex: string): void;
106
+ }
107
+ export type { ReadyEntry, PendingS2Entry, PendingContentEntry, Structure1Fields };
108
+ export declare class RelayStreamManager {
109
+ #private;
110
+ constructor(ctx: RelayStreamContext);
111
+ getRelayStream(sessionIdHex: string): Stream | undefined;
112
+ setRelayStream(sessionIdHex: string, stream: Stream): void;
113
+ deleteRelayStream(sessionIdHex: string): void;
114
+ getDirectoryStream(sessionIdHex: string): Stream | undefined;
115
+ setDirectoryStream(sessionIdHex: string, stream: Stream): void;
116
+ deleteDirectoryStream(sessionIdHex: string): void;
117
+ /** Called by SessionManager.receiveSessionAssignment to initialize per-session relay state. */
118
+ initSession(sessionIdHex: string): void;
119
+ /** Called by facade.closeSession to tear down per-session relay state. */
120
+ closeSession(sessionIdHex: string): void;
121
+ injectLeafDeliver(sessionIdHex: string, frame: Record<string, unknown>): void;
122
+ injectRelayDisconnect(sessionIdHex: string): void;
123
+ runRelayStreamReader(sessionIdHex: string, stream: Stream, myPubkeyHex: string, iter?: AsyncIterator<Uint8Array>): void;
124
+ reconnectRelayStream(sessionIdHex: string, myPubkeyHex: string): Promise<void>;
125
+ handleContentStream(stream: Stream): Promise<void>;
126
+ performRelayAuth(stream: Stream, myPubkey: Uint8Array): Promise<{
127
+ ok: true;
128
+ iter: AsyncIterator<Uint8Array>;
129
+ } | {
130
+ ok: false;
131
+ reason: "relay_auth_failed" | "relay_auth_error";
132
+ }>;
133
+ performGapFillReconciliation(sessionIdHex: string, fromSeq: number, toSeq: number, correlationId: string): Promise<void>;
134
+ }
135
+ export { DEFAULT_RECONNECT_TIMEOUT_MS };
136
+ //# sourceMappingURL=relay-stream-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-stream-manager.d.ts","sourceRoot":"","sources":["../src/relay-stream-manager.ts"],"names":[],"mappings":"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"}