@morojs/moro 1.3.0 → 1.4.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.
Files changed (70) hide show
  1. package/README.md +61 -7
  2. package/dist/core/config/types.d.ts +147 -0
  3. package/dist/core/config/types.js +124 -0
  4. package/dist/core/config/types.js.map +1 -0
  5. package/dist/core/config/typescript-loader.d.ts +6 -0
  6. package/dist/core/config/typescript-loader.js +268 -0
  7. package/dist/core/config/typescript-loader.js.map +1 -0
  8. package/dist/core/config/validation.d.ts +18 -0
  9. package/dist/core/config/validation.js +134 -0
  10. package/dist/core/config/validation.js.map +1 -0
  11. package/dist/core/docs/openapi-generator.js +6 -6
  12. package/dist/core/docs/openapi-generator.js.map +1 -1
  13. package/dist/core/docs/schema-to-openapi.d.ts +7 -0
  14. package/dist/core/docs/schema-to-openapi.js +124 -0
  15. package/dist/core/docs/schema-to-openapi.js.map +1 -0
  16. package/dist/core/docs/zod-to-openapi.d.ts +2 -0
  17. package/dist/core/docs/zod-to-openapi.js.map +1 -1
  18. package/dist/core/framework.d.ts +29 -6
  19. package/dist/core/framework.js +117 -18
  20. package/dist/core/framework.js.map +1 -1
  21. package/dist/core/networking/adapters/index.d.ts +3 -0
  22. package/dist/core/networking/adapters/index.js +10 -0
  23. package/dist/core/networking/adapters/index.js.map +1 -0
  24. package/dist/core/networking/adapters/socketio-adapter.d.ts +16 -0
  25. package/dist/core/networking/adapters/socketio-adapter.js +244 -0
  26. package/dist/core/networking/adapters/socketio-adapter.js.map +1 -0
  27. package/dist/core/networking/adapters/ws-adapter.d.ts +54 -0
  28. package/dist/core/networking/adapters/ws-adapter.js +383 -0
  29. package/dist/core/networking/adapters/ws-adapter.js.map +1 -0
  30. package/dist/core/networking/websocket-adapter.d.ts +171 -0
  31. package/dist/core/networking/websocket-adapter.js +5 -0
  32. package/dist/core/networking/websocket-adapter.js.map +1 -0
  33. package/dist/core/networking/websocket-manager.d.ts +53 -17
  34. package/dist/core/networking/websocket-manager.js +166 -108
  35. package/dist/core/networking/websocket-manager.js.map +1 -1
  36. package/dist/core/routing/index.d.ts +13 -13
  37. package/dist/core/routing/index.js.map +1 -1
  38. package/dist/core/validation/adapters.d.ts +51 -0
  39. package/dist/core/validation/adapters.js +135 -0
  40. package/dist/core/validation/adapters.js.map +1 -0
  41. package/dist/core/validation/index.d.ts +14 -11
  42. package/dist/core/validation/index.js +37 -26
  43. package/dist/core/validation/index.js.map +1 -1
  44. package/dist/core/validation/schema-interface.d.ts +36 -0
  45. package/dist/core/validation/schema-interface.js +68 -0
  46. package/dist/core/validation/schema-interface.js.map +1 -0
  47. package/dist/index.d.ts +6 -1
  48. package/dist/index.js +14 -3
  49. package/dist/index.js.map +1 -1
  50. package/dist/moro.js +8 -2
  51. package/dist/moro.js.map +1 -1
  52. package/package.json +31 -7
  53. package/src/core/config/types.ts +277 -0
  54. package/src/core/config/typescript-loader.ts +571 -0
  55. package/src/core/config/validation.ts +145 -0
  56. package/src/core/docs/openapi-generator.ts +7 -6
  57. package/src/core/docs/schema-to-openapi.ts +148 -0
  58. package/src/core/docs/zod-to-openapi.ts +2 -0
  59. package/src/core/framework.ts +121 -28
  60. package/src/core/networking/adapters/index.ts +16 -0
  61. package/src/core/networking/adapters/socketio-adapter.ts +252 -0
  62. package/src/core/networking/adapters/ws-adapter.ts +425 -0
  63. package/src/core/networking/websocket-adapter.ts +217 -0
  64. package/src/core/networking/websocket-manager.ts +185 -127
  65. package/src/core/routing/index.ts +13 -13
  66. package/src/core/validation/adapters.ts +147 -0
  67. package/src/core/validation/index.ts +60 -38
  68. package/src/core/validation/schema-interface.ts +100 -0
  69. package/src/index.ts +25 -2
  70. package/src/moro.ts +11 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-adapter.js","sourceRoot":"","sources":["../../../../src/core/networking/adapters/ws-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,171 @@
