@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.
- package/dist/client-send-helpers.d.ts +25 -0
- package/dist/client-send-helpers.d.ts.map +1 -0
- package/dist/client-send-helpers.js +118 -0
- package/dist/client-send-helpers.js.map +1 -0
- package/dist/client-startup.d.ts +74 -0
- package/dist/client-startup.d.ts.map +1 -0
- package/dist/client-startup.js +337 -0
- package/dist/client-startup.js.map +1 -0
- package/dist/client-wiring.d.ts +120 -0
- package/dist/client-wiring.d.ts.map +1 -0
- package/dist/client-wiring.js +289 -0
- package/dist/client-wiring.js.map +1 -0
- package/dist/client.d.ts +29 -169
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +222 -5372
- package/dist/client.js.map +1 -1
- package/dist/connection-inbound-handler.d.ts +47 -0
- package/dist/connection-inbound-handler.d.ts.map +1 -0
- package/dist/connection-inbound-handler.js +325 -0
- package/dist/connection-inbound-handler.js.map +1 -0
- package/dist/connection-manager.d.ts +191 -0
- package/dist/connection-manager.d.ts.map +1 -0
- package/dist/connection-manager.js +692 -0
- package/dist/connection-manager.js.map +1 -0
- package/dist/frame-dispatch.d.ts +28 -0
- package/dist/frame-dispatch.d.ts.map +1 -0
- package/dist/frame-dispatch.js +118 -0
- package/dist/frame-dispatch.js.map +1 -0
- package/dist/registration-manager.d.ts +54 -0
- package/dist/registration-manager.d.ts.map +1 -0
- package/dist/registration-manager.js +248 -0
- package/dist/registration-manager.js.map +1 -0
- package/dist/relay-stream-manager.d.ts +136 -0
- package/dist/relay-stream-manager.d.ts.map +1 -0
- package/dist/relay-stream-manager.js +834 -0
- package/dist/relay-stream-manager.js.map +1 -0
- package/dist/seal-manager.d.ts +133 -0
- package/dist/seal-manager.d.ts.map +1 -0
- package/dist/seal-manager.js +803 -0
- package/dist/seal-manager.js.map +1 -0
- package/dist/session-assignment-parser.d.ts +33 -0
- package/dist/session-assignment-parser.d.ts.map +1 -0
- package/dist/session-assignment-parser.js +149 -0
- package/dist/session-assignment-parser.js.map +1 -0
- package/dist/session-manager.d.ts +132 -0
- package/dist/session-manager.d.ts.map +1 -0
- package/dist/session-manager.js +605 -0
- package/dist/session-manager.js.map +1 -0
- package/dist/signaling-manager.d.ts +85 -0
- package/dist/signaling-manager.d.ts.map +1 -0
- package/dist/signaling-manager.js +597 -0
- package/dist/signaling-manager.js.map +1 -0
- 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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"}
|