@j0hanz/superfetch 2.1.4 → 2.1.5
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/dist/cache.d.ts +1 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +1 -0
- package/dist/cache.js.map +1 -0
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -0
- package/dist/crypto.d.ts +1 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +1 -0
- package/dist/crypto.js.map +1 -0
- package/dist/errors.d.ts +1 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +1 -0
- package/dist/errors.js.map +1 -0
- package/dist/fetch.d.ts +1 -0
- package/dist/fetch.d.ts.map +1 -0
- package/dist/fetch.js +1 -0
- package/dist/fetch.js.map +1 -0
- package/dist/http.d.ts +1 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +1 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp.d.ts +1 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +1 -0
- package/dist/mcp.js.map +1 -0
- package/dist/observability.d.ts +1 -0
- package/dist/observability.d.ts.map +1 -0
- package/dist/observability.js +1 -0
- package/dist/observability.js.map +1 -0
- package/dist/tools.d.ts +1 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +1 -0
- package/dist/tools.js.map +1 -0
- package/dist/transform.d.ts +1 -0
- package/dist/transform.d.ts.map +1 -0
- package/dist/transform.js +1 -0
- package/dist/transform.js.map +1 -0
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +1 -0
- package/dist/utils.js.map +1 -0
- package/dist/workers/transform-worker.d.ts +1 -0
- package/dist/workers/transform-worker.d.ts.map +1 -0
- package/dist/workers/transform-worker.js +1 -0
- package/dist/workers/transform-worker.js.map +1 -0
- package/package.json +5 -2
- package/dist/config/auth-config.d.ts +0 -16
- package/dist/config/auth-config.js +0 -53
- package/dist/config/constants.d.ts +0 -17
- package/dist/config/constants.d.ts.map +0 -1
- package/dist/config/constants.js +0 -22
- package/dist/config/constants.js.map +0 -1
- package/dist/config/env-parsers.d.ts +0 -8
- package/dist/config/env-parsers.js +0 -96
- package/dist/config/formatting.d.ts +0 -7
- package/dist/config/formatting.d.ts.map +0 -1
- package/dist/config/formatting.js +0 -9
- package/dist/config/formatting.js.map +0 -1
- package/dist/config/index.d.ts +0 -61
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -107
- package/dist/config/index.js.map +0 -1
- package/dist/config/types/content.d.ts +0 -41
- package/dist/config/types/content.d.ts.map +0 -1
- package/dist/config/types/content.js +0 -1
- package/dist/config/types/content.js.map +0 -1
- package/dist/config/types/runtime.d.ts +0 -72
- package/dist/config/types/runtime.d.ts.map +0 -1
- package/dist/config/types/runtime.js +0 -1
- package/dist/config/types/runtime.js.map +0 -1
- package/dist/config/types/tools.d.ts +0 -28
- package/dist/config/types/tools.d.ts.map +0 -1
- package/dist/config/types/tools.js +0 -1
- package/dist/config/types/tools.js.map +0 -1
- package/dist/config/types.d.ts +0 -4
- package/dist/config/types.d.ts.map +0 -1
- package/dist/config/types.js +0 -2
- package/dist/config/types.js.map +0 -1
- package/dist/errors/app-error.d.ts +0 -7
- package/dist/errors/app-error.d.ts.map +0 -1
- package/dist/errors/app-error.js +0 -16
- package/dist/errors/app-error.js.map +0 -1
- package/dist/errors/index.d.ts +0 -2
- package/dist/errors/index.d.ts.map +0 -1
- package/dist/errors/index.js +0 -2
- package/dist/errors/index.js.map +0 -1
- package/dist/http/accept-policy.d.ts +0 -3
- package/dist/http/accept-policy.js +0 -45
- package/dist/http/async-handler.d.ts +0 -2
- package/dist/http/async-handler.js +0 -5
- package/dist/http/auth-introspection.d.ts +0 -2
- package/dist/http/auth-introspection.js +0 -141
- package/dist/http/auth-static.d.ts +0 -2
- package/dist/http/auth-static.js +0 -23
- package/dist/http/auth.d.ts +0 -3
- package/dist/http/auth.d.ts.map +0 -1
- package/dist/http/auth.js +0 -269
- package/dist/http/auth.js.map +0 -1
- package/dist/http/base-middleware.d.ts +0 -7
- package/dist/http/base-middleware.js +0 -143
- package/dist/http/cors.d.ts +0 -2
- package/dist/http/cors.d.ts.map +0 -1
- package/dist/http/cors.js +0 -9
- package/dist/http/cors.js.map +0 -1
- package/dist/http/download-routes.d.ts +0 -2
- package/dist/http/download-routes.d.ts.map +0 -1
- package/dist/http/download-routes.js +0 -104
- package/dist/http/download-routes.js.map +0 -1
- package/dist/http/error-handler.d.ts +0 -2
- package/dist/http/error-handler.js +0 -55
- package/dist/http/host-allowlist.d.ts +0 -3
- package/dist/http/host-allowlist.js +0 -117
- package/dist/http/jsonrpc-http.d.ts +0 -2
- package/dist/http/jsonrpc-http.js +0 -10
- package/dist/http/mcp-routes.d.ts +0 -9
- package/dist/http/mcp-routes.d.ts.map +0 -1
- package/dist/http/mcp-routes.js +0 -204
- package/dist/http/mcp-routes.js.map +0 -1
- package/dist/http/mcp-session-eviction.d.ts +0 -3
- package/dist/http/mcp-session-eviction.js +0 -24
- package/dist/http/mcp-session-helpers.d.ts +0 -12
- package/dist/http/mcp-session-helpers.d.ts.map +0 -1
- package/dist/http/mcp-session-helpers.js +0 -64
- package/dist/http/mcp-session-helpers.js.map +0 -1
- package/dist/http/mcp-session-init.d.ts +0 -7
- package/dist/http/mcp-session-init.js +0 -94
- package/dist/http/mcp-session-slots.d.ts +0 -17
- package/dist/http/mcp-session-slots.js +0 -55
- package/dist/http/mcp-session-transport-init.d.ts +0 -7
- package/dist/http/mcp-session-transport-init.js +0 -41
- package/dist/http/mcp-session-transport.d.ts +0 -7
- package/dist/http/mcp-session-transport.js +0 -57
- package/dist/http/mcp-session-types.d.ts +0 -5
- package/dist/http/mcp-session-types.js +0 -1
- package/dist/http/mcp-session.d.ts +0 -10
- package/dist/http/mcp-session.d.ts.map +0 -1
- package/dist/http/mcp-session.js +0 -23
- package/dist/http/mcp-session.js.map +0 -1
- package/dist/http/mcp-sessions.d.ts +0 -41
- package/dist/http/mcp-sessions.js +0 -392
- package/dist/http/mcp-validation.d.ts +0 -3
- package/dist/http/mcp-validation.d.ts.map +0 -1
- package/dist/http/mcp-validation.js +0 -14
- package/dist/http/mcp-validation.js.map +0 -1
- package/dist/http/protocol-policy.d.ts +0 -2
- package/dist/http/protocol-policy.js +0 -31
- package/dist/http/rate-limit.d.ts +0 -12
- package/dist/http/rate-limit.d.ts.map +0 -1
- package/dist/http/rate-limit.js +0 -93
- package/dist/http/rate-limit.js.map +0 -1
- package/dist/http/server-config.d.ts +0 -1
- package/dist/http/server-config.js +0 -40
- package/dist/http/server-middleware.d.ts +0 -7
- package/dist/http/server-middleware.d.ts.map +0 -1
- package/dist/http/server-middleware.js +0 -52
- package/dist/http/server-middleware.js.map +0 -1
- package/dist/http/server-shutdown.d.ts +0 -4
- package/dist/http/server-shutdown.js +0 -43
- package/dist/http/server-tuning.d.ts +0 -9
- package/dist/http/server-tuning.js +0 -45
- package/dist/http/server.d.ts +0 -3
- package/dist/http/server.d.ts.map +0 -1
- package/dist/http/server.js +0 -291
- package/dist/http/server.js.map +0 -1
- package/dist/http/session-cleanup.d.ts +0 -2
- package/dist/http/session-cleanup.d.ts.map +0 -1
- package/dist/http/session-cleanup.js +0 -40
- package/dist/http/session-cleanup.js.map +0 -1
- package/dist/http/sessions.d.ts +0 -14
- package/dist/http/sessions.d.ts.map +0 -1
- package/dist/http/sessions.js +0 -63
- package/dist/http/sessions.js.map +0 -1
- package/dist/middleware/error-handler.d.ts +0 -2
- package/dist/middleware/error-handler.d.ts.map +0 -1
- package/dist/middleware/error-handler.js +0 -56
- package/dist/middleware/error-handler.js.map +0 -1
- package/dist/middleware/rate-limiter.d.ts +0 -16
- package/dist/middleware/rate-limiter.d.ts.map +0 -1
- package/dist/middleware/rate-limiter.js +0 -111
- package/dist/middleware/rate-limiter.js.map +0 -1
- package/dist/parsers/base-html-element-parser.d.ts +0 -43
- package/dist/parsers/base-html-element-parser.d.ts.map +0 -1
- package/dist/parsers/base-html-element-parser.js +0 -59
- package/dist/parsers/base-html-element-parser.js.map +0 -1
- package/dist/parsers/heading-element-parser.d.ts +0 -14
- package/dist/parsers/heading-element-parser.d.ts.map +0 -1
- package/dist/parsers/heading-element-parser.js +0 -26
- package/dist/parsers/heading-element-parser.js.map +0 -1
- package/dist/parsers/image-element-parser.d.ts +0 -16
- package/dist/parsers/image-element-parser.d.ts.map +0 -1
- package/dist/parsers/image-element-parser.js +0 -33
- package/dist/parsers/image-element-parser.js.map +0 -1
- package/dist/parsers/link-element-parser.d.ts +0 -15
- package/dist/parsers/link-element-parser.d.ts.map +0 -1
- package/dist/parsers/link-element-parser.js +0 -28
- package/dist/parsers/link-element-parser.js.map +0 -1
- package/dist/parsers/open-graph-parser.d.ts +0 -17
- package/dist/parsers/open-graph-parser.d.ts.map +0 -1
- package/dist/parsers/open-graph-parser.js +0 -41
- package/dist/parsers/open-graph-parser.js.map +0 -1
- package/dist/parsers/schema-org-parser.d.ts +0 -17
- package/dist/parsers/schema-org-parser.d.ts.map +0 -1
- package/dist/parsers/schema-org-parser.js +0 -32
- package/dist/parsers/schema-org-parser.js.map +0 -1
- package/dist/parsers/standard-meta-parser.d.ts +0 -18
- package/dist/parsers/standard-meta-parser.d.ts.map +0 -1
- package/dist/parsers/standard-meta-parser.js +0 -32
- package/dist/parsers/standard-meta-parser.js.map +0 -1
- package/dist/parsers/twitter-card-parser.d.ts +0 -17
- package/dist/parsers/twitter-card-parser.d.ts.map +0 -1
- package/dist/parsers/twitter-card-parser.js +0 -41
- package/dist/parsers/twitter-card-parser.js.map +0 -1
- package/dist/prompts/index.d.ts +0 -3
- package/dist/prompts/index.d.ts.map +0 -1
- package/dist/prompts/index.js +0 -73
- package/dist/prompts/index.js.map +0 -1
- package/dist/resources/cached-content-params.d.ts +0 -5
- package/dist/resources/cached-content-params.js +0 -36
- package/dist/resources/cached-content.d.ts +0 -2
- package/dist/resources/cached-content.d.ts.map +0 -1
- package/dist/resources/cached-content.js +0 -132
- package/dist/resources/cached-content.js.map +0 -1
- package/dist/resources/index.d.ts +0 -2
- package/dist/resources/index.d.ts.map +0 -1
- package/dist/resources/index.js +0 -4
- package/dist/resources/index.js.map +0 -1
- package/dist/server.d.ts +0 -3
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -94
- package/dist/server.js.map +0 -1
- package/dist/services/cache-events.d.ts +0 -8
- package/dist/services/cache-events.js +0 -19
- package/dist/services/cache-keys.d.ts +0 -7
- package/dist/services/cache-keys.js +0 -57
- package/dist/services/cache.d.ts +0 -17
- package/dist/services/cache.d.ts.map +0 -1
- package/dist/services/cache.js +0 -145
- package/dist/services/cache.js.map +0 -1
- package/dist/services/cache.service.d.ts +0 -52
- package/dist/services/cache.service.d.ts.map +0 -1
- package/dist/services/cache.service.js +0 -113
- package/dist/services/cache.service.js.map +0 -1
- package/dist/services/card-extractor.d.ts +0 -6
- package/dist/services/card-extractor.d.ts.map +0 -1
- package/dist/services/card-extractor.js +0 -199
- package/dist/services/card-extractor.js.map +0 -1
- package/dist/services/context.d.ts +0 -10
- package/dist/services/context.d.ts.map +0 -1
- package/dist/services/context.js +0 -14
- package/dist/services/context.js.map +0 -1
- package/dist/services/extractor.d.ts +0 -5
- package/dist/services/extractor.d.ts.map +0 -1
- package/dist/services/extractor.js +0 -142
- package/dist/services/extractor.js.map +0 -1
- package/dist/services/extractor.service.d.ts +0 -18
- package/dist/services/extractor.service.d.ts.map +0 -1
- package/dist/services/extractor.service.js +0 -75
- package/dist/services/extractor.service.js.map +0 -1
- package/dist/services/fetcher/agents.d.ts +0 -3
- package/dist/services/fetcher/agents.d.ts.map +0 -1
- package/dist/services/fetcher/agents.js +0 -100
- package/dist/services/fetcher/agents.js.map +0 -1
- package/dist/services/fetcher/dns-selection.d.ts +0 -2
- package/dist/services/fetcher/dns-selection.js +0 -72
- package/dist/services/fetcher/errors.d.ts +0 -4
- package/dist/services/fetcher/errors.d.ts.map +0 -1
- package/dist/services/fetcher/errors.js +0 -70
- package/dist/services/fetcher/errors.js.map +0 -1
- package/dist/services/fetcher/headers.d.ts +0 -2
- package/dist/services/fetcher/headers.d.ts.map +0 -1
- package/dist/services/fetcher/headers.js +0 -6
- package/dist/services/fetcher/headers.js.map +0 -1
- package/dist/services/fetcher/interceptors.d.ts +0 -10
- package/dist/services/fetcher/interceptors.d.ts.map +0 -1
- package/dist/services/fetcher/interceptors.js +0 -108
- package/dist/services/fetcher/interceptors.js.map +0 -1
- package/dist/services/fetcher/redirects.d.ts +0 -4
- package/dist/services/fetcher/redirects.d.ts.map +0 -1
- package/dist/services/fetcher/redirects.js +0 -78
- package/dist/services/fetcher/redirects.js.map +0 -1
- package/dist/services/fetcher/response.d.ts +0 -4
- package/dist/services/fetcher/response.d.ts.map +0 -1
- package/dist/services/fetcher/response.js +0 -104
- package/dist/services/fetcher/response.js.map +0 -1
- package/dist/services/fetcher/retry-policy.d.ts +0 -1
- package/dist/services/fetcher/retry-policy.d.ts.map +0 -1
- package/dist/services/fetcher/retry-policy.js +0 -131
- package/dist/services/fetcher/retry-policy.js.map +0 -1
- package/dist/services/fetcher.d.ts +0 -25
- package/dist/services/fetcher.d.ts.map +0 -1
- package/dist/services/fetcher.js +0 -607
- package/dist/services/fetcher.js.map +0 -1
- package/dist/services/fetcher.service.d.ts +0 -18
- package/dist/services/fetcher.service.d.ts.map +0 -1
- package/dist/services/fetcher.service.js +0 -122
- package/dist/services/fetcher.service.js.map +0 -1
- package/dist/services/fifo-queue.d.ts +0 -8
- package/dist/services/fifo-queue.js +0 -25
- package/dist/services/logger.d.ts +0 -5
- package/dist/services/logger.d.ts.map +0 -1
- package/dist/services/logger.js +0 -52
- package/dist/services/logger.js.map +0 -1
- package/dist/services/logger.service.d.ts +0 -5
- package/dist/services/logger.service.d.ts.map +0 -1
- package/dist/services/logger.service.js +0 -57
- package/dist/services/logger.service.js.map +0 -1
- package/dist/services/metadata-collector.d.ts +0 -2
- package/dist/services/metadata-collector.js +0 -80
- package/dist/services/parser.d.ts +0 -6
- package/dist/services/parser.d.ts.map +0 -1
- package/dist/services/parser.js +0 -278
- package/dist/services/parser.js.map +0 -1
- package/dist/services/parser.service.d.ts +0 -42
- package/dist/services/parser.service.d.ts.map +0 -1
- package/dist/services/parser.service.js +0 -209
- package/dist/services/parser.service.js.map +0 -1
- package/dist/services/session-manager.d.ts +0 -18
- package/dist/services/session-manager.d.ts.map +0 -1
- package/dist/services/session-manager.js +0 -73
- package/dist/services/session-manager.js.map +0 -1
- package/dist/services/telemetry.d.ts +0 -19
- package/dist/services/telemetry.js +0 -43
- package/dist/services/transform-worker-pool.d.ts +0 -11
- package/dist/services/transform-worker-pool.js +0 -244
- package/dist/services/transform-worker-types.d.ts +0 -32
- package/dist/services/transform-worker-types.js +0 -14
- package/dist/strategies/exponential-backoff-strategy.d.ts +0 -13
- package/dist/strategies/exponential-backoff-strategy.d.ts.map +0 -1
- package/dist/strategies/exponential-backoff-strategy.js +0 -32
- package/dist/strategies/exponential-backoff-strategy.js.map +0 -1
- package/dist/tools/handlers/fetch-links/link-extractor.d.ts +0 -4
- package/dist/tools/handlers/fetch-links/link-extractor.d.ts.map +0 -1
- package/dist/tools/handlers/fetch-links/link-extractor.js +0 -159
- package/dist/tools/handlers/fetch-links/link-extractor.js.map +0 -1
- package/dist/tools/handlers/fetch-links.tool.d.ts +0 -5
- package/dist/tools/handlers/fetch-links.tool.d.ts.map +0 -1
- package/dist/tools/handlers/fetch-links.tool.js +0 -98
- package/dist/tools/handlers/fetch-links.tool.js.map +0 -1
- package/dist/tools/handlers/fetch-markdown.tool.d.ts +0 -11
- package/dist/tools/handlers/fetch-markdown.tool.d.ts.map +0 -1
- package/dist/tools/handlers/fetch-markdown.tool.js +0 -97
- package/dist/tools/handlers/fetch-markdown.tool.js.map +0 -1
- package/dist/tools/handlers/fetch-single.shared.d.ts +0 -31
- package/dist/tools/handlers/fetch-single.shared.d.ts.map +0 -1
- package/dist/tools/handlers/fetch-single.shared.js +0 -223
- package/dist/tools/handlers/fetch-single.shared.js.map +0 -1
- package/dist/tools/handlers/fetch-url.tool.d.ts +0 -10
- package/dist/tools/handlers/fetch-url.tool.d.ts.map +0 -1
- package/dist/tools/handlers/fetch-url.tool.js +0 -119
- package/dist/tools/handlers/fetch-url.tool.js.map +0 -1
- package/dist/tools/handlers/fetch-urls/processor.d.ts +0 -13
- package/dist/tools/handlers/fetch-urls/processor.d.ts.map +0 -1
- package/dist/tools/handlers/fetch-urls/processor.js +0 -153
- package/dist/tools/handlers/fetch-urls/processor.js.map +0 -1
- package/dist/tools/handlers/fetch-urls/response.d.ts +0 -3
- package/dist/tools/handlers/fetch-urls/response.d.ts.map +0 -1
- package/dist/tools/handlers/fetch-urls/response.js +0 -79
- package/dist/tools/handlers/fetch-urls/response.js.map +0 -1
- package/dist/tools/handlers/fetch-urls/validation.d.ts +0 -5
- package/dist/tools/handlers/fetch-urls/validation.d.ts.map +0 -1
- package/dist/tools/handlers/fetch-urls/validation.js +0 -18
- package/dist/tools/handlers/fetch-urls/validation.js.map +0 -1
- package/dist/tools/handlers/fetch-urls.tool.d.ts +0 -5
- package/dist/tools/handlers/fetch-urls.tool.d.ts.map +0 -1
- package/dist/tools/handlers/fetch-urls.tool.js +0 -124
- package/dist/tools/handlers/fetch-urls.tool.js.map +0 -1
- package/dist/tools/index.d.ts +0 -3
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -37
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/schemas.d.ts +0 -12
- package/dist/tools/schemas.d.ts.map +0 -1
- package/dist/tools/schemas.js +0 -21
- package/dist/tools/schemas.js.map +0 -1
- package/dist/tools/utils/cache-vary.d.ts +0 -1
- package/dist/tools/utils/cache-vary.d.ts.map +0 -1
- package/dist/tools/utils/cache-vary.js +0 -12
- package/dist/tools/utils/cache-vary.js.map +0 -1
- package/dist/tools/utils/cached-markdown.d.ts +0 -5
- package/dist/tools/utils/cached-markdown.js +0 -46
- package/dist/tools/utils/common.d.ts +0 -5
- package/dist/tools/utils/common.d.ts.map +0 -1
- package/dist/tools/utils/common.js +0 -42
- package/dist/tools/utils/common.js.map +0 -1
- package/dist/tools/utils/content-shaping.d.ts +0 -4
- package/dist/tools/utils/content-shaping.js +0 -67
- package/dist/tools/utils/content-transform-async.d.ts +0 -6
- package/dist/tools/utils/content-transform-async.js +0 -33
- package/dist/tools/utils/content-transform-core.d.ts +0 -5
- package/dist/tools/utils/content-transform-core.js +0 -180
- package/dist/tools/utils/content-transform-workers.d.ts +0 -1
- package/dist/tools/utils/content-transform-workers.js +0 -1
- package/dist/tools/utils/content-transform.d.ts +0 -3
- package/dist/tools/utils/content-transform.d.ts.map +0 -1
- package/dist/tools/utils/content-transform.js +0 -41
- package/dist/tools/utils/content-transform.js.map +0 -1
- package/dist/tools/utils/fetch-pipeline.d.ts +0 -2
- package/dist/tools/utils/fetch-pipeline.d.ts.map +0 -1
- package/dist/tools/utils/fetch-pipeline.js +0 -98
- package/dist/tools/utils/fetch-pipeline.js.map +0 -1
- package/dist/tools/utils/frontmatter.d.ts +0 -3
- package/dist/tools/utils/frontmatter.js +0 -73
- package/dist/tools/utils/index.d.ts +0 -4
- package/dist/tools/utils/index.d.ts.map +0 -1
- package/dist/tools/utils/index.js +0 -3
- package/dist/tools/utils/index.js.map +0 -1
- package/dist/tools/utils/inline-content.d.ts +0 -10
- package/dist/tools/utils/inline-content.d.ts.map +0 -1
- package/dist/tools/utils/inline-content.js +0 -35
- package/dist/tools/utils/inline-content.js.map +0 -1
- package/dist/tools/utils/markdown-heuristics.d.ts +0 -1
- package/dist/tools/utils/markdown-heuristics.js +0 -19
- package/dist/tools/utils/markdown-signals.d.ts +0 -1
- package/dist/tools/utils/markdown-signals.js +0 -19
- package/dist/tools/utils/markdown-toc.d.ts +0 -3
- package/dist/tools/utils/markdown-toc.d.ts.map +0 -1
- package/dist/tools/utils/markdown-toc.js +0 -35
- package/dist/tools/utils/markdown-toc.js.map +0 -1
- package/dist/tools/utils/raw-markdown-frontmatter.d.ts +0 -3
- package/dist/tools/utils/raw-markdown-frontmatter.js +0 -73
- package/dist/tools/utils/raw-markdown.d.ts +0 -6
- package/dist/tools/utils/raw-markdown.js +0 -149
- package/dist/tools/utils/response-builder.d.ts +0 -3
- package/dist/tools/utils/response-builder.d.ts.map +0 -1
- package/dist/tools/utils/response-builder.js +0 -24
- package/dist/tools/utils/response-builder.js.map +0 -1
- package/dist/tools/utils/tool-response.d.ts +0 -9
- package/dist/tools/utils/tool-response.d.ts.map +0 -1
- package/dist/tools/utils/tool-response.js +0 -19
- package/dist/tools/utils/tool-response.js.map +0 -1
- package/dist/transformers/jsonl.transformer.d.ts +0 -2
- package/dist/transformers/jsonl.transformer.d.ts.map +0 -1
- package/dist/transformers/jsonl.transformer.js +0 -75
- package/dist/transformers/jsonl.transformer.js.map +0 -1
- package/dist/transformers/markdown/fenced-code-rule.d.ts +0 -2
- package/dist/transformers/markdown/fenced-code-rule.js +0 -38
- package/dist/transformers/markdown/frontmatter.d.ts +0 -2
- package/dist/transformers/markdown/frontmatter.js +0 -45
- package/dist/transformers/markdown/noise-rule.d.ts +0 -2
- package/dist/transformers/markdown/noise-rule.js +0 -80
- package/dist/transformers/markdown/turndown-instance.d.ts +0 -2
- package/dist/transformers/markdown/turndown-instance.js +0 -19
- package/dist/transformers/markdown.d.ts +0 -5
- package/dist/transformers/markdown.js +0 -314
- package/dist/transformers/markdown.transformer.d.ts +0 -2
- package/dist/transformers/markdown.transformer.d.ts.map +0 -1
- package/dist/transformers/markdown.transformer.js +0 -14
- package/dist/transformers/markdown.transformer.js.map +0 -1
- package/dist/types/content.types.d.ts +0 -63
- package/dist/types/content.types.d.ts.map +0 -1
- package/dist/types/content.types.js +0 -2
- package/dist/types/content.types.js.map +0 -1
- package/dist/types/index.d.ts +0 -2
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -2
- package/dist/types/index.js.map +0 -1
- package/dist/types/schemas.d.ts +0 -49
- package/dist/types/schemas.d.ts.map +0 -1
- package/dist/types/schemas.js +0 -5
- package/dist/types/schemas.js.map +0 -1
- package/dist/utils/cached-payload.d.ts +0 -7
- package/dist/utils/cached-payload.js +0 -36
- package/dist/utils/cancellation.d.ts +0 -1
- package/dist/utils/cancellation.js +0 -18
- package/dist/utils/code-language-bash.d.ts +0 -1
- package/dist/utils/code-language-bash.js +0 -48
- package/dist/utils/code-language-core.d.ts +0 -2
- package/dist/utils/code-language-core.js +0 -13
- package/dist/utils/code-language-detectors.d.ts +0 -5
- package/dist/utils/code-language-detectors.js +0 -142
- package/dist/utils/code-language-helpers.d.ts +0 -5
- package/dist/utils/code-language-helpers.js +0 -62
- package/dist/utils/code-language-parsing.d.ts +0 -5
- package/dist/utils/code-language-parsing.js +0 -62
- package/dist/utils/code-language.d.ts +0 -2
- package/dist/utils/code-language.d.ts.map +0 -1
- package/dist/utils/code-language.js +0 -260
- package/dist/utils/code-language.js.map +0 -1
- package/dist/utils/concurrency.d.ts +0 -3
- package/dist/utils/concurrency.d.ts.map +0 -1
- package/dist/utils/concurrency.js +0 -38
- package/dist/utils/concurrency.js.map +0 -1
- package/dist/utils/content-cleaner.d.ts +0 -5
- package/dist/utils/content-cleaner.d.ts.map +0 -1
- package/dist/utils/content-cleaner.js +0 -77
- package/dist/utils/content-cleaner.js.map +0 -1
- package/dist/utils/crypto.d.ts +0 -2
- package/dist/utils/crypto.d.ts.map +0 -1
- package/dist/utils/crypto.js +0 -32
- package/dist/utils/crypto.js.map +0 -1
- package/dist/utils/download-url.d.ts +0 -16
- package/dist/utils/download-url.d.ts.map +0 -1
- package/dist/utils/download-url.js +0 -30
- package/dist/utils/download-url.js.map +0 -1
- package/dist/utils/error-details.d.ts +0 -3
- package/dist/utils/error-details.js +0 -12
- package/dist/utils/error-utils.d.ts +0 -3
- package/dist/utils/error-utils.d.ts.map +0 -1
- package/dist/utils/error-utils.js +0 -12
- package/dist/utils/error-utils.js.map +0 -1
- package/dist/utils/filename-generator.d.ts +0 -1
- package/dist/utils/filename-generator.d.ts.map +0 -1
- package/dist/utils/filename-generator.js +0 -81
- package/dist/utils/filename-generator.js.map +0 -1
- package/dist/utils/guards.d.ts +0 -1
- package/dist/utils/guards.js +0 -3
- package/dist/utils/header-normalizer.d.ts +0 -5
- package/dist/utils/header-normalizer.d.ts.map +0 -1
- package/dist/utils/header-normalizer.js +0 -31
- package/dist/utils/header-normalizer.js.map +0 -1
- package/dist/utils/host-normalizer.d.ts +0 -1
- package/dist/utils/host-normalizer.js +0 -37
- package/dist/utils/html-truncator.d.ts +0 -1
- package/dist/utils/html-truncator.d.ts.map +0 -1
- package/dist/utils/html-truncator.js +0 -13
- package/dist/utils/html-truncator.js.map +0 -1
- package/dist/utils/ip-address.d.ts +0 -4
- package/dist/utils/ip-address.js +0 -6
- package/dist/utils/language-detector.d.ts +0 -2
- package/dist/utils/language-detector.d.ts.map +0 -1
- package/dist/utils/language-detector.js +0 -39
- package/dist/utils/language-detector.js.map +0 -1
- package/dist/utils/sanitizer.d.ts +0 -2
- package/dist/utils/sanitizer.d.ts.map +0 -1
- package/dist/utils/sanitizer.js +0 -20
- package/dist/utils/sanitizer.js.map +0 -1
- package/dist/utils/tool-error-handler.d.ts +0 -3
- package/dist/utils/tool-error-handler.d.ts.map +0 -1
- package/dist/utils/tool-error-handler.js +0 -31
- package/dist/utils/tool-error-handler.js.map +0 -1
- package/dist/utils/url-redactor.d.ts +0 -1
- package/dist/utils/url-redactor.js +0 -13
- package/dist/utils/url-sanitizer.d.ts +0 -2
- package/dist/utils/url-sanitizer.d.ts.map +0 -1
- package/dist/utils/url-sanitizer.js +0 -12
- package/dist/utils/url-sanitizer.js.map +0 -1
- package/dist/utils/url-transformer.d.ts +0 -7
- package/dist/utils/url-transformer.js +0 -147
- package/dist/utils/url-validator.d.ts +0 -6
- package/dist/utils/url-validator.d.ts.map +0 -1
- package/dist/utils/url-validator.js +0 -156
- package/dist/utils/url-validator.js.map +0 -1
- package/dist/workers/content-transform.worker.d.ts +0 -1
- package/dist/workers/content-transform.worker.js +0 -40
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { config } from '../config/index.js';
|
|
2
|
-
const LOOPBACK_HOSTS = new Set(['localhost', '127.0.0.1', '::1']);
|
|
3
|
-
function getNonEmptyStringHeader(value) {
|
|
4
|
-
if (typeof value !== 'string')
|
|
5
|
-
return null;
|
|
6
|
-
const trimmed = value.trim();
|
|
7
|
-
return trimmed === '' ? null : trimmed;
|
|
8
|
-
}
|
|
9
|
-
function respondHostNotAllowed(res) {
|
|
10
|
-
res.status(403).json({
|
|
11
|
-
error: 'Host not allowed',
|
|
12
|
-
code: 'HOST_NOT_ALLOWED',
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
function respondOriginNotAllowed(res) {
|
|
16
|
-
res.status(403).json({
|
|
17
|
-
error: 'Origin not allowed',
|
|
18
|
-
code: 'ORIGIN_NOT_ALLOWED',
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
function tryParseOriginHostname(originHeader) {
|
|
22
|
-
try {
|
|
23
|
-
return new URL(originHeader).hostname.toLowerCase();
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
function takeFirstHostValue(value) {
|
|
30
|
-
const first = value.split(',')[0];
|
|
31
|
-
if (!first)
|
|
32
|
-
return null;
|
|
33
|
-
const trimmed = first.trim();
|
|
34
|
-
return trimmed ? trimmed : null;
|
|
35
|
-
}
|
|
36
|
-
function stripIpv6Brackets(value) {
|
|
37
|
-
if (!value.startsWith('['))
|
|
38
|
-
return null;
|
|
39
|
-
const end = value.indexOf(']');
|
|
40
|
-
if (end === -1)
|
|
41
|
-
return null;
|
|
42
|
-
return value.slice(1, end);
|
|
43
|
-
}
|
|
44
|
-
function stripPortIfPresent(value) {
|
|
45
|
-
const colonIndex = value.indexOf(':');
|
|
46
|
-
if (colonIndex === -1)
|
|
47
|
-
return value;
|
|
48
|
-
return value.slice(0, colonIndex);
|
|
49
|
-
}
|
|
50
|
-
function normalizeHost(value) {
|
|
51
|
-
const trimmed = value.trim().toLowerCase();
|
|
52
|
-
if (!trimmed)
|
|
53
|
-
return null;
|
|
54
|
-
const first = takeFirstHostValue(trimmed);
|
|
55
|
-
if (!first)
|
|
56
|
-
return null;
|
|
57
|
-
const ipv6 = stripIpv6Brackets(first);
|
|
58
|
-
if (ipv6)
|
|
59
|
-
return ipv6;
|
|
60
|
-
return stripPortIfPresent(first);
|
|
61
|
-
}
|
|
62
|
-
function isWildcardHost(host) {
|
|
63
|
-
return host === '0.0.0.0' || host === '::';
|
|
64
|
-
}
|
|
65
|
-
function addLoopbackHosts(allowedHosts) {
|
|
66
|
-
for (const host of LOOPBACK_HOSTS) {
|
|
67
|
-
allowedHosts.add(host);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
function addConfiguredHost(allowedHosts) {
|
|
71
|
-
const configuredHost = normalizeHost(config.server.host);
|
|
72
|
-
if (!configuredHost)
|
|
73
|
-
return;
|
|
74
|
-
if (isWildcardHost(configuredHost))
|
|
75
|
-
return;
|
|
76
|
-
allowedHosts.add(configuredHost);
|
|
77
|
-
}
|
|
78
|
-
function addExplicitAllowedHosts(allowedHosts) {
|
|
79
|
-
for (const host of config.security.allowedHosts) {
|
|
80
|
-
allowedHosts.add(host);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
function buildAllowedHosts() {
|
|
84
|
-
const allowedHosts = new Set();
|
|
85
|
-
addLoopbackHosts(allowedHosts);
|
|
86
|
-
addConfiguredHost(allowedHosts);
|
|
87
|
-
addExplicitAllowedHosts(allowedHosts);
|
|
88
|
-
return allowedHosts;
|
|
89
|
-
}
|
|
90
|
-
export function createHostValidationMiddleware() {
|
|
91
|
-
const allowedHosts = buildAllowedHosts();
|
|
92
|
-
return (req, res, next) => {
|
|
93
|
-
const hostHeader = typeof req.headers.host === 'string' ? req.headers.host : '';
|
|
94
|
-
const normalized = normalizeHost(hostHeader);
|
|
95
|
-
if (!normalized || !allowedHosts.has(normalized)) {
|
|
96
|
-
respondHostNotAllowed(res);
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
next();
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
export function createOriginValidationMiddleware() {
|
|
103
|
-
const allowedHosts = buildAllowedHosts();
|
|
104
|
-
return (req, res, next) => {
|
|
105
|
-
const originHeader = getNonEmptyStringHeader(req.headers.origin);
|
|
106
|
-
if (!originHeader) {
|
|
107
|
-
next();
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
const originHostname = tryParseOriginHostname(originHeader);
|
|
111
|
-
if (!originHostname || !allowedHosts.has(originHostname)) {
|
|
112
|
-
respondOriginNotAllowed(res);
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
next();
|
|
116
|
-
};
|
|
117
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { Express, Request, Response } from 'express';
|
|
2
|
-
import type { McpRequestBody } from '../config/types/runtime.js';
|
|
3
|
-
import { type McpSessionOptions } from './mcp-sessions.js';
|
|
4
|
-
export declare function isJsonRpcBatchRequest(body: unknown): boolean;
|
|
5
|
-
export declare function isMcpRequestBody(body: unknown): body is McpRequestBody;
|
|
6
|
-
export declare function ensureMcpProtocolVersionHeader(req: Request, res: Response): boolean;
|
|
7
|
-
export declare function ensurePostAcceptHeader(req: Request): void;
|
|
8
|
-
export declare function acceptsEventStream(req: Request): boolean;
|
|
9
|
-
export declare function registerMcpRoutes(app: Express, options: McpSessionOptions): void;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-routes.d.ts","sourceRoot":"","sources":["../../src/http/mcp-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAmC,MAAM,SAAS,CAAC;AAQxE,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,kBAAkB,CAAC;AAoK1B,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,iBAAiB,GACzB,IAAI,CAmBN;AAED,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/http/mcp-routes.js
DELETED
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { logError, logInfo } from '../services/logger.js';
|
|
3
|
-
import { getSessionId, resolveTransportForPost, sendJsonRpcError, } from './mcp-sessions.js';
|
|
4
|
-
const paramsSchema = z.looseObject({});
|
|
5
|
-
const mcpRequestSchema = z.looseObject({
|
|
6
|
-
jsonrpc: z.literal('2.0'),
|
|
7
|
-
method: z.string().min(1),
|
|
8
|
-
id: z.union([z.string(), z.number()]).optional(),
|
|
9
|
-
params: paramsSchema.optional(),
|
|
10
|
-
});
|
|
11
|
-
function wrapAsync(fn) {
|
|
12
|
-
return (req, res, next) => {
|
|
13
|
-
Promise.resolve(fn(req, res)).catch(next);
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
export function isJsonRpcBatchRequest(body) {
|
|
17
|
-
return Array.isArray(body);
|
|
18
|
-
}
|
|
19
|
-
export function isMcpRequestBody(body) {
|
|
20
|
-
return mcpRequestSchema.safeParse(body).success;
|
|
21
|
-
}
|
|
22
|
-
function respondInvalidRequestBody(res) {
|
|
23
|
-
sendJsonRpcError(res, -32600, 'Invalid Request: Malformed request body', 400);
|
|
24
|
-
}
|
|
25
|
-
function respondMissingSession(res) {
|
|
26
|
-
sendJsonRpcError(res, -32600, 'Missing mcp-session-id header', 400);
|
|
27
|
-
}
|
|
28
|
-
function respondSessionNotFound(res) {
|
|
29
|
-
sendJsonRpcError(res, -32600, 'Session not found', 404);
|
|
30
|
-
}
|
|
31
|
-
function validatePostPayload(payload, res) {
|
|
32
|
-
if (isJsonRpcBatchRequest(payload)) {
|
|
33
|
-
sendJsonRpcError(res, -32600, 'Batch requests are not supported', 400);
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
if (!isMcpRequestBody(payload)) {
|
|
37
|
-
respondInvalidRequestBody(res);
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
return payload;
|
|
41
|
-
}
|
|
42
|
-
function logPostRequest(body, sessionId, options) {
|
|
43
|
-
logInfo('[MCP POST]', {
|
|
44
|
-
method: body.method,
|
|
45
|
-
id: body.id,
|
|
46
|
-
isInitialize: body.method === 'initialize',
|
|
47
|
-
sessionCount: options.sessionStore.size(),
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
async function handleTransportRequest(transport, req, res, body) {
|
|
51
|
-
try {
|
|
52
|
-
await dispatchTransportRequest(transport, req, res, body);
|
|
53
|
-
}
|
|
54
|
-
catch (error) {
|
|
55
|
-
logError('MCP request handling failed', error instanceof Error ? error : undefined);
|
|
56
|
-
handleTransportError(res);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
function handleTransportError(res) {
|
|
60
|
-
if (res.headersSent)
|
|
61
|
-
return;
|
|
62
|
-
res.status(500).json({ error: 'Internal Server Error' });
|
|
63
|
-
}
|
|
64
|
-
function dispatchTransportRequest(transport, req, res, body) {
|
|
65
|
-
return body
|
|
66
|
-
? transport.handleRequest(req, res, body)
|
|
67
|
-
: transport.handleRequest(req, res);
|
|
68
|
-
}
|
|
69
|
-
function resolveSessionTransport(sessionId, options, res) {
|
|
70
|
-
const { sessionStore } = options;
|
|
71
|
-
if (!sessionId) {
|
|
72
|
-
respondMissingSession(res);
|
|
73
|
-
return null;
|
|
74
|
-
}
|
|
75
|
-
const session = sessionStore.get(sessionId);
|
|
76
|
-
if (!session) {
|
|
77
|
-
respondSessionNotFound(res);
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
sessionStore.touch(sessionId);
|
|
81
|
-
return session.transport;
|
|
82
|
-
}
|
|
83
|
-
const MCP_PROTOCOL_VERSION_HEADER = 'mcp-protocol-version';
|
|
84
|
-
const MCP_PROTOCOL_VERSIONS = {
|
|
85
|
-
defaultVersion: '2025-11-25',
|
|
86
|
-
supported: new Set(['2025-11-25']),
|
|
87
|
-
};
|
|
88
|
-
function getHeaderValue(req, headerNameLower) {
|
|
89
|
-
const value = req.headers[headerNameLower];
|
|
90
|
-
if (typeof value === 'string')
|
|
91
|
-
return value;
|
|
92
|
-
if (Array.isArray(value))
|
|
93
|
-
return value[0] ?? null;
|
|
94
|
-
return null;
|
|
95
|
-
}
|
|
96
|
-
function setHeaderValue(req, headerNameLower, value) {
|
|
97
|
-
// Express exposes req.headers as a plain object, but the type is readonly-ish.
|
|
98
|
-
req.headers[headerNameLower] = value;
|
|
99
|
-
}
|
|
100
|
-
export function ensureMcpProtocolVersionHeader(req, res) {
|
|
101
|
-
const raw = getHeaderValue(req, MCP_PROTOCOL_VERSION_HEADER);
|
|
102
|
-
const version = raw?.trim();
|
|
103
|
-
if (!version) {
|
|
104
|
-
setHeaderValue(req, MCP_PROTOCOL_VERSION_HEADER, MCP_PROTOCOL_VERSIONS.defaultVersion);
|
|
105
|
-
return true;
|
|
106
|
-
}
|
|
107
|
-
if (!MCP_PROTOCOL_VERSIONS.supported.has(version)) {
|
|
108
|
-
sendJsonRpcError(res, -32600, `Unsupported MCP-Protocol-Version: ${version}`, 400);
|
|
109
|
-
return false;
|
|
110
|
-
}
|
|
111
|
-
return true;
|
|
112
|
-
}
|
|
113
|
-
function getAcceptHeader(req) {
|
|
114
|
-
const value = req.headers.accept;
|
|
115
|
-
if (typeof value === 'string')
|
|
116
|
-
return value;
|
|
117
|
-
return '';
|
|
118
|
-
}
|
|
119
|
-
function setAcceptHeader(req, value) {
|
|
120
|
-
req.headers.accept = value;
|
|
121
|
-
const { rawHeaders } = req;
|
|
122
|
-
if (!Array.isArray(rawHeaders))
|
|
123
|
-
return;
|
|
124
|
-
for (let i = 0; i + 1 < rawHeaders.length; i += 2) {
|
|
125
|
-
const key = rawHeaders[i];
|
|
126
|
-
if (typeof key === 'string' && key.toLowerCase() === 'accept') {
|
|
127
|
-
rawHeaders[i + 1] = value;
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
rawHeaders.push('Accept', value);
|
|
132
|
-
}
|
|
133
|
-
function hasToken(header, token) {
|
|
134
|
-
return header
|
|
135
|
-
.split(',')
|
|
136
|
-
.map((part) => part.trim().toLowerCase())
|
|
137
|
-
.some((part) => part === token || part.startsWith(`${token};`));
|
|
138
|
-
}
|
|
139
|
-
export function ensurePostAcceptHeader(req) {
|
|
140
|
-
const accept = getAcceptHeader(req);
|
|
141
|
-
// Some clients send */* or omit Accept; the SDK transport is picky.
|
|
142
|
-
if (!accept || hasToken(accept, '*/*')) {
|
|
143
|
-
setAcceptHeader(req, 'application/json, text/event-stream');
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
const hasJson = hasToken(accept, 'application/json');
|
|
147
|
-
const hasSse = hasToken(accept, 'text/event-stream');
|
|
148
|
-
if (!hasJson || !hasSse) {
|
|
149
|
-
setAcceptHeader(req, 'application/json, text/event-stream');
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
export function acceptsEventStream(req) {
|
|
153
|
-
const accept = getAcceptHeader(req);
|
|
154
|
-
if (!accept)
|
|
155
|
-
return false;
|
|
156
|
-
return hasToken(accept, 'text/event-stream');
|
|
157
|
-
}
|
|
158
|
-
async function handlePost(req, res, options) {
|
|
159
|
-
ensurePostAcceptHeader(req);
|
|
160
|
-
if (!ensureMcpProtocolVersionHeader(req, res))
|
|
161
|
-
return;
|
|
162
|
-
const sessionId = getSessionId(req);
|
|
163
|
-
const payload = validatePostPayload(req.body, res);
|
|
164
|
-
if (!payload)
|
|
165
|
-
return;
|
|
166
|
-
logPostRequest(payload, sessionId, options);
|
|
167
|
-
const transport = await resolveTransportForPost({
|
|
168
|
-
res,
|
|
169
|
-
body: payload,
|
|
170
|
-
sessionId,
|
|
171
|
-
options,
|
|
172
|
-
});
|
|
173
|
-
if (!transport)
|
|
174
|
-
return;
|
|
175
|
-
await handleTransportRequest(transport, req, res, payload);
|
|
176
|
-
}
|
|
177
|
-
async function handleGet(req, res, options) {
|
|
178
|
-
if (!ensureMcpProtocolVersionHeader(req, res))
|
|
179
|
-
return;
|
|
180
|
-
if (!acceptsEventStream(req)) {
|
|
181
|
-
res.status(406).json({
|
|
182
|
-
error: 'Not Acceptable',
|
|
183
|
-
code: 'ACCEPT_NOT_SUPPORTED',
|
|
184
|
-
});
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
const transport = resolveSessionTransport(getSessionId(req), options, res);
|
|
188
|
-
if (!transport)
|
|
189
|
-
return;
|
|
190
|
-
await handleTransportRequest(transport, req, res);
|
|
191
|
-
}
|
|
192
|
-
async function handleDelete(req, res, options) {
|
|
193
|
-
if (!ensureMcpProtocolVersionHeader(req, res))
|
|
194
|
-
return;
|
|
195
|
-
const transport = resolveSessionTransport(getSessionId(req), options, res);
|
|
196
|
-
if (!transport)
|
|
197
|
-
return;
|
|
198
|
-
await handleTransportRequest(transport, req, res);
|
|
199
|
-
}
|
|
200
|
-
export function registerMcpRoutes(app, options) {
|
|
201
|
-
app.post('/mcp', wrapAsync((req, res) => handlePost(req, res, options)));
|
|
202
|
-
app.get('/mcp', wrapAsync((req, res) => handleGet(req, res, options)));
|
|
203
|
-
app.delete('/mcp', wrapAsync((req, res) => handleDelete(req, res, options)));
|
|
204
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-routes.js","sourceRoot":"","sources":["../../src/http/mcp-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { logWarn } from '../services/logger.js';
|
|
2
|
-
import { getErrorMessage } from '../utils/error-details.js';
|
|
3
|
-
export function evictExpiredSessions(store) {
|
|
4
|
-
const evicted = store.evictExpired();
|
|
5
|
-
for (const session of evicted) {
|
|
6
|
-
void session.transport.close().catch((error) => {
|
|
7
|
-
logWarn('Failed to close expired session', {
|
|
8
|
-
error: getErrorMessage(error),
|
|
9
|
-
});
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
return evicted.length;
|
|
13
|
-
}
|
|
14
|
-
export function evictOldestSession(store) {
|
|
15
|
-
const session = store.evictOldest();
|
|
16
|
-
if (!session)
|
|
17
|
-
return false;
|
|
18
|
-
void session.transport.close().catch((error) => {
|
|
19
|
-
logWarn('Failed to close evicted session', {
|
|
20
|
-
error: getErrorMessage(error),
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
return true;
|
|
24
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { Response } from 'express';
|
|
2
|
-
import type { SessionStore } from './sessions.js';
|
|
3
|
-
export interface SlotTracker {
|
|
4
|
-
readonly releaseSlot: () => void;
|
|
5
|
-
readonly markInitialized: () => void;
|
|
6
|
-
readonly isInitialized: () => boolean;
|
|
7
|
-
}
|
|
8
|
-
export declare function reserveSessionSlot(store: SessionStore, maxSessions: number): boolean;
|
|
9
|
-
export declare function createSlotTracker(): SlotTracker;
|
|
10
|
-
export declare function ensureSessionCapacity(store: SessionStore, maxSessions: number, res: Response, evictOldest: (store: SessionStore) => boolean): boolean;
|
|
11
|
-
export declare function respondServerBusy(res: Response): void;
|
|
12
|
-
export declare function respondBadRequest(res: Response): void;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-session-helpers.d.ts","sourceRoot":"","sources":["../../src/http/mcp-session-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC;CACvC;AAID,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAMT;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAED,wBAAgB,iBAAiB,IAAI,WAAW,CAc/C;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,QAAQ,EACb,WAAW,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,GAC5C,OAAO,CAWT;AAkCD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAErD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAOrD"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
let inFlightSessions = 0;
|
|
2
|
-
export function reserveSessionSlot(store, maxSessions) {
|
|
3
|
-
if (store.size() + inFlightSessions >= maxSessions) {
|
|
4
|
-
return false;
|
|
5
|
-
}
|
|
6
|
-
inFlightSessions += 1;
|
|
7
|
-
return true;
|
|
8
|
-
}
|
|
9
|
-
function releaseSessionSlot() {
|
|
10
|
-
if (inFlightSessions > 0) {
|
|
11
|
-
inFlightSessions -= 1;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
export function createSlotTracker() {
|
|
15
|
-
let slotReleased = false;
|
|
16
|
-
let initialized = false;
|
|
17
|
-
return {
|
|
18
|
-
releaseSlot: () => {
|
|
19
|
-
if (slotReleased)
|
|
20
|
-
return;
|
|
21
|
-
slotReleased = true;
|
|
22
|
-
releaseSessionSlot();
|
|
23
|
-
},
|
|
24
|
-
markInitialized: () => {
|
|
25
|
-
initialized = true;
|
|
26
|
-
},
|
|
27
|
-
isInitialized: () => initialized,
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
export function ensureSessionCapacity(store, maxSessions, res, evictOldest) {
|
|
31
|
-
if (!isServerAtCapacity(store, maxSessions)) {
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
34
|
-
if (tryEvictSlot(store, maxSessions, evictOldest)) {
|
|
35
|
-
return !isServerAtCapacity(store, maxSessions);
|
|
36
|
-
}
|
|
37
|
-
respondServerBusy(res);
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
function isServerAtCapacity(store, maxSessions) {
|
|
41
|
-
return store.size() + inFlightSessions >= maxSessions;
|
|
42
|
-
}
|
|
43
|
-
function tryEvictSlot(store, maxSessions, evictOldest) {
|
|
44
|
-
const currentSize = store.size();
|
|
45
|
-
const canFreeSlot = currentSize >= maxSessions &&
|
|
46
|
-
currentSize - 1 + inFlightSessions < maxSessions;
|
|
47
|
-
return canFreeSlot && evictOldest(store);
|
|
48
|
-
}
|
|
49
|
-
function sendJsonRpcError(res, code, message, status = 503) {
|
|
50
|
-
res.status(status).json({
|
|
51
|
-
jsonrpc: '2.0',
|
|
52
|
-
error: {
|
|
53
|
-
code,
|
|
54
|
-
message,
|
|
55
|
-
},
|
|
56
|
-
id: null,
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
export function respondServerBusy(res) {
|
|
60
|
-
sendJsonRpcError(res, -32000, 'Server busy: maximum sessions reached', 503);
|
|
61
|
-
}
|
|
62
|
-
export function respondBadRequest(res) {
|
|
63
|
-
sendJsonRpcError(res, -32000, 'Bad Request: Missing session ID or not an initialize request', 400);
|
|
64
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-session-helpers.js","sourceRoot":"","sources":["../../src/http/mcp-session-helpers.ts"],"names":[],"mappings":"AAUA,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAEzB,MAAM,UAAU,kBAAkB,CAChC,KAAmB,EACnB,WAAmB;IAEnB,IAAI,KAAK,CAAC,IAAI,EAAE,GAAG,gBAAgB,IAAI,WAAW,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,gBAAgB,IAAI,CAAC,CAAC;IACtB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;QACzB,gBAAgB,IAAI,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,OAAO;QACL,WAAW,EAAE,GAAS,EAAE;YACtB,IAAI,YAAY;gBAAE,OAAO;YACzB,YAAY,GAAG,IAAI,CAAC;YACpB,kBAAkB,EAAE,CAAC;QACvB,CAAC;QACD,eAAe,EAAE,GAAS,EAAE;YAC1B,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,aAAa,EAAE,GAAY,EAAE,CAAC,WAAW;KAC1C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAAmB,EACnB,WAAmB,EACnB,GAAa,EACb,WAA6C;IAE7C,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACjD,CAAC;IAED,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAmB,EAAE,WAAmB;IAClE,OAAO,KAAK,CAAC,IAAI,EAAE,GAAG,gBAAgB,IAAI,WAAW,CAAC;AACxD,CAAC;AAED,SAAS,YAAY,CACnB,KAAmB,EACnB,WAAmB,EACnB,WAA6C;IAE7C,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACjC,MAAM,WAAW,GACf,WAAW,IAAI,WAAW;QAC1B,WAAW,GAAG,CAAC,GAAG,gBAAgB,GAAG,WAAW,CAAC;IACnD,OAAO,WAAW,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,gBAAgB,CACvB,GAAa,EACb,IAAY,EACZ,OAAe,EACf,MAAM,GAAG,GAAG;IAEZ,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;QACtB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE;YACL,IAAI;YACJ,OAAO;SACR;QACD,EAAE,EAAE,IAAI;KACT,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAa;IAC7C,gBAAgB,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,uCAAuC,EAAE,GAAG,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAa;IAC7C,gBAAgB,CACd,GAAG,EACH,CAAC,KAAK,EACN,8DAA8D,EAC9D,GAAG,CACJ,CAAC;AACJ,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { Response } from 'express';
|
|
2
|
-
import type { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
3
|
-
import type { McpSessionOptions } from './mcp-session-types.js';
|
|
4
|
-
export declare function createAndConnectTransport({ options, res, }: {
|
|
5
|
-
options: McpSessionOptions;
|
|
6
|
-
res: Response;
|
|
7
|
-
}): Promise<StreamableHTTPServerTransport | null>;
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { logError, logInfo, logWarn } from '../services/logger.js';
|
|
2
|
-
import { getErrorMessage } from '../utils/error-details.js';
|
|
3
|
-
import { createMcpServer } from '../server.js';
|
|
4
|
-
import { evictOldestSession } from './mcp-session-eviction.js';
|
|
5
|
-
import { createSlotTracker, ensureSessionCapacity, reserveSessionSlot, respondBadRequest, respondServerBusy, } from './mcp-session-slots.js';
|
|
6
|
-
import { createSessionTransport } from './mcp-session-transport-init.js';
|
|
7
|
-
import { createTimeoutController, createTransportAdapter, } from './mcp-session-transport.js';
|
|
8
|
-
async function connectTransportOrThrow({ transport, clearInitTimeout, releaseSlot, }) {
|
|
9
|
-
const mcpServer = createMcpServer();
|
|
10
|
-
const transportAdapter = createTransportAdapter(transport);
|
|
11
|
-
try {
|
|
12
|
-
await mcpServer.connect(transportAdapter);
|
|
13
|
-
}
|
|
14
|
-
catch (error) {
|
|
15
|
-
clearInitTimeout();
|
|
16
|
-
releaseSlot();
|
|
17
|
-
void transport.close().catch((closeError) => {
|
|
18
|
-
logWarn('Failed to close transport after connect error', {
|
|
19
|
-
error: getErrorMessage(closeError),
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
logError('Failed to initialize MCP session', error instanceof Error ? error : undefined);
|
|
23
|
-
throw error;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
export async function createAndConnectTransport({ options, res, }) {
|
|
27
|
-
if (!reserveSessionIfPossible({ options, res }))
|
|
28
|
-
return null;
|
|
29
|
-
const tracker = createSlotTracker();
|
|
30
|
-
const timeoutController = createTimeoutController();
|
|
31
|
-
const transport = createSessionTransport({ tracker, timeoutController });
|
|
32
|
-
await connectTransportOrThrow({
|
|
33
|
-
transport,
|
|
34
|
-
clearInitTimeout: timeoutController.clear,
|
|
35
|
-
releaseSlot: tracker.releaseSlot,
|
|
36
|
-
});
|
|
37
|
-
const sessionId = resolveSessionId({
|
|
38
|
-
transport,
|
|
39
|
-
res,
|
|
40
|
-
tracker,
|
|
41
|
-
clearInitTimeout: timeoutController.clear,
|
|
42
|
-
});
|
|
43
|
-
if (!sessionId)
|
|
44
|
-
return null;
|
|
45
|
-
finalizeSession({
|
|
46
|
-
store: options.sessionStore,
|
|
47
|
-
transport,
|
|
48
|
-
sessionId,
|
|
49
|
-
tracker,
|
|
50
|
-
clearInitTimeout: timeoutController.clear,
|
|
51
|
-
});
|
|
52
|
-
return transport;
|
|
53
|
-
}
|
|
54
|
-
function reserveSessionIfPossible({ options, res, }) {
|
|
55
|
-
if (!ensureSessionCapacity({
|
|
56
|
-
store: options.sessionStore,
|
|
57
|
-
maxSessions: options.maxSessions,
|
|
58
|
-
res,
|
|
59
|
-
evictOldest: evictOldestSession,
|
|
60
|
-
})) {
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
if (!reserveSessionSlot(options.sessionStore, options.maxSessions)) {
|
|
64
|
-
respondServerBusy(res);
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
return true;
|
|
68
|
-
}
|
|
69
|
-
function resolveSessionId({ transport, res, tracker, clearInitTimeout, }) {
|
|
70
|
-
const { sessionId } = transport;
|
|
71
|
-
if (typeof sessionId !== 'string') {
|
|
72
|
-
clearInitTimeout();
|
|
73
|
-
tracker.releaseSlot();
|
|
74
|
-
respondBadRequest(res);
|
|
75
|
-
return null;
|
|
76
|
-
}
|
|
77
|
-
return sessionId;
|
|
78
|
-
}
|
|
79
|
-
function finalizeSession({ store, transport, sessionId, tracker, clearInitTimeout, }) {
|
|
80
|
-
clearInitTimeout();
|
|
81
|
-
tracker.markInitialized();
|
|
82
|
-
tracker.releaseSlot();
|
|
83
|
-
const now = Date.now();
|
|
84
|
-
store.set(sessionId, {
|
|
85
|
-
transport,
|
|
86
|
-
createdAt: now,
|
|
87
|
-
lastSeen: now,
|
|
88
|
-
});
|
|
89
|
-
transport.onclose = () => {
|
|
90
|
-
store.remove(sessionId);
|
|
91
|
-
logInfo('Session closed');
|
|
92
|
-
};
|
|
93
|
-
logInfo('Session initialized');
|
|
94
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { Response } from 'express';
|
|
2
|
-
import type { SessionStore } from './sessions.js';
|
|
3
|
-
export interface SlotTracker {
|
|
4
|
-
readonly releaseSlot: () => void;
|
|
5
|
-
readonly markInitialized: () => void;
|
|
6
|
-
readonly isInitialized: () => boolean;
|
|
7
|
-
}
|
|
8
|
-
export declare function reserveSessionSlot(store: SessionStore, maxSessions: number): boolean;
|
|
9
|
-
export declare function createSlotTracker(): SlotTracker;
|
|
10
|
-
export declare function ensureSessionCapacity({ store, maxSessions, res, evictOldest, }: {
|
|
11
|
-
store: SessionStore;
|
|
12
|
-
maxSessions: number;
|
|
13
|
-
res: Response;
|
|
14
|
-
evictOldest: (store: SessionStore) => boolean;
|
|
15
|
-
}): boolean;
|
|
16
|
-
export declare function respondServerBusy(res: Response): void;
|
|
17
|
-
export declare function respondBadRequest(res: Response): void;
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { sendJsonRpcError } from './jsonrpc-http.js';
|
|
2
|
-
let inFlightSessions = 0;
|
|
3
|
-
export function reserveSessionSlot(store, maxSessions) {
|
|
4
|
-
if (store.size() + inFlightSessions >= maxSessions) {
|
|
5
|
-
return false;
|
|
6
|
-
}
|
|
7
|
-
inFlightSessions += 1;
|
|
8
|
-
return true;
|
|
9
|
-
}
|
|
10
|
-
function releaseSessionSlot() {
|
|
11
|
-
if (inFlightSessions > 0) {
|
|
12
|
-
inFlightSessions -= 1;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
export function createSlotTracker() {
|
|
16
|
-
let slotReleased = false;
|
|
17
|
-
let initialized = false;
|
|
18
|
-
return {
|
|
19
|
-
releaseSlot: () => {
|
|
20
|
-
if (slotReleased)
|
|
21
|
-
return;
|
|
22
|
-
slotReleased = true;
|
|
23
|
-
releaseSessionSlot();
|
|
24
|
-
},
|
|
25
|
-
markInitialized: () => {
|
|
26
|
-
initialized = true;
|
|
27
|
-
},
|
|
28
|
-
isInitialized: () => initialized,
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
export function ensureSessionCapacity({ store, maxSessions, res, evictOldest, }) {
|
|
32
|
-
if (!isServerAtCapacity(store, maxSessions)) {
|
|
33
|
-
return true;
|
|
34
|
-
}
|
|
35
|
-
if (tryEvictSlot(store, maxSessions, evictOldest)) {
|
|
36
|
-
return !isServerAtCapacity(store, maxSessions);
|
|
37
|
-
}
|
|
38
|
-
respondServerBusy(res);
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
function isServerAtCapacity(store, maxSessions) {
|
|
42
|
-
return store.size() + inFlightSessions >= maxSessions;
|
|
43
|
-
}
|
|
44
|
-
function tryEvictSlot(store, maxSessions, evictOldest) {
|
|
45
|
-
const currentSize = store.size();
|
|
46
|
-
const canFreeSlot = currentSize >= maxSessions &&
|
|
47
|
-
currentSize - 1 + inFlightSessions < maxSessions;
|
|
48
|
-
return canFreeSlot && evictOldest(store);
|
|
49
|
-
}
|
|
50
|
-
export function respondServerBusy(res) {
|
|
51
|
-
sendJsonRpcError(res, -32000, 'Server busy: maximum sessions reached', 503);
|
|
52
|
-
}
|
|
53
|
-
export function respondBadRequest(res) {
|
|
54
|
-
sendJsonRpcError(res, -32000, 'Bad Request: Missing session ID or not an initialize request', 400);
|
|
55
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
2
|
-
import type { SlotTracker } from './mcp-session-slots.js';
|
|
3
|
-
import type { createTimeoutController } from './mcp-session-transport.js';
|
|
4
|
-
export declare function createSessionTransport({ tracker, timeoutController, }: {
|
|
5
|
-
tracker: SlotTracker;
|
|
6
|
-
timeoutController: ReturnType<typeof createTimeoutController>;
|
|
7
|
-
}): StreamableHTTPServerTransport;
|