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,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File Log Writer Module
|
|
3
|
+
*
|
|
4
|
+
* Writes log entries to files organized by component.
|
|
5
|
+
* Handles stream creation, directory management, and graceful shutdown.
|
|
6
|
+
*
|
|
7
|
+
* @module logger/writers/file-writer
|
|
8
|
+
*/
|
|
9
|
+
import type { LogLevel } from "../core/types.js";
|
|
10
|
+
import { BaseLogWriter } from "./base-writer.js";
|
|
11
|
+
/**
|
|
12
|
+
* Configuration for the file writer.
|
|
13
|
+
*/
|
|
14
|
+
export interface FileWriterConfig {
|
|
15
|
+
/** Directory to write log files to */
|
|
16
|
+
logDir: string;
|
|
17
|
+
/** Component names to create streams for (default: ['server', 'api', 'transport']) */
|
|
18
|
+
components?: readonly string[];
|
|
19
|
+
/** File extension for log files (default: '.log') */
|
|
20
|
+
extension?: string;
|
|
21
|
+
/** Fallback component when requested component has no stream */
|
|
22
|
+
fallbackComponent?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Maximum file size in bytes before rotation (default: 10 MB).
|
|
25
|
+
* When a log file exceeds this size, it is renamed to `<component>.1.log`
|
|
26
|
+
* and a new file is created. Set to 0 to disable rotation.
|
|
27
|
+
*/
|
|
28
|
+
maxFileSize?: number | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* Maximum number of rotated files to keep per component (default: 3).
|
|
31
|
+
* Older files beyond this count are deleted during rotation.
|
|
32
|
+
*/
|
|
33
|
+
maxFiles?: number | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Log file retention in days. Files (including rotated) older than this
|
|
36
|
+
* are deleted automatically. Set to 0 to disable (default: 0).
|
|
37
|
+
*/
|
|
38
|
+
retentionDays?: number | undefined;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* File Writer class for writing logs to files.
|
|
42
|
+
*
|
|
43
|
+
* Features:
|
|
44
|
+
* - Creates separate log files per component
|
|
45
|
+
* - Size-based log rotation with configurable limits
|
|
46
|
+
* - Automatic directory creation
|
|
47
|
+
* - Graceful stream shutdown
|
|
48
|
+
* - Fallback to default component when stream not found
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* const writer = new FileWriter({
|
|
53
|
+
* logDir: '/var/log/app',
|
|
54
|
+
* maxFileSize: 5 * 1024 * 1024, // 5 MB
|
|
55
|
+
* maxFiles: 5,
|
|
56
|
+
* });
|
|
57
|
+
* writer.write('info', 'Server started', 'server');
|
|
58
|
+
* await writer.close();
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare class FileWriter extends BaseLogWriter {
|
|
62
|
+
private streams;
|
|
63
|
+
private logDir;
|
|
64
|
+
private extension;
|
|
65
|
+
private fallbackComponent;
|
|
66
|
+
private initialized;
|
|
67
|
+
/** Rotation config */
|
|
68
|
+
private readonly maxFileSize;
|
|
69
|
+
private readonly maxFiles;
|
|
70
|
+
private readonly retentionDays;
|
|
71
|
+
/** Track approximate bytes written per component for rotation checks */
|
|
72
|
+
private bytesWritten;
|
|
73
|
+
/** Guard against concurrent rotation */
|
|
74
|
+
private rotating;
|
|
75
|
+
/** Retention cleanup interval */
|
|
76
|
+
private retentionTimer;
|
|
77
|
+
/** Default max file size: 10 MB */
|
|
78
|
+
private static readonly DEFAULT_MAX_FILE_SIZE;
|
|
79
|
+
/** Default max rotated files to keep */
|
|
80
|
+
private static readonly DEFAULT_MAX_FILES;
|
|
81
|
+
/** Retention cleanup interval: once per day */
|
|
82
|
+
private static readonly RETENTION_CHECK_INTERVAL_MS;
|
|
83
|
+
/**
|
|
84
|
+
* Create a new FileWriter.
|
|
85
|
+
* @param config - Writer configuration
|
|
86
|
+
*/
|
|
87
|
+
constructor(config: FileWriterConfig);
|
|
88
|
+
/**
|
|
89
|
+
* Initialize streams for the specified components.
|
|
90
|
+
*/
|
|
91
|
+
private initialize;
|
|
92
|
+
/**
|
|
93
|
+
* Create a write stream for a component.
|
|
94
|
+
* Includes error handling to prevent unhandled stream errors.
|
|
95
|
+
* Initializes byte tracking from existing file size for rotation.
|
|
96
|
+
*/
|
|
97
|
+
private createStream;
|
|
98
|
+
/**
|
|
99
|
+
* Write a log message to the appropriate file.
|
|
100
|
+
* Triggers rotation when the file exceeds `maxFileSize`.
|
|
101
|
+
*
|
|
102
|
+
* @param _level - The log level (unused for files)
|
|
103
|
+
* @param message - The formatted log message
|
|
104
|
+
* @param component - The component (determines which file)
|
|
105
|
+
*/
|
|
106
|
+
write(_level: LogLevel, message: string, component: string): void;
|
|
107
|
+
/**
|
|
108
|
+
* Rotate the log file for a component.
|
|
109
|
+
*
|
|
110
|
+
* Rotation chain: `server.log` → `server.1.log` → `server.2.log` → ...
|
|
111
|
+
* Files beyond `maxFiles` are deleted. The current stream is replaced.
|
|
112
|
+
*
|
|
113
|
+
* Rotation is **synchronous** to guarantee ordering — log writes that arrive
|
|
114
|
+
* during rotation are safe because Node.js is single-threaded.
|
|
115
|
+
*/
|
|
116
|
+
private rotateFile;
|
|
117
|
+
/**
|
|
118
|
+
* Delete log files older than `retentionDays`.
|
|
119
|
+
*
|
|
120
|
+
* Scans the log directory for files matching the configured extension
|
|
121
|
+
* and removes any whose `mtime` exceeds the retention threshold.
|
|
122
|
+
* Called once at startup and then once per day.
|
|
123
|
+
*/
|
|
124
|
+
private cleanExpiredFiles;
|
|
125
|
+
/** Build the primary log file path for a component. */
|
|
126
|
+
private getFilePath;
|
|
127
|
+
/** Build the rotated file path: `<component>.<n><extension>` */
|
|
128
|
+
private getRotatedPath;
|
|
129
|
+
/** Rename a file if it exists; ignore errors silently. */
|
|
130
|
+
private renameSafe;
|
|
131
|
+
/** Delete a file if it exists; ignore errors silently. */
|
|
132
|
+
private unlinkSafe;
|
|
133
|
+
/**
|
|
134
|
+
* Close all streams gracefully.
|
|
135
|
+
* Should be called during application shutdown to ensure all logs are flushed.
|
|
136
|
+
*
|
|
137
|
+
* @returns Promise that resolves when all streams are closed
|
|
138
|
+
*/
|
|
139
|
+
close(): Promise<void>;
|
|
140
|
+
/**
|
|
141
|
+
* Check if the writer has been initialized successfully.
|
|
142
|
+
*/
|
|
143
|
+
isAvailable(): boolean;
|
|
144
|
+
/**
|
|
145
|
+
* Check if a stream exists for a component.
|
|
146
|
+
*/
|
|
147
|
+
hasStream(component: string): boolean;
|
|
148
|
+
/**
|
|
149
|
+
* Add a new stream for a component.
|
|
150
|
+
*
|
|
151
|
+
* @param component - The component name
|
|
152
|
+
* @returns true if stream was created successfully
|
|
153
|
+
*/
|
|
154
|
+
addStream(component: string): boolean;
|
|
155
|
+
/**
|
|
156
|
+
* Get the number of active streams.
|
|
157
|
+
*/
|
|
158
|
+
getStreamCount(): number;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=file-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-writer.d.ts","sourceRoot":"","sources":["../../../src/logger/writers/file-writer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,UAAW,SAAQ,aAAa;IAC3C,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,WAAW,CAAkB;IAErC,sBAAsB;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,wEAAwE;IACxE,OAAO,CAAC,YAAY,CAAkC;IACtD,wCAAwC;IACxC,OAAO,CAAC,QAAQ,CAA0B;IAC1C,iCAAiC;IACjC,OAAO,CAAC,cAAc,CAA+C;IAErE,mCAAmC;IACnC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAoB;IACjE,wCAAwC;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAK;IAC9C,+CAA+C;IAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAuB;IAE1E;;;OAGG;gBACS,MAAM,EAAE,gBAAgB;IAWpC;;OAEG;IACH,OAAO,CAAC,UAAU;IAgClB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IA2CpB;;;;;;;OAOG;IACH,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAyBjE;;;;;;;;OAQG;IACH,OAAO,CAAC,UAAU;IA6ClB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IA6BzB,uDAAuD;IACvD,OAAO,CAAC,WAAW;IAKnB,gEAAgE;IAChE,OAAO,CAAC,cAAc;IAKtB,0DAA0D;IAC1D,OAAO,CAAC,UAAU;IAUlB,0DAA0D;IAC1D,OAAO,CAAC,UAAU;IAUlB;;;;;OAKG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B5B;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIrC;;;;;OAKG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIrC;;OAEG;IACH,cAAc,IAAI,MAAM;CAGzB"}
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File Log Writer Module
|
|
3
|
+
*
|
|
4
|
+
* Writes log entries to files organized by component.
|
|
5
|
+
* Handles stream creation, directory management, and graceful shutdown.
|
|
6
|
+
*
|
|
7
|
+
* @module logger/writers/file-writer
|
|
8
|
+
*/
|
|
9
|
+
import * as fs from "fs";
|
|
10
|
+
import * as path from "path";
|
|
11
|
+
import { DEFAULT_LOG_COMPONENTS, LOG_FILE_EXTENSION } from "../core/constants.js";
|
|
12
|
+
import { BaseLogWriter } from "./base-writer.js";
|
|
13
|
+
/**
|
|
14
|
+
* File Writer class for writing logs to files.
|
|
15
|
+
*
|
|
16
|
+
* Features:
|
|
17
|
+
* - Creates separate log files per component
|
|
18
|
+
* - Size-based log rotation with configurable limits
|
|
19
|
+
* - Automatic directory creation
|
|
20
|
+
* - Graceful stream shutdown
|
|
21
|
+
* - Fallback to default component when stream not found
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const writer = new FileWriter({
|
|
26
|
+
* logDir: '/var/log/app',
|
|
27
|
+
* maxFileSize: 5 * 1024 * 1024, // 5 MB
|
|
28
|
+
* maxFiles: 5,
|
|
29
|
+
* });
|
|
30
|
+
* writer.write('info', 'Server started', 'server');
|
|
31
|
+
* await writer.close();
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export class FileWriter extends BaseLogWriter {
|
|
35
|
+
streams = new Map();
|
|
36
|
+
logDir;
|
|
37
|
+
extension;
|
|
38
|
+
fallbackComponent;
|
|
39
|
+
initialized = false;
|
|
40
|
+
/** Rotation config */
|
|
41
|
+
maxFileSize;
|
|
42
|
+
maxFiles;
|
|
43
|
+
retentionDays;
|
|
44
|
+
/** Track approximate bytes written per component for rotation checks */
|
|
45
|
+
bytesWritten = new Map();
|
|
46
|
+
/** Guard against concurrent rotation */
|
|
47
|
+
rotating = new Set();
|
|
48
|
+
/** Retention cleanup interval */
|
|
49
|
+
retentionTimer = null;
|
|
50
|
+
/** Default max file size: 10 MB */
|
|
51
|
+
static DEFAULT_MAX_FILE_SIZE = 10 * 1024 * 1024;
|
|
52
|
+
/** Default max rotated files to keep */
|
|
53
|
+
static DEFAULT_MAX_FILES = 3;
|
|
54
|
+
/** Retention cleanup interval: once per day */
|
|
55
|
+
static RETENTION_CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
56
|
+
/**
|
|
57
|
+
* Create a new FileWriter.
|
|
58
|
+
* @param config - Writer configuration
|
|
59
|
+
*/
|
|
60
|
+
constructor(config) {
|
|
61
|
+
super();
|
|
62
|
+
this.logDir = config.logDir;
|
|
63
|
+
this.extension = config.extension ?? LOG_FILE_EXTENSION;
|
|
64
|
+
this.fallbackComponent = config.fallbackComponent ?? "server";
|
|
65
|
+
this.maxFileSize = config.maxFileSize ?? FileWriter.DEFAULT_MAX_FILE_SIZE;
|
|
66
|
+
this.maxFiles = config.maxFiles ?? FileWriter.DEFAULT_MAX_FILES;
|
|
67
|
+
this.retentionDays = config.retentionDays ?? 0;
|
|
68
|
+
this.initialize(config.components ?? DEFAULT_LOG_COMPONENTS);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Initialize streams for the specified components.
|
|
72
|
+
*/
|
|
73
|
+
initialize(components) {
|
|
74
|
+
if (this.initialized)
|
|
75
|
+
return;
|
|
76
|
+
try {
|
|
77
|
+
// Ensure log directory exists
|
|
78
|
+
if (!fs.existsSync(this.logDir)) {
|
|
79
|
+
fs.mkdirSync(this.logDir, { recursive: true });
|
|
80
|
+
}
|
|
81
|
+
// Create streams for each component
|
|
82
|
+
for (const component of components) {
|
|
83
|
+
this.createStream(component);
|
|
84
|
+
}
|
|
85
|
+
this.initialized = true;
|
|
86
|
+
// Start retention cleanup if enabled
|
|
87
|
+
if (this.retentionDays > 0) {
|
|
88
|
+
// Run once immediately, then periodically
|
|
89
|
+
this.cleanExpiredFiles();
|
|
90
|
+
this.retentionTimer = setInterval(() => this.cleanExpiredFiles(), FileWriter.RETENTION_CHECK_INTERVAL_MS);
|
|
91
|
+
// Allow the process to exit even if the timer is still running
|
|
92
|
+
this.retentionTimer.unref();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
// File logging is optional — report failure on stderr (stdout reserved for MCP protocol)
|
|
97
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
98
|
+
process.stderr.write(`[FileWriter] Initialization failed (file logging disabled): ${message}\n`);
|
|
99
|
+
this.enabled = false;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Create a write stream for a component.
|
|
104
|
+
* Includes error handling to prevent unhandled stream errors.
|
|
105
|
+
* Initializes byte tracking from existing file size for rotation.
|
|
106
|
+
*/
|
|
107
|
+
createStream(component) {
|
|
108
|
+
if (this.streams.has(component)) {
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
try {
|
|
112
|
+
const filePath = this.getFilePath(component);
|
|
113
|
+
const stream = fs.createWriteStream(filePath, { flags: "a" });
|
|
114
|
+
// Handle stream errors to prevent unhandled exceptions
|
|
115
|
+
stream.on("error", (err) => {
|
|
116
|
+
// Log to stderr since our logger might not be available
|
|
117
|
+
process.stderr.write(`[FileWriter] Stream error for ${component}: ${err.message}\n`);
|
|
118
|
+
// Remove the broken stream
|
|
119
|
+
this.streams.delete(component);
|
|
120
|
+
// If the log directory was deleted externally, attempt recovery
|
|
121
|
+
if (err.code === "ENOENT") {
|
|
122
|
+
try {
|
|
123
|
+
fs.mkdirSync(this.logDir, { recursive: true });
|
|
124
|
+
this.createStream(component);
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
process.stderr.write(`[FileWriter] Directory recovery failed for ${component} — file logging disabled\n`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
this.streams.set(component, stream);
|
|
132
|
+
// Initialize byte counter from existing file size (for rotation accuracy after restart)
|
|
133
|
+
try {
|
|
134
|
+
const stats = fs.statSync(filePath);
|
|
135
|
+
this.bytesWritten.set(component, stats.size);
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
this.bytesWritten.set(component, 0);
|
|
139
|
+
}
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Write a log message to the appropriate file.
|
|
148
|
+
* Triggers rotation when the file exceeds `maxFileSize`.
|
|
149
|
+
*
|
|
150
|
+
* @param _level - The log level (unused for files)
|
|
151
|
+
* @param message - The formatted log message
|
|
152
|
+
* @param component - The component (determines which file)
|
|
153
|
+
*/
|
|
154
|
+
write(_level, message, component) {
|
|
155
|
+
if (!this.enabled || !this.initialized)
|
|
156
|
+
return;
|
|
157
|
+
// Resolve effective component (fallback if stream missing)
|
|
158
|
+
const effectiveComponent = this.streams.has(component) ? component : this.fallbackComponent;
|
|
159
|
+
const stream = this.streams.get(effectiveComponent);
|
|
160
|
+
if (!stream)
|
|
161
|
+
return;
|
|
162
|
+
const data = message + "\n";
|
|
163
|
+
stream.write(data);
|
|
164
|
+
// Track approximate bytes written for rotation
|
|
165
|
+
const written = (this.bytesWritten.get(effectiveComponent) ?? 0) + Buffer.byteLength(data);
|
|
166
|
+
this.bytesWritten.set(effectiveComponent, written);
|
|
167
|
+
// Trigger rotation when file exceeds limit (skip if rotation disabled or already in progress)
|
|
168
|
+
if (this.maxFileSize > 0 && written >= this.maxFileSize && !this.rotating.has(effectiveComponent)) {
|
|
169
|
+
this.rotateFile(effectiveComponent);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// ---------------------------------------------------------------------------
|
|
173
|
+
// Rotation
|
|
174
|
+
// ---------------------------------------------------------------------------
|
|
175
|
+
/**
|
|
176
|
+
* Rotate the log file for a component.
|
|
177
|
+
*
|
|
178
|
+
* Rotation chain: `server.log` → `server.1.log` → `server.2.log` → ...
|
|
179
|
+
* Files beyond `maxFiles` are deleted. The current stream is replaced.
|
|
180
|
+
*
|
|
181
|
+
* Rotation is **synchronous** to guarantee ordering — log writes that arrive
|
|
182
|
+
* during rotation are safe because Node.js is single-threaded.
|
|
183
|
+
*/
|
|
184
|
+
rotateFile(component) {
|
|
185
|
+
this.rotating.add(component);
|
|
186
|
+
try {
|
|
187
|
+
// 1. Close the current stream synchronously.
|
|
188
|
+
// destroy() releases the file descriptor immediately (unlike end()
|
|
189
|
+
// which queues async close). This prevents EACCES on Windows when
|
|
190
|
+
// renaming the file in step 4.
|
|
191
|
+
const oldStream = this.streams.get(component);
|
|
192
|
+
if (oldStream) {
|
|
193
|
+
oldStream.destroy();
|
|
194
|
+
this.streams.delete(component);
|
|
195
|
+
}
|
|
196
|
+
const basePath = this.getFilePath(component);
|
|
197
|
+
// 2. Delete oldest file if it exceeds maxFiles
|
|
198
|
+
const oldestPath = this.getRotatedPath(component, this.maxFiles);
|
|
199
|
+
this.unlinkSafe(oldestPath);
|
|
200
|
+
// 3. Shift existing rotated files: .3 → .4, .2 → .3, .1 → .2
|
|
201
|
+
for (let i = this.maxFiles - 1; i >= 1; i--) {
|
|
202
|
+
const from = this.getRotatedPath(component, i);
|
|
203
|
+
const to = this.getRotatedPath(component, i + 1);
|
|
204
|
+
this.renameSafe(from, to);
|
|
205
|
+
}
|
|
206
|
+
// 4. Rename current file to .1
|
|
207
|
+
this.renameSafe(basePath, this.getRotatedPath(component, 1));
|
|
208
|
+
// 5. Create a fresh stream and reset byte counter
|
|
209
|
+
this.bytesWritten.set(component, 0);
|
|
210
|
+
this.createStream(component);
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
// Rotation failure must not crash the application
|
|
214
|
+
process.stderr.write(`[FileWriter] Rotation failed for ${component}\n`);
|
|
215
|
+
}
|
|
216
|
+
finally {
|
|
217
|
+
this.rotating.delete(component);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// ---------------------------------------------------------------------------
|
|
221
|
+
// Retention
|
|
222
|
+
// ---------------------------------------------------------------------------
|
|
223
|
+
/**
|
|
224
|
+
* Delete log files older than `retentionDays`.
|
|
225
|
+
*
|
|
226
|
+
* Scans the log directory for files matching the configured extension
|
|
227
|
+
* and removes any whose `mtime` exceeds the retention threshold.
|
|
228
|
+
* Called once at startup and then once per day.
|
|
229
|
+
*/
|
|
230
|
+
cleanExpiredFiles() {
|
|
231
|
+
if (this.retentionDays <= 0)
|
|
232
|
+
return;
|
|
233
|
+
const cutoff = Date.now() - this.retentionDays * 24 * 60 * 60 * 1000;
|
|
234
|
+
try {
|
|
235
|
+
const entries = fs.readdirSync(this.logDir);
|
|
236
|
+
for (const entry of entries) {
|
|
237
|
+
if (!entry.endsWith(this.extension))
|
|
238
|
+
continue;
|
|
239
|
+
const filePath = path.join(this.logDir, entry);
|
|
240
|
+
try {
|
|
241
|
+
const stats = fs.statSync(filePath);
|
|
242
|
+
if (stats.isFile() && stats.mtimeMs < cutoff) {
|
|
243
|
+
fs.unlinkSync(filePath);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
// best-effort: individual file errors are non-fatal
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
// best-effort: directory read errors are non-fatal
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// ---------------------------------------------------------------------------
|
|
256
|
+
// Path Helpers
|
|
257
|
+
// ---------------------------------------------------------------------------
|
|
258
|
+
/** Build the primary log file path for a component. */
|
|
259
|
+
getFilePath(component) {
|
|
260
|
+
const safeName = component.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
261
|
+
return path.join(this.logDir, `${safeName}${this.extension}`);
|
|
262
|
+
}
|
|
263
|
+
/** Build the rotated file path: `<component>.<n><extension>` */
|
|
264
|
+
getRotatedPath(component, n) {
|
|
265
|
+
const safeName = component.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
266
|
+
return path.join(this.logDir, `${safeName}.${n}${this.extension}`);
|
|
267
|
+
}
|
|
268
|
+
/** Rename a file if it exists; ignore errors silently. */
|
|
269
|
+
renameSafe(from, to) {
|
|
270
|
+
try {
|
|
271
|
+
if (fs.existsSync(from)) {
|
|
272
|
+
fs.renameSync(from, to);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
catch {
|
|
276
|
+
// best-effort
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/** Delete a file if it exists; ignore errors silently. */
|
|
280
|
+
unlinkSafe(filePath) {
|
|
281
|
+
try {
|
|
282
|
+
if (fs.existsSync(filePath)) {
|
|
283
|
+
fs.unlinkSync(filePath);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
catch {
|
|
287
|
+
// best-effort
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Close all streams gracefully.
|
|
292
|
+
* Should be called during application shutdown to ensure all logs are flushed.
|
|
293
|
+
*
|
|
294
|
+
* @returns Promise that resolves when all streams are closed
|
|
295
|
+
*/
|
|
296
|
+
async close() {
|
|
297
|
+
// Stop retention timer
|
|
298
|
+
if (this.retentionTimer) {
|
|
299
|
+
clearInterval(this.retentionTimer);
|
|
300
|
+
this.retentionTimer = null;
|
|
301
|
+
}
|
|
302
|
+
const closePromises = [];
|
|
303
|
+
for (const [, stream] of this.streams.entries()) {
|
|
304
|
+
closePromises.push(new Promise((resolve) => {
|
|
305
|
+
stream.end(() => {
|
|
306
|
+
stream.close(() => resolve());
|
|
307
|
+
});
|
|
308
|
+
}));
|
|
309
|
+
}
|
|
310
|
+
await Promise.allSettled(closePromises);
|
|
311
|
+
this.streams.clear();
|
|
312
|
+
this.bytesWritten.clear();
|
|
313
|
+
this.rotating.clear();
|
|
314
|
+
this.initialized = false;
|
|
315
|
+
await super.close();
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Check if the writer has been initialized successfully.
|
|
319
|
+
*/
|
|
320
|
+
isAvailable() {
|
|
321
|
+
return this.enabled && this.initialized;
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Check if a stream exists for a component.
|
|
325
|
+
*/
|
|
326
|
+
hasStream(component) {
|
|
327
|
+
return this.streams.has(component);
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Add a new stream for a component.
|
|
331
|
+
*
|
|
332
|
+
* @param component - The component name
|
|
333
|
+
* @returns true if stream was created successfully
|
|
334
|
+
*/
|
|
335
|
+
addStream(component) {
|
|
336
|
+
return this.createStream(component);
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Get the number of active streams.
|
|
340
|
+
*/
|
|
341
|
+
getStreamCount() {
|
|
342
|
+
return this.streams.size;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
//# sourceMappingURL=file-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-writer.js","sourceRoot":"","sources":["../../../src/logger/writers/file-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Writers Module
|
|
3
|
+
*
|
|
4
|
+
* Log output writers for different destinations.
|
|
5
|
+
* Each writer handles a specific output target (console, file, MCP).
|
|
6
|
+
*
|
|
7
|
+
* Note: TransportMode type should be imported from '../core/constants.js'
|
|
8
|
+
*
|
|
9
|
+
* @module logger/writers
|
|
10
|
+
*/
|
|
11
|
+
export { BaseLogWriter } from "./base-writer.js";
|
|
12
|
+
export { ConsoleWriter, type ConsoleWriterConfig } from "./console-writer.js";
|
|
13
|
+
export { FileWriter, type FileWriterConfig } from "./file-writer.js";
|
|
14
|
+
export { CompositeWriter } from "./composite-writer.js";
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/logger/writers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG9E,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGrE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Writers Module
|
|
3
|
+
*
|
|
4
|
+
* Log output writers for different destinations.
|
|
5
|
+
* Each writer handles a specific output target (console, file, MCP).
|
|
6
|
+
*
|
|
7
|
+
* Note: TransportMode type should be imported from '../core/constants.js'
|
|
8
|
+
*
|
|
9
|
+
* @module logger/writers
|
|
10
|
+
*/
|
|
11
|
+
// Base Writer
|
|
12
|
+
export { BaseLogWriter } from "./base-writer.js";
|
|
13
|
+
// Console Writer
|
|
14
|
+
export { ConsoleWriter } from "./console-writer.js";
|
|
15
|
+
// File Writer
|
|
16
|
+
export { FileWriter } from "./file-writer.js";
|
|
17
|
+
// Composite Writer
|
|
18
|
+
export { CompositeWriter } from "./composite-writer.js";
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/logger/writers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc;AACd,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAA4B,MAAM,qBAAqB,CAAC;AAE9E,cAAc;AACd,OAAO,EAAE,UAAU,EAAyB,MAAM,kBAAkB,CAAC;AAErE,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* App Definition Factory
|
|
3
|
+
*
|
|
4
|
+
* Provides the defineApp() factory function for defining MCP Apps.
|
|
5
|
+
* An MCP App combines a tool with a UI resource, linked via
|
|
6
|
+
* `_meta.ui.resourceUri` on the tool definition.
|
|
7
|
+
*
|
|
8
|
+
* `defineApp()` internally creates:
|
|
9
|
+
* 1. A static resource via `defineResource()` (the UI)
|
|
10
|
+
* 2. A tool via `defineTool()` with `_meta.ui.resourceUri` pointing to the resource
|
|
11
|
+
*
|
|
12
|
+
* Both are automatically registered in the global registries.
|
|
13
|
+
*
|
|
14
|
+
* @module mcp/capabilities/apps/define-app
|
|
15
|
+
*/
|
|
16
|
+
import type { z } from "zod";
|
|
17
|
+
import type { AppDefinition } from "../../types/index.js";
|
|
18
|
+
/**
|
|
19
|
+
* Define an MCP App with automatic resource and tool registration.
|
|
20
|
+
*
|
|
21
|
+
* Creates a tool linked to a UI resource via `_meta.ui.resourceUri`.
|
|
22
|
+
* Both the tool and the resource are registered in the global registries,
|
|
23
|
+
* so they are automatically available when `createServer()` is called.
|
|
24
|
+
*
|
|
25
|
+
* @typeParam TInput - Zod schema type for the tool input (inferred)
|
|
26
|
+
*
|
|
27
|
+
* @param definition - App definition with resource and tool configuration
|
|
28
|
+
* @returns The original app definition (for re-export and type inference)
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* import { defineApp, text, z } from 'mcp-server-framework';
|
|
33
|
+
*
|
|
34
|
+
* export const calculator = defineApp({
|
|
35
|
+
* name: 'calculator',
|
|
36
|
+
* description: 'An interactive calculator app',
|
|
37
|
+
* resource: {
|
|
38
|
+
* uri: 'ui://calculator',
|
|
39
|
+
* mimeType: 'text/html;profile=mcp-app',
|
|
40
|
+
* read: async () => '<html>...calculator UI...</html>',
|
|
41
|
+
* },
|
|
42
|
+
* input: z.object({ expression: z.string() }),
|
|
43
|
+
* handler: async ({ expression }) => text('42'),
|
|
44
|
+
* });
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* // With annotations and custom _meta
|
|
50
|
+
* export const dashboard = defineApp({
|
|
51
|
+
* name: 'dashboard',
|
|
52
|
+
* description: 'System monitoring dashboard',
|
|
53
|
+
* resource: {
|
|
54
|
+
* uri: 'ui://dashboard',
|
|
55
|
+
* name: 'Dashboard UI',
|
|
56
|
+
* description: 'Interactive system monitoring dashboard',
|
|
57
|
+
* mimeType: 'text/html;profile=mcp-app',
|
|
58
|
+
* read: async () => generateDashboardHtml(),
|
|
59
|
+
* },
|
|
60
|
+
* input: z.object({ metric: z.string().optional() }),
|
|
61
|
+
* handler: async ({ metric }, ctx) => json(await getMetrics(metric)),
|
|
62
|
+
* annotations: { readOnlyHint: true },
|
|
63
|
+
* _meta: { version: '2.0' },
|
|
64
|
+
* });
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export declare function defineApp<TInput extends z.ZodTypeAny>(definition: AppDefinition<TInput>): AppDefinition<TInput>;
|
|
68
|
+
//# sourceMappingURL=define-app.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define-app.d.ts","sourceRoot":"","sources":["../../../../src/mcp/capabilities/apps/define-app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAW1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,wBAAgB,SAAS,CAAC,MAAM,SAAS,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CA4D/G"}
|