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,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Manager
|
|
3
|
+
*
|
|
4
|
+
* Facade over SessionStore (CRUD) and SessionHousekeeper (timers).
|
|
5
|
+
* Provides the unified SessionManager interface to consumers.
|
|
6
|
+
*
|
|
7
|
+
* The SessionManager interface is the public contract — consumers
|
|
8
|
+
* never interact with Store or Housekeeper directly.
|
|
9
|
+
*
|
|
10
|
+
* @module server/session/session-manager
|
|
11
|
+
*/
|
|
12
|
+
import type { TransportType } from "../transport/transport-context.js";
|
|
13
|
+
import type { Session, ReadonlySession, SessionCloseReason, CreateSessionOptions } from "./session.js";
|
|
14
|
+
import type { SessionStore, SessionStats } from "./session-store.js";
|
|
15
|
+
/**
|
|
16
|
+
* Configuration for session management.
|
|
17
|
+
*/
|
|
18
|
+
export interface SessionConfig {
|
|
19
|
+
/** Session timeout in milliseconds (default: 30 minutes) */
|
|
20
|
+
readonly timeoutMs: number;
|
|
21
|
+
/** Cleanup interval in milliseconds (default: 60 seconds) */
|
|
22
|
+
readonly cleanupIntervalMs: number;
|
|
23
|
+
/** Keep-alive interval in milliseconds (default: 30 seconds) */
|
|
24
|
+
readonly keepAliveIntervalMs: number;
|
|
25
|
+
/** Max missed heartbeats before disconnect (default: 3) */
|
|
26
|
+
readonly maxMissedHeartbeats: number;
|
|
27
|
+
/** Maximum total concurrent sessions across all transports (default: 200) */
|
|
28
|
+
readonly maxSessions: number;
|
|
29
|
+
/** Maximum concurrent Streamable HTTP sessions (default: 100) */
|
|
30
|
+
readonly maxStreamableHttpSessions: number;
|
|
31
|
+
/** Maximum concurrent SSE sessions (default: 50) */
|
|
32
|
+
readonly maxSseSessions: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Partial config for user overrides.
|
|
36
|
+
*/
|
|
37
|
+
export type SessionConfigInput = Partial<SessionConfig> & {
|
|
38
|
+
/** Optional lifecycle hooks for client connect/disconnect events */
|
|
39
|
+
readonly lifecycle?: SessionLifecycleHooks | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Custom session store implementation.
|
|
42
|
+
*
|
|
43
|
+
* When provided, replaces the built-in {@link InMemorySessionStore}.
|
|
44
|
+
* Useful for horizontal scaling with Redis, PostgreSQL, or another
|
|
45
|
+
* shared backend.
|
|
46
|
+
*
|
|
47
|
+
* The store must implement the {@link SessionStore} interface.
|
|
48
|
+
*/
|
|
49
|
+
readonly store?: SessionStore | undefined;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Lifecycle hooks for session-level events.
|
|
53
|
+
*
|
|
54
|
+
* These hooks are called by the SessionManager when sessions are
|
|
55
|
+
* created or closed, enabling connection tracking in consumer code.
|
|
56
|
+
*/
|
|
57
|
+
export interface SessionLifecycleHooks {
|
|
58
|
+
/** Called after a new session is successfully created */
|
|
59
|
+
readonly onClientConnected?: ((sessionId: string) => void | Promise<void>) | undefined;
|
|
60
|
+
/** Called after a session is closed and cleaned up */
|
|
61
|
+
readonly onClientDisconnected?: ((sessionId: string) => void | Promise<void>) | undefined;
|
|
62
|
+
}
|
|
63
|
+
export type { SessionStats } from "./session-store.js";
|
|
64
|
+
/**
|
|
65
|
+
* Interface for managing sessions.
|
|
66
|
+
*
|
|
67
|
+
* Provides unified session lifecycle management for all transport types.
|
|
68
|
+
* Supports heartbeat monitoring, automatic cleanup, and broadcasting.
|
|
69
|
+
*/
|
|
70
|
+
export interface SessionManager {
|
|
71
|
+
/** Number of active sessions */
|
|
72
|
+
readonly size: number;
|
|
73
|
+
/** Current statistics */
|
|
74
|
+
readonly stats: SessionStats;
|
|
75
|
+
/**
|
|
76
|
+
* Creates and registers a new session.
|
|
77
|
+
*
|
|
78
|
+
* @param options - Session creation options
|
|
79
|
+
* @returns The created session, or undefined if at capacity
|
|
80
|
+
*/
|
|
81
|
+
create(options: CreateSessionOptions): Session | undefined;
|
|
82
|
+
/**
|
|
83
|
+
* Gets a session by ID.
|
|
84
|
+
* Does NOT update activity time (use touch() for that).
|
|
85
|
+
*
|
|
86
|
+
* @param sessionId - Session identifier
|
|
87
|
+
* @returns The session if found and active
|
|
88
|
+
*/
|
|
89
|
+
get(sessionId: string): Session | undefined;
|
|
90
|
+
/**
|
|
91
|
+
* Checks if a session exists and is active.
|
|
92
|
+
*
|
|
93
|
+
* @param sessionId - Session identifier
|
|
94
|
+
*/
|
|
95
|
+
has(sessionId: string): boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Updates the last activity time for a session.
|
|
98
|
+
* Also resets missed heartbeat count.
|
|
99
|
+
*
|
|
100
|
+
* @param sessionId - Session identifier
|
|
101
|
+
* @returns true if session was touched
|
|
102
|
+
*/
|
|
103
|
+
touch(sessionId: string): boolean;
|
|
104
|
+
/**
|
|
105
|
+
* Checks if there's capacity for new sessions.
|
|
106
|
+
*/
|
|
107
|
+
hasCapacity(): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Checks if there's capacity for a specific transport type.
|
|
110
|
+
* Enforces per-transport limits (e.g., maxStreamableHttpSessions, maxSseSessions).
|
|
111
|
+
*
|
|
112
|
+
* @param transportType - The transport type to check capacity for
|
|
113
|
+
*/
|
|
114
|
+
hasCapacityForTransport(transportType: TransportType): boolean;
|
|
115
|
+
/**
|
|
116
|
+
* Closes and removes a specific session.
|
|
117
|
+
*
|
|
118
|
+
* @param sessionId - Session identifier
|
|
119
|
+
* @param reason - Reason for closure
|
|
120
|
+
*/
|
|
121
|
+
close(sessionId: string, reason: SessionCloseReason): Promise<void>;
|
|
122
|
+
/**
|
|
123
|
+
* Closes all sessions during shutdown.
|
|
124
|
+
*/
|
|
125
|
+
closeAll(): Promise<void>;
|
|
126
|
+
/**
|
|
127
|
+
* Broadcasts tool list changed notification to all sessions.
|
|
128
|
+
* Called when dynamic tools are added/removed.
|
|
129
|
+
*/
|
|
130
|
+
broadcastToolListChanged(): void;
|
|
131
|
+
/**
|
|
132
|
+
* Broadcasts resource list changed notification to all sessions.
|
|
133
|
+
* Called when dynamic resources are added/removed.
|
|
134
|
+
*/
|
|
135
|
+
broadcastResourceListChanged(): void;
|
|
136
|
+
/**
|
|
137
|
+
* Broadcasts prompt list changed notification to all sessions.
|
|
138
|
+
* Called when dynamic prompts are added/removed.
|
|
139
|
+
*/
|
|
140
|
+
broadcastPromptListChanged(): void;
|
|
141
|
+
/**
|
|
142
|
+
* Sends a resource updated notification to sessions subscribed to the given URI.
|
|
143
|
+
*
|
|
144
|
+
* Only sessions that have called `resources/subscribe` for this URI receive
|
|
145
|
+
* the `notifications/resources/updated` notification.
|
|
146
|
+
*/
|
|
147
|
+
broadcastResourceUpdated(uri: string): void;
|
|
148
|
+
/**
|
|
149
|
+
* Iterates over all active sessions.
|
|
150
|
+
*
|
|
151
|
+
* @param callback - Function to call for each session
|
|
152
|
+
*/
|
|
153
|
+
forEach(callback: (session: ReadonlySession, sessionId: string) => void): void;
|
|
154
|
+
/**
|
|
155
|
+
* Finds sessions matching a predicate.
|
|
156
|
+
*
|
|
157
|
+
* @param predicate - Filter function
|
|
158
|
+
* @returns Array of matching sessions
|
|
159
|
+
*/
|
|
160
|
+
filter(predicate: (session: ReadonlySession) => boolean): ReadonlySession[];
|
|
161
|
+
/**
|
|
162
|
+
* Gets all sessions of a specific transport type.
|
|
163
|
+
*
|
|
164
|
+
* @param type - Transport type to filter by
|
|
165
|
+
*/
|
|
166
|
+
getByTransportType(type: TransportType): ReadonlySession[];
|
|
167
|
+
/**
|
|
168
|
+
* Disposes of the manager and stops background tasks.
|
|
169
|
+
*/
|
|
170
|
+
dispose(): void;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Facade implementation of SessionManager.
|
|
174
|
+
*
|
|
175
|
+
* Delegates to:
|
|
176
|
+
* - {@link SessionStore} for CRUD operations, queries, and broadcasting
|
|
177
|
+
* - {@link SessionHousekeeper} for background cleanup and heartbeat monitoring
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```typescript
|
|
181
|
+
* // HTTP mode — full background tasks
|
|
182
|
+
* const manager = new SessionManagerImpl();
|
|
183
|
+
*
|
|
184
|
+
* // Stdio mode — no background tasks
|
|
185
|
+
* const manager = new SessionManagerImpl({
|
|
186
|
+
* cleanupIntervalMs: 0,
|
|
187
|
+
* keepAliveIntervalMs: 0,
|
|
188
|
+
* maxSessions: 1,
|
|
189
|
+
* });
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
192
|
+
export declare class SessionManagerImpl implements SessionManager {
|
|
193
|
+
private readonly store;
|
|
194
|
+
private readonly housekeeper;
|
|
195
|
+
private readonly config;
|
|
196
|
+
private readonly lifecycle?;
|
|
197
|
+
constructor(config?: SessionConfigInput);
|
|
198
|
+
get size(): number;
|
|
199
|
+
get stats(): SessionStats;
|
|
200
|
+
create(options: CreateSessionOptions): Session | undefined;
|
|
201
|
+
get(sessionId: string): Session | undefined;
|
|
202
|
+
has(sessionId: string): boolean;
|
|
203
|
+
touch(sessionId: string): boolean;
|
|
204
|
+
hasCapacity(): boolean;
|
|
205
|
+
/**
|
|
206
|
+
* Checks if there's capacity for a specific transport type.
|
|
207
|
+
* Enforces per-transport limits from config.
|
|
208
|
+
*/
|
|
209
|
+
hasCapacityForTransport(transportType: TransportType): boolean;
|
|
210
|
+
close(sessionId: string, reason: SessionCloseReason): Promise<void>;
|
|
211
|
+
closeAll(): Promise<void>;
|
|
212
|
+
dispose(): void;
|
|
213
|
+
forEach(callback: (session: ReadonlySession, sessionId: string) => void): void;
|
|
214
|
+
filter(predicate: (session: ReadonlySession) => boolean): ReadonlySession[];
|
|
215
|
+
getByTransportType(type: TransportType): ReadonlySession[];
|
|
216
|
+
broadcastToolListChanged(): void;
|
|
217
|
+
broadcastResourceListChanged(): void;
|
|
218
|
+
broadcastPromptListChanged(): void;
|
|
219
|
+
broadcastResourceUpdated(uri: string): void;
|
|
220
|
+
/**
|
|
221
|
+
* Invokes a lifecycle hook with error logging.
|
|
222
|
+
* Hook errors are logged as warnings but never propagated.
|
|
223
|
+
* Async hooks are awaited so shutdown waits for consumer cleanup.
|
|
224
|
+
*/
|
|
225
|
+
private invokeLifecycleHook;
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=session-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../../src/server/session/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Manager
|
|
3
|
+
*
|
|
4
|
+
* Facade over SessionStore (CRUD) and SessionHousekeeper (timers).
|
|
5
|
+
* Provides the unified SessionManager interface to consumers.
|
|
6
|
+
*
|
|
7
|
+
* The SessionManager interface is the public contract — consumers
|
|
8
|
+
* never interact with Store or Housekeeper directly.
|
|
9
|
+
*
|
|
10
|
+
* @module server/session/session-manager
|
|
11
|
+
*/
|
|
12
|
+
import { getFrameworkConfig } from "../../config/index.js";
|
|
13
|
+
import { logger as baseLogger, mcpLogger } from "../../logger/index.js";
|
|
14
|
+
import { getServerMetrics } from "../../telemetry/index.js";
|
|
15
|
+
import { InMemorySessionStore } from "./in-memory-store.js";
|
|
16
|
+
import { SessionHousekeeper } from "./session-housekeeper.js";
|
|
17
|
+
import { SESSION_STATES } from "./session.js";
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// Constants
|
|
20
|
+
// ============================================================================
|
|
21
|
+
const LOG_COMPONENT = "session-manager";
|
|
22
|
+
const LogMessages = {
|
|
23
|
+
MANAGER_STARTED: "Session manager started (timeout=%dmin, cleanup=%ds, heartbeat=%ds)",
|
|
24
|
+
SESSION_CREATED: "Session created: id=%s, transport=%s",
|
|
25
|
+
SESSION_CAPACITY_FULL: "Session capacity reached — rejecting new session (%d/%d)",
|
|
26
|
+
SESSION_CLOSED: "Session closed: id=%s, reason=%s",
|
|
27
|
+
CLOSING_ALL: "Closing all sessions (%d active)",
|
|
28
|
+
MANAGER_DISPOSED: "Session manager disposed",
|
|
29
|
+
BROADCAST_TOOL_LIST: "Broadcasting tool list changed to %d session(s)",
|
|
30
|
+
BROADCAST_RESOURCE_LIST: "Broadcasting resource list changed to %d session(s)",
|
|
31
|
+
BROADCAST_PROMPT_LIST: "Broadcasting prompt list changed to %d session(s)",
|
|
32
|
+
TRANSPORT_CLOSE_ERROR: "Error closing transport for session %s",
|
|
33
|
+
SESSION_DISPOSE_ERROR: "Error disposing MCP session %s",
|
|
34
|
+
LIFECYCLE_HOOK_ERROR: "Lifecycle hook %s failed for session %s: %s",
|
|
35
|
+
CLOSE_ALL_COMPLETE: "All sessions closed (%d sessions torn down)",
|
|
36
|
+
SESSION_TRANSPORT_LIMIT: "Session limit reached for transport %s: %d/%d",
|
|
37
|
+
};
|
|
38
|
+
const logger = baseLogger.child({ component: LOG_COMPONENT });
|
|
39
|
+
// ============================================================================
|
|
40
|
+
// Default Configuration
|
|
41
|
+
// ============================================================================
|
|
42
|
+
/**
|
|
43
|
+
* Default session timing values.
|
|
44
|
+
*
|
|
45
|
+
* These are hardcoded defaults — session timing is only configurable
|
|
46
|
+
* via the programmatic API (`SessionConfigOptions`), not via
|
|
47
|
+
* environment variables or config files.
|
|
48
|
+
*/
|
|
49
|
+
const SESSION_TIMING_DEFAULTS = {
|
|
50
|
+
TIMEOUT_MS: 1_800_000, // 30 minutes
|
|
51
|
+
CLEANUP_INTERVAL_MS: 60_000, // 1 minute
|
|
52
|
+
KEEP_ALIVE_INTERVAL_MS: 30_000, // 30 seconds
|
|
53
|
+
MAX_MISSED_HEARTBEATS: 3,
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Creates the default session configuration.
|
|
57
|
+
*
|
|
58
|
+
* Timing values use hardcoded defaults (configurable only programmatically).
|
|
59
|
+
* Session limits are read from `getFrameworkConfig()` which respects all
|
|
60
|
+
* config sources: Zod defaults → .env → env vars → config file → overrides.
|
|
61
|
+
*/
|
|
62
|
+
function createDefaultConfig() {
|
|
63
|
+
const config = getFrameworkConfig();
|
|
64
|
+
return {
|
|
65
|
+
timeoutMs: SESSION_TIMING_DEFAULTS.TIMEOUT_MS,
|
|
66
|
+
cleanupIntervalMs: SESSION_TIMING_DEFAULTS.CLEANUP_INTERVAL_MS,
|
|
67
|
+
keepAliveIntervalMs: SESSION_TIMING_DEFAULTS.KEEP_ALIVE_INTERVAL_MS,
|
|
68
|
+
maxMissedHeartbeats: SESSION_TIMING_DEFAULTS.MAX_MISSED_HEARTBEATS,
|
|
69
|
+
maxSessions: config.MCP_MAX_SESSIONS,
|
|
70
|
+
maxStreamableHttpSessions: config.MCP_MAX_STREAMABLE_HTTP_SESSIONS,
|
|
71
|
+
maxSseSessions: config.MCP_MAX_SSE_SESSIONS,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
// ============================================================================
|
|
75
|
+
// Implementation (Facade)
|
|
76
|
+
// ============================================================================
|
|
77
|
+
/**
|
|
78
|
+
* Facade implementation of SessionManager.
|
|
79
|
+
*
|
|
80
|
+
* Delegates to:
|
|
81
|
+
* - {@link SessionStore} for CRUD operations, queries, and broadcasting
|
|
82
|
+
* - {@link SessionHousekeeper} for background cleanup and heartbeat monitoring
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* // HTTP mode — full background tasks
|
|
87
|
+
* const manager = new SessionManagerImpl();
|
|
88
|
+
*
|
|
89
|
+
* // Stdio mode — no background tasks
|
|
90
|
+
* const manager = new SessionManagerImpl({
|
|
91
|
+
* cleanupIntervalMs: 0,
|
|
92
|
+
* keepAliveIntervalMs: 0,
|
|
93
|
+
* maxSessions: 1,
|
|
94
|
+
* });
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
export class SessionManagerImpl {
|
|
98
|
+
store;
|
|
99
|
+
housekeeper;
|
|
100
|
+
config;
|
|
101
|
+
lifecycle;
|
|
102
|
+
constructor(config) {
|
|
103
|
+
const { lifecycle, store, ...configOverrides } = config ?? {};
|
|
104
|
+
const defaults = createDefaultConfig();
|
|
105
|
+
this.config = { ...defaults, ...configOverrides };
|
|
106
|
+
this.lifecycle = lifecycle;
|
|
107
|
+
this.store = store ?? new InMemorySessionStore(this.config.maxSessions);
|
|
108
|
+
this.housekeeper = new SessionHousekeeper(this.store, {
|
|
109
|
+
timeoutMs: this.config.timeoutMs,
|
|
110
|
+
cleanupIntervalMs: this.config.cleanupIntervalMs,
|
|
111
|
+
keepAliveIntervalMs: this.config.keepAliveIntervalMs,
|
|
112
|
+
maxMissedHeartbeats: this.config.maxMissedHeartbeats,
|
|
113
|
+
}, (sessionId, reason) => this.close(sessionId, reason));
|
|
114
|
+
logger.trace(LogMessages.MANAGER_STARTED, Math.round(this.config.timeoutMs / 60000), Math.round(this.config.cleanupIntervalMs / 1000), Math.round(this.config.keepAliveIntervalMs / 1000));
|
|
115
|
+
}
|
|
116
|
+
// ==========================================================================
|
|
117
|
+
// Delegated Properties
|
|
118
|
+
// ==========================================================================
|
|
119
|
+
get size() {
|
|
120
|
+
return this.store.size;
|
|
121
|
+
}
|
|
122
|
+
get stats() {
|
|
123
|
+
return this.store.stats;
|
|
124
|
+
}
|
|
125
|
+
// ==========================================================================
|
|
126
|
+
// Delegated CRUD
|
|
127
|
+
// ==========================================================================
|
|
128
|
+
create(options) {
|
|
129
|
+
// Check per-transport limits before delegating to store
|
|
130
|
+
if (!this.hasCapacityForTransport(options.transportType)) {
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
const session = this.store.create(options);
|
|
134
|
+
if (session) {
|
|
135
|
+
mcpLogger.addHandler(session.mcpSession);
|
|
136
|
+
getServerMetrics().recordSessionChange(session.transport.type, 1);
|
|
137
|
+
logger.debug(LogMessages.SESSION_CREATED, session.id, session.transport.type);
|
|
138
|
+
void this.invokeLifecycleHook("onClientConnected", session.id, () => this.lifecycle?.onClientConnected?.(session.id));
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
logger.info(LogMessages.SESSION_CAPACITY_FULL, this.store.size, this.config.maxSessions);
|
|
142
|
+
}
|
|
143
|
+
return session;
|
|
144
|
+
}
|
|
145
|
+
get(sessionId) {
|
|
146
|
+
return this.store.get(sessionId);
|
|
147
|
+
}
|
|
148
|
+
has(sessionId) {
|
|
149
|
+
return this.store.has(sessionId);
|
|
150
|
+
}
|
|
151
|
+
touch(sessionId) {
|
|
152
|
+
return this.store.touch(sessionId);
|
|
153
|
+
}
|
|
154
|
+
hasCapacity() {
|
|
155
|
+
return this.store.hasCapacity();
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Checks if there's capacity for a specific transport type.
|
|
159
|
+
* Enforces per-transport limits from config.
|
|
160
|
+
*/
|
|
161
|
+
hasCapacityForTransport(transportType) {
|
|
162
|
+
if (transportType === "http" || transportType === "https") {
|
|
163
|
+
const count = this.store.getByTransportType("http").length + this.store.getByTransportType("https").length;
|
|
164
|
+
if (count >= this.config.maxStreamableHttpSessions) {
|
|
165
|
+
logger.warn(LogMessages.SESSION_TRANSPORT_LIMIT, "streamable-http", count, this.config.maxStreamableHttpSessions);
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
else if (transportType === "sse") {
|
|
170
|
+
const count = this.store.getByTransportType("sse").length;
|
|
171
|
+
if (count >= this.config.maxSseSessions) {
|
|
172
|
+
logger.warn(LogMessages.SESSION_TRANSPORT_LIMIT, "sse", count, this.config.maxSseSessions);
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// stdio has no per-transport limit
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
// ==========================================================================
|
|
180
|
+
// Lifecycle (Manager owns I/O teardown)
|
|
181
|
+
// ==========================================================================
|
|
182
|
+
async close(sessionId, reason) {
|
|
183
|
+
const session = this.store.remove(sessionId, reason);
|
|
184
|
+
if (!session) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
getServerMetrics().recordSessionChange(session.transport.type, -1);
|
|
188
|
+
mcpLogger.removeHandler(session.mcpSession);
|
|
189
|
+
logger.debug(LogMessages.SESSION_CLOSED, sessionId, reason);
|
|
190
|
+
try {
|
|
191
|
+
await session.transport.instance.close();
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
logger.warn(LogMessages.TRANSPORT_CLOSE_ERROR, sessionId, { error });
|
|
195
|
+
}
|
|
196
|
+
try {
|
|
197
|
+
await session.mcpSession.dispose();
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
logger.warn(LogMessages.SESSION_DISPOSE_ERROR, sessionId, { error });
|
|
201
|
+
}
|
|
202
|
+
session.state = SESSION_STATES.CLOSED;
|
|
203
|
+
await this.invokeLifecycleHook("onClientDisconnected", sessionId, () => this.lifecycle?.onClientDisconnected?.(sessionId));
|
|
204
|
+
}
|
|
205
|
+
async closeAll() {
|
|
206
|
+
const sessions = this.store.removeAll();
|
|
207
|
+
logger.info(LogMessages.CLOSING_ALL, sessions.length);
|
|
208
|
+
const teardownPromises = sessions.map(async (session) => {
|
|
209
|
+
getServerMetrics().recordSessionChange(session.transport.type, -1);
|
|
210
|
+
mcpLogger.removeHandler(session.mcpSession);
|
|
211
|
+
try {
|
|
212
|
+
await session.transport.instance.close();
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
logger.warn(LogMessages.TRANSPORT_CLOSE_ERROR, session.id, { error });
|
|
216
|
+
}
|
|
217
|
+
try {
|
|
218
|
+
await session.mcpSession.dispose();
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
logger.warn(LogMessages.SESSION_DISPOSE_ERROR, session.id, { error });
|
|
222
|
+
}
|
|
223
|
+
session.state = SESSION_STATES.CLOSED;
|
|
224
|
+
await this.invokeLifecycleHook("onClientDisconnected", session.id, () => this.lifecycle?.onClientDisconnected?.(session.id));
|
|
225
|
+
});
|
|
226
|
+
await Promise.allSettled(teardownPromises);
|
|
227
|
+
logger.debug(LogMessages.CLOSE_ALL_COMPLETE, sessions.length);
|
|
228
|
+
}
|
|
229
|
+
dispose() {
|
|
230
|
+
this.housekeeper.dispose();
|
|
231
|
+
this.store.markShuttingDown();
|
|
232
|
+
logger.debug(LogMessages.MANAGER_DISPOSED);
|
|
233
|
+
}
|
|
234
|
+
// ==========================================================================
|
|
235
|
+
// Delegated Queries
|
|
236
|
+
// ==========================================================================
|
|
237
|
+
forEach(callback) {
|
|
238
|
+
this.store.forEach(callback);
|
|
239
|
+
}
|
|
240
|
+
filter(predicate) {
|
|
241
|
+
return this.store.filter(predicate);
|
|
242
|
+
}
|
|
243
|
+
getByTransportType(type) {
|
|
244
|
+
return this.store.getByTransportType(type);
|
|
245
|
+
}
|
|
246
|
+
// ==========================================================================
|
|
247
|
+
// Delegated Broadcasting
|
|
248
|
+
// ==========================================================================
|
|
249
|
+
broadcastToolListChanged() {
|
|
250
|
+
logger.trace(LogMessages.BROADCAST_TOOL_LIST, this.store.size);
|
|
251
|
+
this.store.broadcastToolListChanged();
|
|
252
|
+
}
|
|
253
|
+
broadcastResourceListChanged() {
|
|
254
|
+
logger.trace(LogMessages.BROADCAST_RESOURCE_LIST, this.store.size);
|
|
255
|
+
this.store.broadcastResourceListChanged();
|
|
256
|
+
}
|
|
257
|
+
broadcastPromptListChanged() {
|
|
258
|
+
logger.trace(LogMessages.BROADCAST_PROMPT_LIST, this.store.size);
|
|
259
|
+
this.store.broadcastPromptListChanged();
|
|
260
|
+
}
|
|
261
|
+
broadcastResourceUpdated(uri) {
|
|
262
|
+
this.store.broadcastResourceUpdated(uri);
|
|
263
|
+
}
|
|
264
|
+
// ==========================================================================
|
|
265
|
+
// Internal Helpers
|
|
266
|
+
// ==========================================================================
|
|
267
|
+
/**
|
|
268
|
+
* Invokes a lifecycle hook with error logging.
|
|
269
|
+
* Hook errors are logged as warnings but never propagated.
|
|
270
|
+
* Async hooks are awaited so shutdown waits for consumer cleanup.
|
|
271
|
+
*/
|
|
272
|
+
async invokeLifecycleHook(name, sessionId, fn) {
|
|
273
|
+
try {
|
|
274
|
+
await fn();
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
278
|
+
logger.warn(LogMessages.LIFECYCLE_HOOK_ERROR, name, sessionId, msg);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=session-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../../src/server/session/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Store
|
|
3
|
+
*
|
|
4
|
+
* Interface definition for session CRUD storage and lifecycle management.
|
|
5
|
+
*
|
|
6
|
+
* Contains NO implementation — the built-in in-memory implementation is in
|
|
7
|
+
* `in-memory-store.ts`. Consumers can implement this interface with Redis,
|
|
8
|
+
* PostgreSQL, or another shared backend for horizontal scaling.
|
|
9
|
+
*
|
|
10
|
+
* @module server/session/session-store
|
|
11
|
+
*/
|
|
12
|
+
import type { TransportType } from "../transport/transport-context.js";
|
|
13
|
+
import type { Session, ReadonlySession, SessionCloseReason, CreateSessionOptions } from "./session.js";
|
|
14
|
+
/**
|
|
15
|
+
* Statistics about session store state.
|
|
16
|
+
*/
|
|
17
|
+
export interface SessionStats {
|
|
18
|
+
/** Currently active sessions */
|
|
19
|
+
readonly activeCount: number;
|
|
20
|
+
/** Maximum allowed sessions */
|
|
21
|
+
readonly maxSessions: number;
|
|
22
|
+
/** Total sessions created since startup */
|
|
23
|
+
readonly totalCreated: number;
|
|
24
|
+
/** Peak concurrent sessions */
|
|
25
|
+
readonly peakConcurrent: number;
|
|
26
|
+
/** Sessions closed due to timeout */
|
|
27
|
+
readonly timeoutCount: number;
|
|
28
|
+
/** Sessions closed due to heartbeat failure */
|
|
29
|
+
readonly heartbeatFailureCount: number;
|
|
30
|
+
/** Breakdown by transport type */
|
|
31
|
+
readonly byTransportType: Readonly<Record<TransportType, number>>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Interface for session CRUD storage and lifecycle management.
|
|
35
|
+
*
|
|
36
|
+
* The built-in {@link InMemorySessionStore} uses a `Map` and is
|
|
37
|
+
* suitable for single-instance deployments.
|
|
38
|
+
*
|
|
39
|
+
* For horizontal scaling across multiple server instances, implement
|
|
40
|
+
* this interface with a shared backend (e.g., Redis, PostgreSQL).
|
|
41
|
+
*
|
|
42
|
+
* @example Custom implementation
|
|
43
|
+
* ```typescript
|
|
44
|
+
* class RedisSessionStore implements SessionStore {
|
|
45
|
+
* // ... implement all methods with Redis as the backend
|
|
46
|
+
* }
|
|
47
|
+
*
|
|
48
|
+
* const manager = new SessionManagerImpl({
|
|
49
|
+
* store: new RedisSessionStore(redisClient),
|
|
50
|
+
* });
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export interface SessionStore {
|
|
54
|
+
/** Number of active sessions */
|
|
55
|
+
readonly size: number;
|
|
56
|
+
/** Current statistics */
|
|
57
|
+
readonly stats: SessionStats;
|
|
58
|
+
/** Creates and registers a new session */
|
|
59
|
+
create(options: CreateSessionOptions): Session | undefined;
|
|
60
|
+
/** Gets an active session by ID (does NOT update activity time) */
|
|
61
|
+
get(sessionId: string): Session | undefined;
|
|
62
|
+
/** Checks if a session exists and is active */
|
|
63
|
+
has(sessionId: string): boolean;
|
|
64
|
+
/** Updates the last activity time for a session */
|
|
65
|
+
touch(sessionId: string): boolean;
|
|
66
|
+
/** Checks if there's capacity for new sessions */
|
|
67
|
+
hasCapacity(): boolean;
|
|
68
|
+
/** Removes a session from the store and updates statistics */
|
|
69
|
+
remove(sessionId: string, reason: SessionCloseReason): Session | undefined;
|
|
70
|
+
/** Removes all sessions during shutdown */
|
|
71
|
+
removeAll(): Session[];
|
|
72
|
+
/** Marks the store as shutting down (rejects new sessions) */
|
|
73
|
+
markShuttingDown(): void;
|
|
74
|
+
/** Iterates over all active sessions */
|
|
75
|
+
forEach(callback: (session: ReadonlySession, sessionId: string) => void): void;
|
|
76
|
+
/** Finds sessions matching a predicate */
|
|
77
|
+
filter(predicate: (session: ReadonlySession) => boolean): ReadonlySession[];
|
|
78
|
+
/** Gets all sessions of a specific transport type */
|
|
79
|
+
getByTransportType(type: TransportType): ReadonlySession[];
|
|
80
|
+
/** Broadcasts tool list changed notification to all active sessions */
|
|
81
|
+
broadcastToolListChanged(): void;
|
|
82
|
+
/** Broadcasts resource list changed notification to all active sessions */
|
|
83
|
+
broadcastResourceListChanged(): void;
|
|
84
|
+
/** Broadcasts prompt list changed notification to all active sessions */
|
|
85
|
+
broadcastPromptListChanged(): void;
|
|
86
|
+
/**
|
|
87
|
+
* Sends a resource updated notification to sessions subscribed to the given URI.
|
|
88
|
+
*
|
|
89
|
+
* Unlike list-changed broadcasts (sent to all sessions), this only notifies
|
|
90
|
+
* sessions that have subscribed to the specific resource URI via
|
|
91
|
+
* `resources/subscribe`.
|
|
92
|
+
*/
|
|
93
|
+
broadcastResourceUpdated(uri: string): void;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=session-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../../src/server/session/session-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAMvG;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,+BAA+B;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,2CAA2C;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,+BAA+B;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC,qCAAqC;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,+CAA+C;IAC/C,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IAEvC,kCAAkC;IAClC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;CACnE;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,yBAAyB;IACzB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAE7B,0CAA0C;IAC1C,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,GAAG,SAAS,CAAC;IAE3D,mEAAmE;IACnE,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IAE5C,+CAA+C;IAC/C,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAEhC,mDAAmD;IACnD,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAElC,kDAAkD;IAClD,WAAW,IAAI,OAAO,CAAC;IAEvB,8DAA8D;IAC9D,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,GAAG,SAAS,CAAC;IAE3E,2CAA2C;IAC3C,SAAS,IAAI,OAAO,EAAE,CAAC;IAEvB,8DAA8D;IAC9D,gBAAgB,IAAI,IAAI,CAAC;IAEzB,wCAAwC;IACxC,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAE/E,0CAA0C;IAC1C,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,GAAG,eAAe,EAAE,CAAC;IAE5E,qDAAqD;IACrD,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,eAAe,EAAE,CAAC;IAE3D,uEAAuE;IACvE,wBAAwB,IAAI,IAAI,CAAC;IAEjC,2EAA2E;IAC3E,4BAA4B,IAAI,IAAI,CAAC;IAErC,yEAAyE;IACzE,0BAA0B,IAAI,IAAI,CAAC;IAEnC;;;;;;OAMG;IACH,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Store
|
|
3
|
+
*
|
|
4
|
+
* Interface definition for session CRUD storage and lifecycle management.
|
|
5
|
+
*
|
|
6
|
+
* Contains NO implementation — the built-in in-memory implementation is in
|
|
7
|
+
* `in-memory-store.ts`. Consumers can implement this interface with Redis,
|
|
8
|
+
* PostgreSQL, or another shared backend for horizontal scaling.
|
|
9
|
+
*
|
|
10
|
+
* @module server/session/session-store
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=session-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../../src/server/session/session-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
|