@aigne/afs-session 1.11.0-beta.6

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/LICENSE.md ADDED
@@ -0,0 +1,26 @@
1
+ # Proprietary License
2
+
3
+ Copyright (c) 2024-2025 ArcBlock, Inc. All Rights Reserved.
4
+
5
+ This software and associated documentation files (the "Software") are proprietary
6
+ and confidential. Unauthorized copying, modification, distribution, or use of
7
+ this Software, via any medium, is strictly prohibited.
8
+
9
+ The Software is provided for internal use only within ArcBlock, Inc. and its
10
+ authorized affiliates.
11
+
12
+ ## No License Granted
13
+
14
+ No license, express or implied, is granted to any party for any purpose.
15
+ All rights are reserved by ArcBlock, Inc.
16
+
17
+ ## Public Artifact Distribution
18
+
19
+ Portions of this Software may be released publicly under separate open-source
20
+ licenses (such as MIT License) through designated public repositories. Such
21
+ public releases are governed by their respective licenses and do not affect
22
+ the proprietary nature of this repository.
23
+
24
+ ## Contact
25
+
26
+ For licensing inquiries, contact: legal@arcblock.io
@@ -0,0 +1,642 @@
1
+ import * as net from "node:net";
2
+ import { AFSModule } from "@aigne/afs";
3
+
4
+ //#region src/protocol/types.d.ts
5
+ /**
6
+ * Protocol constants
7
+ */
8
+ declare const HEADER_SIZE = 9;
9
+ declare const MAX_PAYLOAD_SIZE: number;
10
+ declare const MAX_JSON_DEPTH = 100;
11
+ declare const MAX_JSON_SIZE: number;
12
+ declare const MAX_UINT32 = 4294967295;
13
+ /**
14
+ * Frame types
15
+ */
16
+ declare enum FrameType {
17
+ JSON = 1,
18
+ Binary = 2
19
+ }
20
+ /**
21
+ * Frame structure after decoding
22
+ */
23
+ interface Frame {
24
+ type: FrameType;
25
+ reqId: number;
26
+ payload: Uint8Array;
27
+ }
28
+ /**
29
+ * Protocol errors
30
+ */
31
+ declare class ProtocolError extends Error {
32
+ readonly code: string;
33
+ constructor(code: string, message: string);
34
+ }
35
+ declare class PayloadTooLargeError extends ProtocolError {
36
+ constructor(size: number);
37
+ }
38
+ declare class InvalidPayloadError extends ProtocolError {
39
+ constructor(message: string);
40
+ }
41
+ declare class InvalidFrameTypeError extends ProtocolError {
42
+ constructor(type: number);
43
+ }
44
+ declare class InvalidReqIdError extends ProtocolError {
45
+ constructor(reqId: number);
46
+ }
47
+ declare class IncompleteFrameError extends ProtocolError {
48
+ constructor(message: string);
49
+ }
50
+ //#endregion
51
+ //#region src/protocol/frame.d.ts
52
+ /**
53
+ * Encodes a frame with the given type, request ID, and payload.
54
+ *
55
+ * Frame structure (big-endian):
56
+ * - Length (4 bytes): payload length
57
+ * - Type (1 byte): frame type
58
+ * - ReqId (4 bytes): request ID
59
+ * - Payload (variable): actual data
60
+ *
61
+ * @param type Frame type (JSON or Binary)
62
+ * @param reqId Request ID (0 for events, >0 for request/response)
63
+ * @param payload The payload data
64
+ * @returns Encoded frame as Uint8Array
65
+ */
66
+ declare function encodeFrame(type: FrameType, reqId: number, payload: Uint8Array): Uint8Array;
67
+ /**
68
+ * Decodes a frame from a buffer.
69
+ *
70
+ * @param buffer The buffer containing the frame data
71
+ * @returns Object containing the decoded frame and any remaining bytes
72
+ * @throws IncompleteFrameError if buffer doesn't contain a complete frame
73
+ * @throws InvalidFrameTypeError if frame type is invalid
74
+ * @throws PayloadTooLargeError if payload length exceeds maximum
75
+ */
76
+ declare function decodeFrame(buffer: Uint8Array): {
77
+ frame: Frame;
78
+ remaining: Uint8Array;
79
+ };
80
+ //#endregion
81
+ //#region src/protocol/frame-decoder.d.ts
82
+ /**
83
+ * Configuration options for FrameDecoder
84
+ */
85
+ interface FrameDecoderOptions {
86
+ /**
87
+ * Maximum size of pending buffer to prevent memory attacks.
88
+ * Default: MAX_PAYLOAD_SIZE + HEADER_SIZE
89
+ */
90
+ maxPendingSize?: number;
91
+ }
92
+ /**
93
+ * Error thrown when pending buffer exceeds maximum size
94
+ */
95
+ declare class BufferOverflowError extends ProtocolError {
96
+ constructor(size: number, maxSize: number);
97
+ }
98
+ /**
99
+ * Streaming frame decoder that handles:
100
+ * - Partial frames across multiple pushes (拆包)
101
+ * - Multiple frames in single push (粘包)
102
+ * - Buffer overflow protection (security)
103
+ */
104
+ declare class FrameDecoder {
105
+ private buffer;
106
+ private readonly maxPendingSize;
107
+ constructor(options?: FrameDecoderOptions);
108
+ /**
109
+ * Push data into the decoder and return any complete frames.
110
+ *
111
+ * @param data New data to append to buffer
112
+ * @returns Array of complete frames (may be empty)
113
+ * @throws InvalidFrameTypeError if frame type is invalid
114
+ * @throws PayloadTooLargeError if payload exceeds maximum
115
+ * @throws BufferOverflowError if pending buffer exceeds maximum
116
+ */
117
+ push(data: Uint8Array): Frame[];
118
+ /**
119
+ * Reset the decoder state, discarding any buffered data.
120
+ */
121
+ reset(): void;
122
+ /**
123
+ * Get the current pending buffer size.
124
+ */
125
+ get pendingSize(): number;
126
+ }
127
+ //#endregion
128
+ //#region src/protocol/message.d.ts
129
+ /**
130
+ * Request message - needs a response
131
+ */
132
+ interface Request {
133
+ type: "request";
134
+ id: string;
135
+ method: string;
136
+ params?: unknown;
137
+ }
138
+ /**
139
+ * Response message - response to a request
140
+ */
141
+ interface Response {
142
+ type: "response";
143
+ id: string;
144
+ result?: unknown;
145
+ error?: unknown;
146
+ hasBinary?: boolean;
147
+ }
148
+ /**
149
+ * Event message - one-way notification
150
+ */
151
+ interface Event {
152
+ type: "event";
153
+ event: string;
154
+ data?: unknown;
155
+ }
156
+ /**
157
+ * Union of all message types
158
+ */
159
+ type Message = Request | Response | Event;
160
+ /**
161
+ * Error for invalid message structure
162
+ */
163
+ declare class InvalidMessageError extends ProtocolError {
164
+ constructor(message: string);
165
+ }
166
+ /**
167
+ * Error for JSON parsing failures
168
+ */
169
+ declare class ParseError extends ProtocolError {
170
+ constructor(message: string);
171
+ }
172
+ /**
173
+ * Error for depth limit exceeded
174
+ */
175
+ declare class DepthLimitExceededError extends ProtocolError {
176
+ constructor();
177
+ }
178
+ /**
179
+ * Error for message too large
180
+ */
181
+ declare class MessageTooLargeError extends ProtocolError {
182
+ constructor(size: number);
183
+ }
184
+ /**
185
+ * Serialize a message to JSON bytes.
186
+ *
187
+ * @param message The message to serialize
188
+ * @returns UTF-8 encoded JSON bytes
189
+ * @throws InvalidMessageError if message is invalid
190
+ */
191
+ declare function serializeMessage(message: Message): Uint8Array;
192
+ /**
193
+ * Deserialize JSON bytes to a message.
194
+ *
195
+ * @param data UTF-8 encoded JSON bytes
196
+ * @returns Parsed message
197
+ * @throws ParseError if JSON is invalid
198
+ * @throws InvalidMessageError if message structure is invalid
199
+ * @throws DepthLimitExceededError if JSON is too deeply nested
200
+ * @throws MessageTooLargeError if message exceeds size limit
201
+ */
202
+ declare function deserializeMessage(data: Uint8Array): Message;
203
+ //#endregion
204
+ //#region src/transport/types.d.ts
205
+ /**
206
+ * Transport layer events
207
+ */
208
+ interface TransportEvents {
209
+ frame: (frame: Frame) => void;
210
+ error: (error: Error) => void;
211
+ close: () => void;
212
+ }
213
+ /**
214
+ * Abstract transport interface for sending/receiving frames.
215
+ * Transport is responsible only for:
216
+ * - Establishing connections
217
+ * - Transmitting frames
218
+ * - Handling binary data
219
+ *
220
+ * Transport does NOT:
221
+ * - Know about AFS operations
222
+ * - Validate request content
223
+ * - Handle business logic
224
+ */
225
+ interface Transport {
226
+ /**
227
+ * Send a frame over the transport.
228
+ */
229
+ send(frame: Frame): Promise<void>;
230
+ /**
231
+ * Close the transport connection.
232
+ */
233
+ close(): Promise<void>;
234
+ /**
235
+ * Register event handler.
236
+ */
237
+ on<E extends keyof TransportEvents>(event: E, handler: TransportEvents[E]): void;
238
+ /**
239
+ * Unregister event handler.
240
+ */
241
+ off<E extends keyof TransportEvents>(event: E, handler: TransportEvents[E]): void;
242
+ /**
243
+ * Whether the transport is connected.
244
+ */
245
+ readonly connected: boolean;
246
+ }
247
+ /**
248
+ * Server-side transport that can accept multiple connections.
249
+ */
250
+ interface TransportServer {
251
+ /**
252
+ * Start listening for connections.
253
+ */
254
+ listen(): Promise<void>;
255
+ /**
256
+ * Stop listening and close all connections.
257
+ */
258
+ close(): Promise<void>;
259
+ /**
260
+ * Event when a new connection is established.
261
+ */
262
+ onConnection(handler: (transport: Transport) => void): void;
263
+ /**
264
+ * Whether the server is listening.
265
+ */
266
+ readonly listening: boolean;
267
+ }
268
+ /**
269
+ * Options for Unix Socket transport.
270
+ */
271
+ interface UnixSocketOptions {
272
+ /**
273
+ * Path to the Unix socket file.
274
+ * Default: ~/.afs/observer.sock
275
+ */
276
+ socketPath?: string;
277
+ /**
278
+ * Maximum number of pending connections.
279
+ * Default: 100
280
+ */
281
+ backlog?: number;
282
+ }
283
+ /**
284
+ * Default socket path
285
+ */
286
+ declare const DEFAULT_SOCKET_PATH = "~/.afs/observer.sock";
287
+ /**
288
+ * Options for WebSocket transport.
289
+ */
290
+ interface WebSocketOptions {
291
+ /**
292
+ * Host to bind/connect to.
293
+ * Default: "localhost"
294
+ */
295
+ host?: string;
296
+ /**
297
+ * Port to bind/connect to.
298
+ * Default: 9999
299
+ */
300
+ port?: number;
301
+ /**
302
+ * Authentication token.
303
+ * Required for secure connections.
304
+ */
305
+ authToken?: string;
306
+ /**
307
+ * Maximum number of connections (server only).
308
+ * Default: 100
309
+ */
310
+ maxConnections?: number;
311
+ }
312
+ /**
313
+ * Default WebSocket port
314
+ */
315
+ declare const DEFAULT_WS_PORT = 9999;
316
+ //#endregion
317
+ //#region src/session/types.d.ts
318
+ /**
319
+ * Protocol version
320
+ */
321
+ declare const PROTOCOL_VERSION = "1.0";
322
+ /**
323
+ * Session state
324
+ */
325
+ type SessionState = "pending" | "attached" | "disconnected";
326
+ /**
327
+ * Session error codes (defined by protocol)
328
+ */
329
+ type SessionErrorCode = "namespace_conflict" | "invalid_session" | "unavailable" | "protocol_error" | "version_mismatch" | "auth_required" | "auth_failed" | "invalid_request";
330
+ /**
331
+ * Session error
332
+ */
333
+ declare class SessionError extends Error {
334
+ readonly code: SessionErrorCode;
335
+ constructor(code: SessionErrorCode, message: string);
336
+ }
337
+ /**
338
+ * Parameters for session.attach request
339
+ */
340
+ interface AttachParams {
341
+ version: string;
342
+ namespace: string;
343
+ name?: string;
344
+ path?: string;
345
+ sessionId?: string;
346
+ replace?: boolean;
347
+ auth?: {
348
+ type: "token";
349
+ credential: string;
350
+ };
351
+ }
352
+ /**
353
+ * Result of session.attach request
354
+ */
355
+ interface AttachResult {
356
+ sessionId: string;
357
+ namespace: string;
358
+ }
359
+ /**
360
+ * Session represents a connected AFS namespace
361
+ */
362
+ interface Session {
363
+ /**
364
+ * Unique session ID
365
+ */
366
+ readonly id: string;
367
+ /**
368
+ * Namespace this session is attached to
369
+ */
370
+ readonly namespace: string;
371
+ /**
372
+ * Optional friendly name
373
+ */
374
+ readonly name?: string;
375
+ /**
376
+ * Session state
377
+ */
378
+ readonly state: SessionState;
379
+ /**
380
+ * When the session was created
381
+ */
382
+ readonly createdAt: Date;
383
+ /**
384
+ * The AFS module this session provides access to
385
+ */
386
+ readonly afs: AFSModule;
387
+ }
388
+ /**
389
+ * Session host manages multiple sessions (Observer side)
390
+ */
391
+ interface SessionHostEvents {
392
+ sessionCreated: (session: Session) => void;
393
+ sessionClosed: (session: Session) => void;
394
+ }
395
+ /**
396
+ * Options for SessionHost
397
+ */
398
+ interface SessionHostOptions {
399
+ /**
400
+ * Maximum number of concurrent sessions
401
+ */
402
+ maxSessions?: number;
403
+ /**
404
+ * Request timeout in milliseconds
405
+ */
406
+ requestTimeout?: number;
407
+ /**
408
+ * Grace period for disconnected sessions (milliseconds).
409
+ * Sessions can be reconnected within this period.
410
+ */
411
+ sessionTimeout?: number;
412
+ /**
413
+ * Idle timeout (milliseconds)
414
+ */
415
+ idleTimeout?: number;
416
+ /**
417
+ * Heartbeat interval in milliseconds.
418
+ * Set to 0 to disable heartbeat.
419
+ */
420
+ heartbeatInterval?: number;
421
+ /**
422
+ * Heartbeat timeout in milliseconds.
423
+ * If no pong received within this time, session is disconnected.
424
+ */
425
+ heartbeatTimeout?: number;
426
+ }
427
+ /**
428
+ * Default options
429
+ */
430
+ declare const DEFAULT_SESSION_OPTIONS: Required<SessionHostOptions>;
431
+ //#endregion
432
+ //#region src/session/host.d.ts
433
+ /**
434
+ * Session host manages multiple client sessions (Observer side).
435
+ */
436
+ declare class SessionHost {
437
+ private options;
438
+ private connections;
439
+ private sessions;
440
+ private namespaces;
441
+ private sessionToConnection;
442
+ private disconnectedSessions;
443
+ constructor(options?: SessionHostOptions);
444
+ /**
445
+ * Handle a new transport connection.
446
+ */
447
+ handleConnection(transport: Transport): void;
448
+ /**
449
+ * Handle incoming frame from a connection.
450
+ */
451
+ private handleFrame;
452
+ /**
453
+ * Handle session.attach request.
454
+ */
455
+ private handleAttach;
456
+ /**
457
+ * Handle reconnect with existing session ID.
458
+ */
459
+ private handleReconnect;
460
+ /**
461
+ * Start heartbeat for a connection.
462
+ */
463
+ private startHeartbeat;
464
+ /**
465
+ * Handle heartbeat timeout.
466
+ */
467
+ private handleHeartbeatTimeout;
468
+ /**
469
+ * Handle session.detach request.
470
+ */
471
+ private handleDetach;
472
+ /**
473
+ * Handle AFS request (passthrough to client).
474
+ */
475
+ private handleAfsRequest;
476
+ /**
477
+ * Handle transport disconnect.
478
+ */
479
+ private handleDisconnect;
480
+ /**
481
+ * Send response back to client.
482
+ */
483
+ private sendResponse;
484
+ /**
485
+ * Send event to client.
486
+ */
487
+ private sendEvent;
488
+ /**
489
+ * Get all active sessions.
490
+ */
491
+ getSessions(): Session[];
492
+ /**
493
+ * Close the session host and all sessions.
494
+ */
495
+ close(): Promise<void>;
496
+ }
497
+ //#endregion
498
+ //#region src/transport/unix-socket.d.ts
499
+ /**
500
+ * Error for Unix socket operations
501
+ */
502
+ declare class UnixSocketError extends Error {
503
+ readonly code: string;
504
+ constructor(code: string, message: string);
505
+ }
506
+ /**
507
+ * Unix socket transport implementation.
508
+ */
509
+ declare class UnixSocketTransport implements Transport {
510
+ private socket;
511
+ private decoder;
512
+ private handlers;
513
+ private _connected;
514
+ constructor(socket: net.Socket);
515
+ private setupHandlers;
516
+ send(frame: Frame): Promise<void>;
517
+ close(): Promise<void>;
518
+ on<E extends keyof TransportEvents>(event: E, handler: TransportEvents[E]): void;
519
+ off<E extends keyof TransportEvents>(event: E, handler: TransportEvents[E]): void;
520
+ private emit;
521
+ get connected(): boolean;
522
+ }
523
+ /**
524
+ * Options for Unix socket server
525
+ */
526
+ interface UnixSocketServerOptions extends UnixSocketOptions {
527
+ maxConnections?: number;
528
+ }
529
+ /**
530
+ * Unix socket server implementation.
531
+ */
532
+ declare class UnixSocketServer implements TransportServer {
533
+ private server;
534
+ private socketPath;
535
+ private maxConnections;
536
+ private connections;
537
+ private connectionHandler?;
538
+ private _listening;
539
+ constructor(options?: UnixSocketServerOptions);
540
+ listen(): Promise<void>;
541
+ close(): Promise<void>;
542
+ onConnection(handler: (transport: Transport) => void): void;
543
+ get listening(): boolean;
544
+ }
545
+ /**
546
+ * Unix socket client implementation.
547
+ */
548
+ declare class UnixSocketClient implements Transport {
549
+ private socket;
550
+ private transport;
551
+ private socketPath;
552
+ private handlers;
553
+ constructor(options?: UnixSocketOptions);
554
+ connect(): Promise<void>;
555
+ send(frame: Frame): Promise<void>;
556
+ close(): Promise<void>;
557
+ on<E extends keyof TransportEvents>(event: E, handler: TransportEvents[E]): void;
558
+ off<E extends keyof TransportEvents>(event: E, handler: TransportEvents[E]): void;
559
+ private emit;
560
+ get connected(): boolean;
561
+ }
562
+ //#endregion
563
+ //#region src/transport/websocket.d.ts
564
+ /**
565
+ * Error for WebSocket operations
566
+ */
567
+ declare class WebSocketError extends Error {
568
+ readonly code: string;
569
+ constructor(code: string, message: string);
570
+ }
571
+ /**
572
+ * WebSocket transport for server-side (Bun WebSocket).
573
+ * Wraps Bun's ServerWebSocket to provide Transport interface.
574
+ */
575
+ declare class WebSocketTransport implements Transport {
576
+ private ws;
577
+ private decoder;
578
+ private handlers;
579
+ private _connected;
580
+ constructor(ws: any);
581
+ /**
582
+ * Called by server when message is received.
583
+ */
584
+ handleMessage(data: ArrayBuffer | Uint8Array): void;
585
+ /**
586
+ * Called by server when connection closes.
587
+ */
588
+ handleClose(): void;
589
+ /**
590
+ * Called by server when error occurs.
591
+ */
592
+ handleError(error: Error): void;
593
+ send(frame: Frame): Promise<void>;
594
+ close(): Promise<void>;
595
+ on<E extends keyof TransportEvents>(event: E, handler: TransportEvents[E]): void;
596
+ off<E extends keyof TransportEvents>(event: E, handler: TransportEvents[E]): void;
597
+ private emit;
598
+ get connected(): boolean;
599
+ }
600
+ /**
601
+ * WebSocket server implementation using Bun.serve.
602
+ */
603
+ declare class WebSocketServer implements TransportServer {
604
+ private server;
605
+ private host;
606
+ private port;
607
+ private authToken?;
608
+ private maxConnections;
609
+ private connections;
610
+ private wsToTransport;
611
+ private connectionHandler?;
612
+ private _listening;
613
+ private rateLimiter;
614
+ constructor(options?: WebSocketOptions);
615
+ listen(): Promise<void>;
616
+ close(): Promise<void>;
617
+ onConnection(handler: (transport: Transport) => void): void;
618
+ get listening(): boolean;
619
+ get address(): string;
620
+ }
621
+ /**
622
+ * WebSocket client implementation.
623
+ */
624
+ declare class WebSocketClient implements Transport {
625
+ private ws;
626
+ private transport;
627
+ private host;
628
+ private port;
629
+ private authToken?;
630
+ private handlers;
631
+ constructor(options?: WebSocketOptions);
632
+ connect(): Promise<void>;
633
+ send(frame: Frame): Promise<void>;
634
+ close(): Promise<void>;
635
+ on<E extends keyof TransportEvents>(event: E, handler: TransportEvents[E]): void;
636
+ off<E extends keyof TransportEvents>(event: E, handler: TransportEvents[E]): void;
637
+ private emit;
638
+ get connected(): boolean;
639
+ }
640
+ //#endregion
641
+ export { AttachParams, AttachResult, BufferOverflowError, DEFAULT_SESSION_OPTIONS, DEFAULT_SOCKET_PATH, DEFAULT_WS_PORT, DepthLimitExceededError, Event, Frame, FrameDecoder, FrameDecoderOptions, FrameType, HEADER_SIZE, IncompleteFrameError, InvalidFrameTypeError, InvalidMessageError, InvalidPayloadError, InvalidReqIdError, MAX_JSON_DEPTH, MAX_JSON_SIZE, MAX_PAYLOAD_SIZE, MAX_UINT32, Message, MessageTooLargeError, PROTOCOL_VERSION, ParseError, PayloadTooLargeError, ProtocolError, Request, Response, Session, SessionError, SessionHost, SessionHostEvents, SessionHostOptions, SessionState, Transport, TransportEvents, TransportServer, UnixSocketClient, UnixSocketError, UnixSocketOptions, UnixSocketServer, UnixSocketTransport, WebSocketClient, WebSocketError, WebSocketOptions, WebSocketServer, WebSocketTransport, decodeFrame, deserializeMessage, encodeFrame, serializeMessage };
642
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/protocol/types.ts","../src/protocol/frame.ts","../src/protocol/frame-decoder.ts","../src/protocol/message.ts","../src/transport/types.ts","../src/session/types.ts","../src/session/host.ts","../src/transport/unix-socket.ts","../src/transport/websocket.ts"],"mappings":"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"}