@superdangerous/app-framework 4.9.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 (239) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +652 -0
  3. package/dist/api/logsRouter.d.ts +20 -0
  4. package/dist/api/logsRouter.d.ts.map +1 -0
  5. package/dist/api/logsRouter.js +515 -0
  6. package/dist/api/logsRouter.js.map +1 -0
  7. package/dist/cli/dev-server.d.ts +7 -0
  8. package/dist/cli/dev-server.d.ts.map +1 -0
  9. package/dist/cli/dev-server.js +640 -0
  10. package/dist/cli/dev-server.js.map +1 -0
  11. package/dist/cli/index.d.ts +7 -0
  12. package/dist/cli/index.d.ts.map +1 -0
  13. package/dist/cli/index.js +26 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/core/StandardServer.d.ts +129 -0
  16. package/dist/core/StandardServer.d.ts.map +1 -0
  17. package/dist/core/StandardServer.js +453 -0
  18. package/dist/core/StandardServer.js.map +1 -0
  19. package/dist/core/apiResponse.d.ts +69 -0
  20. package/dist/core/apiResponse.d.ts.map +1 -0
  21. package/dist/core/apiResponse.js +127 -0
  22. package/dist/core/apiResponse.js.map +1 -0
  23. package/dist/core/healthCheck.d.ts +160 -0
  24. package/dist/core/healthCheck.d.ts.map +1 -0
  25. package/dist/core/healthCheck.js +398 -0
  26. package/dist/core/healthCheck.js.map +1 -0
  27. package/dist/core/index.d.ts +40 -0
  28. package/dist/core/index.d.ts.map +1 -0
  29. package/dist/core/index.js +40 -0
  30. package/dist/core/index.js.map +1 -0
  31. package/dist/core/logger.d.ts +117 -0
  32. package/dist/core/logger.d.ts.map +1 -0
  33. package/dist/core/logger.js +826 -0
  34. package/dist/core/logger.js.map +1 -0
  35. package/dist/core/portUtils.d.ts +71 -0
  36. package/dist/core/portUtils.d.ts.map +1 -0
  37. package/dist/core/portUtils.js +240 -0
  38. package/dist/core/portUtils.js.map +1 -0
  39. package/dist/core/storageService.d.ts +119 -0
  40. package/dist/core/storageService.d.ts.map +1 -0
  41. package/dist/core/storageService.js +405 -0
  42. package/dist/core/storageService.js.map +1 -0
  43. package/dist/desktop/bundler.d.ts +40 -0
  44. package/dist/desktop/bundler.d.ts.map +1 -0
  45. package/dist/desktop/bundler.js +176 -0
  46. package/dist/desktop/bundler.js.map +1 -0
  47. package/dist/desktop/index.d.ts +25 -0
  48. package/dist/desktop/index.d.ts.map +1 -0
  49. package/dist/desktop/index.js +15 -0
  50. package/dist/desktop/index.js.map +1 -0
  51. package/dist/desktop/native-modules.d.ts +66 -0
  52. package/dist/desktop/native-modules.d.ts.map +1 -0
  53. package/dist/desktop/native-modules.js +200 -0
  54. package/dist/desktop/native-modules.js.map +1 -0
  55. package/dist/index.d.ts +29 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +39 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/logging/LogCategories.d.ts +87 -0
  60. package/dist/logging/LogCategories.d.ts.map +1 -0
  61. package/dist/logging/LogCategories.js +205 -0
  62. package/dist/logging/LogCategories.js.map +1 -0
  63. package/dist/middleware/aiErrorHandler.d.ts +31 -0
  64. package/dist/middleware/aiErrorHandler.d.ts.map +1 -0
  65. package/dist/middleware/aiErrorHandler.js +181 -0
  66. package/dist/middleware/aiErrorHandler.js.map +1 -0
  67. package/dist/middleware/auth.d.ts +101 -0
  68. package/dist/middleware/auth.d.ts.map +1 -0
  69. package/dist/middleware/auth.js +230 -0
  70. package/dist/middleware/auth.js.map +1 -0
  71. package/dist/middleware/cors.d.ts +56 -0
  72. package/dist/middleware/cors.d.ts.map +1 -0
  73. package/dist/middleware/cors.js +123 -0
  74. package/dist/middleware/cors.js.map +1 -0
  75. package/dist/middleware/errorHandler.d.ts +13 -0
  76. package/dist/middleware/errorHandler.d.ts.map +1 -0
  77. package/dist/middleware/errorHandler.js +85 -0
  78. package/dist/middleware/errorHandler.js.map +1 -0
  79. package/dist/middleware/fileUpload.d.ts +62 -0
  80. package/dist/middleware/fileUpload.d.ts.map +1 -0
  81. package/dist/middleware/fileUpload.js +175 -0
  82. package/dist/middleware/fileUpload.js.map +1 -0
  83. package/dist/middleware/health.d.ts +48 -0
  84. package/dist/middleware/health.d.ts.map +1 -0
  85. package/dist/middleware/health.js +143 -0
  86. package/dist/middleware/health.js.map +1 -0
  87. package/dist/middleware/index.d.ts +20 -0
  88. package/dist/middleware/index.d.ts.map +1 -0
  89. package/dist/middleware/index.js +18 -0
  90. package/dist/middleware/index.js.map +1 -0
  91. package/dist/middleware/openapi.d.ts +64 -0
  92. package/dist/middleware/openapi.d.ts.map +1 -0
  93. package/dist/middleware/openapi.js +258 -0
  94. package/dist/middleware/openapi.js.map +1 -0
  95. package/dist/middleware/requestLogging.d.ts +22 -0
  96. package/dist/middleware/requestLogging.d.ts.map +1 -0
  97. package/dist/middleware/requestLogging.js +61 -0
  98. package/dist/middleware/requestLogging.js.map +1 -0
  99. package/dist/middleware/session.d.ts +84 -0
  100. package/dist/middleware/session.d.ts.map +1 -0
  101. package/dist/middleware/session.js +189 -0
  102. package/dist/middleware/session.js.map +1 -0
  103. package/dist/middleware/validation.d.ts +1337 -0
  104. package/dist/middleware/validation.d.ts.map +1 -0
  105. package/dist/middleware/validation.js +483 -0
  106. package/dist/middleware/validation.js.map +1 -0
  107. package/dist/services/aiService.d.ts +180 -0
  108. package/dist/services/aiService.d.ts.map +1 -0
  109. package/dist/services/aiService.js +547 -0
  110. package/dist/services/aiService.js.map +1 -0
  111. package/dist/services/conversationStorage.d.ts +38 -0
  112. package/dist/services/conversationStorage.d.ts.map +1 -0
  113. package/dist/services/conversationStorage.js +158 -0
  114. package/dist/services/conversationStorage.js.map +1 -0
  115. package/dist/services/crossPlatformBuffer.d.ts +84 -0
  116. package/dist/services/crossPlatformBuffer.d.ts.map +1 -0
  117. package/dist/services/crossPlatformBuffer.js +246 -0
  118. package/dist/services/crossPlatformBuffer.js.map +1 -0
  119. package/dist/services/index.d.ts +17 -0
  120. package/dist/services/index.d.ts.map +1 -0
  121. package/dist/services/index.js +18 -0
  122. package/dist/services/index.js.map +1 -0
  123. package/dist/services/networkService.d.ts +81 -0
  124. package/dist/services/networkService.d.ts.map +1 -0
  125. package/dist/services/networkService.js +268 -0
  126. package/dist/services/networkService.js.map +1 -0
  127. package/dist/services/queueService.d.ts +112 -0
  128. package/dist/services/queueService.d.ts.map +1 -0
  129. package/dist/services/queueService.js +338 -0
  130. package/dist/services/queueService.js.map +1 -0
  131. package/dist/services/settingsService.d.ts +135 -0
  132. package/dist/services/settingsService.d.ts.map +1 -0
  133. package/dist/services/settingsService.js +425 -0
  134. package/dist/services/settingsService.js.map +1 -0
  135. package/dist/services/systemMonitor.d.ts +208 -0
  136. package/dist/services/systemMonitor.d.ts.map +1 -0
  137. package/dist/services/systemMonitor.js +693 -0
  138. package/dist/services/systemMonitor.js.map +1 -0
  139. package/dist/services/updateService.d.ts +78 -0
  140. package/dist/services/updateService.d.ts.map +1 -0
  141. package/dist/services/updateService.js +252 -0
  142. package/dist/services/updateService.js.map +1 -0
  143. package/dist/services/websocketEvents.d.ts +372 -0
  144. package/dist/services/websocketEvents.d.ts.map +1 -0
  145. package/dist/services/websocketEvents.js +338 -0
  146. package/dist/services/websocketEvents.js.map +1 -0
  147. package/dist/services/websocketServer.d.ts +80 -0
  148. package/dist/services/websocketServer.d.ts.map +1 -0
  149. package/dist/services/websocketServer.js +299 -0
  150. package/dist/services/websocketServer.js.map +1 -0
  151. package/dist/settings/SettingsSchema.d.ts +151 -0
  152. package/dist/settings/SettingsSchema.d.ts.map +1 -0
  153. package/dist/settings/SettingsSchema.js +424 -0
  154. package/dist/settings/SettingsSchema.js.map +1 -0
  155. package/dist/testing/TestServer.d.ts +69 -0
  156. package/dist/testing/TestServer.d.ts.map +1 -0
  157. package/dist/testing/TestServer.js +250 -0
  158. package/dist/testing/TestServer.js.map +1 -0
  159. package/dist/types/index.d.ts +137 -0
  160. package/dist/types/index.d.ts.map +1 -0
  161. package/dist/types/index.js +5 -0
  162. package/dist/types/index.js.map +1 -0
  163. package/dist/utils/appPaths.d.ts +74 -0
  164. package/dist/utils/appPaths.d.ts.map +1 -0
  165. package/dist/utils/appPaths.js +162 -0
  166. package/dist/utils/appPaths.js.map +1 -0
  167. package/dist/utils/fs-utils.d.ts +50 -0
  168. package/dist/utils/fs-utils.d.ts.map +1 -0
  169. package/dist/utils/fs-utils.js +114 -0
  170. package/dist/utils/fs-utils.js.map +1 -0
  171. package/dist/utils/index.d.ts +12 -0
  172. package/dist/utils/index.d.ts.map +1 -0
  173. package/dist/utils/index.js +10 -0
  174. package/dist/utils/index.js.map +1 -0
  175. package/dist/utils/standardConfig.d.ts +61 -0
  176. package/dist/utils/standardConfig.d.ts.map +1 -0
  177. package/dist/utils/standardConfig.js +109 -0
  178. package/dist/utils/standardConfig.js.map +1 -0
  179. package/dist/utils/startupBanner.d.ts +34 -0
  180. package/dist/utils/startupBanner.d.ts.map +1 -0
  181. package/dist/utils/startupBanner.js +169 -0
  182. package/dist/utils/startupBanner.js.map +1 -0
  183. package/dist/utils/startupLogger.d.ts +45 -0
  184. package/dist/utils/startupLogger.d.ts.map +1 -0
  185. package/dist/utils/startupLogger.js +200 -0
  186. package/dist/utils/startupLogger.js.map +1 -0
  187. package/package.json +151 -0
  188. package/src/api/logsRouter.ts +600 -0
  189. package/src/cli/dev-server.ts +803 -0
  190. package/src/cli/index.ts +31 -0
  191. package/src/core/StandardServer.ts +587 -0
  192. package/src/core/apiResponse.ts +202 -0
  193. package/src/core/healthCheck.ts +565 -0
  194. package/src/core/index.ts +80 -0
  195. package/src/core/logger.ts +1092 -0
  196. package/src/core/portUtils.ts +319 -0
  197. package/src/core/storageService.ts +595 -0
  198. package/src/desktop/bundler.ts +271 -0
  199. package/src/desktop/index.ts +18 -0
  200. package/src/desktop/native-modules.ts +289 -0
  201. package/src/index.ts +142 -0
  202. package/src/logging/LogCategories.ts +302 -0
  203. package/src/middleware/aiErrorHandler.ts +278 -0
  204. package/src/middleware/auth.ts +329 -0
  205. package/src/middleware/cors.ts +187 -0
  206. package/src/middleware/errorHandler.ts +103 -0
  207. package/src/middleware/fileUpload.ts +252 -0
  208. package/src/middleware/health.ts +206 -0
  209. package/src/middleware/index.ts +71 -0
  210. package/src/middleware/openapi.ts +305 -0
  211. package/src/middleware/requestLogging.ts +92 -0
  212. package/src/middleware/session.ts +238 -0
  213. package/src/middleware/validation.ts +603 -0
  214. package/src/services/aiService.ts +789 -0
  215. package/src/services/conversationStorage.ts +232 -0
  216. package/src/services/crossPlatformBuffer.ts +341 -0
  217. package/src/services/index.ts +47 -0
  218. package/src/services/networkService.ts +351 -0
  219. package/src/services/queueService.ts +446 -0
  220. package/src/services/settingsService.ts +549 -0
  221. package/src/services/systemMonitor.ts +936 -0
  222. package/src/services/updateService.ts +334 -0
  223. package/src/services/websocketEvents.ts +409 -0
  224. package/src/services/websocketServer.ts +394 -0
  225. package/src/settings/SettingsSchema.ts +664 -0
  226. package/src/testing/TestServer.ts +312 -0
  227. package/src/types/index.ts +154 -0
  228. package/src/utils/appPaths.ts +196 -0
  229. package/src/utils/fs-utils.ts +130 -0
  230. package/src/utils/index.ts +15 -0
  231. package/src/utils/standardConfig.ts +178 -0
  232. package/src/utils/startupBanner.ts +287 -0
  233. package/src/utils/startupLogger.ts +268 -0
  234. package/ui/dist/index.d.mts +1221 -0
  235. package/ui/dist/index.d.ts +1221 -0
  236. package/ui/dist/index.js +73 -0
  237. package/ui/dist/index.js.map +1 -0
  238. package/ui/dist/index.mjs +73 -0
  239. package/ui/dist/index.mjs.map +1 -0
