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,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTelemetry Metrics for Server State
|
|
3
|
+
*
|
|
4
|
+
* Provides metrics collection for the MCP Server including:
|
|
5
|
+
* - Server uptime and startup time
|
|
6
|
+
* - Active sessions and connections
|
|
7
|
+
* - Request counts and latencies
|
|
8
|
+
* - Memory and resource usage
|
|
9
|
+
* - Connection state transitions
|
|
10
|
+
*
|
|
11
|
+
* @module server/telemetry/metrics
|
|
12
|
+
*/
|
|
13
|
+
import { type ServerMetrics, type ServerStats } from "./core/index.js";
|
|
14
|
+
/**
|
|
15
|
+
* Server Metrics Manager
|
|
16
|
+
*
|
|
17
|
+
* Collects and exports metrics about server state and performance.
|
|
18
|
+
* Uses OpenTelemetry metrics API when available, falls back to in-memory tracking.
|
|
19
|
+
*/
|
|
20
|
+
declare class ServerMetricsManager implements ServerMetrics {
|
|
21
|
+
private readonly startTime;
|
|
22
|
+
private totalRequests;
|
|
23
|
+
private failedRequests;
|
|
24
|
+
private activeHttpSessions;
|
|
25
|
+
private activeSseSessions;
|
|
26
|
+
private connectionStateChanges;
|
|
27
|
+
private instruments;
|
|
28
|
+
/** Resolves when OTEL instruments are initialized (or immediately if OTEL is disabled) */
|
|
29
|
+
private readonly ready;
|
|
30
|
+
private otelInitialized;
|
|
31
|
+
private otelDropWarningLogged;
|
|
32
|
+
constructor();
|
|
33
|
+
/**
|
|
34
|
+
* Wait for OTEL instrument initialization to complete.
|
|
35
|
+
*
|
|
36
|
+
* Not required for normal operation — in-memory counters work immediately.
|
|
37
|
+
* Useful when the caller needs to ensure OTEL metrics are captured from
|
|
38
|
+
* the very first request (e.g. in integration tests).
|
|
39
|
+
*/
|
|
40
|
+
waitForReady(): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Log a one-time debug warning when OTEL metrics are dropped
|
|
43
|
+
* because instruments aren't initialized yet.
|
|
44
|
+
*/
|
|
45
|
+
private warnOtelNotReady;
|
|
46
|
+
/**
|
|
47
|
+
* Initialize OpenTelemetry metrics instruments.
|
|
48
|
+
* Async because @opentelemetry/api is lazy-loaded.
|
|
49
|
+
*/
|
|
50
|
+
private initializeMetrics;
|
|
51
|
+
/**
|
|
52
|
+
* Record a request (tool invocation).
|
|
53
|
+
*/
|
|
54
|
+
recordRequest(toolName: string, durationMs: number, success: boolean): void;
|
|
55
|
+
/**
|
|
56
|
+
* Record an active session change.
|
|
57
|
+
* @param transport - Transport type ('http' or 'sse')
|
|
58
|
+
* @param delta - Change in session count (+1 for new, -1 for closed)
|
|
59
|
+
*/
|
|
60
|
+
recordSessionChange(transport: string, delta: number): void;
|
|
61
|
+
/**
|
|
62
|
+
* Record a connection state change.
|
|
63
|
+
*/
|
|
64
|
+
recordConnectionStateChange(previousState: string, newState: string): void;
|
|
65
|
+
/**
|
|
66
|
+
* Record an error.
|
|
67
|
+
*/
|
|
68
|
+
recordError(errorType: string, component: string): void;
|
|
69
|
+
/**
|
|
70
|
+
* Get current server statistics.
|
|
71
|
+
*/
|
|
72
|
+
getStats(): ServerStats;
|
|
73
|
+
/**
|
|
74
|
+
* Reset all statistics.
|
|
75
|
+
* Useful for testing.
|
|
76
|
+
*/
|
|
77
|
+
reset(): void;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Create a new ServerMetricsManager instance.
|
|
81
|
+
*
|
|
82
|
+
* Use this factory function for testing or when you need
|
|
83
|
+
* an independent metrics instance.
|
|
84
|
+
*
|
|
85
|
+
* @returns A new ServerMetricsManager instance
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* // For testing - create isolated instance
|
|
90
|
+
* const metrics = createServerMetrics();
|
|
91
|
+
* metrics.recordRequest('test-tool', 100, true);
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export declare function createServerMetrics(): ServerMetricsManager;
|
|
95
|
+
/**
|
|
96
|
+
* Get the singleton ServerMetricsManager instance.
|
|
97
|
+
*
|
|
98
|
+
* This is the recommended way to access metrics in production code.
|
|
99
|
+
* The instance is lazily initialized on first access.
|
|
100
|
+
*
|
|
101
|
+
* @returns The singleton ServerMetricsManager instance
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```typescript
|
|
105
|
+
* import { getServerMetrics } from './telemetry/metrics.js';
|
|
106
|
+
*
|
|
107
|
+
* const metrics = getServerMetrics();
|
|
108
|
+
* metrics.recordRequest('tool_name', 150, true);
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export declare function getServerMetrics(): ServerMetricsManager;
|
|
112
|
+
/**
|
|
113
|
+
* Reset the singleton instance.
|
|
114
|
+
*
|
|
115
|
+
* **Warning**: Only use this for testing purposes.
|
|
116
|
+
* This will reset all tracked metrics. A fresh instance with new OTEL
|
|
117
|
+
* instruments will be created on the next `getServerMetrics()` call.
|
|
118
|
+
*
|
|
119
|
+
* Note: OTEL metric instruments are cumulative by design — resetting
|
|
120
|
+
* in-memory counters does not affect already-exported metric data points.
|
|
121
|
+
* The new instance re-creates instruments from the global MeterProvider.
|
|
122
|
+
*
|
|
123
|
+
* @internal
|
|
124
|
+
*/
|
|
125
|
+
export declare function resetServerMetrics(): void;
|
|
126
|
+
export { ServerMetricsManager };
|
|
127
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/telemetry/metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,EAQL,KAAK,aAAa,EAClB,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AAwCzB;;;;;GAKG;AACH,cAAM,oBAAqB,YAAW,aAAa;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAO;IACjC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,sBAAsB,CAAK;IAGnC,OAAO,CAAC,WAAW,CAAyB;IAE5C,0FAA0F;IAC1F,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,qBAAqB,CAAS;;IAoBtC;;;;;;OAMG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IASxB;;;OAGG;YACW,iBAAiB;IAwE/B;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IA0B3E;;;;OAIG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAwB3D;;OAEG;IACH,2BAA2B,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAe1E;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAavD;;OAEG;IACH,QAAQ,IAAI,WAAW;IAgBvB;;;OAGG;IACH,KAAK,IAAI,IAAI;CAOd;AASD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,IAAI,oBAAoB,CAE1D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,IAAI,oBAAoB,CAKvD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAGD,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTelemetry Metrics for Server State
|
|
3
|
+
*
|
|
4
|
+
* Provides metrics collection for the MCP Server including:
|
|
5
|
+
* - Server uptime and startup time
|
|
6
|
+
* - Active sessions and connections
|
|
7
|
+
* - Request counts and latencies
|
|
8
|
+
* - Memory and resource usage
|
|
9
|
+
* - Connection state transitions
|
|
10
|
+
*
|
|
11
|
+
* @module server/telemetry/metrics
|
|
12
|
+
*/
|
|
13
|
+
import { getTelemetryConfig, METRIC_ATTRIBUTES, METRIC_NAMES, METRIC_DESCRIPTIONS, METRIC_UNITS, TRANSPORT_TYPES, TELEMETRY_LOG_COMPONENTS, } from "./core/index.js";
|
|
14
|
+
import { logger as baseLogger } from "../logger/index.js";
|
|
15
|
+
const logger = baseLogger.child({
|
|
16
|
+
component: TELEMETRY_LOG_COMPONENTS.METRICS,
|
|
17
|
+
});
|
|
18
|
+
/**
|
|
19
|
+
* Lazily loads and caches the `metrics` namespace from `@opentelemetry/api`.
|
|
20
|
+
* Returns null if the import fails (shouldn't happen in production).
|
|
21
|
+
*/
|
|
22
|
+
let metricsApi = null;
|
|
23
|
+
async function getMetricsApi() {
|
|
24
|
+
if (metricsApi)
|
|
25
|
+
return metricsApi;
|
|
26
|
+
const api = await import("@opentelemetry/api");
|
|
27
|
+
metricsApi = api.metrics;
|
|
28
|
+
return metricsApi;
|
|
29
|
+
}
|
|
30
|
+
/** @internal Log messages for metrics recording */
|
|
31
|
+
const LogMessages = {
|
|
32
|
+
METRIC_REQUEST_FAILED: "Failed to record request metric: %s",
|
|
33
|
+
METRIC_SESSION_FAILED: "Failed to record session metric: %s",
|
|
34
|
+
METRIC_CONNECTION_STATE_FAILED: "Failed to record connection state metric: %s",
|
|
35
|
+
METRIC_ERROR_FAILED: "Failed to record error metric: %s",
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Server Metrics Manager
|
|
39
|
+
*
|
|
40
|
+
* Collects and exports metrics about server state and performance.
|
|
41
|
+
* Uses OpenTelemetry metrics API when available, falls back to in-memory tracking.
|
|
42
|
+
*/
|
|
43
|
+
class ServerMetricsManager {
|
|
44
|
+
startTime;
|
|
45
|
+
totalRequests = 0;
|
|
46
|
+
failedRequests = 0;
|
|
47
|
+
activeHttpSessions = 0;
|
|
48
|
+
activeSseSessions = 0;
|
|
49
|
+
connectionStateChanges = 0;
|
|
50
|
+
// OpenTelemetry instruments
|
|
51
|
+
instruments = {};
|
|
52
|
+
/** Resolves when OTEL instruments are initialized (or immediately if OTEL is disabled) */
|
|
53
|
+
ready;
|
|
54
|
+
otelInitialized = false;
|
|
55
|
+
otelDropWarningLogged = false;
|
|
56
|
+
constructor() {
|
|
57
|
+
this.startTime = new Date();
|
|
58
|
+
// OTEL instruments are initialized asynchronously because the
|
|
59
|
+
// @opentelemetry/api import is lazy-loaded (see DD-020). The async
|
|
60
|
+
// init is fire-and-forget — in-memory counters always work regardless.
|
|
61
|
+
// In production the lazy singleton (`getServerMetrics()`) is created
|
|
62
|
+
// after `initializeTelemetry()`, so the await resolves near-instantly
|
|
63
|
+
// (module already cached).
|
|
64
|
+
this.ready = this.initializeMetrics()
|
|
65
|
+
.then(() => {
|
|
66
|
+
this.otelInitialized = true;
|
|
67
|
+
})
|
|
68
|
+
.catch((error) => {
|
|
69
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
70
|
+
logger.warn("OTEL metrics initialization failed: %s (in-memory metrics still active)", reason);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Wait for OTEL instrument initialization to complete.
|
|
75
|
+
*
|
|
76
|
+
* Not required for normal operation — in-memory counters work immediately.
|
|
77
|
+
* Useful when the caller needs to ensure OTEL metrics are captured from
|
|
78
|
+
* the very first request (e.g. in integration tests).
|
|
79
|
+
*/
|
|
80
|
+
async waitForReady() {
|
|
81
|
+
await this.ready;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Log a one-time debug warning when OTEL metrics are dropped
|
|
85
|
+
* because instruments aren't initialized yet.
|
|
86
|
+
*/
|
|
87
|
+
warnOtelNotReady() {
|
|
88
|
+
if (!this.otelDropWarningLogged && getTelemetryConfig().enabled) {
|
|
89
|
+
this.otelDropWarningLogged = true;
|
|
90
|
+
logger.debug("OTEL metrics instruments not yet initialized — OTEL metric dropped (in-memory counter still recorded)");
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Initialize OpenTelemetry metrics instruments.
|
|
95
|
+
* Async because @opentelemetry/api is lazy-loaded.
|
|
96
|
+
*/
|
|
97
|
+
async initializeMetrics() {
|
|
98
|
+
const config = getTelemetryConfig();
|
|
99
|
+
if (!config.enabled) {
|
|
100
|
+
return; // Skip OTEL setup if disabled
|
|
101
|
+
}
|
|
102
|
+
const metricsNamespace = await getMetricsApi();
|
|
103
|
+
const meter = metricsNamespace.getMeter(config.serviceName, config.serviceVersion);
|
|
104
|
+
// Request counter
|
|
105
|
+
this.instruments.requestCounter = meter.createCounter(METRIC_NAMES.REQUESTS_TOTAL, {
|
|
106
|
+
description: METRIC_DESCRIPTIONS[METRIC_NAMES.REQUESTS_TOTAL],
|
|
107
|
+
unit: METRIC_UNITS.COUNT,
|
|
108
|
+
});
|
|
109
|
+
// Request duration histogram
|
|
110
|
+
this.instruments.requestDuration = meter.createHistogram(METRIC_NAMES.REQUEST_DURATION, {
|
|
111
|
+
description: METRIC_DESCRIPTIONS[METRIC_NAMES.REQUEST_DURATION],
|
|
112
|
+
unit: METRIC_UNITS.MILLISECONDS,
|
|
113
|
+
});
|
|
114
|
+
// Session gauge (up/down counter for active sessions)
|
|
115
|
+
this.instruments.sessionGauge = meter.createUpDownCounter(METRIC_NAMES.SESSIONS_ACTIVE, {
|
|
116
|
+
description: METRIC_DESCRIPTIONS[METRIC_NAMES.SESSIONS_ACTIVE],
|
|
117
|
+
unit: METRIC_UNITS.COUNT,
|
|
118
|
+
});
|
|
119
|
+
// Connection state change counter
|
|
120
|
+
this.instruments.connectionStateCounter = meter.createCounter(METRIC_NAMES.CONNECTION_STATE_CHANGES, {
|
|
121
|
+
description: METRIC_DESCRIPTIONS[METRIC_NAMES.CONNECTION_STATE_CHANGES],
|
|
122
|
+
unit: METRIC_UNITS.COUNT,
|
|
123
|
+
});
|
|
124
|
+
// Error counter
|
|
125
|
+
this.instruments.errorCounter = meter.createCounter(METRIC_NAMES.ERRORS_TOTAL, {
|
|
126
|
+
description: METRIC_DESCRIPTIONS[METRIC_NAMES.ERRORS_TOTAL],
|
|
127
|
+
unit: METRIC_UNITS.COUNT,
|
|
128
|
+
});
|
|
129
|
+
// Observable gauges for system metrics
|
|
130
|
+
meter
|
|
131
|
+
.createObservableGauge(METRIC_NAMES.UPTIME, {
|
|
132
|
+
description: METRIC_DESCRIPTIONS[METRIC_NAMES.UPTIME],
|
|
133
|
+
unit: METRIC_UNITS.SECONDS,
|
|
134
|
+
})
|
|
135
|
+
.addCallback((result) => {
|
|
136
|
+
const uptimeSeconds = (Date.now() - this.startTime.getTime()) / 1000;
|
|
137
|
+
result.observe(uptimeSeconds);
|
|
138
|
+
});
|
|
139
|
+
meter
|
|
140
|
+
.createObservableGauge(METRIC_NAMES.MEMORY_HEAP_USED, {
|
|
141
|
+
description: METRIC_DESCRIPTIONS[METRIC_NAMES.MEMORY_HEAP_USED],
|
|
142
|
+
unit: METRIC_UNITS.BYTES,
|
|
143
|
+
})
|
|
144
|
+
.addCallback((result) => {
|
|
145
|
+
const memUsage = process.memoryUsage();
|
|
146
|
+
result.observe(memUsage.heapUsed);
|
|
147
|
+
});
|
|
148
|
+
meter
|
|
149
|
+
.createObservableGauge(METRIC_NAMES.MEMORY_RSS, {
|
|
150
|
+
description: METRIC_DESCRIPTIONS[METRIC_NAMES.MEMORY_RSS],
|
|
151
|
+
unit: METRIC_UNITS.BYTES,
|
|
152
|
+
})
|
|
153
|
+
.addCallback((result) => {
|
|
154
|
+
const memUsage = process.memoryUsage();
|
|
155
|
+
result.observe(memUsage.rss);
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Record a request (tool invocation).
|
|
160
|
+
*/
|
|
161
|
+
recordRequest(toolName, durationMs, success) {
|
|
162
|
+
this.totalRequests++;
|
|
163
|
+
if (!success) {
|
|
164
|
+
this.failedRequests++;
|
|
165
|
+
}
|
|
166
|
+
if (!this.otelInitialized) {
|
|
167
|
+
this.warnOtelNotReady();
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
try {
|
|
171
|
+
const attributes = {
|
|
172
|
+
[METRIC_ATTRIBUTES.TOOL_NAME]: toolName,
|
|
173
|
+
[METRIC_ATTRIBUTES.SUCCESS]: String(success),
|
|
174
|
+
};
|
|
175
|
+
this.instruments.requestCounter?.add(1, attributes);
|
|
176
|
+
this.instruments.requestDuration?.record(durationMs, attributes);
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
/* v8 ignore next 3 - OTEL error handling */
|
|
180
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
181
|
+
logger.warn(LogMessages.METRIC_REQUEST_FAILED, message);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Record an active session change.
|
|
186
|
+
* @param transport - Transport type ('http' or 'sse')
|
|
187
|
+
* @param delta - Change in session count (+1 for new, -1 for closed)
|
|
188
|
+
*/
|
|
189
|
+
recordSessionChange(transport, delta) {
|
|
190
|
+
let actualDelta = delta;
|
|
191
|
+
if (transport === TRANSPORT_TYPES.HTTP) {
|
|
192
|
+
const previous = this.activeHttpSessions;
|
|
193
|
+
this.activeHttpSessions = Math.max(0, previous + delta);
|
|
194
|
+
actualDelta = this.activeHttpSessions - previous;
|
|
195
|
+
}
|
|
196
|
+
else if (transport === TRANSPORT_TYPES.SSE) {
|
|
197
|
+
const previous = this.activeSseSessions;
|
|
198
|
+
this.activeSseSessions = Math.max(0, previous + delta);
|
|
199
|
+
actualDelta = this.activeSseSessions - previous;
|
|
200
|
+
}
|
|
201
|
+
try {
|
|
202
|
+
this.instruments.sessionGauge?.add(actualDelta, {
|
|
203
|
+
[METRIC_ATTRIBUTES.TRANSPORT]: transport,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
/* v8 ignore next 3 - OTEL error handling */
|
|
208
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
209
|
+
logger.warn(LogMessages.METRIC_SESSION_FAILED, message);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Record a connection state change.
|
|
214
|
+
*/
|
|
215
|
+
recordConnectionStateChange(previousState, newState) {
|
|
216
|
+
this.connectionStateChanges++;
|
|
217
|
+
try {
|
|
218
|
+
this.instruments.connectionStateCounter?.add(1, {
|
|
219
|
+
[METRIC_ATTRIBUTES.PREVIOUS_STATE]: previousState,
|
|
220
|
+
[METRIC_ATTRIBUTES.CURRENT_STATE]: newState,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
/* v8 ignore next 3 - OTEL error handling */
|
|
225
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
226
|
+
logger.warn(LogMessages.METRIC_CONNECTION_STATE_FAILED, message);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Record an error.
|
|
231
|
+
*/
|
|
232
|
+
recordError(errorType, component) {
|
|
233
|
+
try {
|
|
234
|
+
this.instruments.errorCounter?.add(1, {
|
|
235
|
+
[METRIC_ATTRIBUTES.ERROR_TYPE]: errorType,
|
|
236
|
+
[METRIC_ATTRIBUTES.COMPONENT]: component,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
/* v8 ignore next 3 - OTEL error handling */
|
|
241
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
242
|
+
logger.warn(LogMessages.METRIC_ERROR_FAILED, message);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Get current server statistics.
|
|
247
|
+
*/
|
|
248
|
+
getStats() {
|
|
249
|
+
const memUsage = process.memoryUsage();
|
|
250
|
+
return {
|
|
251
|
+
uptimeMs: Date.now() - this.startTime.getTime(),
|
|
252
|
+
startTime: this.startTime,
|
|
253
|
+
totalRequests: this.totalRequests,
|
|
254
|
+
failedRequests: this.failedRequests,
|
|
255
|
+
activeHttpSessions: this.activeHttpSessions,
|
|
256
|
+
activeSseSessions: this.activeSseSessions,
|
|
257
|
+
connectionStateChanges: this.connectionStateChanges,
|
|
258
|
+
memoryUsageBytes: memUsage.rss,
|
|
259
|
+
heapUsedBytes: memUsage.heapUsed,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Reset all statistics.
|
|
264
|
+
* Useful for testing.
|
|
265
|
+
*/
|
|
266
|
+
reset() {
|
|
267
|
+
this.totalRequests = 0;
|
|
268
|
+
this.failedRequests = 0;
|
|
269
|
+
this.activeHttpSessions = 0;
|
|
270
|
+
this.activeSseSessions = 0;
|
|
271
|
+
this.connectionStateChanges = 0;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
// ============================================================================
|
|
275
|
+
// Factory & Singleton
|
|
276
|
+
// ============================================================================
|
|
277
|
+
/** Singleton instance - lazily initialized */
|
|
278
|
+
let instance = null;
|
|
279
|
+
/**
|
|
280
|
+
* Create a new ServerMetricsManager instance.
|
|
281
|
+
*
|
|
282
|
+
* Use this factory function for testing or when you need
|
|
283
|
+
* an independent metrics instance.
|
|
284
|
+
*
|
|
285
|
+
* @returns A new ServerMetricsManager instance
|
|
286
|
+
*
|
|
287
|
+
* @example
|
|
288
|
+
* ```typescript
|
|
289
|
+
* // For testing - create isolated instance
|
|
290
|
+
* const metrics = createServerMetrics();
|
|
291
|
+
* metrics.recordRequest('test-tool', 100, true);
|
|
292
|
+
* ```
|
|
293
|
+
*/
|
|
294
|
+
export function createServerMetrics() {
|
|
295
|
+
return new ServerMetricsManager();
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Get the singleton ServerMetricsManager instance.
|
|
299
|
+
*
|
|
300
|
+
* This is the recommended way to access metrics in production code.
|
|
301
|
+
* The instance is lazily initialized on first access.
|
|
302
|
+
*
|
|
303
|
+
* @returns The singleton ServerMetricsManager instance
|
|
304
|
+
*
|
|
305
|
+
* @example
|
|
306
|
+
* ```typescript
|
|
307
|
+
* import { getServerMetrics } from './telemetry/metrics.js';
|
|
308
|
+
*
|
|
309
|
+
* const metrics = getServerMetrics();
|
|
310
|
+
* metrics.recordRequest('tool_name', 150, true);
|
|
311
|
+
* ```
|
|
312
|
+
*/
|
|
313
|
+
export function getServerMetrics() {
|
|
314
|
+
if (!instance) {
|
|
315
|
+
instance = new ServerMetricsManager();
|
|
316
|
+
}
|
|
317
|
+
return instance;
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Reset the singleton instance.
|
|
321
|
+
*
|
|
322
|
+
* **Warning**: Only use this for testing purposes.
|
|
323
|
+
* This will reset all tracked metrics. A fresh instance with new OTEL
|
|
324
|
+
* instruments will be created on the next `getServerMetrics()` call.
|
|
325
|
+
*
|
|
326
|
+
* Note: OTEL metric instruments are cumulative by design — resetting
|
|
327
|
+
* in-memory counters does not affect already-exported metric data points.
|
|
328
|
+
* The new instance re-creates instruments from the global MeterProvider.
|
|
329
|
+
*
|
|
330
|
+
* @internal
|
|
331
|
+
*/
|
|
332
|
+
export function resetServerMetrics() {
|
|
333
|
+
instance = null;
|
|
334
|
+
}
|
|
335
|
+
// Export the class for testing
|
|
336
|
+
export { ServerMetricsManager };
|
|
337
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/telemetry/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTelemetry SDK Initialization
|
|
3
|
+
*
|
|
4
|
+
* Handles the lifecycle of the OpenTelemetry SDK including:
|
|
5
|
+
* - SDK initialization with targeted instrumentation
|
|
6
|
+
* - Trace and metric export via OTLP/HTTP
|
|
7
|
+
* - Prometheus metrics embedded at `/metrics` on the MCP Express server
|
|
8
|
+
* - Graceful shutdown
|
|
9
|
+
*
|
|
10
|
+
* ## Configuration
|
|
11
|
+
*
|
|
12
|
+
* All OTEL settings are routed through the config system (env vars + config file).
|
|
13
|
+
* The framework builds exporters and readers explicitly from the unified config
|
|
14
|
+
* so that both env vars and config file are respected consistently.
|
|
15
|
+
*
|
|
16
|
+
* **Framework-managed** (with defaults):
|
|
17
|
+
* - `OTEL_ENABLED` — Master toggle (default: false)
|
|
18
|
+
* - `OTEL_SERVICE_NAME` — Service name (default: 'mcp-server')
|
|
19
|
+
* - `OTEL_METRICS_EXPORTER` — Metric exporters (default: 'otlp,prometheus')
|
|
20
|
+
* - `OTEL_LOGS_EXPORTER` — Log exporter (default: 'none' — framework has own logger)
|
|
21
|
+
*
|
|
22
|
+
* **Standard OTEL (pass-through, no defaults)**:
|
|
23
|
+
* - `OTEL_EXPORTER_OTLP_ENDPOINT` — OTLP endpoint URL
|
|
24
|
+
* - `OTEL_TRACES_EXPORTER` — Trace exporter: otlp (default), console, none
|
|
25
|
+
* - `OTEL_LOG_LEVEL` — SDK diagnostic log level
|
|
26
|
+
* - `OTEL_METRIC_EXPORT_INTERVAL` — Periodic metric export interval (ms)
|
|
27
|
+
*
|
|
28
|
+
* ## Environment Variable Synchronization
|
|
29
|
+
*
|
|
30
|
+
* The NodeSDK reads standard OTEL env vars directly from `process.env`
|
|
31
|
+
* for internal auto-configuration. Since the framework's config system
|
|
32
|
+
* deliberately does NOT mutate `process.env` (12-Factor compliance),
|
|
33
|
+
* config-file-only values would be invisible to the SDK.
|
|
34
|
+
*
|
|
35
|
+
* {@link syncOtelEnvironment} bridges this gap by writing config values
|
|
36
|
+
* to `process.env` for keys that are NOT already set, preserving the
|
|
37
|
+
* 12-Factor priority: env var > config file > default.
|
|
38
|
+
*
|
|
39
|
+
* ## DiagLogger / OTEL_LOG_LEVEL
|
|
40
|
+
*
|
|
41
|
+
* `OTEL_LOG_LEVEL` is consumed (deleted) from `process.env` in Step 0
|
|
42
|
+
* of {@link initializeTelemetry}, BEFORE the NodeSDK constructor.
|
|
43
|
+
* Without this, the SDK calls `diag.setLogger(new DiagConsoleLogger(), level)`
|
|
44
|
+
* — writing diagnostics to stdout and corrupting the MCP stdio transport.
|
|
45
|
+
*
|
|
46
|
+
* The framework sets `frameworkDiagLogger` as default DiagLogger,
|
|
47
|
+
* which routes all OTEL diagnostics through the framework's logging
|
|
48
|
+
* pipeline (→ stderr with secret scrubbing and structured formatting).
|
|
49
|
+
* Power users can override via `onBeforeTelemetryInit` callback.
|
|
50
|
+
*
|
|
51
|
+
* ## Why exporters are built manually
|
|
52
|
+
*
|
|
53
|
+
* The SDK's env-var auto-config is bypassed when `traceExporter` or
|
|
54
|
+
* `metricReaders` are passed to the NodeSDK constructor. Since we need
|
|
55
|
+
* to build metric readers manually (for Prometheus embedded mode), AND
|
|
56
|
+
* we want config-file support for all settings, we build both trace
|
|
57
|
+
* and metric exporters explicitly from the unified config.
|
|
58
|
+
*
|
|
59
|
+
* @module server/telemetry/sdk
|
|
60
|
+
*/
|
|
61
|
+
/**
|
|
62
|
+
* Initialize the OpenTelemetry SDK.
|
|
63
|
+
* Call this at application startup, before any other code.
|
|
64
|
+
*
|
|
65
|
+
* All @opentelemetry/* packages are loaded dynamically on first call
|
|
66
|
+
* (see DD-020). When OTEL is disabled, no packages are loaded and
|
|
67
|
+
* the function returns immediately — saving ~15-20 MB of memory.
|
|
68
|
+
*
|
|
69
|
+
* Builds both trace and metric exporters from the unified config.
|
|
70
|
+
* Only HTTP and Express instrumentations are loaded — other
|
|
71
|
+
* auto-instrumentations are irrelevant for MCP servers.
|
|
72
|
+
*
|
|
73
|
+
* @param onBeforeInit - Optional callback invoked before SDK construction.
|
|
74
|
+
* Power users can call `diag.setLogger()` in this callback to override the
|
|
75
|
+
* framework's default DiagLogger. The callback runs AFTER the framework sets
|
|
76
|
+
* `frameworkDiagLogger` as default.
|
|
77
|
+
* @returns true if OpenTelemetry was initialized, false if disabled
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```typescript
|
|
81
|
+
* import { initializeTelemetry } from './telemetry/index.js';
|
|
82
|
+
*
|
|
83
|
+
* const enabled = await initializeTelemetry();
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
export declare function initializeTelemetry(onBeforeInit?: () => void): Promise<boolean>;
|
|
87
|
+
/**
|
|
88
|
+
* Shutdown the OpenTelemetry SDK.
|
|
89
|
+
* Call this during application shutdown.
|
|
90
|
+
*
|
|
91
|
+
* @returns Promise that resolves when shutdown is complete
|
|
92
|
+
*/
|
|
93
|
+
export declare function shutdownTelemetry(): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* Check if the SDK is currently initialized.
|
|
96
|
+
*
|
|
97
|
+
* @returns true if SDK is initialized
|
|
98
|
+
*/
|
|
99
|
+
export declare function isSdkInitialized(): boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Get the Prometheus exporter instance.
|
|
102
|
+
*
|
|
103
|
+
* Returns null when telemetry is disabled, not yet initialized,
|
|
104
|
+
* or 'prometheus' is not in OTEL_METRICS_EXPORTER.
|
|
105
|
+
* Used by the `/metrics` Express route to serve Prometheus metrics.
|
|
106
|
+
*
|
|
107
|
+
* @returns PrometheusExporter instance or null
|
|
108
|
+
*/
|
|
109
|
+
export declare function getPrometheusExporter(): unknown;
|
|
110
|
+
//# sourceMappingURL=sdk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/telemetry/sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AAqIH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,mBAAmB,CAAC,YAAY,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAqIrF;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkBvD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C"}
|