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,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Connection State Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages the connection state to a backend service and notifies
|
|
5
|
+
* listeners when the state changes. This enables dynamic tool
|
|
6
|
+
* availability based on connection status.
|
|
7
|
+
*
|
|
8
|
+
* Generic implementation works with any service client implementing ServiceClient.
|
|
9
|
+
*
|
|
10
|
+
* @module connection/connection-state
|
|
11
|
+
*/
|
|
12
|
+
import type { ServiceClient } from "./types.js";
|
|
13
|
+
import type { ConnectionState, ConnectionStateListener, ConnectionStateEvent, ConnectionTelemetry } from "./core/types.js";
|
|
14
|
+
export type { ConnectionState } from "./core/types.js";
|
|
15
|
+
/**
|
|
16
|
+
* Options for automatic reconnection with exponential backoff.
|
|
17
|
+
*
|
|
18
|
+
* When auto-reconnect is enabled, the ConnectionStateManager will
|
|
19
|
+
* automatically attempt to re-establish the connection when the
|
|
20
|
+
* state transitions to 'error'.
|
|
21
|
+
*
|
|
22
|
+
* This handles reconnection to the **API backend** (e.g. a REST API service),
|
|
23
|
+
* NOT MCP transport reconnection (which is client-side, handled by the SDK).
|
|
24
|
+
*/
|
|
25
|
+
export interface ReconnectOptions {
|
|
26
|
+
/** Maximum number of reconnect attempts before giving up. Default: 5 */
|
|
27
|
+
readonly maxRetries?: number;
|
|
28
|
+
/** Initial delay before the first reconnect attempt in ms. Default: 1000 */
|
|
29
|
+
readonly initialDelayMs?: number;
|
|
30
|
+
/** Maximum delay between attempts in ms (caps exponential growth). Default: 30000 */
|
|
31
|
+
readonly maxDelayMs?: number;
|
|
32
|
+
/** Multiplier for exponential backoff. Default: 1.5 */
|
|
33
|
+
readonly backoffMultiplier?: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Options for ConnectionStateManager construction.
|
|
37
|
+
*/
|
|
38
|
+
export interface ConnectionStateOptions {
|
|
39
|
+
/** Optional telemetry implementation (defaults to no-op). */
|
|
40
|
+
readonly telemetry?: ConnectionTelemetry;
|
|
41
|
+
/** Health check timeout in milliseconds. Default: 10000 */
|
|
42
|
+
readonly healthCheckTimeoutMs?: number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Manages the connection state to a backend service.
|
|
46
|
+
*
|
|
47
|
+
* Generic implementation that works with any client implementing ServiceClient.
|
|
48
|
+
*
|
|
49
|
+
* Features:
|
|
50
|
+
* - Tracks connection state (disconnected, connecting, connected, error)
|
|
51
|
+
* - Notifies listeners when state changes
|
|
52
|
+
* - Provides current client instance
|
|
53
|
+
* - Supports health check validation
|
|
54
|
+
* - Uses circular buffer for efficient history management (O(1) operations)
|
|
55
|
+
*
|
|
56
|
+
* @typeParam TService - The service client type (must implement ServiceClient)
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* const manager = new ConnectionStateManager<MyServiceClient>();
|
|
61
|
+
* manager.onStateChange((state, client) => {
|
|
62
|
+
* if (state === 'connected') {
|
|
63
|
+
* console.log('Connected!');
|
|
64
|
+
* }
|
|
65
|
+
* });
|
|
66
|
+
* await manager.connect(serviceClient);
|
|
67
|
+
*
|
|
68
|
+
* // With any ServiceClient implementation
|
|
69
|
+
* const genericManager = new ConnectionStateManager<MyServiceClient>();
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export declare class ConnectionStateManager<TService extends ServiceClient = ServiceClient> {
|
|
73
|
+
private state;
|
|
74
|
+
private client;
|
|
75
|
+
private lastError;
|
|
76
|
+
private listeners;
|
|
77
|
+
/** Injected telemetry — defaults to no-op when not provided. */
|
|
78
|
+
private readonly telemetry;
|
|
79
|
+
/** Health check timeout in milliseconds. */
|
|
80
|
+
private readonly healthCheckTimeoutMs;
|
|
81
|
+
private readonly maxHistorySize;
|
|
82
|
+
private stateHistory;
|
|
83
|
+
private historyIndex;
|
|
84
|
+
private historyCount;
|
|
85
|
+
private _reconnectAbort;
|
|
86
|
+
private _reconnectUnsubscribe;
|
|
87
|
+
/**
|
|
88
|
+
* Create a new ConnectionStateManager.
|
|
89
|
+
*
|
|
90
|
+
* @param options - Optional configuration (telemetry, healthCheckTimeoutMs).
|
|
91
|
+
* Also accepts a bare `ConnectionTelemetry` for backwards compatibility.
|
|
92
|
+
*/
|
|
93
|
+
constructor(options?: ConnectionStateOptions | ConnectionTelemetry);
|
|
94
|
+
/**
|
|
95
|
+
* Get the current connection state.
|
|
96
|
+
*/
|
|
97
|
+
getState(): ConnectionState;
|
|
98
|
+
/**
|
|
99
|
+
* Get the current service client instance.
|
|
100
|
+
* Returns null if not connected.
|
|
101
|
+
*/
|
|
102
|
+
getClient(): TService | null;
|
|
103
|
+
/**
|
|
104
|
+
* Check if the client is currently connected.
|
|
105
|
+
*/
|
|
106
|
+
isConnected(): boolean;
|
|
107
|
+
/**
|
|
108
|
+
* Get the last error that occurred (if any).
|
|
109
|
+
*/
|
|
110
|
+
getLastError(): Error | null;
|
|
111
|
+
/**
|
|
112
|
+
* Get the connection state history.
|
|
113
|
+
* Returns the most recent state changes (up to maxHistorySize).
|
|
114
|
+
* History is returned in chronological order (oldest first).
|
|
115
|
+
*/
|
|
116
|
+
getHistory(): readonly ConnectionStateEvent[];
|
|
117
|
+
/**
|
|
118
|
+
* Register a listener for connection state changes.
|
|
119
|
+
*
|
|
120
|
+
* @param listener - Function to call when state changes
|
|
121
|
+
* @returns Unsubscribe function
|
|
122
|
+
*/
|
|
123
|
+
onStateChange(listener: ConnectionStateListener<TService>): () => void;
|
|
124
|
+
/**
|
|
125
|
+
* Set the connection state to 'connecting'.
|
|
126
|
+
* Call this before attempting to connect.
|
|
127
|
+
*/
|
|
128
|
+
setConnecting(): void;
|
|
129
|
+
/**
|
|
130
|
+
* Set the client and mark as connected.
|
|
131
|
+
* Validates the connection with a health check before completing.
|
|
132
|
+
* Includes OpenTelemetry tracing for the connection process.
|
|
133
|
+
*
|
|
134
|
+
* @param client - The authenticated service client
|
|
135
|
+
* @param skipHealthCheck - Skip health check validation (for testing)
|
|
136
|
+
* @returns true if connection was successful
|
|
137
|
+
*/
|
|
138
|
+
connect(client: TService, skipHealthCheck?: boolean): Promise<boolean>;
|
|
139
|
+
/**
|
|
140
|
+
* Perform health check validation against the service client.
|
|
141
|
+
* Throws if the health check fails or times out.
|
|
142
|
+
*/
|
|
143
|
+
private performHealthCheck;
|
|
144
|
+
/**
|
|
145
|
+
* Disconnect from the backend service.
|
|
146
|
+
* Calls {@link ServiceClient.disconnect} if the client implements it,
|
|
147
|
+
* then clears the client reference and sets state to 'disconnected'.
|
|
148
|
+
*/
|
|
149
|
+
disconnect(): Promise<void>;
|
|
150
|
+
/**
|
|
151
|
+
* Set connection error state.
|
|
152
|
+
*
|
|
153
|
+
* @param error - The error that occurred
|
|
154
|
+
*/
|
|
155
|
+
setError(error: Error): void;
|
|
156
|
+
/**
|
|
157
|
+
* Enable automatic reconnection with exponential backoff.
|
|
158
|
+
*
|
|
159
|
+
* When the connection state transitions to 'error', the manager will
|
|
160
|
+
* automatically attempt to reconnect using the stored client instance.
|
|
161
|
+
* Subsequent attempts use exponential backoff up to `maxDelayMs`.
|
|
162
|
+
*
|
|
163
|
+
* This handles reconnection to the **API backend**, NOT MCP transport
|
|
164
|
+
* reconnection (which is client-side, handled by the SDK's
|
|
165
|
+
* `StreamableHTTPReconnectionOptions`).
|
|
166
|
+
*
|
|
167
|
+
* @param options - Reconnect configuration (all fields optional with sensible defaults)
|
|
168
|
+
*/
|
|
169
|
+
enableAutoReconnect(options?: ReconnectOptions): void;
|
|
170
|
+
/**
|
|
171
|
+
* Disable automatic reconnection.
|
|
172
|
+
* Aborts any in-flight reconnect attempt and removes the listener.
|
|
173
|
+
*/
|
|
174
|
+
disableAutoReconnect(): void;
|
|
175
|
+
/**
|
|
176
|
+
* Internal reconnect loop with exponential backoff.
|
|
177
|
+
*/
|
|
178
|
+
private attemptReconnect;
|
|
179
|
+
/**
|
|
180
|
+
* Clear all listeners.
|
|
181
|
+
* Useful for cleanup during shutdown.
|
|
182
|
+
*/
|
|
183
|
+
clearListeners(): void;
|
|
184
|
+
/**
|
|
185
|
+
* Reset the connection manager to initial state.
|
|
186
|
+
* Useful for testing or complete reset scenarios.
|
|
187
|
+
*/
|
|
188
|
+
reset(): void;
|
|
189
|
+
/**
|
|
190
|
+
* Internal method to update state and notify listeners.
|
|
191
|
+
* Uses circular buffer for O(1) history management.
|
|
192
|
+
* Records metrics for state transitions.
|
|
193
|
+
*/
|
|
194
|
+
private setState;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=connection-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-state.d.ts","sourceRoot":"","sources":["../../src/connection/connection-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKhD,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,iBAAiB,CAAC;AAezB,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD;;;;;;;;;GASG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,qFAAqF;IACrF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,uDAAuD;IACvD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,6DAA6D;IAC7D,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IACzC,2DAA2D;IAC3D,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACxC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,sBAAsB,CAAC,QAAQ,SAAS,aAAa,GAAG,aAAa;IAChF,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,SAAS,CAAqD;IAEtE,gEAAgE;IAChE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAEhD,4CAA4C;IAC5C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAI9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4C;IAC3E,OAAO,CAAC,YAAY,CAA8E;IAClG,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAK;IAGzB,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,qBAAqB,CAA6B;IAE1D;;;;;OAKG;gBACS,OAAO,CAAC,EAAE,sBAAsB,GAAG,mBAAmB;IAWlE;;OAEG;IACH,QAAQ,IAAI,eAAe;IAI3B;;;OAGG;IACH,SAAS,IAAI,QAAQ,GAAG,IAAI;IAI5B;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,YAAY,IAAI,KAAK,GAAG,IAAI;IAI5B;;;;OAIG;IACH,UAAU,IAAI,SAAS,oBAAoB,EAAE;IAmB7C;;;;;OAKG;IACH,aAAa,CAAC,QAAQ,EAAE,uBAAuB,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAI;IAKtE;;;OAGG;IACH,aAAa,IAAI,IAAI;IAIrB;;;;;;;;OAQG;IACG,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAkC1E;;;OAGG;YACW,kBAAkB;IA6ChC;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBjC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAK5B;;;;;;;;;;;;OAYG;IACH,mBAAmB,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI;IAkBrD;;;OAGG;IACH,oBAAoB,IAAI,IAAI;IAY5B;;OAEG;YACW,gBAAgB;IAqE9B;;;OAGG;IACH,cAAc,IAAI,IAAI;IAItB;;;OAGG;IACH,KAAK,IAAI,IAAI;IAYb;;;;OAIG;IACH,OAAO,CAAC,QAAQ;CA2DjB"}
|
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Connection State Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages the connection state to a backend service and notifies
|
|
5
|
+
* listeners when the state changes. This enables dynamic tool
|
|
6
|
+
* availability based on connection status.
|
|
7
|
+
*
|
|
8
|
+
* Generic implementation works with any service client implementing ServiceClient.
|
|
9
|
+
*
|
|
10
|
+
* @module connection/connection-state
|
|
11
|
+
*/
|
|
12
|
+
import { logger as baseLogger } from "../logger/index.js";
|
|
13
|
+
import { ConnectionError } from "../errors/index.js";
|
|
14
|
+
import { NO_OP_TELEMETRY } from "./core/types.js";
|
|
15
|
+
import { CONNECTION_STATE_CONFIG, CONNECTION_LOG_COMPONENTS, ConnectionStateLogMessages, VALID_STATE_TRANSITIONS, RECONNECT_DEFAULTS, } from "./core/constants.js";
|
|
16
|
+
const logger = baseLogger.child({
|
|
17
|
+
component: CONNECTION_LOG_COMPONENTS.CONNECTION_STATE,
|
|
18
|
+
});
|
|
19
|
+
/**
|
|
20
|
+
* Manages the connection state to a backend service.
|
|
21
|
+
*
|
|
22
|
+
* Generic implementation that works with any client implementing ServiceClient.
|
|
23
|
+
*
|
|
24
|
+
* Features:
|
|
25
|
+
* - Tracks connection state (disconnected, connecting, connected, error)
|
|
26
|
+
* - Notifies listeners when state changes
|
|
27
|
+
* - Provides current client instance
|
|
28
|
+
* - Supports health check validation
|
|
29
|
+
* - Uses circular buffer for efficient history management (O(1) operations)
|
|
30
|
+
*
|
|
31
|
+
* @typeParam TService - The service client type (must implement ServiceClient)
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* const manager = new ConnectionStateManager<MyServiceClient>();
|
|
36
|
+
* manager.onStateChange((state, client) => {
|
|
37
|
+
* if (state === 'connected') {
|
|
38
|
+
* console.log('Connected!');
|
|
39
|
+
* }
|
|
40
|
+
* });
|
|
41
|
+
* await manager.connect(serviceClient);
|
|
42
|
+
*
|
|
43
|
+
* // With any ServiceClient implementation
|
|
44
|
+
* const genericManager = new ConnectionStateManager<MyServiceClient>();
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export class ConnectionStateManager {
|
|
48
|
+
state = "disconnected";
|
|
49
|
+
client = null;
|
|
50
|
+
lastError = null;
|
|
51
|
+
listeners = new Set();
|
|
52
|
+
/** Injected telemetry — defaults to no-op when not provided. */
|
|
53
|
+
telemetry;
|
|
54
|
+
/** Health check timeout in milliseconds. */
|
|
55
|
+
healthCheckTimeoutMs;
|
|
56
|
+
// Performance: Use circular buffer instead of array with shift()
|
|
57
|
+
// shift() is O(n), circular buffer is O(1)
|
|
58
|
+
maxHistorySize = CONNECTION_STATE_CONFIG.MAX_HISTORY_SIZE;
|
|
59
|
+
stateHistory = new Array(this.maxHistorySize).fill(null);
|
|
60
|
+
historyIndex = 0;
|
|
61
|
+
historyCount = 0;
|
|
62
|
+
// Auto-reconnect state
|
|
63
|
+
_reconnectAbort = null;
|
|
64
|
+
_reconnectUnsubscribe = null;
|
|
65
|
+
/**
|
|
66
|
+
* Create a new ConnectionStateManager.
|
|
67
|
+
*
|
|
68
|
+
* @param options - Optional configuration (telemetry, healthCheckTimeoutMs).
|
|
69
|
+
* Also accepts a bare `ConnectionTelemetry` for backwards compatibility.
|
|
70
|
+
*/
|
|
71
|
+
constructor(options) {
|
|
72
|
+
// Backwards compatibility: accept bare telemetry object
|
|
73
|
+
if (options && "withSpan" in options) {
|
|
74
|
+
this.telemetry = options;
|
|
75
|
+
this.healthCheckTimeoutMs = CONNECTION_STATE_CONFIG.HEALTH_CHECK_TIMEOUT_MS;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
this.telemetry = options?.telemetry ?? NO_OP_TELEMETRY;
|
|
79
|
+
this.healthCheckTimeoutMs = options?.healthCheckTimeoutMs ?? CONNECTION_STATE_CONFIG.HEALTH_CHECK_TIMEOUT_MS;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get the current connection state.
|
|
84
|
+
*/
|
|
85
|
+
getState() {
|
|
86
|
+
return this.state;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get the current service client instance.
|
|
90
|
+
* Returns null if not connected.
|
|
91
|
+
*/
|
|
92
|
+
getClient() {
|
|
93
|
+
return this.client;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Check if the client is currently connected.
|
|
97
|
+
*/
|
|
98
|
+
isConnected() {
|
|
99
|
+
return this.state === "connected" && this.client !== null;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get the last error that occurred (if any).
|
|
103
|
+
*/
|
|
104
|
+
getLastError() {
|
|
105
|
+
return this.lastError;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get the connection state history.
|
|
109
|
+
* Returns the most recent state changes (up to maxHistorySize).
|
|
110
|
+
* History is returned in chronological order (oldest first).
|
|
111
|
+
*/
|
|
112
|
+
getHistory() {
|
|
113
|
+
// Reconstruct array from circular buffer in chronological order
|
|
114
|
+
const result = [];
|
|
115
|
+
for (let i = 0; i < this.historyCount; i++) {
|
|
116
|
+
// Circular buffer read: start from the oldest entry and walk forward.
|
|
117
|
+
// historyIndex points to the NEXT write position, so the oldest entry
|
|
118
|
+
// is at (historyIndex - historyCount). Adding maxHistorySize before
|
|
119
|
+
// modulo prevents negative indices.
|
|
120
|
+
const index = (this.historyIndex - this.historyCount + i + this.maxHistorySize) % this.maxHistorySize;
|
|
121
|
+
const event = this.stateHistory[index];
|
|
122
|
+
/* v8 ignore start - defensive check for circular buffer integrity */
|
|
123
|
+
if (event) {
|
|
124
|
+
result.push(event);
|
|
125
|
+
}
|
|
126
|
+
/* v8 ignore stop */
|
|
127
|
+
}
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Register a listener for connection state changes.
|
|
132
|
+
*
|
|
133
|
+
* @param listener - Function to call when state changes
|
|
134
|
+
* @returns Unsubscribe function
|
|
135
|
+
*/
|
|
136
|
+
onStateChange(listener) {
|
|
137
|
+
this.listeners.add(listener);
|
|
138
|
+
return () => this.listeners.delete(listener);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Set the connection state to 'connecting'.
|
|
142
|
+
* Call this before attempting to connect.
|
|
143
|
+
*/
|
|
144
|
+
setConnecting() {
|
|
145
|
+
this.setState("connecting");
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Set the client and mark as connected.
|
|
149
|
+
* Validates the connection with a health check before completing.
|
|
150
|
+
* Includes OpenTelemetry tracing for the connection process.
|
|
151
|
+
*
|
|
152
|
+
* @param client - The authenticated service client
|
|
153
|
+
* @param skipHealthCheck - Skip health check validation (for testing)
|
|
154
|
+
* @returns true if connection was successful
|
|
155
|
+
*/
|
|
156
|
+
async connect(client, skipHealthCheck = false) {
|
|
157
|
+
return this.telemetry.withSpan("api.connection.connect", async (span) => {
|
|
158
|
+
this.setState("connecting");
|
|
159
|
+
logger.debug(ConnectionStateLogMessages.CONNECTING);
|
|
160
|
+
this.telemetry.addSpanAttributes({
|
|
161
|
+
"mcp.operation": "connect",
|
|
162
|
+
"connection.skip_health_check": skipHealthCheck,
|
|
163
|
+
"connection.client_type": client.clientType,
|
|
164
|
+
});
|
|
165
|
+
try {
|
|
166
|
+
if (!skipHealthCheck) {
|
|
167
|
+
await this.performHealthCheck(client);
|
|
168
|
+
}
|
|
169
|
+
this.client = client;
|
|
170
|
+
this.lastError = null;
|
|
171
|
+
this.setState("connected");
|
|
172
|
+
this.telemetry.addSpanEvent("connection.established");
|
|
173
|
+
return true;
|
|
174
|
+
/* v8 ignore start - catch block for connection errors */
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
this.lastError = error instanceof Error ? error : new Error(String(error));
|
|
178
|
+
this.setState("error", this.lastError);
|
|
179
|
+
span.setAttribute("error.message", this.lastError.message);
|
|
180
|
+
logger.error(ConnectionStateLogMessages.ERROR_STATE, this.lastError.message);
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
/* v8 ignore stop */
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Perform health check validation against the service client.
|
|
188
|
+
* Throws if the health check fails or times out.
|
|
189
|
+
*/
|
|
190
|
+
async performHealthCheck(client) {
|
|
191
|
+
const healthCheckFn = client.healthCheck?.bind(client);
|
|
192
|
+
if (!healthCheckFn) {
|
|
193
|
+
// No healthCheck method — assume healthy
|
|
194
|
+
this.telemetry.addSpanEvent("health_check.skipped", {
|
|
195
|
+
reason: "not_implemented",
|
|
196
|
+
});
|
|
197
|
+
logger.debug(ConnectionStateLogMessages.HEALTH_CHECK_SKIPPED);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
this.telemetry.addSpanEvent("health_check.start");
|
|
201
|
+
const timeoutMs = this.healthCheckTimeoutMs;
|
|
202
|
+
logger.trace(ConnectionStateLogMessages.HEALTH_CHECK_START);
|
|
203
|
+
let timer;
|
|
204
|
+
try {
|
|
205
|
+
const health = await Promise.race([
|
|
206
|
+
healthCheckFn(),
|
|
207
|
+
new Promise((_, reject) => {
|
|
208
|
+
timer = setTimeout(() => reject(new Error(`Health check timed out after ${timeoutMs}ms`)), timeoutMs);
|
|
209
|
+
}),
|
|
210
|
+
]);
|
|
211
|
+
if (health.status !== "healthy") {
|
|
212
|
+
this.telemetry.addSpanEvent("health_check.failed", {
|
|
213
|
+
"health.message": health.message || "unknown",
|
|
214
|
+
});
|
|
215
|
+
logger.warn(ConnectionStateLogMessages.HEALTH_CHECK_FAILED, health.message || "unknown");
|
|
216
|
+
throw ConnectionError.healthCheckFailed(health.message || "unknown");
|
|
217
|
+
}
|
|
218
|
+
this.telemetry.addSpanEvent("health_check.success", {
|
|
219
|
+
"health.status": health.status,
|
|
220
|
+
"health.message": health.message || "ok",
|
|
221
|
+
});
|
|
222
|
+
/* v8 ignore next - optional API version logging */
|
|
223
|
+
logger.debug(ConnectionStateLogMessages.HEALTH_CHECK_SUCCESS);
|
|
224
|
+
}
|
|
225
|
+
finally {
|
|
226
|
+
if (timer !== undefined)
|
|
227
|
+
clearTimeout(timer);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Disconnect from the backend service.
|
|
232
|
+
* Calls {@link ServiceClient.disconnect} if the client implements it,
|
|
233
|
+
* then clears the client reference and sets state to 'disconnected'.
|
|
234
|
+
*/
|
|
235
|
+
async disconnect() {
|
|
236
|
+
// Stop auto-reconnect so it doesn't trigger on the disconnect state change
|
|
237
|
+
this.disableAutoReconnect();
|
|
238
|
+
this.telemetry.addSpanEvent("connection.disconnect");
|
|
239
|
+
// Allow client to release its own resources (sockets, pools, timers)
|
|
240
|
+
if (this.client && typeof this.client.disconnect === "function") {
|
|
241
|
+
try {
|
|
242
|
+
await this.client.disconnect();
|
|
243
|
+
}
|
|
244
|
+
catch (error) {
|
|
245
|
+
logger.warn(ConnectionStateLogMessages.CLIENT_DISCONNECT_ERROR, String(error));
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
this.client = null;
|
|
249
|
+
this.lastError = null;
|
|
250
|
+
this.setState("disconnected");
|
|
251
|
+
logger.info(ConnectionStateLogMessages.DISCONNECTED);
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Set connection error state.
|
|
255
|
+
*
|
|
256
|
+
* @param error - The error that occurred
|
|
257
|
+
*/
|
|
258
|
+
setError(error) {
|
|
259
|
+
this.lastError = error;
|
|
260
|
+
this.setState("error", error);
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Enable automatic reconnection with exponential backoff.
|
|
264
|
+
*
|
|
265
|
+
* When the connection state transitions to 'error', the manager will
|
|
266
|
+
* automatically attempt to reconnect using the stored client instance.
|
|
267
|
+
* Subsequent attempts use exponential backoff up to `maxDelayMs`.
|
|
268
|
+
*
|
|
269
|
+
* This handles reconnection to the **API backend**, NOT MCP transport
|
|
270
|
+
* reconnection (which is client-side, handled by the SDK's
|
|
271
|
+
* `StreamableHTTPReconnectionOptions`).
|
|
272
|
+
*
|
|
273
|
+
* @param options - Reconnect configuration (all fields optional with sensible defaults)
|
|
274
|
+
*/
|
|
275
|
+
enableAutoReconnect(options) {
|
|
276
|
+
// Disable any existing reconnect before re-enabling
|
|
277
|
+
this.disableAutoReconnect();
|
|
278
|
+
const maxRetries = options?.maxRetries ?? RECONNECT_DEFAULTS.MAX_RETRIES;
|
|
279
|
+
const initialDelayMs = options?.initialDelayMs ?? RECONNECT_DEFAULTS.INITIAL_DELAY_MS;
|
|
280
|
+
const maxDelayMs = options?.maxDelayMs ?? RECONNECT_DEFAULTS.MAX_DELAY_MS;
|
|
281
|
+
const backoffMultiplier = options?.backoffMultiplier ?? RECONNECT_DEFAULTS.BACKOFF_MULTIPLIER;
|
|
282
|
+
logger.info(ConnectionStateLogMessages.RECONNECT_ENABLED, maxRetries, initialDelayMs, maxDelayMs);
|
|
283
|
+
this._reconnectUnsubscribe = this.onStateChange((state) => {
|
|
284
|
+
if (state === "error" && !this._reconnectAbort) {
|
|
285
|
+
void this.attemptReconnect(maxRetries, initialDelayMs, maxDelayMs, backoffMultiplier);
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Disable automatic reconnection.
|
|
291
|
+
* Aborts any in-flight reconnect attempt and removes the listener.
|
|
292
|
+
*/
|
|
293
|
+
disableAutoReconnect() {
|
|
294
|
+
if (this._reconnectAbort) {
|
|
295
|
+
this._reconnectAbort.abort();
|
|
296
|
+
this._reconnectAbort = null;
|
|
297
|
+
}
|
|
298
|
+
if (this._reconnectUnsubscribe) {
|
|
299
|
+
this._reconnectUnsubscribe();
|
|
300
|
+
this._reconnectUnsubscribe = null;
|
|
301
|
+
logger.info(ConnectionStateLogMessages.RECONNECT_DISABLED);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Internal reconnect loop with exponential backoff.
|
|
306
|
+
*/
|
|
307
|
+
async attemptReconnect(maxRetries, initialDelayMs, maxDelayMs, backoffMultiplier) {
|
|
308
|
+
// Abort any previous reconnect loop
|
|
309
|
+
this._reconnectAbort?.abort();
|
|
310
|
+
const abort = new AbortController();
|
|
311
|
+
this._reconnectAbort = abort;
|
|
312
|
+
const client = this.client;
|
|
313
|
+
if (!client) {
|
|
314
|
+
// No client to reconnect with — nothing we can do
|
|
315
|
+
this._reconnectAbort = null;
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
319
|
+
if (abort.signal.aborted) {
|
|
320
|
+
logger.debug(ConnectionStateLogMessages.RECONNECT_ABORTED);
|
|
321
|
+
this._reconnectAbort = null;
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
const baseDelay = Math.min(initialDelayMs * backoffMultiplier ** (attempt - 1), maxDelayMs);
|
|
325
|
+
// Add jitter (±25%) to prevent thundering herd on concurrent reconnects
|
|
326
|
+
const jitter = baseDelay * (0.75 + Math.random() * 0.5);
|
|
327
|
+
const delay = Math.min(jitter, maxDelayMs);
|
|
328
|
+
logger.info(ConnectionStateLogMessages.RECONNECT_ATTEMPT, attempt, maxRetries, Math.round(delay));
|
|
329
|
+
// Wait with abort support
|
|
330
|
+
await new Promise((resolve) => {
|
|
331
|
+
const timer = setTimeout(resolve, delay);
|
|
332
|
+
abort.signal.addEventListener("abort", () => {
|
|
333
|
+
clearTimeout(timer);
|
|
334
|
+
resolve();
|
|
335
|
+
}, { once: true });
|
|
336
|
+
});
|
|
337
|
+
if (abort.signal.aborted) {
|
|
338
|
+
logger.debug(ConnectionStateLogMessages.RECONNECT_ABORTED);
|
|
339
|
+
this._reconnectAbort = null;
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
const success = await this.connect(client);
|
|
343
|
+
if (success) {
|
|
344
|
+
logger.info(ConnectionStateLogMessages.RECONNECT_SUCCESS, attempt);
|
|
345
|
+
this._reconnectAbort = null;
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
logger.warn(ConnectionStateLogMessages.RECONNECT_FAILED, attempt, maxRetries, this.lastError?.message ?? "unknown");
|
|
349
|
+
}
|
|
350
|
+
this._reconnectAbort = null;
|
|
351
|
+
logger.error(ConnectionStateLogMessages.RECONNECT_EXHAUSTED, maxRetries);
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Clear all listeners.
|
|
355
|
+
* Useful for cleanup during shutdown.
|
|
356
|
+
*/
|
|
357
|
+
clearListeners() {
|
|
358
|
+
this.listeners.clear();
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Reset the connection manager to initial state.
|
|
362
|
+
* Useful for testing or complete reset scenarios.
|
|
363
|
+
*/
|
|
364
|
+
reset() {
|
|
365
|
+
this.disableAutoReconnect();
|
|
366
|
+
this.state = "disconnected";
|
|
367
|
+
this.client = null;
|
|
368
|
+
this.lastError = null;
|
|
369
|
+
this.listeners.clear();
|
|
370
|
+
// Reset circular buffer
|
|
371
|
+
this.stateHistory = new Array(this.maxHistorySize).fill(null);
|
|
372
|
+
this.historyIndex = 0;
|
|
373
|
+
this.historyCount = 0;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Internal method to update state and notify listeners.
|
|
377
|
+
* Uses circular buffer for O(1) history management.
|
|
378
|
+
* Records metrics for state transitions.
|
|
379
|
+
*/
|
|
380
|
+
setState(newState, error) {
|
|
381
|
+
const previousState = this.state;
|
|
382
|
+
if (previousState === newState) {
|
|
383
|
+
return; // No change
|
|
384
|
+
}
|
|
385
|
+
// Validate state transition (strict — reject invalid transitions)
|
|
386
|
+
const allowed = VALID_STATE_TRANSITIONS[previousState];
|
|
387
|
+
if (allowed && !allowed.includes(newState)) {
|
|
388
|
+
logger.warn(ConnectionStateLogMessages.INVALID_TRANSITION, previousState, newState, previousState, allowed.join(", "));
|
|
389
|
+
return; // Reject invalid transition
|
|
390
|
+
}
|
|
391
|
+
this.state = newState;
|
|
392
|
+
// Record state transition in metrics
|
|
393
|
+
this.telemetry.recordConnectionStateChange(previousState, newState);
|
|
394
|
+
// Add telemetry event for state change
|
|
395
|
+
this.telemetry.addSpanEvent("connection.state_change", {
|
|
396
|
+
"connection.state.previous": previousState,
|
|
397
|
+
"connection.state.current": newState,
|
|
398
|
+
"connection.error": error?.message,
|
|
399
|
+
});
|
|
400
|
+
const event = {
|
|
401
|
+
previousState,
|
|
402
|
+
currentState: newState,
|
|
403
|
+
clientType: this.client?.clientType ?? null,
|
|
404
|
+
error,
|
|
405
|
+
timestamp: new Date(),
|
|
406
|
+
};
|
|
407
|
+
// Add to circular buffer - O(1) operation instead of shift() which is O(n)
|
|
408
|
+
this.stateHistory[this.historyIndex] = event;
|
|
409
|
+
this.historyIndex = (this.historyIndex + 1) % this.maxHistorySize;
|
|
410
|
+
if (this.historyCount < this.maxHistorySize) {
|
|
411
|
+
this.historyCount++;
|
|
412
|
+
}
|
|
413
|
+
logger.trace(ConnectionStateLogMessages.STATE_CHANGE, previousState, newState);
|
|
414
|
+
// Notify listeners
|
|
415
|
+
for (const listener of this.listeners) {
|
|
416
|
+
try {
|
|
417
|
+
listener(newState, this.client, error);
|
|
418
|
+
}
|
|
419
|
+
catch (listenerError) {
|
|
420
|
+
const errorMessage = listenerError instanceof Error ? listenerError.message : String(listenerError);
|
|
421
|
+
logger.error(ConnectionStateLogMessages.LISTENER_ERROR, errorMessage);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
//# sourceMappingURL=connection-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-state.js","sourceRoot":"","sources":["../../src/connection/connection-state.ts"],"names":[],"mappings":"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"}
|