@debian777/kairos-mcp 3.0.1-beta.14
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/LICENSE +22 -0
- package/README.md +108 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/cli/api-client.d.ts +31 -0
- package/dist/cli/api-client.d.ts.map +1 -0
- package/dist/cli/api-client.js +110 -0
- package/dist/cli/api-client.js.map +1 -0
- package/dist/cli/commands/attest.d.ts +6 -0
- package/dist/cli/commands/attest.d.ts.map +1 -0
- package/dist/cli/commands/attest.js +52 -0
- package/dist/cli/commands/attest.js.map +1 -0
- package/dist/cli/commands/begin.d.ts +6 -0
- package/dist/cli/commands/begin.d.ts.map +1 -0
- package/dist/cli/commands/begin.js +32 -0
- package/dist/cli/commands/begin.js.map +1 -0
- package/dist/cli/commands/delete.d.ts +6 -0
- package/dist/cli/commands/delete.d.ts.map +1 -0
- package/dist/cli/commands/delete.js +32 -0
- package/dist/cli/commands/delete.js.map +1 -0
- package/dist/cli/commands/mint.d.ts +6 -0
- package/dist/cli/commands/mint.d.ts.map +1 -0
- package/dist/cli/commands/mint.js +48 -0
- package/dist/cli/commands/mint.js.map +1 -0
- package/dist/cli/commands/next.d.ts +6 -0
- package/dist/cli/commands/next.d.ts.map +1 -0
- package/dist/cli/commands/next.js +89 -0
- package/dist/cli/commands/next.js.map +1 -0
- package/dist/cli/commands/search.d.ts +6 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +32 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/update.d.ts +6 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +72 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/config.d.ts +9 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +14 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +40 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/output.d.ts +10 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +20 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/config.d.ts +58 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +165 -0
- package/dist/config.js.map +1 -0
- package/dist/embed-docs/mem/00000000-0000-0000-0000-000000002001.md +324 -0
- package/dist/embed-docs/mem/00000000-0000-0000-0000-000000002002.md +48 -0
- package/dist/http/bearer-validate.d.ts +14 -0
- package/dist/http/bearer-validate.d.ts.map +1 -0
- package/dist/http/bearer-validate.js +111 -0
- package/dist/http/bearer-validate.js.map +1 -0
- package/dist/http/http-api-attest.d.ts +7 -0
- package/dist/http/http-api-attest.d.ts.map +1 -0
- package/dist/http/http-api-attest.js +103 -0
- package/dist/http/http-api-attest.js.map +1 -0
- package/dist/http/http-api-begin-step.d.ts +8 -0
- package/dist/http/http-api-begin-step.d.ts.map +1 -0
- package/dist/http/http-api-begin-step.js +108 -0
- package/dist/http/http-api-begin-step.js.map +1 -0
- package/dist/http/http-api-begin.d.ts +8 -0
- package/dist/http/http-api-begin.d.ts.map +1 -0
- package/dist/http/http-api-begin.js +167 -0
- package/dist/http/http-api-begin.js.map +1 -0
- package/dist/http/http-api-delete.d.ts +9 -0
- package/dist/http/http-api-delete.d.ts.map +1 -0
- package/dist/http/http-api-delete.js +67 -0
- package/dist/http/http-api-delete.js.map +1 -0
- package/dist/http/http-api-dump.d.ts +8 -0
- package/dist/http/http-api-dump.d.ts.map +1 -0
- package/dist/http/http-api-dump.js +34 -0
- package/dist/http/http-api-dump.js.map +1 -0
- package/dist/http/http-api-mint.d.ts +9 -0
- package/dist/http/http-api-mint.d.ts.map +1 -0
- package/dist/http/http-api-mint.js +100 -0
- package/dist/http/http-api-mint.js.map +1 -0
- package/dist/http/http-api-next.d.ts +9 -0
- package/dist/http/http-api-next.d.ts.map +1 -0
- package/dist/http/http-api-next.js +237 -0
- package/dist/http/http-api-next.js.map +1 -0
- package/dist/http/http-api-routes.d.ts +13 -0
- package/dist/http/http-api-routes.d.ts.map +1 -0
- package/dist/http/http-api-routes.js +28 -0
- package/dist/http/http-api-routes.js.map +1 -0
- package/dist/http/http-api-snapshot.d.ts +4 -0
- package/dist/http/http-api-snapshot.d.ts.map +1 -0
- package/dist/http/http-api-snapshot.js +36 -0
- package/dist/http/http-api-snapshot.js.map +1 -0
- package/dist/http/http-api-update.d.ts +9 -0
- package/dist/http/http-api-update.d.ts.map +1 -0
- package/dist/http/http-api-update.js +105 -0
- package/dist/http/http-api-update.js.map +1 -0
- package/dist/http/http-auth-callback.d.ts +6 -0
- package/dist/http/http-auth-callback.d.ts.map +1 -0
- package/dist/http/http-auth-callback.js +183 -0
- package/dist/http/http-auth-callback.js.map +1 -0
- package/dist/http/http-auth-middleware.d.ts +30 -0
- package/dist/http/http-auth-middleware.d.ts.map +1 -0
- package/dist/http/http-auth-middleware.js +224 -0
- package/dist/http/http-auth-middleware.js.map +1 -0
- package/dist/http/http-error-handlers.d.ts +7 -0
- package/dist/http/http-error-handlers.d.ts.map +1 -0
- package/dist/http/http-error-handlers.js +35 -0
- package/dist/http/http-error-handlers.js.map +1 -0
- package/dist/http/http-health-routes.d.ts +9 -0
- package/dist/http/http-health-routes.d.ts.map +1 -0
- package/dist/http/http-health-routes.js +117 -0
- package/dist/http/http-health-routes.js.map +1 -0
- package/dist/http/http-mcp-handler.d.ts +8 -0
- package/dist/http/http-mcp-handler.d.ts.map +1 -0
- package/dist/http/http-mcp-handler.js +136 -0
- package/dist/http/http-mcp-handler.js.map +1 -0
- package/dist/http/http-metrics-middleware.d.ts +7 -0
- package/dist/http/http-metrics-middleware.d.ts.map +1 -0
- package/dist/http/http-metrics-middleware.js +56 -0
- package/dist/http/http-metrics-middleware.js.map +1 -0
- package/dist/http/http-server-config.d.ts +11 -0
- package/dist/http/http-server-config.d.ts.map +1 -0
- package/dist/http/http-server-config.js +15 -0
- package/dist/http/http-server-config.js.map +1 -0
- package/dist/http/http-server-startup.d.ts +9 -0
- package/dist/http/http-server-startup.d.ts.map +1 -0
- package/dist/http/http-server-startup.js +26 -0
- package/dist/http/http-server-startup.js.map +1 -0
- package/dist/http/http-server.d.ts +4 -0
- package/dist/http/http-server.d.ts.map +1 -0
- package/dist/http/http-server.js +39 -0
- package/dist/http/http-server.js.map +1 -0
- package/dist/http/http-well-known.d.ts +13 -0
- package/dist/http/http-well-known.d.ts.map +1 -0
- package/dist/http/http-well-known.js +32 -0
- package/dist/http/http-well-known.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +100 -0
- package/dist/index.js.map +1 -0
- package/dist/metrics-server.d.ts +14 -0
- package/dist/metrics-server.d.ts.map +1 -0
- package/dist/metrics-server.js +41 -0
- package/dist/metrics-server.js.map +1 -0
- package/dist/resources/docs-resources.d.ts +2 -0
- package/dist/resources/docs-resources.d.ts.map +1 -0
- package/dist/resources/docs-resources.js +47 -0
- package/dist/resources/docs-resources.js.map +1 -0
- package/dist/resources/embedded-mcp-resources.d.ts +73 -0
- package/dist/resources/embedded-mcp-resources.d.ts.map +1 -0
- package/dist/resources/embedded-mcp-resources.js +132 -0
- package/dist/resources/embedded-mcp-resources.js.map +1 -0
- package/dist/resources/mem-resources-boot.d.ts +10 -0
- package/dist/resources/mem-resources-boot.d.ts.map +1 -0
- package/dist/resources/mem-resources-boot.js +164 -0
- package/dist/resources/mem-resources-boot.js.map +1 -0
- package/dist/resources/prompt-resources.d.ts +5 -0
- package/dist/resources/prompt-resources.d.ts.map +1 -0
- package/dist/resources/prompt-resources.js +42 -0
- package/dist/resources/prompt-resources.js.map +1 -0
- package/dist/resources/resource-bootstrap.d.ts +7 -0
- package/dist/resources/resource-bootstrap.d.ts.map +1 -0
- package/dist/resources/resource-bootstrap.js +33 -0
- package/dist/resources/resource-bootstrap.js.map +1 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +79 -0
- package/dist/server.js.map +1 -0
- package/dist/services/chain-utils.d.ts +22 -0
- package/dist/services/chain-utils.d.ts.map +1 -0
- package/dist/services/chain-utils.js +95 -0
- package/dist/services/chain-utils.js.map +1 -0
- package/dist/services/code-block-processor.d.ts +40 -0
- package/dist/services/code-block-processor.d.ts.map +1 -0
- package/dist/services/code-block-processor.js +169 -0
- package/dist/services/code-block-processor.js.map +1 -0
- package/dist/services/embedding/config.d.ts +5 -0
- package/dist/services/embedding/config.d.ts.map +1 -0
- package/dist/services/embedding/config.js +13 -0
- package/dist/services/embedding/config.js.map +1 -0
- package/dist/services/embedding/providers.d.ts +5 -0
- package/dist/services/embedding/providers.d.ts.map +1 -0
- package/dist/services/embedding/providers.js +141 -0
- package/dist/services/embedding/providers.js.map +1 -0
- package/dist/services/embedding/service.d.ts +39 -0
- package/dist/services/embedding/service.d.ts.map +1 -0
- package/dist/services/embedding/service.js +302 -0
- package/dist/services/embedding/service.js.map +1 -0
- package/dist/services/embedding/types.d.ts +17 -0
- package/dist/services/embedding/types.d.ts.map +1 -0
- package/dist/services/embedding/types.js +2 -0
- package/dist/services/embedding/types.js.map +1 -0
- package/dist/services/id-generator.d.ts +63 -0
- package/dist/services/id-generator.d.ts.map +1 -0
- package/dist/services/id-generator.js +101 -0
- package/dist/services/id-generator.js.map +1 -0
- package/dist/services/key-value-store-factory.d.ts +7 -0
- package/dist/services/key-value-store-factory.d.ts.map +1 -0
- package/dist/services/key-value-store-factory.js +15 -0
- package/dist/services/key-value-store-factory.js.map +1 -0
- package/dist/services/key-value-store.d.ts +24 -0
- package/dist/services/key-value-store.d.ts.map +1 -0
- package/dist/services/key-value-store.js +6 -0
- package/dist/services/key-value-store.js.map +1 -0
- package/dist/services/memory/chain-builder-proof.d.ts +18 -0
- package/dist/services/memory/chain-builder-proof.d.ts.map +1 -0
- package/dist/services/memory/chain-builder-proof.js +78 -0
- package/dist/services/memory/chain-builder-proof.js.map +1 -0
- package/dist/services/memory/chain-builder.d.ts +4 -0
- package/dist/services/memory/chain-builder.d.ts.map +1 -0
- package/dist/services/memory/chain-builder.js +185 -0
- package/dist/services/memory/chain-builder.js.map +1 -0
- package/dist/services/memory/store-chain-default-handler.d.ts +9 -0
- package/dist/services/memory/store-chain-default-handler.d.ts.map +1 -0
- package/dist/services/memory/store-chain-default-handler.js +118 -0
- package/dist/services/memory/store-chain-default-handler.js.map +1 -0
- package/dist/services/memory/store-chain-header-handler.d.ts +8 -0
- package/dist/services/memory/store-chain-header-handler.d.ts.map +1 -0
- package/dist/services/memory/store-chain-header-handler.js +98 -0
- package/dist/services/memory/store-chain-header-handler.js.map +1 -0
- package/dist/services/memory/store-chain-helpers.d.ts +27 -0
- package/dist/services/memory/store-chain-helpers.d.ts.map +1 -0
- package/dist/services/memory/store-chain-helpers.js +102 -0
- package/dist/services/memory/store-chain-helpers.js.map +1 -0
- package/dist/services/memory/store-chain.d.ts +15 -0
- package/dist/services/memory/store-chain.d.ts.map +1 -0
- package/dist/services/memory/store-chain.js +56 -0
- package/dist/services/memory/store-chain.js.map +1 -0
- package/dist/services/memory/store-init.d.ts +3 -0
- package/dist/services/memory/store-init.d.ts.map +1 -0
- package/dist/services/memory/store-init.js +127 -0
- package/dist/services/memory/store-init.js.map +1 -0
- package/dist/services/memory/store-methods.d.ts +35 -0
- package/dist/services/memory/store-methods.d.ts.map +1 -0
- package/dist/services/memory/store-methods.js +308 -0
- package/dist/services/memory/store-methods.js.map +1 -0
- package/dist/services/memory/store.d.ts +36 -0
- package/dist/services/memory/store.d.ts.map +1 -0
- package/dist/services/memory/store.js +119 -0
- package/dist/services/memory/store.js.map +1 -0
- package/dist/services/memory-store.d.ts +33 -0
- package/dist/services/memory-store.d.ts.map +1 -0
- package/dist/services/memory-store.js +158 -0
- package/dist/services/memory-store.js.map +1 -0
- package/dist/services/metrics/agent-metrics.d.ts +12 -0
- package/dist/services/metrics/agent-metrics.d.ts.map +1 -0
- package/dist/services/metrics/agent-metrics.js +34 -0
- package/dist/services/metrics/agent-metrics.js.map +1 -0
- package/dist/services/metrics/embedding-metrics.d.ts +12 -0
- package/dist/services/metrics/embedding-metrics.d.ts.map +1 -0
- package/dist/services/metrics/embedding-metrics.js +41 -0
- package/dist/services/metrics/embedding-metrics.js.map +1 -0
- package/dist/services/metrics/http-metrics.d.ts +12 -0
- package/dist/services/metrics/http-metrics.d.ts.map +1 -0
- package/dist/services/metrics/http-metrics.js +41 -0
- package/dist/services/metrics/http-metrics.js.map +1 -0
- package/dist/services/metrics/mcp-metrics.d.ts +16 -0
- package/dist/services/metrics/mcp-metrics.d.ts.map +1 -0
- package/dist/services/metrics/mcp-metrics.js +55 -0
- package/dist/services/metrics/mcp-metrics.js.map +1 -0
- package/dist/services/metrics/memory-metrics.d.ts +10 -0
- package/dist/services/metrics/memory-metrics.d.ts.map +1 -0
- package/dist/services/metrics/memory-metrics.js +28 -0
- package/dist/services/metrics/memory-metrics.js.map +1 -0
- package/dist/services/metrics/qdrant-metrics.d.ts +11 -0
- package/dist/services/metrics/qdrant-metrics.d.ts.map +1 -0
- package/dist/services/metrics/qdrant-metrics.js +35 -0
- package/dist/services/metrics/qdrant-metrics.js.map +1 -0
- package/dist/services/metrics/registry.d.ts +9 -0
- package/dist/services/metrics/registry.d.ts.map +1 -0
- package/dist/services/metrics/registry.js +19 -0
- package/dist/services/metrics/registry.js.map +1 -0
- package/dist/services/metrics/system-metrics.d.ts +10 -0
- package/dist/services/metrics/system-metrics.d.ts.map +1 -0
- package/dist/services/metrics/system-metrics.js +35 -0
- package/dist/services/metrics/system-metrics.js.map +1 -0
- package/dist/services/proof-of-work-store.d.ts +66 -0
- package/dist/services/proof-of-work-store.d.ts.map +1 -0
- package/dist/services/proof-of-work-store.js +141 -0
- package/dist/services/proof-of-work-store.js.map +1 -0
- package/dist/services/qdrant/connection.d.ts +24 -0
- package/dist/services/qdrant/connection.d.ts.map +1 -0
- package/dist/services/qdrant/connection.js +126 -0
- package/dist/services/qdrant/connection.js.map +1 -0
- package/dist/services/qdrant/index.d.ts +3 -0
- package/dist/services/qdrant/index.d.ts.map +1 -0
- package/dist/services/qdrant/index.js +4 -0
- package/dist/services/qdrant/index.js.map +1 -0
- package/dist/services/qdrant/initialization.d.ts +25 -0
- package/dist/services/qdrant/initialization.d.ts.map +1 -0
- package/dist/services/qdrant/initialization.js +170 -0
- package/dist/services/qdrant/initialization.js.map +1 -0
- package/dist/services/qdrant/listing.d.ts +26 -0
- package/dist/services/qdrant/listing.d.ts.map +1 -0
- package/dist/services/qdrant/listing.js +88 -0
- package/dist/services/qdrant/listing.js.map +1 -0
- package/dist/services/qdrant/memory-retrieval.d.ts +14 -0
- package/dist/services/qdrant/memory-retrieval.d.ts.map +1 -0
- package/dist/services/qdrant/memory-retrieval.js +110 -0
- package/dist/services/qdrant/memory-retrieval.js.map +1 -0
- package/dist/services/qdrant/memory-store.d.ts +16 -0
- package/dist/services/qdrant/memory-store.d.ts.map +1 -0
- package/dist/services/qdrant/memory-store.js +108 -0
- package/dist/services/qdrant/memory-store.js.map +1 -0
- package/dist/services/qdrant/memory-updates.d.ts +8 -0
- package/dist/services/qdrant/memory-updates.d.ts.map +1 -0
- package/dist/services/qdrant/memory-updates.js +206 -0
- package/dist/services/qdrant/memory-updates.js.map +1 -0
- package/dist/services/qdrant/protocol.d.ts +16 -0
- package/dist/services/qdrant/protocol.d.ts.map +1 -0
- package/dist/services/qdrant/protocol.js +48 -0
- package/dist/services/qdrant/protocol.js.map +1 -0
- package/dist/services/qdrant/quality.d.ts +14 -0
- package/dist/services/qdrant/quality.d.ts.map +1 -0
- package/dist/services/qdrant/quality.js +101 -0
- package/dist/services/qdrant/quality.js.map +1 -0
- package/dist/services/qdrant/resources.d.ts +7 -0
- package/dist/services/qdrant/resources.d.ts.map +1 -0
- package/dist/services/qdrant/resources.js +108 -0
- package/dist/services/qdrant/resources.js.map +1 -0
- package/dist/services/qdrant/search.d.ts +22 -0
- package/dist/services/qdrant/search.d.ts.map +1 -0
- package/dist/services/qdrant/search.js +75 -0
- package/dist/services/qdrant/search.js.map +1 -0
- package/dist/services/qdrant/service.d.ts +90 -0
- package/dist/services/qdrant/service.d.ts.map +1 -0
- package/dist/services/qdrant/service.js +95 -0
- package/dist/services/qdrant/service.js.map +1 -0
- package/dist/services/qdrant/snapshots.d.ts +19 -0
- package/dist/services/qdrant/snapshots.d.ts.map +1 -0
- package/dist/services/qdrant/snapshots.js +130 -0
- package/dist/services/qdrant/snapshots.js.map +1 -0
- package/dist/services/qdrant/types.d.ts +39 -0
- package/dist/services/qdrant/types.d.ts.map +1 -0
- package/dist/services/qdrant/types.js +2 -0
- package/dist/services/qdrant/types.js.map +1 -0
- package/dist/services/qdrant/utils.d.ts +20 -0
- package/dist/services/qdrant/utils.d.ts.map +1 -0
- package/dist/services/qdrant/utils.js +121 -0
- package/dist/services/qdrant/utils.js.map +1 -0
- package/dist/services/redis-cache.d.ts +43 -0
- package/dist/services/redis-cache.d.ts.map +1 -0
- package/dist/services/redis-cache.js +214 -0
- package/dist/services/redis-cache.js.map +1 -0
- package/dist/services/redis.d.ts +43 -0
- package/dist/services/redis.d.ts.map +1 -0
- package/dist/services/redis.js +234 -0
- package/dist/services/redis.js.map +1 -0
- package/dist/services/stats/bonuses.d.ts +28 -0
- package/dist/services/stats/bonuses.d.ts.map +1 -0
- package/dist/services/stats/bonuses.js +96 -0
- package/dist/services/stats/bonuses.js.map +1 -0
- package/dist/services/stats/healer.d.ts +6 -0
- package/dist/services/stats/healer.d.ts.map +1 -0
- package/dist/services/stats/healer.js +24 -0
- package/dist/services/stats/healer.js.map +1 -0
- package/dist/services/stats/model-stats.d.ts +53 -0
- package/dist/services/stats/model-stats.d.ts.map +1 -0
- package/dist/services/stats/model-stats.js +238 -0
- package/dist/services/stats/model-stats.js.map +1 -0
- package/dist/services/stats/protocol.d.ts +11 -0
- package/dist/services/stats/protocol.d.ts.map +1 -0
- package/dist/services/stats/protocol.js +55 -0
- package/dist/services/stats/protocol.js.map +1 -0
- package/dist/services/stats/scoring.d.ts +19 -0
- package/dist/services/stats/scoring.d.ts.map +1 -0
- package/dist/services/stats/scoring.js +102 -0
- package/dist/services/stats/scoring.js.map +1 -0
- package/dist/services/stats/types.d.ts +39 -0
- package/dist/services/stats/types.d.ts.map +1 -0
- package/dist/services/stats/types.js +8 -0
- package/dist/services/stats/types.js.map +1 -0
- package/dist/tools/kairos_attest.d.ts +7 -0
- package/dist/tools/kairos_attest.d.ts.map +1 -0
- package/dist/tools/kairos_attest.js +179 -0
- package/dist/tools/kairos_attest.js.map +1 -0
- package/dist/tools/kairos_begin.d.ts +9 -0
- package/dist/tools/kairos_begin.d.ts.map +1 -0
- package/dist/tools/kairos_begin.js +149 -0
- package/dist/tools/kairos_begin.js.map +1 -0
- package/dist/tools/kairos_begin_schema.d.ts +48 -0
- package/dist/tools/kairos_begin_schema.d.ts.map +1 -0
- package/dist/tools/kairos_begin_schema.js +48 -0
- package/dist/tools/kairos_begin_schema.js.map +1 -0
- package/dist/tools/kairos_delete.d.ts +2 -0
- package/dist/tools/kairos_delete.d.ts.map +1 -0
- package/dist/tools/kairos_delete.js +113 -0
- package/dist/tools/kairos_delete.js.map +1 -0
- package/dist/tools/kairos_dump.d.ts +14 -0
- package/dist/tools/kairos_dump.d.ts.map +1 -0
- package/dist/tools/kairos_dump.js +148 -0
- package/dist/tools/kairos_dump.js.map +1 -0
- package/dist/tools/kairos_mint.d.ts +7 -0
- package/dist/tools/kairos_mint.d.ts.map +1 -0
- package/dist/tools/kairos_mint.js +233 -0
- package/dist/tools/kairos_mint.js.map +1 -0
- package/dist/tools/kairos_next-missing-proof-payload.d.ts +24 -0
- package/dist/tools/kairos_next-missing-proof-payload.d.ts.map +1 -0
- package/dist/tools/kairos_next-missing-proof-payload.js +32 -0
- package/dist/tools/kairos_next-missing-proof-payload.js.map +1 -0
- package/dist/tools/kairos_next-pow-helpers.d.ts +57 -0
- package/dist/tools/kairos_next-pow-helpers.d.ts.map +1 -0
- package/dist/tools/kairos_next-pow-helpers.js +271 -0
- package/dist/tools/kairos_next-pow-helpers.js.map +1 -0
- package/dist/tools/kairos_next-previous-step.d.ts +36 -0
- package/dist/tools/kairos_next-previous-step.d.ts.map +1 -0
- package/dist/tools/kairos_next-previous-step.js +121 -0
- package/dist/tools/kairos_next-previous-step.js.map +1 -0
- package/dist/tools/kairos_next.d.ts +12 -0
- package/dist/tools/kairos_next.d.ts.map +1 -0
- package/dist/tools/kairos_next.js +285 -0
- package/dist/tools/kairos_next.js.map +1 -0
- package/dist/tools/kairos_next_schema.d.ts +80 -0
- package/dist/tools/kairos_next_schema.d.ts.map +1 -0
- package/dist/tools/kairos_next_schema.js +82 -0
- package/dist/tools/kairos_next_schema.js.map +1 -0
- package/dist/tools/kairos_search.d.ts +15 -0
- package/dist/tools/kairos_search.d.ts.map +1 -0
- package/dist/tools/kairos_search.js +262 -0
- package/dist/tools/kairos_search.js.map +1 -0
- package/dist/tools/kairos_spaces.d.ts +10 -0
- package/dist/tools/kairos_spaces.d.ts.map +1 -0
- package/dist/tools/kairos_spaces.js +129 -0
- package/dist/tools/kairos_spaces.js.map +1 -0
- package/dist/tools/kairos_update.d.ts +2 -0
- package/dist/tools/kairos_update.d.ts.map +1 -0
- package/dist/tools/kairos_update.js +158 -0
- package/dist/tools/kairos_update.js.map +1 -0
- package/dist/types/index.d.ts +60 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +21 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/memory.d.ts +38 -0
- package/dist/types/memory.d.ts.map +1 -0
- package/dist/types/memory.js +2 -0
- package/dist/types/memory.js.map +1 -0
- package/dist/utils/build-version.d.ts +15 -0
- package/dist/utils/build-version.d.ts.map +1 -0
- package/dist/utils/build-version.js +46 -0
- package/dist/utils/build-version.js.map +1 -0
- package/dist/utils/global-error-handlers.d.ts +7 -0
- package/dist/utils/global-error-handlers.d.ts.map +1 -0
- package/dist/utils/global-error-handlers.js +61 -0
- package/dist/utils/global-error-handlers.js.map +1 -0
- package/dist/utils/log-core.d.ts +11 -0
- package/dist/utils/log-core.d.ts.map +1 -0
- package/dist/utils/log-core.js +78 -0
- package/dist/utils/log-core.js.map +1 -0
- package/dist/utils/logger.d.ts +22 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +63 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/memory-body.d.ts +6 -0
- package/dist/utils/memory-body.d.ts.map +1 -0
- package/dist/utils/memory-body.js +21 -0
- package/dist/utils/memory-body.js.map +1 -0
- package/dist/utils/memory-store-utils.d.ts +14 -0
- package/dist/utils/memory-store-utils.d.ts.map +1 -0
- package/dist/utils/memory-store-utils.js +83 -0
- package/dist/utils/memory-store-utils.js.map +1 -0
- package/dist/utils/qdrant-collection-utils.d.ts +11 -0
- package/dist/utils/qdrant-collection-utils.d.ts.map +1 -0
- package/dist/utils/qdrant-collection-utils.js +62 -0
- package/dist/utils/qdrant-collection-utils.js.map +1 -0
- package/dist/utils/qdrant-query-utils.d.ts +6 -0
- package/dist/utils/qdrant-query-utils.d.ts.map +1 -0
- package/dist/utils/qdrant-query-utils.js +23 -0
- package/dist/utils/qdrant-query-utils.js.map +1 -0
- package/dist/utils/qdrant-utils.d.ts +5 -0
- package/dist/utils/qdrant-utils.d.ts.map +1 -0
- package/dist/utils/qdrant-utils.js +5 -0
- package/dist/utils/qdrant-utils.js.map +1 -0
- package/dist/utils/qdrant-vector-management.d.ts +25 -0
- package/dist/utils/qdrant-vector-management.d.ts.map +1 -0
- package/dist/utils/qdrant-vector-management.js +284 -0
- package/dist/utils/qdrant-vector-management.js.map +1 -0
- package/dist/utils/qdrant-vector-types.d.ts +35 -0
- package/dist/utils/qdrant-vector-types.d.ts.map +1 -0
- package/dist/utils/qdrant-vector-types.js +42 -0
- package/dist/utils/qdrant-vector-types.js.map +1 -0
- package/dist/utils/space-display.d.ts +11 -0
- package/dist/utils/space-display.d.ts.map +1 -0
- package/dist/utils/space-display.js +25 -0
- package/dist/utils/space-display.js.map +1 -0
- package/dist/utils/space-filter.d.ts +15 -0
- package/dist/utils/space-filter.d.ts.map +1 -0
- package/dist/utils/space-filter.js +18 -0
- package/dist/utils/space-filter.js.map +1 -0
- package/dist/utils/structured-logger.d.ts +41 -0
- package/dist/utils/structured-logger.d.ts.map +1 -0
- package/dist/utils/structured-logger.js +133 -0
- package/dist/utils/structured-logger.js.map +1 -0
- package/dist/utils/tenant-context.d.ts +67 -0
- package/dist/utils/tenant-context.d.ts.map +1 -0
- package/dist/utils/tenant-context.js +154 -0
- package/dist/utils/tenant-context.js.map +1 -0
- package/dist/utils/uri-builder.d.ts +37 -0
- package/dist/utils/uri-builder.d.ts.map +1 -0
- package/dist/utils/uri-builder.js +60 -0
- package/dist/utils/uri-builder.js.map +1 -0
- package/package.json +121 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { embeddingService } from '../services/embedding/service.js';
|
|
2
|
+
import { keyValueStore } from '../services/key-value-store-factory.js';
|
|
3
|
+
import { getBuildVersion } from '../utils/build-version.js';
|
|
4
|
+
import { AUTH_ENABLED, USE_REDIS } from '../config.js';
|
|
5
|
+
/**
|
|
6
|
+
* Set up health check and basic info routes
|
|
7
|
+
* @param app Express application instance
|
|
8
|
+
* @param memoryStore Memory store instance for health checks
|
|
9
|
+
*/
|
|
10
|
+
export function setupHealthRoutes(app, memoryStore) {
|
|
11
|
+
// Health check endpoint (non-MCP)
|
|
12
|
+
app.get('/health', async (req, res) => {
|
|
13
|
+
// Qdrant is the critical dependency for store functionality tests.
|
|
14
|
+
const qdrantHealthy = await memoryStore.checkHealth().catch(() => false);
|
|
15
|
+
// Redis and embedding providers are non-critical for allowing tests to proceed,
|
|
16
|
+
// but reported for diagnostics.
|
|
17
|
+
const redisHealthy = keyValueStore.isConnected();
|
|
18
|
+
let teiHealth = { healthy: false, message: 'Embedding provider not configured' };
|
|
19
|
+
// Run embedding health check but bound it with a short timeout so /health is responsive
|
|
20
|
+
try {
|
|
21
|
+
const teiCheck = (async () => {
|
|
22
|
+
if (typeof embeddingService.teiHealthCheck === 'function') {
|
|
23
|
+
return await embeddingService.teiHealthCheck().catch(() => ({ healthy: false, message: 'TEI check failed' }));
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
return await embeddingService.healthCheck().catch(() => ({ healthy: false, message: 'Embedding health check failed' }));
|
|
27
|
+
}
|
|
28
|
+
})();
|
|
29
|
+
// Timeout after 2000ms to avoid blocking during test setup
|
|
30
|
+
let timeoutId;
|
|
31
|
+
const timeout = new Promise(resolve => {
|
|
32
|
+
timeoutId = setTimeout(() => resolve({ healthy: false, message: 'Embedding health check timed out' }), 2000);
|
|
33
|
+
});
|
|
34
|
+
teiHealth = (await Promise.race([teiCheck, timeout]));
|
|
35
|
+
if (timeoutId) {
|
|
36
|
+
clearTimeout(timeoutId);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
teiHealth = { healthy: false, message: 'Embedding health check failed' };
|
|
41
|
+
}
|
|
42
|
+
const teiHealthy = !!teiHealth.healthy;
|
|
43
|
+
const embeddingCfg = embeddingService.getConfig ? embeddingService.getConfig() : { provider: 'unknown' };
|
|
44
|
+
// Only treat Qdrant as a blocking failure so tests that exercise store functionality can proceed.
|
|
45
|
+
const criticalHealthy = qdrantHealthy;
|
|
46
|
+
const nonCriticalAllHealthy = redisHealthy && teiHealthy;
|
|
47
|
+
const healthStatus = criticalHealthy ? (nonCriticalAllHealthy ? 'healthy' : 'degraded') : 'unhealthy';
|
|
48
|
+
const statusCode = criticalHealthy ? 200 : 503;
|
|
49
|
+
const buildVersion = getBuildVersion();
|
|
50
|
+
const uptime = Math.floor(process.uptime());
|
|
51
|
+
const dependencies = {
|
|
52
|
+
qdrant: qdrantHealthy ? 'healthy' : 'unhealthy',
|
|
53
|
+
embedding: teiHealthy ? 'healthy' : 'unhealthy'
|
|
54
|
+
};
|
|
55
|
+
if (USE_REDIS) {
|
|
56
|
+
dependencies['redis'] = redisHealthy ? 'healthy' : 'unhealthy';
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
dependencies['cache'] = 'healthy (memory)';
|
|
60
|
+
}
|
|
61
|
+
res.status(statusCode).json({
|
|
62
|
+
status: healthStatus,
|
|
63
|
+
service: 'KAIROS',
|
|
64
|
+
version: buildVersion,
|
|
65
|
+
transport: 'http',
|
|
66
|
+
uptime: uptime,
|
|
67
|
+
dependencies,
|
|
68
|
+
details: {
|
|
69
|
+
embedding: teiHealth.message,
|
|
70
|
+
provider: embeddingCfg.provider || 'auto',
|
|
71
|
+
providerPref: embeddingCfg.providerPref || 'auto',
|
|
72
|
+
cacheBackend: USE_REDIS ? 'redis' : 'memory'
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
// Basic info endpoint (non-MCP)
|
|
77
|
+
app.get('/', (req, res) => {
|
|
78
|
+
const body = {
|
|
79
|
+
service: 'KAIROS MCP Server',
|
|
80
|
+
version: getBuildVersion(),
|
|
81
|
+
transports: ['http'],
|
|
82
|
+
endpoints: {
|
|
83
|
+
health: '/health',
|
|
84
|
+
mcp: '/mcp',
|
|
85
|
+
api: '/api'
|
|
86
|
+
},
|
|
87
|
+
note: 'Use POST /mcp for MCP protocol communication'
|
|
88
|
+
};
|
|
89
|
+
if (AUTH_ENABLED) {
|
|
90
|
+
body['api_note'] = 'GET /api and POST /api/* require authentication (session or Bearer). Use login_url from 401 or /auth/callback flow.';
|
|
91
|
+
}
|
|
92
|
+
res.json(body);
|
|
93
|
+
});
|
|
94
|
+
// API root (when AUTH_ENABLED, only reached when authenticated)
|
|
95
|
+
app.get('/api', (req, res) => {
|
|
96
|
+
const body = {
|
|
97
|
+
service: 'KAIROS API',
|
|
98
|
+
version: getBuildVersion(),
|
|
99
|
+
endpoints: {
|
|
100
|
+
kairos_search: 'POST /api/kairos_search',
|
|
101
|
+
kairos_begin: 'POST /api/kairos_begin',
|
|
102
|
+
kairos_next: 'POST /api/kairos_next',
|
|
103
|
+
kairos_attest: 'POST /api/kairos_attest',
|
|
104
|
+
kairos_mint: 'POST /api/kairos_mint/raw',
|
|
105
|
+
kairos_update: 'POST /api/kairos_update',
|
|
106
|
+
kairos_delete: 'POST /api/kairos_delete',
|
|
107
|
+
kairos_dump: 'POST /api/kairos_dump'
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
if (AUTH_ENABLED) {
|
|
111
|
+
body['auth_required'] = true;
|
|
112
|
+
body['note'] = 'These endpoints require a valid session or Bearer token. Unauthenticated requests receive 401 with login_url.';
|
|
113
|
+
}
|
|
114
|
+
res.json(body);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=http-health-routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-health-routes.js","sourceRoot":"","sources":["../../src/http/http-health-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
/**
|
|
3
|
+
* Set up MCP endpoint handling
|
|
4
|
+
* @param app Express application instance
|
|
5
|
+
* @param server MCP server instance
|
|
6
|
+
*/
|
|
7
|
+
export declare function setupMcpRoutes(app: express.Express, server: any): void;
|
|
8
|
+
//# sourceMappingURL=http-mcp-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-mcp-handler.d.ts","sourceRoot":"","sources":["../../src/http/http-mcp-handler.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAW9B;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,QA8I/D"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
2
|
+
import { structuredLogger } from '../utils/structured-logger.js';
|
|
3
|
+
import { LOG_LEVEL, AUTH_ENABLED } from '../config.js';
|
|
4
|
+
import { setWwwAuthenticate } from './http-auth-middleware.js';
|
|
5
|
+
/**
|
|
6
|
+
* Track request start times by ID for accurate cancellation timing
|
|
7
|
+
*/
|
|
8
|
+
const requestTimestamps = new Map();
|
|
9
|
+
/**
|
|
10
|
+
* Set up MCP endpoint handling
|
|
11
|
+
* @param app Express application instance
|
|
12
|
+
* @param server MCP server instance
|
|
13
|
+
*/
|
|
14
|
+
export function setupMcpRoutes(app, server) {
|
|
15
|
+
// MCP endpoint using StreamableHTTPServerTransport
|
|
16
|
+
app.post('/mcp', async (req, res) => {
|
|
17
|
+
const requestStart = Date.now();
|
|
18
|
+
const requestId = req.body?.id || 'unknown';
|
|
19
|
+
const method = req.body?.method || 'unknown';
|
|
20
|
+
const toolName = req.body?.params?.name || 'unknown';
|
|
21
|
+
// Store timestamp for non-notification requests
|
|
22
|
+
if (method !== 'notifications/cancelled' && requestId !== 'unknown') {
|
|
23
|
+
requestTimestamps.set(requestId, requestStart);
|
|
24
|
+
}
|
|
25
|
+
// Log incoming request with level control
|
|
26
|
+
const logLevel = LOG_LEVEL;
|
|
27
|
+
if (logLevel === 'debug' || method !== 'notifications/cancelled') {
|
|
28
|
+
structuredLogger.info(`→ MCP ${method}${toolName !== 'unknown' ? ` (${toolName})` : ''} [id: ${requestId}]`);
|
|
29
|
+
}
|
|
30
|
+
// listOfferingsForUI (MCP Apps / UI discovery): not implemented by SDK. Handle here so the client
|
|
31
|
+
// gets a proper auth-related response when auth is required, instead of -32601 Method not found.
|
|
32
|
+
if (method === 'listOfferingsForUI') {
|
|
33
|
+
const id = req.body?.id ?? null;
|
|
34
|
+
if (AUTH_ENABLED && !req.auth) {
|
|
35
|
+
setWwwAuthenticate(res, {
|
|
36
|
+
error: 'invalid_token',
|
|
37
|
+
error_description: 'Authentication required for UI offerings'
|
|
38
|
+
});
|
|
39
|
+
res.status(401).json({
|
|
40
|
+
jsonrpc: '2.0',
|
|
41
|
+
error: {
|
|
42
|
+
code: -32001,
|
|
43
|
+
message: 'Authentication required for UI offerings'
|
|
44
|
+
},
|
|
45
|
+
id
|
|
46
|
+
});
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
res.status(200).json({
|
|
50
|
+
jsonrpc: '2.0',
|
|
51
|
+
result: { tools: [], prompts: [], resources: [] },
|
|
52
|
+
id
|
|
53
|
+
});
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
// Create new transport for each request to prevent request ID collisions
|
|
58
|
+
const transport = new StreamableHTTPServerTransport({
|
|
59
|
+
enableJsonResponse: true
|
|
60
|
+
});
|
|
61
|
+
// Track request timeout - log at 25s (before typical 30s client timeout)
|
|
62
|
+
let requestCompleted = false;
|
|
63
|
+
const timeoutHandler = setTimeout(() => {
|
|
64
|
+
if (!requestCompleted) {
|
|
65
|
+
const duration = Date.now() - requestStart;
|
|
66
|
+
structuredLogger.requestTimeout(`${method} ${toolName ? `(${toolName})` : ''} [id: ${requestId}]`, duration);
|
|
67
|
+
}
|
|
68
|
+
}, 25000); // Log at 25s (before typical 30s client timeout)
|
|
69
|
+
res.on('close', () => {
|
|
70
|
+
requestCompleted = true;
|
|
71
|
+
clearTimeout(timeoutHandler);
|
|
72
|
+
const duration = Date.now() - requestStart;
|
|
73
|
+
if (method === 'notifications/cancelled') {
|
|
74
|
+
// For cancellation notifications, find the original request's start time
|
|
75
|
+
const originalStart = requestTimestamps.get(requestId);
|
|
76
|
+
const actualDuration = originalStart ? Date.now() - originalStart : duration;
|
|
77
|
+
structuredLogger.warn(`⚡ Client cancelled request after ${actualDuration}ms [id: ${requestId}] - operation may continue in background`);
|
|
78
|
+
// Clean up timestamp
|
|
79
|
+
if (requestId !== 'unknown') {
|
|
80
|
+
requestTimestamps.delete(requestId);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else if (duration > 20000) {
|
|
84
|
+
structuredLogger.warn(`← Request closed after ${duration}ms: ${method}${toolName !== 'unknown' ? ` (${toolName})` : ''} [id: ${requestId}]`);
|
|
85
|
+
// Clean up timestamp
|
|
86
|
+
if (requestId !== 'unknown') {
|
|
87
|
+
requestTimestamps.delete(requestId);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else if (logLevel === 'debug') {
|
|
91
|
+
structuredLogger.info(`← Request closed ${duration}ms [id: ${requestId}]`);
|
|
92
|
+
}
|
|
93
|
+
transport.close();
|
|
94
|
+
});
|
|
95
|
+
res.on('finish', () => {
|
|
96
|
+
requestCompleted = true;
|
|
97
|
+
clearTimeout(timeoutHandler);
|
|
98
|
+
const duration = Date.now() - requestStart;
|
|
99
|
+
if (duration > 10000 && method !== 'notifications/cancelled') {
|
|
100
|
+
structuredLogger.info(`✓ Request completed in ${duration}ms: ${method}${toolName !== 'unknown' ? ` (${toolName})` : ''} [id: ${requestId}]`);
|
|
101
|
+
}
|
|
102
|
+
else if (logLevel === 'debug') {
|
|
103
|
+
structuredLogger.info(`✓ Completed ${duration}ms [id: ${requestId}]`);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
// Connect server with request context for tool handlers
|
|
107
|
+
await server.connect(transport);
|
|
108
|
+
// Set up request context for model identity detection
|
|
109
|
+
transport._requestContext = req;
|
|
110
|
+
// Set up global context for tools to access
|
|
111
|
+
globalThis._mcpRequestContext = req;
|
|
112
|
+
globalThis._mcpTransport = transport;
|
|
113
|
+
await transport.handleRequest(req, res, req.body);
|
|
114
|
+
// Clean up context after request
|
|
115
|
+
delete globalThis._mcpRequestContext;
|
|
116
|
+
delete globalThis._mcpTransport;
|
|
117
|
+
requestCompleted = true;
|
|
118
|
+
clearTimeout(timeoutHandler);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
const duration = Date.now() - requestStart;
|
|
122
|
+
structuredLogger.error(`✗ MCP error: ${method}${toolName !== 'unknown' ? ` (${toolName})` : ''} after ${duration}ms`, error, { request_id: requestId });
|
|
123
|
+
if (!res.headersSent) {
|
|
124
|
+
res.status(500).json({
|
|
125
|
+
jsonrpc: '2.0',
|
|
126
|
+
error: {
|
|
127
|
+
code: -32603,
|
|
128
|
+
message: 'Internal server error'
|
|
129
|
+
},
|
|
130
|
+
id: requestId === 'unknown' ? null : requestId
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=http-mcp-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-mcp-handler.js","sourceRoot":"","sources":["../../src/http/http-mcp-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
/**
|
|
3
|
+
* HTTP metrics middleware for Prometheus
|
|
4
|
+
* Tracks requests, response times, payload sizes, and active connections
|
|
5
|
+
*/
|
|
6
|
+
export declare function httpMetricsMiddleware(req: express.Request, res: express.Response, next: express.NextFunction): void;
|
|
7
|
+
//# sourceMappingURL=http-metrics-middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-metrics-middleware.d.ts","sourceRoot":"","sources":["../../src/http/http-metrics-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAU9B;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,QAwD5G"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { httpRequests, httpRequestDuration, httpRequestSize, httpResponseSize, httpActiveConnections } from '../services/metrics/http-metrics.js';
|
|
2
|
+
import { getTenantId } from '../utils/tenant-context.js';
|
|
3
|
+
/**
|
|
4
|
+
* HTTP metrics middleware for Prometheus
|
|
5
|
+
* Tracks requests, response times, payload sizes, and active connections
|
|
6
|
+
*/
|
|
7
|
+
export function httpMetricsMiddleware(req, res, next) {
|
|
8
|
+
const tenantId = getTenantId(req);
|
|
9
|
+
const method = req.method;
|
|
10
|
+
const route = req.route?.path || req.path;
|
|
11
|
+
// Track request size
|
|
12
|
+
const requestSize = req.headers['content-length'] ? parseInt(req.headers['content-length'], 10) : 0;
|
|
13
|
+
if (requestSize > 0) {
|
|
14
|
+
httpRequestSize.observe({ method, route, tenant_id: tenantId }, requestSize);
|
|
15
|
+
}
|
|
16
|
+
// Increment active connections
|
|
17
|
+
httpActiveConnections.inc({ tenant_id: tenantId });
|
|
18
|
+
// Start duration timer
|
|
19
|
+
const timer = httpRequestDuration.startTimer({
|
|
20
|
+
method,
|
|
21
|
+
route,
|
|
22
|
+
tenant_id: tenantId
|
|
23
|
+
});
|
|
24
|
+
// Track response size
|
|
25
|
+
const originalSend = res.send;
|
|
26
|
+
res.send = function (body) {
|
|
27
|
+
const responseSize = typeof body === 'string' ? Buffer.byteLength(body) : JSON.stringify(body).length;
|
|
28
|
+
httpResponseSize.observe({
|
|
29
|
+
method,
|
|
30
|
+
route,
|
|
31
|
+
status: res.statusCode.toString(),
|
|
32
|
+
tenant_id: tenantId
|
|
33
|
+
}, responseSize);
|
|
34
|
+
return originalSend.call(this, body);
|
|
35
|
+
};
|
|
36
|
+
res.on('finish', () => {
|
|
37
|
+
// Track request
|
|
38
|
+
httpRequests.inc({
|
|
39
|
+
method,
|
|
40
|
+
route,
|
|
41
|
+
status: res.statusCode.toString(),
|
|
42
|
+
tenant_id: tenantId
|
|
43
|
+
});
|
|
44
|
+
// End duration timer
|
|
45
|
+
timer({
|
|
46
|
+
method,
|
|
47
|
+
route,
|
|
48
|
+
status: res.statusCode.toString(),
|
|
49
|
+
tenant_id: tenantId
|
|
50
|
+
});
|
|
51
|
+
// Decrement active connections
|
|
52
|
+
httpActiveConnections.dec({ tenant_id: tenantId });
|
|
53
|
+
});
|
|
54
|
+
next();
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=http-metrics-middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-metrics-middleware.js","sourceRoot":"","sources":["../../src/http/http-metrics-middleware.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAoB,EAAE,GAAqB,EAAE,IAA0B;IAC3G,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC;IAE1C,qBAAqB;IACrB,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpG,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,WAAW,CAAC,CAAC;IAC/E,CAAC;IAED,+BAA+B;IAC/B,qBAAqB,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEnD,uBAAuB;IACvB,MAAM,KAAK,GAAG,mBAAmB,CAAC,UAAU,CAAC;QAC3C,MAAM;QACN,KAAK;QACL,SAAS,EAAE,QAAQ;KACpB,CAAC,CAAC;IAEH,sBAAsB;IACtB,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC;IAC9B,GAAG,CAAC,IAAI,GAAG,UAAS,IAAS;QAC3B,MAAM,YAAY,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QACtG,gBAAgB,CAAC,OAAO,CAAC;YACvB,MAAM;YACN,KAAK;YACL,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE;YACjC,SAAS,EAAE,QAAQ;SACpB,EAAE,YAAY,CAAC,CAAC;QACjB,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACpB,gBAAgB;QAChB,YAAY,CAAC,GAAG,CAAC;YACf,MAAM;YACN,KAAK;YACL,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE;YACjC,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;QAEH,qBAAqB;QACrB,KAAK,CAAC;YACJ,MAAM;YACN,KAAK;YACL,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE;YACjC,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;QAEH,+BAA+B;QAC/B,qBAAqB,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,IAAI,EAAE,CAAC;AACT,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
declare global {
|
|
3
|
+
var _mcpRequestContext: any;
|
|
4
|
+
var _mcpTransport: any;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Configure Express application with middleware
|
|
8
|
+
* @param app Express application instance
|
|
9
|
+
*/
|
|
10
|
+
export declare function configureMiddleware(app: express.Express): void;
|
|
11
|
+
//# sourceMappingURL=http-server-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server-config.d.ts","sourceRoot":"","sources":["../../src/http/http-server-config.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAK9B,OAAO,CAAC,MAAM,CAAC;IACX,IAAI,kBAAkB,EAAE,GAAG,CAAC;IAC5B,IAAI,aAAa,EAAE,GAAG,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,QAMvD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import { httpLogger } from '../utils/structured-logger.js';
|
|
3
|
+
import { httpMetricsMiddleware } from './http-metrics-middleware.js';
|
|
4
|
+
/**
|
|
5
|
+
* Configure Express application with middleware
|
|
6
|
+
* @param app Express application instance
|
|
7
|
+
*/
|
|
8
|
+
export function configureMiddleware(app) {
|
|
9
|
+
// Structured HTTP access logging middleware
|
|
10
|
+
app.use(httpLogger);
|
|
11
|
+
// HTTP metrics middleware for Prometheus
|
|
12
|
+
app.use(httpMetricsMiddleware);
|
|
13
|
+
app.use(express.json());
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=http-server-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server-config.js","sourceRoot":"","sources":["../../src/http/http-server-config.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAQrE;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAoB;IACpD,4CAA4C;IAC5C,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACpB,yCAAyC;IACzC,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAC/B,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
/**
|
|
3
|
+
* Start HTTP server with error handling
|
|
4
|
+
* @param app Express application instance
|
|
5
|
+
* @param port Port to listen on
|
|
6
|
+
* @returns HTTP server instance
|
|
7
|
+
*/
|
|
8
|
+
export declare function startHttpServerWithErrorHandling(app: express.Express, port: number): import("node:http").Server<typeof import("node:http").IncomingMessage, typeof import("node:http").ServerResponse>;
|
|
9
|
+
//# sourceMappingURL=http-server-startup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server-startup.d.ts","sourceRoot":"","sources":["../../src/http/http-server-startup.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,qHAkBlF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { structuredLogger } from '../utils/structured-logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Start HTTP server with error handling
|
|
4
|
+
* @param app Express application instance
|
|
5
|
+
* @param port Port to listen on
|
|
6
|
+
* @returns HTTP server instance
|
|
7
|
+
*/
|
|
8
|
+
export function startHttpServerWithErrorHandling(app, port) {
|
|
9
|
+
const httpServer = app.listen(port, '0.0.0.0', () => {
|
|
10
|
+
structuredLogger.success('HTTP server', 'listening on port ' + port);
|
|
11
|
+
structuredLogger.info('Health check: http://localhost:' + port + '/health');
|
|
12
|
+
structuredLogger.info('MCP endpoint: http://localhost:' + port + '/mcp');
|
|
13
|
+
});
|
|
14
|
+
httpServer.on('error', (error) => {
|
|
15
|
+
if (error.code === 'EADDRINUSE') {
|
|
16
|
+
structuredLogger.error(`Port ${port} is already in use. Please choose a different port.`);
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
structuredLogger.error('HTTP server error:', error.message);
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
return httpServer;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=http-server-startup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server-startup.js","sourceRoot":"","sources":["../../src/http/http-server-startup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE;;;;;GAKG;AACH,MAAM,UAAU,gCAAgC,CAAC,GAAoB,EAAE,IAAY;IAC/E,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;QAChD,gBAAgB,CAAC,OAAO,CAAC,aAAa,EAAE,oBAAoB,GAAG,IAAI,CAAC,CAAC;QACrE,gBAAgB,CAAC,IAAI,CAAC,iCAAiC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;QAC5E,gBAAgB,CAAC,IAAI,CAAC,iCAAiC,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAA4B,EAAE,EAAE;QACpD,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC9B,gBAAgB,CAAC,KAAK,CAAC,QAAQ,IAAI,qDAAqD,CAAC,CAAC;YAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACJ,gBAAgB,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { MemoryQdrantStore } from '../services/memory/store.js';
|
|
2
|
+
export declare function startHttpServer(port: number, server: any, memoryStore: MemoryQdrantStore): import("node:http").Server<typeof import("node:http").IncomingMessage, typeof import("node:http").ServerResponse>;
|
|
3
|
+
export declare function startServer(server: any, memoryStore: MemoryQdrantStore): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=http-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../../src/http/http-server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAgBhE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,qHAqBxF;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,iBAQ5E"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import { structuredLogger } from '../utils/structured-logger.js';
|
|
3
|
+
import { PORT } from '../config.js';
|
|
4
|
+
// Import modular components
|
|
5
|
+
import { configureMiddleware } from './http-server-config.js';
|
|
6
|
+
import { authMiddleware } from './http-auth-middleware.js';
|
|
7
|
+
import { setupAuthCallback } from './http-auth-callback.js';
|
|
8
|
+
import { setupHealthRoutes } from './http-health-routes.js';
|
|
9
|
+
import { setupWellKnown } from './http-well-known.js';
|
|
10
|
+
import { setupApiRoutes } from './http-api-routes.js';
|
|
11
|
+
import { setupMcpRoutes } from './http-mcp-handler.js';
|
|
12
|
+
import { setupErrorHandlers } from './http-error-handlers.js';
|
|
13
|
+
import { startHttpServerWithErrorHandling } from './http-server-startup.js';
|
|
14
|
+
import { qdrantService } from '../services/qdrant/index.js';
|
|
15
|
+
export function startHttpServer(port, server, memoryStore) {
|
|
16
|
+
const app = express();
|
|
17
|
+
// Configure middleware
|
|
18
|
+
configureMiddleware(app);
|
|
19
|
+
setupAuthCallback(app);
|
|
20
|
+
// Well-known must be registered before auth middleware so RFC 9728 discovery
|
|
21
|
+
// is reachable without credentials (MCP clients call it before authenticating).
|
|
22
|
+
setupWellKnown(app);
|
|
23
|
+
app.use(authMiddleware);
|
|
24
|
+
// Protected route handlers (require auth when AUTH_ENABLED)
|
|
25
|
+
setupHealthRoutes(app, memoryStore);
|
|
26
|
+
setupApiRoutes(app, memoryStore, { qdrantService });
|
|
27
|
+
setupMcpRoutes(app, server);
|
|
28
|
+
setupErrorHandlers(app);
|
|
29
|
+
// Start server with error handling
|
|
30
|
+
return startHttpServerWithErrorHandling(app, port);
|
|
31
|
+
}
|
|
32
|
+
export async function startServer(server, memoryStore) {
|
|
33
|
+
const httpPort = PORT;
|
|
34
|
+
structuredLogger.success('🚀 KAIROS MCP Server starting', 'HTTP transport only');
|
|
35
|
+
structuredLogger.info('HTTP transport: enabled');
|
|
36
|
+
structuredLogger.info('Port: ' + httpPort);
|
|
37
|
+
startHttpServer(httpPort, server, memoryStore);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=http-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../../src/http/http-server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,4BAA4B;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,MAAW,EAAE,WAA8B;IACrF,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IAEtB,uBAAuB;IACvB,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAEvB,6EAA6E;IAC7E,gFAAgF;IAChF,cAAc,CAAC,GAAG,CAAC,CAAC;IAEpB,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAExB,4DAA4D;IAC5D,iBAAiB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACpC,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;IACpD,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC5B,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAExB,mCAAmC;IACnC,OAAO,gCAAgC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAW,EAAE,WAA8B;IACzE,MAAM,QAAQ,GAAG,IAAI,CAAC;IAEtB,gBAAgB,CAAC,OAAO,CAAC,+BAA+B,EAAE,qBAAqB,CAAC,CAAC;IACjF,gBAAgB,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACjD,gBAAgB,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;IAE3C,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth 2.0 Protected Resource Metadata (RFC 9728) for MCP authorization discovery.
|
|
3
|
+
*
|
|
4
|
+
* Serves metadata at:
|
|
5
|
+
* GET /.well-known/oauth-protected-resource (root — fallback)
|
|
6
|
+
* GET /.well-known/oauth-protected-resource/mcp (path-specific — tried first by spec-compliant clients)
|
|
7
|
+
*
|
|
8
|
+
* MCP clients use this to discover the authorization server and initiate OAuth 2.1 flows.
|
|
9
|
+
* See: https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization
|
|
10
|
+
*/
|
|
11
|
+
import type { Express } from 'express';
|
|
12
|
+
export declare function setupWellKnown(app: Express): void;
|
|
13
|
+
//# sourceMappingURL=http-well-known.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-well-known.d.ts","sourceRoot":"","sources":["../../src/http/http-well-known.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAyB1D,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAajD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { AUTH_CALLBACK_BASE_URL, KEYCLOAK_URL, KEYCLOAK_REALM } from '../config.js';
|
|
2
|
+
import { structuredLogger } from '../utils/structured-logger.js';
|
|
3
|
+
function buildProtectedResourceMetadata() {
|
|
4
|
+
const base = AUTH_CALLBACK_BASE_URL.replace(/\/$/, '');
|
|
5
|
+
const resource = `${base}/mcp`;
|
|
6
|
+
const issuer = KEYCLOAK_URL
|
|
7
|
+
? `${KEYCLOAK_URL.replace(/\/$/, '')}/realms/${KEYCLOAK_REALM}`
|
|
8
|
+
: '';
|
|
9
|
+
const metadata = {
|
|
10
|
+
resource,
|
|
11
|
+
authorization_servers: issuer ? [issuer] : [],
|
|
12
|
+
scopes_supported: ['openid'],
|
|
13
|
+
bearer_methods_supported: ['header'],
|
|
14
|
+
resource_name: 'KAIROS MCP'
|
|
15
|
+
};
|
|
16
|
+
// RFC 9728 allows additional parameters. MCP clients that support it should add these
|
|
17
|
+
// to the authorization request (e.g. prompt=login) to avoid already_logged_in when
|
|
18
|
+
// the user is logged in elsewhere, without disabling SSO for normal browser use.
|
|
19
|
+
metadata['authorization_request_parameters'] = { prompt: 'login' };
|
|
20
|
+
return metadata;
|
|
21
|
+
}
|
|
22
|
+
export function setupWellKnown(app) {
|
|
23
|
+
if (!AUTH_CALLBACK_BASE_URL) {
|
|
24
|
+
structuredLogger.warn('[well-known] AUTH_CALLBACK_BASE_URL is empty — Protected Resource Metadata will use relative URIs (non-compliant with RFC 9728). Set AUTH_CALLBACK_BASE_URL for production.');
|
|
25
|
+
}
|
|
26
|
+
const handler = (_req, res) => {
|
|
27
|
+
res.json(buildProtectedResourceMetadata());
|
|
28
|
+
};
|
|
29
|
+
app.get('/.well-known/oauth-protected-resource', handler);
|
|
30
|
+
app.get('/.well-known/oauth-protected-resource/mcp', handler);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=http-well-known.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-well-known.js","sourceRoot":"","sources":["../../src/http/http-well-known.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,SAAS,8BAA8B;IACrC,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,GAAG,IAAI,MAAM,CAAC;IAC/B,MAAM,MAAM,GAAG,YAAY;QACzB,CAAC,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,cAAc,EAAE;QAC/D,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,QAAQ,GAA4B;QACxC,QAAQ;QACR,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;QAC7C,gBAAgB,EAAE,CAAC,QAAQ,CAAC;QAC5B,wBAAwB,EAAE,CAAC,QAAQ,CAAC;QACpC,aAAa,EAAE,YAAY;KAC5B,CAAC;IACF,sFAAsF;IACtF,mFAAmF;IACnF,iFAAiF;IACjF,QAAQ,CAAC,kCAAkC,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACnE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,gBAAgB,CAAC,IAAI,CACnB,6KAA6K,CAC9K,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;QAC/C,GAAG,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,GAAG,CAAC,GAAG,CAAC,uCAAuC,EAAE,OAAO,CAAC,CAAC;IAC1D,GAAG,CAAC,GAAG,CAAC,2CAA2C,EAAE,OAAO,CAAC,CAAC;AAChE,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,OAAO,sCAAsC,CAAC"}
|