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,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Session Factory
|
|
3
|
+
*
|
|
4
|
+
* Responsible for creating fully-configured MCP sessions with pre-computed
|
|
5
|
+
* capabilities and all registered primitives. Capabilities are computed once
|
|
6
|
+
* at construction time since the input data (tools, resources, prompts) is
|
|
7
|
+
* immutable after server build.
|
|
8
|
+
*
|
|
9
|
+
* Extracted from McpServerInstance to satisfy the Single Responsibility
|
|
10
|
+
* Principle — the server orchestrates lifecycle, the factory creates sessions.
|
|
11
|
+
*
|
|
12
|
+
* @module server/session/session-factory
|
|
13
|
+
*/
|
|
14
|
+
import { InMemoryTaskStore, InMemoryTaskMessageQueue, } from "@modelcontextprotocol/sdk/experimental/tasks/stores/in-memory.js";
|
|
15
|
+
import { buildCapabilities } from "../../mcp/capabilities/index.js";
|
|
16
|
+
import { McpSession } from "./mcp-session.js";
|
|
17
|
+
import { logger as frameworkLogger, mcpLogger } from "../../logger/index.js";
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// Constants
|
|
20
|
+
// ============================================================================
|
|
21
|
+
const LOG_COMPONENT = "session-factory";
|
|
22
|
+
const SessionFactoryLogMessages = {
|
|
23
|
+
FACTORY_CREATED: "Session factory created: %s v%s (%d tools, %d resources, %d prompts)",
|
|
24
|
+
SESSION_CREATED: "New MCP session created",
|
|
25
|
+
SESSION_ERROR: "MCP session error:",
|
|
26
|
+
};
|
|
27
|
+
const logger = frameworkLogger.child({ component: LOG_COMPONENT });
|
|
28
|
+
// ============================================================================
|
|
29
|
+
// Session Factory Implementation
|
|
30
|
+
// ============================================================================
|
|
31
|
+
/**
|
|
32
|
+
* Creates fully-configured MCP sessions.
|
|
33
|
+
*
|
|
34
|
+
* Capabilities are pre-computed once in the constructor since the input
|
|
35
|
+
* data is immutable after server build. Each `create()` call produces
|
|
36
|
+
* a new McpSession with all primitives registered — ready for transport
|
|
37
|
+
* connection.
|
|
38
|
+
*
|
|
39
|
+
* @internal Created by McpServerBuilder — do not instantiate directly.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* const factory = new McpSessionFactory({
|
|
44
|
+
* name: 'my-server',
|
|
45
|
+
* version: '1.0.0',
|
|
46
|
+
* tools: frozenToolArray,
|
|
47
|
+
* resources: frozenResourceArray,
|
|
48
|
+
* resourceTemplates: frozenTemplateArray,
|
|
49
|
+
* prompts: frozenPromptArray,
|
|
50
|
+
* });
|
|
51
|
+
*
|
|
52
|
+
* const session = factory.create(); // Ready for transport.connect()
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export class McpSessionFactory {
|
|
56
|
+
config;
|
|
57
|
+
/** Pre-computed SDK capabilities (immutable after construction) */
|
|
58
|
+
computedCapabilities;
|
|
59
|
+
/** Task store instance (shared across all sessions) */
|
|
60
|
+
taskStore;
|
|
61
|
+
/** Task message queue instance (shared across all sessions) */
|
|
62
|
+
taskMessageQueue;
|
|
63
|
+
constructor(config) {
|
|
64
|
+
this.config = config;
|
|
65
|
+
// Compute capabilities ONCE — input data is immutable
|
|
66
|
+
this.computedCapabilities = buildCapabilities(config.capabilities, config.tools, config.resources, config.resourceTemplates, config.prompts, config.taskTools);
|
|
67
|
+
// Auto-create InMemoryTaskStore when task tools exist but no store provided
|
|
68
|
+
this.taskStore = config.taskStore ?? (config.taskTools.length > 0 ? new InMemoryTaskStore() : undefined);
|
|
69
|
+
// Auto-create InMemoryTaskMessageQueue when task tools exist but no queue provided
|
|
70
|
+
this.taskMessageQueue =
|
|
71
|
+
config.taskMessageQueue ?? (config.taskTools.length > 0 ? new InMemoryTaskMessageQueue() : undefined);
|
|
72
|
+
logger.trace(SessionFactoryLogMessages.FACTORY_CREATED, config.name, config.version, config.tools.length, config.resources.length + config.resourceTemplates.length, config.prompts.length);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Creates a new MCP session with all registered primitives.
|
|
76
|
+
*
|
|
77
|
+
* Called once for stdio mode, or per-client for HTTP mode.
|
|
78
|
+
* Each session wraps one SDK McpServer (1:1 per MCP spec).
|
|
79
|
+
*
|
|
80
|
+
* Session lifecycle is managed by the SessionManager —
|
|
81
|
+
* this factory only creates and configures sessions.
|
|
82
|
+
*/
|
|
83
|
+
create() {
|
|
84
|
+
const session = new McpSession({
|
|
85
|
+
name: this.config.name,
|
|
86
|
+
version: this.config.version,
|
|
87
|
+
capabilities: this.computedCapabilities,
|
|
88
|
+
handlers: this.config.handlers,
|
|
89
|
+
stateless: this.config.stateless,
|
|
90
|
+
...(this.taskStore && { taskStore: this.taskStore }),
|
|
91
|
+
...(this.taskMessageQueue && { taskMessageQueue: this.taskMessageQueue }),
|
|
92
|
+
});
|
|
93
|
+
// Log session errors (lifecycle managed by SessionManager, not here)
|
|
94
|
+
session.onError((error) => {
|
|
95
|
+
logger.error(SessionFactoryLogMessages.SESSION_ERROR, error);
|
|
96
|
+
});
|
|
97
|
+
// Register all MCP primitives directly on the session
|
|
98
|
+
session.registerTools(this.config.tools);
|
|
99
|
+
session.registerResources(this.config.resources, this.config.resourceTemplates);
|
|
100
|
+
session.registerPrompts(this.config.prompts);
|
|
101
|
+
session.registerTaskTools(this.config.taskTools);
|
|
102
|
+
// Register subscription handlers when resources.subscribe capability is enabled
|
|
103
|
+
// and session is stateful (subscriptions require persistent sessions)
|
|
104
|
+
const resourceCaps = this.computedCapabilities.resources;
|
|
105
|
+
const hasSubscribe = typeof resourceCaps === "object" &&
|
|
106
|
+
resourceCaps !== null &&
|
|
107
|
+
"subscribe" in resourceCaps &&
|
|
108
|
+
// @type-narrowing — runtime checks above validate resourceCaps is a non-null object with 'subscribe'
|
|
109
|
+
resourceCaps.subscribe === true;
|
|
110
|
+
if (hasSubscribe && !this.config.stateless) {
|
|
111
|
+
session.registerSubscriptionHandlers();
|
|
112
|
+
}
|
|
113
|
+
// Register logging/setLevel handler when logging capability is enabled
|
|
114
|
+
const hasLogging = "logging" in this.computedCapabilities && this.computedCapabilities.logging != null;
|
|
115
|
+
if (hasLogging) {
|
|
116
|
+
session.registerSetLevelHandler((level) => mcpLogger.setMinLevel(level));
|
|
117
|
+
}
|
|
118
|
+
// Install scope-filtered list handlers (opt-in via auth.scopeFilterCapabilities)
|
|
119
|
+
if (this.config.scopeFilterCapabilities) {
|
|
120
|
+
session.registerScopeFilteredListHandlers({
|
|
121
|
+
tools: this.config.tools,
|
|
122
|
+
resources: this.config.resources,
|
|
123
|
+
templates: this.config.resourceTemplates,
|
|
124
|
+
prompts: this.config.prompts,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
logger.debug(SessionFactoryLogMessages.SESSION_CREATED);
|
|
128
|
+
return session;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=session-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-factory.js","sourceRoot":"","sources":["../../../src/server/session/session-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Housekeeper
|
|
3
|
+
*
|
|
4
|
+
* Background task manager for session maintenance.
|
|
5
|
+
* Handles periodic cleanup of expired sessions and heartbeat monitoring.
|
|
6
|
+
*
|
|
7
|
+
* Contains NO CRUD logic — session operations are delegated to SessionStore.
|
|
8
|
+
*
|
|
9
|
+
* @module server/session/session-housekeeper
|
|
10
|
+
*/
|
|
11
|
+
import type { SessionCloseReason } from "./session.js";
|
|
12
|
+
import type { SessionStore } from "./session-store.js";
|
|
13
|
+
/**
|
|
14
|
+
* Callback for the Housekeeper to request session closure.
|
|
15
|
+
* Implemented by SessionManager which owns the full teardown lifecycle.
|
|
16
|
+
* Returns void or Promise<void> to support async teardown.
|
|
17
|
+
*/
|
|
18
|
+
export type CloseSessionCallback = (sessionId: string, reason: SessionCloseReason) => void | Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Configuration for the session housekeeper.
|
|
21
|
+
*/
|
|
22
|
+
export interface HousekeeperConfig {
|
|
23
|
+
/** Session timeout in milliseconds (default: 30 minutes) */
|
|
24
|
+
readonly timeoutMs: number;
|
|
25
|
+
/** Cleanup interval in milliseconds (0 = disabled) */
|
|
26
|
+
readonly cleanupIntervalMs: number;
|
|
27
|
+
/** Keep-alive interval in milliseconds (0 = disabled) */
|
|
28
|
+
readonly keepAliveIntervalMs: number;
|
|
29
|
+
/** Max missed heartbeats before disconnect (default: 3) */
|
|
30
|
+
readonly maxMissedHeartbeats: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Manages periodic background tasks for session maintenance.
|
|
34
|
+
*
|
|
35
|
+
* Responsibilities:
|
|
36
|
+
* - Cleanup expired (idle) sessions at regular intervals
|
|
37
|
+
* - Send heartbeats and remove dead connections
|
|
38
|
+
*
|
|
39
|
+
* Timers are configured at construction and use `.unref()` to
|
|
40
|
+
* not prevent Node.js process exit.
|
|
41
|
+
*
|
|
42
|
+
* For stdio mode, pass `cleanupIntervalMs: 0` and `keepAliveIntervalMs: 0`
|
|
43
|
+
* to disable all background tasks.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* const housekeeper = new SessionHousekeeper(store, {
|
|
48
|
+
* timeoutMs: 30 * 60_000,
|
|
49
|
+
* cleanupIntervalMs: 60_000,
|
|
50
|
+
* keepAliveIntervalMs: 30_000,
|
|
51
|
+
* maxMissedHeartbeats: 3,
|
|
52
|
+
* });
|
|
53
|
+
*
|
|
54
|
+
* // Later during shutdown:
|
|
55
|
+
* housekeeper.dispose();
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare class SessionHousekeeper {
|
|
59
|
+
private readonly store;
|
|
60
|
+
private readonly config;
|
|
61
|
+
private readonly onCloseSession;
|
|
62
|
+
/** Cleanup interval timer */
|
|
63
|
+
private cleanupInterval;
|
|
64
|
+
/** Keep-alive interval timer */
|
|
65
|
+
private keepAliveInterval;
|
|
66
|
+
/** Whether the housekeeper is stopped */
|
|
67
|
+
private disposed;
|
|
68
|
+
constructor(store: SessionStore, config: HousekeeperConfig, onCloseSession: CloseSessionCallback);
|
|
69
|
+
/**
|
|
70
|
+
* Stops all background timers and marks as disposed.
|
|
71
|
+
*/
|
|
72
|
+
dispose(): void;
|
|
73
|
+
/**
|
|
74
|
+
* Starts cleanup and heartbeat interval timers.
|
|
75
|
+
*
|
|
76
|
+
* Timers are only started when the corresponding interval is > 0.
|
|
77
|
+
* This allows stdio mode to skip background tasks entirely.
|
|
78
|
+
* Timers use .unref() to not prevent Node.js process exit.
|
|
79
|
+
*/
|
|
80
|
+
private startTimers;
|
|
81
|
+
/**
|
|
82
|
+
* Runs a cleanup cycle to remove expired sessions.
|
|
83
|
+
*
|
|
84
|
+
* Iterates all sessions and closes those that have been idle
|
|
85
|
+
* longer than the configured timeout.
|
|
86
|
+
*/
|
|
87
|
+
private runCleanupCycle;
|
|
88
|
+
/**
|
|
89
|
+
* Runs a heartbeat cycle to check connection health.
|
|
90
|
+
*
|
|
91
|
+
* Sends heartbeats to all sessions with heartbeat-capable transports.
|
|
92
|
+
* Sessions that exceed the maximum missed heartbeats are closed.
|
|
93
|
+
*
|
|
94
|
+
* NOTE: Heartbeat state mutations (missedCount, lastSuccessAt) are synchronous
|
|
95
|
+
* within the forEach callback — no async gap between read and write.
|
|
96
|
+
* This is safe in Node.js single-threaded event loop.
|
|
97
|
+
*/
|
|
98
|
+
private runHeartbeatCycle;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=session-housekeeper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-housekeeper.d.ts","sourceRoot":"","sources":["../../../src/server/session/session-housekeeper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAM3G;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,sDAAsD;IACtD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAEnC,yDAAyD;IACzD,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IAErC,2DAA2D;IAC3D,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAwBD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,kBAAkB;IAW3B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAZjC,6BAA6B;IAC7B,OAAO,CAAC,eAAe,CAA+B;IAEtD,gCAAgC;IAChC,OAAO,CAAC,iBAAiB,CAA+B;IAExD,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAS;gBAGN,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,iBAAiB,EACzB,cAAc,EAAE,oBAAoB;IAYvD;;OAEG;IACH,OAAO,IAAI,IAAI;IAuBf;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IAoBnB;;;;;OAKG;YACW,eAAe;IAyC7B;;;;;;;;;OASG;YACW,iBAAiB;CA+DhC"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Housekeeper
|
|
3
|
+
*
|
|
4
|
+
* Background task manager for session maintenance.
|
|
5
|
+
* Handles periodic cleanup of expired sessions and heartbeat monitoring.
|
|
6
|
+
*
|
|
7
|
+
* Contains NO CRUD logic — session operations are delegated to SessionStore.
|
|
8
|
+
*
|
|
9
|
+
* @module server/session/session-housekeeper
|
|
10
|
+
*/
|
|
11
|
+
import { logger as baseLogger } from "../../logger/index.js";
|
|
12
|
+
import { isHeartbeatCapable } from "../transport/transport-context.js";
|
|
13
|
+
import { SESSION_STATES, SESSION_CLOSE_REASONS } from "./session.js";
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Constants
|
|
16
|
+
// ============================================================================
|
|
17
|
+
const LOG_COMPONENT = "session-housekeeper";
|
|
18
|
+
const LogMessages = {
|
|
19
|
+
STARTED: "Housekeeper started (timeout=%dmin, cleanup=%ds, heartbeat=%ds)",
|
|
20
|
+
SESSION_EXPIRED: "Session expired: %s (idle=%dms)",
|
|
21
|
+
SESSION_HEARTBEAT_FAILED: "Session heartbeat failed: %s (missed=%d)",
|
|
22
|
+
SESSION_CLOSE_ERROR: "Error closing session %s during %s: %s",
|
|
23
|
+
CLEANUP_CYCLE: "Cleanup cycle: expired=%d remaining=%d",
|
|
24
|
+
HEARTBEAT_CYCLE: "Heartbeat cycle: success=%d failed=%d removed=%d",
|
|
25
|
+
DISPOSED: "Housekeeper disposed",
|
|
26
|
+
};
|
|
27
|
+
const logger = baseLogger.child({ component: LOG_COMPONENT });
|
|
28
|
+
// ============================================================================
|
|
29
|
+
// Session Housekeeper
|
|
30
|
+
// ============================================================================
|
|
31
|
+
/**
|
|
32
|
+
* Manages periodic background tasks for session maintenance.
|
|
33
|
+
*
|
|
34
|
+
* Responsibilities:
|
|
35
|
+
* - Cleanup expired (idle) sessions at regular intervals
|
|
36
|
+
* - Send heartbeats and remove dead connections
|
|
37
|
+
*
|
|
38
|
+
* Timers are configured at construction and use `.unref()` to
|
|
39
|
+
* not prevent Node.js process exit.
|
|
40
|
+
*
|
|
41
|
+
* For stdio mode, pass `cleanupIntervalMs: 0` and `keepAliveIntervalMs: 0`
|
|
42
|
+
* to disable all background tasks.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* const housekeeper = new SessionHousekeeper(store, {
|
|
47
|
+
* timeoutMs: 30 * 60_000,
|
|
48
|
+
* cleanupIntervalMs: 60_000,
|
|
49
|
+
* keepAliveIntervalMs: 30_000,
|
|
50
|
+
* maxMissedHeartbeats: 3,
|
|
51
|
+
* });
|
|
52
|
+
*
|
|
53
|
+
* // Later during shutdown:
|
|
54
|
+
* housekeeper.dispose();
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export class SessionHousekeeper {
|
|
58
|
+
store;
|
|
59
|
+
config;
|
|
60
|
+
onCloseSession;
|
|
61
|
+
/** Cleanup interval timer */
|
|
62
|
+
cleanupInterval = null;
|
|
63
|
+
/** Keep-alive interval timer */
|
|
64
|
+
keepAliveInterval = null;
|
|
65
|
+
/** Whether the housekeeper is stopped */
|
|
66
|
+
disposed = false;
|
|
67
|
+
constructor(store, config, onCloseSession) {
|
|
68
|
+
this.store = store;
|
|
69
|
+
this.config = config;
|
|
70
|
+
this.onCloseSession = onCloseSession;
|
|
71
|
+
this.startTimers();
|
|
72
|
+
logger.trace(LogMessages.STARTED, Math.round(this.config.timeoutMs / 60000), Math.round(this.config.cleanupIntervalMs / 1000), Math.round(this.config.keepAliveIntervalMs / 1000));
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Stops all background timers and marks as disposed.
|
|
76
|
+
*/
|
|
77
|
+
dispose() {
|
|
78
|
+
if (this.disposed) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
this.disposed = true;
|
|
82
|
+
if (this.cleanupInterval) {
|
|
83
|
+
clearInterval(this.cleanupInterval);
|
|
84
|
+
this.cleanupInterval = null;
|
|
85
|
+
}
|
|
86
|
+
if (this.keepAliveInterval) {
|
|
87
|
+
clearInterval(this.keepAliveInterval);
|
|
88
|
+
this.keepAliveInterval = null;
|
|
89
|
+
}
|
|
90
|
+
logger.trace(LogMessages.DISPOSED);
|
|
91
|
+
}
|
|
92
|
+
// ==========================================================================
|
|
93
|
+
// Timer Management
|
|
94
|
+
// ==========================================================================
|
|
95
|
+
/**
|
|
96
|
+
* Starts cleanup and heartbeat interval timers.
|
|
97
|
+
*
|
|
98
|
+
* Timers are only started when the corresponding interval is > 0.
|
|
99
|
+
* This allows stdio mode to skip background tasks entirely.
|
|
100
|
+
* Timers use .unref() to not prevent Node.js process exit.
|
|
101
|
+
*/
|
|
102
|
+
startTimers() {
|
|
103
|
+
if (this.config.cleanupIntervalMs > 0) {
|
|
104
|
+
this.cleanupInterval = setInterval(() => {
|
|
105
|
+
void this.runCleanupCycle();
|
|
106
|
+
}, this.config.cleanupIntervalMs);
|
|
107
|
+
this.cleanupInterval.unref();
|
|
108
|
+
}
|
|
109
|
+
if (this.config.keepAliveIntervalMs > 0) {
|
|
110
|
+
this.keepAliveInterval = setInterval(() => {
|
|
111
|
+
void this.runHeartbeatCycle();
|
|
112
|
+
}, this.config.keepAliveIntervalMs);
|
|
113
|
+
this.keepAliveInterval.unref();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// ==========================================================================
|
|
117
|
+
// Cleanup Cycle
|
|
118
|
+
// ==========================================================================
|
|
119
|
+
/**
|
|
120
|
+
* Runs a cleanup cycle to remove expired sessions.
|
|
121
|
+
*
|
|
122
|
+
* Iterates all sessions and closes those that have been idle
|
|
123
|
+
* longer than the configured timeout.
|
|
124
|
+
*/
|
|
125
|
+
async runCleanupCycle() {
|
|
126
|
+
if (this.disposed) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const now = Date.now();
|
|
130
|
+
const expiredIds = [];
|
|
131
|
+
this.store.forEach((session) => {
|
|
132
|
+
if (session.state !== SESSION_STATES.ACTIVE) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const idleTime = now - session.metadata.lastActivityAt.getTime();
|
|
136
|
+
if (idleTime > this.config.timeoutMs) {
|
|
137
|
+
expiredIds.push(session.id);
|
|
138
|
+
logger.debug(LogMessages.SESSION_EXPIRED, session.id, idleTime);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
const results = await Promise.allSettled(expiredIds.map((sessionId) => Promise.resolve(this.onCloseSession(sessionId, SESSION_CLOSE_REASONS.TIMEOUT))));
|
|
142
|
+
for (let i = 0; i < results.length; i++) {
|
|
143
|
+
if (results[i]?.status === "rejected") {
|
|
144
|
+
// @ts-limitation — TS narrows status to 'rejected' but not the union discriminant on results[i]
|
|
145
|
+
const reason = results[i].reason;
|
|
146
|
+
logger.warn(LogMessages.SESSION_CLOSE_ERROR, expiredIds[i], "cleanup", String(reason));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (expiredIds.length > 0) {
|
|
150
|
+
logger.trace(LogMessages.CLEANUP_CYCLE, expiredIds.length, this.store.size);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// ==========================================================================
|
|
154
|
+
// Heartbeat Cycle
|
|
155
|
+
// ==========================================================================
|
|
156
|
+
/**
|
|
157
|
+
* Runs a heartbeat cycle to check connection health.
|
|
158
|
+
*
|
|
159
|
+
* Sends heartbeats to all sessions with heartbeat-capable transports.
|
|
160
|
+
* Sessions that exceed the maximum missed heartbeats are closed.
|
|
161
|
+
*
|
|
162
|
+
* NOTE: Heartbeat state mutations (missedCount, lastSuccessAt) are synchronous
|
|
163
|
+
* within the forEach callback — no async gap between read and write.
|
|
164
|
+
* This is safe in Node.js single-threaded event loop.
|
|
165
|
+
*/
|
|
166
|
+
async runHeartbeatCycle() {
|
|
167
|
+
if (this.disposed) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
let successCount = 0;
|
|
171
|
+
let failedCount = 0;
|
|
172
|
+
const toRemove = [];
|
|
173
|
+
this.store.forEach((session) => {
|
|
174
|
+
if (session.state !== SESSION_STATES.ACTIVE) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
const transport = session.transport.instance;
|
|
178
|
+
if (!isHeartbeatCapable(transport)) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
const success = transport.sendHeartbeat();
|
|
182
|
+
if (success) {
|
|
183
|
+
successCount++;
|
|
184
|
+
session.metadata.lastActivityAt = new Date();
|
|
185
|
+
session.transport.heartbeat = {
|
|
186
|
+
...session.transport.heartbeat,
|
|
187
|
+
missedCount: 0,
|
|
188
|
+
lastSuccessAt: new Date(),
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
failedCount++;
|
|
193
|
+
const newMissedCount = session.transport.heartbeat.missedCount + 1;
|
|
194
|
+
session.transport.heartbeat = {
|
|
195
|
+
...session.transport.heartbeat,
|
|
196
|
+
missedCount: newMissedCount,
|
|
197
|
+
};
|
|
198
|
+
if (newMissedCount >= this.config.maxMissedHeartbeats) {
|
|
199
|
+
toRemove.push(session.id);
|
|
200
|
+
logger.debug(LogMessages.SESSION_HEARTBEAT_FAILED, session.id, newMissedCount);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
const results = await Promise.allSettled(toRemove.map((sessionId) => Promise.resolve(this.onCloseSession(sessionId, SESSION_CLOSE_REASONS.HEARTBEAT_FAILURE))));
|
|
205
|
+
for (let i = 0; i < results.length; i++) {
|
|
206
|
+
if (results[i]?.status === "rejected") {
|
|
207
|
+
// @ts-limitation — TS narrows status to 'rejected' but not the union discriminant on results[i]
|
|
208
|
+
const reason = results[i].reason;
|
|
209
|
+
logger.warn(LogMessages.SESSION_CLOSE_ERROR, toRemove[i], "heartbeat", String(reason));
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
if (successCount > 0 || failedCount > 0) {
|
|
213
|
+
logger.trace(LogMessages.HEARTBEAT_CYCLE, successCount, failedCount, toRemove.length);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=session-housekeeper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-housekeeper.js","sourceRoot":"","sources":["../../../src/server/session/session-housekeeper.ts"],"names":[],"mappings":"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"}
|