stelar-time-real 2.0.4 → 3.2.1
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/README.md +1012 -335
- package/package.json +14 -10
- package/src/client.d.ts +115 -8
- package/src/client.d.ts.map +1 -1
- package/src/client.js +851 -102
- package/src/client.ts +915 -103
- package/src/index.d.ts +281 -15
- package/src/index.d.ts.map +1 -1
- package/src/index.js +1382 -142
- package/src/index.ts +1663 -201
- package/src/logger.d.ts +29 -0
- package/src/logger.d.ts.map +1 -0
- package/src/logger.js +98 -0
- package/src/logger.ts +115 -0
- package/src/protocol.d.ts +57 -0
- package/src/protocol.d.ts.map +1 -0
- package/src/protocol.js +193 -0
- package/src/protocol.ts +237 -0
- package/src/websocket.d.ts +67 -0
- package/src/websocket.d.ts.map +1 -0
- package/src/websocket.js +260 -0
- package/src/websocket.ts +316 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stelar-time-real",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "3.2.1",
|
|
4
|
+
"description": "Zero-dependency production real-time library. Custom binary TCP + manual WebSocket. No ws package. Rate limiting (custom/per-event/per-client), hooks, custom IP tracker, custom health check, runtime config, rooms, ACKs, middleware, TLS/SSL.",
|
|
5
5
|
"main": "./src/index.js",
|
|
6
6
|
"types": "./src/index.d.ts",
|
|
7
7
|
"type": "module",
|
|
@@ -12,11 +12,17 @@
|
|
|
12
12
|
"keywords": [
|
|
13
13
|
"websocket",
|
|
14
14
|
"real-time",
|
|
15
|
-
"
|
|
16
|
-
" realtime",
|
|
15
|
+
"realtime",
|
|
17
16
|
"stelar",
|
|
18
17
|
"chat",
|
|
19
|
-
"webserver"
|
|
18
|
+
"webserver",
|
|
19
|
+
"tcp",
|
|
20
|
+
"binary-protocol",
|
|
21
|
+
"zero-dependency",
|
|
22
|
+
"custom-protocol",
|
|
23
|
+
"production",
|
|
24
|
+
"rate-limiting",
|
|
25
|
+
"health-check"
|
|
20
26
|
],
|
|
21
27
|
"author": "Stelar",
|
|
22
28
|
"license": "MIT",
|
|
@@ -36,11 +42,9 @@
|
|
|
36
42
|
"files": [
|
|
37
43
|
"src"
|
|
38
44
|
],
|
|
39
|
-
"dependencies": {
|
|
40
|
-
"ws": "^8.14.0"
|
|
41
|
-
},
|
|
45
|
+
"dependencies": {},
|
|
42
46
|
"devDependencies": {
|
|
43
|
-
"@types/
|
|
47
|
+
"@types/node": "^22.0.0",
|
|
44
48
|
"typescript": "^5.3.0"
|
|
45
49
|
}
|
|
46
|
-
}
|
|
50
|
+
}
|
package/src/client.d.ts
CHANGED
|
@@ -1,31 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @stelar-time-real Client
|
|
3
|
+
*
|
|
4
|
+
* Dual-environment: Browser (native WebSocket) + Node.js (manual WS or TCP binary).
|
|
5
|
+
* No external dependencies.
|
|
6
|
+
*/
|
|
7
|
+
import { Logger, type LogLevel } from './logger.js';
|
|
8
|
+
export interface StelarClientHooks {
|
|
9
|
+
/** Return false to cancel the emit. */
|
|
10
|
+
onBeforeEmit?: (info: {
|
|
11
|
+
event: string;
|
|
12
|
+
data: unknown;
|
|
13
|
+
}) => boolean | void;
|
|
14
|
+
/** Called on every incoming message. */
|
|
15
|
+
onMessage?: (info: {
|
|
16
|
+
event: string;
|
|
17
|
+
data: unknown;
|
|
18
|
+
isBinary: boolean;
|
|
19
|
+
}) => void;
|
|
20
|
+
/** Called when connection state changes. */
|
|
21
|
+
onStateChange?: (info: {
|
|
22
|
+
from: ConnectionState;
|
|
23
|
+
to: ConnectionState;
|
|
24
|
+
}) => void;
|
|
25
|
+
/** Return a custom delay (ms) to override built-in backoff. */
|
|
26
|
+
onReconnectDelay?: (info: {
|
|
27
|
+
attempt: number;
|
|
28
|
+
defaultDelay: number;
|
|
29
|
+
}) => number | void;
|
|
30
|
+
/** Called when a message is queued while disconnected. */
|
|
31
|
+
onMessageQueued?: (info: {
|
|
32
|
+
event: string;
|
|
33
|
+
data: unknown;
|
|
34
|
+
queueSize: number;
|
|
35
|
+
}) => void;
|
|
36
|
+
/** Called after queued messages are flushed on reconnection. */
|
|
37
|
+
onQueueDrained?: (info: {
|
|
38
|
+
count: number;
|
|
39
|
+
}) => void;
|
|
40
|
+
/** Called on any client-side error. */
|
|
41
|
+
onError?: (info: {
|
|
42
|
+
error: Error;
|
|
43
|
+
context: string;
|
|
44
|
+
}) => void;
|
|
45
|
+
}
|
|
1
46
|
export interface StelarClientOptions {
|
|
2
47
|
reconnection?: boolean;
|
|
3
48
|
reconnectionAttempts?: number;
|
|
4
49
|
reconnectionDelay?: number;
|
|
50
|
+
maxReconnectionDelay?: number;
|
|
5
51
|
heartbeatInterval?: number;
|
|
6
52
|
ackTimeout?: number;
|
|
53
|
+
mode?: 'ws' | 'tcp';
|
|
54
|
+
maxPayloadSize?: number;
|
|
55
|
+
maxFrameSize?: number;
|
|
56
|
+
messageQueueSize?: number;
|
|
57
|
+
logger?: Logger | LogLevel | false;
|
|
58
|
+
tls?: boolean;
|
|
59
|
+
rejectUnauthorized?: boolean;
|
|
60
|
+
headers?: Record<string, string>;
|
|
61
|
+
/** Custom backoff function: (attempt, baseDelay, maxDelay) => delayMs */
|
|
62
|
+
customReconnectDelay?: (attempt: number, baseDelay: number, maxDelay: number) => number;
|
|
63
|
+
hooks?: StelarClientHooks;
|
|
7
64
|
}
|
|
8
65
|
export interface StelarEmitOptions {
|
|
9
66
|
ack?: string;
|
|
10
67
|
}
|
|
11
68
|
export type StelarEventHandler = (data: unknown) => void;
|
|
12
|
-
export type
|
|
69
|
+
export type ConnectionState = 'disconnected' | 'connecting' | 'connected' | 'reconnecting';
|
|
13
70
|
declare class StelarClient {
|
|
14
71
|
private url;
|
|
15
72
|
private options;
|
|
16
|
-
private ws;
|
|
17
73
|
private events;
|
|
18
74
|
private _wildcardHandler;
|
|
19
|
-
private
|
|
20
|
-
private
|
|
75
|
+
private _acks;
|
|
76
|
+
private _state;
|
|
21
77
|
private _reconnectAttempts;
|
|
22
78
|
private _hbTimer;
|
|
23
79
|
private _isManualClose;
|
|
24
|
-
private
|
|
80
|
+
private id;
|
|
81
|
+
private _messageQueue;
|
|
82
|
+
private _reconnectTimer;
|
|
83
|
+
private _messagesSent;
|
|
84
|
+
private _messagesReceived;
|
|
85
|
+
private _connectTime;
|
|
86
|
+
private _lastError;
|
|
87
|
+
private _ws;
|
|
88
|
+
private _nodeSocket;
|
|
89
|
+
private _wsParser;
|
|
90
|
+
private _tcpSocket;
|
|
91
|
+
private _tcpParser;
|
|
92
|
+
private log;
|
|
25
93
|
constructor(urlOrPort?: string | number, options?: StelarClientOptions);
|
|
94
|
+
getState(): ConnectionState;
|
|
95
|
+
getId(): string | null;
|
|
96
|
+
getUrl(): string;
|
|
97
|
+
getMessagesSent(): number;
|
|
98
|
+
getMessagesReceived(): number;
|
|
99
|
+
getLastError(): Error | null;
|
|
100
|
+
getQueueSize(): number;
|
|
101
|
+
getConnectTime(): number;
|
|
26
102
|
setUrl(url: string): this;
|
|
103
|
+
/** Update client options at runtime. Changes take effect immediately. */
|
|
104
|
+
updateOptions(options: Partial<StelarClientOptions>): this;
|
|
105
|
+
/** Read-only snapshot of current client options. */
|
|
106
|
+
getOptions(): Readonly<{
|
|
107
|
+
reconnection: boolean;
|
|
108
|
+
reconnectionAttempts: number;
|
|
109
|
+
reconnectionDelay: number;
|
|
110
|
+
maxReconnectionDelay: number;
|
|
111
|
+
heartbeatInterval: number;
|
|
112
|
+
ackTimeout: number;
|
|
113
|
+
mode: string;
|
|
114
|
+
maxPayloadSize: number;
|
|
115
|
+
messageQueueSize: number;
|
|
116
|
+
hasCustomReconnectDelay: boolean;
|
|
117
|
+
hooks: string[];
|
|
118
|
+
}>;
|
|
27
119
|
on(event: string, handler: StelarEventHandler): this;
|
|
28
120
|
off(event: string, handler: StelarEventHandler): this;
|
|
121
|
+
once(event: string, handler: StelarEventHandler): this;
|
|
29
122
|
onAll(handler: (data: {
|
|
30
123
|
event: string;
|
|
31
124
|
data: unknown;
|
|
@@ -33,20 +126,34 @@ declare class StelarClient {
|
|
|
33
126
|
buffer?: ArrayBuffer;
|
|
34
127
|
}) => void): this;
|
|
35
128
|
onAck(name: string, handler: StelarEventHandler): this;
|
|
129
|
+
removeAllListeners(event?: string): this;
|
|
36
130
|
emit(event: string, data?: unknown, opts?: StelarEmitOptions): this;
|
|
37
131
|
emitBinary(event: string, data: ArrayBuffer): this;
|
|
38
132
|
sendFile(file: ArrayBuffer): this;
|
|
39
133
|
sendImage(blob: ArrayBuffer): this;
|
|
134
|
+
/** Send a request and wait for an ACK response. Rejects on timeout. */
|
|
40
135
|
request(event: string, data: unknown, ackName: string): Promise<unknown>;
|
|
41
136
|
joinRoom(room: string): this;
|
|
42
|
-
leaveRoom(): this;
|
|
137
|
+
leaveRoom(room: string): this;
|
|
43
138
|
private startHeartbeat;
|
|
44
139
|
private stopHeartbeat;
|
|
45
|
-
private
|
|
140
|
+
private _getReconnectDelay;
|
|
141
|
+
private _drainQueue;
|
|
142
|
+
private _setState;
|
|
143
|
+
private _cleanupAcks;
|
|
144
|
+
private _fullCleanup;
|
|
46
145
|
connect(callback?: () => void): this;
|
|
47
146
|
disconnect(): this;
|
|
48
147
|
isConnected(): boolean;
|
|
49
|
-
|
|
148
|
+
private _connectBrowser;
|
|
149
|
+
private _handleBrowserMessage;
|
|
150
|
+
private _connectNodeWS;
|
|
151
|
+
private _processNodeWSData;
|
|
152
|
+
private _handleNodeWSFrame;
|
|
153
|
+
/** TCP mode: connects to WS port + 1 by convention. */
|
|
154
|
+
private _connectTCP;
|
|
155
|
+
private _handleTCPFrame;
|
|
156
|
+
private _tryReconnect;
|
|
50
157
|
}
|
|
51
158
|
export default StelarClient;
|
|
52
159
|
//# sourceMappingURL=client.d.ts.map
|
package/src/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["client.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["client.ts"],"names":[],"mappings":"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"}
|