@confluentinc/mcp-confluent 1.2.2 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +299 -240
- package/assets/oauth-templates/callback-failure.html +22 -0
- package/assets/oauth-templates/callback-success.html +99 -0
- package/assets/oauth-templates/logo.html +91 -0
- package/assets/oauth-templates/styles.html +110 -0
- package/config.example.yaml +149 -0
- package/config.oauth.example.yaml +45 -0
- package/dist/cli.d.ts +59 -12
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +131 -61
- package/dist/cli.js.map +1 -1
- package/dist/config/env-config.d.ts +33 -0
- package/dist/config/env-config.d.ts.map +1 -0
- package/dist/config/env-config.js +478 -0
- package/dist/config/env-config.js.map +1 -0
- package/dist/config/index.d.ts +31 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +76 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/interpolation.d.ts +9 -0
- package/dist/config/interpolation.d.ts.map +1 -0
- package/dist/config/interpolation.js +51 -0
- package/dist/config/interpolation.js.map +1 -0
- package/dist/config/models.d.ts +399 -0
- package/dist/config/models.d.ts.map +1 -0
- package/dist/config/models.js +406 -0
- package/dist/config/models.js.map +1 -0
- package/dist/config/validation.d.ts +9 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +46 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/confluent/base-client-manager.d.ts +133 -0
- package/dist/confluent/base-client-manager.d.ts.map +1 -0
- package/dist/confluent/base-client-manager.js +188 -0
- package/dist/confluent/base-client-manager.js.map +1 -0
- package/dist/confluent/client-manager.d.ts +42 -77
- package/dist/confluent/client-manager.d.ts.map +1 -1
- package/dist/confluent/client-manager.js +5 -213
- package/dist/confluent/client-manager.js.map +1 -1
- package/dist/confluent/config-telemetry.d.ts +41 -0
- package/dist/confluent/config-telemetry.d.ts.map +1 -0
- package/dist/confluent/config-telemetry.js +17 -0
- package/dist/confluent/config-telemetry.js.map +1 -0
- package/dist/confluent/direct-client-manager.d.ts +43 -0
- package/dist/confluent/direct-client-manager.d.ts.map +1 -0
- package/dist/confluent/direct-client-manager.js +154 -0
- package/dist/confluent/direct-client-manager.js.map +1 -0
- package/dist/confluent/middleware.d.ts +32 -4
- package/dist/confluent/middleware.d.ts.map +1 -1
- package/dist/confluent/middleware.js +46 -2
- package/dist/confluent/middleware.js.map +1 -1
- package/dist/confluent/node-deps.d.ts +33 -39
- package/dist/confluent/node-deps.d.ts.map +1 -1
- package/dist/confluent/node-deps.js +48 -7
- package/dist/confluent/node-deps.js.map +1 -1
- package/dist/confluent/oauth/auth-context.d.ts +94 -0
- package/dist/confluent/oauth/auth-context.d.ts.map +1 -0
- package/dist/confluent/oauth/auth-context.js +323 -0
- package/dist/confluent/oauth/auth-context.js.map +1 -0
- package/dist/confluent/oauth/auth0-config.d.ts +12 -0
- package/dist/confluent/oauth/auth0-config.d.ts.map +1 -0
- package/dist/confluent/oauth/auth0-config.js +43 -0
- package/dist/confluent/oauth/auth0-config.js.map +1 -0
- package/dist/confluent/oauth/callback-pages.d.ts +13 -0
- package/dist/confluent/oauth/callback-pages.d.ts.map +1 -0
- package/dist/confluent/oauth/callback-pages.js +47 -0
- package/dist/confluent/oauth/callback-pages.js.map +1 -0
- package/dist/confluent/oauth/crypto-utils.d.ts +16 -0
- package/dist/confluent/oauth/crypto-utils.d.ts.map +1 -0
- package/dist/confluent/oauth/crypto-utils.js +23 -0
- package/dist/confluent/oauth/crypto-utils.js.map +1 -0
- package/dist/confluent/oauth/errors.d.ts +27 -0
- package/dist/confluent/oauth/errors.d.ts.map +1 -0
- package/dist/confluent/oauth/errors.js +6 -0
- package/dist/confluent/oauth/errors.js.map +1 -0
- package/dist/confluent/oauth/oauth-holder.d.ts +34 -0
- package/dist/confluent/oauth/oauth-holder.d.ts.map +1 -0
- package/dist/confluent/oauth/oauth-holder.js +155 -0
- package/dist/confluent/oauth/oauth-holder.js.map +1 -0
- package/dist/confluent/oauth/pkce-login.d.ts +45 -0
- package/dist/confluent/oauth/pkce-login.d.ts.map +1 -0
- package/dist/confluent/oauth/pkce-login.js +270 -0
- package/dist/confluent/oauth/pkce-login.js.map +1 -0
- package/dist/confluent/oauth/token-chain.d.ts +53 -0
- package/dist/confluent/oauth/token-chain.d.ts.map +1 -0
- package/dist/confluent/oauth/token-chain.js +141 -0
- package/dist/confluent/oauth/token-chain.js.map +1 -0
- package/dist/confluent/oauth/token-lifetimes.d.ts +13 -0
- package/dist/confluent/oauth/token-lifetimes.d.ts.map +1 -0
- package/dist/confluent/oauth/token-lifetimes.js +13 -0
- package/dist/confluent/oauth/token-lifetimes.js.map +1 -0
- package/dist/confluent/oauth/types.d.ts +68 -0
- package/dist/confluent/oauth/types.d.ts.map +1 -0
- package/dist/confluent/oauth/types.js +2 -0
- package/dist/confluent/oauth/types.js.map +1 -0
- package/dist/confluent/oauth-client-manager.d.ts +78 -0
- package/dist/confluent/oauth-client-manager.d.ts.map +1 -0
- package/dist/confluent/oauth-client-manager.js +265 -0
- package/dist/confluent/oauth-client-manager.js.map +1 -0
- package/dist/confluent/oauth-resource-resolvers.d.ts +6 -0
- package/dist/confluent/oauth-resource-resolvers.d.ts.map +1 -0
- package/dist/confluent/oauth-resource-resolvers.js +65 -0
- package/dist/confluent/oauth-resource-resolvers.js.map +1 -0
- package/dist/confluent/schema-registry-helper.d.ts +5 -9
- package/dist/confluent/schema-registry-helper.d.ts.map +1 -1
- package/dist/confluent/schema-registry-helper.js +1 -9
- package/dist/confluent/schema-registry-helper.js.map +1 -1
- package/dist/confluent/telemetry.d.ts +38 -1
- package/dist/confluent/telemetry.d.ts.map +1 -1
- package/dist/confluent/telemetry.js +37 -8
- package/dist/confluent/telemetry.js.map +1 -1
- package/dist/confluent/tools/base-tools.d.ts +140 -23
- package/dist/confluent/tools/base-tools.d.ts.map +1 -1
- package/dist/confluent/tools/base-tools.js +98 -4
- package/dist/confluent/tools/base-tools.js.map +1 -1
- package/dist/confluent/tools/cluster-arg-resolvers.d.ts +75 -0
- package/dist/confluent/tools/cluster-arg-resolvers.d.ts.map +1 -0
- package/dist/confluent/tools/cluster-arg-resolvers.js +127 -0
- package/dist/confluent/tools/cluster-arg-resolvers.js.map +1 -0
- package/dist/confluent/tools/connection-predicates.d.ts +176 -0
- package/dist/confluent/tools/connection-predicates.d.ts.map +1 -0
- package/dist/confluent/tools/connection-predicates.js +284 -0
- package/dist/confluent/tools/connection-predicates.js.map +1 -0
- package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts +5 -6
- package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.js +40 -11
- package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.d.ts +6 -6
- package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.js +6 -9
- package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.js.map +1 -1
- package/dist/confluent/tools/handlers/catalog/create-topic-tags.d.ts +6 -6
- package/dist/confluent/tools/handlers/catalog/create-topic-tags.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/catalog/create-topic-tags.js +6 -9
- package/dist/confluent/tools/handlers/catalog/create-topic-tags.js.map +1 -1
- package/dist/confluent/tools/handlers/catalog/delete-tag.d.ts +6 -6
- package/dist/confluent/tools/handlers/catalog/delete-tag.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/catalog/delete-tag.js +6 -9
- package/dist/confluent/tools/handlers/catalog/delete-tag.js.map +1 -1
- package/dist/confluent/tools/handlers/catalog/list-tags.d.ts +6 -6
- package/dist/confluent/tools/handlers/catalog/list-tags.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/catalog/list-tags.js +6 -9
- package/dist/confluent/tools/handlers/catalog/list-tags.js.map +1 -1
- package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.d.ts +6 -6
- package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.js +6 -9
- package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.js.map +1 -1
- package/dist/confluent/tools/handlers/clusters/list-clusters-handler.d.ts +5 -6
- package/dist/confluent/tools/handlers/clusters/list-clusters-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/clusters/list-clusters-handler.js +11 -13
- package/dist/confluent/tools/handlers/clusters/list-clusters-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/connect/connect-tool-handler.d.ts +34 -0
- package/dist/confluent/tools/handlers/connect/connect-tool-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/connect/connect-tool-handler.js +47 -0
- package/dist/confluent/tools/handlers/connect/connect-tool-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/connect/create-connector-handler.d.ts +11 -7
- package/dist/confluent/tools/handlers/connect/create-connector-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/connect/create-connector-handler.js +21 -21
- package/dist/confluent/tools/handlers/connect/create-connector-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/connect/delete-connector-handler.d.ts +6 -7
- package/dist/confluent/tools/handlers/connect/delete-connector-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/connect/delete-connector-handler.js +10 -15
- package/dist/confluent/tools/handlers/connect/delete-connector-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/connect/get-connector-config-handler.d.ts +9 -0
- package/dist/confluent/tools/handlers/connect/get-connector-config-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/connect/get-connector-config-handler.js +35 -0
- package/dist/confluent/tools/handlers/connect/get-connector-config-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/connect/get-connector-error-recommendations-handler.d.ts +9 -0
- package/dist/confluent/tools/handlers/connect/get-connector-error-recommendations-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/connect/get-connector-error-recommendations-handler.js +66 -0
- package/dist/confluent/tools/handlers/connect/get-connector-error-recommendations-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/connect/get-connector-error-summary-handler.d.ts +9 -0
- package/dist/confluent/tools/handlers/connect/get-connector-error-summary-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/connect/get-connector-error-summary-handler.js +131 -0
- package/dist/confluent/tools/handlers/connect/get-connector-error-summary-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/connect/get-connector-logs-handler.d.ts +9 -0
- package/dist/confluent/tools/handlers/connect/get-connector-logs-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/connect/get-connector-logs-handler.js +244 -0
- package/dist/confluent/tools/handlers/connect/get-connector-logs-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/connect/get-connector-offsets-handler.d.ts +9 -0
- package/dist/confluent/tools/handlers/connect/get-connector-offsets-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/connect/get-connector-offsets-handler.js +35 -0
- package/dist/confluent/tools/handlers/connect/get-connector-offsets-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/connect/get-connector-status-handler.d.ts +9 -0
- package/dist/confluent/tools/handlers/connect/get-connector-status-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/connect/get-connector-status-handler.js +44 -0
- package/dist/confluent/tools/handlers/connect/get-connector-status-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/connect/get-connector-tasks-handler.d.ts +9 -0
- package/dist/confluent/tools/handlers/connect/get-connector-tasks-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/connect/get-connector-tasks-handler.js +35 -0
- package/dist/confluent/tools/handlers/connect/get-connector-tasks-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/connect/list-connectors-handler.d.ts +6 -7
- package/dist/confluent/tools/handlers/connect/list-connectors-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/connect/list-connectors-handler.js +15 -17
- package/dist/confluent/tools/handlers/connect/list-connectors-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/connect/pause-connector-handler.d.ts +9 -0
- package/dist/confluent/tools/handlers/connect/pause-connector-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/connect/pause-connector-handler.js +35 -0
- package/dist/confluent/tools/handlers/connect/pause-connector-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/connect/restart-connector-handler.d.ts +9 -0
- package/dist/confluent/tools/handlers/connect/restart-connector-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/connect/restart-connector-handler.js +35 -0
- package/dist/confluent/tools/handlers/connect/restart-connector-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/connect/resume-connector-handler.d.ts +9 -0
- package/dist/confluent/tools/handlers/connect/resume-connector-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/connect/resume-connector-handler.js +35 -0
- package/dist/confluent/tools/handlers/connect/resume-connector-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/connect/update-connector-config-handler.d.ts +9 -0
- package/dist/confluent/tools/handlers/connect/update-connector-config-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/connect/update-connector-config-handler.js +44 -0
- package/dist/confluent/tools/handlers/connect/update-connector-config-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.d.ts +58 -0
- package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.js +135 -0
- package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.d.ts +18 -0
- package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.js +235 -0
- package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/docs/search-product-docs-handler.d.ts +14 -0
- package/dist/confluent/tools/handlers/docs/search-product-docs-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/docs/search-product-docs-handler.js +286 -0
- package/dist/confluent/tools/handlers/docs/search-product-docs-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts +11 -12
- package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/environments/list-environments-handler.js +11 -14
- package/dist/confluent/tools/handlers/environments/list-environments-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/environments/read-environment-handler.d.ts +5 -6
- package/dist/confluent/tools/handlers/environments/read-environment-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/environments/read-environment-handler.js +6 -9
- package/dist/confluent/tools/handlers/environments/read-environment-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts +32 -11
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js +22 -16
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js +34 -30
- package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/flink-catalog-tool-handler.d.ts +14 -0
- package/dist/confluent/tools/handlers/flink/catalog/flink-catalog-tool-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/flink-catalog-tool-handler.js +15 -0
- package/dist/confluent/tools/handlers/flink/catalog/flink-catalog-tool-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js +34 -30
- package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js +21 -24
- package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js +21 -24
- package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js +22 -33
- package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.js +18 -23
- package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.js +7 -13
- package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js +7 -13
- package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js +8 -15
- package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.d.ts +2 -2
- package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.d.ts +7 -7
- package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js +11 -17
- package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts +15 -2
- package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/flink-sql-helper.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/flink-tool-handler.d.ts +22 -0
- package/dist/confluent/tools/handlers/flink/flink-tool-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/flink-tool-handler.js +32 -0
- package/dist/confluent/tools/handlers/flink/flink-tool-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js +7 -13
- package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js +9 -17
- package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.js +7 -13
- package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/alter-topic-config.d.ts +5 -6
- package/dist/confluent/tools/handlers/kafka/alter-topic-config.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/kafka/alter-topic-config.js +22 -20
- package/dist/confluent/tools/handlers/kafka/alter-topic-config.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.d.ts +216 -30
- package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js +797 -70
- package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/consumer-group-enums.d.ts +48 -0
- package/dist/confluent/tools/handlers/kafka/consumer-group-enums.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/kafka/consumer-group-enums.js +84 -0
- package/dist/confluent/tools/handlers/kafka/consumer-group-enums.js.map +1 -0
- package/dist/confluent/tools/handlers/kafka/consumer-group-helpers.d.ts +54 -0
- package/dist/confluent/tools/handlers/kafka/consumer-group-helpers.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/kafka/consumer-group-helpers.js +89 -0
- package/dist/confluent/tools/handlers/kafka/consumer-group-helpers.js.map +1 -0
- package/dist/confluent/tools/handlers/kafka/create-topics-handler.d.ts +5 -5
- package/dist/confluent/tools/handlers/kafka/create-topics-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/kafka/create-topics-handler.js +52 -15
- package/dist/confluent/tools/handlers/kafka/create-topics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/delete-topics-handler.d.ts +5 -5
- package/dist/confluent/tools/handlers/kafka/delete-topics-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js +26 -8
- package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/describe-consumer-group-handler.d.ts +64 -0
- package/dist/confluent/tools/handlers/kafka/describe-consumer-group-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/kafka/describe-consumer-group-handler.js +140 -0
- package/dist/confluent/tools/handlers/kafka/describe-consumer-group-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/kafka/get-consumer-group-lag-handler.d.ts +73 -0
- package/dist/confluent/tools/handlers/kafka/get-consumer-group-lag-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/kafka/get-consumer-group-lag-handler.js +337 -0
- package/dist/confluent/tools/handlers/kafka/get-consumer-group-lag-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/kafka/get-partition-offsets-handler.d.ts +43 -0
- package/dist/confluent/tools/handlers/kafka/get-partition-offsets-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/kafka/get-partition-offsets-handler.js +123 -0
- package/dist/confluent/tools/handlers/kafka/get-partition-offsets-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/kafka/get-topic-config.d.ts +5 -6
- package/dist/confluent/tools/handlers/kafka/get-topic-config.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/kafka/get-topic-config.js +22 -20
- package/dist/confluent/tools/handlers/kafka/get-topic-config.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/list-consumer-groups-handler.d.ts +45 -0
- package/dist/confluent/tools/handlers/kafka/list-consumer-groups-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/kafka/list-consumer-groups-handler.js +86 -0
- package/dist/confluent/tools/handlers/kafka/list-consumer-groups-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/kafka/list-topics-handler.d.ts +5 -5
- package/dist/confluent/tools/handlers/kafka/list-topics-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/kafka/list-topics-handler.js +25 -10
- package/dist/confluent/tools/handlers/kafka/list-topics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/partition-watermarks.d.ts +54 -0
- package/dist/confluent/tools/handlers/kafka/partition-watermarks.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/kafka/partition-watermarks.js +56 -0
- package/dist/confluent/tools/handlers/kafka/partition-watermarks.js.map +1 -0
- package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.d.ts +8 -8
- package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js +57 -46
- package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/topic-metadata.d.ts +18 -0
- package/dist/confluent/tools/handlers/kafka/topic-metadata.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/kafka/topic-metadata.js +18 -0
- package/dist/confluent/tools/handlers/kafka/topic-metadata.js.map +1 -0
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts +6 -6
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js +6 -9
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts +24 -6
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js +88 -53
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/organizations/list-organizations-handler.d.ts +50 -0
- package/dist/confluent/tools/handlers/organizations/list-organizations-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/organizations/list-organizations-handler.js +116 -0
- package/dist/confluent/tools/handlers/organizations/list-organizations-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts +5 -5
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.js +13 -8
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts +5 -5
- package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/schema/list-schemas-handler.js +13 -7
- package/dist/confluent/tools/handlers/schema/list-schemas-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.d.ts +6 -6
- package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.js +6 -9
- package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.d.ts +6 -6
- package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.js +6 -9
- package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.js +17 -13
- package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.js +6 -12
- package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.js +7 -13
- package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.js +6 -12
- package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.js +5 -9
- package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.js +18 -21
- package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.d.ts +26 -0
- package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.js +28 -0
- package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.js +17 -13
- package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.js +6 -12
- package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.js +7 -13
- package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.js +6 -12
- package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.js +5 -9
- package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.js.map +1 -1
- package/dist/confluent/tools/tool-availability.d.ts +91 -0
- package/dist/confluent/tools/tool-availability.d.ts.map +1 -0
- package/dist/confluent/tools/tool-availability.js +130 -0
- package/dist/confluent/tools/tool-availability.js.map +1 -0
- package/dist/confluent/tools/tool-name.d.ts +20 -2
- package/dist/confluent/tools/tool-name.d.ts.map +1 -1
- package/dist/confluent/tools/tool-name.js +19 -1
- package/dist/confluent/tools/tool-name.js.map +1 -1
- package/dist/confluent/tools/tool-registry.d.ts +17 -0
- package/dist/confluent/tools/tool-registry.d.ts.map +1 -0
- package/dist/confluent/tools/{tool-factory.js → tool-registry.js} +66 -22
- package/dist/confluent/tools/tool-registry.js.map +1 -0
- package/dist/env-schema.d.ts +6 -7
- package/dist/env-schema.d.ts.map +1 -1
- package/dist/env-schema.js +30 -44
- package/dist/env-schema.js.map +1 -1
- package/dist/env.d.ts +17 -7
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +16 -6
- package/dist/env.js.map +1 -1
- package/dist/index.d.ts +74 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +302 -166
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +21 -20
- package/dist/logger.js.map +1 -1
- package/dist/mcp/server.d.ts +29 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +53 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/transports/auth.d.ts +20 -4
- package/dist/mcp/transports/auth.d.ts.map +1 -1
- package/dist/mcp/transports/auth.js +27 -7
- package/dist/mcp/transports/auth.js.map +1 -1
- package/dist/mcp/transports/http.d.ts +8 -2
- package/dist/mcp/transports/http.d.ts.map +1 -1
- package/dist/mcp/transports/http.js +57 -42
- package/dist/mcp/transports/http.js.map +1 -1
- package/dist/mcp/transports/manager.d.ts +23 -9
- package/dist/mcp/transports/manager.d.ts.map +1 -1
- package/dist/mcp/transports/manager.js +27 -24
- package/dist/mcp/transports/manager.js.map +1 -1
- package/dist/mcp/transports/server.d.ts +1 -1
- package/dist/mcp/transports/server.d.ts.map +1 -1
- package/dist/mcp/transports/server.js +17 -5
- package/dist/mcp/transports/server.js.map +1 -1
- package/dist/mcp/transports/session-registry.d.ts +33 -0
- package/dist/mcp/transports/session-registry.d.ts.map +1 -0
- package/dist/mcp/transports/session-registry.js +65 -0
- package/dist/mcp/transports/session-registry.js.map +1 -0
- package/dist/mcp/transports/sse.d.ts +13 -2
- package/dist/mcp/transports/sse.d.ts.map +1 -1
- package/dist/mcp/transports/sse.js +58 -46
- package/dist/mcp/transports/sse.js.map +1 -1
- package/dist/server-runtime.d.ts +28 -0
- package/dist/server-runtime.d.ts.map +1 -0
- package/dist/server-runtime.js +73 -0
- package/dist/server-runtime.js.map +1 -0
- package/package.json +26 -9
- package/dist/confluent/helpers.d.ts +0 -11
- package/dist/confluent/helpers.d.ts.map +0 -1
- package/dist/confluent/helpers.js +0 -17
- package/dist/confluent/helpers.js.map +0 -1
- package/dist/confluent/tools/handlers/connect/read-connectors-handler.d.ts +0 -11
- package/dist/confluent/tools/handlers/connect/read-connectors-handler.d.ts.map +0 -1
- package/dist/confluent/tools/handlers/connect/read-connectors-handler.js +0 -59
- package/dist/confluent/tools/handlers/connect/read-connectors-handler.js.map +0 -1
- package/dist/confluent/tools/tool-factory.d.ts +0 -9
- package/dist/confluent/tools/tool-factory.d.ts.map +0 -1
- package/dist/confluent/tools/tool-factory.js.map +0 -1
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { nodeFetch } from "../../confluent/node-deps.js";
|
|
2
|
+
import { CONTROL_PLANE_TOKEN_LIFETIME_MS, DATA_PLANE_TOKEN_LIFETIME_MS, REFRESH_TOKEN_ABSOLUTE_LIFETIME_MS, REFRESH_TOKEN_IDLE_LIFETIME_MS, } from "../../confluent/oauth/token-lifetimes.js";
|
|
3
|
+
import { logger } from "../../logger.js";
|
|
4
|
+
/** Per-request timeout bounding each Auth0/Confluent HTTP call. */
|
|
5
|
+
const REQUEST_TIMEOUT_MS = 30_000;
|
|
6
|
+
/**
|
|
7
|
+
* POSTs to the OAuth/Confluent endpoint and returns the decoded JSON body,
|
|
8
|
+
* throwing a labeled error when the response is not OK. Each request is bounded
|
|
9
|
+
* by {@link REQUEST_TIMEOUT_MS} so a hung Auth0/Confluent call can't stall the
|
|
10
|
+
* refresh loop.
|
|
11
|
+
*/
|
|
12
|
+
async function postJson(url, init, operation) {
|
|
13
|
+
let response;
|
|
14
|
+
try {
|
|
15
|
+
response = await nodeFetch.fetch(url, {
|
|
16
|
+
...init,
|
|
17
|
+
signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
if (err instanceof Error && err.name === "TimeoutError") {
|
|
22
|
+
logger.error(`${operation} timed out`);
|
|
23
|
+
throw new Error(`${operation} timed out after ${REQUEST_TIMEOUT_MS}ms`);
|
|
24
|
+
}
|
|
25
|
+
throw err;
|
|
26
|
+
}
|
|
27
|
+
if (!response.ok) {
|
|
28
|
+
const errorText = await response.text();
|
|
29
|
+
logger.error({ status: response.status }, `${operation} failed`);
|
|
30
|
+
throw new Error(`${operation} failed (${response.status}): ${errorText}`);
|
|
31
|
+
}
|
|
32
|
+
return (await response.json());
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Exchanges an authorization code for Auth0 tokens (ID token + refresh token).
|
|
36
|
+
* This is the first step in the Confluent token chain.
|
|
37
|
+
*/
|
|
38
|
+
export async function exchangeAuthCodeForTokens(auth0Config, authCode, codeVerifier) {
|
|
39
|
+
const body = new URLSearchParams({
|
|
40
|
+
grant_type: "authorization_code",
|
|
41
|
+
client_id: auth0Config.clientId,
|
|
42
|
+
code: authCode,
|
|
43
|
+
code_verifier: codeVerifier,
|
|
44
|
+
redirect_uri: auth0Config.callbackUrl,
|
|
45
|
+
});
|
|
46
|
+
const response = await postJson(`https://${auth0Config.domain}/oauth/token`, {
|
|
47
|
+
method: "POST",
|
|
48
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
49
|
+
body: body.toString(),
|
|
50
|
+
}, "Auth0 token exchange");
|
|
51
|
+
if (!response.id_token) {
|
|
52
|
+
throw new Error("Auth0 token exchange: missing id_token");
|
|
53
|
+
}
|
|
54
|
+
if (!response.refresh_token) {
|
|
55
|
+
throw new Error("Auth0 token exchange: missing refresh_token");
|
|
56
|
+
}
|
|
57
|
+
return response;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Exchanges an Auth0 ID token for a Confluent Cloud control plane token.
|
|
61
|
+
* POST {apiUrl}/api/sessions with the ID token in the body.
|
|
62
|
+
*/
|
|
63
|
+
export async function exchangeIdTokenForControlPlaneToken(apiUrl, idToken) {
|
|
64
|
+
const response = await postJson(`${apiUrl}/api/sessions`, {
|
|
65
|
+
method: "POST",
|
|
66
|
+
headers: { "Content-Type": "application/json" },
|
|
67
|
+
body: JSON.stringify({ id_token: idToken }),
|
|
68
|
+
}, "Control plane token exchange");
|
|
69
|
+
if (!response.token) {
|
|
70
|
+
throw new Error("Control plane token exchange: missing token");
|
|
71
|
+
}
|
|
72
|
+
return response;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Exchanges a control plane token for a Confluent Cloud data plane token.
|
|
76
|
+
* POST {apiUrl}/api/access_tokens with the CP token as Bearer auth.
|
|
77
|
+
*/
|
|
78
|
+
export async function exchangeControlPlaneForDataPlaneToken(apiUrl, controlPlaneToken) {
|
|
79
|
+
const response = await postJson(`${apiUrl}/api/access_tokens`, {
|
|
80
|
+
method: "POST",
|
|
81
|
+
headers: {
|
|
82
|
+
"Content-Type": "application/json",
|
|
83
|
+
Authorization: `Bearer ${controlPlaneToken}`,
|
|
84
|
+
},
|
|
85
|
+
body: JSON.stringify({}),
|
|
86
|
+
}, "Data plane token exchange");
|
|
87
|
+
if (!response.token) {
|
|
88
|
+
throw new Error("Data plane token exchange: missing token");
|
|
89
|
+
}
|
|
90
|
+
return response;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Exchanges a refresh token for a new Auth0 token set (ID token + rotated
|
|
94
|
+
* refresh token). This is a single-use destructive operation: on success the
|
|
95
|
+
* old refresh token is invalidated by Auth0. Callers that then derive CP/DP
|
|
96
|
+
* tokens should persist the new refresh token BEFORE the CP/DP calls so a
|
|
97
|
+
* failure there doesn't lose the rotated token.
|
|
98
|
+
*/
|
|
99
|
+
export async function exchangeRefreshTokenForAuth0Tokens(auth0Config, refreshToken) {
|
|
100
|
+
const body = new URLSearchParams({
|
|
101
|
+
grant_type: "refresh_token",
|
|
102
|
+
client_id: auth0Config.clientId,
|
|
103
|
+
refresh_token: refreshToken,
|
|
104
|
+
});
|
|
105
|
+
const response = await postJson(`https://${auth0Config.domain}/oauth/token`, {
|
|
106
|
+
method: "POST",
|
|
107
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
108
|
+
body: body.toString(),
|
|
109
|
+
}, "Auth0 token refresh");
|
|
110
|
+
if (!response.id_token) {
|
|
111
|
+
throw new Error("Auth0 token refresh: missing id_token");
|
|
112
|
+
}
|
|
113
|
+
if (!response.refresh_token) {
|
|
114
|
+
throw new Error("Auth0 token refresh: missing refresh_token");
|
|
115
|
+
}
|
|
116
|
+
return response;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Runs the full token chain from an authorization code.
|
|
120
|
+
* auth code → ID token + refresh token → control plane → data plane
|
|
121
|
+
*
|
|
122
|
+
* Sets both absolute (8hr) and idle (4hr) refresh token expiry.
|
|
123
|
+
*/
|
|
124
|
+
export async function executeFullTokenChain(auth0Config, authCode, codeVerifier) {
|
|
125
|
+
const auth0Response = await exchangeAuthCodeForTokens(auth0Config, authCode, codeVerifier);
|
|
126
|
+
const cpResponse = await exchangeIdTokenForControlPlaneToken(auth0Config.apiUrl, auth0Response.id_token);
|
|
127
|
+
const dpResponse = await exchangeControlPlaneForDataPlaneToken(auth0Config.apiUrl, cpResponse.token);
|
|
128
|
+
const now = Date.now();
|
|
129
|
+
return {
|
|
130
|
+
refreshToken: auth0Response.refresh_token,
|
|
131
|
+
refreshTokenAbsoluteExpiresAt: now + REFRESH_TOKEN_ABSOLUTE_LIFETIME_MS,
|
|
132
|
+
refreshTokenIdleExpiresAt: now + REFRESH_TOKEN_IDLE_LIFETIME_MS,
|
|
133
|
+
controlPlaneToken: cpResponse.token,
|
|
134
|
+
controlPlaneExpiresAt: now + CONTROL_PLANE_TOKEN_LIFETIME_MS,
|
|
135
|
+
dataPlaneToken: dpResponse.token,
|
|
136
|
+
dataPlaneExpiresAt: now + DATA_PLANE_TOKEN_LIFETIME_MS,
|
|
137
|
+
resourceId: cpResponse.user?.resource_id,
|
|
138
|
+
email: cpResponse.user?.email,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=token-chain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-chain.js","sourceRoot":"","sources":["../../../src/confluent/oauth/token-chain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** 5 minutes in milliseconds — control plane token lifetime */
|
|
2
|
+
export declare const CONTROL_PLANE_TOKEN_LIFETIME_MS: number;
|
|
3
|
+
/** 10 minutes in milliseconds — data plane token lifetime */
|
|
4
|
+
export declare const DATA_PLANE_TOKEN_LIFETIME_MS: number;
|
|
5
|
+
/** 8 hours in milliseconds — refresh token absolute lifetime from original login */
|
|
6
|
+
export declare const REFRESH_TOKEN_ABSOLUTE_LIFETIME_MS: number;
|
|
7
|
+
/** 4 hours in milliseconds — refresh token idle timeout, resets on each rotation */
|
|
8
|
+
export declare const REFRESH_TOKEN_IDLE_LIFETIME_MS: number;
|
|
9
|
+
/** 30 seconds in milliseconds — refresh control plane token this much before expiry */
|
|
10
|
+
export declare const CONTROL_PLANE_REFRESH_WINDOW_MS: number;
|
|
11
|
+
/** Failure count at which the auth context is flagged as permanently failed. */
|
|
12
|
+
export declare const MAX_CONSECUTIVE_TRANSIENT_FAILURES = 50;
|
|
13
|
+
//# sourceMappingURL=token-lifetimes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-lifetimes.d.ts","sourceRoot":"","sources":["../../../src/confluent/oauth/token-lifetimes.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,eAAO,MAAM,+BAA+B,QAAgB,CAAC;AAE7D,6DAA6D;AAC7D,eAAO,MAAM,4BAA4B,QAAiB,CAAC;AAE3D,oFAAoF;AACpF,eAAO,MAAM,kCAAkC,QAAqB,CAAC;AAErE,oFAAoF;AACpF,eAAO,MAAM,8BAA8B,QAAqB,CAAC;AAEjE,uFAAuF;AACvF,eAAO,MAAM,+BAA+B,QAAY,CAAC;AAEzD,gFAAgF;AAChF,eAAO,MAAM,kCAAkC,KAAK,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** 5 minutes in milliseconds — control plane token lifetime */
|
|
2
|
+
export const CONTROL_PLANE_TOKEN_LIFETIME_MS = 5 * 60 * 1000;
|
|
3
|
+
/** 10 minutes in milliseconds — data plane token lifetime */
|
|
4
|
+
export const DATA_PLANE_TOKEN_LIFETIME_MS = 10 * 60 * 1000;
|
|
5
|
+
/** 8 hours in milliseconds — refresh token absolute lifetime from original login */
|
|
6
|
+
export const REFRESH_TOKEN_ABSOLUTE_LIFETIME_MS = 8 * 60 * 60 * 1000;
|
|
7
|
+
/** 4 hours in milliseconds — refresh token idle timeout, resets on each rotation */
|
|
8
|
+
export const REFRESH_TOKEN_IDLE_LIFETIME_MS = 4 * 60 * 60 * 1000;
|
|
9
|
+
/** 30 seconds in milliseconds — refresh control plane token this much before expiry */
|
|
10
|
+
export const CONTROL_PLANE_REFRESH_WINDOW_MS = 30 * 1000;
|
|
11
|
+
/** Failure count at which the auth context is flagged as permanently failed. */
|
|
12
|
+
export const MAX_CONSECUTIVE_TRANSIENT_FAILURES = 50;
|
|
13
|
+
//# sourceMappingURL=token-lifetimes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-lifetimes.js","sourceRoot":"","sources":["../../../src/confluent/oauth/token-lifetimes.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAE7D,6DAA6D;AAC7D,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE3D,oFAAoF;AACpF,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAErE,oFAAoF;AACpF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEjE,uFAAuF;AACvF,MAAM,CAAC,MAAM,+BAA+B,GAAG,EAAE,GAAG,IAAI,CAAC;AAEzD,gFAAgF;AAChF,MAAM,CAAC,MAAM,kCAAkC,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export type Auth0Environment = "devel" | "stag" | "prod";
|
|
2
|
+
export interface Auth0Config {
|
|
3
|
+
clientId: string;
|
|
4
|
+
domain: string;
|
|
5
|
+
apiUrl: string;
|
|
6
|
+
/** Confluent Cloud REST API base URL for this environment (e.g. https://api.confluent.cloud for prod). */
|
|
7
|
+
cloudRestUrl: string;
|
|
8
|
+
callbackUrl: string;
|
|
9
|
+
scopes: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ConfluentTokenSet {
|
|
12
|
+
/** Auth0 refresh token — single-use, rotated each refresh cycle */
|
|
13
|
+
refreshToken: string;
|
|
14
|
+
/** Absolute expiration of the refresh token family (epoch ms). 8hr from original login. */
|
|
15
|
+
refreshTokenAbsoluteExpiresAt: number;
|
|
16
|
+
/** Idle expiration of the current refresh token (epoch ms). 4hr from last rotation. */
|
|
17
|
+
refreshTokenIdleExpiresAt: number;
|
|
18
|
+
/** Confluent Cloud control plane token (Bearer token for api.confluent.cloud) */
|
|
19
|
+
controlPlaneToken: string;
|
|
20
|
+
/** Control plane token expiration (epoch ms). ~5 min TTL. */
|
|
21
|
+
controlPlaneExpiresAt: number;
|
|
22
|
+
/** Confluent Cloud data plane token (Bearer token for cluster-specific endpoints) */
|
|
23
|
+
dataPlaneToken: string;
|
|
24
|
+
/** Data plane token expiration (epoch ms). ~10 min TTL. */
|
|
25
|
+
dataPlaneExpiresAt: number;
|
|
26
|
+
/** Opaque access token returned to MCP clients. Stable across refreshes. */
|
|
27
|
+
accessToken: string;
|
|
28
|
+
}
|
|
29
|
+
export interface OAuthConfig {
|
|
30
|
+
auth: "oauth";
|
|
31
|
+
environment: Auth0Environment;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Response from POST login.confluent.io/oauth/token
|
|
35
|
+
*/
|
|
36
|
+
export interface Auth0TokenResponse {
|
|
37
|
+
id_token: string;
|
|
38
|
+
refresh_token: string;
|
|
39
|
+
access_token: string;
|
|
40
|
+
token_type: string;
|
|
41
|
+
expires_in: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* User identity returned in the body of POST confluent.cloud/api/sessions.
|
|
45
|
+
* Sourced from the JSON response, not from any JWT claim. Fields beyond what
|
|
46
|
+
* we consume are intentionally omitted.
|
|
47
|
+
*/
|
|
48
|
+
export interface UserDetails {
|
|
49
|
+
id?: string;
|
|
50
|
+
email?: string;
|
|
51
|
+
resource_id?: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Response from POST confluent.cloud/api/sessions
|
|
55
|
+
*/
|
|
56
|
+
export interface ControlPlaneTokenResponse {
|
|
57
|
+
token: string;
|
|
58
|
+
expires_at: string;
|
|
59
|
+
user?: UserDetails;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Response from POST confluent.cloud/api/access_tokens
|
|
63
|
+
*/
|
|
64
|
+
export interface DataPlaneTokenResponse {
|
|
65
|
+
token: string;
|
|
66
|
+
expires_at: string;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/confluent/oauth/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,0GAA0G;IAC1G,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,YAAY,EAAE,MAAM,CAAC;IACrB,2FAA2F;IAC3F,6BAA6B,EAAE,MAAM,CAAC;IACtC,uFAAuF;IACvF,yBAAyB,EAAE,MAAM,CAAC;IAElC,iFAAiF;IACjF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6DAA6D;IAC7D,qBAAqB,EAAE,MAAM,CAAC;IAE9B,qFAAqF;IACrF,cAAc,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,kBAAkB,EAAE,MAAM,CAAC;IAE3B,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,gBAAgB,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/confluent/oauth/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview OAuth (bearer-auth) client manager. Wires Confluent Cloud
|
|
3
|
+
* REST surfaces, native Kafka admin/producer/consumer (via `@confluentinc/kafka-javascript` +
|
|
4
|
+
* SASL/OAUTHBEARER), and the Schema Registry SDK to bearer tokens supplied
|
|
5
|
+
* by an {@link OAuthHolder}. REST endpoint URLs and Kafka bootstrap servers
|
|
6
|
+
* are resolved at call time from the CCloud environment + cluster IDs the
|
|
7
|
+
* agent supplies as tool args.
|
|
8
|
+
*
|
|
9
|
+
* Native Kafka clients are built fresh per call; handlers wrap usage in
|
|
10
|
+
* `try { ... } finally { await disposeIfOAuth(...) }` for caller-owned
|
|
11
|
+
* disposal. SASL/OAUTHBEARER is configured via librdkafka's synchronous
|
|
12
|
+
* token-refresh callback (no kafkaJS-compat async-provider race), so no
|
|
13
|
+
* warmup workaround is needed.
|
|
14
|
+
*
|
|
15
|
+
* Schema Registry serialization is supported through `produce-message` and
|
|
16
|
+
* `consume-messages`: the manager's `getSchemaRegistrySdkClient` auto-resolves
|
|
17
|
+
* the SR cluster id from the environment id supplied by the agent (single SR
|
|
18
|
+
* per environment is the CCloud invariant) and builds a bearer-authenticated
|
|
19
|
+
* SDK client per call.
|
|
20
|
+
*/
|
|
21
|
+
import type { KafkaJS } from "@confluentinc/kafka-javascript";
|
|
22
|
+
import { SchemaRegistryClient } from "@confluentinc/schemaregistry";
|
|
23
|
+
import { BaseClientManager, type ConsumerBuildOptions } from "../confluent/base-client-manager.js";
|
|
24
|
+
import type { ConfluentRestClient } from "../confluent/client-manager.js";
|
|
25
|
+
import { OAuthHolder } from "../confluent/oauth/oauth-holder.js";
|
|
26
|
+
import type { Auth0Environment } from "../confluent/oauth/types.js";
|
|
27
|
+
/**
|
|
28
|
+
* Bearer-auth client manager. Wires every REST surface to the OAuth holder's
|
|
29
|
+
* tokens — control plane (cloud / tableflow / telemetry) reads
|
|
30
|
+
* {@link OAuthHolder.getControlPlaneToken}; data plane (flink / schema-registry
|
|
31
|
+
* REST / kafka REST) reads {@link OAuthHolder.getDataPlaneToken}. Cloud REST URL
|
|
32
|
+
* is auto-derived from the CCloud env. Native Kafka clients (admin, producer,
|
|
33
|
+
* consumer) are built fresh per call against bootstrap endpoints resolved
|
|
34
|
+
* via the cmk REST API; SASL/OAUTHBEARER is configured via librdkafka's
|
|
35
|
+
* synchronous token-refresh callback to avoid the kafkaJS-compat
|
|
36
|
+
* async-provider race that previously required a warmup workaround.
|
|
37
|
+
*/
|
|
38
|
+
export declare class OAuthClientManager extends BaseClientManager {
|
|
39
|
+
private readonly holder;
|
|
40
|
+
private readonly kafkaDebug;
|
|
41
|
+
/**
|
|
42
|
+
* @param kafkaDebug Optional librdkafka `debug` contexts string, threaded
|
|
43
|
+
* through to every native Kafka client built by this manager. Sourced
|
|
44
|
+
* from `connections.<name>.kafka_debug` on the OAuth YAML arm; used as a
|
|
45
|
+
* diagnostic knob when a SASL/OAUTHBEARER handshake misbehaves.
|
|
46
|
+
*/
|
|
47
|
+
constructor(holder: OAuthHolder, env: Auth0Environment, kafkaDebug?: string);
|
|
48
|
+
/** @inheritdoc */
|
|
49
|
+
getSchemaRegistrySdkClient(envId?: string): Promise<SchemaRegistryClient>;
|
|
50
|
+
/** @inheritdoc */
|
|
51
|
+
getConfluentCloudKafkaRestClient(clusterId?: string, envId?: string): Promise<ConfluentRestClient>;
|
|
52
|
+
/** @inheritdoc */
|
|
53
|
+
getSchemaRegistryRestClient(envId?: string): Promise<ConfluentRestClient>;
|
|
54
|
+
/** @inheritdoc */
|
|
55
|
+
getKafkaAdminClient(clusterId?: string, envId?: string): Promise<KafkaJS.Admin>;
|
|
56
|
+
/** @inheritdoc */
|
|
57
|
+
getKafkaProducer(clusterId?: string, envId?: string): Promise<KafkaJS.Producer>;
|
|
58
|
+
/** @inheritdoc */
|
|
59
|
+
buildKafkaConsumer(opts?: ConsumerBuildOptions): Promise<KafkaJS.Consumer>;
|
|
60
|
+
/** @inheritdoc */
|
|
61
|
+
disconnect(): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Returns the current data-plane token, throwing when none is available.
|
|
64
|
+
* Used by every OAuth-side client accessor to fail fast before
|
|
65
|
+
* constructing a client with an empty bearer.
|
|
66
|
+
*
|
|
67
|
+
* The MCP tool-call gate calls `holder.ensureLoggedIn()` before any
|
|
68
|
+
* handler that needs Confluent access, so by the time this method runs
|
|
69
|
+
* login has already completed. A missing DPAT here means the holder was
|
|
70
|
+
* cleared mid-call (shutdown raced with a tool call) or a non-transient
|
|
71
|
+
* refresh error has invalidated the token between the gate check and
|
|
72
|
+
* the client construction — both rare and surface a clear message.
|
|
73
|
+
*/
|
|
74
|
+
private requireDataPlaneToken;
|
|
75
|
+
private requireClusterArgs;
|
|
76
|
+
private buildOAuthKafkaClient;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=oauth-client-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-client-manager.d.ts","sourceRoot":"","sources":["../../src/confluent/oauth-client-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAgB,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EACL,iBAAiB,EACjB,KAAK,oBAAoB,EAC1B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAa5E,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAqBtE;;;;;;;;;;GAUG;AACH,qBAAa,kBAAmB,SAAQ,iBAAiB;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAEhD;;;;;OAKG;gBACS,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,gBAAgB,EAAE,UAAU,CAAC,EAAE,MAAM;IA8B3E,kBAAkB;IACZ,0BAA0B,CAC9B,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,oBAAoB,CAAC;IA0BhC,kBAAkB;IACZ,gCAAgC,CACpC,SAAS,CAAC,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC;IAoB/B,kBAAkB;IACZ,2BAA2B,CAC/B,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC;IA0B/B,kBAAkB;IACZ,mBAAmB,CACvB,SAAS,CAAC,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;IAuBzB,kBAAkB;IACZ,gBAAgB,CACpB,SAAS,CAAC,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;IAQ5B,kBAAkB;IACZ,kBAAkB,CACtB,IAAI,CAAC,EAAE,oBAAoB,GAC1B,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;IAe5B,kBAAkB;IACZ,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,kBAAkB;YAiBZ,qBAAqB;CAuDpC"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview OAuth (bearer-auth) client manager. Wires Confluent Cloud
|
|
3
|
+
* REST surfaces, native Kafka admin/producer/consumer (via `@confluentinc/kafka-javascript` +
|
|
4
|
+
* SASL/OAUTHBEARER), and the Schema Registry SDK to bearer tokens supplied
|
|
5
|
+
* by an {@link OAuthHolder}. REST endpoint URLs and Kafka bootstrap servers
|
|
6
|
+
* are resolved at call time from the CCloud environment + cluster IDs the
|
|
7
|
+
* agent supplies as tool args.
|
|
8
|
+
*
|
|
9
|
+
* Native Kafka clients are built fresh per call; handlers wrap usage in
|
|
10
|
+
* `try { ... } finally { await disposeIfOAuth(...) }` for caller-owned
|
|
11
|
+
* disposal. SASL/OAUTHBEARER is configured via librdkafka's synchronous
|
|
12
|
+
* token-refresh callback (no kafkaJS-compat async-provider race), so no
|
|
13
|
+
* warmup workaround is needed.
|
|
14
|
+
*
|
|
15
|
+
* Schema Registry serialization is supported through `produce-message` and
|
|
16
|
+
* `consume-messages`: the manager's `getSchemaRegistrySdkClient` auto-resolves
|
|
17
|
+
* the SR cluster id from the environment id supplied by the agent (single SR
|
|
18
|
+
* per environment is the CCloud invariant) and builds a bearer-authenticated
|
|
19
|
+
* SDK client per call.
|
|
20
|
+
*/
|
|
21
|
+
import { SchemaRegistryClient } from "@confluentinc/schemaregistry";
|
|
22
|
+
import { BaseClientManager, } from "../confluent/base-client-manager.js";
|
|
23
|
+
import { createAuthMiddleware, } from "../confluent/middleware.js";
|
|
24
|
+
import { kafkaDeps } from "../confluent/node-deps.js";
|
|
25
|
+
import { resolveKafkaBootstrap, resolveKafkaRestEndpoint, resolveSchemaRegistryClusterId, resolveSchemaRegistryEndpoint, } from "../confluent/oauth-resource-resolvers.js";
|
|
26
|
+
import { getCloudRestUrlForEnv } from "../confluent/oauth/auth0-config.js";
|
|
27
|
+
import { kafkaLogger } from "../logger.js";
|
|
28
|
+
import createClient from "openapi-fetch";
|
|
29
|
+
import { DATA_PLANE_TOKEN_LIFETIME_MS } from "./oauth/token-lifetimes.js";
|
|
30
|
+
/**
|
|
31
|
+
* Bearer-auth client manager. Wires every REST surface to the OAuth holder's
|
|
32
|
+
* tokens — control plane (cloud / tableflow / telemetry) reads
|
|
33
|
+
* {@link OAuthHolder.getControlPlaneToken}; data plane (flink / schema-registry
|
|
34
|
+
* REST / kafka REST) reads {@link OAuthHolder.getDataPlaneToken}. Cloud REST URL
|
|
35
|
+
* is auto-derived from the CCloud env. Native Kafka clients (admin, producer,
|
|
36
|
+
* consumer) are built fresh per call against bootstrap endpoints resolved
|
|
37
|
+
* via the cmk REST API; SASL/OAUTHBEARER is configured via librdkafka's
|
|
38
|
+
* synchronous token-refresh callback to avoid the kafkaJS-compat
|
|
39
|
+
* async-provider race that previously required a warmup workaround.
|
|
40
|
+
*/
|
|
41
|
+
export class OAuthClientManager extends BaseClientManager {
|
|
42
|
+
holder;
|
|
43
|
+
kafkaDebug;
|
|
44
|
+
/**
|
|
45
|
+
* @param kafkaDebug Optional librdkafka `debug` contexts string, threaded
|
|
46
|
+
* through to every native Kafka client built by this manager. Sourced
|
|
47
|
+
* from `connections.<name>.kafka_debug` on the OAuth YAML arm; used as a
|
|
48
|
+
* diagnostic knob when a SASL/OAUTHBEARER handshake misbehaves.
|
|
49
|
+
*/
|
|
50
|
+
constructor(holder, env, kafkaDebug) {
|
|
51
|
+
const cpToken = () => holder.getControlPlaneToken();
|
|
52
|
+
const dpToken = () => holder.getDataPlaneToken();
|
|
53
|
+
super({
|
|
54
|
+
endpoints: {
|
|
55
|
+
// BaseClientManager re-uses `cloud` for the Tableflow base URL too.
|
|
56
|
+
cloud: getCloudRestUrlForEnv(env),
|
|
57
|
+
flink: undefined,
|
|
58
|
+
schemaRegistry: undefined,
|
|
59
|
+
kafka: undefined,
|
|
60
|
+
telemetry: undefined,
|
|
61
|
+
},
|
|
62
|
+
auth: {
|
|
63
|
+
cloud: { type: "oauth", getToken: cpToken },
|
|
64
|
+
tableflow: { type: "oauth", getToken: cpToken },
|
|
65
|
+
telemetry: { type: "oauth", getToken: cpToken },
|
|
66
|
+
flink: { type: "oauth", getToken: dpToken },
|
|
67
|
+
schemaRegistry: { type: "oauth", getToken: dpToken },
|
|
68
|
+
kafka: { type: "oauth", getToken: dpToken },
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
this.holder = holder;
|
|
72
|
+
this.kafkaDebug = kafkaDebug;
|
|
73
|
+
// Eager construction: surface the cloud REST client at startup so a bad
|
|
74
|
+
// endpoint or middleware wiring fails fast rather than at first tool call.
|
|
75
|
+
this.getConfluentCloudRestClient();
|
|
76
|
+
}
|
|
77
|
+
/** @inheritdoc */
|
|
78
|
+
async getSchemaRegistrySdkClient(envId) {
|
|
79
|
+
// The SR SDK captures `Authorization: Bearer <token>` in its axios
|
|
80
|
+
// `createAxiosDefaults` at construction time, so a build during initial
|
|
81
|
+
// login or a broken refresh would freeze an empty bearer into every
|
|
82
|
+
// subsequent request — fail fast here before that can happen.
|
|
83
|
+
const dpat = this.requireDataPlaneToken();
|
|
84
|
+
if (!envId) {
|
|
85
|
+
throw new Error("environment_id is required under OAuth for Schema Registry access. " +
|
|
86
|
+
"Call list-environments to discover available environments.");
|
|
87
|
+
}
|
|
88
|
+
const cloud = this.getConfluentCloudRestClient();
|
|
89
|
+
const lsrc = await resolveSchemaRegistryClusterId(cloud, envId);
|
|
90
|
+
const endpoint = await resolveSchemaRegistryEndpoint(cloud, lsrc, envId);
|
|
91
|
+
return new SchemaRegistryClient({
|
|
92
|
+
baseURLs: [endpoint],
|
|
93
|
+
createAxiosDefaults: {
|
|
94
|
+
headers: {
|
|
95
|
+
Authorization: `Bearer ${dpat}`,
|
|
96
|
+
"target-sr-cluster": lsrc,
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/** @inheritdoc */
|
|
102
|
+
async getConfluentCloudKafkaRestClient(clusterId, envId) {
|
|
103
|
+
this.requireClusterArgs(clusterId, envId);
|
|
104
|
+
// The bearer middleware reads `auth.getToken()` per-request, but failing
|
|
105
|
+
// fast here gives the agent a clear error rather than letting an empty
|
|
106
|
+
// bearer go out on the wire.
|
|
107
|
+
this.requireDataPlaneToken();
|
|
108
|
+
const baseUrl = await resolveKafkaRestEndpoint(this.getConfluentCloudRestClient(), clusterId, envId);
|
|
109
|
+
const auth = {
|
|
110
|
+
type: "oauth",
|
|
111
|
+
getToken: () => this.holder.getDataPlaneToken(),
|
|
112
|
+
};
|
|
113
|
+
const client = createClient({ baseUrl });
|
|
114
|
+
client.use(createAuthMiddleware(auth));
|
|
115
|
+
return client;
|
|
116
|
+
}
|
|
117
|
+
/** @inheritdoc */
|
|
118
|
+
async getSchemaRegistryRestClient(envId) {
|
|
119
|
+
this.requireDataPlaneToken();
|
|
120
|
+
if (!envId) {
|
|
121
|
+
throw new Error("environment_id is required under OAuth for Schema Registry REST access. " +
|
|
122
|
+
"Call list-environments to discover available environments.");
|
|
123
|
+
}
|
|
124
|
+
const cloud = this.getConfluentCloudRestClient();
|
|
125
|
+
const lsrc = await resolveSchemaRegistryClusterId(cloud, envId);
|
|
126
|
+
const baseUrl = await resolveSchemaRegistryEndpoint(cloud, lsrc, envId);
|
|
127
|
+
const auth = {
|
|
128
|
+
type: "oauth",
|
|
129
|
+
getToken: () => this.holder.getDataPlaneToken(),
|
|
130
|
+
};
|
|
131
|
+
const client = createClient({
|
|
132
|
+
baseUrl,
|
|
133
|
+
// The `target-sr-cluster` header pins all requests on this client to
|
|
134
|
+
// the right logical SR cluster — mirrors the SR SDK construction in
|
|
135
|
+
// `getSchemaRegistrySdkClient`.
|
|
136
|
+
headers: { "target-sr-cluster": lsrc },
|
|
137
|
+
});
|
|
138
|
+
client.use(createAuthMiddleware(auth));
|
|
139
|
+
return client;
|
|
140
|
+
}
|
|
141
|
+
/** @inheritdoc */
|
|
142
|
+
async getKafkaAdminClient(clusterId, envId) {
|
|
143
|
+
this.requireClusterArgs(clusterId, envId);
|
|
144
|
+
const kafka = await this.buildOAuthKafkaClient(clusterId, envId);
|
|
145
|
+
const admin = kafka.admin();
|
|
146
|
+
try {
|
|
147
|
+
await admin.connect();
|
|
148
|
+
// Metadata warmup: `admin.connect()` returns before librdkafka has
|
|
149
|
+
// discovered the controller broker. The first non-list operation
|
|
150
|
+
// (createTopics, deleteTopics) needs the controller and times out
|
|
151
|
+
// locally if metadata isn't yet cached. listTopics is a cheap
|
|
152
|
+
// metadata-only roundtrip that primes the broker map; subsequent
|
|
153
|
+
// ops on this admin instance reuse it. Costs ~50-200ms per OAuth
|
|
154
|
+
// admin call; acceptable given clients are per-call by design.
|
|
155
|
+
await admin.listTopics();
|
|
156
|
+
return admin;
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
// Disconnect the half-built admin so we don't leak the broker
|
|
160
|
+
// connection on a failed warmup.
|
|
161
|
+
await admin.disconnect().catch(() => undefined);
|
|
162
|
+
throw err;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/** @inheritdoc */
|
|
166
|
+
async getKafkaProducer(clusterId, envId) {
|
|
167
|
+
this.requireClusterArgs(clusterId, envId);
|
|
168
|
+
const kafka = await this.buildOAuthKafkaClient(clusterId, envId);
|
|
169
|
+
const producer = kafka.producer();
|
|
170
|
+
await producer.connect();
|
|
171
|
+
return producer;
|
|
172
|
+
}
|
|
173
|
+
/** @inheritdoc */
|
|
174
|
+
async buildKafkaConsumer(opts) {
|
|
175
|
+
this.requireClusterArgs(opts?.clusterId, opts?.envId);
|
|
176
|
+
const kafka = await this.buildOAuthKafkaClient(opts.clusterId, opts.envId);
|
|
177
|
+
return kafka.consumer({
|
|
178
|
+
kafkaJS: {
|
|
179
|
+
groupId: opts?.groupId ?? "mcp-confluent",
|
|
180
|
+
autoCommit: false,
|
|
181
|
+
},
|
|
182
|
+
"auto.offset.reset": opts?.offsetReset ?? "earliest",
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
/** @inheritdoc */
|
|
186
|
+
async disconnect() {
|
|
187
|
+
// No state to drain — every Kafka client is caller-owned and disposed
|
|
188
|
+
// by the handler's `finally` block via `disposeIfOAuth`.
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Returns the current data-plane token, throwing when none is available.
|
|
192
|
+
* Used by every OAuth-side client accessor to fail fast before
|
|
193
|
+
* constructing a client with an empty bearer.
|
|
194
|
+
*
|
|
195
|
+
* The MCP tool-call gate calls `holder.ensureLoggedIn()` before any
|
|
196
|
+
* handler that needs Confluent access, so by the time this method runs
|
|
197
|
+
* login has already completed. A missing DPAT here means the holder was
|
|
198
|
+
* cleared mid-call (shutdown raced with a tool call) or a non-transient
|
|
199
|
+
* refresh error has invalidated the token between the gate check and
|
|
200
|
+
* the client construction — both rare and surface a clear message.
|
|
201
|
+
*/
|
|
202
|
+
requireDataPlaneToken() {
|
|
203
|
+
const dpat = this.holder.getDataPlaneToken();
|
|
204
|
+
if (!dpat) {
|
|
205
|
+
throw new Error("No data-plane token available. The OAuth holder may have been " +
|
|
206
|
+
"shut down or an authentication error has invalidated the token.");
|
|
207
|
+
}
|
|
208
|
+
return dpat;
|
|
209
|
+
}
|
|
210
|
+
requireClusterArgs(clusterId, envId) {
|
|
211
|
+
if (clusterId === undefined || envId === undefined) {
|
|
212
|
+
// Defensive check — handlers should validate arg-name shape and throw
|
|
213
|
+
// their own user-facing error via resolveKafkaClusterArgs (native, snake_case)
|
|
214
|
+
// or resolveKafkaRestArgs (REST, camelCase) before reaching the manager.
|
|
215
|
+
// This message fires only when a caller bypasses those resolvers, so
|
|
216
|
+
// it's worded generically rather than tied to either arg-name convention.
|
|
217
|
+
throw new Error("OAuth client construction requires a cluster id and environment id. " +
|
|
218
|
+
"Discover via list-environments and list-clusters; pass the cluster's `id` and `spec.environment.id`.");
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
async buildOAuthKafkaClient(clusterId, envId) {
|
|
222
|
+
// Ensure the DPAT is populated before librdkafka starts the SASL
|
|
223
|
+
// handshake — the synchronous `oauthbearer_token_refresh_cb` (configured
|
|
224
|
+
// below) reads it on demand, so an empty token here would surface as a
|
|
225
|
+
// broker-side auth failure with no useful diagnostic.
|
|
226
|
+
this.requireDataPlaneToken();
|
|
227
|
+
// librdkafka debug logs — gated by `kafka_debug` on the OAuth YAML arm so
|
|
228
|
+
// they don't pollute normal server stderr. Set
|
|
229
|
+
// `connections.<name>.kafka_debug: "security,broker,protocol"` (or "all")
|
|
230
|
+
// to see the full SASL/OAUTHBEARER handshake and broker traffic.
|
|
231
|
+
const debug = this.kafkaDebug;
|
|
232
|
+
const bootstrap = await resolveKafkaBootstrap(this.getConfluentCloudRestClient(), clusterId, envId);
|
|
233
|
+
const config = {
|
|
234
|
+
"bootstrap.servers": bootstrap,
|
|
235
|
+
"security.protocol": "sasl_ssl",
|
|
236
|
+
"sasl.mechanisms": "OAUTHBEARER",
|
|
237
|
+
// Synchronous librdkafka-native refresh callback. Reads the holder's
|
|
238
|
+
// current DPAT and pushes it into librdkafka via postProcessTokenRefresh
|
|
239
|
+
// inline — no async, no microtask race with the SASL state machine.
|
|
240
|
+
oauthbearer_token_refresh_cb: (_oauthbearerConfig, postProcessTokenRefresh) => {
|
|
241
|
+
const dpat = this.holder.getDataPlaneToken();
|
|
242
|
+
if (!dpat) {
|
|
243
|
+
postProcessTokenRefresh(new Error("Data-plane token unavailable for SASL refresh"));
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
postProcessTokenRefresh(null, {
|
|
247
|
+
tokenValue: dpat,
|
|
248
|
+
lifetime: Date.now() + DATA_PLANE_TOKEN_LIFETIME_MS,
|
|
249
|
+
principal: clusterId,
|
|
250
|
+
extensions: { logicalCluster: clusterId },
|
|
251
|
+
});
|
|
252
|
+
},
|
|
253
|
+
...(debug ? { debug } : {}),
|
|
254
|
+
};
|
|
255
|
+
// Critical for stdio MCP: route KafkaJS / librdkafka logs through pino
|
|
256
|
+
// (which writes to stderr). Without this, the default logger prints to
|
|
257
|
+
// stdout in pretty format, corrupting the stdio JSON-RPC stream.
|
|
258
|
+
return new kafkaDeps.Kafka({
|
|
259
|
+
...config,
|
|
260
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
261
|
+
kafkaJS: { logger: kafkaLogger },
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=oauth-client-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-client-manager.js","sourceRoot":"","sources":["../../src/confluent/oauth-client-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ConfluentRestClient } from "../confluent/client-manager.js";
|
|
2
|
+
export declare function resolveKafkaBootstrap(cloudClient: ConfluentRestClient, clusterId: string, envId: string): Promise<string>;
|
|
3
|
+
export declare function resolveKafkaRestEndpoint(cloudClient: ConfluentRestClient, clusterId: string, envId: string): Promise<string>;
|
|
4
|
+
export declare function resolveSchemaRegistryEndpoint(cloudClient: ConfluentRestClient, clusterId: string, envId: string): Promise<string>;
|
|
5
|
+
export declare function resolveSchemaRegistryClusterId(cloudClient: ConfluentRestClient, envId: string): Promise<string>;
|
|
6
|
+
//# sourceMappingURL=oauth-resource-resolvers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-resource-resolvers.d.ts","sourceRoot":"","sources":["../../src/confluent/oauth-resource-resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,mBAAmB,EAChC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,mBAAmB,EAChC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED,wBAAsB,6BAA6B,CACjD,WAAW,EAAE,mBAAmB,EAChC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED,wBAAsB,8BAA8B,CAClD,WAAW,EAAE,mBAAmB,EAChC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAgCjB"}
|