stelar-time-real 2.0.4 → 3.2.0

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "stelar-time-real",
3
- "version": "2.0.4",
4
- "description": "WebSocket liviano y rápido sin dependendas en TypeScript. Alternativa a socket.io, namespaces, ACKs y archivos binarios.",
3
+ "version": "3.2.0",
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
- "socket",
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/ws": "^8.5.10",
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 StelarBinaryHandler = (buffer: ArrayBuffer) => void;
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 connected;
20
- private id;
75
+ private _acks;
76
+ private _state;
21
77
  private _reconnectAttempts;
22
78
  private _hbTimer;
23
79
  private _isManualClose;
24
- private _acks;
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 _connect;
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
- getUrl(): string;
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
@@ -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;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;AACzD,MAAM,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;AAEhE,cAAM,YAAY;IAChB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,gBAAgB,CAA6G;IACrI,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,EAAE,CAAuB;IACjC,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,QAAQ,CAA+C;IAC/D,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,KAAK,CAAyC;gBAE1C,SAAS,GAAE,MAAM,GAAG,MAAyB,EAAE,OAAO,GAAE,mBAAwB;IAkB5F,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKzB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAKpD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAOrD,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI;IAKhH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAKtD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,GAAE,iBAAsB,GAAG,IAAI;IAWvE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI;IAalD,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAIjC,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAIlC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBxE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK5B,SAAS,IAAI,IAAI;IAKjB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,QAAQ;IAgFhB,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAapC,UAAU,IAAI,IAAI;IAOlB,WAAW,IAAI,OAAO;IAItB,MAAM,IAAI,MAAM;CAGjB;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["client.ts"],"names":[],"mappings":"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"}