claude-flow-novice 2.0.3 → 2.0.5

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 (228) hide show
  1. package/dist/src/cli/commands/swarm.js +1 -1
  2. package/dist/src/cli/main.js +1 -1
  3. package/dist/src/coordination/byzantine-memory-channels.js +25 -1
  4. package/dist/src/index.js +384 -35
  5. package/dist/src/utils/error-handler.js +2 -36
  6. package/dist/src/web/api/apm-routes.js +353 -0
  7. package/dist/src/web/api/config/api-config.js +184 -0
  8. package/dist/src/web/api/middleware/auth.js +203 -0
  9. package/dist/src/web/api/middleware/cache.js +273 -0
  10. package/dist/src/web/api/middleware/error-handler.js +257 -0
  11. package/dist/src/web/api/middleware/request-logger.js +215 -0
  12. package/dist/src/web/api/middleware/validation.js +323 -0
  13. package/dist/src/web/api/routes/events.js +463 -0
  14. package/dist/src/web/api/routes/hierarchy.js +300 -0
  15. package/dist/src/web/api/routes/index.js +12 -0
  16. package/dist/src/web/api/routes/metrics.js +559 -0
  17. package/dist/src/web/api/routes/parallel-status.js +359 -0
  18. package/dist/src/web/api/routes/status.js +448 -0
  19. package/dist/src/web/api/server.js +462 -0
  20. package/dist/src/web/dashboard/hooks/useWebSocket.js +383 -0
  21. package/dist/src/web/dashboard/index.js +85 -0
  22. package/dist/src/web/dashboard/realtime/CustomSyncManager.js +439 -0
  23. package/dist/src/web/dashboard/realtime/NativeWebSocketManager.js +323 -0
  24. package/dist/src/web/dashboard/realtime/PerformanceBenchmark.js +527 -0
  25. package/dist/src/web/dashboard/realtime/RealtimeCommunicationManager.js +474 -0
  26. package/dist/src/web/dashboard/realtime/RealtimeServer.js +666 -0
  27. package/dist/src/web/dashboard/realtime/SSEManager.js +426 -0
  28. package/dist/src/web/dashboard/types.js +4 -0
  29. package/dist/src/web/messaging/agent-status-tracker.js +453 -0
  30. package/dist/src/web/messaging/human-intervention-system.js +305 -0
  31. package/dist/src/web/messaging/message-filter.js +302 -0
  32. package/dist/src/web/messaging/swarm-message-router.js +324 -0
  33. package/dist/src/web/messaging/transparency-logger.js +421 -0
  34. package/dist/src/web/portal-server.js +460 -0
  35. package/dist/src/web/server.js +322 -0
  36. package/dist/src/web/websocket/apm-websocket-handler.js +453 -0
  37. package/dist/src/web/websocket/websocket-manager.js +780 -0
  38. package/package.json +6 -4
  39. package/dist/src/cli/minimal-main.js +0 -22
  40. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/documentSymbols/browser/documentSymbols.js +0 -23
  41. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.js +0 -57
  42. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +0 -401
  43. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.js +0 -181
  44. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution.js +0 -44
  45. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.js +0 -157
  46. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/edit.js +0 -71
  47. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/editorState/browser/editorState.js +0 -112
  48. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findController.js +0 -990
  49. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findDecorations.js +0 -296
  50. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findModel.js +0 -488
  51. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findOptionsWidget.js +0 -138
  52. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findState.js +0 -243
  53. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findWidget.js +0 -1177
  54. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/folding/browser/folding.js +0 -1093
  55. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/folding/browser/foldingDecorations.js +0 -133
  56. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/folding/browser/foldingModel.js +0 -538
  57. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/folding/browser/foldingRanges.js +0 -351
  58. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/fontZoom/browser/fontZoom.js +0 -49
  59. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/format/browser/format.js +0 -360
  60. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/format/browser/formatActions.js +0 -263
  61. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/format/browser/formattingEdit.js +0 -54
  62. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/gotoSymbol/browser/link/clickLinkGesture.js +0 -149
  63. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/hover/browser/contentHover.js +0 -874
  64. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/inlineCompletions/browser/commandIds.js +0 -7
  65. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/inlineCompletions/browser/commands.js +0 -199
  66. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/linesOperations/browser/copyLinesCommand.js +0 -70
  67. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/quickAccess/browser/commandsQuickAccess.js +0 -26
  68. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.js +0 -153
  69. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/readOnlyMessage/browser/contribution.js +0 -33
  70. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.js +0 -354
  71. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/smartSelect/browser/bracketSelections.js +0 -146
  72. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/suggest/browser/completionModel.js +0 -224
  73. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +0 -119
  74. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/edcore.main.js +0 -14
  75. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/editor.all.js +0 -63
  76. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/editor.api.js +0 -55
  77. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/editor.main.js +0 -7
  78. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/editor.worker.js +0 -25
  79. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/standalone/browser/colorizer.js +0 -118
  80. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/language/css/css.worker.js +0 -36869
  81. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/language/css/cssMode.js +0 -2035
  82. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/accessibility/browser/accessibilityService.js +0 -88
  83. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/accessibility/common/accessibility.js +0 -9
  84. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/action/common/action.js +0 -7
  85. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/action/common/actionCommonCategories.js +0 -13
  86. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/actionWidget/browser/actionList.js +0 -276
  87. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/actionWidget/browser/actionWidget.js +0 -248
  88. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/actionWidget/common/actionWidget.js +0 -5
  89. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/actions/common/actions.js +0 -409
  90. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/audioCues/browser/audioCueService.js +0 -176
  91. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/clipboard/browser/clipboardService.js +0 -141
  92. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/clipboard/common/clipboardService.js +0 -6
  93. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/commands/common/commands.js +0 -80
  94. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/configuration/common/configuration.js +0 -86
  95. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/configuration/common/configurationModels.js +0 -554
  96. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/configuration/common/configurationRegistry.js +0 -317
  97. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/configuration/common/configurations.js +0 -41
  98. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextkey/browser/contextKeyService.js +0 -432
  99. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextkey/common/contextkey.js +0 -1547
  100. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextkey/common/contextkeys.js +0 -18
  101. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextview/browser/contextMenuHandler.js +0 -124
  102. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextview/browser/contextMenuService.js +0 -101
  103. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextview/browser/contextView.js +0 -7
  104. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextview/browser/contextViewService.js +0 -72
  105. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/dialogs/common/dialogs.js +0 -2
  106. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/dnd/browser/dnd.js +0 -36
  107. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/editor/common/editor.js +0 -17
  108. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/environment/common/environment.js +0 -2
  109. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/extensions/common/extensions.js +0 -47
  110. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/files/common/files.js +0 -9
  111. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +0 -105
  112. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/instantiation/common/descriptors.js +0 -11
  113. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/instantiation/common/extensions.js +0 -15
  114. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/keybinding/common/abstractKeybindingService.js +0 -277
  115. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/keybinding/common/baseResolvedKeybinding.js +0 -53
  116. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +0 -354
  117. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/theme/browser/defaultStyles.js +0 -162
  118. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/theme/common/colorRegistry.js +0 -482
  119. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/abap/abap.js +0 -10
  120. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/apex/apex.js +0 -10
  121. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/azcli/azcli.js +0 -10
  122. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/bat/bat.js +0 -10
  123. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/bicep/bicep.js +0 -11
  124. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/cameligo/cameligo.js +0 -10
  125. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/clojure/clojure.js +0 -10
  126. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/coffee/coffee.js +0 -10
  127. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/cpp/cpp.js +0 -10
  128. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/csharp/csharp.js +0 -10
  129. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/csp/csp.js +0 -10
  130. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/css/css.js +0 -12
  131. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/cypher/cypher.js +0 -10
  132. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/dart/dart.js +0 -10
  133. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/dockerfile/dockerfile.js +0 -10
  134. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/ecl/ecl.js +0 -10
  135. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/elixir/elixir.js +0 -10
  136. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/flow9/flow9.js +0 -10
  137. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.js +0 -745
  138. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.de.js +0 -31
  139. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.es.js +0 -31
  140. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.fr.js +0 -29
  141. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.it.js +0 -29
  142. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.ja.js +0 -31
  143. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.js +0 -29
  144. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.ko.js +0 -29
  145. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.ru.js +0 -31
  146. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.zh-cn.js +0 -31
  147. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.zh-tw.js +0 -29
  148. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/language/css/cssMode.js +0 -13
  149. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/language/css/cssWorker.js +0 -81
  150. package/dist/src/web/frontend/node_modules/.multicast-dns-iKseM9bB/cli.js +0 -64
  151. package/dist/src/web/frontend/node_modules/.multicast-dns-iKseM9bB/example.js +0 -36
  152. package/dist/src/web/frontend/node_modules/.multicast-dns-iKseM9bB/index.js +0 -205
  153. package/dist/src/web/frontend/node_modules/.multicast-dns-iKseM9bB/test.js +0 -260
  154. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/async/index.browser.js +0 -34
  155. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/async/index.js +0 -35
  156. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/async/index.native.js +0 -26
  157. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/index.browser.js +0 -34
  158. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/index.js +0 -45
  159. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/nanoid.js +0 -1
  160. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/non-secure/index.js +0 -21
  161. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/url-alphabet/index.js +0 -3
  162. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/bin/nodemon.js +0 -16
  163. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/cli/index.js +0 -49
  164. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/cli/parse.js +0 -230
  165. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/command.js +0 -43
  166. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/defaults.js +0 -34
  167. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/exec.js +0 -234
  168. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/index.js +0 -93
  169. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/load.js +0 -225
  170. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/help/index.js +0 -27
  171. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/index.js +0 -1
  172. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/index.js +0 -4
  173. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/match.js +0 -287
  174. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/run.js +0 -562
  175. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/signals.js +0 -34
  176. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/watch.js +0 -244
  177. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/nodemon.js +0 -317
  178. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/rules/add.js +0 -89
  179. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/rules/index.js +0 -53
  180. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/rules/parse.js +0 -43
  181. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/spawn.js +0 -74
  182. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/bus.js +0 -44
  183. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/clone.js +0 -40
  184. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/colour.js +0 -26
  185. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/index.js +0 -103
  186. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/log.js +0 -82
  187. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/merge.js +0 -47
  188. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/version.js +0 -100
  189. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/brace-expansion/index.js +0 -201
  190. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/has-flag/index.js +0 -8
  191. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/minimatch/minimatch.js +0 -947
  192. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/supports-color/browser.js +0 -5
  193. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/supports-color/index.js +0 -131
  194. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/bin/pidtree.js +0 -128
  195. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/index.js +0 -49
  196. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/bin.js +0 -61
  197. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/get.js +0 -45
  198. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/pidtree.js +0 -104
  199. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/ps.js +0 -47
  200. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/wmic.js +0 -49
  201. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/doc.js +0 -1270
  202. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/acorn.js +0 -15
  203. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/angular.js +0 -2
  204. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/babel.js +0 -15
  205. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/estree.js +0 -36
  206. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/flow.js +0 -19
  207. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/glimmer.js +0 -29
  208. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/graphql.js +0 -29
  209. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/html.js +0 -22
  210. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/markdown.js +0 -63
  211. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/meriyah.js +0 -4
  212. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/postcss.js +0 -54
  213. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/typescript.js +0 -20
  214. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/yaml.js +0 -160
  215. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/standalone.js +0 -34
  216. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/bin/react-scripts.js +0 -58
  217. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/env.js +0 -112
  218. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/getHttpsConfig.js +0 -74
  219. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/jest/babelTransform.js +0 -37
  220. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/jest/cssTransform.js +0 -22
  221. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/jest/fileTransform.js +0 -40
  222. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/modules.js +0 -142
  223. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/paths.js +0 -153
  224. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/webpack/persistentCache/createEnvironmentHash.js +0 -9
  225. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/webpack.config.js +0 -796
  226. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/webpackDevServer.config.js +0 -135
  227. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/scripts/build.js +0 -225
  228. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/scripts/eject.js +0 -340