1
+ export interface WebSocketAdapterOptions {
2
+ compression?: boolean;
3
+ cors?: {
4
+ origin?: string | string[] | boolean;
5
+ methods?: string[];
6
+ credentials?: boolean;
7
+ };
8
+ path?: string;
9
+ maxPayloadLength?: number;
10
+ idleTimeout?: number;
11
+ [key: string]: any;
12
+ }
13
+ /**
14
+ * Abstract WebSocket adapter interface
15
+ * Allows the framework to work with different WebSocket implementations
16
+ */
17
+ export interface WebSocketAdapter {
18
+ /**
19
+ * Initialize the WebSocket server with the given HTTP server
20
+ */
21
+ initialize(httpServer: any, options?: WebSocketAdapterOptions): Promise<void>;
22
+ /**
23
+ * Create a namespace for organizing WebSocket connections
24
+ */
25
+ createNamespace(namespace: string): WebSocketNamespace;
26
+ /**
27
+ * Get the default namespace (usually '/')
28
+ */
29
+ getDefaultNamespace(): WebSocketNamespace;
30
+ /**
31
+ * Close the WebSocket server and all connections
32
+ */
33
+ close(): Promise<void>;
34
+ /**
35
+ * Set compression configuration
36
+ */
37
+ setCompression(enabled: boolean, options?: any): void;
38
+ /**
39
+ * Set custom ID generator for connections
40
+ */
41
+ setCustomIdGenerator(generator: () => string): void;
42
+ /**
43
+ * Get adapter name/type
44
+ */
45
+ getAdapterName(): string;
46
+ /**
47
+ * Get connection count across all namespaces
48
+ */
49
+ getConnectionCount(): number;
50
+ }
51
+ /**
52
+ * WebSocket namespace interface
53
+ * Represents a logical grouping of WebSocket connections
54
+ */
55
+ export interface WebSocketNamespace {
56
+ /**
57
+ * Listen for connection events
58
+ */
59
+ on(event: 'connection', handler: (socket: WebSocketConnection) => void): void;
60
+ /**
61
+ * Emit event to all connected sockets in this namespace
62
+ */
63
+ emit(event: string, data: any): void;
64
+ /**
65
+ * Emit to specific room(s)
66
+ */
67
+ to(room: string | string[]): WebSocketEmitter;
68
+ /**
69
+ * Emit to sockets except those in specified room(s)
70
+ */
71
+ except(room: string | string[]): WebSocketEmitter;
72
+ /**
73
+ * Get all connected sockets
74
+ */
75
+ getSockets(): WebSocketConnection[];
76
+ /**
77
+ * Get connection count for this namespace
78
+ */
79
+ getConnectionCount(): number;
80
+ /**
81
+ * Use middleware for this namespace
82
+ */
83
+ use(middleware: (socket: WebSocketConnection, next: (err?: Error) => void) => void): void;
84
+ }
85
+ /**
86
+ * WebSocket connection interface
87
+ * Represents an individual client connection
88
+ */
89
+ export interface WebSocketConnection {
90
+ /** Unique connection ID */
91
+ id: string;
92
+ /** Client IP address */
93
+ ip?: string;
94
+ /** Connection headers */
95
+ headers?: Record<string, string>;
96
+ /** Custom data storage */
97
+ data: Record<string, any>;
98
+ /**
99
+ * Listen for events from this socket
100
+ */
101
+ on(event: string, handler: (data: any, callback?: (response?: any) => void) => void): void;
102
+ /**
103
+ * Listen for any event from this socket
104
+ */
105
+ onAny(handler: (event: string, ...args: any[]) => void): void;
106
+ /**
107
+ * Emit event to this socket
108
+ */
109
+ emit(event: string, data: any): void;
110
+ /**
111
+ * Emit with compression
112
+ */
113
+ compressedEmit?(event: string, data: any): void;
114
+ /**
115
+ * Join a room
116
+ */
117
+ join(room: string | string[]): void;
118
+ /**
119
+ * Leave a room
120
+ */
121
+ leave(room: string | string[]): void;
122
+ /**
123
+ * Emit to specific room(s)
124
+ */
125
+ to(room: string | string[]): WebSocketEmitter;
126
+ /**
127
+ * Emit to all sockets except this one
128
+ */
129
+ broadcast: WebSocketEmitter;
130
+ /**
131
+ * Get rooms this socket has joined
132
+ */
133
+ getRooms(): Set<string>;
134
+ /**
135
+ * Disconnect this socket
136
+ */
137
+ disconnect(close?: boolean): void;
138
+ /**
139
+ * Check if socket is connected
140
+ */
141
+ connected: boolean;
142
+ }
143
+ /**
144
+ * WebSocket emitter interface for chaining operations
145
+ */
146
+ export interface WebSocketEmitter {
147
+ /**
148
+ * Emit to target sockets
149
+ */
150
+ emit(event: string, data: any): void;
151
+ /**
152
+ * Target specific room(s)
153
+ */
154
+ to(room: string | string[]): WebSocketEmitter;
155
+ /**
156
+ * Exclude specific room(s)
157
+ */
158
+ except(room: string | string[]): WebSocketEmitter;
159
+ /**
160
+ * Use compression for this emit
161
+ */
162
+ compress(compress: boolean): WebSocketEmitter;
163
+ }
164
+ /**
165
+ * WebSocket middleware function type
166
+ */
167
+ export type WebSocketMiddleware = (socket: WebSocketConnection, next: (err?: Error) => void) => void;
168
+ /**
169
+ * WebSocket event handler type
170
+ */
171
+ export type WebSocketEventHandler = (socket: WebSocketConnection, data: any, callback?: (response?: any) => void) => void | Promise<void>;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ // WebSocket Adapter Interface for Moro Framework
3
+ // Provides a common interface for different WebSocket implementations
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ //# sourceMappingURL=websocket-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-adapter.js","sourceRoot":"","sources":["../../../src/core/networking/websocket-adapter.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,sEAAsE"}
@@ -1,27 +1,63 @@
1
- import { Server as SocketIOServer, Namespace } from 'socket.io';
2
1
  import { Container } from '../utilities';
