@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,462 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import os from 'node:os';
|
|
5
|
+
import { Logger, logWithColor } from '../../../src/utils/logger.js';
|
|
6
|
+
import { setJsonPrettyConfigGetter, setDevModeEnabled } from '../../../src/utils/json-utils.js';
|
|
7
|
+
describe('Logger', () => {
|
|
8
|
+
let logger;
|
|
9
|
+
let tempLogDir;
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
// Create temporary log directory
|
|
12
|
+
tempLogDir = path.join(os.tmpdir(), `logger-test-${Date.now()}`);
|
|
13
|
+
fs.mkdirSync(tempLogDir, { recursive: true });
|
|
14
|
+
// Reset config getter
|
|
15
|
+
setJsonPrettyConfigGetter(null);
|
|
16
|
+
// Reset dev mode flag
|
|
17
|
+
setDevModeEnabled(false);
|
|
18
|
+
});
|
|
19
|
+
afterEach(() => {
|
|
20
|
+
// Clean up temporary directory
|
|
21
|
+
if (fs.existsSync(tempLogDir)) {
|
|
22
|
+
fs.rmSync(tempLogDir, { recursive: true, force: true });
|
|
23
|
+
}
|
|
24
|
+
// Clean up mocks
|
|
25
|
+
vi.restoreAllMocks();
|
|
26
|
+
});
|
|
27
|
+
it('should create logger with default level', () => {
|
|
28
|
+
logger = new Logger();
|
|
29
|
+
expect(logger).toBeDefined();
|
|
30
|
+
// Note: Since logger is a private property, we cannot access it directly, but we can test through behavior
|
|
31
|
+
});
|
|
32
|
+
it('should create logger with specified level', () => {
|
|
33
|
+
logger = new Logger('debug');
|
|
34
|
+
expect(logger).toBeDefined();
|
|
35
|
+
});
|
|
36
|
+
it('should set log level correctly', () => {
|
|
37
|
+
logger = new Logger('info');
|
|
38
|
+
logger.setLevel('debug');
|
|
39
|
+
// Verify level setting (via internal method simulation)
|
|
40
|
+
const shouldLogSpy = vi.spyOn(logger, 'shouldLog');
|
|
41
|
+
logger.shouldLog('debug');
|
|
42
|
+
expect(shouldLogSpy).toHaveBeenCalledWith('debug');
|
|
43
|
+
});
|
|
44
|
+
it('should format timestamp correctly', () => {
|
|
45
|
+
logger = new Logger();
|
|
46
|
+
const testDate = new Date('2025-12-01T10:30:45.123Z');
|
|
47
|
+
const formatted = logger.formatTimestamp(testDate);
|
|
48
|
+
// Verify format is correct, but don't hardcode specific time values (timezone may affect)
|
|
49
|
+
expect(formatted).toMatch(/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}$/);
|
|
50
|
+
});
|
|
51
|
+
it('should format log level correctly', () => {
|
|
52
|
+
logger = new Logger();
|
|
53
|
+
expect(logger.formatLogLevel('debug')).toBe('DBG');
|
|
54
|
+
expect(logger.formatLogLevel('info')).toBe('INF');
|
|
55
|
+
expect(logger.formatLogLevel('warn')).toBe('WRN');
|
|
56
|
+
expect(logger.formatLogLevel('error')).toBe('ERR');
|
|
57
|
+
});
|
|
58
|
+
it('should format PID correctly', () => {
|
|
59
|
+
logger = new Logger();
|
|
60
|
+
expect(logger.formatPid(123)).toBe('PID: 123');
|
|
61
|
+
expect(logger.formatPid(123456)).toBe('PID: 123456');
|
|
62
|
+
expect(logger.formatPid(123456789)).toBe('PID:12345678'); // Test long PID truncation
|
|
63
|
+
});
|
|
64
|
+
it('should determine if message should be logged based on level', () => {
|
|
65
|
+
logger = new Logger('info');
|
|
66
|
+
// info level should log info, warn, error
|
|
67
|
+
expect(logger.shouldLog('info')).toBe(true);
|
|
68
|
+
expect(logger.shouldLog('warn')).toBe(true);
|
|
69
|
+
expect(logger.shouldLog('error')).toBe(true);
|
|
70
|
+
expect(logger.shouldLog('debug')).toBe(false);
|
|
71
|
+
// debug level should log all
|
|
72
|
+
logger.setLevel('debug');
|
|
73
|
+
expect(logger.shouldLog('debug')).toBe(true);
|
|
74
|
+
});
|
|
75
|
+
it('should create colored log message with server name', () => {
|
|
76
|
+
logger = new Logger();
|
|
77
|
+
const message = logger.createColoredLogMessage('info', 'test message', {
|
|
78
|
+
pid: 123,
|
|
79
|
+
serverName: 'test-server'
|
|
80
|
+
});
|
|
81
|
+
// Verify message contains correct components (don't verify specific timestamp)
|
|
82
|
+
expect(message).toMatch(/\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}\]/);
|
|
83
|
+
expect(message).toContain('[INF]');
|
|
84
|
+
expect(message).toContain('[PID: 123]');
|
|
85
|
+
expect(message).toContain('[test-server]');
|
|
86
|
+
expect(message).toContain('test message');
|
|
87
|
+
});
|
|
88
|
+
it('should create plain log message without server name', () => {
|
|
89
|
+
logger = new Logger();
|
|
90
|
+
const message = logger.createLogMessage('info', 'test message', {
|
|
91
|
+
pid: 123
|
|
92
|
+
});
|
|
93
|
+
// Verify message contains correct components (don't verify specific timestamp)
|
|
94
|
+
expect(message).toMatch(/\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}\]/);
|
|
95
|
+
expect(message).toContain('[INF]');
|
|
96
|
+
expect(message).toContain('[PID: 123]');
|
|
97
|
+
expect(message).toContain('[mcp-hub]');
|
|
98
|
+
expect(message).toContain('test message');
|
|
99
|
+
});
|
|
100
|
+
it('should format error objects correctly', () => {
|
|
101
|
+
logger = new Logger();
|
|
102
|
+
// Test Error object
|
|
103
|
+
const error = new Error('Test error');
|
|
104
|
+
error.stack = 'Error: Test error\n at test (test.js:1:1)\n at another (test.js:2:2)';
|
|
105
|
+
const formatted = logger.formatError(error);
|
|
106
|
+
expect(formatted).toContain('Test error');
|
|
107
|
+
expect(formatted).toContain('at test (test.js:1:1)');
|
|
108
|
+
// Test non-Error object
|
|
109
|
+
const stringError = 'string error';
|
|
110
|
+
const formattedString = logger.formatError(stringError);
|
|
111
|
+
expect(formattedString).toBe('string error');
|
|
112
|
+
});
|
|
113
|
+
it('should enable dev log when DEV_LOG_FILE environment variable is "true"', () => {
|
|
114
|
+
try {
|
|
115
|
+
// Set DEV_LOG_FILE environment variable
|
|
116
|
+
process.env.DEV_LOG_FILE = 'true';
|
|
117
|
+
// Mock fs and path modules to avoid file system operations
|
|
118
|
+
const mkdirSyncSpy = vi.spyOn(fs, 'mkdirSync').mockImplementation(() => undefined);
|
|
119
|
+
vi.spyOn(fs, 'existsSync').mockImplementation(() => false);
|
|
120
|
+
const createWriteStreamSpy = vi.spyOn(fs, 'createWriteStream').mockImplementation(() => {
|
|
121
|
+
return {
|
|
122
|
+
write: vi.fn(),
|
|
123
|
+
end: vi.fn(),
|
|
124
|
+
close: vi.fn(),
|
|
125
|
+
bytesWritten: 0,
|
|
126
|
+
path: '',
|
|
127
|
+
pending: false,
|
|
128
|
+
writable: true,
|
|
129
|
+
writableEnded: false,
|
|
130
|
+
writableFinished: false,
|
|
131
|
+
writableHighWaterMark: 16384,
|
|
132
|
+
writableLength: 0,
|
|
133
|
+
writableObjectMode: false,
|
|
134
|
+
writableCorked: 0,
|
|
135
|
+
destroyed: false
|
|
136
|
+
// Add other necessary properties...
|
|
137
|
+
};
|
|
138
|
+
});
|
|
139
|
+
logger = new Logger();
|
|
140
|
+
expect(logger.logFileStream).toBeDefined();
|
|
141
|
+
// Verify file system operations were called
|
|
142
|
+
expect(mkdirSyncSpy).toHaveBeenCalled();
|
|
143
|
+
expect(createWriteStreamSpy).toHaveBeenCalled();
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
// Restore environment variable and mocks
|
|
147
|
+
delete process.env.DEV_LOG_FILE;
|
|
148
|
+
vi.restoreAllMocks();
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
it('should enable dev log when DEV_LOG_FILE environment variable is "1"', () => {
|
|
152
|
+
try {
|
|
153
|
+
// Set DEV_LOG_FILE environment variable to "1"
|
|
154
|
+
process.env.DEV_LOG_FILE = '1';
|
|
155
|
+
// Mock fs and path modules to avoid file system operations
|
|
156
|
+
vi.spyOn(fs, 'mkdirSync').mockImplementation(() => undefined);
|
|
157
|
+
vi.spyOn(fs, 'existsSync').mockImplementation(() => false);
|
|
158
|
+
vi.spyOn(fs, 'createWriteStream').mockImplementation(() => {
|
|
159
|
+
return {
|
|
160
|
+
write: vi.fn(),
|
|
161
|
+
end: vi.fn(),
|
|
162
|
+
close: vi.fn(),
|
|
163
|
+
destroyed: false
|
|
164
|
+
};
|
|
165
|
+
});
|
|
166
|
+
logger = new Logger();
|
|
167
|
+
expect(logger.logFileStream).toBeDefined();
|
|
168
|
+
}
|
|
169
|
+
finally {
|
|
170
|
+
// Restore environment variable and mocks
|
|
171
|
+
delete process.env.DEV_LOG_FILE;
|
|
172
|
+
vi.restoreAllMocks();
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
it('should NOT enable dev log when DEV_LOG_FILE environment variable is not set', () => {
|
|
176
|
+
try {
|
|
177
|
+
// Ensure DEV_LOG_FILE is not set
|
|
178
|
+
delete process.env.DEV_LOG_FILE;
|
|
179
|
+
logger = new Logger();
|
|
180
|
+
expect(logger.logFileStream).toBeNull();
|
|
181
|
+
}
|
|
182
|
+
finally {
|
|
183
|
+
// Restore mocks
|
|
184
|
+
vi.restoreAllMocks();
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
it('should NOT enable dev log when DEV_LOG_FILE environment variable is other values', () => {
|
|
188
|
+
try {
|
|
189
|
+
// Set DEV_LOG_FILE to a value that should not enable
|
|
190
|
+
process.env.DEV_LOG_FILE = 'false';
|
|
191
|
+
logger = new Logger();
|
|
192
|
+
expect(logger.logFileStream).toBeNull();
|
|
193
|
+
}
|
|
194
|
+
finally {
|
|
195
|
+
// Restore environment variable
|
|
196
|
+
delete process.env.DEV_LOG_FILE;
|
|
197
|
+
vi.restoreAllMocks();
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
it('should handle multiple arguments in log methods', () => {
|
|
201
|
+
logger = new Logger('debug');
|
|
202
|
+
// Mock console methods
|
|
203
|
+
const consoleDebugSpy = vi.spyOn(console, 'debug').mockImplementation(() => { });
|
|
204
|
+
const consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
|
|
205
|
+
const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
|
|
206
|
+
const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
207
|
+
// Test debug method
|
|
208
|
+
logger.debug('test', 'arg1', 'arg2');
|
|
209
|
+
expect(consoleDebugSpy).toHaveBeenCalled();
|
|
210
|
+
// Test info method
|
|
211
|
+
logger.info('test', 'arg1', 'arg2');
|
|
212
|
+
expect(consoleInfoSpy).toHaveBeenCalled();
|
|
213
|
+
// Test warn method
|
|
214
|
+
logger.warn('test', 'arg1', 'arg2');
|
|
215
|
+
expect(consoleWarnSpy).toHaveBeenCalled();
|
|
216
|
+
// Test error method
|
|
217
|
+
logger.error('test', 'arg1', 'arg2');
|
|
218
|
+
expect(consoleErrorSpy).toHaveBeenCalled();
|
|
219
|
+
// Restore console methods
|
|
220
|
+
consoleDebugSpy.mockRestore();
|
|
221
|
+
consoleInfoSpy.mockRestore();
|
|
222
|
+
consoleWarnSpy.mockRestore();
|
|
223
|
+
consoleErrorSpy.mockRestore();
|
|
224
|
+
});
|
|
225
|
+
it('should respect log level filtering', () => {
|
|
226
|
+
logger = new Logger('warn');
|
|
227
|
+
const consoleDebugSpy = vi.spyOn(console, 'debug').mockImplementation(() => { });
|
|
228
|
+
const consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
|
|
229
|
+
const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
|
|
230
|
+
const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
231
|
+
// debug and info should not be called
|
|
232
|
+
logger.debug('debug message');
|
|
233
|
+
logger.info('info message');
|
|
234
|
+
// warn and error should be called
|
|
235
|
+
logger.warn('warn message');
|
|
236
|
+
logger.error('error message');
|
|
237
|
+
expect(consoleDebugSpy).not.toHaveBeenCalled();
|
|
238
|
+
expect(consoleInfoSpy).not.toHaveBeenCalled();
|
|
239
|
+
expect(consoleWarnSpy).toHaveBeenCalled();
|
|
240
|
+
expect(consoleErrorSpy).toHaveBeenCalled();
|
|
241
|
+
// Restore console methods
|
|
242
|
+
consoleDebugSpy.mockRestore();
|
|
243
|
+
consoleInfoSpy.mockRestore();
|
|
244
|
+
consoleWarnSpy.mockRestore();
|
|
245
|
+
consoleErrorSpy.mockRestore();
|
|
246
|
+
});
|
|
247
|
+
it('should include traceId and spanId in log messages when provided', () => {
|
|
248
|
+
logger = new Logger();
|
|
249
|
+
// Test colored log message
|
|
250
|
+
const coloredMessage = logger.createColoredLogMessage('info', 'test message', {
|
|
251
|
+
pid: 123,
|
|
252
|
+
serverName: 'test-server',
|
|
253
|
+
traceId: '1234567890abcdef1234567890abcdef',
|
|
254
|
+
spanId: 'abcdef1234567890'
|
|
255
|
+
});
|
|
256
|
+
expect(coloredMessage).toContain('[TID:1234567890abcdef1234567890abcdef]');
|
|
257
|
+
expect(coloredMessage).toContain('[SID:abcdef1234567890]');
|
|
258
|
+
// Test plain text log message
|
|
259
|
+
const plainMessage = logger.createLogMessage('info', 'test message', {
|
|
260
|
+
pid: 123,
|
|
261
|
+
serverName: 'test-server',
|
|
262
|
+
traceId: '1234567890abcdef1234567890abcdef',
|
|
263
|
+
spanId: 'abcdef1234567890'
|
|
264
|
+
});
|
|
265
|
+
expect(plainMessage).toContain('[TID:1234567890abcdef1234567890abcdef]');
|
|
266
|
+
expect(plainMessage).toContain('[SID:abcdef1234567890]');
|
|
267
|
+
});
|
|
268
|
+
it('should handle log messages without traceId and spanId', () => {
|
|
269
|
+
logger = new Logger();
|
|
270
|
+
// Test colored log message
|
|
271
|
+
const coloredMessage = logger.createColoredLogMessage('info', 'test message', {
|
|
272
|
+
pid: 123,
|
|
273
|
+
serverName: 'test-server'
|
|
274
|
+
});
|
|
275
|
+
expect(coloredMessage).not.toContain('traceId');
|
|
276
|
+
expect(coloredMessage).not.toContain('spanId');
|
|
277
|
+
// Test plain text log message
|
|
278
|
+
const plainMessage = logger.createLogMessage('info', 'test message', {
|
|
279
|
+
pid: 123,
|
|
280
|
+
serverName: 'test-server'
|
|
281
|
+
});
|
|
282
|
+
expect(plainMessage).not.toContain('traceId');
|
|
283
|
+
expect(plainMessage).not.toContain('spanId');
|
|
284
|
+
});
|
|
285
|
+
it('should include traceId and spanId in serverLog', () => {
|
|
286
|
+
logger = new Logger('info');
|
|
287
|
+
const consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
|
|
288
|
+
logger.serverLog('info', 'test-server', 'server message', {
|
|
289
|
+
pid: 456,
|
|
290
|
+
traceId: '1234567890abcdef1234567890abcdef',
|
|
291
|
+
spanId: 'abcdef1234567890'
|
|
292
|
+
});
|
|
293
|
+
expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('[TID:1234567890abcdef1234567890abcdef]'));
|
|
294
|
+
expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('[SID:abcdef1234567890]'));
|
|
295
|
+
// Restore console methods
|
|
296
|
+
consoleInfoSpy.mockRestore();
|
|
297
|
+
});
|
|
298
|
+
it('should respect log level filtering in serverLog method', () => {
|
|
299
|
+
logger = new Logger('info');
|
|
300
|
+
const consoleDebugSpy = vi.spyOn(console, 'debug').mockImplementation(() => { });
|
|
301
|
+
const consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
|
|
302
|
+
const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
|
|
303
|
+
const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
304
|
+
// debug should not be called (because level is info)
|
|
305
|
+
logger.serverLog('debug', 'test-server', 'debug message');
|
|
306
|
+
// info, warn, error should be called
|
|
307
|
+
logger.serverLog('info', 'test-server', 'info message');
|
|
308
|
+
logger.serverLog('warn', 'test-server', 'warn message');
|
|
309
|
+
logger.serverLog('error', 'test-server', 'error message');
|
|
310
|
+
expect(consoleDebugSpy).not.toHaveBeenCalled();
|
|
311
|
+
expect(consoleInfoSpy).toHaveBeenCalled();
|
|
312
|
+
expect(consoleWarnSpy).toHaveBeenCalled();
|
|
313
|
+
expect(consoleErrorSpy).toHaveBeenCalled();
|
|
314
|
+
// Restore console methods
|
|
315
|
+
consoleDebugSpy.mockRestore();
|
|
316
|
+
consoleInfoSpy.mockRestore();
|
|
317
|
+
consoleWarnSpy.mockRestore();
|
|
318
|
+
consoleErrorSpy.mockRestore();
|
|
319
|
+
});
|
|
320
|
+
it('should split multi-line messages in serverLog and log each line individually', () => {
|
|
321
|
+
logger = new Logger('info');
|
|
322
|
+
const consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
|
|
323
|
+
const multiLineMessage = 'line 1\nline 2\r\nline 3\n\n \nline 4 (after empty lines)';
|
|
324
|
+
logger.serverLog('info', 'test-server', multiLineMessage);
|
|
325
|
+
// Should log 4 non-empty lines (empty lines and whitespace-only lines should be skipped)
|
|
326
|
+
expect(consoleInfoSpy).toHaveBeenCalledTimes(4);
|
|
327
|
+
expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('line 1'));
|
|
328
|
+
expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('line 2'));
|
|
329
|
+
expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('line 3'));
|
|
330
|
+
expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('line 4 (after empty lines)'));
|
|
331
|
+
consoleInfoSpy.mockRestore();
|
|
332
|
+
});
|
|
333
|
+
it('should handle single-line messages normally in serverLog', () => {
|
|
334
|
+
logger = new Logger('info');
|
|
335
|
+
const consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
|
|
336
|
+
logger.serverLog('info', 'test-server', 'single line message');
|
|
337
|
+
expect(consoleInfoSpy).toHaveBeenCalledTimes(1);
|
|
338
|
+
expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('single line message'));
|
|
339
|
+
consoleInfoSpy.mockRestore();
|
|
340
|
+
});
|
|
341
|
+
it('should write multi-line messages to file stream individually', () => {
|
|
342
|
+
logger = new Logger('info');
|
|
343
|
+
// Enable dev log to get a file stream
|
|
344
|
+
vi.spyOn(fs, 'mkdirSync').mockImplementation(() => undefined);
|
|
345
|
+
vi.spyOn(fs, 'existsSync').mockImplementation(() => false);
|
|
346
|
+
const writeSpy = vi.fn();
|
|
347
|
+
vi.spyOn(fs, 'createWriteStream').mockImplementation(() => {
|
|
348
|
+
return {
|
|
349
|
+
write: writeSpy,
|
|
350
|
+
end: vi.fn(),
|
|
351
|
+
close: vi.fn(),
|
|
352
|
+
destroyed: false
|
|
353
|
+
};
|
|
354
|
+
});
|
|
355
|
+
logger.enableDevLog();
|
|
356
|
+
const multiLineMessage = 'file line 1\nfile line 2\nfile line 3';
|
|
357
|
+
logger.serverLog('info', 'test-server', multiLineMessage);
|
|
358
|
+
// Should write 3 lines to the file stream
|
|
359
|
+
expect(writeSpy).toHaveBeenCalledTimes(3);
|
|
360
|
+
expect(writeSpy).toHaveBeenCalledWith(expect.stringContaining('file line 1'));
|
|
361
|
+
expect(writeSpy).toHaveBeenCalledWith(expect.stringContaining('file line 2'));
|
|
362
|
+
expect(writeSpy).toHaveBeenCalledWith(expect.stringContaining('file line 3'));
|
|
363
|
+
vi.restoreAllMocks();
|
|
364
|
+
});
|
|
365
|
+
it('should handle logWithColor function with traceId and spanId', () => {
|
|
366
|
+
// Reset logger instance to avoid interference between tests
|
|
367
|
+
const consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
|
|
368
|
+
logWithColor('colored message', 'plain message', {
|
|
369
|
+
pid: 123,
|
|
370
|
+
serverName: 'test-server',
|
|
371
|
+
traceId: '1234567890abcdef1234567890abcdef',
|
|
372
|
+
spanId: 'abcdef1234567890'
|
|
373
|
+
});
|
|
374
|
+
expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('[TID:1234567890abcdef1234567890abcdef]'));
|
|
375
|
+
expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('[SID:abcdef1234567890]'));
|
|
376
|
+
// Restore console methods
|
|
377
|
+
consoleInfoSpy.mockRestore();
|
|
378
|
+
});
|
|
379
|
+
it('should handle logWithColor function without context', () => {
|
|
380
|
+
// Reset logger instance to avoid interference between tests
|
|
381
|
+
const consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
|
|
382
|
+
logWithColor('colored message', 'plain message');
|
|
383
|
+
expect(consoleInfoSpy).toHaveBeenCalled();
|
|
384
|
+
// Restore console methods
|
|
385
|
+
consoleInfoSpy.mockRestore();
|
|
386
|
+
});
|
|
387
|
+
describe('dev log rotation', () => {
|
|
388
|
+
it('should create devLogRotator when enableDevLog is called', () => {
|
|
389
|
+
// Mock fs modules to avoid file system operations
|
|
390
|
+
vi.spyOn(fs, 'mkdirSync').mockImplementation(() => undefined);
|
|
391
|
+
vi.spyOn(fs, 'existsSync').mockImplementation(() => false);
|
|
392
|
+
const createWriteStreamSpy = vi.spyOn(fs, 'createWriteStream').mockImplementation(() => {
|
|
393
|
+
return {
|
|
394
|
+
write: vi.fn(),
|
|
395
|
+
end: vi.fn(),
|
|
396
|
+
close: vi.fn(),
|
|
397
|
+
destroyed: false
|
|
398
|
+
};
|
|
399
|
+
});
|
|
400
|
+
logger = new Logger();
|
|
401
|
+
logger.enableDevLog();
|
|
402
|
+
expect(logger.devLogRotator).toBeDefined();
|
|
403
|
+
createWriteStreamSpy.mockRestore();
|
|
404
|
+
});
|
|
405
|
+
it('should use timestamp-based log file naming for dev logs', () => {
|
|
406
|
+
// Mock fs modules
|
|
407
|
+
vi.spyOn(fs, 'mkdirSync').mockImplementation(() => undefined);
|
|
408
|
+
vi.spyOn(fs, 'existsSync').mockImplementation(() => false);
|
|
409
|
+
let capturedLogPath = '';
|
|
410
|
+
const createWriteStreamSpy = vi.spyOn(fs, 'createWriteStream').mockImplementation((path) => {
|
|
411
|
+
capturedLogPath = path;
|
|
412
|
+
return {
|
|
413
|
+
write: vi.fn(),
|
|
414
|
+
end: vi.fn(),
|
|
415
|
+
close: vi.fn(),
|
|
416
|
+
destroyed: false
|
|
417
|
+
};
|
|
418
|
+
});
|
|
419
|
+
logger = new Logger();
|
|
420
|
+
logger.enableDevLog();
|
|
421
|
+
// Verify the log path uses the new timestamp format: dev-server.YYYYMMDD_HHmmSSZZZ.log
|
|
422
|
+
expect(capturedLogPath).toMatch(/dev-server\.\d{8}_\d{9}\.log$/);
|
|
423
|
+
createWriteStreamSpy.mockRestore();
|
|
424
|
+
});
|
|
425
|
+
it('should accept custom rotator config in enableDevLog', () => {
|
|
426
|
+
// Mock fs modules
|
|
427
|
+
vi.spyOn(fs, 'mkdirSync').mockImplementation(() => undefined);
|
|
428
|
+
vi.spyOn(fs, 'existsSync').mockImplementation(() => false);
|
|
429
|
+
const createWriteStreamSpy = vi.spyOn(fs, 'createWriteStream').mockImplementation(() => {
|
|
430
|
+
return {
|
|
431
|
+
write: vi.fn(),
|
|
432
|
+
end: vi.fn(),
|
|
433
|
+
close: vi.fn(),
|
|
434
|
+
destroyed: false
|
|
435
|
+
};
|
|
436
|
+
});
|
|
437
|
+
logger = new Logger();
|
|
438
|
+
logger.enableDevLog({ rotationAge: '14d' });
|
|
439
|
+
expect(logger.devLogRotator).toBeDefined();
|
|
440
|
+
createWriteStreamSpy.mockRestore();
|
|
441
|
+
});
|
|
442
|
+
it('should not create multiple log streams when enableDevLog is called multiple times', () => {
|
|
443
|
+
// Mock fs modules
|
|
444
|
+
vi.spyOn(fs, 'mkdirSync').mockImplementation(() => undefined);
|
|
445
|
+
vi.spyOn(fs, 'existsSync').mockImplementation(() => false);
|
|
446
|
+
const createWriteStreamSpy = vi.spyOn(fs, 'createWriteStream').mockImplementation(() => {
|
|
447
|
+
return {
|
|
448
|
+
write: vi.fn(),
|
|
449
|
+
end: vi.fn(),
|
|
450
|
+
close: vi.fn(),
|
|
451
|
+
destroyed: false
|
|
452
|
+
};
|
|
453
|
+
});
|
|
454
|
+
logger = new Logger();
|
|
455
|
+
logger.enableDevLog();
|
|
456
|
+
logger.enableDevLog(); // Call again
|
|
457
|
+
// createWriteStream should only be called once
|
|
458
|
+
expect(createWriteStreamSpy).toHaveBeenCalledTimes(1);
|
|
459
|
+
createWriteStreamSpy.mockRestore();
|
|
460
|
+
});
|
|
461
|
+
});
|
|
462
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-error-handler.test.d.ts","sourceRoot":"","sources":["../../../../../tests/unit/utils/mcp-error-handler.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { MCPErrorHandler, MCPHubLiteErrorMap, MCPErrorsMiddleware } from '../../../src/utils/mcp-error-handler.js';
|
|
3
|
+
describe('MCPErrorHandler', () => {
|
|
4
|
+
describe('toMCPError', () => {
|
|
5
|
+
it('should convert Error instance to MCPError', () => {
|
|
6
|
+
const error = new Error('Test error');
|
|
7
|
+
error.stack = 'Error: Test error\n at test (test.js:1:1)';
|
|
8
|
+
error.name = 'TestError';
|
|
9
|
+
const mcpError = MCPErrorHandler.toMCPError(error);
|
|
10
|
+
expect(mcpError).toMatchObject({
|
|
11
|
+
code: -32001,
|
|
12
|
+
message: 'Test error',
|
|
13
|
+
data: {
|
|
14
|
+
originalError: 'Test error',
|
|
15
|
+
timestamp: expect.any(String)
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
expect(mcpError['x-mcp']).toMatchObject({
|
|
19
|
+
details: {
|
|
20
|
+
stack: 'Error: Test error\n at test (test.js:1:1)',
|
|
21
|
+
name: 'TestError'
|
|
22
|
+
},
|
|
23
|
+
suggestedActions: ['Check server status', 'Retry request']
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
it('should convert CMDError to MCPError with proper mapping', () => {
|
|
27
|
+
const cmdError = {
|
|
28
|
+
code: 6001,
|
|
29
|
+
message: 'Gateway internal error',
|
|
30
|
+
data: null,
|
|
31
|
+
timestamp: '2025-12-01T10:30:00.000Z',
|
|
32
|
+
requestId: 'req-123',
|
|
33
|
+
error: {
|
|
34
|
+
category: 'SYSTEM',
|
|
35
|
+
severity: 'ERROR',
|
|
36
|
+
context: { serverId: 'server-1' }
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const mcpError = MCPErrorHandler.toMCPError(cmdError);
|
|
40
|
+
expect(mcpError.code).toBe(-32001); // mapped from 6001
|
|
41
|
+
expect(mcpError.message).toBe('Gateway internal error');
|
|
42
|
+
expect(mcpError.data).toBeNull();
|
|
43
|
+
expect(mcpError['x-mcp']).toMatchObject({
|
|
44
|
+
details: { serverId: 'server-1' },
|
|
45
|
+
suggestedActions: ['Refer to error details', 'Retry or contact administrator']
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
it('should handle unknown error type', () => {
|
|
49
|
+
// Test with a string that is not an Error or CMDError
|
|
50
|
+
const unknownError = 'unknown error string';
|
|
51
|
+
const mcpError = MCPErrorHandler.toMCPError(unknownError);
|
|
52
|
+
expect(mcpError).toMatchObject({
|
|
53
|
+
code: -32001,
|
|
54
|
+
message: 'Unknown error'
|
|
55
|
+
});
|
|
56
|
+
expect(mcpError['x-mcp']).toMatchObject({
|
|
57
|
+
suggestedActions: ['Retry request']
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
describe('mapCMDToMCPErrorCode', () => {
|
|
62
|
+
it('should map system errors (1000-1999) to -32001', () => {
|
|
63
|
+
expect(MCPErrorHandler['mapCMDToMCPErrorCode'](1001)).toBe(-32001);
|
|
64
|
+
expect(MCPErrorHandler['mapCMDToMCPErrorCode'](1500)).toBe(-32001);
|
|
65
|
+
expect(MCPErrorHandler['mapCMDToMCPErrorCode'](1999)).toBe(-32001);
|
|
66
|
+
});
|
|
67
|
+
it('should map security errors (2000-2999) to -32806', () => {
|
|
68
|
+
expect(MCPErrorHandler['mapCMDToMCPErrorCode'](2001)).toBe(-32806);
|
|
69
|
+
expect(MCPErrorHandler['mapCMDToMCPErrorCode'](2500)).toBe(-32806);
|
|
70
|
+
expect(MCPErrorHandler['mapCMDToMCPErrorCode'](2999)).toBe(-32806);
|
|
71
|
+
});
|
|
72
|
+
it('should map business errors (3000-3999) to -32602', () => {
|
|
73
|
+
expect(MCPErrorHandler['mapCMDToMCPErrorCode'](3001)).toBe(-32602);
|
|
74
|
+
expect(MCPErrorHandler['mapCMDToMCPErrorCode'](3500)).toBe(-32602);
|
|
75
|
+
expect(MCPErrorHandler['mapCMDToMCPErrorCode'](3999)).toBe(-32602);
|
|
76
|
+
});
|
|
77
|
+
it('should map MCP Hub Lite gateway errors (6000-6999)', () => {
|
|
78
|
+
expect(MCPErrorHandler['mapCMDToMCPErrorCode'](6001)).toBe(-32001);
|
|
79
|
+
expect(MCPErrorHandler['mapCMDToMCPErrorCode'](6002)).toBe(-32002);
|
|
80
|
+
expect(MCPErrorHandler['mapCMDToMCPErrorCode'](6003)).toBe(-32801);
|
|
81
|
+
expect(MCPErrorHandler['mapCMDToMCPErrorCode'](6004)).toBe(-32802);
|
|
82
|
+
expect(MCPErrorHandler['mapCMDToMCPErrorCode'](6005)).toBe(-32001); // default for unmapped codes
|
|
83
|
+
});
|
|
84
|
+
it('should return default -32001 for unknown error codes', () => {
|
|
85
|
+
expect(MCPErrorHandler['mapCMDToMCPErrorCode'](9999)).toBe(-32001);
|
|
86
|
+
expect(MCPErrorHandler['mapCMDToMCPErrorCode'](0)).toBe(-32001);
|
|
87
|
+
expect(MCPErrorHandler['mapCMDToMCPErrorCode'](-1)).toBe(-32001);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
describe('MCPHubLiteErrorMap', () => {
|
|
91
|
+
it('should have correct error code mappings', () => {
|
|
92
|
+
expect(MCPHubLiteErrorMap[6001]).toBe(-32001);
|
|
93
|
+
expect(MCPHubLiteErrorMap[6002]).toBe(-32002);
|
|
94
|
+
expect(MCPHubLiteErrorMap[6003]).toBe(-32801);
|
|
95
|
+
expect(MCPHubLiteErrorMap[6004]).toBe(-32802);
|
|
96
|
+
expect(MCPHubLiteErrorMap[6005]).toBe(-32803);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
describe('MCPErrorsMiddleware', () => {
|
|
100
|
+
it('should handle backend MCP errors and convert non-standard errors', () => {
|
|
101
|
+
const response = {
|
|
102
|
+
jsonrpc: '2.0',
|
|
103
|
+
id: 'test-id',
|
|
104
|
+
error: new Error('Backend error')
|
|
105
|
+
};
|
|
106
|
+
const result = MCPErrorsMiddleware.handleBackendMCPErrors(response);
|
|
107
|
+
expect(result.jsonrpc).toBe('2.0');
|
|
108
|
+
expect(result.id).toBe('test-id');
|
|
109
|
+
expect(result.error).toBeDefined();
|
|
110
|
+
expect(result.error.code).toBe(-32001);
|
|
111
|
+
expect(result.error.message).toBe('Backend error');
|
|
112
|
+
});
|
|
113
|
+
it('should return standard MCP errors unchanged', () => {
|
|
114
|
+
const standardMCPError = {
|
|
115
|
+
code: -32801,
|
|
116
|
+
message: 'Tool not found',
|
|
117
|
+
data: { toolName: 'non-existent-tool' }
|
|
118
|
+
};
|
|
119
|
+
const response = {
|
|
120
|
+
jsonrpc: '2.0',
|
|
121
|
+
id: 'test-id',
|
|
122
|
+
error: standardMCPError
|
|
123
|
+
};
|
|
124
|
+
const result = MCPErrorsMiddleware.handleBackendMCPErrors(response);
|
|
125
|
+
expect(result).toBe(response); // should be the same object
|
|
126
|
+
});
|
|
127
|
+
it('should return response unchanged when no error', () => {
|
|
128
|
+
const response = {
|
|
129
|
+
jsonrpc: '2.0',
|
|
130
|
+
id: 'test-id',
|
|
131
|
+
result: { success: true }
|
|
132
|
+
};
|
|
133
|
+
const result = MCPErrorsMiddleware.handleBackendMCPErrors(response);
|
|
134
|
+
expect(result).toBe(response); // should be the same object
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
describe('isStandardMCPError', () => {
|
|
138
|
+
it('should identify standard MCP errors', () => {
|
|
139
|
+
const standardError = {
|
|
140
|
+
code: -32801,
|
|
141
|
+
message: 'Tool not found'
|
|
142
|
+
};
|
|
143
|
+
const isStandard = MCPErrorsMiddleware['isStandardMCPError'](standardError);
|
|
144
|
+
expect(isStandard).toBe(true);
|
|
145
|
+
});
|
|
146
|
+
it('should reject non-standard errors', () => {
|
|
147
|
+
const nonStandardError = {
|
|
148
|
+
code: 'invalid-code', // not a number
|
|
149
|
+
message: 'Invalid error'
|
|
150
|
+
};
|
|
151
|
+
const isStandard = MCPErrorsMiddleware['isStandardMCPError'](nonStandardError);
|
|
152
|
+
expect(isStandard).toBe(false);
|
|
153
|
+
});
|
|
154
|
+
it('should reject errors without message', () => {
|
|
155
|
+
const invalidError = {
|
|
156
|
+
code: -32801
|
|
157
|
+
// missing message
|
|
158
|
+
};
|
|
159
|
+
const isStandard = MCPErrorsMiddleware['isStandardMCPError'](invalidError);
|
|
160
|
+
expect(isStandard).toBe(false);
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-context.test.d.ts","sourceRoot":"","sources":["../../../../../tests/unit/utils/request-context.test.ts"],"names":[],"mappings":""}
|