@hazeljs/websocket 0.2.0-alpha.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.
@@ -0,0 +1,258 @@
1
+ import { IncomingMessage } from 'http';
2
+ /**
3
+ * WebSocket client interface
4
+ */
5
+ export interface WebSocketClient {
6
+ /**
7
+ * Unique client ID
8
+ */
9
+ id: string;
10
+ /**
11
+ * Client socket
12
+ */
13
+ socket: unknown;
14
+ /**
15
+ * Client metadata
16
+ */
17
+ metadata: Map<string, unknown>;
18
+ /**
19
+ * Rooms the client is in
20
+ */
21
+ rooms: Set<string>;
22
+ /**
23
+ * Send message to client
24
+ */
25
+ send(event: string, data: unknown): void;
26
+ /**
27
+ * Disconnect client
28
+ */
29
+ disconnect(): void;
30
+ /**
31
+ * Join a room
32
+ */
33
+ join(room: string): void;
34
+ /**
35
+ * Leave a room
36
+ */
37
+ leave(room: string): void;
38
+ /**
39
+ * Check if client is in a room
40
+ */
41
+ inRoom(room: string): boolean;
42
+ }
43
+ /**
44
+ * WebSocket message
45
+ */
46
+ export interface WebSocketMessage {
47
+ /**
48
+ * Event name
49
+ */
50
+ event: string;
51
+ /**
52
+ * Message data
53
+ */
54
+ data: unknown;
55
+ /**
56
+ * Timestamp
57
+ */
58
+ timestamp: number;
59
+ /**
60
+ * Client ID
61
+ */
62
+ clientId?: string;
63
+ }
64
+ /**
65
+ * WebSocket gateway options
66
+ */
67
+ export interface WebSocketGatewayOptions {
68
+ /**
69
+ * Gateway path
70
+ */
71
+ path?: string;
72
+ /**
73
+ * Namespace
74
+ */
75
+ namespace?: string;
76
+ /**
77
+ * CORS options
78
+ */
79
+ cors?: {
80
+ origin?: string | string[];
81
+ credentials?: boolean;
82
+ };
83
+ /**
84
+ * Authentication required
85
+ */
86
+ auth?: boolean;
87
+ /**
88
+ * Ping interval in milliseconds
89
+ */
90
+ pingInterval?: number;
91
+ /**
92
+ * Ping timeout in milliseconds
93
+ */
94
+ pingTimeout?: number;
95
+ /**
96
+ * Maximum payload size in bytes
97
+ */
98
+ maxPayload?: number;
99
+ }
100
+ /**
101
+ * Room interface
102
+ */
103
+ export interface Room {
104
+ /**
105
+ * Room name
106
+ */
107
+ name: string;
108
+ /**
109
+ * Clients in the room
110
+ */
111
+ clients: Set<string>;
112
+ /**
113
+ * Room metadata
114
+ */
115
+ metadata: Map<string, unknown>;
116
+ /**
117
+ * Created timestamp
118
+ */
119
+ createdAt: number;
120
+ }
121
+ /**
122
+ * WebSocket event handler
123
+ */
124
+ export type WebSocketEventHandler = (client: WebSocketClient, data: unknown) => void | Promise<void>;
125
+ /**
126
+ * Connection handler
127
+ */
128
+ export type ConnectionHandler = (client: WebSocketClient, request: IncomingMessage) => void | Promise<void>;
129
+ /**
130
+ * Disconnection handler
131
+ */
132
+ export type DisconnectionHandler = (client: WebSocketClient, reason?: string) => void | Promise<void>;
133
+ /**
134
+ * WebSocket server options
135
+ */
136
+ export interface WebSocketServerOptions {
137
+ /**
138
+ * Port to listen on
139
+ */
140
+ port?: number;
141
+ /**
142
+ * Host to bind to
143
+ */
144
+ host?: string;
145
+ /**
146
+ * Path for WebSocket endpoint
147
+ */
148
+ path?: string;
149
+ /**
150
+ * Enable per-message deflate
151
+ */
152
+ perMessageDeflate?: boolean;
153
+ /**
154
+ * Maximum payload size
155
+ */
156
+ maxPayload?: number;
157
+ /**
158
+ * Client tracking
159
+ */
160
+ clientTracking?: boolean;
161
+ }
162
+ /**
163
+ * SSE (Server-Sent Events) options
164
+ */
165
+ export interface SSEOptions {
166
+ /**
167
+ * Retry interval in milliseconds
168
+ */
169
+ retry?: number;
170
+ /**
171
+ * Keep-alive interval in milliseconds
172
+ */
173
+ keepAlive?: number;
174
+ /**
175
+ * Event ID
176
+ */
177
+ id?: string;
178
+ }
179
+ /**
180
+ * SSE message
181
+ */
182
+ export interface SSEMessage {
183
+ /**
184
+ * Event type
185
+ */
186
+ event?: string;
187
+ /**
188
+ * Message data
189
+ */
190
+ data: unknown;
191
+ /**
192
+ * Event ID
193
+ */
194
+ id?: string;
195
+ /**
196
+ * Retry interval
197
+ */
198
+ retry?: number;
199
+ }
200
+ /**
201
+ * Subscription options
202
+ */
203
+ export interface SubscriptionOptions {
204
+ /**
205
+ * Topic pattern
206
+ */
207
+ topic: string;
208
+ /**
209
+ * Filter function
210
+ */
211
+ filter?: (data: unknown) => boolean;
212
+ /**
213
+ * Transform function
214
+ */
215
+ transform?: (data: unknown) => unknown;
216
+ /**
217
+ * Batch size
218
+ */
219
+ batchSize?: number;
220
+ /**
221
+ * Batch interval in milliseconds
222
+ */
223
+ batchInterval?: number;
224
+ }
225
+ /**
226
+ * WebSocket statistics
227
+ */
228
+ export interface WebSocketStats {
229
+ /**
230
+ * Total connected clients
231
+ */
232
+ connectedClients: number;
233
+ /**
234
+ * Total rooms
235
+ */
236
+ totalRooms: number;
237
+ /**
238
+ * Messages sent
239
+ */
240
+ messagesSent: number;
241
+ /**
242
+ * Messages received
243
+ */
244
+ messagesReceived: number;
245
+ /**
246
+ * Bytes sent
247
+ */
248
+ bytesSent: number;
249
+ /**
250
+ * Bytes received
251
+ */
252
+ bytesReceived: number;
253
+ /**
254
+ * Uptime in milliseconds
255
+ */
256
+ uptime: number;
257
+ }
258
+ //# sourceMappingURL=websocket.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.types.d.ts","sourceRoot":"","sources":["../src/websocket.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@hazeljs/websocket",
3
+ "version": "0.2.0-alpha.1",
4
+ "description": "WebSocket and Server-Sent Events module for HazelJS framework",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "test": "jest --coverage --maxWorkers=1 --detectOpenHandles=false",
13
+ "lint": "eslint \"src/**/*.ts\"",
14
+ "lint:fix": "eslint \"src/**/*.ts\" --fix",
15
+ "clean": "rm -rf dist"
16
+ },
17
+ "dependencies": {
18
+ "ws": "^8.18.0"
19
+ },
20
+ "devDependencies": {
21
+ "@types/node": "^20.17.50",
22
+ "@types/ws": "^8.5.13",
23
+ "@typescript-eslint/eslint-plugin": "^8.18.2",
24
+ "@typescript-eslint/parser": "^8.18.2",
25
+ "eslint": "^8.56.0",
26
+ "jest": "^29.7.0",
27
+ "ts-jest": "^29.1.2",
28
+ "typescript": "^5.3.3"
29
+ },
30
+ "publishConfig": {
31
+ "access": "public"
32
+ },
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "git+https://github.com/hazel-js/hazeljs.git",
36
+ "directory": "packages/websocket"
37
+ },
38
+ "keywords": [
39
+ "hazeljs",
40
+ "websocket",
41
+ "sse",
42
+ "realtime",
43
+ "socket"
44
+ ],
45
+ "author": "Muhammad Arslan <muhammad.arslan@hazeljs.com>",
46
+ "license": "Apache-2.0",
47
+ "bugs": {
48
+ "url": "https://github.com/hazeljs/hazel-js/issues"
49
+ },
50
+ "homepage": "https://hazeljs.com",
51
+ "peerDependencies": {
52
+ "@hazeljs/core": ">=0.2.0-beta.0"
53
+ },
54
+ "gitHead": "cbc5ee2c12ced28fd0576faf13c5f078c1e8421e"
55
+ }