@confluentinc/mcp-confluent 1.2.1 → 1.3.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 +174 -791
- package/assets/oauth-templates/callback-failure.html +22 -0
- package/assets/oauth-templates/callback-success.html +19 -0
- package/assets/oauth-templates/logo.html +91 -0
- package/assets/oauth-templates/styles.html +49 -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 +473 -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 +396 -0
- package/dist/config/models.d.ts.map +1 -0
- package/dist/config/models.js +401 -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 +100 -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 -94
- package/dist/confluent/client-manager.d.ts.map +1 -1
- package/dist/confluent/client-manager.js +5 -242
- 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 +146 -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 +32 -39
- package/dist/confluent/node-deps.d.ts.map +1 -1
- package/dist/confluent/node-deps.js +42 -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 +5 -0
- package/dist/confluent/oauth/callback-pages.d.ts.map +1 -0
- package/dist/confluent/oauth/callback-pages.js +38 -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 +26 -0
- package/dist/confluent/oauth/pkce-login.d.ts.map +1 -0
- package/dist/confluent/oauth/pkce-login.js +161 -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/telemetry.d.ts +32 -1
- package/dist/confluent/telemetry.d.ts.map +1 -1
- package/dist/confluent/telemetry.js +31 -8
- package/dist/confluent/telemetry.js.map +1 -1
- package/dist/confluent/tools/base-tools.d.ts +108 -34
- package/dist/confluent/tools/base-tools.d.ts.map +1 -1
- package/dist/confluent/tools/base-tools.js +73 -10
- 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 +168 -0
- package/dist/confluent/tools/connection-predicates.d.ts.map +1 -0
- package/dist/confluent/tools/connection-predicates.js +273 -0
- package/dist/confluent/tools/connection-predicates.js.map +1 -0
- package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts +3 -5
- 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 +7 -19
- 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 +4 -5
- 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 +7 -19
- 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 +4 -5
- package/dist/confluent/tools/handlers/catalog/create-topic-tags.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/catalog/create-topic-tags.js +7 -19
- package/dist/confluent/tools/handlers/catalog/create-topic-tags.js.map +1 -1
- package/dist/confluent/tools/handlers/catalog/delete-tag.d.ts +4 -5
- package/dist/confluent/tools/handlers/catalog/delete-tag.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/catalog/delete-tag.js +7 -19
- package/dist/confluent/tools/handlers/catalog/delete-tag.js.map +1 -1
- package/dist/confluent/tools/handlers/catalog/list-tags.d.ts +4 -5
- package/dist/confluent/tools/handlers/catalog/list-tags.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/catalog/list-tags.js +7 -23
- package/dist/confluent/tools/handlers/catalog/list-tags.js.map +1 -1
- package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.d.ts +4 -5
- 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 +7 -19
- 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 +3 -5
- 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 -22
- package/dist/confluent/tools/handlers/clusters/list-clusters-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/connect/connect-tool-handler.d.ts +21 -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 +22 -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 +23 -33
- 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 +12 -26
- package/dist/confluent/tools/handlers/connect/delete-connector-handler.js.map +1 -1
- 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 +17 -28
- package/dist/confluent/tools/handlers/connect/list-connectors-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/connect/read-connectors-handler.d.ts +6 -7
- package/dist/confluent/tools/handlers/connect/read-connectors-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/connect/read-connectors-handler.js +12 -26
- package/dist/confluent/tools/handlers/connect/read-connectors-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.d.ts +57 -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 +122 -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 +17 -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 +234 -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 +13 -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 +285 -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 +3 -5
- package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/environments/list-environments-handler.js +7 -19
- package/dist/confluent/tools/handlers/environments/list-environments-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/environments/read-environment-handler.d.ts +3 -5
- package/dist/confluent/tools/handlers/environments/read-environment-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/environments/read-environment-handler.js +7 -19
- package/dist/confluent/tools/handlers/environments/read-environment-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts +16 -9
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js +18 -12
- 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 +17 -31
- 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 +17 -31
- 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 +14 -28
- 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 +14 -30
- 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 +14 -38
- 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 +20 -32
- 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 +9 -24
- 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 +9 -23
- 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 +11 -25
- 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 +13 -29
- 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 +2 -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 +21 -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 +31 -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 +9 -23
- 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 +11 -25
- 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 +9 -23
- 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 +3 -5
- 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 -29
- 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 +5 -4
- 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 +25 -17
- package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/create-topics-handler.d.ts +3 -4
- 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 +3 -4
- 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/get-topic-config.d.ts +3 -5
- package/dist/confluent/tools/handlers/kafka/get-topic-config.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/kafka/get-topic-config.js +21 -28
- package/dist/confluent/tools/handlers/kafka/get-topic-config.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/list-topics-handler.d.ts +3 -4
- 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/produce-kafka-message-handler.d.ts +3 -4
- 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 +54 -34
- package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts +4 -5
- 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 -8
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts +22 -5
- 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 -52
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/organizations/list-organizations-handler.d.ts +49 -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 +115 -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 +3 -4
- 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 -18
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts +3 -4
- 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 +4 -5
- 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 +7 -19
- 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 +4 -5
- 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 +7 -19
- 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 +16 -22
- 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 +8 -24
- 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 +9 -25
- 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 +8 -24
- 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 +7 -21
- 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 +20 -32
- 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 +25 -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 +27 -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 +16 -22
- 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 +8 -24
- 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 +9 -25
- 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 +8 -24
- 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 +7 -21
- package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.js.map +1 -1
- package/dist/confluent/tools/tool-availability.d.ts +74 -0
- package/dist/confluent/tools/tool-availability.d.ts.map +1 -0
- package/dist/confluent/tools/tool-availability.js +121 -0
- package/dist/confluent/tools/tool-availability.js.map +1 -0
- package/dist/confluent/tools/tool-name.d.ts +5 -1
- package/dist/confluent/tools/tool-name.d.ts.map +1 -1
- package/dist/confluent/tools/tool-name.js +4 -0
- package/dist/confluent/tools/tool-name.js.map +1 -1
- package/dist/confluent/tools/tool-registry.d.ts +18 -0
- package/dist/confluent/tools/tool-registry.d.ts.map +1 -0
- package/dist/confluent/tools/{tool-factory.js → tool-registry.js} +32 -19
- package/dist/confluent/tools/tool-registry.js.map +1 -0
- package/dist/env-schema.d.ts +5 -2
- package/dist/env-schema.d.ts.map +1 -1
- package/dist/env-schema.js +20 -5
- package/dist/env-schema.js.map +1 -1
- package/dist/env.d.ts +16 -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 +279 -162
- 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 +52 -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 +25 -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/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,94 @@
|
|
|
1
|
+
import { type AuthErrors } from "../../confluent/oauth/errors.js";
|
|
2
|
+
import type { Auth0Config, ConfluentTokenSet } from "../../confluent/oauth/types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Owns one user's Confluent OAuth lifecycle — token state plus the
|
|
5
|
+
* transformations that advance it. Internal state advances via atomic
|
|
6
|
+
* transform functions under {@link AuthContext.updateTokens} so each step is
|
|
7
|
+
* atomic and no caller mutates the token set directly.
|
|
8
|
+
*/
|
|
9
|
+
export declare class AuthContext {
|
|
10
|
+
private readonly auth0Config;
|
|
11
|
+
private internalTokens;
|
|
12
|
+
private cleared;
|
|
13
|
+
private refreshTimer;
|
|
14
|
+
private inflightRefresh;
|
|
15
|
+
private errors;
|
|
16
|
+
private failedRefreshAttempts;
|
|
17
|
+
private constructor();
|
|
18
|
+
/** Runs the auth code → CP → DP chain and wraps the result in a context. */
|
|
19
|
+
static newFromInitialLogin(auth0Config: Auth0Config, authCode: string, codeVerifier: string): Promise<AuthContext>;
|
|
20
|
+
/** Build a context from an already-acquired token set. */
|
|
21
|
+
static fromTokens(auth0Config: Auth0Config, tokens: ConfluentTokenSet): AuthContext;
|
|
22
|
+
/** Opaque access token — stable across refreshes. */
|
|
23
|
+
get accessToken(): string;
|
|
24
|
+
/**
|
|
25
|
+
* Current control-plane bearer token, or `undefined` if the context is
|
|
26
|
+
* cleared or the CP token has expired. Call this immediately before each
|
|
27
|
+
* API request — don't cache the returned string across awaits.
|
|
28
|
+
*/
|
|
29
|
+
getControlPlaneToken(): string | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* Current data-plane bearer token, or `undefined` if the context is
|
|
32
|
+
* cleared or the DP token has expired. Same usage guidance as
|
|
33
|
+
* {@link getControlPlaneToken}.
|
|
34
|
+
*/
|
|
35
|
+
getDataPlaneToken(): string | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* Readonly view of current auth-lifecycle errors. Consumers check this to decide
|
|
38
|
+
* whether to prompt re-auth (when a non-transient error has been flagged).
|
|
39
|
+
*/
|
|
40
|
+
getErrors(): Readonly<AuthErrors>;
|
|
41
|
+
/** True when the refresh token is no longer usable (expired or cleared). */
|
|
42
|
+
refreshTokenExpired(now?: number): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Pure predicate: should the refresh loop call `refresh()` on this context
|
|
45
|
+
* right now? True when the refresh token is still live, no non-transient
|
|
46
|
+
* error has been recorded, and the CP token is within the refresh window.
|
|
47
|
+
*/
|
|
48
|
+
shouldAttemptRefresh(now?: number): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Rotate the refresh token, then derive new CP and DP tokens. The rotated
|
|
51
|
+
* refresh token is persisted before the CP/DP leg so a phase-2 failure
|
|
52
|
+
* leaves the context with a valid (fresh) refresh token. The next scheduler
|
|
53
|
+
* tick still re-rotates (we don't cache the id_token across ticks), but the
|
|
54
|
+
* session isn't bricked by a partial failure.
|
|
55
|
+
*
|
|
56
|
+
* Single-flight: concurrent callers (e.g., the refresh loop + an explicit
|
|
57
|
+
* tool-triggered call) await the same in-flight promise. Refresh tokens are
|
|
58
|
+
* single-use, so overlapping calls would burn the same token.
|
|
59
|
+
*/
|
|
60
|
+
refresh(): Promise<void>;
|
|
61
|
+
private doRefresh;
|
|
62
|
+
/**
|
|
63
|
+
* Records a refresh failure on the context. A failure is transient unless
|
|
64
|
+
* its message matches a known-permanent signal, or the consecutive failure
|
|
65
|
+
* counter hits {@link MAX_CONSECUTIVE_TRANSIENT_FAILURES}. A non-transient
|
|
66
|
+
* record flips `shouldAttemptRefresh` to `false` until the context is
|
|
67
|
+
* cleared / re-authenticated.
|
|
68
|
+
*/
|
|
69
|
+
private recordRefreshError;
|
|
70
|
+
/**
|
|
71
|
+
* Mark this context as cleared — subsequent `refresh()` is a no-op, any
|
|
72
|
+
* running refresh loop is stopped, and the accessors (`getControlPlaneToken`,
|
|
73
|
+
* `getDataPlaneToken`) return `undefined`. Internal state is not exposed to
|
|
74
|
+
* consumers, so no field scrubbing is needed.
|
|
75
|
+
*/
|
|
76
|
+
clear(): void;
|
|
77
|
+
/**
|
|
78
|
+
* Starts a background loop that refreshes the CP/DP token pair just before
|
|
79
|
+
* the CP token expires. The loop self-reschedules: each fire sets the next
|
|
80
|
+
* `setTimeout` at `controlPlaneExpiresAt - REFRESH_WINDOW_MS` from the
|
|
81
|
+
* post-refresh state, so the schedule tracks the actual token expiry.
|
|
82
|
+
*/
|
|
83
|
+
startRefreshLoop(): void;
|
|
84
|
+
private scheduleNextRefresh;
|
|
85
|
+
/** Stops the background refresh loop. Safe to call even if not started. */
|
|
86
|
+
stopRefreshLoop(): void;
|
|
87
|
+
/**
|
|
88
|
+
* Applies a named transform to the token set. Each transform returns a
|
|
89
|
+
* whole new {@link ConfluentTokenSet}; callers never mutate the state
|
|
90
|
+
* directly.
|
|
91
|
+
*/
|
|
92
|
+
private updateTokens;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=auth-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-context.d.ts","sourceRoot":"","sources":["../../../src/confluent/oauth/auth-context.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,UAAU,EAEhB,MAAM,gCAAgC,CAAC;AAcxC,OAAO,KAAK,EACV,WAAW,EAEX,iBAAiB,EAGlB,MAAM,+BAA+B,CAAC;AAkBvC;;;;;GAKG;AACH,qBAAa,WAAW;IASpB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAR9B,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,qBAAqB,CAAK;IAElC,OAAO;IAOP,4EAA4E;WAC/D,mBAAmB,CAC9B,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,CAAC;IAqBvB,0DAA0D;IAC1D,MAAM,CAAC,UAAU,CACf,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,iBAAiB,GACxB,WAAW;IAId,qDAAqD;IACrD,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;;;OAIG;IACH,oBAAoB,IAAI,MAAM,GAAG,SAAS;IAO1C;;;;OAIG;IACH,iBAAiB,IAAI,MAAM,GAAG,SAAS;IAMvC;;;OAGG;IACH,SAAS,IAAI,QAAQ,CAAC,UAAU,CAAC;IAIjC,4EAA4E;IAC5E,mBAAmB,CAAC,GAAG,GAAE,MAAmB,GAAG,OAAO;IAQtD;;;;OAIG;IACH,oBAAoB,CAAC,GAAG,GAAE,MAAmB,GAAG,OAAO;IASvD;;;;;;;;;;OAUG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAYhB,SAAS;IAiFvB;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;;;;OAKG;IACH,KAAK,IAAI,IAAI;IAKb;;;;;OAKG;IACH,gBAAgB,IAAI,IAAI;IAexB,OAAO,CAAC,mBAAmB;IAqD3B,2EAA2E;IAC3E,eAAe,IAAI,IAAI;IAQvB;;;;OAIG;IACH,OAAO,CAAC,YAAY;CAMrB"}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
import { generateOpaqueToken } from "../../confluent/oauth/crypto-utils.js";
|
|
2
|
+
import { hasNonTransientError, } from "../../confluent/oauth/errors.js";
|
|
3
|
+
import { exchangeControlPlaneForDataPlaneToken, exchangeIdTokenForControlPlaneToken, exchangeRefreshTokenForAuth0Tokens, executeFullTokenChain, } from "../../confluent/oauth/token-chain.js";
|
|
4
|
+
import { CONTROL_PLANE_REFRESH_WINDOW_MS, CONTROL_PLANE_TOKEN_LIFETIME_MS, DATA_PLANE_TOKEN_LIFETIME_MS, MAX_CONSECUTIVE_TRANSIENT_FAILURES, REFRESH_TOKEN_IDLE_LIFETIME_MS, } from "../../confluent/oauth/token-lifetimes.js";
|
|
5
|
+
import { logger } from "../../logger.js";
|
|
6
|
+
/** Substrings that mark a refresh error as permanently non-recoverable. */
|
|
7
|
+
const NON_TRANSIENT_ERROR_SIGNALS = [
|
|
8
|
+
"Unknown or invalid refresh token.",
|
|
9
|
+
'"error":"invalid_grant"',
|
|
10
|
+
'"error":"invalid_client"',
|
|
11
|
+
'"error":"unauthorized_client"',
|
|
12
|
+
];
|
|
13
|
+
function isKnownNonTransient(error) {
|
|
14
|
+
if (!(error instanceof Error))
|
|
15
|
+
return false;
|
|
16
|
+
return NON_TRANSIENT_ERROR_SIGNALS.some((signal) => error.message.includes(signal));
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Owns one user's Confluent OAuth lifecycle — token state plus the
|
|
20
|
+
* transformations that advance it. Internal state advances via atomic
|
|
21
|
+
* transform functions under {@link AuthContext.updateTokens} so each step is
|
|
22
|
+
* atomic and no caller mutates the token set directly.
|
|
23
|
+
*/
|
|
24
|
+
export class AuthContext {
|
|
25
|
+
auth0Config;
|
|
26
|
+
internalTokens;
|
|
27
|
+
cleared = false;
|
|
28
|
+
refreshTimer = null;
|
|
29
|
+
inflightRefresh = null;
|
|
30
|
+
errors = {};
|
|
31
|
+
failedRefreshAttempts = 0;
|
|
32
|
+
constructor(auth0Config, tokens) {
|
|
33
|
+
this.auth0Config = auth0Config;
|
|
34
|
+
this.internalTokens = tokens;
|
|
35
|
+
}
|
|
36
|
+
/** Runs the auth code → CP → DP chain and wraps the result in a context. */
|
|
37
|
+
static async newFromInitialLogin(auth0Config, authCode, codeVerifier) {
|
|
38
|
+
const result = await executeFullTokenChain(auth0Config, authCode, codeVerifier);
|
|
39
|
+
// Explicit field copy: `TokenChainResult` carries identity fields
|
|
40
|
+
// (`resourceId`, `email`) that aren't part of `ConfluentTokenSet`; a
|
|
41
|
+
// spread would retain them on the long-lived context.
|
|
42
|
+
return new AuthContext(auth0Config, {
|
|
43
|
+
refreshToken: result.refreshToken,
|
|
44
|
+
refreshTokenAbsoluteExpiresAt: result.refreshTokenAbsoluteExpiresAt,
|
|
45
|
+
refreshTokenIdleExpiresAt: result.refreshTokenIdleExpiresAt,
|
|
46
|
+
controlPlaneToken: result.controlPlaneToken,
|
|
47
|
+
controlPlaneExpiresAt: result.controlPlaneExpiresAt,
|
|
48
|
+
dataPlaneToken: result.dataPlaneToken,
|
|
49
|
+
dataPlaneExpiresAt: result.dataPlaneExpiresAt,
|
|
50
|
+
accessToken: generateOpaqueToken(),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/** Build a context from an already-acquired token set. */
|
|
54
|
+
static fromTokens(auth0Config, tokens) {
|
|
55
|
+
return new AuthContext(auth0Config, tokens);
|
|
56
|
+
}
|
|
57
|
+
/** Opaque access token — stable across refreshes. */
|
|
58
|
+
get accessToken() {
|
|
59
|
+
return this.internalTokens.accessToken;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Current control-plane bearer token, or `undefined` if the context is
|
|
63
|
+
* cleared or the CP token has expired. Call this immediately before each
|
|
64
|
+
* API request — don't cache the returned string across awaits.
|
|
65
|
+
*/
|
|
66
|
+
getControlPlaneToken() {
|
|
67
|
+
if (this.cleared)
|
|
68
|
+
return undefined;
|
|
69
|
+
if (this.internalTokens.controlPlaneExpiresAt <= Date.now())
|
|
70
|
+
return undefined;
|
|
71
|
+
return this.internalTokens.controlPlaneToken;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Current data-plane bearer token, or `undefined` if the context is
|
|
75
|
+
* cleared or the DP token has expired. Same usage guidance as
|
|
76
|
+
* {@link getControlPlaneToken}.
|
|
77
|
+
*/
|
|
78
|
+
getDataPlaneToken() {
|
|
79
|
+
if (this.cleared)
|
|
80
|
+
return undefined;
|
|
81
|
+
if (this.internalTokens.dataPlaneExpiresAt <= Date.now())
|
|
82
|
+
return undefined;
|
|
83
|
+
return this.internalTokens.dataPlaneToken;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Readonly view of current auth-lifecycle errors. Consumers check this to decide
|
|
87
|
+
* whether to prompt re-auth (when a non-transient error has been flagged).
|
|
88
|
+
*/
|
|
89
|
+
getErrors() {
|
|
90
|
+
return this.errors;
|
|
91
|
+
}
|
|
92
|
+
/** True when the refresh token is no longer usable (expired or cleared). */
|
|
93
|
+
refreshTokenExpired(now = Date.now()) {
|
|
94
|
+
if (this.cleared)
|
|
95
|
+
return true;
|
|
96
|
+
return (now >= this.internalTokens.refreshTokenAbsoluteExpiresAt ||
|
|
97
|
+
now >= this.internalTokens.refreshTokenIdleExpiresAt);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Pure predicate: should the refresh loop call `refresh()` on this context
|
|
101
|
+
* right now? True when the refresh token is still live, no non-transient
|
|
102
|
+
* error has been recorded, and the CP token is within the refresh window.
|
|
103
|
+
*/
|
|
104
|
+
shouldAttemptRefresh(now = Date.now()) {
|
|
105
|
+
if (this.refreshTokenExpired(now))
|
|
106
|
+
return false;
|
|
107
|
+
if (hasNonTransientError(this.errors))
|
|
108
|
+
return false;
|
|
109
|
+
return (this.internalTokens.controlPlaneExpiresAt - now <=
|
|
110
|
+
CONTROL_PLANE_REFRESH_WINDOW_MS);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Rotate the refresh token, then derive new CP and DP tokens. The rotated
|
|
114
|
+
* refresh token is persisted before the CP/DP leg so a phase-2 failure
|
|
115
|
+
* leaves the context with a valid (fresh) refresh token. The next scheduler
|
|
116
|
+
* tick still re-rotates (we don't cache the id_token across ticks), but the
|
|
117
|
+
* session isn't bricked by a partial failure.
|
|
118
|
+
*
|
|
119
|
+
* Single-flight: concurrent callers (e.g., the refresh loop + an explicit
|
|
120
|
+
* tool-triggered call) await the same in-flight promise. Refresh tokens are
|
|
121
|
+
* single-use, so overlapping calls would burn the same token.
|
|
122
|
+
*/
|
|
123
|
+
async refresh() {
|
|
124
|
+
if (this.cleared)
|
|
125
|
+
return;
|
|
126
|
+
if (this.refreshTokenExpired())
|
|
127
|
+
return;
|
|
128
|
+
if (this.inflightRefresh)
|
|
129
|
+
return this.inflightRefresh;
|
|
130
|
+
this.inflightRefresh = this.doRefresh();
|
|
131
|
+
try {
|
|
132
|
+
await this.inflightRefresh;
|
|
133
|
+
}
|
|
134
|
+
finally {
|
|
135
|
+
this.inflightRefresh = null;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async doRefresh() {
|
|
139
|
+
// Capture rotationTime BEFORE the auth0 exchange so the new CP/DP
|
|
140
|
+
// expiries we stamp are conservative - we refresh slightly sooner
|
|
141
|
+
// than strictly necessary instead of slightly later.
|
|
142
|
+
const rotationTime = Date.now();
|
|
143
|
+
let auth0Response;
|
|
144
|
+
try {
|
|
145
|
+
auth0Response = await exchangeRefreshTokenForAuth0Tokens(this.auth0Config, this.internalTokens.refreshToken);
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
this.recordRefreshError(error);
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
// clear() may have fired while the rotation was in flight — the refresh
|
|
152
|
+
// token Auth0 just gave us is already stale by intent, and there's no
|
|
153
|
+
// point issuing further API calls that would be discarded.
|
|
154
|
+
if (this.cleared)
|
|
155
|
+
return;
|
|
156
|
+
this.updateTokens((prev) => ({
|
|
157
|
+
...prev,
|
|
158
|
+
refreshToken: auth0Response.refresh_token,
|
|
159
|
+
// Idle expiry can't extend past the absolute lifetime — Auth0's
|
|
160
|
+
// absolute expiry is a hard ceiling that overrides idle bumps.
|
|
161
|
+
refreshTokenIdleExpiresAt: Math.min(rotationTime + REFRESH_TOKEN_IDLE_LIFETIME_MS, prev.refreshTokenAbsoluteExpiresAt),
|
|
162
|
+
}));
|
|
163
|
+
try {
|
|
164
|
+
// Phase 2 is safe to retry and both the CP and DP exchanges accept bearer
|
|
165
|
+
// tokens without marking them consumed. A retry after a transient 5xx just
|
|
166
|
+
// creates a fresh CP/DP session; any orphaned session from a lost-in-transit first
|
|
167
|
+
// response expires naturally within its short TTL.
|
|
168
|
+
let cpResponse;
|
|
169
|
+
try {
|
|
170
|
+
cpResponse = await exchangeIdTokenForControlPlaneToken(this.auth0Config.apiUrl, auth0Response.id_token);
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
if (isKnownNonTransient(error))
|
|
174
|
+
throw error;
|
|
175
|
+
cpResponse = await exchangeIdTokenForControlPlaneToken(this.auth0Config.apiUrl, auth0Response.id_token);
|
|
176
|
+
}
|
|
177
|
+
if (this.cleared)
|
|
178
|
+
return;
|
|
179
|
+
let dpResponse;
|
|
180
|
+
try {
|
|
181
|
+
dpResponse = await exchangeControlPlaneForDataPlaneToken(this.auth0Config.apiUrl, cpResponse.token);
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
if (isKnownNonTransient(error))
|
|
185
|
+
throw error;
|
|
186
|
+
dpResponse = await exchangeControlPlaneForDataPlaneToken(this.auth0Config.apiUrl, cpResponse.token);
|
|
187
|
+
}
|
|
188
|
+
if (this.cleared)
|
|
189
|
+
return;
|
|
190
|
+
this.updateTokens((prev) => ({
|
|
191
|
+
...prev,
|
|
192
|
+
controlPlaneToken: cpResponse.token,
|
|
193
|
+
controlPlaneExpiresAt: rotationTime + CONTROL_PLANE_TOKEN_LIFETIME_MS,
|
|
194
|
+
dataPlaneToken: dpResponse.token,
|
|
195
|
+
dataPlaneExpiresAt: rotationTime + DATA_PLANE_TOKEN_LIFETIME_MS,
|
|
196
|
+
}));
|
|
197
|
+
// Full success — clear any prior transient error state.
|
|
198
|
+
this.errors = { ...this.errors, tokenRefresh: undefined };
|
|
199
|
+
this.failedRefreshAttempts = 0;
|
|
200
|
+
logger.info("Token set refreshed successfully");
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
this.recordRefreshError(error);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Records a refresh failure on the context. A failure is transient unless
|
|
208
|
+
* its message matches a known-permanent signal, or the consecutive failure
|
|
209
|
+
* counter hits {@link MAX_CONSECUTIVE_TRANSIENT_FAILURES}. A non-transient
|
|
210
|
+
* record flips `shouldAttemptRefresh` to `false` until the context is
|
|
211
|
+
* cleared / re-authenticated.
|
|
212
|
+
*/
|
|
213
|
+
recordRefreshError(error) {
|
|
214
|
+
this.failedRefreshAttempts += 1;
|
|
215
|
+
const isTransient = this.failedRefreshAttempts < MAX_CONSECUTIVE_TRANSIENT_FAILURES &&
|
|
216
|
+
!isKnownNonTransient(error);
|
|
217
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
218
|
+
this.errors = {
|
|
219
|
+
...this.errors,
|
|
220
|
+
tokenRefresh: { message, isTransient },
|
|
221
|
+
};
|
|
222
|
+
if (isTransient) {
|
|
223
|
+
logger.warn({ error, attempts: this.failedRefreshAttempts }, "Transient refresh error; will retry next tick");
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
logger.error({ error, attempts: this.failedRefreshAttempts }, "Non-transient refresh error; scheduler will skip until re-auth");
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Mark this context as cleared — subsequent `refresh()` is a no-op, any
|
|
231
|
+
* running refresh loop is stopped, and the accessors (`getControlPlaneToken`,
|
|
232
|
+
* `getDataPlaneToken`) return `undefined`. Internal state is not exposed to
|
|
233
|
+
* consumers, so no field scrubbing is needed.
|
|
234
|
+
*/
|
|
235
|
+
clear() {
|
|
236
|
+
this.cleared = true;
|
|
237
|
+
this.stopRefreshLoop();
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Starts a background loop that refreshes the CP/DP token pair just before
|
|
241
|
+
* the CP token expires. The loop self-reschedules: each fire sets the next
|
|
242
|
+
* `setTimeout` at `controlPlaneExpiresAt - REFRESH_WINDOW_MS` from the
|
|
243
|
+
* post-refresh state, so the schedule tracks the actual token expiry.
|
|
244
|
+
*/
|
|
245
|
+
startRefreshLoop() {
|
|
246
|
+
if (this.cleared) {
|
|
247
|
+
// A cleared context is terminal. Scheduling a timer here would create
|
|
248
|
+
// a callback that can never do useful work — guard against the leak.
|
|
249
|
+
logger.warn("Refresh loop not started: context is cleared");
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
if (this.refreshTimer) {
|
|
253
|
+
logger.warn("Refresh loop already running, skipping");
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
this.scheduleNextRefresh();
|
|
257
|
+
logger.info("Token refresh loop started");
|
|
258
|
+
}
|
|
259
|
+
scheduleNextRefresh() {
|
|
260
|
+
if (this.cleared)
|
|
261
|
+
return;
|
|
262
|
+
if (this.refreshTokenExpired()) {
|
|
263
|
+
logger.info("Refresh token expired; clearing context");
|
|
264
|
+
this.clear();
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
// After a non-transient refresh error (e.g., refresh-token revoked, or
|
|
268
|
+
// `MAX_CONSECUTIVE_TRANSIENT_FAILURES` exceeded), don't reschedule. The
|
|
269
|
+
// loop terminates; the user must re-authenticate to recover. Without
|
|
270
|
+
// this guard the loop would hammer auth0 every 1s indefinitely on a
|
|
271
|
+
// permanent failure.
|
|
272
|
+
if (hasNonTransientError(this.errors)) {
|
|
273
|
+
logger.info("Non-transient refresh error recorded; refresh loop stopping until re-auth");
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
// Target: fire `REFRESH_WINDOW_MS` before CP expiry. Floor at 1s so a
|
|
277
|
+
// failed refresh (which doesn't advance `controlPlaneExpiresAt`)
|
|
278
|
+
// produces a tight retry. The failure counter caps at
|
|
279
|
+
// `MAX_CONSECUTIVE_TRANSIENT_FAILURES`, after which the next call to
|
|
280
|
+
// `recordRefreshError` flips the error to non-transient and the guard
|
|
281
|
+
// above stops the loop on the very next reschedule.
|
|
282
|
+
const now = Date.now();
|
|
283
|
+
const targetDelay = Math.max(this.internalTokens.controlPlaneExpiresAt -
|
|
284
|
+
now -
|
|
285
|
+
CONTROL_PLANE_REFRESH_WINDOW_MS, 1_000);
|
|
286
|
+
logger.info({
|
|
287
|
+
delayMs: targetDelay,
|
|
288
|
+
cpExpiresAt: new Date(this.internalTokens.controlPlaneExpiresAt).toISOString(),
|
|
289
|
+
firesAt: new Date(now + targetDelay).toISOString(),
|
|
290
|
+
}, "Next token refresh scheduled");
|
|
291
|
+
this.refreshTimer = setTimeout(async () => {
|
|
292
|
+
this.refreshTimer = null;
|
|
293
|
+
if (this.cleared)
|
|
294
|
+
return;
|
|
295
|
+
try {
|
|
296
|
+
await this.refresh();
|
|
297
|
+
}
|
|
298
|
+
catch (error) {
|
|
299
|
+
logger.error({ error }, "Token refresh loop error");
|
|
300
|
+
}
|
|
301
|
+
this.scheduleNextRefresh();
|
|
302
|
+
}, targetDelay);
|
|
303
|
+
}
|
|
304
|
+
/** Stops the background refresh loop. Safe to call even if not started. */
|
|
305
|
+
stopRefreshLoop() {
|
|
306
|
+
if (this.refreshTimer) {
|
|
307
|
+
clearTimeout(this.refreshTimer);
|
|
308
|
+
this.refreshTimer = null;
|
|
309
|
+
logger.info("Token refresh loop stopped");
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Applies a named transform to the token set. Each transform returns a
|
|
314
|
+
* whole new {@link ConfluentTokenSet}; callers never mutate the state
|
|
315
|
+
* directly.
|
|
316
|
+
*/
|
|
317
|
+
updateTokens(transform) {
|
|
318
|
+
if (this.cleared)
|
|
319
|
+
return;
|
|
320
|
+
this.internalTokens = transform(this.internalTokens);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
//# sourceMappingURL=auth-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-context.js","sourceRoot":"","sources":["../../../src/confluent/oauth/auth-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Auth0Config, Auth0Environment } from "../../confluent/oauth/types.js";
|
|
2
|
+
export declare const OAUTH_CALLBACK_HOST = "127.0.0.1";
|
|
3
|
+
export declare const OAUTH_CALLBACK_PORT = 26640;
|
|
4
|
+
export declare const OAUTH_CALLBACK_PATH = "/gateway/v1/callback-local-mcp-docs";
|
|
5
|
+
export declare function getAuth0Config(environment: Auth0Environment): Auth0Config;
|
|
6
|
+
/**
|
|
7
|
+
* Returns the Confluent Cloud REST API base URL for the given Auth0 environment.
|
|
8
|
+
* Used by {@link OAuthClientManager} to derive the cloud surface's base URL when
|
|
9
|
+
* the OAuth path doesn't carry an explicit `confluent_cloud.endpoint`.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getCloudRestUrlForEnv(environment: Auth0Environment): string;
|
|
12
|
+
//# sourceMappingURL=auth0-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth0-config.d.ts","sourceRoot":"","sources":["../../../src/confluent/oauth/auth0-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EACjB,MAAM,+BAA+B,CAAC;AAEvC,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AACzC,eAAO,MAAM,mBAAmB,wCAAwC,CAAC;AA8BzE,wBAAgB,cAAc,CAAC,WAAW,EAAE,gBAAgB,GAAG,WAAW,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,gBAAgB,GAAG,MAAM,CAE3E"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export const OAUTH_CALLBACK_HOST = "127.0.0.1";
|
|
2
|
+
export const OAUTH_CALLBACK_PORT = 26640;
|
|
3
|
+
export const OAUTH_CALLBACK_PATH = "/gateway/v1/callback-local-mcp-docs";
|
|
4
|
+
const OAUTH_CALLBACK_URL = `http://${OAUTH_CALLBACK_HOST}:${OAUTH_CALLBACK_PORT}${OAUTH_CALLBACK_PATH}`;
|
|
5
|
+
const OAUTH_SCOPES = "email openid offline_access";
|
|
6
|
+
const AUTH0_CONFIGS = {
|
|
7
|
+
devel: {
|
|
8
|
+
clientId: "D8DV9ee7XrKX4ncAc6vJtBFgIzTMNgoY",
|
|
9
|
+
domain: "login.confluent-dev.io",
|
|
10
|
+
apiUrl: "https://devel.cpdev.cloud",
|
|
11
|
+
cloudRestUrl: "https://api.devel.cpdev.cloud",
|
|
12
|
+
callbackUrl: OAUTH_CALLBACK_URL,
|
|
13
|
+
scopes: OAUTH_SCOPES,
|
|
14
|
+
},
|
|
15
|
+
stag: {
|
|
16
|
+
clientId: "adtjckxmHbjddhNK36PvcXIDDbrJUMDH",
|
|
17
|
+
domain: "login-stag.confluent-dev.io",
|
|
18
|
+
apiUrl: "https://stag.cpdev.cloud",
|
|
19
|
+
cloudRestUrl: "https://api.stag.cpdev.cloud",
|
|
20
|
+
callbackUrl: OAUTH_CALLBACK_URL,
|
|
21
|
+
scopes: OAUTH_SCOPES,
|
|
22
|
+
},
|
|
23
|
+
prod: {
|
|
24
|
+
clientId: "cZ0wejEDJLNocYDJ54mAmGK21klrv21h",
|
|
25
|
+
domain: "login.confluent.io",
|
|
26
|
+
apiUrl: "https://confluent.cloud",
|
|
27
|
+
cloudRestUrl: "https://api.confluent.cloud",
|
|
28
|
+
callbackUrl: OAUTH_CALLBACK_URL,
|
|
29
|
+
scopes: OAUTH_SCOPES,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
export function getAuth0Config(environment) {
|
|
33
|
+
return AUTH0_CONFIGS[environment];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Returns the Confluent Cloud REST API base URL for the given Auth0 environment.
|
|
37
|
+
* Used by {@link OAuthClientManager} to derive the cloud surface's base URL when
|
|
38
|
+
* the OAuth path doesn't carry an explicit `confluent_cloud.endpoint`.
|
|
39
|
+
*/
|
|
40
|
+
export function getCloudRestUrlForEnv(environment) {
|
|
41
|
+
return AUTH0_CONFIGS[environment].cloudRestUrl;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=auth0-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth0-config.js","sourceRoot":"","sources":["../../../src/confluent/oauth/auth0-config.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAC/C,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AACzC,MAAM,CAAC,MAAM,mBAAmB,GAAG,qCAAqC,CAAC;AACzE,MAAM,kBAAkB,GAAG,UAAU,mBAAmB,IAAI,mBAAmB,GAAG,mBAAmB,EAAE,CAAC;AACxG,MAAM,YAAY,GAAG,6BAA6B,CAAC;AACnD,MAAM,aAAa,GAA0C;IAC3D,KAAK,EAAE;QACL,QAAQ,EAAE,kCAAkC;QAC5C,MAAM,EAAE,wBAAwB;QAChC,MAAM,EAAE,2BAA2B;QACnC,YAAY,EAAE,+BAA+B;QAC7C,WAAW,EAAE,kBAAkB;QAC/B,MAAM,EAAE,YAAY;KACrB;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE,kCAAkC;QAC5C,MAAM,EAAE,6BAA6B;QACrC,MAAM,EAAE,0BAA0B;QAClC,YAAY,EAAE,8BAA8B;QAC5C,WAAW,EAAE,kBAAkB;QAC/B,MAAM,EAAE,YAAY;KACrB;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE,kCAAkC;QAC5C,MAAM,EAAE,oBAAoB;QAC5B,MAAM,EAAE,yBAAyB;QACjC,YAAY,EAAE,6BAA6B;QAC3C,WAAW,EAAE,kBAAkB;QAC/B,MAAM,EAAE,YAAY;KACrB;CACF,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,WAA6B;IAC1D,OAAO,aAAa,CAAC,WAAW,CAAC,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAA6B;IACjE,OAAO,aAAa,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function renderSuccessPage(): string;
|
|
2
|
+
export declare function renderErrorPage(message: string): string;
|
|
3
|
+
/** Test-only: reset the module-level template cache. */
|
|
4
|
+
export declare function _resetCallbackPageCacheForTests(): void;
|
|
5
|
+
//# sourceMappingURL=callback-pages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callback-pages.d.ts","sourceRoot":"","sources":["../../../src/confluent/oauth/callback-pages.ts"],"names":[],"mappings":"AAuCA,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,wDAAwD;AACxD,wBAAgB,+BAA+B,IAAI,IAAI,CAGtD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { fs } from "../../confluent/node-deps.js";
|
|
2
|
+
const SUCCESS_TEMPLATE_FILE = "callback-success.html";
|
|
3
|
+
const FAILURE_TEMPLATE_FILE = "callback-failure.html";
|
|
4
|
+
const PARTIALS = {
|
|
5
|
+
"{#include styles/}": "styles.html",
|
|
6
|
+
"{#include logo/}": "logo.html",
|
|
7
|
+
};
|
|
8
|
+
const TEMPLATES_DIR_URL = new URL("../../../assets/oauth-templates/", import.meta.url);
|
|
9
|
+
let cachedSuccessPage;
|
|
10
|
+
let cachedFailureTemplate;
|
|
11
|
+
function readTemplate(fileName) {
|
|
12
|
+
return fs.readFileSync(new URL(fileName, TEMPLATES_DIR_URL), "utf-8");
|
|
13
|
+
}
|
|
14
|
+
function inlinePartials(template) {
|
|
15
|
+
return Object.entries(PARTIALS).reduce((acc, [directive, fileName]) => acc.replace(directive, readTemplate(fileName)), template);
|
|
16
|
+
}
|
|
17
|
+
function escapeHtml(value) {
|
|
18
|
+
return value
|
|
19
|
+
.replaceAll("&", "&")
|
|
20
|
+
.replaceAll("<", "<")
|
|
21
|
+
.replaceAll(">", ">")
|
|
22
|
+
.replaceAll('"', """)
|
|
23
|
+
.replaceAll("'", "'");
|
|
24
|
+
}
|
|
25
|
+
export function renderSuccessPage() {
|
|
26
|
+
cachedSuccessPage ??= inlinePartials(readTemplate(SUCCESS_TEMPLATE_FILE));
|
|
27
|
+
return cachedSuccessPage;
|
|
28
|
+
}
|
|
29
|
+
export function renderErrorPage(message) {
|
|
30
|
+
cachedFailureTemplate ??= inlinePartials(readTemplate(FAILURE_TEMPLATE_FILE));
|
|
31
|
+
return cachedFailureTemplate.replace("{{error}}", () => escapeHtml(message));
|
|
32
|
+
}
|
|
33
|
+
/** Test-only: reset the module-level template cache. */
|
|
34
|
+
export function _resetCallbackPageCacheForTests() {
|
|
35
|
+
cachedSuccessPage = undefined;
|
|
36
|
+
cachedFailureTemplate = undefined;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=callback-pages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callback-pages.js","sourceRoot":"","sources":["../../../src/confluent/oauth/callback-pages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,6BAA6B,CAAC;AAEjD,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AACtD,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAEtD,MAAM,QAAQ,GAA2B;IACvC,oBAAoB,EAAE,aAAa;IACnC,kBAAkB,EAAE,WAAW;CAChC,CAAC;AAEF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,kCAAkC,EAClC,MAAM,CAAC,IAAI,CAAC,GAAG,CAChB,CAAC;AAEF,IAAI,iBAAqC,CAAC;AAC1C,IAAI,qBAAyC,CAAC;AAE9C,SAAS,YAAY,CAAC,QAAgB;IACpC,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB;IACtC,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CACpC,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,CAC7B,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,EAChD,QAAQ,CACT,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;SACzB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,iBAAiB,KAAK,cAAc,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC1E,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,qBAAqB,KAAK,cAAc,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC9E,OAAO,qBAAqB,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,+BAA+B;IAC7C,iBAAiB,GAAG,SAAS,CAAC;IAC9B,qBAAqB,GAAG,SAAS,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates a cryptographically secure opaque access token.
|
|
3
|
+
* Returns a 64-character hex string (32 random bytes).
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateOpaqueToken(): string;
|
|
6
|
+
/**
|
|
7
|
+
* Generates a PKCE code verifier (RFC 7636).
|
|
8
|
+
* Returns a base64url-encoded string of 32 random bytes.
|
|
9
|
+
*/
|
|
10
|
+
export declare function generateCodeVerifier(): string;
|
|
11
|
+
/**
|
|
12
|
+
* Generates a PKCE code challenge from a code verifier (RFC 7636, S256 method).
|
|
13
|
+
* Returns the base64url-encoded SHA-256 hash of the verifier.
|
|
14
|
+
*/
|
|
15
|
+
export declare function generateCodeChallenge(codeVerifier: string): string;
|
|
16
|
+
//# sourceMappingURL=crypto-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-utils.d.ts","sourceRoot":"","sources":["../../../src/confluent/oauth/crypto-utils.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAElE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
2
|
+
/**
|
|
3
|
+
* Generates a cryptographically secure opaque access token.
|
|
4
|
+
* Returns a 64-character hex string (32 random bytes).
|
|
5
|
+
*/
|
|
6
|
+
export function generateOpaqueToken() {
|
|
7
|
+
return randomBytes(32).toString("hex");
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Generates a PKCE code verifier (RFC 7636).
|
|
11
|
+
* Returns a base64url-encoded string of 32 random bytes.
|
|
12
|
+
*/
|
|
13
|
+
export function generateCodeVerifier() {
|
|
14
|
+
return randomBytes(32).toString("base64url");
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Generates a PKCE code challenge from a code verifier (RFC 7636, S256 method).
|
|
18
|
+
* Returns the base64url-encoded SHA-256 hash of the verifier.
|
|
19
|
+
*/
|
|
20
|
+
export function generateCodeChallenge(codeVerifier) {
|
|
21
|
+
return createHash("sha256").update(codeVerifier).digest("base64url");
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=crypto-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-utils.js","sourceRoot":"","sources":["../../../src/confluent/oauth/crypto-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEtD;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,YAAoB;IACxD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** A single auth-lifecycle error with transience flag. */
|
|
2
|
+
export interface AuthError {
|
|
3
|
+
message: string;
|
|
4
|
+
/**
|
|
5
|
+
* True if expected to resolve on retry. False means the scheduler stops
|
|
6
|
+
* retrying until the context is cleared or re-authenticated.
|
|
7
|
+
*/
|
|
8
|
+
isTransient: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Record of auth-lifecycle errors — one optional entry per phase.
|
|
12
|
+
* `signIn` is intentionally omitted: sign-in failures throw from
|
|
13
|
+
* {@link AuthContext.newFromInitialLogin} before any context exists, so they
|
|
14
|
+
* have no instance on which to be stored.
|
|
15
|
+
*/
|
|
16
|
+
export interface AuthErrors {
|
|
17
|
+
/** Populated when a token refresh attempt fails. */
|
|
18
|
+
tokenRefresh?: AuthError;
|
|
19
|
+
/**
|
|
20
|
+
* Populated when an active token health check fails. Not set today;
|
|
21
|
+
* reserved for a follow-up that adds a `/api/check_jwt` probe.
|
|
22
|
+
*/
|
|
23
|
+
authStatusCheck?: AuthError;
|
|
24
|
+
}
|
|
25
|
+
/** True if any recorded error is flagged non-transient. */
|
|
26
|
+
export declare function hasNonTransientError(errors: AuthErrors): boolean;
|
|
27
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/confluent/oauth/errors.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,oDAAoD;IACpD,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB;;;OAGG;IACH,eAAe,CAAC,EAAE,SAAS,CAAC;CAC7B;AAED,2DAA2D;AAC3D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAKhE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/confluent/oauth/errors.ts"],"names":[],"mappings":"AA0BA,2DAA2D;AAC3D,MAAM,UAAU,oBAAoB,CAAC,MAAkB;IACrD,OAAO,CACL,MAAM,CAAC,YAAY,EAAE,WAAW,KAAK,KAAK;QAC1C,MAAM,CAAC,eAAe,EAAE,WAAW,KAAK,KAAK,CAC9C,CAAC;AACJ,CAAC"}
|