3
2
  import { ModuleConfig, WebSocketDefinition } from '../../types/module';
3
+ import { WebSocketAdapter, WebSocketNamespace } from './websocket-adapter';
4
4
  export declare class WebSocketManager {
5
- private io;
5
+ private adapter;
6
6
  private container;
7
7
  private circuitBreakers;
8
8
  private rateLimiters;
9
- private compressionEnabled;
10
- private customIdGenerator?;
11
- constructor(io: SocketIOServer, container: Container);
12
- private setupAdvancedFeatures;
9
+ private logger;
10
+ constructor(adapter: WebSocketAdapter, container: Container);
11
+ /**
12
+ * Set custom ID generator for the adapter
13
+ */
13
14
  setCustomIdGenerator(generator: () => string): void;
14
- enableCompression(options?: {
15
- threshold?: number;
16
- concurrencyLimit?: number;
17
- memLevel?: number;
18
- }): void;
19
- private processBinaryData;
20
- private shouldCompress;
21
- registerHandler(namespace: Namespace, wsConfig: WebSocketDefinition, moduleConfig: ModuleConfig): Promise<void>;
22
- private setupSocketHandlers;
15
+ /**
16
+ * Enable compression for the adapter
17
+ */
18
+ enableCompression(options?: any): void;
19
+ /**
20
+ * Get the underlying adapter
21
+ */
22
+ getAdapter(): WebSocketAdapter;
23
+ /**
24
+ * Get connection count across all namespaces
25
+ */
26
+ getConnectionCount(): number;
27
+ /**
28
+ * Create or get a namespace
29
+ */
30
+ getNamespace(namespace: string): WebSocketNamespace;
31
+ /**
32
+ * Register WebSocket handlers for a module
33
+ */
34
+ registerHandler(namespace: WebSocketNamespace, wsConfig: WebSocketDefinition, moduleConfig: ModuleConfig): Promise<void>;
35
+ /**
36
+ * Setup socket-specific middleware
37
+ */
23
38
  private setupSocketMiddleware;
24
- private checkRateLimit;
39
+ /**
40
+ * Setup handlers for a specific WebSocket configuration
41
+ */
42
+ private setupSocketHandlers;
43
+ /**
44
+ * Get or create circuit breaker for handler
45
+ */
25
46
  private getCircuitBreaker;
26
- private cleanup;
47
+ /**
48
+ * Check rate limit for socket and handler
49
+ */
50
+ private checkRateLimit;
51
+ /**
52
+ * Process binary data efficiently
53
+ */
54
+ private processBinaryData;
55
+ /**
56
+ * Check if data should be compressed
57
+ */
58
+ private shouldCompress;
59
+ /**
60
+ * Close the WebSocket manager and underlying adapter
61
+ */
62
+ close(): Promise<void>;
27
63
  }
