@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 +26 -0
- package/dist/index.d.mts +642 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +1345 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +59 -0
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
|
package/dist/index.d.mts
ADDED
|
@@ -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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"}
|