@loop_ouroboros/mcp-hub-lite 1.0.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 (499) hide show
  1. package/CHANGELOG.md +228 -0
  2. package/LICENSE +21 -0
  3. package/README.md +354 -0
  4. package/dist/client/assets/HomeView-f901HeKw.js +1 -0
  5. package/dist/client/assets/ResourceDetailView-BdOaL_-o.css +1 -0
  6. package/dist/client/assets/ResourceDetailView-Bz66ZjfY.js +1 -0
  7. package/dist/client/assets/ResourcesView-CjMklkyv.css +1 -0
  8. package/dist/client/assets/ResourcesView-lI_fItfA.js +1 -0
  9. package/dist/client/assets/ServerDashboard-7_8Og9JJ.css +1 -0
  10. package/dist/client/assets/ServerDashboard-Bgx8WVkx.js +2 -0
  11. package/dist/client/assets/ServerListView-Bws09jNR.css +1 -0
  12. package/dist/client/assets/ServerListView-CP6Ffkfx.js +30 -0
  13. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +1 -0
  14. package/dist/client/assets/SessionsView-D68qKR4D.js +1 -0
  15. package/dist/client/assets/SettingsView-BPYfO9BE.js +1 -0
  16. package/dist/client/assets/ToolCallDialog-Br8FNebN.js +1 -0
  17. package/dist/client/assets/ToolCallDialog-C7eh7jHE.css +1 -0
  18. package/dist/client/assets/ToolsView-B6hUiR43.js +1 -0
  19. package/dist/client/assets/ToolsView-BLnU8cV6.css +1 -0
  20. package/dist/client/assets/_baseClone-DCmK847M.js +1 -0
  21. package/dist/client/assets/_plugin-vue_export-helper-DlAUqK2U.js +1 -0
  22. package/dist/client/assets/el-form-item-BVMLpmVC.css +1 -0
  23. package/dist/client/assets/el-form-item-DM0q2hmO.js +12 -0
  24. package/dist/client/assets/el-input-BtI9NECe.js +1 -0
  25. package/dist/client/assets/el-input-CmuHb8HS.css +1 -0
  26. package/dist/client/assets/el-loading-CChNmKeI.js +1 -0
  27. package/dist/client/assets/el-loading-bpKhqqQq.css +1 -0
  28. package/dist/client/assets/el-overlay-B2ZKM6Up.css +1 -0
  29. package/dist/client/assets/el-overlay-lZZbPmsX.js +1 -0
  30. package/dist/client/assets/el-select-BXztu2b5.js +1 -0
  31. package/dist/client/assets/el-select-C0U_l4IZ.css +1 -0
  32. package/dist/client/assets/el-tab-pane-CnNoQHsR.css +1 -0
  33. package/dist/client/assets/el-tab-pane-Dy9ruaEX.js +1 -0
  34. package/dist/client/assets/el-table-column-98UyVgBH.js +1 -0
  35. package/dist/client/assets/el-table-column-T_mV9jNw.css +1 -0
  36. package/dist/client/assets/el-tag-B5lLT51E.js +1 -0
  37. package/dist/client/assets/el-tag-DjxZVOpb.css +1 -0
  38. package/dist/client/assets/event-BB_Ol6Sd.js +1 -0
  39. package/dist/client/assets/index-BgKcmWJr.js +1 -0
  40. package/dist/client/assets/index-BsDWtoIl.css +1 -0
  41. package/dist/client/assets/index-BzQXG7no.js +1 -0
  42. package/dist/client/assets/index-CSTs2jYk.js +2 -0
  43. package/dist/client/assets/omit-Bx5HJNV_.js +1 -0
  44. package/dist/client/assets/raf-B9VDMtMF.js +1 -0
  45. package/dist/client/assets/typescript-Bp3YSIOJ.js +1 -0
  46. package/dist/client/assets/vnode-B8aJx8u4.js +1 -0
  47. package/dist/client/assets/vue-vendor-6ny5zj9i.js +3 -0
  48. package/dist/client/index.html +15 -0
  49. package/dist/server/shared/index.d.ts +3 -0
  50. package/dist/server/shared/index.d.ts.map +1 -0
  51. package/dist/server/shared/index.js +2 -0
  52. package/dist/server/shared/models/index.d.ts +4 -0
  53. package/dist/server/shared/models/index.d.ts.map +1 -0
  54. package/dist/server/shared/models/index.js +3 -0
  55. package/dist/server/shared/models/resource.model.d.ts +8 -0
  56. package/dist/server/shared/models/resource.model.d.ts.map +1 -0
  57. package/dist/server/shared/models/resource.model.js +1 -0
  58. package/dist/server/shared/models/server.model.d.ts +57 -0
  59. package/dist/server/shared/models/server.model.d.ts.map +1 -0
  60. package/dist/server/shared/models/server.model.js +1 -0
  61. package/dist/server/shared/models/session.model.d.ts +73 -0
  62. package/dist/server/shared/models/session.model.d.ts.map +1 -0
  63. package/dist/server/shared/models/session.model.js +70 -0
  64. package/dist/server/shared/models/tool.model.d.ts +22 -0
  65. package/dist/server/shared/models/tool.model.d.ts.map +1 -0
  66. package/dist/server/shared/models/tool.model.js +1 -0
  67. package/dist/server/shared/types/client.types.d.ts +35 -0
  68. package/dist/server/shared/types/client.types.d.ts.map +1 -0
  69. package/dist/server/shared/types/client.types.js +5 -0
  70. package/dist/server/shared/types/common.types.d.ts +5 -0
  71. package/dist/server/shared/types/common.types.d.ts.map +1 -0
  72. package/dist/server/shared/types/common.types.js +2 -0
  73. package/dist/server/shared/types/index.d.ts +4 -0
  74. package/dist/server/shared/types/index.d.ts.map +1 -0
  75. package/dist/server/shared/types/index.js +3 -0
  76. package/dist/server/shared/types/session.types.d.ts +15 -0
  77. package/dist/server/shared/types/session.types.d.ts.map +1 -0
  78. package/dist/server/shared/types/session.types.js +5 -0
  79. package/dist/server/shared/types/websocket.types.d.ts +177 -0
  80. package/dist/server/shared/types/websocket.types.d.ts.map +1 -0
  81. package/dist/server/shared/types/websocket.types.js +25 -0
  82. package/dist/server/src/api/mcp/debug-response-wrapper.d.ts +13 -0
  83. package/dist/server/src/api/mcp/debug-response-wrapper.d.ts.map +1 -0
  84. package/dist/server/src/api/mcp/debug-response-wrapper.js +271 -0
  85. package/dist/server/src/api/mcp/gateway.d.ts +14 -0
  86. package/dist/server/src/api/mcp/gateway.d.ts.map +1 -0
  87. package/dist/server/src/api/mcp/gateway.js +116 -0
  88. package/dist/server/src/api/mcp/session-context-extractor.d.ts +47 -0
  89. package/dist/server/src/api/mcp/session-context-extractor.d.ts.map +1 -0
  90. package/dist/server/src/api/mcp/session-context-extractor.js +127 -0
  91. package/dist/server/src/api/mcp/sse-stream-manager.d.ts +13 -0
  92. package/dist/server/src/api/mcp/sse-stream-manager.d.ts.map +1 -0
  93. package/dist/server/src/api/mcp/sse-stream-manager.js +40 -0
  94. package/dist/server/src/api/web/clients.d.ts +30 -0
  95. package/dist/server/src/api/web/clients.d.ts.map +1 -0
  96. package/dist/server/src/api/web/clients.js +41 -0
  97. package/dist/server/src/api/web/config.d.ts +21 -0
  98. package/dist/server/src/api/web/config.d.ts.map +1 -0
  99. package/dist/server/src/api/web/config.js +119 -0
  100. package/dist/server/src/api/web/health.d.ts +21 -0
  101. package/dist/server/src/api/web/health.d.ts.map +1 -0
  102. package/dist/server/src/api/web/health.js +24 -0
  103. package/dist/server/src/api/web/hub-tools.d.ts +30 -0
  104. package/dist/server/src/api/web/hub-tools.d.ts.map +1 -0
  105. package/dist/server/src/api/web/hub-tools.js +202 -0
  106. package/dist/server/src/api/web/logs.d.ts +30 -0
  107. package/dist/server/src/api/web/logs.d.ts.map +1 -0
  108. package/dist/server/src/api/web/logs.js +141 -0
  109. package/dist/server/src/api/web/mcp-status.d.ts +29 -0
  110. package/dist/server/src/api/web/mcp-status.d.ts.map +1 -0
  111. package/dist/server/src/api/web/mcp-status.js +126 -0
  112. package/dist/server/src/api/web/resources.d.ts +28 -0
  113. package/dist/server/src/api/web/resources.d.ts.map +1 -0
  114. package/dist/server/src/api/web/resources.js +93 -0
  115. package/dist/server/src/api/web/search.d.ts +26 -0
  116. package/dist/server/src/api/web/search.d.ts.map +1 -0
  117. package/dist/server/src/api/web/search.js +62 -0
  118. package/dist/server/src/api/web/servers.d.ts +33 -0
  119. package/dist/server/src/api/web/servers.d.ts.map +1 -0
  120. package/dist/server/src/api/web/servers.js +235 -0
  121. package/dist/server/src/api/web/sessions.d.ts +29 -0
  122. package/dist/server/src/api/web/sessions.d.ts.map +1 -0
  123. package/dist/server/src/api/web/sessions.js +104 -0
  124. package/dist/server/src/api/ws/events.d.ts +29 -0
  125. package/dist/server/src/api/ws/events.d.ts.map +1 -0
  126. package/dist/server/src/api/ws/events.js +44 -0
  127. package/dist/server/src/api/ws/ws-handler.d.ts +83 -0
  128. package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -0
  129. package/dist/server/src/api/ws/ws-handler.js +217 -0
  130. package/dist/server/src/app.d.ts +24 -0
  131. package/dist/server/src/app.d.ts.map +1 -0
  132. package/dist/server/src/app.js +108 -0
  133. package/dist/server/src/cli/commands/list.d.ts +71 -0
  134. package/dist/server/src/cli/commands/list.d.ts.map +1 -0
  135. package/dist/server/src/cli/commands/list.js +97 -0
  136. package/dist/server/src/cli/commands/restart.d.ts +42 -0
  137. package/dist/server/src/cli/commands/restart.d.ts.map +1 -0
  138. package/dist/server/src/cli/commands/restart.js +61 -0
  139. package/dist/server/src/cli/commands/start.d.ts +43 -0
  140. package/dist/server/src/cli/commands/start.d.ts.map +1 -0
  141. package/dist/server/src/cli/commands/start.js +160 -0
  142. package/dist/server/src/cli/commands/status.d.ts +39 -0
  143. package/dist/server/src/cli/commands/status.d.ts.map +1 -0
  144. package/dist/server/src/cli/commands/status.js +164 -0
  145. package/dist/server/src/cli/commands/stop.d.ts +34 -0
  146. package/dist/server/src/cli/commands/stop.d.ts.map +1 -0
  147. package/dist/server/src/cli/commands/stop.js +47 -0
  148. package/dist/server/src/cli/commands/ui.d.ts +44 -0
  149. package/dist/server/src/cli/commands/ui.d.ts.map +1 -0
  150. package/dist/server/src/cli/commands/ui.js +95 -0
  151. package/dist/server/src/cli/index.d.ts +62 -0
  152. package/dist/server/src/cli/index.d.ts.map +1 -0
  153. package/dist/server/src/cli/index.js +88 -0
  154. package/dist/server/src/cli/parse-args.d.ts +108 -0
  155. package/dist/server/src/cli/parse-args.d.ts.map +1 -0
  156. package/dist/server/src/cli/parse-args.js +131 -0
  157. package/dist/server/src/cli/server.d.ts +171 -0
  158. package/dist/server/src/cli/server.d.ts.map +1 -0
  159. package/dist/server/src/cli/server.js +246 -0
  160. package/dist/server/src/config/config-change-logger.d.ts +16 -0
  161. package/dist/server/src/config/config-change-logger.d.ts.map +1 -0
  162. package/dist/server/src/config/config-change-logger.js +43 -0
  163. package/dist/server/src/config/config-loader.d.ts +22 -0
  164. package/dist/server/src/config/config-loader.d.ts.map +1 -0
  165. package/dist/server/src/config/config-loader.js +66 -0
  166. package/dist/server/src/config/config-manager.d.ts +158 -0
  167. package/dist/server/src/config/config-manager.d.ts.map +1 -0
  168. package/dist/server/src/config/config-manager.js +246 -0
  169. package/dist/server/src/config/config-saver.d.ts +16 -0
  170. package/dist/server/src/config/config-saver.d.ts.map +1 -0
  171. package/dist/server/src/config/config-saver.js +28 -0
  172. package/dist/server/src/config/config.schema.d.ts +108 -0
  173. package/dist/server/src/config/config.schema.d.ts.map +1 -0
  174. package/dist/server/src/config/config.schema.js +103 -0
  175. package/dist/server/src/config/server-config-manager.d.ts +74 -0
  176. package/dist/server/src/config/server-config-manager.d.ts.map +1 -0
  177. package/dist/server/src/config/server-config-manager.js +157 -0
  178. package/dist/server/src/config/type-converter.d.ts +13 -0
  179. package/dist/server/src/config/type-converter.d.ts.map +1 -0
  180. package/dist/server/src/config/type-converter.js +37 -0
  181. package/dist/server/src/index.d.ts +3 -0
  182. package/dist/server/src/index.d.ts.map +1 -0
  183. package/dist/server/src/index.js +352 -0
  184. package/dist/server/src/models/event.model.d.ts +106 -0
  185. package/dist/server/src/models/event.model.d.ts.map +1 -0
  186. package/dist/server/src/models/event.model.js +5 -0
  187. package/dist/server/src/models/server.model.d.ts +19 -0
  188. package/dist/server/src/models/server.model.d.ts.map +1 -0
  189. package/dist/server/src/models/server.model.js +1 -0
  190. package/dist/server/src/models/system-tools.constants.d.ts +73 -0
  191. package/dist/server/src/models/system-tools.constants.d.ts.map +1 -0
  192. package/dist/server/src/models/system-tools.constants.js +31 -0
  193. package/dist/server/src/models/types.d.ts +84 -0
  194. package/dist/server/src/models/types.d.ts.map +1 -0
  195. package/dist/server/src/models/types.js +67 -0
  196. package/dist/server/src/pid/file.d.ts +26 -0
  197. package/dist/server/src/pid/file.d.ts.map +1 -0
  198. package/dist/server/src/pid/file.js +68 -0
  199. package/dist/server/src/pid/manager.d.ts +98 -0
  200. package/dist/server/src/pid/manager.d.ts.map +1 -0
  201. package/dist/server/src/pid/manager.js +158 -0
  202. package/dist/server/src/pid/types.d.ts +13 -0
  203. package/dist/server/src/pid/types.d.ts.map +1 -0
  204. package/dist/server/src/pid/types.js +4 -0
  205. package/dist/server/src/server/dev-server.d.ts +2 -0
  206. package/dist/server/src/server/dev-server.d.ts.map +1 -0
  207. package/dist/server/src/server/dev-server.js +171 -0
  208. package/dist/server/src/server/runner.d.ts +57 -0
  209. package/dist/server/src/server/runner.d.ts.map +1 -0
  210. package/dist/server/src/server/runner.js +163 -0
  211. package/dist/server/src/services/client-tracker.service.d.ts +132 -0
  212. package/dist/server/src/services/client-tracker.service.d.ts.map +1 -0
  213. package/dist/server/src/services/client-tracker.service.js +203 -0
  214. package/dist/server/src/services/connection/connection-manager.d.ts +478 -0
  215. package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -0
  216. package/dist/server/src/services/connection/connection-manager.js +929 -0
  217. package/dist/server/src/services/connection/index.d.ts +6 -0
  218. package/dist/server/src/services/connection/index.d.ts.map +1 -0
  219. package/dist/server/src/services/connection/index.js +4 -0
  220. package/dist/server/src/services/connection/tool-cache.d.ts +122 -0
  221. package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -0
  222. package/dist/server/src/services/connection/tool-cache.js +202 -0
  223. package/dist/server/src/services/connection/types.d.ts +30 -0
  224. package/dist/server/src/services/connection/types.d.ts.map +1 -0
  225. package/dist/server/src/services/connection/types.js +1 -0
  226. package/dist/server/src/services/event-bus.service.d.ts +169 -0
  227. package/dist/server/src/services/event-bus.service.d.ts.map +1 -0
  228. package/dist/server/src/services/event-bus.service.js +200 -0
  229. package/dist/server/src/services/gateway/gateway.service.d.ts +61 -0
  230. package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -0
  231. package/dist/server/src/services/gateway/gateway.service.js +107 -0
  232. package/dist/server/src/services/gateway/index.d.ts +8 -0
  233. package/dist/server/src/services/gateway/index.d.ts.map +1 -0
  234. package/dist/server/src/services/gateway/index.js +6 -0
  235. package/dist/server/src/services/gateway/log-formatter.d.ts +26 -0
  236. package/dist/server/src/services/gateway/log-formatter.d.ts.map +1 -0
  237. package/dist/server/src/services/gateway/log-formatter.js +66 -0
  238. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts +13 -0
  239. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -0
  240. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +131 -0
  241. package/dist/server/src/services/gateway/request-handlers/index.d.ts +9 -0
  242. package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -0
  243. package/dist/server/src/services/gateway/request-handlers/index.js +8 -0
  244. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +11 -0
  245. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -0
  246. package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +85 -0
  247. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts +11 -0
  248. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -0
  249. package/dist/server/src/services/gateway/request-handlers/resources-handler.js +56 -0
  250. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts +11 -0
  251. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -0
  252. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +228 -0
  253. package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts +11 -0
  254. package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts.map +1 -0
  255. package/dist/server/src/services/gateway/request-handlers/tools-handler.js +79 -0
  256. package/dist/server/src/services/gateway/tool-list-generator.d.ts +23 -0
  257. package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -0
  258. package/dist/server/src/services/gateway/tool-list-generator.js +115 -0
  259. package/dist/server/src/services/gateway/types.d.ts +27 -0
  260. package/dist/server/src/services/gateway/types.d.ts.map +1 -0
  261. package/dist/server/src/services/gateway/types.js +4 -0
  262. package/dist/server/src/services/gateway.service.d.ts +7 -0
  263. package/dist/server/src/services/gateway.service.d.ts.map +1 -0
  264. package/dist/server/src/services/gateway.service.js +6 -0
  265. package/dist/server/src/services/hub-manager.service.d.ts +299 -0
  266. package/dist/server/src/services/hub-manager.service.d.ts.map +1 -0
  267. package/dist/server/src/services/hub-manager.service.js +413 -0
  268. package/dist/server/src/services/hub-tools/index.d.ts +10 -0
  269. package/dist/server/src/services/hub-tools/index.d.ts.map +1 -0
  270. package/dist/server/src/services/hub-tools/index.js +6 -0
  271. package/dist/server/src/services/hub-tools/resource-generator.d.ts +63 -0
  272. package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -0
  273. package/dist/server/src/services/hub-tools/resource-generator.js +141 -0
  274. package/dist/server/src/services/hub-tools/server-selector.d.ts +63 -0
  275. package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -0
  276. package/dist/server/src/services/hub-tools/server-selector.js +108 -0
  277. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +47 -0
  278. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -0
  279. package/dist/server/src/services/hub-tools/system-tool-definitions.js +225 -0
  280. package/dist/server/src/services/hub-tools/tool-search.d.ts +85 -0
  281. package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -0
  282. package/dist/server/src/services/hub-tools/tool-search.js +115 -0
  283. package/dist/server/src/services/hub-tools/types.d.ts +42 -0
  284. package/dist/server/src/services/hub-tools/types.d.ts.map +1 -0
  285. package/dist/server/src/services/hub-tools/types.js +1 -0
  286. package/dist/server/src/services/hub-tools.service.d.ts +235 -0
  287. package/dist/server/src/services/hub-tools.service.d.ts.map +1 -0
  288. package/dist/server/src/services/hub-tools.service.js +457 -0
  289. package/dist/server/src/services/log-storage.service.d.ts +177 -0
  290. package/dist/server/src/services/log-storage.service.d.ts.map +1 -0
  291. package/dist/server/src/services/log-storage.service.js +243 -0
  292. package/dist/server/src/services/mcp-connection-manager.d.ts +7 -0
  293. package/dist/server/src/services/mcp-connection-manager.d.ts.map +1 -0
  294. package/dist/server/src/services/mcp-connection-manager.js +6 -0
  295. package/dist/server/src/services/mcp-session-manager.d.ts +6 -0
  296. package/dist/server/src/services/mcp-session-manager.d.ts.map +1 -0
  297. package/dist/server/src/services/mcp-session-manager.js +4 -0
  298. package/dist/server/src/services/search/index.d.ts +5 -0
  299. package/dist/server/src/services/search/index.d.ts.map +1 -0
  300. package/dist/server/src/services/search/index.js +5 -0
  301. package/dist/server/src/services/search/search-cache.d.ts +132 -0
  302. package/dist/server/src/services/search/search-cache.d.ts.map +1 -0
  303. package/dist/server/src/services/search/search-cache.js +151 -0
  304. package/dist/server/src/services/search/search-core.service.d.ts +108 -0
  305. package/dist/server/src/services/search/search-core.service.d.ts.map +1 -0
  306. package/dist/server/src/services/search/search-core.service.js +187 -0
  307. package/dist/server/src/services/search/search-scorer.d.ts +54 -0
  308. package/dist/server/src/services/search/search-scorer.d.ts.map +1 -0
  309. package/dist/server/src/services/search/search-scorer.js +83 -0
  310. package/dist/server/src/services/search/types.d.ts +20 -0
  311. package/dist/server/src/services/search/types.d.ts.map +1 -0
  312. package/dist/server/src/services/search/types.js +1 -0
  313. package/dist/server/src/services/session/index.d.ts +6 -0
  314. package/dist/server/src/services/session/index.d.ts.map +1 -0
  315. package/dist/server/src/services/session/index.js +4 -0
  316. package/dist/server/src/services/session/session-manager.d.ts +352 -0
  317. package/dist/server/src/services/session/session-manager.d.ts.map +1 -0
  318. package/dist/server/src/services/session/session-manager.js +835 -0
  319. package/dist/server/src/services/session/types.d.ts +32 -0
  320. package/dist/server/src/services/session/types.d.ts.map +1 -0
  321. package/dist/server/src/services/session/types.js +1 -0
  322. package/dist/server/src/services/simple-search.service.d.ts +67 -0
  323. package/dist/server/src/services/simple-search.service.d.ts.map +1 -0
  324. package/dist/server/src/services/simple-search.service.js +82 -0
  325. package/dist/server/src/services/system-tool-handler.d.ts +10 -0
  326. package/dist/server/src/services/system-tool-handler.d.ts.map +1 -0
  327. package/dist/server/src/services/system-tool-handler.js +77 -0
  328. package/dist/server/src/utils/error-handler.d.ts +18 -0
  329. package/dist/server/src/utils/error-handler.d.ts.map +1 -0
  330. package/dist/server/src/utils/error-handler.js +59 -0
  331. package/dist/server/src/utils/format-utils.d.ts +23 -0
  332. package/dist/server/src/utils/format-utils.d.ts.map +1 -0
  333. package/dist/server/src/utils/format-utils.js +58 -0
  334. package/dist/server/src/utils/index.d.ts +2 -0
  335. package/dist/server/src/utils/index.d.ts.map +1 -0
  336. package/dist/server/src/utils/index.js +1 -0
  337. package/dist/server/src/utils/json-utils.d.ts +82 -0
  338. package/dist/server/src/utils/json-utils.d.ts.map +1 -0
  339. package/dist/server/src/utils/json-utils.js +204 -0
  340. package/dist/server/src/utils/log-rotator.d.ts +223 -0
  341. package/dist/server/src/utils/log-rotator.d.ts.map +1 -0
  342. package/dist/server/src/utils/log-rotator.js +306 -0
  343. package/dist/server/src/utils/logger/dev-logger.d.ts +39 -0
  344. package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -0
  345. package/dist/server/src/utils/logger/dev-logger.js +63 -0
  346. package/dist/server/src/utils/logger/index.d.ts +36 -0
  347. package/dist/server/src/utils/logger/index.d.ts.map +1 -0
  348. package/dist/server/src/utils/logger/index.js +46 -0
  349. package/dist/server/src/utils/logger/log-colors.d.ts +27 -0
  350. package/dist/server/src/utils/logger/log-colors.d.ts.map +1 -0
  351. package/dist/server/src/utils/logger/log-colors.js +41 -0
  352. package/dist/server/src/utils/logger/log-context.d.ts +13 -0
  353. package/dist/server/src/utils/logger/log-context.d.ts.map +1 -0
  354. package/dist/server/src/utils/logger/log-context.js +5 -0
  355. package/dist/server/src/utils/logger/log-formatter.d.ts +47 -0
  356. package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -0
  357. package/dist/server/src/utils/logger/log-formatter.js +150 -0
  358. package/dist/server/src/utils/logger/log-modules.d.ts +141 -0
  359. package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -0
  360. package/dist/server/src/utils/logger/log-modules.js +81 -0
  361. package/dist/server/src/utils/logger/log-output.d.ts +68 -0
  362. package/dist/server/src/utils/logger/log-output.d.ts.map +1 -0
  363. package/dist/server/src/utils/logger/log-output.js +320 -0
  364. package/dist/server/src/utils/logger/logger.d.ts +190 -0
  365. package/dist/server/src/utils/logger/logger.d.ts.map +1 -0
  366. package/dist/server/src/utils/logger/logger.js +350 -0
  367. package/dist/server/src/utils/logger.d.ts +12 -0
  368. package/dist/server/src/utils/logger.d.ts.map +1 -0
  369. package/dist/server/src/utils/logger.js +12 -0
  370. package/dist/server/src/utils/mcp-error-handler.d.ts +162 -0
  371. package/dist/server/src/utils/mcp-error-handler.d.ts.map +1 -0
  372. package/dist/server/src/utils/mcp-error-handler.js +270 -0
  373. package/dist/server/src/utils/port-checker.d.ts +16 -0
  374. package/dist/server/src/utils/port-checker.d.ts.map +1 -0
  375. package/dist/server/src/utils/port-checker.js +242 -0
  376. package/dist/server/src/utils/request-context.d.ts +71 -0
  377. package/dist/server/src/utils/request-context.d.ts.map +1 -0
  378. package/dist/server/src/utils/request-context.js +73 -0
  379. package/dist/server/src/utils/tool-args-parser.d.ts +17 -0
  380. package/dist/server/src/utils/tool-args-parser.d.ts.map +1 -0
  381. package/dist/server/src/utils/tool-args-parser.js +34 -0
  382. package/dist/server/src/utils/transports/sse-transport.d.ts +104 -0
  383. package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -0
  384. package/dist/server/src/utils/transports/sse-transport.js +189 -0
  385. package/dist/server/src/utils/transports/stdio-transport.d.ts +122 -0
  386. package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -0
  387. package/dist/server/src/utils/transports/stdio-transport.js +324 -0
  388. package/dist/server/src/utils/transports/streamable-http-transport.d.ts +146 -0
  389. package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -0
  390. package/dist/server/src/utils/transports/streamable-http-transport.js +212 -0
  391. package/dist/server/src/utils/transports/transport-factory.d.ts +26 -0
  392. package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -0
  393. package/dist/server/src/utils/transports/transport-factory.js +104 -0
  394. package/dist/server/src/utils/transports/transport.interface.d.ts +35 -0
  395. package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -0
  396. package/dist/server/src/utils/transports/transport.interface.js +1 -0
  397. package/dist/server/tests/contract/mcp-protocol/initialize.test.d.ts +2 -0
  398. package/dist/server/tests/contract/mcp-protocol/initialize.test.d.ts.map +1 -0
  399. package/dist/server/tests/contract/mcp-protocol/initialize.test.js +103 -0
  400. package/dist/server/tests/contract/mcp-protocol/tools-call.test.d.ts +2 -0
  401. package/dist/server/tests/contract/mcp-protocol/tools-call.test.d.ts.map +1 -0
  402. package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +181 -0
  403. package/dist/server/tests/contract/mcp-protocol/tools-list.test.d.ts +2 -0
  404. package/dist/server/tests/contract/mcp-protocol/tools-list.test.d.ts.map +1 -0
  405. package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +155 -0
  406. package/dist/server/tests/evaluation/evaluation.test.d.ts +2 -0
  407. package/dist/server/tests/evaluation/evaluation.test.d.ts.map +1 -0
  408. package/dist/server/tests/evaluation/evaluation.test.js +102 -0
  409. package/dist/server/tests/helpers/sdk-test-helpers.d.ts +32 -0
  410. package/dist/server/tests/helpers/sdk-test-helpers.d.ts.map +1 -0
  411. package/dist/server/tests/helpers/sdk-test-helpers.js +82 -0
  412. package/dist/server/tests/integration/api/gateway.test.d.ts +2 -0
  413. package/dist/server/tests/integration/api/gateway.test.d.ts.map +1 -0
  414. package/dist/server/tests/integration/api/gateway.test.js +366 -0
  415. package/dist/server/tests/integration/gateway/fault-tolerance.test.d.ts +2 -0
  416. package/dist/server/tests/integration/gateway/fault-tolerance.test.d.ts.map +1 -0
  417. package/dist/server/tests/integration/gateway/fault-tolerance.test.js +109 -0
  418. package/dist/server/tests/integration/gateway/mcp-connection.test.d.ts +2 -0
  419. package/dist/server/tests/integration/gateway/mcp-connection.test.d.ts.map +1 -0
  420. package/dist/server/tests/integration/gateway/mcp-connection.test.js +149 -0
  421. package/dist/server/tests/server.test.d.ts +2 -0
  422. package/dist/server/tests/server.test.d.ts.map +1 -0
  423. package/dist/server/tests/server.test.js +95 -0
  424. package/dist/server/tests/setup.d.ts +7 -0
  425. package/dist/server/tests/setup.d.ts.map +1 -0
  426. package/dist/server/tests/setup.js +53 -0
  427. package/dist/server/tests/types/logger-test-helpers.d.ts +17 -0
  428. package/dist/server/tests/types/logger-test-helpers.d.ts.map +1 -0
  429. package/dist/server/tests/types/logger-test-helpers.js +4 -0
  430. package/dist/server/tests/types/test-helpers.d.ts +27 -0
  431. package/dist/server/tests/types/test-helpers.d.ts.map +1 -0
  432. package/dist/server/tests/types/test-helpers.js +4 -0
  433. package/dist/server/tests/unit/cli/basic-cli.test.d.ts +2 -0
  434. package/dist/server/tests/unit/cli/basic-cli.test.d.ts.map +1 -0
  435. package/dist/server/tests/unit/cli/basic-cli.test.js +33 -0
  436. package/dist/server/tests/unit/cli/cli.test.d.ts +2 -0
  437. package/dist/server/tests/unit/cli/cli.test.d.ts.map +1 -0
  438. package/dist/server/tests/unit/cli/cli.test.js +17 -0
  439. package/dist/server/tests/unit/cli/commands.test.d.ts +2 -0
  440. package/dist/server/tests/unit/cli/commands.test.d.ts.map +1 -0
  441. package/dist/server/tests/unit/cli/commands.test.js +75 -0
  442. package/dist/server/tests/unit/cli/server.test.d.ts +2 -0
  443. package/dist/server/tests/unit/cli/server.test.d.ts.map +1 -0
  444. package/dist/server/tests/unit/cli/server.test.js +68 -0
  445. package/dist/server/tests/unit/server/runner.test.d.ts +2 -0
  446. package/dist/server/tests/unit/server/runner.test.d.ts.map +1 -0
  447. package/dist/server/tests/unit/server/runner.test.js +488 -0
  448. package/dist/server/tests/unit/server/setup.d.ts +2 -0
  449. package/dist/server/tests/unit/server/setup.d.ts.map +1 -0
  450. package/dist/server/tests/unit/server/setup.js +21 -0
  451. package/dist/server/tests/unit/services/gateway-logging.test.d.ts +2 -0
  452. package/dist/server/tests/unit/services/gateway-logging.test.d.ts.map +1 -0
  453. package/dist/server/tests/unit/services/gateway-logging.test.js +47 -0
  454. package/dist/server/tests/unit/services/hub-manager-service.test.d.ts +2 -0
  455. package/dist/server/tests/unit/services/hub-manager-service.test.d.ts.map +1 -0
  456. package/dist/server/tests/unit/services/hub-manager-service.test.js +140 -0
  457. package/dist/server/tests/unit/services/hub-manager.test.d.ts +2 -0
  458. package/dist/server/tests/unit/services/hub-manager.test.d.ts.map +1 -0
  459. package/dist/server/tests/unit/services/hub-manager.test.js +98 -0
  460. package/dist/server/tests/unit/services/hub-tools.service.test.d.ts +2 -0
  461. package/dist/server/tests/unit/services/hub-tools.service.test.d.ts.map +1 -0
  462. package/dist/server/tests/unit/services/hub-tools.service.test.js +674 -0
  463. package/dist/server/tests/unit/services/search/search-cache.test.d.ts +2 -0
  464. package/dist/server/tests/unit/services/search/search-cache.test.d.ts.map +1 -0
  465. package/dist/server/tests/unit/services/search/search-cache.test.js +58 -0
  466. package/dist/server/tests/unit/services/search/search-core.service.test.d.ts +2 -0
  467. package/dist/server/tests/unit/services/search/search-core.service.test.d.ts.map +1 -0
  468. package/dist/server/tests/unit/services/search/search-core.service.test.js +84 -0
  469. package/dist/server/tests/unit/services/search/search-scorer.test.d.ts +2 -0
  470. package/dist/server/tests/unit/services/search/search-scorer.test.d.ts.map +1 -0
  471. package/dist/server/tests/unit/services/search/search-scorer.test.js +97 -0
  472. package/dist/server/tests/unit/services/session-manager.test.d.ts +2 -0
  473. package/dist/server/tests/unit/services/session-manager.test.d.ts.map +1 -0
  474. package/dist/server/tests/unit/services/session-manager.test.js +481 -0
  475. package/dist/server/tests/unit/utils/config.test.d.ts +2 -0
  476. package/dist/server/tests/unit/utils/config.test.d.ts.map +1 -0
  477. package/dist/server/tests/unit/utils/config.test.js +634 -0
  478. package/dist/server/tests/unit/utils/json-utils.test.d.ts +2 -0
  479. package/dist/server/tests/unit/utils/json-utils.test.d.ts.map +1 -0
  480. package/dist/server/tests/unit/utils/json-utils.test.js +296 -0
  481. package/dist/server/tests/unit/utils/log-rotator.test.d.ts +2 -0
  482. package/dist/server/tests/unit/utils/log-rotator.test.d.ts.map +1 -0
  483. package/dist/server/tests/unit/utils/log-rotator.test.js +296 -0
  484. package/dist/server/tests/unit/utils/logger.test.d.ts +2 -0
  485. package/dist/server/tests/unit/utils/logger.test.d.ts.map +1 -0
  486. package/dist/server/tests/unit/utils/logger.test.js +462 -0
  487. package/dist/server/tests/unit/utils/mcp-error-handler.test.d.ts +2 -0
  488. package/dist/server/tests/unit/utils/mcp-error-handler.test.d.ts.map +1 -0
  489. package/dist/server/tests/unit/utils/mcp-error-handler.test.js +163 -0
  490. package/dist/server/tests/unit/utils/request-context.test.d.ts +2 -0
  491. package/dist/server/tests/unit/utils/request-context.test.d.ts.map +1 -0
  492. package/dist/server/tests/unit/utils/request-context.test.js +82 -0
  493. package/dist/server/vite.config.d.ts +3 -0
  494. package/dist/server/vite.config.d.ts.map +1 -0
  495. package/dist/server/vite.config.js +160 -0
  496. package/dist/server/vitest.config.d.ts +3 -0
  497. package/dist/server/vitest.config.d.ts.map +1 -0
  498. package/dist/server/vitest.config.js +53 -0
  499. package/package.json +113 -0
