@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.
- package/CHANGELOG.md +228 -0
- package/LICENSE +21 -0
- package/README.md +354 -0
- package/dist/client/assets/HomeView-f901HeKw.js +1 -0
- package/dist/client/assets/ResourceDetailView-BdOaL_-o.css +1 -0
- package/dist/client/assets/ResourceDetailView-Bz66ZjfY.js +1 -0
- package/dist/client/assets/ResourcesView-CjMklkyv.css +1 -0
- package/dist/client/assets/ResourcesView-lI_fItfA.js +1 -0
- package/dist/client/assets/ServerDashboard-7_8Og9JJ.css +1 -0
- package/dist/client/assets/ServerDashboard-Bgx8WVkx.js +2 -0
- package/dist/client/assets/ServerListView-Bws09jNR.css +1 -0
- package/dist/client/assets/ServerListView-CP6Ffkfx.js +30 -0
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +1 -0
- package/dist/client/assets/SessionsView-D68qKR4D.js +1 -0
- package/dist/client/assets/SettingsView-BPYfO9BE.js +1 -0
- package/dist/client/assets/ToolCallDialog-Br8FNebN.js +1 -0
- package/dist/client/assets/ToolCallDialog-C7eh7jHE.css +1 -0
- package/dist/client/assets/ToolsView-B6hUiR43.js +1 -0
- package/dist/client/assets/ToolsView-BLnU8cV6.css +1 -0
- package/dist/client/assets/_baseClone-DCmK847M.js +1 -0
- package/dist/client/assets/_plugin-vue_export-helper-DlAUqK2U.js +1 -0
- package/dist/client/assets/el-form-item-BVMLpmVC.css +1 -0
- package/dist/client/assets/el-form-item-DM0q2hmO.js +12 -0
- package/dist/client/assets/el-input-BtI9NECe.js +1 -0
- package/dist/client/assets/el-input-CmuHb8HS.css +1 -0
- package/dist/client/assets/el-loading-CChNmKeI.js +1 -0
- package/dist/client/assets/el-loading-bpKhqqQq.css +1 -0
- package/dist/client/assets/el-overlay-B2ZKM6Up.css +1 -0
- package/dist/client/assets/el-overlay-lZZbPmsX.js +1 -0
- package/dist/client/assets/el-select-BXztu2b5.js +1 -0
- package/dist/client/assets/el-select-C0U_l4IZ.css +1 -0
- package/dist/client/assets/el-tab-pane-CnNoQHsR.css +1 -0
- package/dist/client/assets/el-tab-pane-Dy9ruaEX.js +1 -0
- package/dist/client/assets/el-table-column-98UyVgBH.js +1 -0
- package/dist/client/assets/el-table-column-T_mV9jNw.css +1 -0
- package/dist/client/assets/el-tag-B5lLT51E.js +1 -0
- package/dist/client/assets/el-tag-DjxZVOpb.css +1 -0
- package/dist/client/assets/event-BB_Ol6Sd.js +1 -0
- package/dist/client/assets/index-BgKcmWJr.js +1 -0
- package/dist/client/assets/index-BsDWtoIl.css +1 -0
- package/dist/client/assets/index-BzQXG7no.js +1 -0
- package/dist/client/assets/index-CSTs2jYk.js +2 -0
- package/dist/client/assets/omit-Bx5HJNV_.js +1 -0
- package/dist/client/assets/raf-B9VDMtMF.js +1 -0
- package/dist/client/assets/typescript-Bp3YSIOJ.js +1 -0
- package/dist/client/assets/vnode-B8aJx8u4.js +1 -0
- package/dist/client/assets/vue-vendor-6ny5zj9i.js +3 -0
- package/dist/client/index.html +15 -0
- package/dist/server/shared/index.d.ts +3 -0
- package/dist/server/shared/index.d.ts.map +1 -0
- package/dist/server/shared/index.js +2 -0
- package/dist/server/shared/models/index.d.ts +4 -0
- package/dist/server/shared/models/index.d.ts.map +1 -0
- package/dist/server/shared/models/index.js +3 -0
- package/dist/server/shared/models/resource.model.d.ts +8 -0
- package/dist/server/shared/models/resource.model.d.ts.map +1 -0
- package/dist/server/shared/models/resource.model.js +1 -0
- package/dist/server/shared/models/server.model.d.ts +57 -0
- package/dist/server/shared/models/server.model.d.ts.map +1 -0
- package/dist/server/shared/models/server.model.js +1 -0
- package/dist/server/shared/models/session.model.d.ts +73 -0
- package/dist/server/shared/models/session.model.d.ts.map +1 -0
- package/dist/server/shared/models/session.model.js +70 -0
- package/dist/server/shared/models/tool.model.d.ts +22 -0
- package/dist/server/shared/models/tool.model.d.ts.map +1 -0
- package/dist/server/shared/models/tool.model.js +1 -0
- package/dist/server/shared/types/client.types.d.ts +35 -0
- package/dist/server/shared/types/client.types.d.ts.map +1 -0
- package/dist/server/shared/types/client.types.js +5 -0
- package/dist/server/shared/types/common.types.d.ts +5 -0
- package/dist/server/shared/types/common.types.d.ts.map +1 -0
- package/dist/server/shared/types/common.types.js +2 -0
- package/dist/server/shared/types/index.d.ts +4 -0
- package/dist/server/shared/types/index.d.ts.map +1 -0
- package/dist/server/shared/types/index.js +3 -0
- package/dist/server/shared/types/session.types.d.ts +15 -0
- package/dist/server/shared/types/session.types.d.ts.map +1 -0
- package/dist/server/shared/types/session.types.js +5 -0
- package/dist/server/shared/types/websocket.types.d.ts +177 -0
- package/dist/server/shared/types/websocket.types.d.ts.map +1 -0
- package/dist/server/shared/types/websocket.types.js +25 -0
- package/dist/server/src/api/mcp/debug-response-wrapper.d.ts +13 -0
- package/dist/server/src/api/mcp/debug-response-wrapper.d.ts.map +1 -0
- package/dist/server/src/api/mcp/debug-response-wrapper.js +271 -0
- package/dist/server/src/api/mcp/gateway.d.ts +14 -0
- package/dist/server/src/api/mcp/gateway.d.ts.map +1 -0
- package/dist/server/src/api/mcp/gateway.js +116 -0
- package/dist/server/src/api/mcp/session-context-extractor.d.ts +47 -0
- package/dist/server/src/api/mcp/session-context-extractor.d.ts.map +1 -0
- package/dist/server/src/api/mcp/session-context-extractor.js +127 -0
- package/dist/server/src/api/mcp/sse-stream-manager.d.ts +13 -0
- package/dist/server/src/api/mcp/sse-stream-manager.d.ts.map +1 -0
- package/dist/server/src/api/mcp/sse-stream-manager.js +40 -0
- package/dist/server/src/api/web/clients.d.ts +30 -0
- package/dist/server/src/api/web/clients.d.ts.map +1 -0
- package/dist/server/src/api/web/clients.js +41 -0
- package/dist/server/src/api/web/config.d.ts +21 -0
- package/dist/server/src/api/web/config.d.ts.map +1 -0
- package/dist/server/src/api/web/config.js +119 -0
- package/dist/server/src/api/web/health.d.ts +21 -0
- package/dist/server/src/api/web/health.d.ts.map +1 -0
- package/dist/server/src/api/web/health.js +24 -0
- package/dist/server/src/api/web/hub-tools.d.ts +30 -0
- package/dist/server/src/api/web/hub-tools.d.ts.map +1 -0
- package/dist/server/src/api/web/hub-tools.js +202 -0
- package/dist/server/src/api/web/logs.d.ts +30 -0
- package/dist/server/src/api/web/logs.d.ts.map +1 -0
- package/dist/server/src/api/web/logs.js +141 -0
- package/dist/server/src/api/web/mcp-status.d.ts +29 -0
- package/dist/server/src/api/web/mcp-status.d.ts.map +1 -0
- package/dist/server/src/api/web/mcp-status.js +126 -0
- package/dist/server/src/api/web/resources.d.ts +28 -0
- package/dist/server/src/api/web/resources.d.ts.map +1 -0
- package/dist/server/src/api/web/resources.js +93 -0
- package/dist/server/src/api/web/search.d.ts +26 -0
- package/dist/server/src/api/web/search.d.ts.map +1 -0
- package/dist/server/src/api/web/search.js +62 -0
- package/dist/server/src/api/web/servers.d.ts +33 -0
- package/dist/server/src/api/web/servers.d.ts.map +1 -0
- package/dist/server/src/api/web/servers.js +235 -0
- package/dist/server/src/api/web/sessions.d.ts +29 -0
- package/dist/server/src/api/web/sessions.d.ts.map +1 -0
- package/dist/server/src/api/web/sessions.js +104 -0
- package/dist/server/src/api/ws/events.d.ts +29 -0
- package/dist/server/src/api/ws/events.d.ts.map +1 -0
- package/dist/server/src/api/ws/events.js +44 -0
- package/dist/server/src/api/ws/ws-handler.d.ts +83 -0
- package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -0
- package/dist/server/src/api/ws/ws-handler.js +217 -0
- package/dist/server/src/app.d.ts +24 -0
- package/dist/server/src/app.d.ts.map +1 -0
- package/dist/server/src/app.js +108 -0
- package/dist/server/src/cli/commands/list.d.ts +71 -0
- package/dist/server/src/cli/commands/list.d.ts.map +1 -0
- package/dist/server/src/cli/commands/list.js +97 -0
- package/dist/server/src/cli/commands/restart.d.ts +42 -0
- package/dist/server/src/cli/commands/restart.d.ts.map +1 -0
- package/dist/server/src/cli/commands/restart.js +61 -0
- package/dist/server/src/cli/commands/start.d.ts +43 -0
- package/dist/server/src/cli/commands/start.d.ts.map +1 -0
- package/dist/server/src/cli/commands/start.js +160 -0
- package/dist/server/src/cli/commands/status.d.ts +39 -0
- package/dist/server/src/cli/commands/status.d.ts.map +1 -0
- package/dist/server/src/cli/commands/status.js +164 -0
- package/dist/server/src/cli/commands/stop.d.ts +34 -0
- package/dist/server/src/cli/commands/stop.d.ts.map +1 -0
- package/dist/server/src/cli/commands/stop.js +47 -0
- package/dist/server/src/cli/commands/ui.d.ts +44 -0
- package/dist/server/src/cli/commands/ui.d.ts.map +1 -0
- package/dist/server/src/cli/commands/ui.js +95 -0
- package/dist/server/src/cli/index.d.ts +62 -0
- package/dist/server/src/cli/index.d.ts.map +1 -0
- package/dist/server/src/cli/index.js +88 -0
- package/dist/server/src/cli/parse-args.d.ts +108 -0
- package/dist/server/src/cli/parse-args.d.ts.map +1 -0
- package/dist/server/src/cli/parse-args.js +131 -0
- package/dist/server/src/cli/server.d.ts +171 -0
- package/dist/server/src/cli/server.d.ts.map +1 -0
- package/dist/server/src/cli/server.js +246 -0
- package/dist/server/src/config/config-change-logger.d.ts +16 -0
- package/dist/server/src/config/config-change-logger.d.ts.map +1 -0
- package/dist/server/src/config/config-change-logger.js +43 -0
- package/dist/server/src/config/config-loader.d.ts +22 -0
- package/dist/server/src/config/config-loader.d.ts.map +1 -0
- package/dist/server/src/config/config-loader.js +66 -0
- package/dist/server/src/config/config-manager.d.ts +158 -0
- package/dist/server/src/config/config-manager.d.ts.map +1 -0
- package/dist/server/src/config/config-manager.js +246 -0
- package/dist/server/src/config/config-saver.d.ts +16 -0
- package/dist/server/src/config/config-saver.d.ts.map +1 -0
- package/dist/server/src/config/config-saver.js +28 -0
- package/dist/server/src/config/config.schema.d.ts +108 -0
- package/dist/server/src/config/config.schema.d.ts.map +1 -0
- package/dist/server/src/config/config.schema.js +103 -0
- package/dist/server/src/config/server-config-manager.d.ts +74 -0
- package/dist/server/src/config/server-config-manager.d.ts.map +1 -0
- package/dist/server/src/config/server-config-manager.js +157 -0
- package/dist/server/src/config/type-converter.d.ts +13 -0
- package/dist/server/src/config/type-converter.d.ts.map +1 -0
- package/dist/server/src/config/type-converter.js +37 -0
- package/dist/server/src/index.d.ts +3 -0
- package/dist/server/src/index.d.ts.map +1 -0
- package/dist/server/src/index.js +352 -0
- package/dist/server/src/models/event.model.d.ts +106 -0
- package/dist/server/src/models/event.model.d.ts.map +1 -0
- package/dist/server/src/models/event.model.js +5 -0
- package/dist/server/src/models/server.model.d.ts +19 -0
- package/dist/server/src/models/server.model.d.ts.map +1 -0
- package/dist/server/src/models/server.model.js +1 -0
- package/dist/server/src/models/system-tools.constants.d.ts +73 -0
- package/dist/server/src/models/system-tools.constants.d.ts.map +1 -0
- package/dist/server/src/models/system-tools.constants.js +31 -0
- package/dist/server/src/models/types.d.ts +84 -0
- package/dist/server/src/models/types.d.ts.map +1 -0
- package/dist/server/src/models/types.js +67 -0
- package/dist/server/src/pid/file.d.ts +26 -0
- package/dist/server/src/pid/file.d.ts.map +1 -0
- package/dist/server/src/pid/file.js +68 -0
- package/dist/server/src/pid/manager.d.ts +98 -0
- package/dist/server/src/pid/manager.d.ts.map +1 -0
- package/dist/server/src/pid/manager.js +158 -0
- package/dist/server/src/pid/types.d.ts +13 -0
- package/dist/server/src/pid/types.d.ts.map +1 -0
- package/dist/server/src/pid/types.js +4 -0
- package/dist/server/src/server/dev-server.d.ts +2 -0
- package/dist/server/src/server/dev-server.d.ts.map +1 -0
- package/dist/server/src/server/dev-server.js +171 -0
- package/dist/server/src/server/runner.d.ts +57 -0
- package/dist/server/src/server/runner.d.ts.map +1 -0
- package/dist/server/src/server/runner.js +163 -0
- package/dist/server/src/services/client-tracker.service.d.ts +132 -0
- package/dist/server/src/services/client-tracker.service.d.ts.map +1 -0
- package/dist/server/src/services/client-tracker.service.js +203 -0
- package/dist/server/src/services/connection/connection-manager.d.ts +478 -0
- package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -0
- package/dist/server/src/services/connection/connection-manager.js +929 -0
- package/dist/server/src/services/connection/index.d.ts +6 -0
- package/dist/server/src/services/connection/index.d.ts.map +1 -0
- package/dist/server/src/services/connection/index.js +4 -0
- package/dist/server/src/services/connection/tool-cache.d.ts +122 -0
- package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -0
- package/dist/server/src/services/connection/tool-cache.js +202 -0
- package/dist/server/src/services/connection/types.d.ts +30 -0
- package/dist/server/src/services/connection/types.d.ts.map +1 -0
- package/dist/server/src/services/connection/types.js +1 -0
- package/dist/server/src/services/event-bus.service.d.ts +169 -0
- package/dist/server/src/services/event-bus.service.d.ts.map +1 -0
- package/dist/server/src/services/event-bus.service.js +200 -0
- package/dist/server/src/services/gateway/gateway.service.d.ts +61 -0
- package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -0
- package/dist/server/src/services/gateway/gateway.service.js +107 -0
- package/dist/server/src/services/gateway/index.d.ts +8 -0
- package/dist/server/src/services/gateway/index.d.ts.map +1 -0
- package/dist/server/src/services/gateway/index.js +6 -0
- package/dist/server/src/services/gateway/log-formatter.d.ts +26 -0
- package/dist/server/src/services/gateway/log-formatter.d.ts.map +1 -0
- package/dist/server/src/services/gateway/log-formatter.js +66 -0
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts +13 -0
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -0
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +131 -0
- package/dist/server/src/services/gateway/request-handlers/index.d.ts +9 -0
- package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -0
- package/dist/server/src/services/gateway/request-handlers/index.js +8 -0
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +11 -0
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -0
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +85 -0
- package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts +11 -0
- package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -0
- package/dist/server/src/services/gateway/request-handlers/resources-handler.js +56 -0
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts +11 -0
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -0
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +228 -0
- package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts +11 -0
- package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts.map +1 -0
- package/dist/server/src/services/gateway/request-handlers/tools-handler.js +79 -0
- package/dist/server/src/services/gateway/tool-list-generator.d.ts +23 -0
- package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -0
- package/dist/server/src/services/gateway/tool-list-generator.js +115 -0
- package/dist/server/src/services/gateway/types.d.ts +27 -0
- package/dist/server/src/services/gateway/types.d.ts.map +1 -0
- package/dist/server/src/services/gateway/types.js +4 -0
- package/dist/server/src/services/gateway.service.d.ts +7 -0
- package/dist/server/src/services/gateway.service.d.ts.map +1 -0
- package/dist/server/src/services/gateway.service.js +6 -0
- package/dist/server/src/services/hub-manager.service.d.ts +299 -0
- package/dist/server/src/services/hub-manager.service.d.ts.map +1 -0
- package/dist/server/src/services/hub-manager.service.js +413 -0
- package/dist/server/src/services/hub-tools/index.d.ts +10 -0
- package/dist/server/src/services/hub-tools/index.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/index.js +6 -0
- package/dist/server/src/services/hub-tools/resource-generator.d.ts +63 -0
- package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/resource-generator.js +141 -0
- package/dist/server/src/services/hub-tools/server-selector.d.ts +63 -0
- package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/server-selector.js +108 -0
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +47 -0
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/system-tool-definitions.js +225 -0
- package/dist/server/src/services/hub-tools/tool-search.d.ts +85 -0
- package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/tool-search.js +115 -0
- package/dist/server/src/services/hub-tools/types.d.ts +42 -0
- package/dist/server/src/services/hub-tools/types.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/types.js +1 -0
- package/dist/server/src/services/hub-tools.service.d.ts +235 -0
- package/dist/server/src/services/hub-tools.service.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools.service.js +457 -0
- package/dist/server/src/services/log-storage.service.d.ts +177 -0
- package/dist/server/src/services/log-storage.service.d.ts.map +1 -0
- package/dist/server/src/services/log-storage.service.js +243 -0
- package/dist/server/src/services/mcp-connection-manager.d.ts +7 -0
- package/dist/server/src/services/mcp-connection-manager.d.ts.map +1 -0
- package/dist/server/src/services/mcp-connection-manager.js +6 -0
- package/dist/server/src/services/mcp-session-manager.d.ts +6 -0
- package/dist/server/src/services/mcp-session-manager.d.ts.map +1 -0
- package/dist/server/src/services/mcp-session-manager.js +4 -0
- package/dist/server/src/services/search/index.d.ts +5 -0
- package/dist/server/src/services/search/index.d.ts.map +1 -0
- package/dist/server/src/services/search/index.js +5 -0
- package/dist/server/src/services/search/search-cache.d.ts +132 -0
- package/dist/server/src/services/search/search-cache.d.ts.map +1 -0
- package/dist/server/src/services/search/search-cache.js +151 -0
- package/dist/server/src/services/search/search-core.service.d.ts +108 -0
- package/dist/server/src/services/search/search-core.service.d.ts.map +1 -0
- package/dist/server/src/services/search/search-core.service.js +187 -0
- package/dist/server/src/services/search/search-scorer.d.ts +54 -0
- package/dist/server/src/services/search/search-scorer.d.ts.map +1 -0
- package/dist/server/src/services/search/search-scorer.js +83 -0
- package/dist/server/src/services/search/types.d.ts +20 -0
- package/dist/server/src/services/search/types.d.ts.map +1 -0
- package/dist/server/src/services/search/types.js +1 -0
- package/dist/server/src/services/session/index.d.ts +6 -0
- package/dist/server/src/services/session/index.d.ts.map +1 -0
- package/dist/server/src/services/session/index.js +4 -0
- package/dist/server/src/services/session/session-manager.d.ts +352 -0
- package/dist/server/src/services/session/session-manager.d.ts.map +1 -0
- package/dist/server/src/services/session/session-manager.js +835 -0
- package/dist/server/src/services/session/types.d.ts +32 -0
- package/dist/server/src/services/session/types.d.ts.map +1 -0
- package/dist/server/src/services/session/types.js +1 -0
- package/dist/server/src/services/simple-search.service.d.ts +67 -0
- package/dist/server/src/services/simple-search.service.d.ts.map +1 -0
- package/dist/server/src/services/simple-search.service.js +82 -0
- package/dist/server/src/services/system-tool-handler.d.ts +10 -0
- package/dist/server/src/services/system-tool-handler.d.ts.map +1 -0
- package/dist/server/src/services/system-tool-handler.js +77 -0
- package/dist/server/src/utils/error-handler.d.ts +18 -0
- package/dist/server/src/utils/error-handler.d.ts.map +1 -0
- package/dist/server/src/utils/error-handler.js +59 -0
- package/dist/server/src/utils/format-utils.d.ts +23 -0
- package/dist/server/src/utils/format-utils.d.ts.map +1 -0
- package/dist/server/src/utils/format-utils.js +58 -0
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -0
- package/dist/server/src/utils/index.js +1 -0
- package/dist/server/src/utils/json-utils.d.ts +82 -0
- package/dist/server/src/utils/json-utils.d.ts.map +1 -0
- package/dist/server/src/utils/json-utils.js +204 -0
- package/dist/server/src/utils/log-rotator.d.ts +223 -0
- package/dist/server/src/utils/log-rotator.d.ts.map +1 -0
- package/dist/server/src/utils/log-rotator.js +306 -0
- package/dist/server/src/utils/logger/dev-logger.d.ts +39 -0
- package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -0
- package/dist/server/src/utils/logger/dev-logger.js +63 -0
- package/dist/server/src/utils/logger/index.d.ts +36 -0
- package/dist/server/src/utils/logger/index.d.ts.map +1 -0
- package/dist/server/src/utils/logger/index.js +46 -0
- package/dist/server/src/utils/logger/log-colors.d.ts +27 -0
- package/dist/server/src/utils/logger/log-colors.d.ts.map +1 -0
- package/dist/server/src/utils/logger/log-colors.js +41 -0
- package/dist/server/src/utils/logger/log-context.d.ts +13 -0
- package/dist/server/src/utils/logger/log-context.d.ts.map +1 -0
- package/dist/server/src/utils/logger/log-context.js +5 -0
- package/dist/server/src/utils/logger/log-formatter.d.ts +47 -0
- package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -0
- package/dist/server/src/utils/logger/log-formatter.js +150 -0
- package/dist/server/src/utils/logger/log-modules.d.ts +141 -0
- package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -0
- package/dist/server/src/utils/logger/log-modules.js +81 -0
- package/dist/server/src/utils/logger/log-output.d.ts +68 -0
- package/dist/server/src/utils/logger/log-output.d.ts.map +1 -0
- package/dist/server/src/utils/logger/log-output.js +320 -0
- package/dist/server/src/utils/logger/logger.d.ts +190 -0
- package/dist/server/src/utils/logger/logger.d.ts.map +1 -0
- package/dist/server/src/utils/logger/logger.js +350 -0
- package/dist/server/src/utils/logger.d.ts +12 -0
- package/dist/server/src/utils/logger.d.ts.map +1 -0
- package/dist/server/src/utils/logger.js +12 -0
- package/dist/server/src/utils/mcp-error-handler.d.ts +162 -0
- package/dist/server/src/utils/mcp-error-handler.d.ts.map +1 -0
- package/dist/server/src/utils/mcp-error-handler.js +270 -0
- package/dist/server/src/utils/port-checker.d.ts +16 -0
- package/dist/server/src/utils/port-checker.d.ts.map +1 -0
- package/dist/server/src/utils/port-checker.js +242 -0
- package/dist/server/src/utils/request-context.d.ts +71 -0
- package/dist/server/src/utils/request-context.d.ts.map +1 -0
- package/dist/server/src/utils/request-context.js +73 -0
- package/dist/server/src/utils/tool-args-parser.d.ts +17 -0
- package/dist/server/src/utils/tool-args-parser.d.ts.map +1 -0
- package/dist/server/src/utils/tool-args-parser.js +34 -0
- package/dist/server/src/utils/transports/sse-transport.d.ts +104 -0
- package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -0
- package/dist/server/src/utils/transports/sse-transport.js +189 -0
- package/dist/server/src/utils/transports/stdio-transport.d.ts +122 -0
- package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -0
- package/dist/server/src/utils/transports/stdio-transport.js +324 -0
- package/dist/server/src/utils/transports/streamable-http-transport.d.ts +146 -0
- package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -0
- package/dist/server/src/utils/transports/streamable-http-transport.js +212 -0
- package/dist/server/src/utils/transports/transport-factory.d.ts +26 -0
- package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -0
- package/dist/server/src/utils/transports/transport-factory.js +104 -0
- package/dist/server/src/utils/transports/transport.interface.d.ts +35 -0
- package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -0
- package/dist/server/src/utils/transports/transport.interface.js +1 -0
- package/dist/server/tests/contract/mcp-protocol/initialize.test.d.ts +2 -0
- package/dist/server/tests/contract/mcp-protocol/initialize.test.d.ts.map +1 -0
- package/dist/server/tests/contract/mcp-protocol/initialize.test.js +103 -0
- package/dist/server/tests/contract/mcp-protocol/tools-call.test.d.ts +2 -0
- package/dist/server/tests/contract/mcp-protocol/tools-call.test.d.ts.map +1 -0
- package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +181 -0
- package/dist/server/tests/contract/mcp-protocol/tools-list.test.d.ts +2 -0
- package/dist/server/tests/contract/mcp-protocol/tools-list.test.d.ts.map +1 -0
- package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +155 -0
- package/dist/server/tests/evaluation/evaluation.test.d.ts +2 -0
- package/dist/server/tests/evaluation/evaluation.test.d.ts.map +1 -0
- package/dist/server/tests/evaluation/evaluation.test.js +102 -0
- package/dist/server/tests/helpers/sdk-test-helpers.d.ts +32 -0
- package/dist/server/tests/helpers/sdk-test-helpers.d.ts.map +1 -0
- package/dist/server/tests/helpers/sdk-test-helpers.js +82 -0
- package/dist/server/tests/integration/api/gateway.test.d.ts +2 -0
- package/dist/server/tests/integration/api/gateway.test.d.ts.map +1 -0
- package/dist/server/tests/integration/api/gateway.test.js +366 -0
- package/dist/server/tests/integration/gateway/fault-tolerance.test.d.ts +2 -0
- package/dist/server/tests/integration/gateway/fault-tolerance.test.d.ts.map +1 -0
- package/dist/server/tests/integration/gateway/fault-tolerance.test.js +109 -0
- package/dist/server/tests/integration/gateway/mcp-connection.test.d.ts +2 -0
- package/dist/server/tests/integration/gateway/mcp-connection.test.d.ts.map +1 -0
- package/dist/server/tests/integration/gateway/mcp-connection.test.js +149 -0
- package/dist/server/tests/server.test.d.ts +2 -0
- package/dist/server/tests/server.test.d.ts.map +1 -0
- package/dist/server/tests/server.test.js +95 -0
- package/dist/server/tests/setup.d.ts +7 -0
- package/dist/server/tests/setup.d.ts.map +1 -0
- package/dist/server/tests/setup.js +53 -0
- package/dist/server/tests/types/logger-test-helpers.d.ts +17 -0
- package/dist/server/tests/types/logger-test-helpers.d.ts.map +1 -0
- package/dist/server/tests/types/logger-test-helpers.js +4 -0
- package/dist/server/tests/types/test-helpers.d.ts +27 -0
- package/dist/server/tests/types/test-helpers.d.ts.map +1 -0
- package/dist/server/tests/types/test-helpers.js +4 -0
- package/dist/server/tests/unit/cli/basic-cli.test.d.ts +2 -0
- package/dist/server/tests/unit/cli/basic-cli.test.d.ts.map +1 -0
- package/dist/server/tests/unit/cli/basic-cli.test.js +33 -0
- package/dist/server/tests/unit/cli/cli.test.d.ts +2 -0
- package/dist/server/tests/unit/cli/cli.test.d.ts.map +1 -0
- package/dist/server/tests/unit/cli/cli.test.js +17 -0
- package/dist/server/tests/unit/cli/commands.test.d.ts +2 -0
- package/dist/server/tests/unit/cli/commands.test.d.ts.map +1 -0
- package/dist/server/tests/unit/cli/commands.test.js +75 -0
- package/dist/server/tests/unit/cli/server.test.d.ts +2 -0
- package/dist/server/tests/unit/cli/server.test.d.ts.map +1 -0
- package/dist/server/tests/unit/cli/server.test.js +68 -0
- package/dist/server/tests/unit/server/runner.test.d.ts +2 -0
- package/dist/server/tests/unit/server/runner.test.d.ts.map +1 -0
- package/dist/server/tests/unit/server/runner.test.js +488 -0
- package/dist/server/tests/unit/server/setup.d.ts +2 -0
- package/dist/server/tests/unit/server/setup.d.ts.map +1 -0
- package/dist/server/tests/unit/server/setup.js +21 -0
- package/dist/server/tests/unit/services/gateway-logging.test.d.ts +2 -0
- package/dist/server/tests/unit/services/gateway-logging.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/gateway-logging.test.js +47 -0
- package/dist/server/tests/unit/services/hub-manager-service.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-manager-service.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-manager-service.test.js +140 -0
- package/dist/server/tests/unit/services/hub-manager.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-manager.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-manager.test.js +98 -0
- package/dist/server/tests/unit/services/hub-tools.service.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-tools.service.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-tools.service.test.js +674 -0
- package/dist/server/tests/unit/services/search/search-cache.test.d.ts +2 -0
- package/dist/server/tests/unit/services/search/search-cache.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/search/search-cache.test.js +58 -0
- package/dist/server/tests/unit/services/search/search-core.service.test.d.ts +2 -0
- package/dist/server/tests/unit/services/search/search-core.service.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/search/search-core.service.test.js +84 -0
- package/dist/server/tests/unit/services/search/search-scorer.test.d.ts +2 -0
- package/dist/server/tests/unit/services/search/search-scorer.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/search/search-scorer.test.js +97 -0
- package/dist/server/tests/unit/services/session-manager.test.d.ts +2 -0
- package/dist/server/tests/unit/services/session-manager.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/session-manager.test.js +481 -0
- package/dist/server/tests/unit/utils/config.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/config.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/config.test.js +634 -0
- package/dist/server/tests/unit/utils/json-utils.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/json-utils.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/json-utils.test.js +296 -0
- package/dist/server/tests/unit/utils/log-rotator.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/log-rotator.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/log-rotator.test.js +296 -0
- package/dist/server/tests/unit/utils/logger.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/logger.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/logger.test.js +462 -0
- package/dist/server/tests/unit/utils/mcp-error-handler.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/mcp-error-handler.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/mcp-error-handler.test.js +163 -0
- package/dist/server/tests/unit/utils/request-context.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/request-context.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/request-context.test.js +82 -0
- package/dist/server/vite.config.d.ts +3 -0
- package/dist/server/vite.config.d.ts.map +1 -0
- package/dist/server/vite.config.js +160 -0
- package/dist/server/vitest.config.d.ts +3 -0
- package/dist/server/vitest.config.d.ts.map +1 -0
- package/dist/server/vitest.config.js +53 -0
- 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<import('fastify').FastifyInstance>} 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<import('fastify').FastifyInstance>} 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
|
+
}
|