@confluentinc/mcp-confluent 1.3.0 → 1.5.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 +180 -78
- package/assets/oauth-templates/callback-success.html +80 -0
- package/assets/oauth-templates/styles.html +101 -40
- package/config.example.yaml +36 -7
- package/config.oauth.example.yaml +14 -1
- package/dist/config/env-config.d.ts +9 -3
- package/dist/config/env-config.d.ts.map +1 -1
- package/dist/config/env-config.js +20 -34
- package/dist/config/env-config.js.map +1 -1
- package/dist/config/models.d.ts +108 -13
- package/dist/config/models.d.ts.map +1 -1
- package/dist/config/models.js +54 -37
- package/dist/config/models.js.map +1 -1
- package/dist/confluent/base-client-manager.d.ts +36 -1
- package/dist/confluent/base-client-manager.d.ts.map +1 -1
- package/dist/confluent/base-client-manager.js +4 -0
- package/dist/confluent/base-client-manager.js.map +1 -1
- package/dist/confluent/client-manager.d.ts +14 -0
- package/dist/confluent/client-manager.d.ts.map +1 -1
- package/dist/confluent/direct-client-manager.d.ts +2 -2
- package/dist/confluent/direct-client-manager.d.ts.map +1 -1
- package/dist/confluent/direct-client-manager.js +25 -17
- package/dist/confluent/direct-client-manager.js.map +1 -1
- package/dist/confluent/node-deps.d.ts +1 -0
- package/dist/confluent/node-deps.d.ts.map +1 -1
- package/dist/confluent/node-deps.js +7 -1
- package/dist/confluent/node-deps.js.map +1 -1
- package/dist/confluent/oauth/auth0-config.d.ts +26 -4
- package/dist/confluent/oauth/auth0-config.d.ts.map +1 -1
- package/dist/confluent/oauth/auth0-config.js +59 -19
- package/dist/confluent/oauth/auth0-config.js.map +1 -1
- package/dist/confluent/oauth/callback-pages.d.ts +9 -1
- package/dist/confluent/oauth/callback-pages.d.ts.map +1 -1
- package/dist/confluent/oauth/callback-pages.js +14 -5
- package/dist/confluent/oauth/callback-pages.js.map +1 -1
- package/dist/confluent/oauth/pkce-login.d.ts +20 -1
- package/dist/confluent/oauth/pkce-login.d.ts.map +1 -1
- package/dist/confluent/oauth/pkce-login.js +118 -9
- package/dist/confluent/oauth/pkce-login.js.map +1 -1
- package/dist/confluent/oauth/types.d.ts +1 -2
- package/dist/confluent/oauth/types.d.ts.map +1 -1
- package/dist/confluent/oauth-client-manager.d.ts +7 -4
- package/dist/confluent/oauth-client-manager.d.ts.map +1 -1
- package/dist/confluent/oauth-client-manager.js +34 -12
- package/dist/confluent/oauth-client-manager.js.map +1 -1
- package/dist/confluent/oauth-resource-resolvers.d.ts +11 -0
- package/dist/confluent/oauth-resource-resolvers.d.ts.map +1 -1
- package/dist/confluent/oauth-resource-resolvers.js +24 -0
- package/dist/confluent/oauth-resource-resolvers.js.map +1 -1
- package/dist/confluent/schema-registry-helper.d.ts +119 -16
- package/dist/confluent/schema-registry-helper.d.ts.map +1 -1
- package/dist/confluent/schema-registry-helper.js +303 -49
- package/dist/confluent/schema-registry-helper.js.map +1 -1
- package/dist/confluent/telemetry.d.ts +7 -1
- package/dist/confluent/telemetry.d.ts.map +1 -1
- package/dist/confluent/telemetry.js +6 -0
- package/dist/confluent/telemetry.js.map +1 -1
- package/dist/confluent/tools/base-tools.d.ts +207 -21
- package/dist/confluent/tools/base-tools.d.ts.map +1 -1
- package/dist/confluent/tools/base-tools.js +259 -20
- package/dist/confluent/tools/base-tools.js.map +1 -1
- package/dist/confluent/tools/cluster-arg-resolvers.d.ts +21 -0
- package/dist/confluent/tools/cluster-arg-resolvers.d.ts.map +1 -1
- package/dist/confluent/tools/cluster-arg-resolvers.js +45 -0
- package/dist/confluent/tools/cluster-arg-resolvers.js.map +1 -1
- package/dist/confluent/tools/connection-predicates.d.ts +83 -12
- package/dist/confluent/tools/connection-predicates.d.ts.map +1 -1
- package/dist/confluent/tools/connection-predicates.js +85 -11
- package/dist/confluent/tools/connection-predicates.js.map +1 -1
- package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts +2 -1
- 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 +37 -4
- 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 +3 -3
- 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 +11 -6
- 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 +3 -3
- package/dist/confluent/tools/handlers/catalog/create-topic-tags.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/catalog/create-topic-tags.js +11 -6
- package/dist/confluent/tools/handlers/catalog/create-topic-tags.js.map +1 -1
- package/dist/confluent/tools/handlers/catalog/delete-tag.d.ts +3 -3
- package/dist/confluent/tools/handlers/catalog/delete-tag.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/catalog/delete-tag.js +11 -6
- package/dist/confluent/tools/handlers/catalog/delete-tag.js.map +1 -1
- package/dist/confluent/tools/handlers/catalog/list-tags.d.ts +4 -4
- package/dist/confluent/tools/handlers/catalog/list-tags.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/catalog/list-tags.js +16 -7
- package/dist/confluent/tools/handlers/catalog/list-tags.js.map +1 -1
- package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.d.ts +3 -3
- 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 +11 -6
- 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 +2 -1
- package/dist/confluent/tools/handlers/clusters/list-clusters-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/clusters/list-clusters-handler.js +3 -2
- package/dist/confluent/tools/handlers/clusters/list-clusters-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/connect/connect-tool-handler.d.ts +22 -9
- package/dist/confluent/tools/handlers/connect/connect-tool-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/connect/connect-tool-handler.js +35 -11
- package/dist/confluent/tools/handlers/connect/connect-tool-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/connect/create-connector-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/connect/create-connector-handler.js +1 -2
- package/dist/confluent/tools/handlers/connect/create-connector-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/connect/delete-connector-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/connect/delete-connector-handler.js +1 -2
- package/dist/confluent/tools/handlers/connect/delete-connector-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/connect/{read-connectors-handler.d.ts → get-connector-config-handler.d.ts} +2 -3
- 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 +34 -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 +65 -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 +130 -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 +269 -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 +34 -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 +43 -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 +34 -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.map +1 -1
- package/dist/confluent/tools/handlers/connect/list-connectors-handler.js +1 -2
- 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 +34 -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 +34 -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 +34 -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 +43 -0
- package/dist/confluent/tools/handlers/connect/update-connector-config-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/diagnostics/config-help-handler.d.ts +42 -0
- package/dist/confluent/tools/handlers/diagnostics/config-help-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/diagnostics/config-help-handler.js +297 -0
- package/dist/confluent/tools/handlers/diagnostics/config-help-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/diagnostics/describe-configured-connection-handler.d.ts +31 -0
- package/dist/confluent/tools/handlers/diagnostics/describe-configured-connection-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/diagnostics/describe-configured-connection-handler.js +116 -0
- package/dist/confluent/tools/handlers/diagnostics/describe-configured-connection-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/diagnostics/describe-fields.d.ts +52 -0
- package/dist/confluent/tools/handlers/diagnostics/describe-fields.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/diagnostics/describe-fields.js +114 -0
- package/dist/confluent/tools/handlers/diagnostics/describe-fields.js.map +1 -0
- package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.d.ts +21 -43
- package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.js +105 -78
- package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/diagnostics/list-configured-connections-handler.d.ts +27 -0
- package/dist/confluent/tools/handlers/diagnostics/list-configured-connections-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/diagnostics/list-configured-connections-handler.js +93 -0
- package/dist/confluent/tools/handlers/diagnostics/list-configured-connections-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.d.ts +2 -1
- package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.js +2 -1
- package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/docs/search-product-docs-handler.d.ts +2 -1
- package/dist/confluent/tools/handlers/docs/search-product-docs-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/docs/search-product-docs-handler.js +2 -1
- package/dist/confluent/tools/handlers/docs/search-product-docs-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts +8 -7
- package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/environments/list-environments-handler.js +8 -7
- package/dist/confluent/tools/handlers/environments/list-environments-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/environments/read-environment-handler.d.ts +2 -1
- package/dist/confluent/tools/handlers/environments/read-environment-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/environments/read-environment-handler.js +3 -2
- 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 -2
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js +4 -4
- 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.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js +43 -30
- package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js.map +1 -1
- 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 +43 -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.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js +18 -11
- 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.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js +23 -16
- 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.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js +23 -16
- 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.map +1 -1
- package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.js +27 -22
- 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.map +1 -1
- package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.js +20 -12
- 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.map +1 -1
- package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js +20 -12
- 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.map +1 -1
- package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js +20 -18
- package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js.map +1 -1
- 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 +24 -22
- 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 -1
- package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/flink-sql-helper.js +133 -57
- package/dist/confluent/tools/handlers/flink/flink-sql-helper.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/flink-tool-handler.d.ts +29 -7
- package/dist/confluent/tools/handlers/flink/flink-tool-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/flink-tool-handler.js +38 -8
- package/dist/confluent/tools/handlers/flink/flink-tool-handler.js.map +1 -1
- 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 +20 -12
- package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/{read-flink-statement-handler.d.ts → get-flink-statement-results-handler.d.ts} +2 -2
- package/dist/confluent/tools/handlers/flink/get-flink-statement-results-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/{read-flink-statement-handler.js → get-flink-statement-results-handler.js} +30 -22
- package/dist/confluent/tools/handlers/flink/get-flink-statement-results-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/list-compute-pools-handler.d.ts +10 -0
- package/dist/confluent/tools/handlers/flink/list-compute-pools-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/list-compute-pools-handler.js +118 -0
- package/dist/confluent/tools/handlers/flink/list-compute-pools-handler.js.map +1 -0
- 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 +19 -18
- package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/alter-topic-config.d.ts +2 -1
- package/dist/confluent/tools/handlers/kafka/alter-topic-config.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/kafka/alter-topic-config.js +3 -2
- 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 +223 -28
- 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 +832 -68
- 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 +2 -1
- package/dist/confluent/tools/handlers/kafka/create-topics-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/kafka/create-topics-handler.js +14 -4
- package/dist/confluent/tools/handlers/kafka/create-topics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/delete-topics-handler.d.ts +2 -1
- package/dist/confluent/tools/handlers/kafka/delete-topics-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js +3 -2
- 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 +2 -1
- package/dist/confluent/tools/handlers/kafka/get-topic-config.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/kafka/get-topic-config.js +3 -2
- 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 +2 -1
- package/dist/confluent/tools/handlers/kafka/list-topics-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/kafka/list-topics-handler.js +3 -2
- 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 +13 -5
- 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 +145 -47
- 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 +3 -3
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js +5 -4
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts +3 -3
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js +8 -5
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/organizations/list-organizations-handler.d.ts +2 -1
- package/dist/confluent/tools/handlers/organizations/list-organizations-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/organizations/list-organizations-handler.js +4 -2
- package/dist/confluent/tools/handlers/organizations/list-organizations-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/schema/create-schema-handler.d.ts +10 -0
- package/dist/confluent/tools/handlers/schema/create-schema-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/schema/create-schema-handler.js +76 -0
- package/dist/confluent/tools/handlers/schema/create-schema-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts +2 -1
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.js +3 -2
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts +2 -1
- package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/schema/list-schemas-handler.js +3 -2
- 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 +3 -3
- 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 +11 -6
- 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 +3 -3
- 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 +11 -6
- 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.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.js +2 -2
- 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.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.js +2 -2
- 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.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.js +2 -2
- 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.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.js +2 -2
- 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.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.js +1 -1
- 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.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.js +2 -3
- 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 +17 -11
- package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.js +19 -15
- package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.js.map +1 -1
- 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 +2 -2
- 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.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.js +2 -2
- 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.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.js +2 -2
- 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.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.js +2 -2
- 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.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.js +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.js.map +1 -1
- package/dist/confluent/tools/tool-availability.d.ts +84 -36
- package/dist/confluent/tools/tool-availability.d.ts.map +1 -1
- package/dist/confluent/tools/tool-availability.js +106 -65
- package/dist/confluent/tools/tool-availability.js.map +1 -1
- package/dist/confluent/tools/tool-metadata-handler.d.ts +51 -0
- package/dist/confluent/tools/tool-metadata-handler.d.ts.map +1 -0
- package/dist/confluent/tools/tool-metadata-handler.js +61 -0
- package/dist/confluent/tools/tool-metadata-handler.js.map +1 -0
- package/dist/confluent/tools/tool-name.d.ts +22 -3
- package/dist/confluent/tools/tool-name.d.ts.map +1 -1
- package/dist/confluent/tools/tool-name.js +21 -2
- package/dist/confluent/tools/tool-name.js.map +1 -1
- package/dist/confluent/tools/tool-registry.d.ts +1 -2
- package/dist/confluent/tools/tool-registry.d.ts.map +1 -1
- package/dist/confluent/tools/tool-registry.js +60 -7
- package/dist/confluent/tools/tool-registry.js.map +1 -1
- package/dist/env-schema.d.ts +1 -1
- package/dist/env-schema.d.ts.map +1 -1
- package/dist/env-schema.js +10 -12
- package/dist/env-schema.js.map +1 -1
- package/dist/env.d.ts +1 -1
- package/dist/index.d.ts +54 -64
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +78 -301
- package/dist/index.js.map +1 -1
- package/dist/lazy.d.ts +4 -2
- package/dist/lazy.d.ts.map +1 -1
- package/dist/lazy.js +27 -12
- package/dist/lazy.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +9 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/preflight.d.ts +33 -0
- package/dist/preflight.d.ts.map +1 -0
- package/dist/preflight.js +68 -0
- package/dist/preflight.js.map +1 -0
- package/dist/server-main.d.ts +98 -0
- package/dist/server-main.d.ts.map +1 -0
- package/dist/server-main.js +383 -0
- package/dist/server-main.js.map +1 -0
- package/dist/server-runtime.d.ts +20 -5
- package/dist/server-runtime.d.ts.map +1 -1
- package/dist/server-runtime.js +45 -28
- package/dist/server-runtime.js.map +1 -1
- package/dist/utils/quote-join-ids.d.ts +9 -0
- package/dist/utils/quote-join-ids.d.ts.map +1 -0
- package/dist/utils/quote-join-ids.js +11 -0
- package/dist/utils/quote-join-ids.js.map +1 -0
- package/package.json +33 -34
- 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 -54
- package/dist/confluent/tools/handlers/connect/read-connectors-handler.js.map +0 -1
- package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.d.ts.map +0 -1
- package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.js.map +0 -1
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
import { READ_ONLY, ToolCategory, } from "../../../../confluent/tools/base-tools.js";
|
|
2
|
+
import { alwaysEnabled, ToolDisabledReason, } from "../../../../confluent/tools/connection-predicates.js";
|
|
3
|
+
import { ToolMetadataHandler } from "../../../../confluent/tools/tool-metadata-handler.js";
|
|
4
|
+
import { ToolName } from "../../../../confluent/tools/tool-name.js";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
const configHelpArguments = z.object({
|
|
7
|
+
tool: z
|
|
8
|
+
.string()
|
|
9
|
+
.trim()
|
|
10
|
+
.min(1, "tool cannot be empty")
|
|
11
|
+
.describe("The tool name exactly as it appears in tools/list (e.g. 'list-tableflow-topics', 'create-flink-statement') that you want to enable. config-help inspects every configured connection, finds the config gap each one is missing for this tool, and returns the YAML block to add to unlock it."),
|
|
12
|
+
});
|
|
13
|
+
/**
|
|
14
|
+
* Config-coaching tool: given a tool name, returns the YAML each configured
|
|
15
|
+
* connection is missing to enable it.
|
|
16
|
+
*
|
|
17
|
+
* Where {@link ExplainDisabledToolsHandler} answers "which tools are off and
|
|
18
|
+
* why?" across the whole catalog, this tool inverts the question — "I want
|
|
19
|
+
* *this* tool; what do I add to my config?" — and hands back a ready-to-paste
|
|
20
|
+
* YAML fragment derived from the gap between the connection's current shape and
|
|
21
|
+
* the tool's predicate requirement.
|
|
22
|
+
*
|
|
23
|
+
* The mechanism is the same verdict map every diagnostic surface reads:
|
|
24
|
+
* {@link BaseToolHandler.connectionVerdicts} turns the target handler's
|
|
25
|
+
* `predicate` into a per-connection `PredicateResult`; a disabled verdict
|
|
26
|
+
* carries a {@link ToolDisabledReason}, which {@link adviceForReason} maps to
|
|
27
|
+
* the YAML that closes that specific gap. The tool only suggests — it never
|
|
28
|
+
* mutates config, and (per the issue's out-of-scope note) it assumes the
|
|
29
|
+
* schema in `models.ts` keeps the suggested YAML valid rather than re-parsing
|
|
30
|
+
* it.
|
|
31
|
+
*
|
|
32
|
+
* Always enabled (predicate = `alwaysEnabled`): an operator must be able to ask
|
|
33
|
+
* how to fix a config that left the tool they want disabled.
|
|
34
|
+
*
|
|
35
|
+
* The tool catalog is supplied through the thunk that {@link
|
|
36
|
+
* ToolMetadataHandler} owns, for the ESM-cycle reason documented there.
|
|
37
|
+
*/
|
|
38
|
+
export class ConfigHelpHandler extends ToolMetadataHandler {
|
|
39
|
+
handle(runtime, toolArguments) {
|
|
40
|
+
const { tool } = configHelpArguments.parse(toolArguments ?? {});
|
|
41
|
+
const handler = this.findHandler(tool);
|
|
42
|
+
if (handler === undefined) {
|
|
43
|
+
return this.createResponse(`Unknown tool "${tool}". Pass a tool name exactly as it appears in tools/list (e.g. "list-tableflow-topics"). Call list-configured-connections or explain-disabled-tools to discover tool names.`, true);
|
|
44
|
+
}
|
|
45
|
+
const verdicts = handler.connectionVerdicts(runtime);
|
|
46
|
+
const connections = {};
|
|
47
|
+
let alreadyEnabled = false;
|
|
48
|
+
for (const [connId, verdict] of verdicts) {
|
|
49
|
+
if (verdict.enabled) {
|
|
50
|
+
alreadyEnabled = true;
|
|
51
|
+
connections[connId] = { enabled: true };
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
const advice = adviceForReason(verdict.reason, connId);
|
|
55
|
+
connections[connId] = {
|
|
56
|
+
enabled: false,
|
|
57
|
+
currentState: verdict.reason,
|
|
58
|
+
...advice,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const payload = {
|
|
62
|
+
tool,
|
|
63
|
+
alreadyEnabled,
|
|
64
|
+
connections,
|
|
65
|
+
};
|
|
66
|
+
return this.createStructuredResponse(renderAdvice(payload), { ...payload });
|
|
67
|
+
}
|
|
68
|
+
getToolConfig() {
|
|
69
|
+
return {
|
|
70
|
+
name: ToolName.CONFIG_HELP,
|
|
71
|
+
description: 'Call when the user wants to enable or unlock a specific tool (e.g. "how do I enable the tableflow tools?", "what config does create-flink-statement need?", "why isn\'t list-topics showing up — fix it"). Given a tool name, returns a copy-pasteable YAML snippet, per connection, that closes the gap between the current config and what that tool requires. Suggests only — it never edits your config file. Prefer explain-disabled-tools when the question is "what\'s off and why?" across all tools; prefer this when the user has a target tool in mind and wants the exact YAML to add.',
|
|
72
|
+
inputSchema: configHelpArguments.shape,
|
|
73
|
+
annotations: READ_ONLY,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Resolve a tool name (the `tools/list` string, i.e. a {@link ToolName}
|
|
78
|
+
* enum *value*) to its handler. Linear scan over the catalog; the catalog is
|
|
79
|
+
* small and this runs once per invocation.
|
|
80
|
+
*/
|
|
81
|
+
findHandler(tool) {
|
|
82
|
+
for (const [name, handler] of this.getToolNamesAndHandlers()) {
|
|
83
|
+
if (name === tool)
|
|
84
|
+
return handler;
|
|
85
|
+
}
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
category = ToolCategory.McpServerDiagnostics;
|
|
89
|
+
predicate = alwaysEnabled;
|
|
90
|
+
}
|
|
91
|
+
/** Body of an `auth` block (api_key flavor) at the given indentation. */
|
|
92
|
+
function apiKeyAuth(indent, keyVar, secretVar) {
|
|
93
|
+
return [
|
|
94
|
+
`${indent}auth:`,
|
|
95
|
+
`${indent} type: api_key`,
|
|
96
|
+
`${indent} key: "\${${keyVar}}"`,
|
|
97
|
+
`${indent} secret: "\${${secretVar}}"`,
|
|
98
|
+
].join("\n");
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Render a connection id as a YAML mapping key. Connection ids are only
|
|
102
|
+
* constrained to non-empty trimmed strings (`mcpConfigSchema`), so an id
|
|
103
|
+
* containing `:`, spaces, or other YAML-significant characters would produce an
|
|
104
|
+
* invalid key if emitted bare. Plain ids (e.g. `default`) stay unquoted to keep
|
|
105
|
+
* the snippet readable; anything else is double-quoted with embedded quotes and
|
|
106
|
+
* backslashes escaped.
|
|
107
|
+
*/
|
|
108
|
+
function yamlKey(connId) {
|
|
109
|
+
if (/^[A-Za-z0-9_-]+$/.test(connId))
|
|
110
|
+
return connId;
|
|
111
|
+
// A YAML double-quoted scalar accepts the same C-style escapes JSON uses
|
|
112
|
+
// (\\, \", \n, \t, \uXXXX), so JSON.stringify produces a valid quoted key.
|
|
113
|
+
return JSON.stringify(connId);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Wrap a connection-scoped block body in the `connections.<connId>` envelope so
|
|
117
|
+
* the snippet can be pasted at the top level of a config YAML file. `blockBody`
|
|
118
|
+
* lines are expected to start at four-space indentation (one level under
|
|
119
|
+
* ` <connId>:`).
|
|
120
|
+
*/
|
|
121
|
+
function wrap(connId, blockBody) {
|
|
122
|
+
return `connections:\n ${yamlKey(connId)}:\n${blockBody}`;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Map a {@link ToolDisabledReason} to the config change that resolves it. A
|
|
126
|
+
* block- or field-shaped gap maps to a paste-ready YAML snippet mirroring
|
|
127
|
+
* `config.example.yaml`. The non-block reasons carry a `note` instead:
|
|
128
|
+
* - OAuth reasons — OAuth connections have no service blocks; the fix is a
|
|
129
|
+
* different connection type, not a block to add.
|
|
130
|
+
* - {@link ToolDisabledReason.ReadOnlyConnection} — the service is reachable;
|
|
131
|
+
* `read_only` is what blocks a mutating tool, so the fix is removing
|
|
132
|
+
* `read_only: true`.
|
|
133
|
+
* - {@link ToolDisabledReason.NoConnectionsConfigured} and
|
|
134
|
+
* {@link ToolDisabledReason.OperatorBlocked} — emitted by
|
|
135
|
+
* `buildToolGatingReport`, not the per-connection verdict map this handler
|
|
136
|
+
* walks, so they can't reach here; they get a `note` only to keep the
|
|
137
|
+
* switch exhaustive.
|
|
138
|
+
*
|
|
139
|
+
* Exhaustive over `ToolDisabledReason`: every arm returns, and the `default`
|
|
140
|
+
* arm pins `reason` to `never`, so a new reason added to the enum fails
|
|
141
|
+
* `tsc --noEmit` here until it gets a case. The `default` also throws at
|
|
142
|
+
* runtime as a belt-and-suspenders guard against an unmapped reason reaching
|
|
143
|
+
* the spread in `handle()`.
|
|
144
|
+
*/
|
|
145
|
+
function adviceForReason(reason, connId) {
|
|
146
|
+
switch (reason) {
|
|
147
|
+
case ToolDisabledReason.MissingKafkaBlock:
|
|
148
|
+
return {
|
|
149
|
+
suggestedYaml: wrap(connId, [
|
|
150
|
+
` kafka:`,
|
|
151
|
+
` bootstrap_servers: "\${BOOTSTRAP_SERVERS}"`,
|
|
152
|
+
apiKeyAuth(" ", "KAFKA_API_KEY", "KAFKA_API_SECRET"),
|
|
153
|
+
].join("\n")),
|
|
154
|
+
};
|
|
155
|
+
case ToolDisabledReason.MissingKafkaBootstrap:
|
|
156
|
+
return {
|
|
157
|
+
suggestedYaml: wrap(connId, [
|
|
158
|
+
` kafka:`,
|
|
159
|
+
` bootstrap_servers: "\${BOOTSTRAP_SERVERS}"`,
|
|
160
|
+
].join("\n")),
|
|
161
|
+
};
|
|
162
|
+
case ToolDisabledReason.MissingKafkaAuth:
|
|
163
|
+
return {
|
|
164
|
+
suggestedYaml: wrap(connId, [
|
|
165
|
+
` kafka:`,
|
|
166
|
+
apiKeyAuth(" ", "KAFKA_API_KEY", "KAFKA_API_SECRET"),
|
|
167
|
+
].join("\n")),
|
|
168
|
+
};
|
|
169
|
+
case ToolDisabledReason.MissingKafkaRestEndpoint:
|
|
170
|
+
return {
|
|
171
|
+
suggestedYaml: wrap(connId, [` kafka:`, ` rest_endpoint: "\${KAFKA_REST_ENDPOINT}"`].join("\n")),
|
|
172
|
+
};
|
|
173
|
+
case ToolDisabledReason.MissingSchemaRegistryBlock:
|
|
174
|
+
return {
|
|
175
|
+
suggestedYaml: wrap(connId, [
|
|
176
|
+
` schema_registry:`,
|
|
177
|
+
` endpoint: "\${SCHEMA_REGISTRY_ENDPOINT}"`,
|
|
178
|
+
apiKeyAuth(" ", "SCHEMA_REGISTRY_API_KEY", "SCHEMA_REGISTRY_API_SECRET"),
|
|
179
|
+
].join("\n")),
|
|
180
|
+
};
|
|
181
|
+
case ToolDisabledReason.MissingSchemaRegistryApiKeyAuth:
|
|
182
|
+
return {
|
|
183
|
+
suggestedYaml: wrap(connId, [
|
|
184
|
+
` schema_registry:`,
|
|
185
|
+
apiKeyAuth(" ", "SCHEMA_REGISTRY_API_KEY", "SCHEMA_REGISTRY_API_SECRET"),
|
|
186
|
+
].join("\n")),
|
|
187
|
+
};
|
|
188
|
+
case ToolDisabledReason.MissingConfluentCloudBlock:
|
|
189
|
+
return {
|
|
190
|
+
suggestedYaml: wrap(connId, [
|
|
191
|
+
` confluent_cloud:`,
|
|
192
|
+
apiKeyAuth(" ", "CONFLUENT_CLOUD_API_KEY", "CONFLUENT_CLOUD_API_SECRET"),
|
|
193
|
+
].join("\n")),
|
|
194
|
+
};
|
|
195
|
+
case ToolDisabledReason.MissingFlinkBlock:
|
|
196
|
+
return {
|
|
197
|
+
suggestedYaml: wrap(connId, [
|
|
198
|
+
` flink:`,
|
|
199
|
+
` endpoint: "\${FLINK_REST_ENDPOINT}"`,
|
|
200
|
+
apiKeyAuth(" ", "FLINK_API_KEY", "FLINK_API_SECRET"),
|
|
201
|
+
` organization_id: "\${FLINK_ORG_ID}"`,
|
|
202
|
+
` environment_id: "\${FLINK_ENV_ID}"`,
|
|
203
|
+
` compute_pool_id: "\${FLINK_COMPUTE_POOL_ID}"`,
|
|
204
|
+
].join("\n")),
|
|
205
|
+
};
|
|
206
|
+
case ToolDisabledReason.MissingTelemetryBlock:
|
|
207
|
+
return {
|
|
208
|
+
suggestedYaml: wrap(connId, [
|
|
209
|
+
` telemetry:`,
|
|
210
|
+
apiKeyAuth(" ", "TELEMETRY_API_KEY", "TELEMETRY_API_SECRET"),
|
|
211
|
+
].join("\n")),
|
|
212
|
+
};
|
|
213
|
+
case ToolDisabledReason.MissingTableflowBlock:
|
|
214
|
+
return {
|
|
215
|
+
suggestedYaml: wrap(connId, [
|
|
216
|
+
` tableflow:`,
|
|
217
|
+
apiKeyAuth(" ", "TABLEFLOW_API_KEY", "TABLEFLOW_API_SECRET"),
|
|
218
|
+
].join("\n")),
|
|
219
|
+
};
|
|
220
|
+
case ToolDisabledReason.OAuthNoServiceBlocks:
|
|
221
|
+
return {
|
|
222
|
+
note: `Connection "${connId}" is an OAuth connection, which carries no service blocks. This tool reads a service block that OAuth cannot provide, so it is not reachable on an OAuth connection — add a direct (api_key) connection with the required block instead.`,
|
|
223
|
+
};
|
|
224
|
+
case ToolDisabledReason.OAuthNotDirectCapable:
|
|
225
|
+
return {
|
|
226
|
+
note: `Connection "${connId}" is an OAuth connection. This tool requires a direct (api_key) connection and cannot run against OAuth — switch to a direct connection carrying the required block.`,
|
|
227
|
+
};
|
|
228
|
+
case ToolDisabledReason.ReadOnlyConnection:
|
|
229
|
+
return {
|
|
230
|
+
note: `Connection "${connId}" reaches this tool's service but is marked read_only, which blocks state-mutating tools. Remove "read_only: true" to enable it.`,
|
|
231
|
+
};
|
|
232
|
+
case ToolDisabledReason.NoConnectionsConfigured:
|
|
233
|
+
return {
|
|
234
|
+
note: `No connections are configured, so there is nothing to enable this tool against. Add a connection to your config first.`,
|
|
235
|
+
};
|
|
236
|
+
case ToolDisabledReason.OperatorBlocked:
|
|
237
|
+
return {
|
|
238
|
+
note: `This tool is excluded by the operator's allow/block-list, which is set at server launch rather than in connection config. Ask whoever runs the MCP server to adjust the tool allow/block-list.`,
|
|
239
|
+
};
|
|
240
|
+
default: {
|
|
241
|
+
const exhaustive = reason;
|
|
242
|
+
throw new Error(`Unmapped ToolDisabledReason: ${String(exhaustive)}`);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Human-readable rendering of the advice payload. The structured payload is
|
|
248
|
+
* authoritative; this text is the at-a-glance view. Handler tests pin the
|
|
249
|
+
* already-enabled and per-connection headers so the format stays stable.
|
|
250
|
+
*/
|
|
251
|
+
function renderAdvice(payload) {
|
|
252
|
+
const { tool, connections } = payload;
|
|
253
|
+
const entries = Object.entries(connections);
|
|
254
|
+
if (entries.length === 0) {
|
|
255
|
+
return `No connections are configured, so there is nothing to enable "${tool}" against. Add a connection to your config first.`;
|
|
256
|
+
}
|
|
257
|
+
const enabledIds = entries
|
|
258
|
+
.filter(([, advice]) => advice.enabled)
|
|
259
|
+
.map(([id]) => id)
|
|
260
|
+
.sort((a, b) => a.localeCompare(b));
|
|
261
|
+
const disabledEntries = entries.filter(([, advice]) => !advice.enabled);
|
|
262
|
+
// Fully enabled: every connection already runs the tool, so there's
|
|
263
|
+
// genuinely nothing to change.
|
|
264
|
+
if (disabledEntries.length === 0) {
|
|
265
|
+
return `Tool "${tool}" is already enabled on connection(s): ${enabledIds.join(", ")}. No config change needed.`;
|
|
266
|
+
}
|
|
267
|
+
const blocks = disabledEntries.map(([connId, advice]) => {
|
|
268
|
+
const header = ` connection "${connId}" — ${advice.currentState ?? "disabled"}`;
|
|
269
|
+
if (advice.suggestedYaml !== undefined) {
|
|
270
|
+
// Indent the YAML two spaces so it reads as a nested block under the
|
|
271
|
+
// connection header rather than as top-level config.
|
|
272
|
+
const indented = advice.suggestedYaml
|
|
273
|
+
.split("\n")
|
|
274
|
+
.map((line) => (line.length > 0 ? ` ${line}` : line))
|
|
275
|
+
.join("\n");
|
|
276
|
+
return `${header}\n Add to your config YAML:\n\n${indented}`;
|
|
277
|
+
}
|
|
278
|
+
return `${header}\n ${advice.note ?? ""}`;
|
|
279
|
+
});
|
|
280
|
+
// Partially enabled: enabled on some connections but still missing config on
|
|
281
|
+
// others. Don't claim "no config change needed" — name the enabled ones, then
|
|
282
|
+
// give the YAML for the connections that still need it.
|
|
283
|
+
if (enabledIds.length > 0) {
|
|
284
|
+
return [
|
|
285
|
+
`Tool "${tool}" is already enabled on connection(s): ${enabledIds.join(", ")}, but still disabled on ${disabledEntries.length} other connection(s). To enable it there too:`,
|
|
286
|
+
"",
|
|
287
|
+
blocks.join("\n\n"),
|
|
288
|
+
].join("\n");
|
|
289
|
+
}
|
|
290
|
+
// Disabled everywhere.
|
|
291
|
+
return [
|
|
292
|
+
`Tool "${tool}" is disabled on all ${entries.length} configured connection(s). To enable it:`,
|
|
293
|
+
"",
|
|
294
|
+
blocks.join("\n\n"),
|
|
295
|
+
].join("\n");
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=config-help-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-help-handler.js","sourceRoot":"","sources":["../../../../../src/confluent/tools/handlers/diagnostics/config-help-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { CallToolResult } from "../../../../confluent/schema.js";
|
|
2
|
+
import { ToolCategory, ToolConfig } from "../../../../confluent/tools/base-tools.js";
|
|
3
|
+
import { ToolMetadataHandler } from "../../../../confluent/tools/tool-metadata-handler.js";
|
|
4
|
+
import { ServerRuntime } from "../../../../server-runtime.js";
|
|
5
|
+
/**
|
|
6
|
+
* Discovery tool: the per-connection counterpart to `list-configured-connections`.
|
|
7
|
+
* Given one `connectionId`, returns its non-secret config card plus which
|
|
8
|
+
* connection-routable tools are enabled on it and, for those that aren't, the
|
|
9
|
+
* reason each is gated off.
|
|
10
|
+
*
|
|
11
|
+
* The enabled/disabled split is read from each handler's
|
|
12
|
+
* {@link import("../../../../confluent/tools/base-tools.js").ToolHandler.connectionVerdicts}
|
|
13
|
+
* indexed at the requested connection — the same source `explain-disabled-tools`
|
|
14
|
+
* consumes. The read-only overlay therefore needs no special-casing here: a
|
|
15
|
+
* mutating tool on a `read_only` connection surfaces in the
|
|
16
|
+
* {@link ToolDisabledReason.ReadOnlyConnection} bucket automatically, kept
|
|
17
|
+
* distinct from the service-block-missing buckets, and the text summary renders
|
|
18
|
+
* that bucket affirmatively as the set of writes the flag suppresses.
|
|
19
|
+
*
|
|
20
|
+
* Always enabled (predicate is `alwaysEnabled`) so an operator can introspect a
|
|
21
|
+
* connection even when its config left every routable tool disabled. The
|
|
22
|
+
* connection-routability filter and the catalog thunk both come from
|
|
23
|
+
* {@link ToolMetadataHandler}.
|
|
24
|
+
*/
|
|
25
|
+
export declare class DescribeConfiguredConnectionHandler extends ToolMetadataHandler {
|
|
26
|
+
handle(runtime: ServerRuntime, toolArguments?: Record<string, unknown>): CallToolResult;
|
|
27
|
+
getToolConfig(): ToolConfig;
|
|
28
|
+
readonly category = ToolCategory.McpServerDiagnostics;
|
|
29
|
+
readonly predicate: import("../../../../confluent/tools/connection-predicates.js").ConnectionPredicate;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=describe-configured-connection-handler.d.ts.map
|
package/dist/confluent/tools/handlers/diagnostics/describe-configured-connection-handler.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-configured-connection-handler.d.ts","sourceRoot":"","sources":["../../../../../src/confluent/tools/handlers/diagnostics/describe-configured-connection-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAEL,YAAY,EACZ,UAAU,EACX,MAAM,oCAAoC,CAAC;AAM5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AA8BvD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,mCAAoC,SAAQ,mBAAmB;IAC1E,MAAM,CACJ,OAAO,EAAE,aAAa,EACtB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACtC,cAAc;IAmDjB,aAAa,IAAI,UAAU;IAU3B,QAAQ,CAAC,QAAQ,qCAAqC;IACtD,QAAQ,CAAC,SAAS,8EAAiB;CACpC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { READ_ONLY, ToolCategory, } from "../../../../confluent/tools/base-tools.js";
|
|
2
|
+
import { alwaysEnabled, ToolDisabledReason, } from "../../../../confluent/tools/connection-predicates.js";
|
|
3
|
+
import { buildConnectionCard } from "../../../../confluent/tools/handlers/diagnostics/describe-fields.js";
|
|
4
|
+
import { ToolMetadataHandler } from "../../../../confluent/tools/tool-metadata-handler.js";
|
|
5
|
+
import { ToolName } from "../../../../confluent/tools/tool-name.js";
|
|
6
|
+
import { quoteJoinIds } from "../../../../utils/quote-join-ids.js";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
const describeConfiguredConnectionArguments = z.object({
|
|
9
|
+
connectionId: z
|
|
10
|
+
.string()
|
|
11
|
+
.min(1, "connectionId cannot be empty")
|
|
12
|
+
.describe("The id of the configured connection to describe. One of the keys reported by 'list-configured-connections'."),
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* Discovery tool: the per-connection counterpart to `list-configured-connections`.
|
|
16
|
+
* Given one `connectionId`, returns its non-secret config card plus which
|
|
17
|
+
* connection-routable tools are enabled on it and, for those that aren't, the
|
|
18
|
+
* reason each is gated off.
|
|
19
|
+
*
|
|
20
|
+
* The enabled/disabled split is read from each handler's
|
|
21
|
+
* {@link import("../../../../confluent/tools/base-tools.js").ToolHandler.connectionVerdicts}
|
|
22
|
+
* indexed at the requested connection — the same source `explain-disabled-tools`
|
|
23
|
+
* consumes. The read-only overlay therefore needs no special-casing here: a
|
|
24
|
+
* mutating tool on a `read_only` connection surfaces in the
|
|
25
|
+
* {@link ToolDisabledReason.ReadOnlyConnection} bucket automatically, kept
|
|
26
|
+
* distinct from the service-block-missing buckets, and the text summary renders
|
|
27
|
+
* that bucket affirmatively as the set of writes the flag suppresses.
|
|
28
|
+
*
|
|
29
|
+
* Always enabled (predicate is `alwaysEnabled`) so an operator can introspect a
|
|
30
|
+
* connection even when its config left every routable tool disabled. The
|
|
31
|
+
* connection-routability filter and the catalog thunk both come from
|
|
32
|
+
* {@link ToolMetadataHandler}.
|
|
33
|
+
*/
|
|
34
|
+
export class DescribeConfiguredConnectionHandler extends ToolMetadataHandler {
|
|
35
|
+
handle(runtime, toolArguments) {
|
|
36
|
+
const { connectionId } = describeConfiguredConnectionArguments.parse(toolArguments ?? {});
|
|
37
|
+
const conn = runtime.config.connections[connectionId];
|
|
38
|
+
if (conn === undefined) {
|
|
39
|
+
return this.createResponse(`Unknown connection id "${connectionId}". Configured connections: ${quoteJoinIds(runtime.config.getConnectionIds()) || "none"}.`, true);
|
|
40
|
+
}
|
|
41
|
+
const { scalars, blocks } = buildConnectionCard(conn);
|
|
42
|
+
const enabledTools = [];
|
|
43
|
+
const disabledTools = {};
|
|
44
|
+
for (const [name, handler] of this.connectionRoutableTools(runtime)) {
|
|
45
|
+
// Every configured connection has a verdict (connectionVerdicts iterates
|
|
46
|
+
// runtime.config.connections), so the lookup is always defined.
|
|
47
|
+
const verdict = handler.connectionVerdicts(runtime).get(connectionId);
|
|
48
|
+
if (verdict.enabled) {
|
|
49
|
+
enabledTools.push(name);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
const bucket = disabledTools[verdict.reason] ?? [];
|
|
53
|
+
disabledTools[verdict.reason] = bucket;
|
|
54
|
+
bucket.push(name);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
enabledTools.sort((a, b) => a.localeCompare(b));
|
|
58
|
+
for (const tools of Object.values(disabledTools)) {
|
|
59
|
+
tools.sort((a, b) => a.localeCompare(b));
|
|
60
|
+
}
|
|
61
|
+
const description = {
|
|
62
|
+
connectionId,
|
|
63
|
+
...scalars,
|
|
64
|
+
readOnly: conn.read_only === true,
|
|
65
|
+
blocks,
|
|
66
|
+
enabledTools,
|
|
67
|
+
disabledTools,
|
|
68
|
+
};
|
|
69
|
+
return this.createStructuredResponse(renderCard(description, conn.type), description);
|
|
70
|
+
}
|
|
71
|
+
getToolConfig() {
|
|
72
|
+
return {
|
|
73
|
+
name: ToolName.DESCRIBE_CONFIGURED_CONNECTION,
|
|
74
|
+
description: "Describe one configured connection by id: its non-secret config (type, endpoints, resource ids — never credentials), whether it is read-only, the tools you can invoke against it, and, for tools that are unavailable on it, the config gap or policy keeping each one off. Pass the connection id from 'list-configured-connections'. Call this to learn what a specific connection supports before routing a tool call to it.",
|
|
75
|
+
inputSchema: describeConfiguredConnectionArguments.shape,
|
|
76
|
+
annotations: READ_ONLY,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
category = ToolCategory.McpServerDiagnostics;
|
|
80
|
+
predicate = alwaysEnabled;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Human-readable summary of the connection card. The structured payload is
|
|
84
|
+
* authoritative; this text is the at-a-glance view. The read-only suppressed
|
|
85
|
+
* line reads the {@link ToolDisabledReason.ReadOnlyConnection} bucket directly,
|
|
86
|
+
* so it surfaces with no enum-specific branching beyond that one key.
|
|
87
|
+
*/
|
|
88
|
+
function renderCard(card, type) {
|
|
89
|
+
const lines = [];
|
|
90
|
+
const readOnlyMarker = card.readOnly ? ", read-only" : "";
|
|
91
|
+
lines.push(`Connection "${card.connectionId}" (${type}${readOnlyMarker})`);
|
|
92
|
+
const description = card.description;
|
|
93
|
+
if (typeof description === "string") {
|
|
94
|
+
lines.push(`Description: ${description}`);
|
|
95
|
+
}
|
|
96
|
+
const blockNames = Object.keys(card.blocks).sort((a, b) => a.localeCompare(b));
|
|
97
|
+
if (blockNames.length > 0) {
|
|
98
|
+
lines.push(`Configured blocks: ${blockNames.join(", ")}`);
|
|
99
|
+
}
|
|
100
|
+
const enabledCount = card.enabledTools.length;
|
|
101
|
+
lines.push(`${enabledCount} tool${enabledCount === 1 ? "" : "s"} enabled${enabledCount > 0 ? `: ${card.enabledTools.join(", ")}` : ""}`);
|
|
102
|
+
const suppressed = card.disabledTools[ToolDisabledReason.ReadOnlyConnection];
|
|
103
|
+
if (card.readOnly && suppressed !== undefined && suppressed.length > 0) {
|
|
104
|
+
lines.push(`${suppressed.length} mutating tool${suppressed.length === 1 ? "" : "s"} suppressed by read_only: ${suppressed.join(", ")}`);
|
|
105
|
+
}
|
|
106
|
+
const disabledEntries = Object.entries(card.disabledTools).sort(([a], [b]) => a.localeCompare(b));
|
|
107
|
+
if (disabledEntries.length > 0) {
|
|
108
|
+
const disabledCount = disabledEntries.reduce((sum, [, tools]) => sum + tools.length, 0);
|
|
109
|
+
lines.push(`${disabledCount} tool${disabledCount === 1 ? "" : "s"} disabled:`);
|
|
110
|
+
for (const [reason, tools] of disabledEntries) {
|
|
111
|
+
lines.push(` ${reason} (${tools.length}): ${tools.join(", ")}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return lines.join("\n");
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=describe-configured-connection-handler.js.map
|
package/dist/confluent/tools/handlers/diagnostics/describe-configured-connection-handler.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-configured-connection-handler.js","sourceRoot":"","sources":["../../../../../src/confluent/tools/handlers/diagnostics/describe-configured-connection-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { ConfluentCloudDirectConfig, ConnectionConfig, DirectConnectionConfig, FlinkDirectConfig, KafkaDirectConfig, OAuthConnectionConfig, SchemaRegistryDirectConfig, TableflowDirectConfig, TelemetryDirectConfig } from "../../../../config/models.js";
|
|
2
|
+
/**
|
|
3
|
+
* How the `describe-configured-connection` card treats one connection-config
|
|
4
|
+
* field. The visibility maps below are keyed `Record<keyof T, FieldVisibility>`
|
|
5
|
+
* over each connection arm and service block, so adding a config field fails
|
|
6
|
+
* `tsc --noEmit` (which runs in the pre-push hook and CI) until it is
|
|
7
|
+
* classified here — a new knob can never ship without a deliberate
|
|
8
|
+
* surface/withhold decision, and a secret-leak audit stays a single-file review.
|
|
9
|
+
*
|
|
10
|
+
* - `public` — non-secret scalar; surfaced in the card.
|
|
11
|
+
* - `secret` — credential material (`auth` blocks); never surfaced. Audit these.
|
|
12
|
+
* - `withheld` — non-secret but deliberately not surfaced: either a structured /
|
|
13
|
+
* opaque value (`extra_properties`) or one the card surfaces by other means
|
|
14
|
+
* (`read_only`, echoed as the coerced top-level `readOnly` boolean instead).
|
|
15
|
+
* - `block` — a nested service block; surfaced via its own map in
|
|
16
|
+
* {@link SERVICE_BLOCK_VISIBILITY}. Only appears at the connection level.
|
|
17
|
+
*/
|
|
18
|
+
export type FieldVisibility = "public" | "secret" | "withheld" | "block";
|
|
19
|
+
export declare const KAFKA_FIELD_VISIBILITY: Readonly<Record<keyof KafkaDirectConfig, FieldVisibility>>;
|
|
20
|
+
export declare const SCHEMA_REGISTRY_FIELD_VISIBILITY: Readonly<Record<keyof SchemaRegistryDirectConfig, FieldVisibility>>;
|
|
21
|
+
export declare const CONFLUENT_CLOUD_FIELD_VISIBILITY: Readonly<Record<keyof ConfluentCloudDirectConfig, FieldVisibility>>;
|
|
22
|
+
export declare const TABLEFLOW_FIELD_VISIBILITY: Readonly<Record<keyof TableflowDirectConfig, FieldVisibility>>;
|
|
23
|
+
export declare const TELEMETRY_FIELD_VISIBILITY: Readonly<Record<keyof TelemetryDirectConfig, FieldVisibility>>;
|
|
24
|
+
export declare const FLINK_FIELD_VISIBILITY: Readonly<Record<keyof FlinkDirectConfig, FieldVisibility>>;
|
|
25
|
+
export declare const DIRECT_CONNECTION_FIELD_VISIBILITY: Readonly<Record<keyof DirectConnectionConfig, FieldVisibility>>;
|
|
26
|
+
export declare const OAUTH_CONNECTION_FIELD_VISIBILITY: Readonly<Record<keyof OAuthConnectionConfig, FieldVisibility>>;
|
|
27
|
+
/**
|
|
28
|
+
* Field-visibility map for each direct-connection service block, keyed by the
|
|
29
|
+
* block's connection-field name. The keys are exactly the
|
|
30
|
+
* {@link DIRECT_CONNECTION_FIELD_VISIBILITY} entries classified `"block"`
|
|
31
|
+
* (pinned by the drift-catch test in `describe-fields.test.ts`).
|
|
32
|
+
*/
|
|
33
|
+
export declare const SERVICE_BLOCK_VISIBILITY: Readonly<Record<string, Readonly<Record<string, FieldVisibility>>>>;
|
|
34
|
+
/**
|
|
35
|
+
* The config-derived portion of a `describe-configured-connection` card:
|
|
36
|
+
* `scalars` holds the connection's `public` connection-level fields (e.g.
|
|
37
|
+
* `type`, `description`, and OAuth's `ccloud_env` / `kafka_debug`); `blocks`
|
|
38
|
+
* maps each present service block to its `public` fields. Secrets and
|
|
39
|
+
* `withheld` fields never appear in either.
|
|
40
|
+
*/
|
|
41
|
+
export interface ConnectionCard {
|
|
42
|
+
readonly scalars: Record<string, unknown>;
|
|
43
|
+
readonly blocks: Record<string, Record<string, unknown>>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Project a connection into its non-secret card, driven entirely by the
|
|
47
|
+
* visibility maps. OAuth connections carry no service blocks, so `blocks` is
|
|
48
|
+
* empty for them; the `public`/`secret`/`withheld`/`block` switch is the single
|
|
49
|
+
* place the surface/withhold decision is enforced at runtime.
|
|
50
|
+
*/
|
|
51
|
+
export declare function buildConnectionCard(conn: ConnectionConfig): ConnectionCard;
|
|
52
|
+
//# sourceMappingURL=describe-fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-fields.d.ts","sourceRoot":"","sources":["../../../../../src/confluent/tools/handlers/diagnostics/describe-fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,0BAA0B,EAC1B,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAEzE,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAC3C,MAAM,CAAC,MAAM,iBAAiB,EAAE,eAAe,CAAC,CAUjD,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,QAAQ,CACrD,MAAM,CAAC,MAAM,0BAA0B,EAAE,eAAe,CAAC,CAI1D,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,QAAQ,CACrD,MAAM,CAAC,MAAM,0BAA0B,EAAE,eAAe,CAAC,CAK1D,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAC/C,MAAM,CAAC,MAAM,qBAAqB,EAAE,eAAe,CAAC,CAGrD,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAC/C,MAAM,CAAC,MAAM,qBAAqB,EAAE,eAAe,CAAC,CAIrD,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAC3C,MAAM,CAAC,MAAM,iBAAiB,EAAE,eAAe,CAAC,CASjD,CAAC;AAEF,eAAO,MAAM,kCAAkC,EAAE,QAAQ,CACvD,MAAM,CAAC,MAAM,sBAAsB,EAAE,eAAe,CAAC,CAatD,CAAC;AAEF,eAAO,MAAM,iCAAiC,EAAE,QAAQ,CACtD,MAAM,CAAC,MAAM,qBAAqB,EAAE,eAAe,CAAC,CAOrD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAC7C,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAQ1D,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC1D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,cAAc,CAmC1E"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
export const KAFKA_FIELD_VISIBILITY = {
|
|
2
|
+
bootstrap_servers: "public",
|
|
3
|
+
rest_endpoint: "public",
|
|
4
|
+
cluster_id: "public",
|
|
5
|
+
env_id: "public",
|
|
6
|
+
auth: "secret",
|
|
7
|
+
// Free-form librdkafka property bag; can carry credential-ish values, so it
|
|
8
|
+
// stays unsurfaced even though it is not inherently a secret.
|
|
9
|
+
extra_properties: "withheld",
|
|
10
|
+
};
|
|
11
|
+
export const SCHEMA_REGISTRY_FIELD_VISIBILITY = {
|
|
12
|
+
endpoint: "public",
|
|
13
|
+
auth: "secret",
|
|
14
|
+
};
|
|
15
|
+
export const CONFLUENT_CLOUD_FIELD_VISIBILITY = {
|
|
16
|
+
endpoint: "public",
|
|
17
|
+
organization_id: "public",
|
|
18
|
+
auth: "secret",
|
|
19
|
+
};
|
|
20
|
+
export const TABLEFLOW_FIELD_VISIBILITY = {
|
|
21
|
+
auth: "secret",
|
|
22
|
+
};
|
|
23
|
+
export const TELEMETRY_FIELD_VISIBILITY = {
|
|
24
|
+
endpoint: "public",
|
|
25
|
+
auth: "secret",
|
|
26
|
+
};
|
|
27
|
+
export const FLINK_FIELD_VISIBILITY = {
|
|
28
|
+
endpoint: "public",
|
|
29
|
+
environment_id: "public",
|
|
30
|
+
organization_id: "public",
|
|
31
|
+
compute_pool_id: "public",
|
|
32
|
+
catalog_name: "public",
|
|
33
|
+
database_name: "public",
|
|
34
|
+
auth: "secret",
|
|
35
|
+
};
|
|
36
|
+
export const DIRECT_CONNECTION_FIELD_VISIBILITY = {
|
|
37
|
+
type: "public",
|
|
38
|
+
description: "public",
|
|
39
|
+
// Echoed as the coerced top-level `readOnly` boolean by the handler, so the
|
|
40
|
+
// raw snake_case field is withheld from the generic scalar pass.
|
|
41
|
+
read_only: "withheld",
|
|
42
|
+
kafka: "block",
|
|
43
|
+
schema_registry: "block",
|
|
44
|
+
confluent_cloud: "block",
|
|
45
|
+
tableflow: "block",
|
|
46
|
+
telemetry: "block",
|
|
47
|
+
flink: "block",
|
|
48
|
+
};
|
|
49
|
+
export const OAUTH_CONNECTION_FIELD_VISIBILITY = {
|
|
50
|
+
type: "public",
|
|
51
|
+
description: "public",
|
|
52
|
+
read_only: "withheld",
|
|
53
|
+
ccloud_env: "public",
|
|
54
|
+
kafka_debug: "public",
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Field-visibility map for each direct-connection service block, keyed by the
|
|
58
|
+
* block's connection-field name. The keys are exactly the
|
|
59
|
+
* {@link DIRECT_CONNECTION_FIELD_VISIBILITY} entries classified `"block"`
|
|
60
|
+
* (pinned by the drift-catch test in `describe-fields.test.ts`).
|
|
61
|
+
*/
|
|
62
|
+
export const SERVICE_BLOCK_VISIBILITY = {
|
|
63
|
+
kafka: KAFKA_FIELD_VISIBILITY,
|
|
64
|
+
schema_registry: SCHEMA_REGISTRY_FIELD_VISIBILITY,
|
|
65
|
+
confluent_cloud: CONFLUENT_CLOUD_FIELD_VISIBILITY,
|
|
66
|
+
tableflow: TABLEFLOW_FIELD_VISIBILITY,
|
|
67
|
+
telemetry: TELEMETRY_FIELD_VISIBILITY,
|
|
68
|
+
flink: FLINK_FIELD_VISIBILITY,
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Project a connection into its non-secret card, driven entirely by the
|
|
72
|
+
* visibility maps. OAuth connections carry no service blocks, so `blocks` is
|
|
73
|
+
* empty for them; the `public`/`secret`/`withheld`/`block` switch is the single
|
|
74
|
+
* place the surface/withhold decision is enforced at runtime.
|
|
75
|
+
*/
|
|
76
|
+
export function buildConnectionCard(conn) {
|
|
77
|
+
const connectionMap = conn.type === "oauth"
|
|
78
|
+
? OAUTH_CONNECTION_FIELD_VISIBILITY
|
|
79
|
+
: DIRECT_CONNECTION_FIELD_VISIBILITY;
|
|
80
|
+
const fields = conn;
|
|
81
|
+
const scalars = {};
|
|
82
|
+
const blocks = {};
|
|
83
|
+
for (const [key, visibility] of Object.entries(connectionMap)) {
|
|
84
|
+
const value = fields[key];
|
|
85
|
+
switch (visibility) {
|
|
86
|
+
case "public":
|
|
87
|
+
if (value !== undefined)
|
|
88
|
+
scalars[key] = value;
|
|
89
|
+
break;
|
|
90
|
+
case "block":
|
|
91
|
+
if (value !== undefined) {
|
|
92
|
+
blocks[key] = projectBlock(SERVICE_BLOCK_VISIBILITY[key], value);
|
|
93
|
+
}
|
|
94
|
+
break;
|
|
95
|
+
case "secret":
|
|
96
|
+
case "withheld":
|
|
97
|
+
break;
|
|
98
|
+
default:
|
|
99
|
+
throw new Error(`Wacky -- unhandled field visibility "${visibility}" for connection field "${key}"`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return { scalars, blocks };
|
|
103
|
+
}
|
|
104
|
+
/** Project one service block to the `public` fields it actually carries. */
|
|
105
|
+
function projectBlock(blockMap, blockValue) {
|
|
106
|
+
const out = {};
|
|
107
|
+
for (const [field, visibility] of Object.entries(blockMap)) {
|
|
108
|
+
if (visibility === "public" && blockValue[field] !== undefined) {
|
|
109
|
+
out[field] = blockValue[field];
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return out;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=describe-fields.js.map
|