@@ -0,0 +1,29 @@
1
+ import { FastifyInstance } from 'fastify';
2
+ /**
3
+ * Session Management API Routes
4
+ *
5
+ * Provides comprehensive session management endpoints for the MCP Hub Lite system's persistent session storage.
6
+ * This module enables administrators and clients to monitor, inspect, and manage active and persisted sessions
7
+ * that maintain client connection state across service restarts.
8
+ *
9
+ * Sessions store critical client context including connection metadata, working directories, project information,
10
+ * and other state that enables seamless reconnection and continuity of operations. The session persistence
11
+ * feature ensures that client connections can be restored even after service interruptions.
12
+ *
13
+ * Key features include:
14
+ * - Listing all persisted sessions with metadata
15
+ * - Detailed session inspection by session ID
16
+ * - Session deletion for cleanup and maintenance
17
+ * - Integration with the MCP session manager for consistency
18
+ *
19
+ * @param fastify - The Fastify instance to register routes on
20
+ * @returns Promise that resolves when all routes are registered
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * // Register session management routes
25
+ * await webSessionRoutes(app);
26
+ * ```
27
+ */
28
+ export declare function webSessionRoutes(fastify: FastifyInstance): Promise<void>;
29
+ //# sourceMappingURL=sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAI1C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,eAAe,iBAsF9D"}
@@ -0,0 +1,104 @@
1
+ import { mcpSessionManager } from '../../services/mcp-session-manager.js';
2
+ import { logger, LOG_MODULES } from '../../utils/logger.js';
3
+ /**
4
+ * Session Management API Routes
5
+ *
6
+ * Provides comprehensive session management endpoints for the MCP Hub Lite system's persistent session storage.
7
+ * This module enables administrators and clients to monitor, inspect, and manage active and persisted sessions
8
+ * that maintain client connection state across service restarts.
9
+ *
10
+ * Sessions store critical client context including connection metadata, working directories, project information,
11
+ * and other state that enables seamless reconnection and continuity of operations. The session persistence
12
+ * feature ensures that client connections can be restored even after service interruptions.
13
+ *
14
+ * Key features include:
15
+ * - Listing all persisted sessions with metadata
16
+ * - Detailed session inspection by session ID
17
+ * - Session deletion for cleanup and maintenance
18
+ * - Integration with the MCP session manager for consistency
19
+ *
20
+ * @param fastify - The Fastify instance to register routes on
21
+ * @returns Promise that resolves when all routes are registered
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * // Register session management routes
26
+ * await webSessionRoutes(app);
27
+ * ```
28
+ */
29
+ export async function webSessionRoutes(fastify) {
30
+ /**
31
+ * List all persisted sessions
32
+ */
33
+ fastify.get('/web/sessions', async (_request, reply) => {
34
+ try {
35
+ const sessions = mcpSessionManager.getAllSessionStates();
36
+ return reply.send({
37
+ success: true,
38
+ data: sessions,
39
+ count: sessions.length
40
+ });
41
+ }
42
+ catch (error) {
43
+ logger.error('Failed to get sessions:', error, LOG_MODULES.SESSION_API);
44
+ return reply.code(500).send({
45
+ success: false,
46
+ error: 'Failed to get sessions'
47
+ });
48
+ }
49
+ });
50
+ /**
51
+ * Get a specific session by ID
52
+ */
53
+ fastify.get('/web/sessions/:sessionId', async (request, reply) => {
54
+ try {
55
+ const { sessionId } = request.params;
56
+ const session = mcpSessionManager.getSessionState(sessionId);
57
+ if (!session) {
58
+ return reply.code(404).send({
59
+ success: false,
60
+ error: 'Session not found'
61
+ });
62
+ }
63
+ return reply.send({
64
+ success: true,
65
+ data: session
66
+ });
67
+ }
68
+ catch (error) {
69
+ logger.error('Failed to get session:', error, LOG_MODULES.SESSION_API);
70
+ return reply.code(500).send({
71
+ success: false,
72
+ error: 'Failed to get session'
73
+ });
74
+ }
75
+ });
76
+ /**
77
+ * Delete a session
78
+ */
79
+ fastify.delete('/web/sessions/:sessionId', async (request, reply) => {
80
+ try {
81
+ const { sessionId } = request.params;
82
+ logger.info(`Deleting session: ${sessionId}`, LOG_MODULES.SESSION_API);
83
+ const existed = await mcpSessionManager.deleteSession(sessionId);
84
+ if (!existed) {
85
+ return reply.code(404).send({
86
+ success: false,
87
+ error: 'Session not found'
88
+ });
89
+ }
90
+ logger.info(`Session deleted successfully: ${sessionId}`, LOG_MODULES.SESSION_API);
91
+ return reply.send({
92
+ success: true,
93
+ message: 'Session deleted successfully'
94
+ });
95
+ }
96
+ catch (error) {
97
+ logger.error('Failed to delete session:', error, LOG_MODULES.SESSION_API);
98
+ return reply.code(500).send({
99
+ success: false,
100
+ error: 'Failed to delete session'
101
+ });
102
+ }
103
+ });
104
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * WebSocket Event Routes
3
+ *
4
+ * Registers WebSocket endpoints for real-time event communication between the MCP Hub Lite server and connected clients.
5
+ * This module sets up the WebSocket infrastructure using the @fastify/websocket plugin and creates connection
6
+ * handlers for managing client connections and message routing.
7
+ *
8
+ * The WebSocket API enables bidirectional communication for real-time updates including:
9
+ * - Server status changes
10
+ * - Tool and resource updates
11
+ * - Log entries and system events
12
+ * - Configuration changes
13
+ * - Client connection/disconnection events
14
+ *
15
+ * Clients can subscribe to specific event types and receive live updates without polling,
16
+ * providing an efficient and responsive user experience for monitoring and managing the MCP ecosystem.
17
+ *
18
+ * @param fastify - The Fastify instance to register routes on
19
+ * @returns Promise that resolves when WebSocket routes are registered
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * // Register WebSocket routes
24
+ * await webSocketRoutes(app);
25
+ * ```
26
+ */
27
+ import type { FastifyInstance } from 'fastify';
28
+ export declare function webSocketRoutes(fastify: FastifyInstance): Promise<void>;
29
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../../../src/api/ws/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAM/C,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB7E"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * WebSocket Event Routes
3
+ *
4
+ * Registers WebSocket endpoints for real-time event communication between the MCP Hub Lite server and connected clients.
5
+ * This module sets up the WebSocket infrastructure using the @fastify/websocket plugin and creates connection
6
+ * handlers for managing client connections and message routing.
7
+ *
8
+ * The WebSocket API enables bidirectional communication for real-time updates including:
9
+ * - Server status changes
10
+ * - Tool and resource updates
11
+ * - Log entries and system events
12
+ * - Configuration changes
13
+ * - Client connection/disconnection events
14
+ *
15
+ * Clients can subscribe to specific event types and receive live updates without polling,
16
+ * providing an efficient and responsive user experience for monitoring and managing the MCP ecosystem.
17
+ *
18
+ * @param fastify - The Fastify instance to register routes on
19
+ * @returns Promise that resolves when WebSocket routes are registered
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * // Register WebSocket routes
24
+ * await webSocketRoutes(app);
25
+ * ```
26
+ */
27
+ import fastifyWebSocket from '@fastify/websocket';
28
+ import { WebSocketHandler } from './ws-handler.js';
29
+ import { eventBus } from '../../services/event-bus.service.js';
30
+ import { logger, LOG_MODULES } from '../../utils/logger.js';
31
+ export async function webSocketRoutes(fastify) {
32
+ // Register WebSocket plugin
33
+ await fastify.register(fastifyWebSocket);
34
+ // Register WebSocket routes
35
+ fastify.register(async function (fastify) {
36
+ // WebSocket endpoint: /ws
37
+ fastify.get('/ws', { websocket: true }, (socket, request) => {
38
+ logger.info(`connection established from ${request.ip}`, LOG_MODULES.WEBSOCKET);
39
+ const handler = new WebSocketHandler(socket, eventBus);
40
+ handler.initialize();
41
+ });
42
+ });
43
+ logger.info('WebSocket routes registered', LOG_MODULES.WEBSOCKET);
44
+ }
@@ -0,0 +1,83 @@
1
+ /**
2
+ * WebSocket Connection Handler
3
+ *
4
+ * Manages the complete lifecycle and message handling for individual WebSocket connections
5
+ * between MCP Hub Lite clients and the server. This class handles client subscriptions,
6
+ * message routing, heartbeat management, and event distribution through the system's
7
+ * event bus architecture.
8
+ *
9
+ * The handler supports multiple message types including:
10
+ * - Subscription management (subscribe/unsubscribe to event types)
11
+ * - Heartbeat/ping-pong for connection health monitoring
12
+ * - Historical log retrieval requests
13
+ * - Real-time event delivery from the event bus
14
+ *
15
+ * It maintains a mapping between WebSocket event types and internal system event types,
16
+ * ensuring proper protocol translation and secure message delivery. The handler also
17
+ * implements robust error handling and connection cleanup to prevent resource leaks.
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * // Create a new WebSocket handler instance
22
+ * const handler = new WebSocketHandler(socket, eventBus);
23
+ * handler.initialize();
24
+ * ```
25
+ */
26
+ import { WebSocket } from 'ws';
27
+ import { EventBusService } from '../../services/event-bus.service.js';
28
+ export declare class WebSocketHandler {
29
+ private socket;
30
+ private eventBus;
31
+ private subscriptions;
32
+ private heartbeatInterval?;
33
+ constructor(socket: WebSocket, eventBus: EventBusService);
34
+ /**
35
+ * Initialize WebSocket connection
36
+ */
37
+ initialize(): void;
38
+ /**
39
+ * Handle client messages
40
+ */
41
+ private handleMessage;
42
+ /**
43
+ * Handle fetch historical logs request
44
+ */
45
+ private handleFetchLogs;
46
+ /**
47
+ * Handle subscription events
48
+ */
49
+ private handleSubscribe;
50
+ /**
51
+ * Handle unsubscribe events
52
+ */
53
+ private handleUnsubscribe;
54
+ /**
55
+ * Handle connection close
56
+ */
57
+ private handleClose;
58
+ /**
59
+ * Handle heartbeat request
60
+ */
61
+ private handlePing;
62
+ /**
63
+ * Handle connection error
64
+ */
65
+ private handleError;
66
+ /**
67
+ * Send message to client
68
+ */
69
+ private send;
70
+ /**
71
+ * Send error message
72
+ */
73
+ private sendError;
74
+ /**
75
+ * Start heartbeat detection
76
+ */
77
+ private startHeartbeat;
78
+ /**
79
+ * Stop heartbeat detection
80
+ */
81
+ private stopHeartbeat;
82
+ }
83
+ //# sourceMappingURL=ws-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-handler.d.ts","sourceRoot":"","sources":["../../../../../src/api/ws/ws-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAc,MAAM,gCAAgC,CAAC;AAgC7E,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IALlB,OAAO,CAAC,aAAa,CAAkD;IACvE,OAAO,CAAC,iBAAiB,CAAC,CAAiB;gBAGjC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,eAAe;IAGnC;;OAEG;IACH,UAAU,IAAI,IAAI;IAWlB;;OAEG;IACH,OAAO,CAAC,aAAa;IA6BrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;IACH,OAAO,CAAC,eAAe;IA6BvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsBzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,UAAU;IAOlB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,IAAI;IAMZ;;OAEG;IACH,OAAO,CAAC,SAAS;IAOjB;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,OAAO,CAAC,aAAa;CAKtB"}
@@ -0,0 +1,217 @@
1
+ /**
2
+ * WebSocket Connection Handler
3
+ *
4
+ * Manages the complete lifecycle and message handling for individual WebSocket connections
5
+ * between MCP Hub Lite clients and the server. This class handles client subscriptions,
6
+ * message routing, heartbeat management, and event distribution through the system's
7
+ * event bus architecture.
8
+ *
9
+ * The handler supports multiple message types including:
10
+ * - Subscription management (subscribe/unsubscribe to event types)
11
+ * - Heartbeat/ping-pong for connection health monitoring
12
+ * - Historical log retrieval requests
13
+ * - Real-time event delivery from the event bus
14
+ *
15
+ * It maintains a mapping between WebSocket event types and internal system event types,
16
+ * ensuring proper protocol translation and secure message delivery. The handler also
17
+ * implements robust error handling and connection cleanup to prevent resource leaks.
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * // Create a new WebSocket handler instance
22
+ * const handler = new WebSocketHandler(socket, eventBus);
23
+ * handler.initialize();
24
+ * ```
25
+ */
26
+ import { WebSocket } from 'ws';
27
+ import { EventTypes } from '../../services/event-bus.service.js';
28
+ import { logStorage } from '../../services/log-storage.service.js';
29
+ import { logger, LOG_MODULES } from '../../utils/logger.js';
30
+ import { WEB_SOCKET_EVENT_TYPES } from '../../../shared/types/websocket.types.js';
31
+ // Event type mapping
32
+ const eventTypeMap = {
33
+ [EventTypes.SERVER_STATUS_CHANGE]: WEB_SOCKET_EVENT_TYPES.SERVER_STATUS,
34
+ [EventTypes.SERVER_CONNECTED]: WEB_SOCKET_EVENT_TYPES.SERVER_CONNECTED,
35
+ [EventTypes.SERVER_DISCONNECTED]: WEB_SOCKET_EVENT_TYPES.SERVER_DISCONNECTED,
36
+ [EventTypes.SERVER_ADDED]: WEB_SOCKET_EVENT_TYPES.SERVER_ADDED,
37
+ [EventTypes.SERVER_UPDATED]: WEB_SOCKET_EVENT_TYPES.SERVER_UPDATED,
38
+ [EventTypes.SERVER_DELETED]: WEB_SOCKET_EVENT_TYPES.SERVER_DELETED,
39
+ [EventTypes.TOOLS_UPDATED]: WEB_SOCKET_EVENT_TYPES.TOOLS,
40
+ [EventTypes.RESOURCES_UPDATED]: WEB_SOCKET_EVENT_TYPES.RESOURCES,
41
+ [EventTypes.LOG_ENTRY]: WEB_SOCKET_EVENT_TYPES.LOG,
42
+ [EventTypes.TOOL_CALL_STARTED]: WEB_SOCKET_EVENT_TYPES.TOOL_CALL_STARTED,
43
+ [EventTypes.TOOL_CALL_COMPLETED]: WEB_SOCKET_EVENT_TYPES.TOOL_CALL_COMPLETED,
44
+ [EventTypes.TOOL_CALL_ERROR]: WEB_SOCKET_EVENT_TYPES.TOOL_CALL_ERROR,
45
+ [EventTypes.CONFIGURATION_UPDATED]: WEB_SOCKET_EVENT_TYPES.CONFIGURATION_UPDATED,
46
+ [EventTypes.CLIENT_CONNECTED]: WEB_SOCKET_EVENT_TYPES.CLIENT_CONNECTED,
47
+ [EventTypes.CLIENT_DISCONNECTED]: WEB_SOCKET_EVENT_TYPES.CLIENT_DISCONNECTED
48
+ };
49
+ export class WebSocketHandler {
50
+ socket;
51
+ eventBus;
52
+ subscriptions = new Map(); // Store subscriptions and their corresponding unsubscribe functions
53
+ heartbeatInterval;
54
+ constructor(socket, eventBus // Event bus instance
55
+ ) {
56
+ this.socket = socket;
57
+ this.eventBus = eventBus;
58
+ }
59
+ /**
60
+ * Initialize WebSocket connection
61
+ */
62
+ initialize() {
63
+ this.socket.on('message', this.handleMessage.bind(this));
64
+ this.socket.on('close', this.handleClose.bind(this));
65
+ this.socket.on('error', this.handleError.bind(this));
66
+ // Start heartbeat detection
67
+ this.startHeartbeat();
68
+ logger.debug('connection established', LOG_MODULES.WEBSOCKET);
69
+ }
70
+ /**
71
+ * Handle client messages
72
+ */
73
+ handleMessage(data) {
74
+ try {
75
+ const message = JSON.parse(data.toString());
76
+ switch (message.type) {
77
+ case 'subscribe':
78
+ this.handleSubscribe(message);
79
+ break;
80
+ case 'unsubscribe':
81
+ this.handleUnsubscribe(message);
82
+ break;
83
+ case 'ping':
84
+ this.handlePing();
85
+ break;
86
+ case 'fetch-logs':
87
+ this.handleFetchLogs(message);
88
+ break;
89
+ default:
90
+ logger.warn(`Unknown message type: ${message.type}`, LOG_MODULES.WEBSOCKET);
91
+ }
92
+ }
93
+ catch (error) {
94
+ logger.error(`Failed to parse WebSocket message: ${error}`, LOG_MODULES.WEBSOCKET);
95
+ this.sendError('Invalid message format');
96
+ }
97
+ }
98
+ /**
99
+ * Handle fetch historical logs request
100
+ */
101
+ handleFetchLogs(message) {
102
+ const logs = logStorage.getLogs(message.serverId, {
103
+ limit: message.limit || 100,
104
+ since: message.since
105
+ });
106
+ this.send({
107
+ type: 'log',
108
+ data: {
109
+ serverId: message.serverId,
110
+ logs: logs
111
+ }
112
+ });
113
+ }
114
+ /**
115
+ * Handle subscription events
116
+ */
117
+ handleSubscribe(message) {
118
+ message.eventTypes.forEach((eventType) => {
119
+ // Map WebSocket event types to internal event types
120
+ const internalEventType = Object.entries(eventTypeMap).find(([, wsType]) => wsType === eventType)?.[0];
121
+ if (internalEventType && !this.subscriptions.has(internalEventType)) {
122
+ // Subscribe to event bus
123
+ const unsubscribe = this.eventBus.subscribe(internalEventType, (data) => {
124
+ const mappedType = eventTypeMap[internalEventType];
125
+ if (mappedType) {
126
+ this.send({
127
+ type: mappedType,
128
+ data
129
+ });
130
+ }
131
+ });
132
+ this.subscriptions.set(internalEventType, unsubscribe);
133
+ }
134
+ });
135
+ logger.info(`Subscribed to events: ${Array.from(this.subscriptions.keys()).sort().join(', ')}`, LOG_MODULES.WEBSOCKET);
136
+ }
137
+ /**
138
+ * Handle unsubscribe events
139
+ */
140
+ handleUnsubscribe(message) {
141
+ message.eventTypes.forEach((eventType) => {
142
+ // Map WebSocket event types to internal event types
143
+ const internalEventType = Object.entries(eventTypeMap).find(([, wsType]) => wsType === eventType)?.[0];
144
+ if (internalEventType) {
145
+ const unsubscribe = this.subscriptions.get(internalEventType);
146
+ if (unsubscribe) {
147
+ unsubscribe(); // Call unsubscribe function
148
+ this.subscriptions.delete(internalEventType);
149
+ }
150
+ }
151
+ });
152
+ logger.info(`Remaining subscriptions: ${Array.from(this.subscriptions.keys()).sort().join(', ')}`, LOG_MODULES.WEBSOCKET);
153
+ }
154
+ /**
155
+ * Handle connection close
156
+ */
157
+ handleClose() {
158
+ logger.info('connection closed', LOG_MODULES.WEBSOCKET);
159
+ this.stopHeartbeat();
160
+ // Unsubscribe from all events
161
+ this.subscriptions.forEach((unsubscribe) => {
162
+ unsubscribe();
163
+ });
164
+ this.subscriptions.clear();
165
+ }
166
+ /**
167
+ * Handle heartbeat request
168
+ */
169
+ handlePing() {
170
+ this.send({
171
+ type: 'pong',
172
+ timestamp: Date.now()
173
+ });
174
+ }
175
+ /**
176
+ * Handle connection error
177
+ */
178
+ handleError(error) {
179
+ logger.error(`error: ${error}`, LOG_MODULES.WEBSOCKET);
180
+ }
181
+ /**
182
+ * Send message to client
183
+ */
184
+ send(message) {
185
+ if (this.socket.readyState === WebSocket.OPEN) {
186
+ this.socket.send(JSON.stringify(message));
187
+ }
188
+ }
189
+ /**
190
+ * Send error message
191
+ */
192
+ sendError(message) {
193
+ this.send({
194
+ type: 'error',
195
+ data: { message }
196
+ });
197
+ }
198
+ /**
199
+ * Start heartbeat detection
200
+ */
201
+ startHeartbeat() {
202
+ this.heartbeatInterval = setInterval(() => {
203
+ this.send({
204
+ type: 'pong',
205
+ timestamp: Date.now()
206
+ });
207
+ }, 30000); // Send heartbeat every 30 seconds
208
+ }
209
+ /**
210
+ * Stop heartbeat detection
211
+ */
212
+ stopHeartbeat() {
213
+ if (this.heartbeatInterval) {
214
+ clearInterval(this.heartbeatInterval);
215
+ }
216
+ }
217
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Creates and configures a Fastify application instance for the MCP Hub Lite service.
3
+ *
4
+ * This function sets up the complete HTTP server with all necessary routes, middleware,
5
+ * and static file serving capabilities. It configures CORS headers for development,
6
+ * registers all API routes (MCP gateway, web APIs, and WebSocket endpoints), and serves
7
+ * the frontend SPA from the client directory.
8
+ *
9
+ * The application follows a layered architecture:
10
+ * - API routes are registered first to ensure proper routing precedence
11
+ * - Static file serving is configured for the built frontend assets
12
+ * - SPA fallback handling redirects non-API routes to index.html for client-side routing
13
+ *
14
+ * @returns {Promise&lt;import('fastify').FastifyInstance&gt;} A configured Fastify instance ready to listen for requests
15
+ * @throws {Error} If Fastify fails to initialize or register plugins
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const app = await buildApp();
20
+ * await app.listen({ port: 3000, host: '0.0.0.0' });
21
+ * ```
22
+ */
23
+ export declare function buildApp(): Promise<import("fastify").FastifyInstance<import("node:http").Server<typeof import("node:http").IncomingMessage, typeof import("node:http").ServerResponse>, import("node:http").IncomingMessage, import("node:http").ServerResponse<import("node:http").IncomingMessage>, import("fastify").FastifyBaseLogger, import("fastify").FastifyTypeProviderDefault>>;
24
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/app.ts"],"names":[],"mappings":"AA6BA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,QAAQ,mWAqE7B"}
@@ -0,0 +1,108 @@
1
+ import Fastify from 'fastify';
2
+ import fastifyStatic from '@fastify/static';
3
+ import path from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ import { configManager } from './config/config-manager.js';
6
+ import { setJsonPrettyConfigGetter } from './utils/json-utils.js';
7
+ // MCP Protocol Routes
8
+ import { mcpGatewayRoutes } from './api/mcp/gateway.js';
9
+ // Web API Routes
10
+ import { webServerRoutes } from './api/web/servers.js';
11
+ import { webSearchRoutes } from './api/web/search.js';
12
+ import { webHealthRoutes } from './api/web/health.js';
13
+ import { webMcpStatusRoutes } from './api/web/mcp-status.js';
14
+ import { configRoutes } from './api/web/config.js';
15
+ import { webLogRoutes } from './api/web/logs.js';
16
+ import { webHubToolsRoutes } from './api/web/hub-tools.js';
17
+ import { webClientRoutes } from './api/web/clients.js';
18
+ import { webResourceRoutes } from './api/web/resources.js';
19
+ import { webSessionRoutes } from './api/web/sessions.js';
20
+ // WebSocket Routes
21
+ import { webSocketRoutes } from './api/ws/events.js';
22
+ // Get __dirname equivalent in ESM
23
+ const __filename = fileURLToPath(import.meta.url);
24
+ const __dirname = path.dirname(__filename);
25
+ /**
26
+ * Creates and configures a Fastify application instance for the MCP Hub Lite service.
27
+ *
28
+ * This function sets up the complete HTTP server with all necessary routes, middleware,
29
+ * and static file serving capabilities. It configures CORS headers for development,
30
+ * registers all API routes (MCP gateway, web APIs, and WebSocket endpoints), and serves
31
+ * the frontend SPA from the client directory.
32
+ *
33
+ * The application follows a layered architecture:
34
+ * - API routes are registered first to ensure proper routing precedence
35
+ * - Static file serving is configured for the built frontend assets
36
+ * - SPA fallback handling redirects non-API routes to index.html for client-side routing
37
+ *
38
+ * @returns {Promise&lt;import('fastify').FastifyInstance&gt;} A configured Fastify instance ready to listen for requests
39
+ * @throws {Error} If Fastify fails to initialize or register plugins
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * const app = await buildApp();
44
+ * await app.listen({ port: 3000, host: '0.0.0.0' });
45
+ * ```
46
+ */
47
+ export async function buildApp() {
48
+ const config = configManager.getConfig();
49
+ const fastify = Fastify({
50
+ logger: false // We use our own logger
51
+ });
52
+ // Set up config getters for json-utils
53
+ setJsonPrettyConfigGetter(() => configManager.getConfig());
54
+ // Set HTTP connection timeouts for SSE long-lived connections
55
+ // Use idleConnectionTimeout from config (default 5 minutes)
56
+ // Add extra buffer to prevent premature disconnect
57
+ const idleTimeout = config.security.idleConnectionTimeout;
58
+ fastify.server.keepAliveTimeout = idleTimeout;
59
+ fastify.server.headersTimeout = idleTimeout + 5000; // headersTimeout must be longer than keepAliveTimeout
60
+ // Simple CORS for dev
61
+ fastify.addHook('onRequest', (request, reply, done) => {
62
+ reply.header('Access-Control-Allow-Origin', '*');
63
+ reply.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
64
+ reply.header('Access-Control-Allow-Headers', 'Content-Type');
65
+ if (request.method === 'OPTIONS') {
66
+ reply.send();
67
+ return;
68
+ }
69
+ done();
70
+ });
71
+ // Register API routes first (before static files)
72
+ fastify.register(mcpGatewayRoutes);
73
+ fastify.register(webServerRoutes);
74
+ fastify.register(webSearchRoutes);
75
+ fastify.register(webHealthRoutes);
76
+ fastify.register(webMcpStatusRoutes);
77
+ fastify.register(configRoutes);
78
+ fastify.register(webLogRoutes);
79
+ fastify.register(webHubToolsRoutes);
80
+ fastify.register(webClientRoutes);
81
+ fastify.register(webResourceRoutes);
82
+ fastify.register(webSessionRoutes);
83
+ fastify.register(webSocketRoutes);
84
+ // Serve static files from dist/client (frontend build output)
85
+ const clientPath = path.join(__dirname, '../../client');
86
+ fastify.register(fastifyStatic, {
87
+ root: clientPath,
88
+ prefix: '/' // Serve at root
89
+ });
90
+ // Fallback route for SPA (redirect all non-API routes to index.html)
91
+ fastify.setNotFoundHandler((request, reply) => {
92
+ // Check if this is an API request
93
+ if (request.url.startsWith('/api') ||
94
+ request.url.startsWith('/web') ||
95
+ request.url.startsWith('/mcp')) {
96
+ reply.code(404).send({
97
+ message: `Route ${request.method}:${request.url} not found`,
98
+ error: 'Not Found',
99
+ statusCode: 404
100
+ });
101
+ }
102
+ else {
103
+ // For non-API routes, serve index.html (SPA fallback)
104
+ reply.sendFile('index.html');
105
+ }
106
+ });
107
+ return fastify;
108
+ }