mcp-server-framework 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 +174 -0
- package/LICENSE-GPL.md +219 -0
- package/LICENSE.md +187 -0
- package/README.md +439 -0
- package/build/config/config-cache.d.ts +120 -0
- package/build/config/config-cache.d.ts.map +1 -0
- package/build/config/config-cache.js +310 -0
- package/build/config/config-cache.js.map +1 -0
- package/build/config/env.d.ts +476 -0
- package/build/config/env.d.ts.map +1 -0
- package/build/config/env.js +441 -0
- package/build/config/env.js.map +1 -0
- package/build/config/extensions.d.ts +107 -0
- package/build/config/extensions.d.ts.map +1 -0
- package/build/config/extensions.js +152 -0
- package/build/config/extensions.js.map +1 -0
- package/build/config/file/index.d.ts +8 -0
- package/build/config/file/index.d.ts.map +1 -0
- package/build/config/file/index.js +10 -0
- package/build/config/file/index.js.map +1 -0
- package/build/config/file/loader.d.ts +31 -0
- package/build/config/file/loader.d.ts.map +1 -0
- package/build/config/file/loader.js +313 -0
- package/build/config/file/loader.js.map +1 -0
- package/build/config/file/schema.d.ts +583 -0
- package/build/config/file/schema.d.ts.map +1 -0
- package/build/config/file/schema.js +388 -0
- package/build/config/file/schema.js.map +1 -0
- package/build/config/index.d.ts +15 -0
- package/build/config/index.d.ts.map +1 -0
- package/build/config/index.js +27 -0
- package/build/config/index.js.map +1 -0
- package/build/config/startup-warnings.d.ts +46 -0
- package/build/config/startup-warnings.d.ts.map +1 -0
- package/build/config/startup-warnings.js +61 -0
- package/build/config/startup-warnings.js.map +1 -0
- package/build/connection/connection-state.d.ts +196 -0
- package/build/connection/connection-state.d.ts.map +1 -0
- package/build/connection/connection-state.js +426 -0
- package/build/connection/connection-state.js.map +1 -0
- package/build/connection/core/base.d.ts +43 -0
- package/build/connection/core/base.d.ts.map +1 -0
- package/build/connection/core/base.js +82 -0
- package/build/connection/core/base.js.map +1 -0
- package/build/connection/core/constants.d.ts +121 -0
- package/build/connection/core/constants.d.ts.map +1 -0
- package/build/connection/core/constants.js +151 -0
- package/build/connection/core/constants.js.map +1 -0
- package/build/connection/core/index.d.ts +13 -0
- package/build/connection/core/index.d.ts.map +1 -0
- package/build/connection/core/index.js +14 -0
- package/build/connection/core/index.js.map +1 -0
- package/build/connection/core/types.d.ts +102 -0
- package/build/connection/core/types.d.ts.map +1 -0
- package/build/connection/core/types.js +31 -0
- package/build/connection/core/types.js.map +1 -0
- package/build/connection/index.d.ts +19 -0
- package/build/connection/index.d.ts.map +1 -0
- package/build/connection/index.js +22 -0
- package/build/connection/index.js.map +1 -0
- package/build/connection/types.d.ts +125 -0
- package/build/connection/types.d.ts.map +1 -0
- package/build/connection/types.js +39 -0
- package/build/connection/types.js.map +1 -0
- package/build/errors/categories/auth.d.ts +59 -0
- package/build/errors/categories/auth.d.ts.map +1 -0
- package/build/errors/categories/auth.js +111 -0
- package/build/errors/categories/auth.js.map +1 -0
- package/build/errors/categories/connection.d.ts +70 -0
- package/build/errors/categories/connection.d.ts.map +1 -0
- package/build/errors/categories/connection.js +120 -0
- package/build/errors/categories/connection.js.map +1 -0
- package/build/errors/categories/index.d.ts +14 -0
- package/build/errors/categories/index.d.ts.map +1 -0
- package/build/errors/categories/index.js +20 -0
- package/build/errors/categories/index.js.map +1 -0
- package/build/errors/categories/operation.d.ts +83 -0
- package/build/errors/categories/operation.d.ts.map +1 -0
- package/build/errors/categories/operation.js +149 -0
- package/build/errors/categories/operation.js.map +1 -0
- package/build/errors/categories/protocol.d.ts +68 -0
- package/build/errors/categories/protocol.d.ts.map +1 -0
- package/build/errors/categories/protocol.js +135 -0
- package/build/errors/categories/protocol.js.map +1 -0
- package/build/errors/categories/session.d.ts +50 -0
- package/build/errors/categories/session.d.ts.map +1 -0
- package/build/errors/categories/session.js +97 -0
- package/build/errors/categories/session.js.map +1 -0
- package/build/errors/categories/system.d.ts +95 -0
- package/build/errors/categories/system.d.ts.map +1 -0
- package/build/errors/categories/system.js +190 -0
- package/build/errors/categories/system.js.map +1 -0
- package/build/errors/categories/transport.d.ts +70 -0
- package/build/errors/categories/transport.d.ts.map +1 -0
- package/build/errors/categories/transport.js +148 -0
- package/build/errors/categories/transport.js.map +1 -0
- package/build/errors/categories/validation.d.ts +140 -0
- package/build/errors/categories/validation.d.ts.map +1 -0
- package/build/errors/categories/validation.js +311 -0
- package/build/errors/categories/validation.js.map +1 -0
- package/build/errors/core/base.d.ts +103 -0
- package/build/errors/core/base.d.ts.map +1 -0
- package/build/errors/core/base.js +219 -0
- package/build/errors/core/base.js.map +1 -0
- package/build/errors/core/constants.d.ts +40 -0
- package/build/errors/core/constants.d.ts.map +1 -0
- package/build/errors/core/constants.js +49 -0
- package/build/errors/core/constants.js.map +1 -0
- package/build/errors/core/error-codes.d.ts +72 -0
- package/build/errors/core/error-codes.d.ts.map +1 -0
- package/build/errors/core/error-codes.js +88 -0
- package/build/errors/core/error-codes.js.map +1 -0
- package/build/errors/core/http.d.ts +69 -0
- package/build/errors/core/http.d.ts.map +1 -0
- package/build/errors/core/http.js +106 -0
- package/build/errors/core/http.js.map +1 -0
- package/build/errors/core/index.d.ts +23 -0
- package/build/errors/core/index.d.ts.map +1 -0
- package/build/errors/core/index.js +41 -0
- package/build/errors/core/index.js.map +1 -0
- package/build/errors/core/json-rpc.d.ts +69 -0
- package/build/errors/core/json-rpc.d.ts.map +1 -0
- package/build/errors/core/json-rpc.js +79 -0
- package/build/errors/core/json-rpc.js.map +1 -0
- package/build/errors/core/messages.d.ts +51 -0
- package/build/errors/core/messages.d.ts.map +1 -0
- package/build/errors/core/messages.js +59 -0
- package/build/errors/core/messages.js.map +1 -0
- package/build/errors/core/types.d.ts +80 -0
- package/build/errors/core/types.d.ts.map +1 -0
- package/build/errors/core/types.js +10 -0
- package/build/errors/core/types.js.map +1 -0
- package/build/errors/factory.d.ts +199 -0
- package/build/errors/factory.d.ts.map +1 -0
- package/build/errors/factory.js +244 -0
- package/build/errors/factory.js.map +1 -0
- package/build/errors/index.d.ts +35 -0
- package/build/errors/index.d.ts.map +1 -0
- package/build/errors/index.js +67 -0
- package/build/errors/index.js.map +1 -0
- package/build/index.d.ts +93 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +107 -0
- package/build/index.js.map +1 -0
- package/build/logger/core/constants.d.ts +143 -0
- package/build/logger/core/constants.d.ts.map +1 -0
- package/build/logger/core/constants.js +206 -0
- package/build/logger/core/constants.js.map +1 -0
- package/build/logger/core/context.d.ts +170 -0
- package/build/logger/core/context.d.ts.map +1 -0
- package/build/logger/core/context.js +237 -0
- package/build/logger/core/context.js.map +1 -0
- package/build/logger/core/errors.d.ts +101 -0
- package/build/logger/core/errors.d.ts.map +1 -0
- package/build/logger/core/errors.js +128 -0
- package/build/logger/core/errors.js.map +1 -0
- package/build/logger/core/format.d.ts +40 -0
- package/build/logger/core/format.d.ts.map +1 -0
- package/build/logger/core/format.js +47 -0
- package/build/logger/core/format.js.map +1 -0
- package/build/logger/core/index.d.ts +19 -0
- package/build/logger/core/index.d.ts.map +1 -0
- package/build/logger/core/index.js +47 -0
- package/build/logger/core/index.js.map +1 -0
- package/build/logger/core/trace-context.d.ts +51 -0
- package/build/logger/core/trace-context.d.ts.map +1 -0
- package/build/logger/core/trace-context.js +42 -0
- package/build/logger/core/trace-context.js.map +1 -0
- package/build/logger/core/types.d.ts +233 -0
- package/build/logger/core/types.d.ts.map +1 -0
- package/build/logger/core/types.js +10 -0
- package/build/logger/core/types.js.map +1 -0
- package/build/logger/factory.d.ts +150 -0
- package/build/logger/factory.d.ts.map +1 -0
- package/build/logger/factory.js +236 -0
- package/build/logger/factory.js.map +1 -0
- package/build/logger/formatters/index.d.ts +12 -0
- package/build/logger/formatters/index.d.ts.map +1 -0
- package/build/logger/formatters/index.js +15 -0
- package/build/logger/formatters/index.js.map +1 -0
- package/build/logger/formatters/json-formatter.d.ts +54 -0
- package/build/logger/formatters/json-formatter.d.ts.map +1 -0
- package/build/logger/formatters/json-formatter.js +80 -0
- package/build/logger/formatters/json-formatter.js.map +1 -0
- package/build/logger/formatters/schema.d.ts +230 -0
- package/build/logger/formatters/schema.d.ts.map +1 -0
- package/build/logger/formatters/schema.js +278 -0
- package/build/logger/formatters/schema.js.map +1 -0
- package/build/logger/formatters/text-formatter.d.ts +50 -0
- package/build/logger/formatters/text-formatter.d.ts.map +1 -0
- package/build/logger/formatters/text-formatter.js +93 -0
- package/build/logger/formatters/text-formatter.js.map +1 -0
- package/build/logger/index.d.ts +39 -0
- package/build/logger/index.d.ts.map +1 -0
- package/build/logger/index.js +43 -0
- package/build/logger/index.js.map +1 -0
- package/build/logger/logger.d.ts +278 -0
- package/build/logger/logger.d.ts.map +1 -0
- package/build/logger/logger.js +459 -0
- package/build/logger/logger.js.map +1 -0
- package/build/logger/mcp-logger.d.ts +177 -0
- package/build/logger/mcp-logger.d.ts.map +1 -0
- package/build/logger/mcp-logger.js +294 -0
- package/build/logger/mcp-logger.js.map +1 -0
- package/build/logger/scrubbing/index.d.ts +14 -0
- package/build/logger/scrubbing/index.d.ts.map +1 -0
- package/build/logger/scrubbing/index.js +16 -0
- package/build/logger/scrubbing/index.js.map +1 -0
- package/build/logger/scrubbing/injection-guard.d.ts +69 -0
- package/build/logger/scrubbing/injection-guard.d.ts.map +1 -0
- package/build/logger/scrubbing/injection-guard.js +102 -0
- package/build/logger/scrubbing/injection-guard.js.map +1 -0
- package/build/logger/scrubbing/secret-scrubber.d.ts +72 -0
- package/build/logger/scrubbing/secret-scrubber.d.ts.map +1 -0
- package/build/logger/scrubbing/secret-scrubber.js +177 -0
- package/build/logger/scrubbing/secret-scrubber.js.map +1 -0
- package/build/logger/writers/base-writer.d.ts +45 -0
- package/build/logger/writers/base-writer.d.ts.map +1 -0
- package/build/logger/writers/base-writer.js +41 -0
- package/build/logger/writers/base-writer.js.map +1 -0
- package/build/logger/writers/composite-writer.d.ts +83 -0
- package/build/logger/writers/composite-writer.d.ts.map +1 -0
- package/build/logger/writers/composite-writer.js +121 -0
- package/build/logger/writers/composite-writer.js.map +1 -0
- package/build/logger/writers/console-writer.d.ts +59 -0
- package/build/logger/writers/console-writer.d.ts.map +1 -0
- package/build/logger/writers/console-writer.js +73 -0
- package/build/logger/writers/console-writer.js.map +1 -0
- package/build/logger/writers/file-writer.d.ts +160 -0
- package/build/logger/writers/file-writer.d.ts.map +1 -0
- package/build/logger/writers/file-writer.js +345 -0
- package/build/logger/writers/file-writer.js.map +1 -0
- package/build/logger/writers/index.d.ts +15 -0
- package/build/logger/writers/index.d.ts.map +1 -0
- package/build/logger/writers/index.js +19 -0
- package/build/logger/writers/index.js.map +1 -0
- package/build/mcp/capabilities/apps/define-app.d.ts +68 -0
- package/build/mcp/capabilities/apps/define-app.d.ts.map +1 -0
- package/build/mcp/capabilities/apps/define-app.js +127 -0
- package/build/mcp/capabilities/apps/define-app.js.map +1 -0
- package/build/mcp/capabilities/apps/index.d.ts +10 -0
- package/build/mcp/capabilities/apps/index.d.ts.map +1 -0
- package/build/mcp/capabilities/apps/index.js +10 -0
- package/build/mcp/capabilities/apps/index.js.map +1 -0
- package/build/mcp/capabilities/capabilities.d.ts +24 -0
- package/build/mcp/capabilities/capabilities.d.ts.map +1 -0
- package/build/mcp/capabilities/capabilities.js +50 -0
- package/build/mcp/capabilities/capabilities.js.map +1 -0
- package/build/mcp/capabilities/index.d.ts +17 -0
- package/build/mcp/capabilities/index.d.ts.map +1 -0
- package/build/mcp/capabilities/index.js +20 -0
- package/build/mcp/capabilities/index.js.map +1 -0
- package/build/mcp/capabilities/prompts/define-prompt.d.ts +95 -0
- package/build/mcp/capabilities/prompts/define-prompt.d.ts.map +1 -0
- package/build/mcp/capabilities/prompts/define-prompt.js +109 -0
- package/build/mcp/capabilities/prompts/define-prompt.js.map +1 -0
- package/build/mcp/capabilities/prompts/index.d.ts +10 -0
- package/build/mcp/capabilities/prompts/index.d.ts.map +1 -0
- package/build/mcp/capabilities/prompts/index.js +10 -0
- package/build/mcp/capabilities/prompts/index.js.map +1 -0
- package/build/mcp/capabilities/registry/base-registry.d.ts +95 -0
- package/build/mcp/capabilities/registry/base-registry.d.ts.map +1 -0
- package/build/mcp/capabilities/registry/base-registry.js +149 -0
- package/build/mcp/capabilities/registry/base-registry.js.map +1 -0
- package/build/mcp/capabilities/registry/index.d.ts +16 -0
- package/build/mcp/capabilities/registry/index.d.ts.map +1 -0
- package/build/mcp/capabilities/registry/index.js +34 -0
- package/build/mcp/capabilities/registry/index.js.map +1 -0
- package/build/mcp/capabilities/registry/prompt-registry.d.ts +116 -0
- package/build/mcp/capabilities/registry/prompt-registry.d.ts.map +1 -0
- package/build/mcp/capabilities/registry/prompt-registry.js +232 -0
- package/build/mcp/capabilities/registry/prompt-registry.js.map +1 -0
- package/build/mcp/capabilities/registry/reset.d.ts +30 -0
- package/build/mcp/capabilities/registry/reset.d.ts.map +1 -0
- package/build/mcp/capabilities/registry/reset.js +48 -0
- package/build/mcp/capabilities/registry/reset.js.map +1 -0
- package/build/mcp/capabilities/registry/resource-registry.d.ts +152 -0
- package/build/mcp/capabilities/registry/resource-registry.d.ts.map +1 -0
- package/build/mcp/capabilities/registry/resource-registry.js +430 -0
- package/build/mcp/capabilities/registry/resource-registry.js.map +1 -0
- package/build/mcp/capabilities/registry/scope-enforcement.d.ts +48 -0
- package/build/mcp/capabilities/registry/scope-enforcement.d.ts.map +1 -0
- package/build/mcp/capabilities/registry/scope-enforcement.js +62 -0
- package/build/mcp/capabilities/registry/scope-enforcement.js.map +1 -0
- package/build/mcp/capabilities/registry/task-tool-registry.d.ts +96 -0
- package/build/mcp/capabilities/registry/task-tool-registry.d.ts.map +1 -0
- package/build/mcp/capabilities/registry/task-tool-registry.js +190 -0
- package/build/mcp/capabilities/registry/task-tool-registry.js.map +1 -0
- package/build/mcp/capabilities/registry/tool-registry.d.ts +100 -0
- package/build/mcp/capabilities/registry/tool-registry.d.ts.map +1 -0
- package/build/mcp/capabilities/registry/tool-registry.js +242 -0
- package/build/mcp/capabilities/registry/tool-registry.js.map +1 -0
- package/build/mcp/capabilities/resources/define-resource.d.ts +103 -0
- package/build/mcp/capabilities/resources/define-resource.d.ts.map +1 -0
- package/build/mcp/capabilities/resources/define-resource.js +137 -0
- package/build/mcp/capabilities/resources/define-resource.js.map +1 -0
- package/build/mcp/capabilities/resources/index.d.ts +10 -0
- package/build/mcp/capabilities/resources/index.d.ts.map +1 -0
- package/build/mcp/capabilities/resources/index.js +10 -0
- package/build/mcp/capabilities/resources/index.js.map +1 -0
- package/build/mcp/capabilities/server-capabilities.d.ts +33 -0
- package/build/mcp/capabilities/server-capabilities.d.ts.map +1 -0
- package/build/mcp/capabilities/server-capabilities.js +16 -0
- package/build/mcp/capabilities/server-capabilities.js.map +1 -0
- package/build/mcp/capabilities/tasks/define-task.d.ts +75 -0
- package/build/mcp/capabilities/tasks/define-task.d.ts.map +1 -0
- package/build/mcp/capabilities/tasks/define-task.js +93 -0
- package/build/mcp/capabilities/tasks/define-task.js.map +1 -0
- package/build/mcp/capabilities/tasks/index.d.ts +11 -0
- package/build/mcp/capabilities/tasks/index.d.ts.map +1 -0
- package/build/mcp/capabilities/tasks/index.js +11 -0
- package/build/mcp/capabilities/tasks/index.js.map +1 -0
- package/build/mcp/capabilities/tools/define-tool.d.ts +62 -0
- package/build/mcp/capabilities/tools/define-tool.d.ts.map +1 -0
- package/build/mcp/capabilities/tools/define-tool.js +73 -0
- package/build/mcp/capabilities/tools/define-tool.js.map +1 -0
- package/build/mcp/capabilities/tools/index.d.ts +10 -0
- package/build/mcp/capabilities/tools/index.d.ts.map +1 -0
- package/build/mcp/capabilities/tools/index.js +10 -0
- package/build/mcp/capabilities/tools/index.js.map +1 -0
- package/build/mcp/handlers/index.d.ts +19 -0
- package/build/mcp/handlers/index.d.ts.map +1 -0
- package/build/mcp/handlers/index.js +26 -0
- package/build/mcp/handlers/index.js.map +1 -0
- package/build/mcp/handlers/ping.d.ts +27 -0
- package/build/mcp/handlers/ping.d.ts.map +1 -0
- package/build/mcp/handlers/ping.js +61 -0
- package/build/mcp/handlers/ping.js.map +1 -0
- package/build/mcp/handlers/progress.d.ts +41 -0
- package/build/mcp/handlers/progress.d.ts.map +1 -0
- package/build/mcp/handlers/progress.js +79 -0
- package/build/mcp/handlers/progress.js.map +1 -0
- package/build/mcp/index.d.ts +28 -0
- package/build/mcp/index.d.ts.map +1 -0
- package/build/mcp/index.js +34 -0
- package/build/mcp/index.js.map +1 -0
- package/build/mcp/responses/helpers.d.ts +146 -0
- package/build/mcp/responses/helpers.d.ts.map +1 -0
- package/build/mcp/responses/helpers.js +197 -0
- package/build/mcp/responses/helpers.js.map +1 -0
- package/build/mcp/responses/index.d.ts +9 -0
- package/build/mcp/responses/index.d.ts.map +1 -0
- package/build/mcp/responses/index.js +12 -0
- package/build/mcp/responses/index.js.map +1 -0
- package/build/mcp/types/context.d.ts +371 -0
- package/build/mcp/types/context.d.ts.map +1 -0
- package/build/mcp/types/context.js +17 -0
- package/build/mcp/types/context.js.map +1 -0
- package/build/mcp/types/definition.d.ts +727 -0
- package/build/mcp/types/definition.d.ts.map +1 -0
- package/build/mcp/types/definition.js +29 -0
- package/build/mcp/types/definition.js.map +1 -0
- package/build/mcp/types/handler.d.ts +58 -0
- package/build/mcp/types/handler.d.ts.map +1 -0
- package/build/mcp/types/handler.js +10 -0
- package/build/mcp/types/handler.js.map +1 -0
- package/build/mcp/types/index.d.ts +21 -0
- package/build/mcp/types/index.d.ts.map +1 -0
- package/build/mcp/types/index.js +18 -0
- package/build/mcp/types/index.js.map +1 -0
- package/build/mcp/types/response.d.ts +79 -0
- package/build/mcp/types/response.d.ts.map +1 -0
- package/build/mcp/types/response.js +10 -0
- package/build/mcp/types/response.js.map +1 -0
- package/build/server/auth/auth-context.d.ts +52 -0
- package/build/server/auth/auth-context.d.ts.map +1 -0
- package/build/server/auth/auth-context.js +45 -0
- package/build/server/auth/auth-context.js.map +1 -0
- package/build/server/auth/guards.d.ts +72 -0
- package/build/server/auth/guards.d.ts.map +1 -0
- package/build/server/auth/guards.js +103 -0
- package/build/server/auth/guards.js.map +1 -0
- package/build/server/auth/index.d.ts +21 -0
- package/build/server/auth/index.d.ts.map +1 -0
- package/build/server/auth/index.js +20 -0
- package/build/server/auth/index.js.map +1 -0
- package/build/server/auth/oidc-discovery.d.ts +68 -0
- package/build/server/auth/oidc-discovery.d.ts.map +1 -0
- package/build/server/auth/oidc-discovery.js +234 -0
- package/build/server/auth/oidc-discovery.js.map +1 -0
- package/build/server/auth/oidc-provider.d.ts +96 -0
- package/build/server/auth/oidc-provider.d.ts.map +1 -0
- package/build/server/auth/oidc-provider.js +126 -0
- package/build/server/auth/oidc-provider.js.map +1 -0
- package/build/server/auth/types.d.ts +204 -0
- package/build/server/auth/types.d.ts.map +1 -0
- package/build/server/auth/types.js +29 -0
- package/build/server/auth/types.js.map +1 -0
- package/build/server/auth/upstream-provider.d.ts +161 -0
- package/build/server/auth/upstream-provider.d.ts.map +1 -0
- package/build/server/auth/upstream-provider.js +411 -0
- package/build/server/auth/upstream-provider.js.map +1 -0
- package/build/server/builder/constants.d.ts +45 -0
- package/build/server/builder/constants.d.ts.map +1 -0
- package/build/server/builder/constants.js +54 -0
- package/build/server/builder/constants.js.map +1 -0
- package/build/server/builder/index.d.ts +24 -0
- package/build/server/builder/index.d.ts.map +1 -0
- package/build/server/builder/index.js +25 -0
- package/build/server/builder/index.js.map +1 -0
- package/build/server/builder/primitive-collector.d.ts +24 -0
- package/build/server/builder/primitive-collector.d.ts.map +1 -0
- package/build/server/builder/primitive-collector.js +89 -0
- package/build/server/builder/primitive-collector.js.map +1 -0
- package/build/server/builder/server-builder.d.ts +53 -0
- package/build/server/builder/server-builder.d.ts.map +1 -0
- package/build/server/builder/server-builder.js +132 -0
- package/build/server/builder/server-builder.js.map +1 -0
- package/build/server/builder/types.d.ts +93 -0
- package/build/server/builder/types.d.ts.map +1 -0
- package/build/server/builder/types.js +25 -0
- package/build/server/builder/types.js.map +1 -0
- package/build/server/builder/validation.d.ts +36 -0
- package/build/server/builder/validation.d.ts.map +1 -0
- package/build/server/builder/validation.js +44 -0
- package/build/server/builder/validation.js.map +1 -0
- package/build/server/create-server.d.ts +57 -0
- package/build/server/create-server.d.ts.map +1 -0
- package/build/server/create-server.js +104 -0
- package/build/server/create-server.js.map +1 -0
- package/build/server/http/express-app.d.ts +103 -0
- package/build/server/http/express-app.d.ts.map +1 -0
- package/build/server/http/express-app.js +391 -0
- package/build/server/http/express-app.js.map +1 -0
- package/build/server/http/http-server.d.ts +67 -0
- package/build/server/http/http-server.d.ts.map +1 -0
- package/build/server/http/http-server.js +188 -0
- package/build/server/http/http-server.js.map +1 -0
- package/build/server/http/http-transport.d.ts +33 -0
- package/build/server/http/http-transport.d.ts.map +1 -0
- package/build/server/http/http-transport.js +84 -0
- package/build/server/http/http-transport.js.map +1 -0
- package/build/server/http/index.d.ts +15 -0
- package/build/server/http/index.d.ts.map +1 -0
- package/build/server/http/index.js +11 -0
- package/build/server/http/index.js.map +1 -0
- package/build/server/index.d.ts +25 -0
- package/build/server/index.d.ts.map +1 -0
- package/build/server/index.js +41 -0
- package/build/server/index.js.map +1 -0
- package/build/server/lifecycle.d.ts +114 -0
- package/build/server/lifecycle.d.ts.map +1 -0
- package/build/server/lifecycle.js +30 -0
- package/build/server/lifecycle.js.map +1 -0
- package/build/server/middleware/bearer-auth.d.ts +43 -0
- package/build/server/middleware/bearer-auth.d.ts.map +1 -0
- package/build/server/middleware/bearer-auth.js +75 -0
- package/build/server/middleware/bearer-auth.js.map +1 -0
- package/build/server/middleware/custom-header-auth.d.ts +40 -0
- package/build/server/middleware/custom-header-auth.d.ts.map +1 -0
- package/build/server/middleware/custom-header-auth.js +90 -0
- package/build/server/middleware/custom-header-auth.js.map +1 -0
- package/build/server/middleware/dns-rebinding.d.ts +25 -0
- package/build/server/middleware/dns-rebinding.d.ts.map +1 -0
- package/build/server/middleware/dns-rebinding.js +94 -0
- package/build/server/middleware/dns-rebinding.js.map +1 -0
- package/build/server/middleware/index.d.ts +69 -0
- package/build/server/middleware/index.d.ts.map +1 -0
- package/build/server/middleware/index.js +68 -0
- package/build/server/middleware/index.js.map +1 -0
- package/build/server/middleware/logging.d.ts +21 -0
- package/build/server/middleware/logging.d.ts.map +1 -0
- package/build/server/middleware/logging.js +36 -0
- package/build/server/middleware/logging.js.map +1 -0
- package/build/server/middleware/oauth-router.d.ts +50 -0
- package/build/server/middleware/oauth-router.d.ts.map +1 -0
- package/build/server/middleware/oauth-router.js +53 -0
- package/build/server/middleware/oauth-router.js.map +1 -0
- package/build/server/middleware/protocol-version.d.ts +13 -0
- package/build/server/middleware/protocol-version.d.ts.map +1 -0
- package/build/server/middleware/protocol-version.js +48 -0
- package/build/server/middleware/protocol-version.js.map +1 -0
- package/build/server/middleware/rate-limit.d.ts +47 -0
- package/build/server/middleware/rate-limit.d.ts.map +1 -0
- package/build/server/middleware/rate-limit.js +109 -0
- package/build/server/middleware/rate-limit.js.map +1 -0
- package/build/server/middleware/trust-proxy.d.ts +37 -0
- package/build/server/middleware/trust-proxy.d.ts.map +1 -0
- package/build/server/middleware/trust-proxy.js +154 -0
- package/build/server/middleware/trust-proxy.js.map +1 -0
- package/build/server/option-overrides.d.ts +25 -0
- package/build/server/option-overrides.d.ts.map +1 -0
- package/build/server/option-overrides.js +85 -0
- package/build/server/option-overrides.js.map +1 -0
- package/build/server/routes/health.d.ts +87 -0
- package/build/server/routes/health.d.ts.map +1 -0
- package/build/server/routes/health.js +183 -0
- package/build/server/routes/health.js.map +1 -0
- package/build/server/routes/index.d.ts +16 -0
- package/build/server/routes/index.d.ts.map +1 -0
- package/build/server/routes/index.js +18 -0
- package/build/server/routes/index.js.map +1 -0
- package/build/server/routes/metrics.d.ts +40 -0
- package/build/server/routes/metrics.d.ts.map +1 -0
- package/build/server/routes/metrics.js +81 -0
- package/build/server/routes/metrics.js.map +1 -0
- package/build/server/routes/oauth-router.d.ts +50 -0
- package/build/server/routes/oauth-router.d.ts.map +1 -0
- package/build/server/routes/oauth-router.js +53 -0
- package/build/server/routes/oauth-router.js.map +1 -0
- package/build/server/routes/readiness-status.d.ts +25 -0
- package/build/server/routes/readiness-status.d.ts.map +1 -0
- package/build/server/routes/readiness-status.js +27 -0
- package/build/server/routes/readiness-status.js.map +1 -0
- package/build/server/routes/sse-router.d.ts +43 -0
- package/build/server/routes/sse-router.d.ts.map +1 -0
- package/build/server/routes/sse-router.js +92 -0
- package/build/server/routes/sse-router.js.map +1 -0
- package/build/server/routes/streamable-http-router.d.ts +36 -0
- package/build/server/routes/streamable-http-router.d.ts.map +1 -0
- package/build/server/routes/streamable-http-router.js +59 -0
- package/build/server/routes/streamable-http-router.js.map +1 -0
- package/build/server/server-instance.d.ts +185 -0
- package/build/server/server-instance.d.ts.map +1 -0
- package/build/server/server-instance.js +615 -0
- package/build/server/server-instance.js.map +1 -0
- package/build/server/server-options.d.ts +411 -0
- package/build/server/server-options.d.ts.map +1 -0
- package/build/server/server-options.js +17 -0
- package/build/server/server-options.js.map +1 -0
- package/build/server/session/in-memory-store.d.ts +128 -0
- package/build/server/session/in-memory-store.d.ts.map +1 -0
- package/build/server/session/in-memory-store.js +312 -0
- package/build/server/session/in-memory-store.js.map +1 -0
- package/build/server/session/index.d.ts +43 -0
- package/build/server/session/index.d.ts.map +1 -0
- package/build/server/session/index.js +47 -0
- package/build/server/session/index.js.map +1 -0
- package/build/server/session/mcp-session.d.ts +210 -0
- package/build/server/session/mcp-session.d.ts.map +1 -0
- package/build/server/session/mcp-session.js +428 -0
- package/build/server/session/mcp-session.js.map +1 -0
- package/build/server/session/session-factory.d.ts +119 -0
- package/build/server/session/session-factory.d.ts.map +1 -0
- package/build/server/session/session-factory.js +131 -0
- package/build/server/session/session-factory.js.map +1 -0
- package/build/server/session/session-housekeeper.d.ts +100 -0
- package/build/server/session/session-housekeeper.d.ts.map +1 -0
- package/build/server/session/session-housekeeper.js +217 -0
- package/build/server/session/session-housekeeper.js.map +1 -0
- package/build/server/session/session-manager.d.ts +227 -0
- package/build/server/session/session-manager.d.ts.map +1 -0
- package/build/server/session/session-manager.js +282 -0
- package/build/server/session/session-manager.js.map +1 -0
- package/build/server/session/session-store.d.ts +95 -0
- package/build/server/session/session-store.d.ts.map +1 -0
- package/build/server/session/session-store.js +13 -0
- package/build/server/session/session-store.js.map +1 -0
- package/build/server/session/session.d.ts +132 -0
- package/build/server/session/session.d.ts.map +1 -0
- package/build/server/session/session.js +61 -0
- package/build/server/session/session.js.map +1 -0
- package/build/server/transport/constants.d.ts +85 -0
- package/build/server/transport/constants.d.ts.map +1 -0
- package/build/server/transport/constants.js +103 -0
- package/build/server/transport/constants.js.map +1 -0
- package/build/server/transport/index.d.ts +21 -0
- package/build/server/transport/index.d.ts.map +1 -0
- package/build/server/transport/index.js +28 -0
- package/build/server/transport/index.js.map +1 -0
- package/build/server/transport/sse/handler.d.ts +46 -0
- package/build/server/transport/sse/handler.d.ts.map +1 -0
- package/build/server/transport/sse/handler.js +189 -0
- package/build/server/transport/sse/handler.js.map +1 -0
- package/build/server/transport/sse/index.d.ts +15 -0
- package/build/server/transport/sse/index.d.ts.map +1 -0
- package/build/server/transport/sse/index.js +14 -0
- package/build/server/transport/sse/index.js.map +1 -0
- package/build/server/transport/sse/transport.d.ts +94 -0
- package/build/server/transport/sse/transport.d.ts.map +1 -0
- package/build/server/transport/sse/transport.js +175 -0
- package/build/server/transport/sse/transport.js.map +1 -0
- package/build/server/transport/stdio-transport.d.ts +23 -0
- package/build/server/transport/stdio-transport.d.ts.map +1 -0
- package/build/server/transport/stdio-transport.js +59 -0
- package/build/server/transport/stdio-transport.js.map +1 -0
- package/build/server/transport/streamable-http/index.d.ts +9 -0
- package/build/server/transport/streamable-http/index.d.ts.map +1 -0
- package/build/server/transport/streamable-http/index.js +9 -0
- package/build/server/transport/streamable-http/index.js.map +1 -0
- package/build/server/transport/streamable-http/stateful-handler.d.ts +41 -0
- package/build/server/transport/streamable-http/stateful-handler.d.ts.map +1 -0
- package/build/server/transport/streamable-http/stateful-handler.js +264 -0
- package/build/server/transport/streamable-http/stateful-handler.js.map +1 -0
- package/build/server/transport/streamable-http/stateless-handler.d.ts +28 -0
- package/build/server/transport/streamable-http/stateless-handler.d.ts.map +1 -0
- package/build/server/transport/streamable-http/stateless-handler.js +81 -0
- package/build/server/transport/streamable-http/stateless-handler.js.map +1 -0
- package/build/server/transport/streamable-http/transport.d.ts +110 -0
- package/build/server/transport/streamable-http/transport.d.ts.map +1 -0
- package/build/server/transport/streamable-http/transport.js +118 -0
- package/build/server/transport/streamable-http/transport.js.map +1 -0
- package/build/server/transport/transport-context.d.ts +67 -0
- package/build/server/transport/transport-context.d.ts.map +1 -0
- package/build/server/transport/transport-context.js +38 -0
- package/build/server/transport/transport-context.js.map +1 -0
- package/build/server/transport/types.d.ts +56 -0
- package/build/server/transport/types.d.ts.map +1 -0
- package/build/server/transport/types.js +11 -0
- package/build/server/transport/types.js.map +1 -0
- package/build/server/transport-options.d.ts +248 -0
- package/build/server/transport-options.d.ts.map +1 -0
- package/build/server/transport-options.js +18 -0
- package/build/server/transport-options.js.map +1 -0
- package/build/server/types.d.ts +172 -0
- package/build/server/types.d.ts.map +1 -0
- package/build/server/types.js +9 -0
- package/build/server/types.js.map +1 -0
- package/build/telemetry/connection-telemetry-bridge.d.ts +30 -0
- package/build/telemetry/connection-telemetry-bridge.d.ts.map +1 -0
- package/build/telemetry/connection-telemetry-bridge.js +54 -0
- package/build/telemetry/connection-telemetry-bridge.js.map +1 -0
- package/build/telemetry/core/config.d.ts +38 -0
- package/build/telemetry/core/config.d.ts.map +1 -0
- package/build/telemetry/core/config.js +54 -0
- package/build/telemetry/core/config.js.map +1 -0
- package/build/telemetry/core/constants.d.ts +183 -0
- package/build/telemetry/core/constants.d.ts.map +1 -0
- package/build/telemetry/core/constants.js +207 -0
- package/build/telemetry/core/constants.js.map +1 -0
- package/build/telemetry/core/diag-logger.d.ts +35 -0
- package/build/telemetry/core/diag-logger.d.ts.map +1 -0
- package/build/telemetry/core/diag-logger.js +54 -0
- package/build/telemetry/core/diag-logger.js.map +1 -0
- package/build/telemetry/core/index.d.ts +12 -0
- package/build/telemetry/core/index.d.ts.map +1 -0
- package/build/telemetry/core/index.js +32 -0
- package/build/telemetry/core/index.js.map +1 -0
- package/build/telemetry/core/types.d.ts +106 -0
- package/build/telemetry/core/types.d.ts.map +1 -0
- package/build/telemetry/core/types.js +10 -0
- package/build/telemetry/core/types.js.map +1 -0
- package/build/telemetry/index.d.ts +59 -0
- package/build/telemetry/index.d.ts.map +1 -0
- package/build/telemetry/index.js +79 -0
- package/build/telemetry/index.js.map +1 -0
- package/build/telemetry/metrics.d.ts +127 -0
- package/build/telemetry/metrics.d.ts.map +1 -0
- package/build/telemetry/metrics.js +337 -0
- package/build/telemetry/metrics.js.map +1 -0
- package/build/telemetry/sdk.d.ts +110 -0
- package/build/telemetry/sdk.d.ts.map +1 -0
- package/build/telemetry/sdk.js +547 -0
- package/build/telemetry/sdk.js.map +1 -0
- package/build/telemetry/tracing.d.ts +78 -0
- package/build/telemetry/tracing.d.ts.map +1 -0
- package/build/telemetry/tracing.js +257 -0
- package/build/telemetry/tracing.js.map +1 -0
- package/build/utils/env-helpers.d.ts +46 -0
- package/build/utils/env-helpers.d.ts.map +1 -0
- package/build/utils/env-helpers.js +54 -0
- package/build/utils/env-helpers.js.map +1 -0
- package/build/utils/index.d.ts +14 -0
- package/build/utils/index.d.ts.map +1 -0
- package/build/utils/index.js +19 -0
- package/build/utils/index.js.map +1 -0
- package/build/utils/sensitive-keys.d.ts +48 -0
- package/build/utils/sensitive-keys.d.ts.map +1 -0
- package/build/utils/sensitive-keys.js +131 -0
- package/build/utils/sensitive-keys.js.map +1 -0
- package/build/utils/string-helpers.d.ts +126 -0
- package/build/utils/string-helpers.d.ts.map +1 -0
- package/build/utils/string-helpers.js +189 -0
- package/build/utils/string-helpers.js.map +1 -0
- package/build/utils/validation.d.ts +84 -0
- package/build/utils/validation.d.ts.map +1 -0
- package/build/utils/validation.js +111 -0
- package/build/utils/validation.js.map +1 -0
- package/build/utils/zod-helpers.d.ts +92 -0
- package/build/utils/zod-helpers.d.ts.map +1 -0
- package/build/utils/zod-helpers.js +120 -0
- package/build/utils/zod-helpers.js.map +1 -0
- package/package.json +133 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation Error Classes
|
|
3
|
+
*
|
|
4
|
+
* Errors related to input validation and configuration:
|
|
5
|
+
* - ValidationError: Input validation failures
|
|
6
|
+
* - ConfigurationError: Configuration/environment errors
|
|
7
|
+
*
|
|
8
|
+
* @module errors/categories/validation
|
|
9
|
+
*/
|
|
10
|
+
import { ErrorCode } from "@modelcontextprotocol/sdk/types.js";
|
|
11
|
+
import { ZodError } from "zod";
|
|
12
|
+
import { AppError, ErrorCodes, VALIDATION_LIMITS, REDACTED_PLACEHOLDER, isSensitiveKey } from "../core/index.js";
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Validation Error
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Error thrown when input validation fails.
|
|
18
|
+
*
|
|
19
|
+
* Integrates with Zod for schema validation errors.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* // From Zod error
|
|
24
|
+
* throw ValidationError.fromZodError(zodError, 'Invalid server configuration');
|
|
25
|
+
*
|
|
26
|
+
* // Manual validation
|
|
27
|
+
* throw new ValidationError('Server name is required', {
|
|
28
|
+
* field: 'server',
|
|
29
|
+
* value: undefined
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* // Using factory methods
|
|
33
|
+
* throw ValidationError.fieldRequired('server');
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export class ValidationError extends AppError {
|
|
37
|
+
/** The field that failed validation */
|
|
38
|
+
field;
|
|
39
|
+
/** The invalid value (sanitized) */
|
|
40
|
+
value;
|
|
41
|
+
/** All validation issues (for multi-field validation) */
|
|
42
|
+
issues;
|
|
43
|
+
constructor(message, options = {}) {
|
|
44
|
+
super(message, {
|
|
45
|
+
code: ErrorCodes.VALIDATION_ERROR,
|
|
46
|
+
statusCode: 400,
|
|
47
|
+
mcpCode: ErrorCode.InvalidParams,
|
|
48
|
+
cause: options.cause,
|
|
49
|
+
recoveryHint: options.recoveryHint,
|
|
50
|
+
context: {
|
|
51
|
+
...options.context,
|
|
52
|
+
field: options.field,
|
|
53
|
+
// Don't include actual value in context to avoid sensitive data leaks
|
|
54
|
+
hasValue: options.value !== undefined,
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
this.field = options.field;
|
|
58
|
+
// Sanitize the value - don't store sensitive information
|
|
59
|
+
this.value = this.sanitizeValue(options.value, options.field);
|
|
60
|
+
this.issues = options.issues;
|
|
61
|
+
}
|
|
62
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
63
|
+
// Value Sanitization
|
|
64
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
65
|
+
/**
|
|
66
|
+
* Sanitize a value for safe storage/logging.
|
|
67
|
+
* Removes potential sensitive data.
|
|
68
|
+
*/
|
|
69
|
+
sanitizeValue(value, fieldName) {
|
|
70
|
+
if (value === undefined || value === null) {
|
|
71
|
+
return value;
|
|
72
|
+
}
|
|
73
|
+
// Check for potential secrets based on field name
|
|
74
|
+
if (fieldName && isSensitiveKey(fieldName)) {
|
|
75
|
+
return REDACTED_PLACEHOLDER;
|
|
76
|
+
}
|
|
77
|
+
// For strings, truncate and indicate type
|
|
78
|
+
if (typeof value === "string") {
|
|
79
|
+
if (value.length > VALIDATION_LIMITS.MAX_STRING_DISPLAY_LENGTH) {
|
|
80
|
+
return `[string:${value.length} chars]`;
|
|
81
|
+
}
|
|
82
|
+
return value;
|
|
83
|
+
}
|
|
84
|
+
// For objects/arrays, indicate structure only
|
|
85
|
+
if (typeof value === "object") {
|
|
86
|
+
if (Array.isArray(value)) {
|
|
87
|
+
return `[array:${value.length} items]`;
|
|
88
|
+
}
|
|
89
|
+
return `[object:${Object.keys(value).length} keys]`;
|
|
90
|
+
}
|
|
91
|
+
return value;
|
|
92
|
+
}
|
|
93
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
94
|
+
// Factory Methods
|
|
95
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
96
|
+
/**
|
|
97
|
+
* Create a ValidationError from a Zod error.
|
|
98
|
+
*/
|
|
99
|
+
static fromZodError(zodError, message) {
|
|
100
|
+
const issues = zodError.issues.map((issue) => ({
|
|
101
|
+
path: issue.path.join("."),
|
|
102
|
+
message: issue.message,
|
|
103
|
+
code: issue.code,
|
|
104
|
+
}));
|
|
105
|
+
const primaryIssue = issues[0];
|
|
106
|
+
const errorMessage = message || primaryIssue?.message || "Validation failed";
|
|
107
|
+
return new ValidationError(errorMessage, {
|
|
108
|
+
field: primaryIssue?.path,
|
|
109
|
+
issues,
|
|
110
|
+
cause: zodError,
|
|
111
|
+
recoveryHint: "Check the input parameters against the expected schema.",
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Create a ValidationError for a required field.
|
|
116
|
+
*/
|
|
117
|
+
static fieldRequired(field) {
|
|
118
|
+
return new ValidationError(`Field '${field}' is required`, {
|
|
119
|
+
field,
|
|
120
|
+
recoveryHint: `Provide a value for the required field '${field}'.`,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Create a ValidationError for an invalid field value.
|
|
125
|
+
*/
|
|
126
|
+
static fieldInvalid(field, value) {
|
|
127
|
+
return new ValidationError(`Invalid value for field '${field}'`, {
|
|
128
|
+
field,
|
|
129
|
+
value,
|
|
130
|
+
recoveryHint: `Check the value provided for '${field}' and ensure it meets the requirements.`,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Create a ValidationError for a type mismatch.
|
|
135
|
+
*/
|
|
136
|
+
static fieldTypeMismatch(field, expectedType) {
|
|
137
|
+
return new ValidationError(`Field '${field}' must be of type ${expectedType}`, {
|
|
138
|
+
field,
|
|
139
|
+
recoveryHint: `Field '${field}' must be of type '${expectedType}'.`,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Create a ValidationError for minimum value constraint.
|
|
144
|
+
*/
|
|
145
|
+
static fieldMin(field, min) {
|
|
146
|
+
return new ValidationError(`Field '${field}' must be at least ${min}`, {
|
|
147
|
+
field,
|
|
148
|
+
recoveryHint: `Provide a value of at least ${min} for '${field}'.`,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Create a ValidationError for maximum value constraint.
|
|
153
|
+
*/
|
|
154
|
+
static fieldMax(field, max) {
|
|
155
|
+
return new ValidationError(`Field '${field}' must be at most ${max}`, {
|
|
156
|
+
field,
|
|
157
|
+
recoveryHint: `Provide a value of at most ${max} for '${field}'.`,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Create a ValidationError for pattern mismatch.
|
|
162
|
+
*/
|
|
163
|
+
static fieldPattern(field) {
|
|
164
|
+
return new ValidationError(`Field '${field}' does not match the required pattern`, {
|
|
165
|
+
field,
|
|
166
|
+
recoveryHint: `Ensure '${field}' matches the expected format.`,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
170
|
+
// Formatting
|
|
171
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
172
|
+
/**
|
|
173
|
+
* Format issues as a human-readable list.
|
|
174
|
+
*/
|
|
175
|
+
formatIssues() {
|
|
176
|
+
if (!this.issues || this.issues.length === 0) {
|
|
177
|
+
return this.message;
|
|
178
|
+
}
|
|
179
|
+
return this.issues.map((issue) => ` - ${issue.path}: ${issue.message}`).join("\n");
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// ============================================================================
|
|
183
|
+
// Configuration Error
|
|
184
|
+
// ============================================================================
|
|
185
|
+
/**
|
|
186
|
+
* Error thrown when configuration is invalid.
|
|
187
|
+
*
|
|
188
|
+
* @example
|
|
189
|
+
* ```typescript
|
|
190
|
+
* throw new ConfigurationError('Missing required environment variable: API_URL');
|
|
191
|
+
*
|
|
192
|
+
* // Using factory methods
|
|
193
|
+
* throw ConfigurationError.missingEnvVar('API_URL');
|
|
194
|
+
* throw ConfigurationError.invalidEnvVar('API_PORT', 'must be a number');
|
|
195
|
+
* ```
|
|
196
|
+
*/
|
|
197
|
+
export class ConfigurationError extends AppError {
|
|
198
|
+
/** The configuration key that is invalid */
|
|
199
|
+
configKey;
|
|
200
|
+
constructor(message, options = {}) {
|
|
201
|
+
super(message, {
|
|
202
|
+
code: ErrorCodes.CONFIGURATION_ERROR,
|
|
203
|
+
statusCode: 500, // Configuration errors are server-side
|
|
204
|
+
mcpCode: ErrorCode.InternalError,
|
|
205
|
+
cause: options.cause,
|
|
206
|
+
context: {
|
|
207
|
+
...options.context,
|
|
208
|
+
configKey: options.configKey,
|
|
209
|
+
},
|
|
210
|
+
});
|
|
211
|
+
this.configKey = options.configKey;
|
|
212
|
+
}
|
|
213
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
214
|
+
// Factory Methods
|
|
215
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
216
|
+
/**
|
|
217
|
+
* Create a ConfigurationError for a missing environment variable.
|
|
218
|
+
*/
|
|
219
|
+
static missingEnvVar(varName) {
|
|
220
|
+
return new ConfigurationError(`Missing required environment variable: ${varName}`, {
|
|
221
|
+
configKey: varName,
|
|
222
|
+
recoveryHint: `Set the environment variable '${varName}' in your configuration.`,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Create a ConfigurationError for an invalid environment variable value.
|
|
227
|
+
*/
|
|
228
|
+
static invalidEnvVar(varName, reason) {
|
|
229
|
+
return new ConfigurationError(`Invalid value for environment variable ${varName}: ${reason}`, {
|
|
230
|
+
configKey: varName,
|
|
231
|
+
recoveryHint: `Check the value of '${varName}': ${reason}.`,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Create a ConfigurationError with a custom message.
|
|
236
|
+
*/
|
|
237
|
+
static invalid(message) {
|
|
238
|
+
return new ConfigurationError(`Invalid configuration: ${message}`, {
|
|
239
|
+
recoveryHint: "Review your configuration settings and correct any issues.",
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
243
|
+
// Config File Factory Methods
|
|
244
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
245
|
+
/**
|
|
246
|
+
* Create a ConfigurationError for an explicitly specified config file that doesn't exist.
|
|
247
|
+
*/
|
|
248
|
+
static fileNotFound(filePath) {
|
|
249
|
+
return new ConfigurationError(`Config file not found: ${filePath}`, {
|
|
250
|
+
configKey: "MCP_CONFIG_FILE",
|
|
251
|
+
recoveryHint: `Ensure the file '${filePath}' exists or remove the MCP_CONFIG_FILE environment variable.`,
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Create a ConfigurationError for a file that could not be read.
|
|
256
|
+
*/
|
|
257
|
+
static fileReadFailed(filePath, cause) {
|
|
258
|
+
return new ConfigurationError(`Failed to read config file: ${filePath}`, {
|
|
259
|
+
configKey: "MCP_CONFIG_FILE",
|
|
260
|
+
cause,
|
|
261
|
+
recoveryHint: `Check file permissions and path for '${filePath}'.`,
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Create a ConfigurationError for a TOML/YAML parse failure.
|
|
266
|
+
*/
|
|
267
|
+
static fileParseFailed(filePath, cause) {
|
|
268
|
+
return new ConfigurationError(`Failed to parse config file: ${filePath}`, {
|
|
269
|
+
configKey: "MCP_CONFIG_FILE",
|
|
270
|
+
cause,
|
|
271
|
+
recoveryHint: `Check the syntax of '${filePath}' — ensure it is valid TOML or YAML.`,
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Create a ConfigurationError for schema validation failures in a config file.
|
|
276
|
+
*
|
|
277
|
+
* Formats Zod issues into a human-readable message with the file path
|
|
278
|
+
* so users can locate and fix typos or invalid values.
|
|
279
|
+
*/
|
|
280
|
+
static fileValidationFailed(filePath, zodError) {
|
|
281
|
+
const issues = zodError.issues.map((i) => ` - ${i.path.join(".")}: ${i.message}`).join("\n");
|
|
282
|
+
const detail = `Validation failed for '${filePath}':\n${issues}`;
|
|
283
|
+
return new ConfigurationError(detail, {
|
|
284
|
+
configKey: "MCP_CONFIG_FILE",
|
|
285
|
+
cause: zodError,
|
|
286
|
+
recoveryHint: "Fix the listed issues in your config file. Use `.strict()` sections to catch typos.",
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Create a ConfigurationError for an unsupported config file extension.
|
|
291
|
+
*/
|
|
292
|
+
static unsupportedFormat(extension) {
|
|
293
|
+
return new ConfigurationError(`Unsupported config file format: ${extension}. Supported: .toml, .yaml, .yml`, {
|
|
294
|
+
configKey: "MCP_CONFIG_FILE",
|
|
295
|
+
recoveryHint: `Supported formats: .toml, .yaml, .yml`,
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Create a ConfigurationError for cross-field validation failures.
|
|
300
|
+
*
|
|
301
|
+
* Used after merging all config sources (env + file + overrides)
|
|
302
|
+
* to validate constraints that span multiple fields.
|
|
303
|
+
*/
|
|
304
|
+
static constraintViolation(message, fields) {
|
|
305
|
+
return new ConfigurationError(message, {
|
|
306
|
+
context: { fields },
|
|
307
|
+
recoveryHint: `Check the relationship between: ${fields.join(", ")}`,
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/errors/categories/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Error Class Module
|
|
3
|
+
*
|
|
4
|
+
* Provides the foundational AppError class that all application errors
|
|
5
|
+
* extend from. Features include:
|
|
6
|
+
*
|
|
7
|
+
* - Unique error ID for tracking and support
|
|
8
|
+
* - Typed error codes for programmatic handling
|
|
9
|
+
* - HTTP status code mapping for REST responses
|
|
10
|
+
* - MCP error code mapping for JSON-RPC responses
|
|
11
|
+
* - Recovery hints for user guidance
|
|
12
|
+
* - Error cause chain support
|
|
13
|
+
* - Serialization for logging
|
|
14
|
+
* - Environment-aware stack traces
|
|
15
|
+
*
|
|
16
|
+
* @module errors/core/base
|
|
17
|
+
*/
|
|
18
|
+
import { ErrorCode } from "@modelcontextprotocol/sdk/types.js";
|
|
19
|
+
import { type ErrorCodeType } from "./error-codes.js";
|
|
20
|
+
import type { BaseErrorOptions, SerializedError } from "./types.js";
|
|
21
|
+
/**
|
|
22
|
+
* Base error class for all MCP Server errors.
|
|
23
|
+
*
|
|
24
|
+
* All application errors should extend this class or one of its
|
|
25
|
+
* specialized subclasses. Provides consistent error handling,
|
|
26
|
+
* serialization, and integration with MCP/HTTP error codes.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* throw new AppError('Something went wrong', {
|
|
31
|
+
* code: ErrorCodes.INTERNAL_ERROR,
|
|
32
|
+
* cause: originalError,
|
|
33
|
+
* context: { operation: 'listContainers' },
|
|
34
|
+
* recoveryHint: 'Try again later or check the server status'
|
|
35
|
+
* });
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare class AppError extends Error {
|
|
39
|
+
/** Unique identifier for this error instance (for tracking/support) */
|
|
40
|
+
readonly errorId: string;
|
|
41
|
+
/** Application-specific error code */
|
|
42
|
+
readonly code: ErrorCodeType | string;
|
|
43
|
+
/** HTTP status code for REST API responses */
|
|
44
|
+
readonly statusCode: number;
|
|
45
|
+
/** MCP error code for JSON-RPC responses */
|
|
46
|
+
readonly mcpCode: ErrorCode;
|
|
47
|
+
/** Additional context for debugging */
|
|
48
|
+
readonly context?: Record<string, unknown> | undefined;
|
|
49
|
+
/** Original error that caused this error */
|
|
50
|
+
readonly cause?: Error | undefined;
|
|
51
|
+
/** Timestamp when the error occurred */
|
|
52
|
+
readonly timestamp: Date;
|
|
53
|
+
/** Recovery hint for users - guidance on how to resolve the error */
|
|
54
|
+
readonly recoveryHint?: string | undefined;
|
|
55
|
+
constructor(message: string, options?: BaseErrorOptions);
|
|
56
|
+
/**
|
|
57
|
+
* Serialize error for logging or API response.
|
|
58
|
+
* Excludes stack trace in production for security.
|
|
59
|
+
*
|
|
60
|
+
* @returns Serialized error object
|
|
61
|
+
*/
|
|
62
|
+
toJSON(): SerializedError;
|
|
63
|
+
/**
|
|
64
|
+
* Create a human-readable error message including cause chain.
|
|
65
|
+
*
|
|
66
|
+
* @returns Detailed error string with cause chain
|
|
67
|
+
*/
|
|
68
|
+
toDetailedString(): string;
|
|
69
|
+
/**
|
|
70
|
+
* Type guard to check if an error is a AppError instance.
|
|
71
|
+
*
|
|
72
|
+
* @param error - The error to check
|
|
73
|
+
* @returns True if error is a AppError
|
|
74
|
+
*/
|
|
75
|
+
static isAppError(error: unknown): error is AppError;
|
|
76
|
+
/**
|
|
77
|
+
* Wrap any error as a AppError.
|
|
78
|
+
* If already a AppError, returns it unchanged.
|
|
79
|
+
*
|
|
80
|
+
* @param error - The error to wrap
|
|
81
|
+
* @param defaultMessage - Message to use if error has none
|
|
82
|
+
* @returns A AppError instance
|
|
83
|
+
*/
|
|
84
|
+
static wrap(error: unknown, defaultMessage?: string): AppError;
|
|
85
|
+
/**
|
|
86
|
+
* Create a AppError from an unknown error, preserving type if already AppError.
|
|
87
|
+
* Useful for catch blocks where you want to re-throw with additional context.
|
|
88
|
+
*
|
|
89
|
+
* @param error - The error to wrap
|
|
90
|
+
* @param context - Additional context to add
|
|
91
|
+
* @returns A AppError with merged context
|
|
92
|
+
*/
|
|
93
|
+
static wrapWithContext(error: unknown, context: Record<string, unknown>): AppError;
|
|
94
|
+
/**
|
|
95
|
+
* Check if an error is a cancellation error.
|
|
96
|
+
* Handles both OperationCancelledError and native AbortError.
|
|
97
|
+
*
|
|
98
|
+
* @param error - The error to check
|
|
99
|
+
* @returns True if error represents a cancellation
|
|
100
|
+
*/
|
|
101
|
+
static isCancellation(error: unknown): boolean;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/errors/core/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAElE,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAMpE;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAAC;IAEtC,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAE5B,uCAAuC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAEvD,4CAA4C;IAC5C,SAAkB,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAE5C,wCAAwC;IACxC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IAEzB,qEAAqE;IACrE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;gBAE/B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB;IAyB3D;;;;;OAKG;IACH,MAAM,IAAI,eAAe;IAuCzB;;;;OAIG;IACH,gBAAgB,IAAI,MAAM;IA0B1B;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ;IAIpD;;;;;;;OAOG;IACH,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,SAAiC,GAAG,QAAQ;IAiBtF;;;;;;;OAOG;IACH,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ;IAclF;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;CAa/C"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Error Class Module
|
|
3
|
+
*
|
|
4
|
+
* Provides the foundational AppError class that all application errors
|
|
5
|
+
* extend from. Features include:
|
|
6
|
+
*
|
|
7
|
+
* - Unique error ID for tracking and support
|
|
8
|
+
* - Typed error codes for programmatic handling
|
|
9
|
+
* - HTTP status code mapping for REST responses
|
|
10
|
+
* - MCP error code mapping for JSON-RPC responses
|
|
11
|
+
* - Recovery hints for user guidance
|
|
12
|
+
* - Error cause chain support
|
|
13
|
+
* - Serialization for logging
|
|
14
|
+
* - Environment-aware stack traces
|
|
15
|
+
*
|
|
16
|
+
* @module errors/core/base
|
|
17
|
+
*/
|
|
18
|
+
import { randomUUID } from "node:crypto";
|
|
19
|
+
import { ErrorCode } from "@modelcontextprotocol/sdk/types.js";
|
|
20
|
+
import { ErrorCodes } from "./error-codes.js";
|
|
21
|
+
import { ErrorCodeToHttpStatus } from "./http.js";
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// Base Error Class
|
|
24
|
+
// ============================================================================
|
|
25
|
+
/**
|
|
26
|
+
* Base error class for all MCP Server errors.
|
|
27
|
+
*
|
|
28
|
+
* All application errors should extend this class or one of its
|
|
29
|
+
* specialized subclasses. Provides consistent error handling,
|
|
30
|
+
* serialization, and integration with MCP/HTTP error codes.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* throw new AppError('Something went wrong', {
|
|
35
|
+
* code: ErrorCodes.INTERNAL_ERROR,
|
|
36
|
+
* cause: originalError,
|
|
37
|
+
* context: { operation: 'listContainers' },
|
|
38
|
+
* recoveryHint: 'Try again later or check the server status'
|
|
39
|
+
* });
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export class AppError extends Error {
|
|
43
|
+
/** Unique identifier for this error instance (for tracking/support) */
|
|
44
|
+
errorId;
|
|
45
|
+
/** Application-specific error code */
|
|
46
|
+
code;
|
|
47
|
+
/** HTTP status code for REST API responses */
|
|
48
|
+
statusCode;
|
|
49
|
+
/** MCP error code for JSON-RPC responses */
|
|
50
|
+
mcpCode;
|
|
51
|
+
/** Additional context for debugging */
|
|
52
|
+
context;
|
|
53
|
+
/** Original error that caused this error */
|
|
54
|
+
cause;
|
|
55
|
+
/** Timestamp when the error occurred */
|
|
56
|
+
timestamp;
|
|
57
|
+
/** Recovery hint for users - guidance on how to resolve the error */
|
|
58
|
+
recoveryHint;
|
|
59
|
+
constructor(message, options = {}) {
|
|
60
|
+
super(message);
|
|
61
|
+
this.name = this.constructor.name;
|
|
62
|
+
this.errorId = randomUUID();
|
|
63
|
+
this.code = options.code ?? ErrorCodes.INTERNAL_ERROR;
|
|
64
|
+
// @ts-limitation — this.code is ErrorCodeType | string; lookup map requires ErrorCodeType key
|
|
65
|
+
this.statusCode = options.statusCode ?? ErrorCodeToHttpStatus[this.code] ?? 500;
|
|
66
|
+
this.mcpCode = options.mcpCode ?? ErrorCode.InternalError;
|
|
67
|
+
this.cause = options.cause;
|
|
68
|
+
this.context = options.context;
|
|
69
|
+
this.timestamp = new Date();
|
|
70
|
+
this.recoveryHint = options.recoveryHint;
|
|
71
|
+
// Maintain proper stack trace in V8 environments
|
|
72
|
+
/* v8 ignore start - V8-specific runtime feature */
|
|
73
|
+
if (Error.captureStackTrace) {
|
|
74
|
+
Error.captureStackTrace(this, this.constructor);
|
|
75
|
+
}
|
|
76
|
+
/* v8 ignore stop */
|
|
77
|
+
}
|
|
78
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
79
|
+
// Serialization
|
|
80
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
81
|
+
/**
|
|
82
|
+
* Serialize error for logging or API response.
|
|
83
|
+
* Excludes stack trace in production for security.
|
|
84
|
+
*
|
|
85
|
+
* @returns Serialized error object
|
|
86
|
+
*/
|
|
87
|
+
toJSON() {
|
|
88
|
+
const serialized = {
|
|
89
|
+
name: this.name,
|
|
90
|
+
message: this.message,
|
|
91
|
+
errorId: this.errorId,
|
|
92
|
+
code: this.code,
|
|
93
|
+
statusCode: this.statusCode,
|
|
94
|
+
mcpCode: this.mcpCode,
|
|
95
|
+
timestamp: this.timestamp.toISOString(),
|
|
96
|
+
};
|
|
97
|
+
// Include stack in development only
|
|
98
|
+
if (process.env.NODE_ENV !== "production" && this.stack) {
|
|
99
|
+
serialized.stack = this.stack;
|
|
100
|
+
}
|
|
101
|
+
// Serialize cause if present
|
|
102
|
+
if (this.cause) {
|
|
103
|
+
if (this.cause instanceof AppError) {
|
|
104
|
+
serialized.cause = this.cause.toJSON();
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
serialized.cause = this.cause.message;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Include context in development only — prevents leaking internal details
|
|
111
|
+
// (operation names, field names, paths) in production HTTP responses.
|
|
112
|
+
if (process.env.NODE_ENV !== "production" && this.context && Object.keys(this.context).length > 0) {
|
|
113
|
+
serialized.context = this.context;
|
|
114
|
+
}
|
|
115
|
+
// Include recovery hint if present
|
|
116
|
+
if (this.recoveryHint) {
|
|
117
|
+
serialized.recoveryHint = this.recoveryHint;
|
|
118
|
+
}
|
|
119
|
+
return serialized;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Create a human-readable error message including cause chain.
|
|
123
|
+
*
|
|
124
|
+
* @returns Detailed error string with cause chain
|
|
125
|
+
*/
|
|
126
|
+
toDetailedString() {
|
|
127
|
+
let result = `${this.name} [${this.code}] (${this.errorId}): ${this.message}`;
|
|
128
|
+
if (this.recoveryHint) {
|
|
129
|
+
result += ` | Hint: ${this.recoveryHint}`;
|
|
130
|
+
}
|
|
131
|
+
if (this.context && Object.keys(this.context).length > 0) {
|
|
132
|
+
result += ` | Context: ${JSON.stringify(this.context)}`;
|
|
133
|
+
}
|
|
134
|
+
if (this.cause) {
|
|
135
|
+
if (this.cause instanceof AppError) {
|
|
136
|
+
result += `\n Caused by: ${this.cause.toDetailedString()}`;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
result += `\n Caused by: ${this.cause.message}`;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
145
|
+
// Static Utilities
|
|
146
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
147
|
+
/**
|
|
148
|
+
* Type guard to check if an error is a AppError instance.
|
|
149
|
+
*
|
|
150
|
+
* @param error - The error to check
|
|
151
|
+
* @returns True if error is a AppError
|
|
152
|
+
*/
|
|
153
|
+
static isAppError(error) {
|
|
154
|
+
return error instanceof AppError;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Wrap any error as a AppError.
|
|
158
|
+
* If already a AppError, returns it unchanged.
|
|
159
|
+
*
|
|
160
|
+
* @param error - The error to wrap
|
|
161
|
+
* @param defaultMessage - Message to use if error has none
|
|
162
|
+
* @returns A AppError instance
|
|
163
|
+
*/
|
|
164
|
+
static wrap(error, defaultMessage = "An unexpected error occurred") {
|
|
165
|
+
if (error instanceof AppError) {
|
|
166
|
+
return error;
|
|
167
|
+
}
|
|
168
|
+
if (error instanceof Error) {
|
|
169
|
+
return new AppError(error.message || defaultMessage, {
|
|
170
|
+
cause: error,
|
|
171
|
+
code: ErrorCodes.INTERNAL_ERROR,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
return new AppError(String(error) || defaultMessage, {
|
|
175
|
+
code: ErrorCodes.INTERNAL_ERROR,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Create a AppError from an unknown error, preserving type if already AppError.
|
|
180
|
+
* Useful for catch blocks where you want to re-throw with additional context.
|
|
181
|
+
*
|
|
182
|
+
* @param error - The error to wrap
|
|
183
|
+
* @param context - Additional context to add
|
|
184
|
+
* @returns A AppError with merged context
|
|
185
|
+
*/
|
|
186
|
+
static wrapWithContext(error, context) {
|
|
187
|
+
const wrappedError = AppError.wrap(error);
|
|
188
|
+
// Merge context and preserve recoveryHint
|
|
189
|
+
return new AppError(wrappedError.message, {
|
|
190
|
+
code: wrappedError.code,
|
|
191
|
+
statusCode: wrappedError.statusCode,
|
|
192
|
+
mcpCode: wrappedError.mcpCode,
|
|
193
|
+
cause: wrappedError.cause,
|
|
194
|
+
context: { ...wrappedError.context, ...context },
|
|
195
|
+
recoveryHint: wrappedError.recoveryHint,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Check if an error is a cancellation error.
|
|
200
|
+
* Handles both OperationCancelledError and native AbortError.
|
|
201
|
+
*
|
|
202
|
+
* @param error - The error to check
|
|
203
|
+
* @returns True if error represents a cancellation
|
|
204
|
+
*/
|
|
205
|
+
static isCancellation(error) {
|
|
206
|
+
if (error instanceof Error) {
|
|
207
|
+
// Check for AbortError (from AbortController)
|
|
208
|
+
if (error.name === "AbortError") {
|
|
209
|
+
return true;
|
|
210
|
+
}
|
|
211
|
+
// Check for our cancellation code
|
|
212
|
+
if (error instanceof AppError && error.code === ErrorCodes.OPERATION_CANCELLED) {
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/errors/core/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAsB,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAGlD,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,uEAAuE;IAC9D,OAAO,CAAS;IAEzB,sCAAsC;IAC7B,IAAI,CAAyB;IAEtC,8CAA8C;IACrC,UAAU,CAAS;IAE5B,4CAA4C;IACnC,OAAO,CAAY;IAE5B,uCAAuC;IAC9B,OAAO,CAAuC;IAEvD,4CAA4C;IAC1B,KAAK,CAAqB;IAE5C,wCAAwC;IAC/B,SAAS,CAAO;IAEzB,qEAAqE;IAC5D,YAAY,CAAsB;IAE3C,YAAY,OAAe,EAAE,UAA4B,EAAE;QACzD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,UAAU,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,UAAU,CAAC,cAAc,CAAC;QACtD,8FAA8F;QAC9F,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAqB,CAAC,IAAI,GAAG,CAAC;QACjG,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC,aAAa,CAAC;QAC1D,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QAEzC,iDAAiD;QACjD,mDAAmD;QACnD,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;QACD,oBAAoB;IACtB,CAAC;IAED,4EAA4E;IAC5E,gBAAgB;IAChB,4EAA4E;IAE5E;;;;;OAKG;IACH,MAAM;QACJ,MAAM,UAAU,GAAoB;YAClC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;SACxC,CAAC;QAEF,oCAAoC;QACpC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACxD,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAChC,CAAC;QAED,6BAA6B;QAC7B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,KAAK,YAAY,QAAQ,EAAE,CAAC;gBACnC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YACxC,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,sEAAsE;QACtE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClG,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QACpC,CAAC;QAED,mCAAmC;QACnC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAC9C,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACH,gBAAgB;QACd,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,OAAO,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAE9E,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,IAAI,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5C,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,eAAe,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1D,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,KAAK,YAAY,QAAQ,EAAE,CAAC;gBACnC,MAAM,IAAI,kBAAkB,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,kBAAkB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACnD,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,4EAA4E;IAC5E,mBAAmB;IACnB,4EAA4E;IAE5E;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,KAAc;QAC9B,OAAO,KAAK,YAAY,QAAQ,CAAC;IACnC,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,IAAI,CAAC,KAAc,EAAE,cAAc,GAAG,8BAA8B;QACzE,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,cAAc,EAAE;gBACnD,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,UAAU,CAAC,cAAc;aAChC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,cAAc,EAAE;YACnD,IAAI,EAAE,UAAU,CAAC,cAAc;SAChC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,eAAe,CAAC,KAAc,EAAE,OAAgC;QACrE,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE1C,0CAA0C;QAC1C,OAAO,IAAI,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE;YACxC,IAAI,EAAE,YAAY,CAAC,IAAI;YACvB,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,OAAO,EAAE,YAAY,CAAC,OAAO;YAC7B,KAAK,EAAE,YAAY,CAAC,KAAK;YACzB,OAAO,EAAE,EAAE,GAAG,YAAY,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE;YAChD,YAAY,EAAE,YAAY,CAAC,YAAY;SACxC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,CAAC,KAAc;QAClC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,8CAA8C;YAC9C,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAChC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,kCAAkC;YAClC,IAAI,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,mBAAmB,EAAE,CAAC;gBAC/E,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|