@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.
Files changed (429) hide show
  1. package/README.md +180 -78
  2. package/assets/oauth-templates/callback-success.html +80 -0
  3. package/assets/oauth-templates/styles.html +101 -40
  4. package/config.example.yaml +36 -7
  5. package/config.oauth.example.yaml +14 -1
  6. package/dist/config/env-config.d.ts +9 -3
  7. package/dist/config/env-config.d.ts.map +1 -1
  8. package/dist/config/env-config.js +20 -34
  9. package/dist/config/env-config.js.map +1 -1
  10. package/dist/config/models.d.ts +108 -13
  11. package/dist/config/models.d.ts.map +1 -1
  12. package/dist/config/models.js +54 -37
  13. package/dist/config/models.js.map +1 -1
  14. package/dist/confluent/base-client-manager.d.ts +36 -1
  15. package/dist/confluent/base-client-manager.d.ts.map +1 -1
  16. package/dist/confluent/base-client-manager.js +4 -0
  17. package/dist/confluent/base-client-manager.js.map +1 -1
  18. package/dist/confluent/client-manager.d.ts +14 -0
  19. package/dist/confluent/client-manager.d.ts.map +1 -1
  20. package/dist/confluent/direct-client-manager.d.ts +2 -2
  21. package/dist/confluent/direct-client-manager.d.ts.map +1 -1
  22. package/dist/confluent/direct-client-manager.js +25 -17
  23. package/dist/confluent/direct-client-manager.js.map +1 -1
  24. package/dist/confluent/node-deps.d.ts +1 -0
  25. package/dist/confluent/node-deps.d.ts.map +1 -1
  26. package/dist/confluent/node-deps.js +7 -1
  27. package/dist/confluent/node-deps.js.map +1 -1
  28. package/dist/confluent/oauth/auth0-config.d.ts +26 -4
  29. package/dist/confluent/oauth/auth0-config.d.ts.map +1 -1
  30. package/dist/confluent/oauth/auth0-config.js +59 -19
  31. package/dist/confluent/oauth/auth0-config.js.map +1 -1
  32. package/dist/confluent/oauth/callback-pages.d.ts +9 -1
  33. package/dist/confluent/oauth/callback-pages.d.ts.map +1 -1
  34. package/dist/confluent/oauth/callback-pages.js +14 -5
  35. package/dist/confluent/oauth/callback-pages.js.map +1 -1
  36. package/dist/confluent/oauth/pkce-login.d.ts +20 -1
  37. package/dist/confluent/oauth/pkce-login.d.ts.map +1 -1
  38. package/dist/confluent/oauth/pkce-login.js +118 -9
  39. package/dist/confluent/oauth/pkce-login.js.map +1 -1
  40. package/dist/confluent/oauth/types.d.ts +1 -2
  41. package/dist/confluent/oauth/types.d.ts.map +1 -1
  42. package/dist/confluent/oauth-client-manager.d.ts +7 -4
  43. package/dist/confluent/oauth-client-manager.d.ts.map +1 -1
  44. package/dist/confluent/oauth-client-manager.js +34 -12
  45. package/dist/confluent/oauth-client-manager.js.map +1 -1
  46. package/dist/confluent/oauth-resource-resolvers.d.ts +11 -0
  47. package/dist/confluent/oauth-resource-resolvers.d.ts.map +1 -1
  48. package/dist/confluent/oauth-resource-resolvers.js +24 -0
  49. package/dist/confluent/oauth-resource-resolvers.js.map +1 -1
  50. package/dist/confluent/schema-registry-helper.d.ts +119 -16
  51. package/dist/confluent/schema-registry-helper.d.ts.map +1 -1
  52. package/dist/confluent/schema-registry-helper.js +303 -49
  53. package/dist/confluent/schema-registry-helper.js.map +1 -1
  54. package/dist/confluent/telemetry.d.ts +7 -1
  55. package/dist/confluent/telemetry.d.ts.map +1 -1
  56. package/dist/confluent/telemetry.js +6 -0
  57. package/dist/confluent/telemetry.js.map +1 -1
  58. package/dist/confluent/tools/base-tools.d.ts +207 -21
  59. package/dist/confluent/tools/base-tools.d.ts.map +1 -1
  60. package/dist/confluent/tools/base-tools.js +259 -20
  61. package/dist/confluent/tools/base-tools.js.map +1 -1
  62. package/dist/confluent/tools/cluster-arg-resolvers.d.ts +21 -0
  63. package/dist/confluent/tools/cluster-arg-resolvers.d.ts.map +1 -1
  64. package/dist/confluent/tools/cluster-arg-resolvers.js +45 -0
  65. package/dist/confluent/tools/cluster-arg-resolvers.js.map +1 -1
  66. package/dist/confluent/tools/connection-predicates.d.ts +83 -12
  67. package/dist/confluent/tools/connection-predicates.d.ts.map +1 -1
  68. package/dist/confluent/tools/connection-predicates.js +85 -11
  69. package/dist/confluent/tools/connection-predicates.js.map +1 -1
  70. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts +2 -1
  71. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts.map +1 -1
  72. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.js +37 -4
  73. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.js.map +1 -1
  74. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.d.ts +3 -3
  75. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.d.ts.map +1 -1
  76. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.js +11 -6
  77. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.js.map +1 -1
  78. package/dist/confluent/tools/handlers/catalog/create-topic-tags.d.ts +3 -3
  79. package/dist/confluent/tools/handlers/catalog/create-topic-tags.d.ts.map +1 -1
  80. package/dist/confluent/tools/handlers/catalog/create-topic-tags.js +11 -6
  81. package/dist/confluent/tools/handlers/catalog/create-topic-tags.js.map +1 -1
  82. package/dist/confluent/tools/handlers/catalog/delete-tag.d.ts +3 -3
  83. package/dist/confluent/tools/handlers/catalog/delete-tag.d.ts.map +1 -1
  84. package/dist/confluent/tools/handlers/catalog/delete-tag.js +11 -6
  85. package/dist/confluent/tools/handlers/catalog/delete-tag.js.map +1 -1
  86. package/dist/confluent/tools/handlers/catalog/list-tags.d.ts +4 -4
  87. package/dist/confluent/tools/handlers/catalog/list-tags.d.ts.map +1 -1
  88. package/dist/confluent/tools/handlers/catalog/list-tags.js +16 -7
  89. package/dist/confluent/tools/handlers/catalog/list-tags.js.map +1 -1
  90. package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.d.ts +3 -3
  91. package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.d.ts.map +1 -1
  92. package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.js +11 -6
  93. package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.js.map +1 -1
  94. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.d.ts +2 -1
  95. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.d.ts.map +1 -1
  96. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.js +3 -2
  97. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.js.map +1 -1
  98. package/dist/confluent/tools/handlers/connect/connect-tool-handler.d.ts +22 -9
  99. package/dist/confluent/tools/handlers/connect/connect-tool-handler.d.ts.map +1 -1
  100. package/dist/confluent/tools/handlers/connect/connect-tool-handler.js +35 -11
  101. package/dist/confluent/tools/handlers/connect/connect-tool-handler.js.map +1 -1
  102. package/dist/confluent/tools/handlers/connect/create-connector-handler.d.ts.map +1 -1
  103. package/dist/confluent/tools/handlers/connect/create-connector-handler.js +1 -2
  104. package/dist/confluent/tools/handlers/connect/create-connector-handler.js.map +1 -1
  105. package/dist/confluent/tools/handlers/connect/delete-connector-handler.d.ts.map +1 -1
  106. package/dist/confluent/tools/handlers/connect/delete-connector-handler.js +1 -2
  107. package/dist/confluent/tools/handlers/connect/delete-connector-handler.js.map +1 -1
  108. package/dist/confluent/tools/handlers/connect/{read-connectors-handler.d.ts → get-connector-config-handler.d.ts} +2 -3
  109. package/dist/confluent/tools/handlers/connect/get-connector-config-handler.d.ts.map +1 -0
  110. package/dist/confluent/tools/handlers/connect/get-connector-config-handler.js +34 -0
  111. package/dist/confluent/tools/handlers/connect/get-connector-config-handler.js.map +1 -0
  112. package/dist/confluent/tools/handlers/connect/get-connector-error-recommendations-handler.d.ts +9 -0
  113. package/dist/confluent/tools/handlers/connect/get-connector-error-recommendations-handler.d.ts.map +1 -0
  114. package/dist/confluent/tools/handlers/connect/get-connector-error-recommendations-handler.js +65 -0
  115. package/dist/confluent/tools/handlers/connect/get-connector-error-recommendations-handler.js.map +1 -0
  116. package/dist/confluent/tools/handlers/connect/get-connector-error-summary-handler.d.ts +9 -0
  117. package/dist/confluent/tools/handlers/connect/get-connector-error-summary-handler.d.ts.map +1 -0
  118. package/dist/confluent/tools/handlers/connect/get-connector-error-summary-handler.js +130 -0
  119. package/dist/confluent/tools/handlers/connect/get-connector-error-summary-handler.js.map +1 -0
  120. package/dist/confluent/tools/handlers/connect/get-connector-logs-handler.d.ts +9 -0
  121. package/dist/confluent/tools/handlers/connect/get-connector-logs-handler.d.ts.map +1 -0
  122. package/dist/confluent/tools/handlers/connect/get-connector-logs-handler.js +269 -0
  123. package/dist/confluent/tools/handlers/connect/get-connector-logs-handler.js.map +1 -0
  124. package/dist/confluent/tools/handlers/connect/get-connector-offsets-handler.d.ts +9 -0
  125. package/dist/confluent/tools/handlers/connect/get-connector-offsets-handler.d.ts.map +1 -0
  126. package/dist/confluent/tools/handlers/connect/get-connector-offsets-handler.js +34 -0
  127. package/dist/confluent/tools/handlers/connect/get-connector-offsets-handler.js.map +1 -0
  128. package/dist/confluent/tools/handlers/connect/get-connector-status-handler.d.ts +9 -0
  129. package/dist/confluent/tools/handlers/connect/get-connector-status-handler.d.ts.map +1 -0
  130. package/dist/confluent/tools/handlers/connect/get-connector-status-handler.js +43 -0
  131. package/dist/confluent/tools/handlers/connect/get-connector-status-handler.js.map +1 -0
  132. package/dist/confluent/tools/handlers/connect/get-connector-tasks-handler.d.ts +9 -0
  133. package/dist/confluent/tools/handlers/connect/get-connector-tasks-handler.d.ts.map +1 -0
  134. package/dist/confluent/tools/handlers/connect/get-connector-tasks-handler.js +34 -0
  135. package/dist/confluent/tools/handlers/connect/get-connector-tasks-handler.js.map +1 -0
  136. package/dist/confluent/tools/handlers/connect/list-connectors-handler.d.ts.map +1 -1
  137. package/dist/confluent/tools/handlers/connect/list-connectors-handler.js +1 -2
  138. package/dist/confluent/tools/handlers/connect/list-connectors-handler.js.map +1 -1
  139. package/dist/confluent/tools/handlers/connect/pause-connector-handler.d.ts +9 -0
  140. package/dist/confluent/tools/handlers/connect/pause-connector-handler.d.ts.map +1 -0
  141. package/dist/confluent/tools/handlers/connect/pause-connector-handler.js +34 -0
  142. package/dist/confluent/tools/handlers/connect/pause-connector-handler.js.map +1 -0
  143. package/dist/confluent/tools/handlers/connect/restart-connector-handler.d.ts +9 -0
  144. package/dist/confluent/tools/handlers/connect/restart-connector-handler.d.ts.map +1 -0
  145. package/dist/confluent/tools/handlers/connect/restart-connector-handler.js +34 -0
  146. package/dist/confluent/tools/handlers/connect/restart-connector-handler.js.map +1 -0
  147. package/dist/confluent/tools/handlers/connect/resume-connector-handler.d.ts +9 -0
  148. package/dist/confluent/tools/handlers/connect/resume-connector-handler.d.ts.map +1 -0
  149. package/dist/confluent/tools/handlers/connect/resume-connector-handler.js +34 -0
  150. package/dist/confluent/tools/handlers/connect/resume-connector-handler.js.map +1 -0
  151. package/dist/confluent/tools/handlers/connect/update-connector-config-handler.d.ts +9 -0
  152. package/dist/confluent/tools/handlers/connect/update-connector-config-handler.d.ts.map +1 -0
  153. package/dist/confluent/tools/handlers/connect/update-connector-config-handler.js +43 -0
  154. package/dist/confluent/tools/handlers/connect/update-connector-config-handler.js.map +1 -0
  155. package/dist/confluent/tools/handlers/diagnostics/config-help-handler.d.ts +42 -0
  156. package/dist/confluent/tools/handlers/diagnostics/config-help-handler.d.ts.map +1 -0
  157. package/dist/confluent/tools/handlers/diagnostics/config-help-handler.js +297 -0
  158. package/dist/confluent/tools/handlers/diagnostics/config-help-handler.js.map +1 -0
  159. package/dist/confluent/tools/handlers/diagnostics/describe-configured-connection-handler.d.ts +31 -0
  160. package/dist/confluent/tools/handlers/diagnostics/describe-configured-connection-handler.d.ts.map +1 -0
  161. package/dist/confluent/tools/handlers/diagnostics/describe-configured-connection-handler.js +116 -0
  162. package/dist/confluent/tools/handlers/diagnostics/describe-configured-connection-handler.js.map +1 -0
  163. package/dist/confluent/tools/handlers/diagnostics/describe-fields.d.ts +52 -0
  164. package/dist/confluent/tools/handlers/diagnostics/describe-fields.d.ts.map +1 -0
  165. package/dist/confluent/tools/handlers/diagnostics/describe-fields.js +114 -0
  166. package/dist/confluent/tools/handlers/diagnostics/describe-fields.js.map +1 -0
  167. package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.d.ts +21 -43
  168. package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.d.ts.map +1 -1
  169. package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.js +105 -78
  170. package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.js.map +1 -1
  171. package/dist/confluent/tools/handlers/diagnostics/list-configured-connections-handler.d.ts +27 -0
  172. package/dist/confluent/tools/handlers/diagnostics/list-configured-connections-handler.d.ts.map +1 -0
  173. package/dist/confluent/tools/handlers/diagnostics/list-configured-connections-handler.js +93 -0
  174. package/dist/confluent/tools/handlers/diagnostics/list-configured-connections-handler.js.map +1 -0
  175. package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.d.ts +2 -1
  176. package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.d.ts.map +1 -1
  177. package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.js +2 -1
  178. package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.js.map +1 -1
  179. package/dist/confluent/tools/handlers/docs/search-product-docs-handler.d.ts +2 -1
  180. package/dist/confluent/tools/handlers/docs/search-product-docs-handler.d.ts.map +1 -1
  181. package/dist/confluent/tools/handlers/docs/search-product-docs-handler.js +2 -1
  182. package/dist/confluent/tools/handlers/docs/search-product-docs-handler.js.map +1 -1
  183. package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts +8 -7
  184. package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts.map +1 -1
  185. package/dist/confluent/tools/handlers/environments/list-environments-handler.js +8 -7
  186. package/dist/confluent/tools/handlers/environments/list-environments-handler.js.map +1 -1
  187. package/dist/confluent/tools/handlers/environments/read-environment-handler.d.ts +2 -1
  188. package/dist/confluent/tools/handlers/environments/read-environment-handler.d.ts.map +1 -1
  189. package/dist/confluent/tools/handlers/environments/read-environment-handler.js +3 -2
  190. package/dist/confluent/tools/handlers/environments/read-environment-handler.js.map +1 -1
  191. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts +16 -2
  192. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts.map +1 -1
  193. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js +4 -4
  194. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js.map +1 -1
  195. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.d.ts.map +1 -1
  196. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js +43 -30
  197. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js.map +1 -1
  198. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.d.ts.map +1 -1
  199. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js +43 -30
  200. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js.map +1 -1
  201. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.d.ts.map +1 -1
  202. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js +18 -11
  203. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js.map +1 -1
  204. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.d.ts.map +1 -1
  205. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js +23 -16
  206. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js.map +1 -1
  207. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.d.ts.map +1 -1
  208. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js +23 -16
  209. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js.map +1 -1
  210. package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.d.ts.map +1 -1
  211. package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.js +27 -22
  212. package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.js.map +1 -1
  213. package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.d.ts.map +1 -1
  214. package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.js +20 -12
  215. package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.js.map +1 -1
  216. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.d.ts.map +1 -1
  217. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js +20 -12
  218. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js.map +1 -1
  219. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.d.ts.map +1 -1
  220. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js +20 -18
  221. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js.map +1 -1
  222. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.d.ts.map +1 -1
  223. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js +24 -22
  224. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js.map +1 -1
  225. package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts +15 -1
  226. package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts.map +1 -1
  227. package/dist/confluent/tools/handlers/flink/flink-sql-helper.js +133 -57
  228. package/dist/confluent/tools/handlers/flink/flink-sql-helper.js.map +1 -1
  229. package/dist/confluent/tools/handlers/flink/flink-tool-handler.d.ts +29 -7
  230. package/dist/confluent/tools/handlers/flink/flink-tool-handler.d.ts.map +1 -1
  231. package/dist/confluent/tools/handlers/flink/flink-tool-handler.js +38 -8
  232. package/dist/confluent/tools/handlers/flink/flink-tool-handler.js.map +1 -1
  233. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.d.ts.map +1 -1
  234. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js +20 -12
  235. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js.map +1 -1
  236. package/dist/confluent/tools/handlers/flink/{read-flink-statement-handler.d.ts → get-flink-statement-results-handler.d.ts} +2 -2
  237. package/dist/confluent/tools/handlers/flink/get-flink-statement-results-handler.d.ts.map +1 -0
  238. package/dist/confluent/tools/handlers/flink/{read-flink-statement-handler.js → get-flink-statement-results-handler.js} +30 -22
  239. package/dist/confluent/tools/handlers/flink/get-flink-statement-results-handler.js.map +1 -0
  240. package/dist/confluent/tools/handlers/flink/list-compute-pools-handler.d.ts +10 -0
  241. package/dist/confluent/tools/handlers/flink/list-compute-pools-handler.d.ts.map +1 -0
  242. package/dist/confluent/tools/handlers/flink/list-compute-pools-handler.js +118 -0
  243. package/dist/confluent/tools/handlers/flink/list-compute-pools-handler.js.map +1 -0
  244. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.d.ts.map +1 -1
  245. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js +19 -18
  246. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js.map +1 -1
  247. package/dist/confluent/tools/handlers/kafka/alter-topic-config.d.ts +2 -1
  248. package/dist/confluent/tools/handlers/kafka/alter-topic-config.d.ts.map +1 -1
  249. package/dist/confluent/tools/handlers/kafka/alter-topic-config.js +3 -2
  250. package/dist/confluent/tools/handlers/kafka/alter-topic-config.js.map +1 -1
  251. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.d.ts +223 -28
  252. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.d.ts.map +1 -1
  253. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js +832 -68
  254. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js.map +1 -1
  255. package/dist/confluent/tools/handlers/kafka/consumer-group-enums.d.ts +48 -0
  256. package/dist/confluent/tools/handlers/kafka/consumer-group-enums.d.ts.map +1 -0
  257. package/dist/confluent/tools/handlers/kafka/consumer-group-enums.js +84 -0
  258. package/dist/confluent/tools/handlers/kafka/consumer-group-enums.js.map +1 -0
  259. package/dist/confluent/tools/handlers/kafka/consumer-group-helpers.d.ts +54 -0
  260. package/dist/confluent/tools/handlers/kafka/consumer-group-helpers.d.ts.map +1 -0
  261. package/dist/confluent/tools/handlers/kafka/consumer-group-helpers.js +89 -0
  262. package/dist/confluent/tools/handlers/kafka/consumer-group-helpers.js.map +1 -0
  263. package/dist/confluent/tools/handlers/kafka/create-topics-handler.d.ts +2 -1
  264. package/dist/confluent/tools/handlers/kafka/create-topics-handler.d.ts.map +1 -1
  265. package/dist/confluent/tools/handlers/kafka/create-topics-handler.js +14 -4
  266. package/dist/confluent/tools/handlers/kafka/create-topics-handler.js.map +1 -1
  267. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.d.ts +2 -1
  268. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.d.ts.map +1 -1
  269. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js +3 -2
  270. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js.map +1 -1
  271. package/dist/confluent/tools/handlers/kafka/describe-consumer-group-handler.d.ts +64 -0
  272. package/dist/confluent/tools/handlers/kafka/describe-consumer-group-handler.d.ts.map +1 -0
  273. package/dist/confluent/tools/handlers/kafka/describe-consumer-group-handler.js +140 -0
  274. package/dist/confluent/tools/handlers/kafka/describe-consumer-group-handler.js.map +1 -0
  275. package/dist/confluent/tools/handlers/kafka/get-consumer-group-lag-handler.d.ts +73 -0
  276. package/dist/confluent/tools/handlers/kafka/get-consumer-group-lag-handler.d.ts.map +1 -0
  277. package/dist/confluent/tools/handlers/kafka/get-consumer-group-lag-handler.js +337 -0
  278. package/dist/confluent/tools/handlers/kafka/get-consumer-group-lag-handler.js.map +1 -0
  279. package/dist/confluent/tools/handlers/kafka/get-partition-offsets-handler.d.ts +43 -0
  280. package/dist/confluent/tools/handlers/kafka/get-partition-offsets-handler.d.ts.map +1 -0
  281. package/dist/confluent/tools/handlers/kafka/get-partition-offsets-handler.js +123 -0
  282. package/dist/confluent/tools/handlers/kafka/get-partition-offsets-handler.js.map +1 -0
  283. package/dist/confluent/tools/handlers/kafka/get-topic-config.d.ts +2 -1
  284. package/dist/confluent/tools/handlers/kafka/get-topic-config.d.ts.map +1 -1
  285. package/dist/confluent/tools/handlers/kafka/get-topic-config.js +3 -2
  286. package/dist/confluent/tools/handlers/kafka/get-topic-config.js.map +1 -1
  287. package/dist/confluent/tools/handlers/kafka/list-consumer-groups-handler.d.ts +45 -0
  288. package/dist/confluent/tools/handlers/kafka/list-consumer-groups-handler.d.ts.map +1 -0
  289. package/dist/confluent/tools/handlers/kafka/list-consumer-groups-handler.js +86 -0
  290. package/dist/confluent/tools/handlers/kafka/list-consumer-groups-handler.js.map +1 -0
  291. package/dist/confluent/tools/handlers/kafka/list-topics-handler.d.ts +2 -1
  292. package/dist/confluent/tools/handlers/kafka/list-topics-handler.d.ts.map +1 -1
  293. package/dist/confluent/tools/handlers/kafka/list-topics-handler.js +3 -2
  294. package/dist/confluent/tools/handlers/kafka/list-topics-handler.js.map +1 -1
  295. package/dist/confluent/tools/handlers/kafka/partition-watermarks.d.ts +54 -0
  296. package/dist/confluent/tools/handlers/kafka/partition-watermarks.d.ts.map +1 -0
  297. package/dist/confluent/tools/handlers/kafka/partition-watermarks.js +56 -0
  298. package/dist/confluent/tools/handlers/kafka/partition-watermarks.js.map +1 -0
  299. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.d.ts +13 -5
  300. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.d.ts.map +1 -1
  301. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js +145 -47
  302. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js.map +1 -1
  303. package/dist/confluent/tools/handlers/kafka/topic-metadata.d.ts +18 -0
  304. package/dist/confluent/tools/handlers/kafka/topic-metadata.d.ts.map +1 -0
  305. package/dist/confluent/tools/handlers/kafka/topic-metadata.js +18 -0
  306. package/dist/confluent/tools/handlers/kafka/topic-metadata.js.map +1 -0
  307. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts +3 -3
  308. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts.map +1 -1
  309. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js +5 -4
  310. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js.map +1 -1
  311. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts +3 -3
  312. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts.map +1 -1
  313. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js +8 -5
  314. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js.map +1 -1
  315. package/dist/confluent/tools/handlers/organizations/list-organizations-handler.d.ts +2 -1
  316. package/dist/confluent/tools/handlers/organizations/list-organizations-handler.d.ts.map +1 -1
  317. package/dist/confluent/tools/handlers/organizations/list-organizations-handler.js +4 -2
  318. package/dist/confluent/tools/handlers/organizations/list-organizations-handler.js.map +1 -1
  319. package/dist/confluent/tools/handlers/schema/create-schema-handler.d.ts +10 -0
  320. package/dist/confluent/tools/handlers/schema/create-schema-handler.d.ts.map +1 -0
  321. package/dist/confluent/tools/handlers/schema/create-schema-handler.js +76 -0
  322. package/dist/confluent/tools/handlers/schema/create-schema-handler.js.map +1 -0
  323. package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts +2 -1
  324. package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts.map +1 -1
  325. package/dist/confluent/tools/handlers/schema/delete-schema-handler.js +3 -2
  326. package/dist/confluent/tools/handlers/schema/delete-schema-handler.js.map +1 -1
  327. package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts +2 -1
  328. package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts.map +1 -1
  329. package/dist/confluent/tools/handlers/schema/list-schemas-handler.js +3 -2
  330. package/dist/confluent/tools/handlers/schema/list-schemas-handler.js.map +1 -1
  331. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.d.ts +3 -3
  332. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.d.ts.map +1 -1
  333. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.js +11 -6
  334. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.js.map +1 -1
  335. package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.d.ts +3 -3
  336. package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.d.ts.map +1 -1
  337. package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.js +11 -6
  338. package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.js.map +1 -1
  339. package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.d.ts.map +1 -1
  340. package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.js +2 -2
  341. package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.js.map +1 -1
  342. package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.d.ts.map +1 -1
  343. package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.js +2 -2
  344. package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.js.map +1 -1
  345. package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.d.ts.map +1 -1
  346. package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.js +2 -2
  347. package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.js.map +1 -1
  348. package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.d.ts.map +1 -1
  349. package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.js +2 -2
  350. package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.js.map +1 -1
  351. package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.d.ts.map +1 -1
  352. package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.js +1 -1
  353. package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.js.map +1 -1
  354. package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.d.ts.map +1 -1
  355. package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.js +2 -3
  356. package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.js.map +1 -1
  357. package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.d.ts +17 -11
  358. package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.d.ts.map +1 -1
  359. package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.js +19 -15
  360. package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.js.map +1 -1
  361. package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.d.ts.map +1 -1
  362. package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.js +2 -2
  363. package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.js.map +1 -1
  364. package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.d.ts.map +1 -1
  365. package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.js +2 -2
  366. package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.js.map +1 -1
  367. package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.d.ts.map +1 -1
  368. package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.js +2 -2
  369. package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.js.map +1 -1
  370. package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.d.ts.map +1 -1
  371. package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.js +2 -2
  372. package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.js.map +1 -1
  373. package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.d.ts.map +1 -1
  374. package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.js +1 -1
  375. package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.js.map +1 -1
  376. package/dist/confluent/tools/tool-availability.d.ts +84 -36
  377. package/dist/confluent/tools/tool-availability.d.ts.map +1 -1
  378. package/dist/confluent/tools/tool-availability.js +106 -65
  379. package/dist/confluent/tools/tool-availability.js.map +1 -1
  380. package/dist/confluent/tools/tool-metadata-handler.d.ts +51 -0
  381. package/dist/confluent/tools/tool-metadata-handler.d.ts.map +1 -0
  382. package/dist/confluent/tools/tool-metadata-handler.js +61 -0
  383. package/dist/confluent/tools/tool-metadata-handler.js.map +1 -0
  384. package/dist/confluent/tools/tool-name.d.ts +22 -3
  385. package/dist/confluent/tools/tool-name.d.ts.map +1 -1
  386. package/dist/confluent/tools/tool-name.js +21 -2
  387. package/dist/confluent/tools/tool-name.js.map +1 -1
  388. package/dist/confluent/tools/tool-registry.d.ts +1 -2
  389. package/dist/confluent/tools/tool-registry.d.ts.map +1 -1
  390. package/dist/confluent/tools/tool-registry.js +60 -7
  391. package/dist/confluent/tools/tool-registry.js.map +1 -1
  392. package/dist/env-schema.d.ts +1 -1
  393. package/dist/env-schema.d.ts.map +1 -1
  394. package/dist/env-schema.js +10 -12
  395. package/dist/env-schema.js.map +1 -1
  396. package/dist/env.d.ts +1 -1
  397. package/dist/index.d.ts +54 -64
  398. package/dist/index.d.ts.map +1 -1
  399. package/dist/index.js +78 -301
  400. package/dist/index.js.map +1 -1
  401. package/dist/lazy.d.ts +4 -2
  402. package/dist/lazy.d.ts.map +1 -1
  403. package/dist/lazy.js +27 -12
  404. package/dist/lazy.js.map +1 -1
  405. package/dist/mcp/server.d.ts.map +1 -1
  406. package/dist/mcp/server.js +9 -5
  407. package/dist/mcp/server.js.map +1 -1
  408. package/dist/preflight.d.ts +33 -0
  409. package/dist/preflight.d.ts.map +1 -0
  410. package/dist/preflight.js +68 -0
  411. package/dist/preflight.js.map +1 -0
  412. package/dist/server-main.d.ts +98 -0
  413. package/dist/server-main.d.ts.map +1 -0
  414. package/dist/server-main.js +383 -0
  415. package/dist/server-main.js.map +1 -0
  416. package/dist/server-runtime.d.ts +20 -5
  417. package/dist/server-runtime.d.ts.map +1 -1
  418. package/dist/server-runtime.js +45 -28
  419. package/dist/server-runtime.js.map +1 -1
  420. package/dist/utils/quote-join-ids.d.ts +9 -0
  421. package/dist/utils/quote-join-ids.d.ts.map +1 -0
  422. package/dist/utils/quote-join-ids.js +11 -0
  423. package/dist/utils/quote-join-ids.js.map +1 -0
  424. package/package.json +33 -34
  425. package/dist/confluent/tools/handlers/connect/read-connectors-handler.d.ts.map +0 -1
  426. package/dist/confluent/tools/handlers/connect/read-connectors-handler.js +0 -54
  427. package/dist/confluent/tools/handlers/connect/read-connectors-handler.js.map +0 -1
  428. package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.d.ts.map +0 -1
  429. 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
@@ -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
@@ -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