@@ -2,88 +2,91 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WebSocketManager = void 0;
4
4
  const utilities_1 = require("../utilities");
5
+ const logger_1 = require("../logger");
5
6
  class WebSocketManager {
6
- constructor(io, container) {
7
- this.io = io;
7
+ constructor(adapter, container) {
8
+ this.adapter = adapter;
8
9
  this.container = container;
9
10
  this.circuitBreakers = new Map();
10
11
  this.rateLimiters = new Map();
11
- this.compressionEnabled = true;
12
- this.setupAdvancedFeatures();
13
- }
14
- setupAdvancedFeatures() {
15
- // Enable compression for WebSocket messages
16
- if (this.compressionEnabled) {
17
- this.io.engine.compression = true;
18
- this.io.engine.perMessageDeflate = {
19
- threshold: 1024,
20
- concurrencyLimit: 10,
21
- memLevel: 8,
22
- };
23
- }
24
- // Custom session ID generation if provided
25
- if (this.customIdGenerator) {
26
- this.io.engine.generateId = this.customIdGenerator;
27
- }
28
- // Global WebSocket middleware for advanced features
29
- this.io.use((socket, next) => {
30
- // Add binary message handling
31
- socket.onAny((event, ...args) => {
32
- // Handle binary frames efficiently
33
- args.forEach((arg, index) => {
34
- if (Buffer.isBuffer(arg)) {
35
- // Process binary data with optimizations
36
- args[index] = this.processBinaryData(arg);
37
- }
38
- });
39
- });
40
- // Add compression per message
41
- socket.compressedEmit = (event, data) => {
42
- if (this.compressionEnabled && this.shouldCompress(data)) {
43
- socket.compress(true).emit(event, data);
44
- }
45
- else {
46
- socket.emit(event, data);
47
- }
48
- };
49
- // Add heartbeat mechanism
50
- socket.heartbeat = () => {
51
- socket.emit('heartbeat', { timestamp: Date.now() });
52
- };
53
- next();
54
- });
12
+ this.logger = (0, logger_1.createFrameworkLogger)('WebSocketManager');
13
+ this.logger.info(`Initialized with ${adapter.getAdapterName()} adapter`, 'AdapterInit');
55
14
  }
15
+ /**
16
+ * Set custom ID generator for the adapter
17
+ */
56
18
  setCustomIdGenerator(generator) {
57
- this.customIdGenerator = generator;
58
- this.io.engine.generateId = generator;
19
+ this.adapter.setCustomIdGenerator(generator);
59
20
  }
21
+ /**
22
+ * Enable compression for the adapter
23
+ */
60
24
  enableCompression(options) {
61
- this.compressionEnabled = true;
62
- if (options) {
63
- this.io.engine.perMessageDeflate = {
64
- threshold: options.threshold || 1024,
65
- concurrencyLimit: options.concurrencyLimit || 10,
66
- memLevel: options.memLevel || 8,
67
- };
68
- }
25
+ this.adapter.setCompression(true, options);
69
26
  }
70
- processBinaryData(buffer) {
71
- // Optimize binary data processing
72
- // Could add compression, validation, etc.
73
- return buffer;
27
+ /**
28
+ * Get the underlying adapter
29
+ */
30
+ getAdapter() {
31
+ return this.adapter;
74
32
  }
75
- shouldCompress(data) {
76
- // Determine if data should be compressed
77
- const serialized = JSON.stringify(data);
78
- return serialized.length > 1024; // Compress if larger than 1KB
33
+ /**
34
+ * Get connection count across all namespaces
35
+ */
36
+ getConnectionCount() {
37
+ return this.adapter.getConnectionCount();
38
+ }
39
+ /**
40
+ * Create or get a namespace
41
+ */
42
+ getNamespace(namespace) {
43
+ return this.adapter.createNamespace(namespace);
79
44
  }
45
+ /**
46
+ * Register WebSocket handlers for a module
47
+ */
80
48
  async registerHandler(namespace, wsConfig, moduleConfig) {
81
49
  namespace.on('connection', (socket) => {
82
- console.log(`WebSocket connected to /${moduleConfig.name}: ${socket.id}`);
83
- this.setupSocketHandlers(socket, wsConfig, moduleConfig);
50
+ this.logger.debug(`New connection: ${socket.id}`, 'Connection', {
51
+ namespace: namespace.constructor.name,
52
+ module: moduleConfig.name,
53
+ });
84
54
  this.setupSocketMiddleware(socket, moduleConfig.name);
55
+ this.setupSocketHandlers(socket, wsConfig, moduleConfig);
56
+ });
57
+ }
58
+ /**
59
+ * Setup socket-specific middleware
60
+ */
61
+ setupSocketMiddleware(socket, moduleName) {
62
+ // Add module context to socket data
63
+ socket.data.module = moduleName;
64
+ socket.data.connectedAt = Date.now();
65
+ // Setup heartbeat if supported
66
+ if (socket.compressedEmit) {
67
+ const heartbeatInterval = setInterval(() => {
68
+ if (socket.connected) {
69
+ socket.emit('heartbeat', { timestamp: Date.now() });
70
+ }
71
+ else {
72
+ clearInterval(heartbeatInterval);
73
+ }
74
+ }, 30000); // 30 seconds
75
+ socket.on('disconnect', () => {
76
+ clearInterval(heartbeatInterval);
77
+ });
78
+ }
79
+ // Log disconnection
80
+ socket.on('disconnect', () => {
81
+ this.logger.debug(`Socket disconnected: ${socket.id}`, 'Disconnect', {
82
+ module: moduleName,
83
+ duration: Date.now() - socket.data.connectedAt,
84
+ });
85
85
  });
86
86
  }
87
+ /**
88
+ * Setup handlers for a specific WebSocket configuration
89
+ */
87
90
  setupSocketHandlers(socket, wsConfig, moduleConfig) {
88
91
  socket.on(wsConfig.event, async (data, callback) => {
89
92
  const handlerKey = `${moduleConfig.name}.${wsConfig.handler}`;
@@ -101,7 +104,7 @@ class WebSocketManager {
101
104
  socket.emit('error', error);
102
105
  return;
103
106
  }
104
- // Validation (Zod-only)
107
+ // Validation using Zod
105
108
  if (wsConfig.validation) {
106
109
  try {
107
110
  data = wsConfig.validation.parse(data);
@@ -136,74 +139,129 @@ class WebSocketManager {
136
139
  if (callback) {
137
140
  callback({ success: true, data: result });
138
141
  }
139
- else if (wsConfig.broadcast && result?.event) {
140
- socket.broadcast.emit(result.event, result.data);
142
+ else if (result !== undefined) {
143
+ socket.emit(`${wsConfig.event}:response`, { success: true, data: result });
144
+ }
145
+ // Handle room operations
146
+ if (wsConfig.rooms) {
147
+ wsConfig.rooms.forEach(room => socket.join(room));
141
148
  }
142
- else if (result) {
143
- socket.emit(`${wsConfig.event}:response`, result);
149
+ // Handle broadcasting
150
+ if (wsConfig.broadcast && result !== undefined) {
151
+ socket.broadcast.emit(wsConfig.event, { success: true, data: result });
144
152
  }
145
153
  }
146
154
  catch (error) {
147
- const errorMessage = error instanceof Error ? error.message : String(error);
148
- const errorCode = error?.code || 'INTERNAL_ERROR';
149
- console.error(`WebSocket error in ${handlerKey}:`, errorMessage);
155
+ this.logger.error('WebSocket handler error', 'HandlerError', {
156
+ handler: handlerKey,
157
+ error: error instanceof Error ? error.message : String(error),
158
+ socketId: socket.id,
159
+ });
150
160
  const errorResponse = {
151
161
  success: false,
152
- error: errorMessage,
153
- code: errorCode,
162
+ error: 'Internal server error',
163
+ code: 'HANDLER_ERROR',
154
164
  };
155
- if (callback) {
165
+ if (callback)
156
166
  callback(errorResponse);
157
- }
158
- else {
167
+ else
159
168
  socket.emit('error', errorResponse);
160
- }
161
169
  }
162
170
  });
163
171
  }
164
- setupSocketMiddleware(socket, moduleName) {
165
- socket.on('disconnect', reason => {
166
- console.log(`WebSocket disconnected from /${moduleName}: ${socket.id} (${reason})`);
167
- this.cleanup(socket.id);
168
- });
169
- socket.on('ping', () => {
170
- socket.emit('pong');
171
- });
172
+ /**
173
+ * Get or create circuit breaker for handler
174
+ */
175
+ getCircuitBreaker(handlerKey) {
176
+ if (!this.circuitBreakers.has(handlerKey)) {
177
+ const circuitBreaker = new utilities_1.CircuitBreaker({
178
+ failureThreshold: 5,
179
+ resetTimeout: 60000,
180
+ monitoringPeriod: 10000,
181
+ });
182
+ this.circuitBreakers.set(handlerKey, circuitBreaker);
183
+ }
184
+ return this.circuitBreakers.get(handlerKey);
172
185
  }
186
+ /**
187
+ * Check rate limit for socket and handler
188
+ */
173
189
  checkRateLimit(socketId, handlerKey, rateLimit) {
174
190
  if (!this.rateLimiters.has(handlerKey)) {
175
191
  this.rateLimiters.set(handlerKey, new Map());
176
192
  }
177
193
  const handlerLimiter = this.rateLimiters.get(handlerKey);
178
194
  const now = Date.now();
179
- const socketLimit = handlerLimiter.get(socketId);
180
- if (!socketLimit || now > socketLimit.resetTime) {
181
- handlerLimiter.set(socketId, {
182
- count: 1,
183
- resetTime: now + rateLimit.window,
184
- });
195
+ const windowStart = now - rateLimit.window;
196
+ // Clean old entries
197
+ for (const [id, data] of handlerLimiter.entries()) {
198
+ if (data.resetTime < windowStart) {
199
+ handlerLimiter.delete(id);
200
+ }
201
+ }
202
+ // Check current socket
203
+ const socketData = handlerLimiter.get(socketId);
204
+ if (!socketData) {
205
+ handlerLimiter.set(socketId, { count: 1, resetTime: now });
185
206
  return true;
186
207
  }
187
- if (socketLimit.count >= rateLimit.requests) {
208
+ if (socketData.resetTime < windowStart) {
209
+ socketData.count = 1;
210
+ socketData.resetTime = now;
211
+ return true;
212
+ }
213
+ if (socketData.count >= rateLimit.requests) {
188
214
  return false;
189
215
  }
190
- socketLimit.count++;
216
+ socketData.count++;
191
217
  return true;
192
218
  }
193
- getCircuitBreaker(key) {
194
- if (!this.circuitBreakers.has(key)) {
195
- this.circuitBreakers.set(key, new utilities_1.CircuitBreaker({
196
- failureThreshold: 5,
197
- resetTimeout: 30000,
198
- monitoringPeriod: 10000,
199
- }));
219
+ /**
220
+ * Process binary data efficiently
221
+ */
222
+ processBinaryData(buffer) {
223
+ // Example binary processing - can be extended based on needs
224
+ if (buffer.length === 0)
225
+ return buffer;
226
+ // Simple compression check
227
+ if (buffer[0] === 0x1f && buffer[1] === 0x8b) {
228
+ // This is gzipped data
229
+ try {
230
+ const zlib = require('zlib');
231
+ return zlib.gunzipSync(buffer);
232
+ }
233
+ catch {
234
+ return buffer;
235
+ }
200
236
  }
201
- return this.circuitBreakers.get(key);
237
+ return buffer;
202
238
  }
203
- cleanup(socketId) {
204
- this.rateLimiters.forEach(limiter => {
205
- limiter.delete(socketId);
206
- });
239
+ /**
240
+ * Check if data should be compressed
241
+ */
242
+ shouldCompress(data) {
243
+ if (typeof data === 'string') {
244
+ return data.length > 1024;
245
+ }
246
+ if (Buffer.isBuffer(data)) {
247
+ return data.length > 1024;
248
+ }
249
+ if (typeof data === 'object') {
250
+ return JSON.stringify(data).length > 1024;
251
+ }
252
+ return false;
253
+ }
254
+ /**
255
+ * Close the WebSocket manager and underlying adapter
256
+ */
257
+ async close() {
258
+ this.logger.info('Closing WebSocket manager', 'Shutdown');
259
+ // Clear rate limiters
260
+ this.rateLimiters.clear();
261
+ // Clear circuit breakers
262
+ this.circuitBreakers.clear();
263
+ // Close adapter
264
+ await this.adapter.close();
207
265
  }
208
266
  }
209
267
  exports.WebSocketManager = WebSocketManager;