@@ -0,0 +1,666 @@
1
+ /**
2
+ * Real-time Communication Server
3
+ * Supports WebSocket, Server-Sent Events, and Custom Sync methods
4
+ */ function _define_property(obj, key, value) {
5
+ if (key in obj) {
6
+ Object.defineProperty(obj, key, {
7
+ value: value,
8
+ enumerable: true,
9
+ configurable: true,
10
+ writable: true
11
+ });
12
+ } else {
13
+ obj[key] = value;
14
+ }
15
+ return obj;
16
+ }
17
+ import express from "express";
18
+ import { createServer } from "http";
19
+ import { WebSocketServer, WebSocket } from "ws";
20
+ import path from "path";
21
+ import { fileURLToPath } from "url";
22
+ const __filename = fileURLToPath(import.meta.url);
23
+ const __dirname = path.dirname(__filename);
24
+ export class RealtimeServer {
25
+ /**
26
+ * Setup Express middleware
27
+ */ setupMiddleware() {
28
+ this.app.use(express.json());
29
+ this.app.use(express.urlencoded({
30
+ extended: true
31
+ }));
32
+ // CORS middleware
33
+ this.app.use((req, res, next)=>{
34
+ const origin = req.headers.origin;
35
+ if (this.config.corsOrigins.includes('*') || origin && this.config.corsOrigins.includes(origin)) {
36
+ res.header('Access-Control-Allow-Origin', origin || '*');
37
+ }
38
+ res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
39
+ res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control');
40
+ res.header('Access-Control-Allow-Credentials', 'true');
41
+ next();
42
+ });
43
+ // Request logging
44
+ this.app.use((req, res, next)=>{
45
+ console.log(`${new Date().toISOString()} ${req.method} ${req.path}`);
46
+ next();
47
+ });
48
+ }
49
+ /**
50
+ * Setup API routes
51
+ */ setupRoutes() {
52
+ // Health check
53
+ this.app.get('/health', (req, res)=>{
54
+ res.json({
55
+ status: 'healthy',
56
+ timestamp: new Date().toISOString(),
57
+ uptime: this.metrics.uptime,
58
+ connections: this.metrics.activeConnections,
59
+ protocols: this.config
60
+ });
61
+ });
62
+ // Server metrics
63
+ this.app.get('/api/metrics', (req, res)=>{
64
+ res.json(this.getMetrics());
65
+ });
66
+ // Protocol comparison endpoint
67
+ this.app.get('/api/protocols/compare', (req, res)=>{
68
+ res.json({
69
+ supported: {
70
+ websocket: this.config.enableWebSocket,
71
+ sse: this.config.enableSSE,
72
+ 'custom-sync': this.config.enableCustomSync
73
+ },
74
+ usage: this.metrics.protocolDistribution,
75
+ recommendations: this.getProtocolRecommendations()
76
+ });
77
+ });
78
+ // SSE endpoint
79
+ if (this.config.enableSSE) {
80
+ this.setupSSEEndpoint();
81
+ }
82
+ // Custom Sync endpoints
83
+ if (this.config.enableCustomSync) {
84
+ this.setupCustomSyncEndpoints();
85
+ }
86
+ // WebSocket benchmark endpoint
87
+ this.app.get('/ws-benchmark', (req, res)=>{
88
+ res.status(200).json({
89
+ message: 'WebSocket endpoint available',
90
+ url: `ws://localhost:${this.config.port}/ws-benchmark`,
91
+ timestamp: new Date().toISOString()
92
+ });
93
+ });
94
+ // Static files for dashboard
95
+ this.app.use(express.static(path.join(__dirname, '../public')));
96
+ }
97
+ /**
98
+ * Setup WebSocket server
99
+ */ setupWebSocket() {
100
+ if (!this.config.enableWebSocket) return;
101
+ this.wsServer = new WebSocketServer({
102
+ server: this.server,
103
+ path: '/ws',
104
+ perMessageDeflate: this.config.enableCompression
105
+ });
106
+ this.wsServer.on('connection', (ws, req)=>{
107
+ this.handleWebSocketConnection(ws, req);
108
+ });
109
+ this.wsServer.on('error', (error)=>{
110
+ console.error('WebSocket server error:', error);
111
+ this.metrics.errors++;
112
+ });
113
+ console.log(`🔌 WebSocket server enabled on path: /ws`);
114
+ }
115
+ /**
116
+ * Handle WebSocket connection
117
+ */ handleWebSocketConnection(ws, req) {
118
+ const clientId = this.generateClientId();
119
+ const connection = {
120
+ id: clientId,
121
+ protocol: 'websocket',
122
+ connected: true,
123
+ lastPing: new Date(),
124
+ messagesSent: 0,
125
+ messagesReceived: 0,
126
+ bytesTransferred: 0,
127
+ metadata: {
128
+ ip: req.socket.remoteAddress,
129
+ userAgent: req.headers['user-agent'],
130
+ connectedAt: new Date()
131
+ }
132
+ };
133
+ this.connections.set(clientId, connection);
134
+ this.metrics.totalConnections++;
135
+ this.metrics.activeConnections++;
136
+ this.metrics.protocolDistribution.websocket++;
137
+ console.log(`📡 WebSocket client connected: ${clientId}`);
138
+ // Send welcome message
139
+ this.sendWebSocketMessage(ws, {
140
+ type: 'welcome',
141
+ payload: {
142
+ clientId,
143
+ serverTime: new Date().toISOString(),
144
+ protocol: 'websocket'
145
+ }
146
+ });
147
+ // Handle messages
148
+ ws.on('message', (data)=>{
149
+ this.handleWebSocketMessage(ws, connection, data);
150
+ });
151
+ // Handle ping/pong
152
+ ws.on('ping', ()=>{
153
+ connection.lastPing = new Date();
154
+ ws.pong();
155
+ });
156
+ ws.on('pong', ()=>{
157
+ connection.lastPing = new Date();
158
+ });
159
+ // Handle disconnection
160
+ ws.on('close', (code, reason)=>{
161
+ this.handleWebSocketDisconnection(connection, code, reason);
162
+ });
163
+ ws.on('error', (error)=>{
164
+ console.error(`WebSocket error for ${clientId}:`, error);
165
+ this.metrics.errors++;
166
+ });
167
+ // Send initial data
168
+ this.sendInitialData(ws, connection);
169
+ }
170
+ /**
171
+ * Handle WebSocket messages
172
+ */ handleWebSocketMessage(ws, connection, data) {
173
+ try {
174
+ const message = JSON.parse(data.toString());
175
+ connection.messagesReceived++;
176
+ connection.bytesTransferred += data.length;
177
+ this.metrics.totalMessages++;
178
+ // Handle different message types
179
+ switch(message.type){
180
+ case 'ping':
181
+ this.sendWebSocketMessage(ws, {
182
+ type: 'pong',
183
+ payload: {
184
+ timestamp: message.timestamp || Date.now(),
185
+ messageId: message.messageId
186
+ }
187
+ });
188
+ break;
189
+ case 'benchmark':
190
+ this.handleBenchmarkMessage(ws, connection, message);
191
+ break;
192
+ case 'latency_test':
193
+ this.handleLatencyTest(ws, connection, message);
194
+ break;
195
+ case 'subscribe':
196
+ this.handleSubscription(ws, connection, message);
197
+ break;
198
+ case 'request_initial_data':
199
+ this.sendInitialData(ws, connection);
200
+ break;
201
+ default:
202
+ console.log(`Unknown WebSocket message type: ${message.type}`);
203
+ }
204
+ } catch (error) {
205
+ console.error(`Error parsing WebSocket message:`, error);
206
+ this.metrics.errors++;
207
+ }
208
+ }
209
+ /**
210
+ * Handle WebSocket disconnection
211
+ */ handleWebSocketDisconnection(connection, code, reason) {
212
+ console.log(`📡 WebSocket client disconnected: ${connection.id} (${code})`);
213
+ connection.connected = false;
214
+ this.metrics.activeConnections--;
215
+ this.metrics.protocolDistribution.websocket--;
216
+ this.connections.delete(connection.id);
217
+ }
218
+ /**
219
+ * Setup Server-Sent Events endpoint
220
+ */ setupSSEEndpoint() {
221
+ this.app.get('/api/events', (req, res)=>{
222
+ const clientId = this.generateClientId();
223
+ // Set SSE headers
224
+ res.writeHead(200, {
225
+ 'Content-Type': 'text/event-stream',
226
+ 'Cache-Control': 'no-cache',
227
+ 'Connection': 'keep-alive',
228
+ 'Access-Control-Allow-Origin': '*',
229
+ 'Access-Control-Allow-Headers': 'Cache-Control'
230
+ });
231
+ // Create client connection
232
+ const connection = {
233
+ id: clientId,
234
+ protocol: 'sse',
235
+ connected: true,
236
+ lastPing: new Date(),
237
+ messagesSent: 0,
238
+ messagesReceived: 0,
239
+ bytesTransferred: 0,
240
+ metadata: {
241
+ ip: req.ip,
242
+ userAgent: req.headers['user-agent'],
243
+ connectedAt: new Date()
244
+ }
245
+ };
246
+ this.connections.set(clientId, connection);
247
+ this.sseClients.set(clientId, res);
248
+ this.metrics.totalConnections++;
249
+ this.metrics.activeConnections++;
250
+ this.metrics.protocolDistribution.sse++;
251
+ console.log(`📡 SSE client connected: ${clientId}`);
252
+ // Send welcome event
253
+ this.sendSSEEvent(res, 'welcome', {
254
+ clientId,
255
+ serverTime: new Date().toISOString(),
256
+ protocol: 'sse'
257
+ });
258
+ // Send initial data
259
+ this.sendInitialSSEData(res, connection);
260
+ // Handle client disconnection
261
+ req.on('close', ()=>{
262
+ console.log(`📡 SSE client disconnected: ${clientId}`);
263
+ connection.connected = false;
264
+ this.metrics.activeConnections--;
265
+ this.metrics.protocolDistribution.sse--;
266
+ this.connections.delete(clientId);
267
+ this.sseClients.delete(clientId);
268
+ });
269
+ });
270
+ console.log(`📡 SSE endpoint enabled: /api/events`);
271
+ }
272
+ /**
273
+ * Setup Custom Sync endpoints
274
+ */ setupCustomSyncEndpoints() {
275
+ // Main sync endpoint
276
+ this.app.post('/api/sync', async (req, res)=>{
277
+ try {
278
+ const { lastSync, version, enableDelta, batchSize, checksum } = req.body;
279
+ // Generate sync data
280
+ const syncData = await this.generateSyncData(lastSync, version, enableDelta);
281
+ res.json({
282
+ type: enableDelta && lastSync ? 'delta_sync' : 'full_sync',
283
+ payload: syncData,
284
+ checksum: this.generateChecksum(syncData),
285
+ version: syncData.version || version + 1,
286
+ timestamp: new Date().toISOString()
287
+ });
288
+ } catch (error) {
289
+ console.error('Sync error:', error);
290
+ res.status(500).json({
291
+ type: 'error',
292
+ payload: {
293
+ message: 'Sync failed'
294
+ }
295
+ });
296
+ }
297
+ });
298
+ // Full sync endpoint
299
+ this.app.get('/api/sync/full', async (req, res)=>{
300
+ try {
301
+ const fullData = await this.generateFullSyncData();
302
+ res.json(fullData);
303
+ } catch (error) {
304
+ res.status(500).json({
305
+ error: 'Full sync failed'
306
+ });
307
+ }
308
+ });
309
+ // Queue endpoint for client messages
310
+ this.app.post('/api/sync/queue', async (req, res)=>{
311
+ try {
312
+ const { messages } = req.body;
313
+ // Process queued messages
314
+ await this.processQueuedMessages(messages);
315
+ res.json({
316
+ processed: messages.length
317
+ });
318
+ } catch (error) {
319
+ res.status(500).json({
320
+ error: 'Queue processing failed'
321
+ });
322
+ }
323
+ });
324
+ console.log(`📡 Custom Sync endpoints enabled`);
325
+ }
326
+ /**
327
+ * Send WebSocket message
328
+ */ sendWebSocketMessage(ws, message) {
329
+ if (ws.readyState === WebSocket.OPEN) {
330
+ const data = JSON.stringify(message);
331
+ ws.send(data);
332
+ // Update metrics
333
+ const connection = Array.from(this.connections.values()).find((c)=>c.connected);
334
+ if (connection) {
335
+ connection.messagesSent++;
336
+ connection.bytesTransferred += data.length;
337
+ }
338
+ }
339
+ }
340
+ /**
341
+ * Send SSE event
342
+ */ sendSSEEvent(res, event, data) {
343
+ const eventData = JSON.stringify(data);
344
+ const message = `event: ${event}\ndata: ${eventData}\n\n`;
345
+ res.write(message);
346
+ // Update metrics
347
+ const connection = Array.from(this.connections.values()).find((c)=>c.protocol === 'sse' && c.connected);
348
+ if (connection) {
349
+ connection.messagesSent++;
350
+ connection.bytesTransferred += message.length;
351
+ }
352
+ }
353
+ /**
354
+ * Send initial data to WebSocket client
355
+ */ sendInitialData(ws, connection) {
356
+ const initialData = {
357
+ type: 'initial_data',
358
+ payload: {
359
+ serverInfo: {
360
+ version: '1.0.0',
361
+ uptime: this.metrics.uptime,
362
+ supportedProtocols: [
363
+ 'websocket',
364
+ 'sse',
365
+ 'custom-sync'
366
+ ]
367
+ },
368
+ metrics: this.getMetrics(),
369
+ timestamp: new Date().toISOString()
370
+ }
371
+ };
372
+ this.sendWebSocketMessage(ws, initialData);
373
+ }
374
+ /**
375
+ * Send initial data to SSE client
376
+ */ sendInitialSSEData(res, connection) {
377
+ this.sendSSEEvent(res, 'initial_data', {
378
+ serverInfo: {
379
+ version: '1.0.0',
380
+ uptime: this.metrics.uptime,
381
+ supportedProtocols: [
382
+ 'websocket',
383
+ 'sse',
384
+ 'custom-sync'
385
+ ]
386
+ },
387
+ metrics: this.getMetrics(),
388
+ timestamp: new Date().toISOString()
389
+ });
390
+ }
391
+ /**
392
+ * Handle benchmark messages
393
+ */ handleBenchmarkMessage(ws, connection, message) {
394
+ // Echo benchmark message for testing
395
+ this.sendWebSocketMessage(ws, {
396
+ type: 'benchmark_response',
397
+ payload: {
398
+ originalMessage: message,
399
+ receivedAt: new Date().toISOString(),
400
+ connectionId: connection.id
401
+ }
402
+ });
403
+ }
404
+ /**
405
+ * Handle latency test messages
406
+ */ handleLatencyTest(ws, connection, message) {
407
+ this.sendWebSocketMessage(ws, {
408
+ type: 'latency_response',
409
+ payload: {
410
+ originalTimestamp: message.timestamp,
411
+ receivedAt: Date.now(),
412
+ messageId: message.messageId
413
+ }
414
+ });
415
+ }
416
+ /**
417
+ * Handle subscription requests
418
+ */ handleSubscription(ws, connection, message) {
419
+ console.log(`Client ${connection.id} subscribed to: ${message.channels}`);
420
+ // In a real implementation, you would manage subscriptions here
421
+ }
422
+ /**
423
+ * Generate sync data
424
+ */ async generateSyncData(lastSync, version, enableDelta) {
425
+ // Mock implementation - in real scenario, this would fetch actual data
426
+ const baseData = {
427
+ agents: [],
428
+ metrics: this.getMetrics(),
429
+ timestamp: new Date().toISOString()
430
+ };
431
+ if (enableDelta && lastSync) {
432
+ // Return delta changes
433
+ return {
434
+ operations: [
435
+ {
436
+ type: 'update',
437
+ path: 'metrics',
438
+ data: this.getMetrics()
439
+ }
440
+ ],
441
+ version: (version || 0) + 1
442
+ };
443
+ }
444
+ return {
445
+ ...baseData,
446
+ version: 1
447
+ };
448
+ }
449
+ /**
450
+ * Generate full sync data
451
+ */ async generateFullSyncData() {
452
+ return {
453
+ type: 'full_sync',
454
+ payload: await this.generateSyncData(),
455
+ checksum: this.generateChecksum({}),
456
+ version: 1,
457
+ timestamp: new Date().toISOString()
458
+ };
459
+ }
460
+ /**
461
+ * Process queued messages
462
+ */ async processQueuedMessages(messages) {
463
+ // Mock implementation - in real scenario, process actual client messages
464
+ console.log(`Processing ${messages.length} queued messages`);
465
+ }
466
+ /**
467
+ * Generate checksum
468
+ */ generateChecksum(data) {
469
+ // Simple checksum implementation
470
+ const str = JSON.stringify(data);
471
+ let hash = 0;
472
+ for(let i = 0; i < str.length; i++){
473
+ const char = str.charCodeAt(i);
474
+ hash = (hash << 5) - hash + char;
475
+ hash = hash & hash; // Convert to 32-bit integer
476
+ }
477
+ return hash.toString(16);
478
+ }
479
+ /**
480
+ * Start heartbeat mechanism
481
+ */ startHeartbeat() {
482
+ if (this.heartbeatInterval) {
483
+ clearInterval(this.heartbeatInterval);
484
+ }
485
+ this.heartbeatInterval = setInterval(()=>{
486
+ this.broadcastHeartbeat();
487
+ this.cleanupStaleConnections();
488
+ }, this.config.heartbeatInterval);
489
+ }
490
+ /**
491
+ * Broadcast heartbeat to all clients
492
+ */ broadcastHeartbeat() {
493
+ const heartbeatMessage = {
494
+ type: 'heartbeat',
495
+ payload: {
496
+ timestamp: new Date().toISOString(),
497
+ activeConnections: this.metrics.activeConnections
498
+ }
499
+ };
500
+ // Send to WebSocket clients
501
+ if (this.wsServer) {
502
+ this.wsServer.clients.forEach((ws)=>{
503
+ if (ws.readyState === WebSocket.OPEN) {
504
+ this.sendWebSocketMessage(ws, heartbeatMessage);
505
+ }
506
+ });
507
+ }
508
+ // Send to SSE clients
509
+ this.sseClients.forEach((res)=>{
510
+ this.sendSSEEvent(res, 'heartbeat', heartbeatMessage.payload);
511
+ });
512
+ }
513
+ /**
514
+ * Cleanup stale connections
515
+ */ cleanupStaleConnections() {
516
+ const now = new Date();
517
+ const staleThreshold = 5 * 60 * 1000; // 5 minutes
518
+ this.connections.forEach((connection, id)=>{
519
+ if (now.getTime() - connection.lastPing.getTime() > staleThreshold) {
520
+ console.log(`Cleaning up stale connection: ${id}`);
521
+ connection.connected = false;
522
+ this.metrics.activeConnections--;
523
+ this.connections.delete(id);
524
+ }
525
+ });
526
+ }
527
+ /**
528
+ * Start metrics collection
529
+ */ startMetricsCollection() {
530
+ if (this.metricsInterval) {
531
+ clearInterval(this.metricsInterval);
532
+ }
533
+ this.metricsInterval = setInterval(()=>{
534
+ this.updateMetrics();
535
+ }, 1000); // Update every second
536
+ }
537
+ /**
538
+ * Update server metrics
539
+ */ updateMetrics() {
540
+ this.metrics.uptime = Date.now() - this.startTime.getTime();
541
+ // Calculate messages per second
542
+ const recentMessages = this.messageHistory.filter((m)=>Date.now() - m.timestamp < 1000).length;
543
+ this.metrics.messagesPerSecond = recentMessages;
544
+ // Add to history
545
+ this.messageHistory.push({
546
+ timestamp: Date.now(),
547
+ count: recentMessages
548
+ });
549
+ // Keep only last 60 seconds of history
550
+ if (this.messageHistory.length > 60) {
551
+ this.messageHistory = this.messageHistory.slice(-60);
552
+ }
553
+ }
554
+ /**
555
+ * Get current metrics
556
+ */ getMetrics() {
557
+ return {
558
+ ...this.metrics
559
+ };
560
+ }
561
+ /**
562
+ * Get protocol recommendations
563
+ */ getProtocolRecommendations() {
564
+ return {
565
+ bestForLowLatency: 'websocket',
566
+ bestForSimplicity: 'sse',
567
+ bestForCompatibility: 'custom-sync',
568
+ currentLoad: {
569
+ websocket: this.metrics.protocolDistribution.websocket,
570
+ sse: this.metrics.protocolDistribution.sse,
571
+ 'custom-sync': this.metrics.protocolDistribution['custom-sync']
572
+ }
573
+ };
574
+ }
575
+ /**
576
+ * Generate client ID
577
+ */ generateClientId() {
578
+ return `client_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
579
+ }
580
+ /**
581
+ * Start the server
582
+ */ start(port) {
583
+ const serverPort = port || this.config.port;
584
+ this.server.listen(serverPort, ()=>{
585
+ console.log(`🚀 Real-time Communication Server running on port ${serverPort}`);
586
+ console.log(`📊 WebSocket: ws://localhost:${serverPort}/ws`);
587
+ console.log(`📡 SSE: http://localhost:${serverPort}/api/events`);
588
+ console.log(`🔄 Custom Sync: http://localhost:${serverPort}/api/sync`);
589
+ console.log(`📈 Metrics: http://localhost:${serverPort}/api/metrics`);
590
+ });
591
+ // Graceful shutdown
592
+ process.on('SIGTERM', ()=>{
593
+ console.log('Shutting down gracefully...');
594
+ this.shutdown();
595
+ });
596
+ process.on('SIGINT', ()=>{
597
+ console.log('Shutting down gracefully...');
598
+ this.shutdown();
599
+ });
600
+ }
601
+ /**
602
+ * Shutdown the server
603
+ */ shutdown() {
604
+ if (this.heartbeatInterval) {
605
+ clearInterval(this.heartbeatInterval);
606
+ }
607
+ if (this.metricsInterval) {
608
+ clearInterval(this.metricsInterval);
609
+ }
610
+ if (this.wsServer) {
611
+ this.wsServer.close();
612
+ }
613
+ this.server.close(()=>{
614
+ console.log('Server shutdown complete');
615
+ process.exit(0);
616
+ });
617
+ }
618
+ constructor(config = {}){
619
+ _define_property(this, "app", void 0);
620
+ _define_property(this, "server", void 0);
621
+ _define_property(this, "wsServer", null);
622
+ _define_property(this, "config", void 0);
623
+ _define_property(this, "connections", new Map());
624
+ _define_property(this, "sseClients", new Map());
625
+ _define_property(this, "metrics", void 0);
626
+ _define_property(this, "messageHistory", []);
627
+ _define_property(this, "heartbeatInterval", null);
628
+ _define_property(this, "metricsInterval", null);
629
+ _define_property(this, "startTime", new Date());
630
+ this.config = {
631
+ port: config.port ?? 3001,
632
+ enableWebSocket: config.enableWebSocket ?? true,
633
+ enableSSE: config.enableSSE ?? true,
634
+ enableCustomSync: config.enableCustomSync ?? true,
635
+ corsOrigins: config.corsOrigins ?? [
636
+ '*'
637
+ ],
638
+ heartbeatInterval: config.heartbeatInterval ?? 30000,
639
+ maxConnections: config.maxConnections ?? 1000,
640
+ enableCompression: config.enableCompression ?? true,
641
+ enableMetrics: config.enableMetrics ?? true
642
+ };
643
+ this.app = express();
644
+ this.server = createServer(this.app);
645
+ this.metrics = {
646
+ totalConnections: 0,
647
+ activeConnections: 0,
648
+ totalMessages: 0,
649
+ messagesPerSecond: 0,
650
+ bandwidthUsage: 0,
651
+ protocolDistribution: {
652
+ websocket: 0,
653
+ sse: 0,
654
+ 'custom-sync': 0
655
+ },
656
+ uptime: 0,
657
+ errors: 0
658
+ };
659
+ this.setupMiddleware();
660
+ this.setupRoutes();
661
+ this.setupWebSocket();
662
+ this.startHeartbeat();
663
+ this.startMetricsCollection();
664
+ }
665
+ }
666
+ export default RealtimeServer;