@@ -0,0 +1,372 @@
1
+ /**
2
+ * WebSocket Event System
3
+ * Standardized event patterns for real-time communication
4
+ */
5
+ import { Server as SocketIOServer, Socket } from "socket.io";
6
+ /**
7
+ * Standard event types
8
+ */
9
+ export declare enum EventTypes {
10
+ CONNECT = "connect",
11
+ DISCONNECT = "disconnect",
12
+ ERROR = "error",
13
+ DATA_UPDATE = "data:update",
14
+ DATA_CREATE = "data:create",
15
+ DATA_DELETE = "data:delete",
16
+ DATA_SYNC = "data:sync",
17
+ STATUS_CHANGE = "status:change",
18
+ STATUS_HEALTH = "status:health",
19
+ STATUS_METRICS = "status:metrics",
20
+ CONTROL_START = "control:start",
21
+ CONTROL_STOP = "control:stop",
22
+ CONTROL_RESTART = "control:restart",
23
+ CONTROL_CONFIG = "control:config",
24
+ SUBSCRIBE = "subscribe",
25
+ UNSUBSCRIBE = "unsubscribe",
26
+ SYSTEM_PING = "system:ping",
27
+ SYSTEM_PONG = "system:pong",
28
+ SYSTEM_INFO = "system:info",
29
+ SYSTEM_ALERT = "system:alert"
30
+ }
31
+ /**
32
+ * Standard event payload structure
33
+ */
34
+ export interface EventPayload<T = any> {
35
+ id?: string;
36
+ timestamp: string;
37
+ type: string;
38
+ source?: string;
39
+ target?: string;
40
+ data: T;
41
+ metadata?: Record<string, any>;
42
+ }
43
+ /**
44
+ * Event response structure
45
+ */
46
+ export interface EventResponse<T = any> {
47
+ success: boolean;
48
+ data?: T;
49
+ error?: string;
50
+ timestamp: string;
51
+ }
52
+ /**
53
+ * WebSocket Event Manager
54
+ */
55
+ export declare class WebSocketEventManager {
56
+ private io;
57
+ private subscriptions;
58
+ private eventHandlers;
59
+ constructor(io: SocketIOServer);
60
+ /**
61
+ * Setup default event handlers
62
+ */
63
+ private setupDefaultHandlers;
64
+ /**
65
+ * Subscribe socket to a channel
66
+ */
67
+ subscribe(socket: Socket, channel: string): void;
68
+ /**
69
+ * Unsubscribe socket from a channel
70
+ */
71
+ unsubscribe(socket: Socket, channel: string): void;
72
+ /**
73
+ * Clean up all subscriptions for a socket
74
+ */
75
+ private cleanupSubscriptions;
76
+ /**
77
+ * Emit event to all clients
78
+ */
79
+ broadcast<T>(event: string, payload: EventPayload<T>): void;
80
+ /**
81
+ * Emit event to specific room/channel
82
+ */
83
+ emit<T>(channel: string, event: string, payload: EventPayload<T>): void;
84
+ /**
85
+ * Send event to specific socket
86
+ */
87
+ send<T>(socketId: string, event: string, payload: EventPayload<T>): void;
88
+ /**
89
+ * Register custom event handler
90
+ */
91
+ on(event: string, handler: (socket: Socket, data: any) => void): void;
92
+ /**
93
+ * Get subscription statistics
94
+ */
95
+ getStats(): {
96
+ connections: number;
97
+ channels: number;
98
+ subscriptions: Record<string, number>;
99
+ };
100
+ }
101
+ /**
102
+ * Typed event emitter for specific domains
103
+ */
104
+ export declare class TypedEventEmitter<T extends Record<string, any>> {
105
+ private manager;
106
+ private namespace;
107
+ constructor(manager: WebSocketEventManager, namespace: string);
108
+ /**
109
+ * Emit typed event
110
+ */
111
+ emit<K extends keyof T>(event: K, data: T[K]): void;
112
+ /**
113
+ * Emit to specific channel
114
+ */
115
+ emitTo<K extends keyof T>(channel: string, event: K, data: T[K]): void;
116
+ }
117
+ /**
118
+ * Create event patterns for common use cases
119
+ */
120
+ export declare const EventPatterns: {
121
+ /**
122
+ * CRUD event pattern
123
+ */
124
+ crud: <T>(namespace: string) => {
125
+ created: (data: T) => {
126
+ event: string;
127
+ payload: {
128
+ timestamp: string;
129
+ type: string;
130
+ data: T;
131
+ };
132
+ };
133
+ updated: (data: T) => {
134
+ event: string;
135
+ payload: {
136
+ timestamp: string;
137
+ type: string;
138
+ data: T;
139
+ };
140
+ };
141
+ deleted: (id: string) => {
142
+ event: string;
143
+ payload: {
144
+ timestamp: string;
145
+ type: string;
146
+ data: {
147
+ id: string;
148
+ };
149
+ };
150
+ };
151
+ list: (data: T[]) => {
152
+ event: string;
153
+ payload: {
154
+ timestamp: string;
155
+ type: string;
156
+ data: T[];
157
+ };
158
+ };
159
+ };
160
+ /**
161
+ * Status event pattern
162
+ */
163
+ status: (namespace: string) => {
164
+ online: () => {
165
+ event: string;
166
+ payload: {
167
+ timestamp: string;
168
+ type: string;
169
+ data: {
170
+ status: string;
171
+ };
172
+ };
173
+ };
174
+ offline: () => {
175
+ event: string;
176
+ payload: {
177
+ timestamp: string;
178
+ type: string;
179
+ data: {
180
+ status: string;
181
+ };
182
+ };
183
+ };
184
+ error: (error: string) => {
185
+ event: string;
186
+ payload: {
187
+ timestamp: string;
188
+ type: string;
189
+ data: {
190
+ error: string;
191
+ };
192
+ };
193
+ };
194
+ health: (health: any) => {
195
+ event: string;
196
+ payload: {
197
+ timestamp: string;
198
+ type: string;
199
+ data: any;
200
+ };
201
+ };
202
+ };
203
+ /**
204
+ * Data stream pattern
205
+ */
206
+ stream: <T>(namespace: string) => {
207
+ start: () => {
208
+ event: string;
209
+ payload: {
210
+ timestamp: string;
211
+ type: string;
212
+ data: {};
213
+ };
214
+ };
215
+ data: (data: T) => {
216
+ event: string;
217
+ payload: {
218
+ timestamp: string;
219
+ type: string;
220
+ data: T;
221
+ };
222
+ };
223
+ end: () => {
224
+ event: string;
225
+ payload: {
226
+ timestamp: string;
227
+ type: string;
228
+ data: {};
229
+ };
230
+ };
231
+ error: (error: string) => {
232
+ event: string;
233
+ payload: {
234
+ timestamp: string;
235
+ type: string;
236
+ data: {
237
+ error: string;
238
+ };
239
+ };
240
+ };
241
+ };
242
+ };
243
+ declare const _default: {
244
+ WebSocketEventManager: typeof WebSocketEventManager;
245
+ TypedEventEmitter: typeof TypedEventEmitter;
246
+ EventTypes: typeof EventTypes;
247
+ EventPatterns: {
248
+ /**
249
+ * CRUD event pattern
250
+ */
251
+ crud: <T>(namespace: string) => {
252
+ created: (data: T) => {
253
+ event: string;
254
+ payload: {
255
+ timestamp: string;
256
+ type: string;
257
+ data: T;
258
+ };
259
+ };
260
+ updated: (data: T) => {
261
+ event: string;
262
+ payload: {
263
+ timestamp: string;
264
+ type: string;
265
+ data: T;
266
+ };
267
+ };
268
+ deleted: (id: string) => {
269
+ event: string;
270
+ payload: {
271
+ timestamp: string;
272
+ type: string;
273
+ data: {
274
+ id: string;
275
+ };
276
+ };
277
+ };
278
+ list: (data: T[]) => {
279
+ event: string;
280
+ payload: {
281
+ timestamp: string;
282
+ type: string;
283
+ data: T[];
284
+ };
285
+ };
286
+ };
287
+ /**
288
+ * Status event pattern
289
+ */
290
+ status: (namespace: string) => {
291
+ online: () => {
292
+ event: string;
293
+ payload: {
294
+ timestamp: string;
295
+ type: string;
296
+ data: {
297
+ status: string;
298
+ };
299
+ };
300
+ };
301
+ offline: () => {
302
+ event: string;
303
+ payload: {
304
+ timestamp: string;
305
+ type: string;
306
+ data: {
307
+ status: string;
308
+ };
309
+ };
310
+ };
311
+ error: (error: string) => {
312
+ event: string;
313
+ payload: {
314
+ timestamp: string;
315
+ type: string;
316
+ data: {
317
+ error: string;
318
+ };
319
+ };
320
+ };
321
+ health: (health: any) => {
322
+ event: string;
323
+ payload: {
324
+ timestamp: string;
325
+ type: string;
326
+ data: any;
327
+ };
328
+ };
329
+ };
330
+ /**
331
+ * Data stream pattern
332
+ */
333
+ stream: <T>(namespace: string) => {
334
+ start: () => {
335
+ event: string;
336
+ payload: {
337
+ timestamp: string;
338
+ type: string;
339
+ data: {};
340
+ };
341
+ };
342
+ data: (data: T) => {
343
+ event: string;
344
+ payload: {
345
+ timestamp: string;
346
+ type: string;
347
+ data: T;
348
+ };
349
+ };
350
+ end: () => {
351
+ event: string;
352
+ payload: {
353
+ timestamp: string;
354
+ type: string;
355
+ data: {};
356
+ };
357
+ };
358
+ error: (error: string) => {
359
+ event: string;
360
+ payload: {
361
+ timestamp: string;
362
+ type: string;
363
+ data: {
364
+ error: string;
365
+ };
366
+ };
367
+ };
368
+ };
369
+ };
370
+ };
371
+ export default _default;
372
+ //# sourceMappingURL=websocketEvents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocketEvents.d.ts","sourceRoot":"","sources":["../../src/services/websocketEvents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,338 @@
1
+ /**
2
+ * WebSocket Event System
3
+ * Standardized event patterns for real-time communication
4
+ */
5
+ import { createLogger } from "../core/index.js";
6
+ let logger; // Will be initialized when needed
7
+ function ensureLogger() {
8
+ if (!logger) {
9
+ logger = createLogger("WebSocketEvents");
10
+ }
11
+ return logger;
12
+ }
13
+ /**
14
+ * Standard event types
15
+ */
16
+ export var EventTypes;
17
+ (function (EventTypes) {
18
+ // Connection events
19
+ EventTypes["CONNECT"] = "connect";
20
+ EventTypes["DISCONNECT"] = "disconnect";
21
+ EventTypes["ERROR"] = "error";
22
+ // Data events
23
+ EventTypes["DATA_UPDATE"] = "data:update";
24
+ EventTypes["DATA_CREATE"] = "data:create";
25
+ EventTypes["DATA_DELETE"] = "data:delete";
26
+ EventTypes["DATA_SYNC"] = "data:sync";
27
+ // Status events
28
+ EventTypes["STATUS_CHANGE"] = "status:change";
29
+ EventTypes["STATUS_HEALTH"] = "status:health";
30
+ EventTypes["STATUS_METRICS"] = "status:metrics";
31
+ // Control events
32
+ EventTypes["CONTROL_START"] = "control:start";
33
+ EventTypes["CONTROL_STOP"] = "control:stop";
34
+ EventTypes["CONTROL_RESTART"] = "control:restart";
35
+ EventTypes["CONTROL_CONFIG"] = "control:config";
36
+ // Subscription events
37
+ EventTypes["SUBSCRIBE"] = "subscribe";
38
+ EventTypes["UNSUBSCRIBE"] = "unsubscribe";
39
+ // System events
40
+ EventTypes["SYSTEM_PING"] = "system:ping";
41
+ EventTypes["SYSTEM_PONG"] = "system:pong";
42
+ EventTypes["SYSTEM_INFO"] = "system:info";
43
+ EventTypes["SYSTEM_ALERT"] = "system:alert";
44
+ })(EventTypes || (EventTypes = {}));
45
+ /**
46
+ * WebSocket Event Manager
47
+ */
48
+ export class WebSocketEventManager {
49
+ io;
50
+ subscriptions = new Map();
51
+ eventHandlers = new Map();
52
+ constructor(io) {
53
+ this.io = io;
54
+ this.setupDefaultHandlers();
55
+ }
56
+ /**
57
+ * Setup default event handlers
58
+ */
59
+ setupDefaultHandlers() {
60
+ this.io.on("connection", (socket) => {
61
+ ensureLogger().info(`Client connected: ${socket.id}`);
62
+ // Handle ping/pong for keepalive
63
+ socket.on(EventTypes.SYSTEM_PING, () => {
64
+ socket.emit(EventTypes.SYSTEM_PONG, {
65
+ timestamp: new Date().toISOString(),
66
+ latency: 0,
67
+ });
68
+ });
69
+ // Handle subscriptions
70
+ socket.on(EventTypes.SUBSCRIBE, (channel) => {
71
+ this.subscribe(socket, channel);
72
+ });
73
+ socket.on(EventTypes.UNSUBSCRIBE, (channel) => {
74
+ this.unsubscribe(socket, channel);
75
+ });
76
+ // Handle disconnect
77
+ socket.on(EventTypes.DISCONNECT, () => {
78
+ ensureLogger().info(`Client disconnected: ${socket.id}`);
79
+ this.cleanupSubscriptions(socket.id);
80
+ });
81
+ // Send initial connection info
82
+ socket.emit(EventTypes.SYSTEM_INFO, {
83
+ id: socket.id,
84
+ timestamp: new Date().toISOString(),
85
+ server: "framework-websocket",
86
+ version: "1.0.0",
87
+ });
88
+ });
89
+ }
90
+ /**
91
+ * Subscribe socket to a channel
92
+ */
93
+ subscribe(socket, channel) {
94
+ socket.join(channel);
95
+ if (!this.subscriptions.has(channel)) {
96
+ this.subscriptions.set(channel, new Set());
97
+ }
98
+ this.subscriptions.get(channel).add(socket.id);
99
+ ensureLogger().debug(`Socket ${socket.id} subscribed to ${channel}`);
100
+ socket.emit(EventTypes.SUBSCRIBE, {
101
+ success: true,
102
+ channel,
103
+ timestamp: new Date().toISOString(),
104
+ });
105
+ }
106
+ /**
107
+ * Unsubscribe socket from a channel
108
+ */
109
+ unsubscribe(socket, channel) {
110
+ socket.leave(channel);
111
+ const subs = this.subscriptions.get(channel);
112
+ if (subs) {
113
+ subs.delete(socket.id);
114
+ if (subs.size === 0) {
115
+ this.subscriptions.delete(channel);
116
+ }
117
+ }
118
+ ensureLogger().debug(`Socket ${socket.id} unsubscribed from ${channel}`);
119
+ socket.emit(EventTypes.UNSUBSCRIBE, {
120
+ success: true,
121
+ channel,
122
+ timestamp: new Date().toISOString(),
123
+ });
124
+ }
125
+ /**
126
+ * Clean up all subscriptions for a socket
127
+ */
128
+ cleanupSubscriptions(socketId) {
129
+ for (const [channel, subs] of this.subscriptions.entries()) {
130
+ if (subs.has(socketId)) {
131
+ subs.delete(socketId);
132
+ if (subs.size === 0) {
133
+ this.subscriptions.delete(channel);
134
+ }
135
+ }
136
+ }
137
+ }
138
+ /**
139
+ * Emit event to all clients
140
+ */
141
+ broadcast(event, payload) {
142
+ this.io.emit(event, payload);
143
+ ensureLogger().debug(`Broadcast event: ${event}`);
144
+ }
145
+ /**
146
+ * Emit event to specific room/channel
147
+ */
148
+ emit(channel, event, payload) {
149
+ this.io.to(channel).emit(event, payload);
150
+ ensureLogger().debug(`Emit to ${channel}: ${event}`);
151
+ }
152
+ /**
153
+ * Send event to specific socket
154
+ */
155
+ send(socketId, event, payload) {
156
+ this.io.to(socketId).emit(event, payload);
157
+ ensureLogger().debug(`Send to ${socketId}: ${event}`);
158
+ }
159
+ /**
160
+ * Register custom event handler
161
+ */
162
+ on(event, handler) {
163
+ if (!this.eventHandlers.has(event)) {
164
+ this.eventHandlers.set(event, new Set());
165
+ // Register with socket.io
166
+ this.io.on("connection", (socket) => {
167
+ socket.on(event, (data) => {
168
+ const handlers = this.eventHandlers.get(event);
169
+ if (handlers) {
170
+ handlers.forEach((h) => h(socket, data));
171
+ }
172
+ });
173
+ });
174
+ }
175
+ this.eventHandlers.get(event).add(handler);
176
+ }
177
+ /**
178
+ * Get subscription statistics
179
+ */
180
+ getStats() {
181
+ const stats = {
182
+ connections: this.io.sockets.sockets.size,
183
+ channels: this.subscriptions.size,
184
+ subscriptions: {},
185
+ };
186
+ for (const [channel, subs] of this.subscriptions.entries()) {
187
+ stats.subscriptions[channel] = subs.size;
188
+ }
189
+ return stats;
190
+ }
191
+ }
192
+ /**
193
+ * Typed event emitter for specific domains
194
+ */
195
+ export class TypedEventEmitter {
196
+ manager;
197
+ namespace;
198
+ constructor(manager, namespace) {
199
+ this.manager = manager;
200
+ this.namespace = namespace;
201
+ }
202
+ /**
203
+ * Emit typed event
204
+ */
205
+ emit(event, data) {
206
+ const payload = {
207
+ timestamp: new Date().toISOString(),
208
+ type: String(event),
209
+ source: this.namespace,
210
+ data,
211
+ };
212
+ this.manager.broadcast(`${this.namespace}:${String(event)}`, payload);
213
+ }
214
+ /**
215
+ * Emit to specific channel
216
+ */
217
+ emitTo(channel, event, data) {
218
+ const payload = {
219
+ timestamp: new Date().toISOString(),
220
+ type: String(event),
221
+ source: this.namespace,
222
+ target: channel,
223
+ data,
224
+ };
225
+ this.manager.emit(channel, `${this.namespace}:${String(event)}`, payload);
226
+ }
227
+ }
228
+ /**
229
+ * Create event patterns for common use cases
230
+ */
231
+ export const EventPatterns = {
232
+ /**
233
+ * CRUD event pattern
234
+ */
235
+ crud: (namespace) => ({
236
+ created: (data) => ({
237
+ event: `${namespace}:created`,
238
+ payload: { timestamp: new Date().toISOString(), type: "created", data },
239
+ }),
240
+ updated: (data) => ({
241
+ event: `${namespace}:updated`,
242
+ payload: { timestamp: new Date().toISOString(), type: "updated", data },
243
+ }),
244
+ deleted: (id) => ({
245
+ event: `${namespace}:deleted`,
246
+ payload: {
247
+ timestamp: new Date().toISOString(),
248
+ type: "deleted",
249
+ data: { id },
250
+ },
251
+ }),
252
+ list: (data) => ({
253
+ event: `${namespace}:list`,
254
+ payload: { timestamp: new Date().toISOString(), type: "list", data },
255
+ }),
256
+ }),
257
+ /**
258
+ * Status event pattern
259
+ */
260
+ status: (namespace) => ({
261
+ online: () => ({
262
+ event: `${namespace}:online`,
263
+ payload: {
264
+ timestamp: new Date().toISOString(),
265
+ type: "online",
266
+ data: { status: "online" },
267
+ },
268
+ }),
269
+ offline: () => ({
270
+ event: `${namespace}:offline`,
271
+ payload: {
272
+ timestamp: new Date().toISOString(),
273
+ type: "offline",
274
+ data: { status: "offline" },
275
+ },
276
+ }),
277
+ error: (error) => ({
278
+ event: `${namespace}:error`,
279
+ payload: {
280
+ timestamp: new Date().toISOString(),
281
+ type: "error",
282
+ data: { error },
283
+ },
284
+ }),
285
+ health: (health) => ({
286
+ event: `${namespace}:health`,
287
+ payload: {
288
+ timestamp: new Date().toISOString(),
289
+ type: "health",
290
+ data: health,
291
+ },
292
+ }),
293
+ }),
294
+ /**
295
+ * Data stream pattern
296
+ */
297
+ stream: (namespace) => ({
298
+ start: () => ({
299
+ event: `${namespace}:stream:start`,
300
+ payload: {
301
+ timestamp: new Date().toISOString(),
302
+ type: "stream:start",
303
+ data: {},
304
+ },
305
+ }),
306
+ data: (data) => ({
307
+ event: `${namespace}:stream:data`,
308
+ payload: {
309
+ timestamp: new Date().toISOString(),
310
+ type: "stream:data",
311
+ data,
312
+ },
313
+ }),
314
+ end: () => ({
315
+ event: `${namespace}:stream:end`,
316
+ payload: {
317
+ timestamp: new Date().toISOString(),
318
+ type: "stream:end",
319
+ data: {},
320
+ },
321
+ }),
322
+ error: (error) => ({
323
+ event: `${namespace}:stream:error`,
324
+ payload: {
325
+ timestamp: new Date().toISOString(),
326
+ type: "stream:error",
327
+ data: { error },
328
+ },
329
+ }),
330
+ }),
331
+ };
332
+ export default {
333
+ WebSocketEventManager,
334
+ TypedEventEmitter,
335
+ EventTypes,
336
+ EventPatterns,
337
+ };
338
+ //# sourceMappingURL=websocketEvents.js.map