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,441 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Framework Environment Configuration
|
|
3
|
+
*
|
|
4
|
+
* Environment variables for the generic MCP server framework.
|
|
5
|
+
* These settings are NOT application-specific and apply to any MCP server
|
|
6
|
+
* built with this framework.
|
|
7
|
+
*
|
|
8
|
+
* @module config/env
|
|
9
|
+
*/
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
import { booleanFromEnv, optionalCommaSeparatedList, commaSeparatedList, byteSizeSchema, } from "../utils/zod-helpers.js";
|
|
12
|
+
import { BYTE_SIZE_REGEX } from "../utils/string-helpers.js";
|
|
13
|
+
import { readFileSync, accessSync, constants as fsConstants } from "node:fs";
|
|
14
|
+
import { fileURLToPath } from "node:url";
|
|
15
|
+
import { dirname, join } from "node:path";
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// Version Resolution
|
|
18
|
+
// ============================================================================
|
|
19
|
+
/** Path to baked-in VERSION file (created during Docker build) */
|
|
20
|
+
const VERSION_FILE_PATH = join(dirname(fileURLToPath(import.meta.url)), "..", "..", "VERSION");
|
|
21
|
+
/**
|
|
22
|
+
* Resolve application version from available sources.
|
|
23
|
+
*
|
|
24
|
+
* Single Source of Truth: package.json
|
|
25
|
+
*
|
|
26
|
+
* Resolution:
|
|
27
|
+
* - Docker: Reads from build/VERSION (baked in from package.json during build)
|
|
28
|
+
* - npm run: Uses npm_package_version (injected by npm from package.json)
|
|
29
|
+
*
|
|
30
|
+
* @returns Version string or 'unknown' if resolution fails
|
|
31
|
+
*/
|
|
32
|
+
function resolveVersion() {
|
|
33
|
+
// Docker: VERSION file is baked in during build
|
|
34
|
+
try {
|
|
35
|
+
return readFileSync(VERSION_FILE_PATH, "utf-8").trim();
|
|
36
|
+
}
|
|
37
|
+
catch (_) {
|
|
38
|
+
// Not running in Docker container — VERSION file doesn't exist
|
|
39
|
+
}
|
|
40
|
+
// npm run: npm injects version from package.json
|
|
41
|
+
return process.env.npm_package_version ?? "unknown";
|
|
42
|
+
}
|
|
43
|
+
/** Cached version - resolved once at module load */
|
|
44
|
+
const VERSION = resolveVersion();
|
|
45
|
+
// ============================================================================
|
|
46
|
+
// Schema Definition
|
|
47
|
+
// ============================================================================
|
|
48
|
+
/**
|
|
49
|
+
* Framework environment schema - application-agnostic settings.
|
|
50
|
+
*
|
|
51
|
+
* Includes:
|
|
52
|
+
* - Application metadata (version, environment)
|
|
53
|
+
* - MCP Transport settings (host, port, transport mode)
|
|
54
|
+
* - Security settings (DNS rebinding protection, rate limiting)
|
|
55
|
+
* - Logging configuration
|
|
56
|
+
* - OpenTelemetry settings
|
|
57
|
+
*/
|
|
58
|
+
export const frameworkEnvSchema = z
|
|
59
|
+
.object({
|
|
60
|
+
// ==========================================================================
|
|
61
|
+
// Application Metadata
|
|
62
|
+
// ==========================================================================
|
|
63
|
+
/**
|
|
64
|
+
* Application version (resolved at module load).
|
|
65
|
+
*
|
|
66
|
+
* Source of Truth: package.json
|
|
67
|
+
* - Docker: build/VERSION file (baked in during build)
|
|
68
|
+
* - npm run: npm_package_version environment variable
|
|
69
|
+
*/
|
|
70
|
+
VERSION: z.string().default(VERSION),
|
|
71
|
+
/** Node environment (development, production, test) */
|
|
72
|
+
NODE_ENV: z.enum(["development", "production", "test"]).default("development"),
|
|
73
|
+
// ==========================================================================
|
|
74
|
+
// MCP Transport Settings
|
|
75
|
+
// ==========================================================================
|
|
76
|
+
/** Host to bind the MCP server to (default: 127.0.0.1) */
|
|
77
|
+
MCP_BIND_HOST: z.string().min(1).default("127.0.0.1"),
|
|
78
|
+
/** Port to listen on (default: 8000) */
|
|
79
|
+
MCP_PORT: z.coerce.number().int().min(1).max(65535).default(8000),
|
|
80
|
+
/** Transport mode: 'stdio' for CLI, 'http' for HTTP, 'https' for HTTPS with TLS (default: http) */
|
|
81
|
+
MCP_TRANSPORT: z.enum(["stdio", "http", "https"]).default("stdio"),
|
|
82
|
+
/**
|
|
83
|
+
* Enable Legacy SSE Transport (deprecated HTTP+SSE from protocol 2024-11-05)
|
|
84
|
+
* Default: false (only Streamable HTTP Transport enabled)
|
|
85
|
+
* Set to 'true' to enable backwards compatibility with older MCP clients
|
|
86
|
+
*/
|
|
87
|
+
MCP_LEGACY_SSE_ENABLED: booleanFromEnv(false),
|
|
88
|
+
/**
|
|
89
|
+
* Operate in stateless mode (no session IDs).
|
|
90
|
+
*
|
|
91
|
+
* Each request gets a fresh McpSession and SDK transport.
|
|
92
|
+
* No Mcp-Session-Id headers are set. GET and DELETE return 405.
|
|
93
|
+
*
|
|
94
|
+
* @default false (stateful mode)
|
|
95
|
+
*/
|
|
96
|
+
MCP_STATELESS: booleanFromEnv(false),
|
|
97
|
+
/**
|
|
98
|
+
* Prefer JSON responses over SSE streams for simple request-response.
|
|
99
|
+
*
|
|
100
|
+
* When enabled, the SDK returns `application/json` for non-streaming
|
|
101
|
+
* responses (e.g. tools/list, resources/list) instead of wrapping them
|
|
102
|
+
* in a `text/event-stream` SSE envelope.
|
|
103
|
+
*
|
|
104
|
+
* The MCP specification recommends: "If the server is only sending one
|
|
105
|
+
* response with no notifications, it SHOULD prefer application/json."
|
|
106
|
+
*
|
|
107
|
+
* Streaming responses (progress, notifications) always use SSE regardless.
|
|
108
|
+
*
|
|
109
|
+
* @default true (spec-compliant JSON responses)
|
|
110
|
+
*/
|
|
111
|
+
MCP_JSON_RESPONSE: booleanFromEnv(true),
|
|
112
|
+
// ==========================================================================
|
|
113
|
+
// TLS Configuration (HTTPS mode)
|
|
114
|
+
// ==========================================================================
|
|
115
|
+
/** Path to TLS certificate file (PEM format). Required when MCP_TRANSPORT='https'. */
|
|
116
|
+
MCP_TLS_CERT_PATH: z.string().min(1).optional(),
|
|
117
|
+
/** Path to TLS private key file (PEM format). Required when MCP_TRANSPORT='https'. */
|
|
118
|
+
MCP_TLS_KEY_PATH: z.string().min(1).optional(),
|
|
119
|
+
/** Path to CA certificate file (PEM format). Optional for custom CA chains. */
|
|
120
|
+
MCP_TLS_CA_PATH: z.string().min(1).optional(),
|
|
121
|
+
// ==========================================================================
|
|
122
|
+
// Security Settings
|
|
123
|
+
// ==========================================================================
|
|
124
|
+
/** Allowed hosts for DNS rebinding protection (comma-separated) */
|
|
125
|
+
MCP_ALLOWED_HOSTS: optionalCommaSeparatedList(),
|
|
126
|
+
/** Rate limit window in milliseconds (default: 900000 = 15 minutes) */
|
|
127
|
+
MCP_RATE_LIMIT_WINDOW_MS: z.coerce.number().int().min(1000).default(900000),
|
|
128
|
+
/** Maximum requests per rate limit window (default: 1000) */
|
|
129
|
+
MCP_RATE_LIMIT_MAX: z.coerce.number().int().min(100).default(1000),
|
|
130
|
+
/**
|
|
131
|
+
* Maximum request body size for `express.json()` middleware.
|
|
132
|
+
*
|
|
133
|
+
* Accepts Express size strings (e.g. `'1mb'`, `'500kb'`, `'2mb'`)
|
|
134
|
+
* or plain byte counts (e.g. `'1048576'`).
|
|
135
|
+
*
|
|
136
|
+
* Validated against the `bytes` library format used by Express/body-parser.
|
|
137
|
+
* Invalid values are rejected at config time to prevent silent limit bypass.
|
|
138
|
+
*
|
|
139
|
+
* @default '1mb'
|
|
140
|
+
*/
|
|
141
|
+
MCP_BODY_SIZE_LIMIT: z
|
|
142
|
+
.string()
|
|
143
|
+
.regex(BYTE_SIZE_REGEX, 'Invalid body size format. Use formats like "1mb", "500kb", "2gb", or a plain byte count like "1048576".')
|
|
144
|
+
.default("1mb"),
|
|
145
|
+
/**
|
|
146
|
+
* Trust proxy setting for Express.
|
|
147
|
+
*
|
|
148
|
+
* Required when running behind a reverse proxy (nginx, Traefik, cloud LB)
|
|
149
|
+
* to correctly resolve client IPs, protocol, and host from proxy headers
|
|
150
|
+
* (`X-Forwarded-For`, `X-Forwarded-Proto`, `X-Forwarded-Host`).
|
|
151
|
+
*
|
|
152
|
+
* Values:
|
|
153
|
+
* - Hop count (`'1'`, `'2'`) — Trust N hops from the front-facing proxy
|
|
154
|
+
* - Express keyword (`'loopback'`, `'linklocal'`, `'uniquelocal'`)
|
|
155
|
+
* - IP address (`'10.0.0.1'`, `'::1'`)
|
|
156
|
+
* - CIDR range (`'10.0.0.0/8'`, `'172.16.0.0/12'`)
|
|
157
|
+
* - DNS hostname (`'proxy.example.com'`) — resolved at startup
|
|
158
|
+
* - Comma-separated list (`'loopback, 10.0.0.1'`)
|
|
159
|
+
*
|
|
160
|
+
* Omit or leave unset to disable trust proxy.
|
|
161
|
+
*
|
|
162
|
+
* @see https://expressjs.com/en/guide/behind-proxies.html
|
|
163
|
+
*/
|
|
164
|
+
MCP_TRUST_PROXY: z.string().min(1).optional(),
|
|
165
|
+
/**
|
|
166
|
+
* CORS allowed origins (comma-separated).
|
|
167
|
+
*
|
|
168
|
+
* When set, the CORS middleware is mounted globally and allows requests
|
|
169
|
+
* from the listed origins. When unset, CORS is disabled (no CORS headers).
|
|
170
|
+
*
|
|
171
|
+
* Use `'*'` to allow all origins (not recommended for production).
|
|
172
|
+
*
|
|
173
|
+
* @example 'https://app.example.com,https://admin.example.com'
|
|
174
|
+
*/
|
|
175
|
+
MCP_CORS_ORIGIN: optionalCommaSeparatedList(),
|
|
176
|
+
/**
|
|
177
|
+
* Allow credentials in CORS requests (cookies, auth headers).
|
|
178
|
+
*
|
|
179
|
+
* Only effective when MCP_CORS_ORIGIN is set.
|
|
180
|
+
* Cannot be used with `origin: '*'`.
|
|
181
|
+
*
|
|
182
|
+
* @default false
|
|
183
|
+
*/
|
|
184
|
+
MCP_CORS_CREDENTIALS: booleanFromEnv(false),
|
|
185
|
+
/**
|
|
186
|
+
* Enable HTTP Strict Transport Security (HSTS) header.
|
|
187
|
+
*
|
|
188
|
+
* When true, Helmet sets `Strict-Transport-Security` with `max-age=15552000`
|
|
189
|
+
* (180 days) and `includeSubDomains`. Only enable when serving over HTTPS.
|
|
190
|
+
*
|
|
191
|
+
* @default false (managed by reverse proxy in production)
|
|
192
|
+
*/
|
|
193
|
+
MCP_HELMET_HSTS: booleanFromEnv(false),
|
|
194
|
+
/**
|
|
195
|
+
* Content Security Policy configuration.
|
|
196
|
+
*
|
|
197
|
+
* - Omit or leave unset: Helmet default CSP applies
|
|
198
|
+
* - `'false'`: Disable CSP entirely
|
|
199
|
+
* - Custom string: Used as CSP directives (e.g. `"default-src 'self'"`).
|
|
200
|
+
* Parsed as directive-name + values separated by semicolons.
|
|
201
|
+
*/
|
|
202
|
+
MCP_HELMET_CSP: z.string().min(1).optional(),
|
|
203
|
+
/**
|
|
204
|
+
* X-Frame-Options header value.
|
|
205
|
+
*
|
|
206
|
+
* Controls whether the server can be embedded in frames.
|
|
207
|
+
* - `'DENY'`: Never allow framing (most secure)
|
|
208
|
+
* - `'SAMEORIGIN'`: Allow framing from same origin
|
|
209
|
+
* - `'false'`: Disable X-Frame-Options header
|
|
210
|
+
*
|
|
211
|
+
* @default 'DENY'
|
|
212
|
+
*/
|
|
213
|
+
MCP_HELMET_FRAME_OPTIONS: z.enum(["DENY", "SAMEORIGIN", "false"]).default("DENY"),
|
|
214
|
+
// ==========================================================================
|
|
215
|
+
// Authentication
|
|
216
|
+
// ==========================================================================
|
|
217
|
+
/**
|
|
218
|
+
* Required OAuth scopes for the `/mcp` endpoint (comma-separated).
|
|
219
|
+
*
|
|
220
|
+
* When set, all requests to `/mcp` must carry tokens with these scopes.
|
|
221
|
+
* Per-tool scopes can be configured via `ToolDefinition.auth.requiredScopes`.
|
|
222
|
+
*
|
|
223
|
+
* @example 'mcp:read,mcp:write'
|
|
224
|
+
*/
|
|
225
|
+
MCP_AUTH_REQUIRED_SCOPES: optionalCommaSeparatedList(),
|
|
226
|
+
/**
|
|
227
|
+
* Protected Resource Metadata URL (RFC 9728).
|
|
228
|
+
*
|
|
229
|
+
* When set, included in `WWW-Authenticate` headers for 401 responses,
|
|
230
|
+
* allowing clients to discover the authorization server.
|
|
231
|
+
*
|
|
232
|
+
* @example 'https://api.example.com/.well-known/oauth-protected-resource'
|
|
233
|
+
*/
|
|
234
|
+
MCP_AUTH_RESOURCE_METADATA_URL: z.string().url().optional(),
|
|
235
|
+
// ==========================================================================
|
|
236
|
+
// Session Management
|
|
237
|
+
// ==========================================================================
|
|
238
|
+
/** Maximum total concurrent sessions across all transports (default: 200) */
|
|
239
|
+
MCP_MAX_SESSIONS: z.coerce.number().int().min(1).default(200),
|
|
240
|
+
/** Maximum concurrent Streamable HTTP sessions (default: 100) */
|
|
241
|
+
MCP_MAX_STREAMABLE_HTTP_SESSIONS: z.coerce.number().int().min(1).default(100),
|
|
242
|
+
/** Maximum concurrent SSE sessions (default: 50) */
|
|
243
|
+
MCP_MAX_SSE_SESSIONS: z.coerce.number().int().min(1).default(50),
|
|
244
|
+
// ==========================================================================
|
|
245
|
+
// Logging Configuration
|
|
246
|
+
// ==========================================================================
|
|
247
|
+
/** Log level (trace, debug, info, warn, error) */
|
|
248
|
+
LOG_LEVEL: z.enum(["trace", "debug", "info", "warn", "error"]).default("info"),
|
|
249
|
+
/** Log format (text, json) */
|
|
250
|
+
LOG_FORMAT: z.enum(["text", "json"]).default("text"),
|
|
251
|
+
/** Include RFC 3339 timestamps in text log output (default: false) */
|
|
252
|
+
LOG_TIMESTAMP: booleanFromEnv(false),
|
|
253
|
+
/** Include component name (e.g. [server-runtime]) in text log output (default: false) */
|
|
254
|
+
LOG_COMPONENT: booleanFromEnv(false),
|
|
255
|
+
/** Directory to store logs (optional) */
|
|
256
|
+
LOG_DIR: z.string().min(1).optional(),
|
|
257
|
+
/**
|
|
258
|
+
* Maximum size of a single log file before rotation.
|
|
259
|
+
*
|
|
260
|
+
* Accepts human-readable size strings (e.g. `'10mb'`, `'500kb'`, `'1gb'`)
|
|
261
|
+
* or plain byte counts (e.g. `'1048576'`). Parsed to bytes at config time.
|
|
262
|
+
*
|
|
263
|
+
* @default '10mb'
|
|
264
|
+
*/
|
|
265
|
+
LOG_MAX_FILE_SIZE: byteSizeSchema("10mb").pipe(z.number().int().min(1024)),
|
|
266
|
+
/** Maximum number of rotated log files to keep (default: 3) */
|
|
267
|
+
LOG_MAX_FILES: z.coerce.number().int().min(1).max(100).default(3),
|
|
268
|
+
/** Log file retention in days. Files older than this are deleted. 0 = disabled (default: 0) */
|
|
269
|
+
LOG_RETENTION_DAYS: z.coerce.number().int().min(0).default(0),
|
|
270
|
+
// ==========================================================================
|
|
271
|
+
// OpenTelemetry Configuration
|
|
272
|
+
//
|
|
273
|
+
// Standard OTEL env vars are parsed here so they can also be set via
|
|
274
|
+
// the config file. The SDK and exporters would read these from process.env
|
|
275
|
+
// natively, but routing them through the config system ensures a single
|
|
276
|
+
// source of truth and enables config-file-based setup.
|
|
277
|
+
// See: https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/
|
|
278
|
+
// ==========================================================================
|
|
279
|
+
/** Enable OpenTelemetry (default: false). Master toggle for all OTEL features. */
|
|
280
|
+
OTEL_ENABLED: booleanFromEnv(false),
|
|
281
|
+
/**
|
|
282
|
+
* OpenTelemetry service name.
|
|
283
|
+
*
|
|
284
|
+
* When not set, defaults to the MCP server name from `createServer({ name })`.
|
|
285
|
+
* Can be overridden via env var or config file to distinguish deployments
|
|
286
|
+
* (e.g. 'app-mcp-prod' vs 'app-mcp-staging').
|
|
287
|
+
*
|
|
288
|
+
* Also read natively by the SDK's resource detector via OTEL_SERVICE_NAME.
|
|
289
|
+
*/
|
|
290
|
+
OTEL_SERVICE_NAME: z.string().min(1).optional(),
|
|
291
|
+
/**
|
|
292
|
+
* OTLP exporter endpoint URL (e.g. http://localhost:4318).
|
|
293
|
+
*
|
|
294
|
+
* Used by both trace and metric OTLP exporters.
|
|
295
|
+
* Standard OTEL env var — also read natively by exporters,
|
|
296
|
+
* but parsed here to enable config file support.
|
|
297
|
+
*/
|
|
298
|
+
OTEL_EXPORTER_OTLP_ENDPOINT: z.string().url().optional(),
|
|
299
|
+
/**
|
|
300
|
+
* Trace exporter selection.
|
|
301
|
+
*
|
|
302
|
+
* Standard OTEL env var. When set, the framework builds the
|
|
303
|
+
* trace exporter explicitly instead of leaving it to SDK auto-config.
|
|
304
|
+
* Supported: 'otlp' , 'console', 'none' (default).
|
|
305
|
+
*/
|
|
306
|
+
OTEL_TRACES_EXPORTER: z.string().min(1).optional(),
|
|
307
|
+
/**
|
|
308
|
+
* Log exporter selection.
|
|
309
|
+
*
|
|
310
|
+
* Standard OTEL env var. Controls whether the NodeSDK auto-configures
|
|
311
|
+
* an OTLP log exporter. The framework uses its own logging system
|
|
312
|
+
* (see {@link Logger | framework logger}), so OTEL log export is disabled
|
|
313
|
+
* by default to prevent unwanted OTLP connections.
|
|
314
|
+
*
|
|
315
|
+
* Supported: 'otlp', 'console', 'none' (default).
|
|
316
|
+
*/
|
|
317
|
+
OTEL_LOGS_EXPORTER: z.string().default("none"),
|
|
318
|
+
/**
|
|
319
|
+
* SDK diagnostic log level.
|
|
320
|
+
*
|
|
321
|
+
* Standard OTEL env var. Activates diag logging on the OTEL SDK.
|
|
322
|
+
* Values: 'NONE', 'ERROR', 'WARN', 'INFO', 'DEBUG', 'VERBOSE', 'ALL'.
|
|
323
|
+
*/
|
|
324
|
+
OTEL_LOG_LEVEL: z.string().min(1).optional(),
|
|
325
|
+
/**
|
|
326
|
+
* Periodic metric export interval in milliseconds.
|
|
327
|
+
*
|
|
328
|
+
* Standard OTEL env var name. Controls how often PeriodicExportingMetricReader
|
|
329
|
+
* pushes metrics to the OTLP endpoint or console.
|
|
330
|
+
*/
|
|
331
|
+
OTEL_METRIC_EXPORT_INTERVAL: z.coerce.number().int().positive().optional(),
|
|
332
|
+
/**
|
|
333
|
+
* Metric exporters to activate (comma-separated).
|
|
334
|
+
*
|
|
335
|
+
* Standard OTEL env var name. Supported values:
|
|
336
|
+
* - `otlp` — Push metrics to OTLP endpoint (reads OTEL_EXPORTER_OTLP_ENDPOINT natively)
|
|
337
|
+
* - `prometheus` — Prometheus scrape endpoint at /metrics on the MCP server
|
|
338
|
+
* - `console` — Log metrics to console (useful for debugging)
|
|
339
|
+
* - `none` — Disable all metric export
|
|
340
|
+
*
|
|
341
|
+
* Default: 'otlp,prometheus' (both OTLP push + Prometheus pull)
|
|
342
|
+
*/
|
|
343
|
+
OTEL_METRICS_EXPORTER: commaSeparatedList({ lowercase: true }).default("otlp,prometheus"),
|
|
344
|
+
})
|
|
345
|
+
.superRefine((data, ctx) => {
|
|
346
|
+
// Validate TLS configuration when HTTPS mode is selected
|
|
347
|
+
// Delegates to the shared constraint validator so the same rules
|
|
348
|
+
// apply regardless of config source (env, file, programmatic).
|
|
349
|
+
const violations = validateConfigConstraints(data);
|
|
350
|
+
for (const violation of violations) {
|
|
351
|
+
ctx.addIssue({
|
|
352
|
+
code: z.ZodIssueCode.custom,
|
|
353
|
+
message: violation.message,
|
|
354
|
+
path: [...violation.path],
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
});
|
|
358
|
+
/**
|
|
359
|
+
* Validate cross-field constraints on the framework configuration.
|
|
360
|
+
*
|
|
361
|
+
* Extracted as a standalone function so it can be called:
|
|
362
|
+
* 1. By the Zod schema's `superRefine` (env-only parsing)
|
|
363
|
+
* 2. By the config cache after merging all sources (env + file + overrides)
|
|
364
|
+
*
|
|
365
|
+
* @param config - The (potentially merged) configuration to validate
|
|
366
|
+
* @returns Array of constraint violations (empty = valid)
|
|
367
|
+
*/
|
|
368
|
+
export function validateConfigConstraints(config) {
|
|
369
|
+
const violations = [];
|
|
370
|
+
// TLS constraint: HTTPS requires both cert and key paths
|
|
371
|
+
if (config.MCP_TRANSPORT === "https") {
|
|
372
|
+
if (!config.MCP_TLS_CERT_PATH) {
|
|
373
|
+
violations.push({
|
|
374
|
+
message: 'MCP_TLS_CERT_PATH is required when MCP_TRANSPORT is "https"',
|
|
375
|
+
path: ["MCP_TLS_CERT_PATH"],
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
if (!config.MCP_TLS_KEY_PATH) {
|
|
379
|
+
violations.push({
|
|
380
|
+
message: 'MCP_TLS_KEY_PATH is required when MCP_TRANSPORT is "https"',
|
|
381
|
+
path: ["MCP_TLS_KEY_PATH"],
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
// Validate TLS file existence and readability when paths are provided
|
|
385
|
+
if (config.MCP_TLS_CERT_PATH) {
|
|
386
|
+
try {
|
|
387
|
+
accessSync(config.MCP_TLS_CERT_PATH, fsConstants.R_OK);
|
|
388
|
+
}
|
|
389
|
+
catch {
|
|
390
|
+
violations.push({
|
|
391
|
+
message: `TLS certificate file not found or not readable: ${config.MCP_TLS_CERT_PATH}`,
|
|
392
|
+
path: ["MCP_TLS_CERT_PATH"],
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
if (config.MCP_TLS_KEY_PATH) {
|
|
397
|
+
try {
|
|
398
|
+
accessSync(config.MCP_TLS_KEY_PATH, fsConstants.R_OK);
|
|
399
|
+
}
|
|
400
|
+
catch {
|
|
401
|
+
violations.push({
|
|
402
|
+
message: `TLS private key file not found or not readable: ${config.MCP_TLS_KEY_PATH}`,
|
|
403
|
+
path: ["MCP_TLS_KEY_PATH"],
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
if (config.MCP_TLS_CA_PATH) {
|
|
408
|
+
try {
|
|
409
|
+
accessSync(config.MCP_TLS_CA_PATH, fsConstants.R_OK);
|
|
410
|
+
}
|
|
411
|
+
catch {
|
|
412
|
+
violations.push({
|
|
413
|
+
message: `TLS CA certificate file not found or not readable: ${config.MCP_TLS_CA_PATH}`,
|
|
414
|
+
path: ["MCP_TLS_CA_PATH"],
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
// Session limit hierarchy: transport-specific limits must not exceed the global limit
|
|
420
|
+
const transportSum = config.MCP_MAX_STREAMABLE_HTTP_SESSIONS + config.MCP_MAX_SSE_SESSIONS;
|
|
421
|
+
if (transportSum > config.MCP_MAX_SESSIONS) {
|
|
422
|
+
violations.push({
|
|
423
|
+
message: `MCP_MAX_STREAMABLE_HTTP_SESSIONS (${config.MCP_MAX_STREAMABLE_HTTP_SESSIONS}) + ` +
|
|
424
|
+
`MCP_MAX_SSE_SESSIONS (${config.MCP_MAX_SSE_SESSIONS}) = ${transportSum} exceeds ` +
|
|
425
|
+
`MCP_MAX_SESSIONS (${config.MCP_MAX_SESSIONS})`,
|
|
426
|
+
path: ["MCP_MAX_SESSIONS", "MCP_MAX_STREAMABLE_HTTP_SESSIONS", "MCP_MAX_SSE_SESSIONS"],
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
return violations;
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Parse and validate an environment source against the framework schema.
|
|
433
|
+
*
|
|
434
|
+
* @param envSource - Key-value object to parse (defaults to `process.env`)
|
|
435
|
+
* @returns Validated framework configuration
|
|
436
|
+
* @internal Used only by config-cache.ts — consumers should use `getFrameworkConfig()`
|
|
437
|
+
*/
|
|
438
|
+
export function parseFrameworkEnv(envSource = process.env) {
|
|
439
|
+
return frameworkEnvSchema.parse(envSource);
|
|
440
|
+
}
|
|
441
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Extensions
|
|
3
|
+
*
|
|
4
|
+
* Allows consumer projects to register custom config sections that
|
|
5
|
+
* are recognized during config file loading and validated with
|
|
6
|
+
* consumer-provided Zod schemas.
|
|
7
|
+
*
|
|
8
|
+
* This enables consumer-specific config file sections (e.g., `[myapp]`)
|
|
9
|
+
* without the framework warning about "unknown sections".
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { registerConfigSection, getAppConfig, z } from 'mcp-server-framework';
|
|
14
|
+
*
|
|
15
|
+
* // Register a custom section with a Zod schema
|
|
16
|
+
* registerConfigSection('myapp', z.object({
|
|
17
|
+
* url: z.string().url(),
|
|
18
|
+
* timeout_ms: z.number().int().positive().optional(),
|
|
19
|
+
* }));
|
|
20
|
+
*
|
|
21
|
+
* // After config is loaded, retrieve the validated section data
|
|
22
|
+
* const appConfig = getAppConfig<{ url: string; timeout_ms?: number }>('myapp');
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @module config/extensions
|
|
26
|
+
*/
|
|
27
|
+
import type { ZodTypeAny } from "zod";
|
|
28
|
+
/**
|
|
29
|
+
* Register a custom config section for consumer use.
|
|
30
|
+
*
|
|
31
|
+
* Must be called **before** config initialization (i.e., before the
|
|
32
|
+
* first call to `getFrameworkConfig()`). Registered sections:
|
|
33
|
+
*
|
|
34
|
+
* 1. Are recognized in config files (no "unknown section" warning)
|
|
35
|
+
* 2. Are validated against the provided Zod schema
|
|
36
|
+
* 3. Can be retrieved via `getAppConfig(name)`
|
|
37
|
+
*
|
|
38
|
+
* @param name - Section name as it appears in the config file (e.g., 'myapp')
|
|
39
|
+
* @param schema - Zod schema to validate the section data
|
|
40
|
+
* @throws {ConfigurationError} If the section name is reserved, already registered,
|
|
41
|
+
* or config has already been initialized
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* registerConfigSection('myapp', z.object({
|
|
46
|
+
* url: z.string().url(),
|
|
47
|
+
* api_key: z.string().optional(),
|
|
48
|
+
* }));
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare function registerConfigSection(name: string, schema: ZodTypeAny): void;
|
|
52
|
+
/**
|
|
53
|
+
* Retrieve the validated data for a registered config section.
|
|
54
|
+
*
|
|
55
|
+
* Returns `undefined` if:
|
|
56
|
+
* - The section was not present in the config file
|
|
57
|
+
* - Config has not been loaded yet
|
|
58
|
+
*
|
|
59
|
+
* @param name - Section name (case-insensitive)
|
|
60
|
+
* @returns The validated section data, or `undefined`
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* interface MyAppConfig {
|
|
65
|
+
* url: string;
|
|
66
|
+
* timeout_ms?: number;
|
|
67
|
+
* }
|
|
68
|
+
* const config = getAppConfig<MyAppConfig>('myapp');
|
|
69
|
+
* if (config) {
|
|
70
|
+
* console.log(config.url);
|
|
71
|
+
* }
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export declare function getAppConfig<T = unknown>(name: string): T | undefined;
|
|
75
|
+
/**
|
|
76
|
+
* Get all registered consumer section names.
|
|
77
|
+
*
|
|
78
|
+
* Used by the config file loader to recognize consumer sections
|
|
79
|
+
* and suppress "unknown section" warnings.
|
|
80
|
+
*
|
|
81
|
+
* @internal
|
|
82
|
+
*/
|
|
83
|
+
export declare function getRegisteredSectionNames(): ReadonlySet<string>;
|
|
84
|
+
/**
|
|
85
|
+
* Get the Zod schema for a registered section.
|
|
86
|
+
*
|
|
87
|
+
* @internal
|
|
88
|
+
*/
|
|
89
|
+
export declare function getRegisteredSectionSchema(name: string): ZodTypeAny | undefined;
|
|
90
|
+
/**
|
|
91
|
+
* Store validated data for a registered section.
|
|
92
|
+
*
|
|
93
|
+
* Called by the config file loader after parsing and validating
|
|
94
|
+
* a consumer section from the config file.
|
|
95
|
+
*
|
|
96
|
+
* @internal
|
|
97
|
+
*/
|
|
98
|
+
export declare function setRegisteredSectionData(name: string, data: unknown): void;
|
|
99
|
+
/**
|
|
100
|
+
* Reset all registered config sections.
|
|
101
|
+
*
|
|
102
|
+
* Intended for testing — clears all registrations and data.
|
|
103
|
+
*
|
|
104
|
+
* @internal
|
|
105
|
+
*/
|
|
106
|
+
export declare function resetConfigExtensions(): void;
|
|
107
|
+
//# sourceMappingURL=extensions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../../src/config/extensions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAmCtC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAoB5E;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,wBAAgB,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAIrE;AAMD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,IAAI,WAAW,CAAC,MAAM,CAAC,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAE/E;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAK1E;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|