@confluentinc/mcp-confluent 1.2.2 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (428) hide show
  1. package/README.md +171 -193
  2. package/assets/oauth-templates/callback-failure.html +22 -0
  3. package/assets/oauth-templates/callback-success.html +19 -0
  4. package/assets/oauth-templates/logo.html +91 -0
  5. package/assets/oauth-templates/styles.html +49 -0
  6. package/config.example.yaml +149 -0
  7. package/config.oauth.example.yaml +45 -0
  8. package/dist/cli.d.ts +59 -12
  9. package/dist/cli.d.ts.map +1 -1
  10. package/dist/cli.js +131 -61
  11. package/dist/cli.js.map +1 -1
  12. package/dist/config/env-config.d.ts +33 -0
  13. package/dist/config/env-config.d.ts.map +1 -0
  14. package/dist/config/env-config.js +473 -0
  15. package/dist/config/env-config.js.map +1 -0
  16. package/dist/config/index.d.ts +31 -0
  17. package/dist/config/index.d.ts.map +1 -0
  18. package/dist/config/index.js +76 -0
  19. package/dist/config/index.js.map +1 -0
  20. package/dist/config/interpolation.d.ts +9 -0
  21. package/dist/config/interpolation.d.ts.map +1 -0
  22. package/dist/config/interpolation.js +51 -0
  23. package/dist/config/interpolation.js.map +1 -0
  24. package/dist/config/models.d.ts +396 -0
  25. package/dist/config/models.d.ts.map +1 -0
  26. package/dist/config/models.js +401 -0
  27. package/dist/config/models.js.map +1 -0
  28. package/dist/config/validation.d.ts +9 -0
  29. package/dist/config/validation.d.ts.map +1 -0
  30. package/dist/config/validation.js +46 -0
  31. package/dist/config/validation.js.map +1 -0
  32. package/dist/confluent/base-client-manager.d.ts +100 -0
  33. package/dist/confluent/base-client-manager.d.ts.map +1 -0
  34. package/dist/confluent/base-client-manager.js +188 -0
  35. package/dist/confluent/base-client-manager.js.map +1 -0
  36. package/dist/confluent/client-manager.d.ts +42 -77
  37. package/dist/confluent/client-manager.d.ts.map +1 -1
  38. package/dist/confluent/client-manager.js +5 -213
  39. package/dist/confluent/client-manager.js.map +1 -1
  40. package/dist/confluent/config-telemetry.d.ts +41 -0
  41. package/dist/confluent/config-telemetry.d.ts.map +1 -0
  42. package/dist/confluent/config-telemetry.js +17 -0
  43. package/dist/confluent/config-telemetry.js.map +1 -0
  44. package/dist/confluent/direct-client-manager.d.ts +43 -0
  45. package/dist/confluent/direct-client-manager.d.ts.map +1 -0
  46. package/dist/confluent/direct-client-manager.js +146 -0
  47. package/dist/confluent/direct-client-manager.js.map +1 -0
  48. package/dist/confluent/middleware.d.ts +32 -4
  49. package/dist/confluent/middleware.d.ts.map +1 -1
  50. package/dist/confluent/middleware.js +46 -2
  51. package/dist/confluent/middleware.js.map +1 -1
  52. package/dist/confluent/node-deps.d.ts +32 -39
  53. package/dist/confluent/node-deps.d.ts.map +1 -1
  54. package/dist/confluent/node-deps.js +42 -7
  55. package/dist/confluent/node-deps.js.map +1 -1
  56. package/dist/confluent/oauth/auth-context.d.ts +94 -0
  57. package/dist/confluent/oauth/auth-context.d.ts.map +1 -0
  58. package/dist/confluent/oauth/auth-context.js +323 -0
  59. package/dist/confluent/oauth/auth-context.js.map +1 -0
  60. package/dist/confluent/oauth/auth0-config.d.ts +12 -0
  61. package/dist/confluent/oauth/auth0-config.d.ts.map +1 -0
  62. package/dist/confluent/oauth/auth0-config.js +43 -0
  63. package/dist/confluent/oauth/auth0-config.js.map +1 -0
  64. package/dist/confluent/oauth/callback-pages.d.ts +5 -0
  65. package/dist/confluent/oauth/callback-pages.d.ts.map +1 -0
  66. package/dist/confluent/oauth/callback-pages.js +38 -0
  67. package/dist/confluent/oauth/callback-pages.js.map +1 -0
  68. package/dist/confluent/oauth/crypto-utils.d.ts +16 -0
  69. package/dist/confluent/oauth/crypto-utils.d.ts.map +1 -0
  70. package/dist/confluent/oauth/crypto-utils.js +23 -0
  71. package/dist/confluent/oauth/crypto-utils.js.map +1 -0
  72. package/dist/confluent/oauth/errors.d.ts +27 -0
  73. package/dist/confluent/oauth/errors.d.ts.map +1 -0
  74. package/dist/confluent/oauth/errors.js +6 -0
  75. package/dist/confluent/oauth/errors.js.map +1 -0
  76. package/dist/confluent/oauth/oauth-holder.d.ts +34 -0
  77. package/dist/confluent/oauth/oauth-holder.d.ts.map +1 -0
  78. package/dist/confluent/oauth/oauth-holder.js +155 -0
  79. package/dist/confluent/oauth/oauth-holder.js.map +1 -0
  80. package/dist/confluent/oauth/pkce-login.d.ts +26 -0
  81. package/dist/confluent/oauth/pkce-login.d.ts.map +1 -0
  82. package/dist/confluent/oauth/pkce-login.js +161 -0
  83. package/dist/confluent/oauth/pkce-login.js.map +1 -0
  84. package/dist/confluent/oauth/token-chain.d.ts +53 -0
  85. package/dist/confluent/oauth/token-chain.d.ts.map +1 -0
  86. package/dist/confluent/oauth/token-chain.js +141 -0
  87. package/dist/confluent/oauth/token-chain.js.map +1 -0
  88. package/dist/confluent/oauth/token-lifetimes.d.ts +13 -0
  89. package/dist/confluent/oauth/token-lifetimes.d.ts.map +1 -0
  90. package/dist/confluent/oauth/token-lifetimes.js +13 -0
  91. package/dist/confluent/oauth/token-lifetimes.js.map +1 -0
  92. package/dist/confluent/oauth/types.d.ts +68 -0
  93. package/dist/confluent/oauth/types.d.ts.map +1 -0
  94. package/dist/confluent/oauth/types.js +2 -0
  95. package/dist/confluent/oauth/types.js.map +1 -0
  96. package/dist/confluent/oauth-client-manager.d.ts +78 -0
  97. package/dist/confluent/oauth-client-manager.d.ts.map +1 -0
  98. package/dist/confluent/oauth-client-manager.js +265 -0
  99. package/dist/confluent/oauth-client-manager.js.map +1 -0
  100. package/dist/confluent/oauth-resource-resolvers.d.ts +6 -0
  101. package/dist/confluent/oauth-resource-resolvers.d.ts.map +1 -0
  102. package/dist/confluent/oauth-resource-resolvers.js +65 -0
  103. package/dist/confluent/oauth-resource-resolvers.js.map +1 -0
  104. package/dist/confluent/telemetry.d.ts +32 -1
  105. package/dist/confluent/telemetry.d.ts.map +1 -1
  106. package/dist/confluent/telemetry.js +31 -8
  107. package/dist/confluent/telemetry.js.map +1 -1
  108. package/dist/confluent/tools/base-tools.d.ts +98 -23
  109. package/dist/confluent/tools/base-tools.d.ts.map +1 -1
  110. package/dist/confluent/tools/base-tools.js +62 -4
  111. package/dist/confluent/tools/base-tools.js.map +1 -1
  112. package/dist/confluent/tools/cluster-arg-resolvers.d.ts +75 -0
  113. package/dist/confluent/tools/cluster-arg-resolvers.d.ts.map +1 -0
  114. package/dist/confluent/tools/cluster-arg-resolvers.js +127 -0
  115. package/dist/confluent/tools/cluster-arg-resolvers.js.map +1 -0
  116. package/dist/confluent/tools/connection-predicates.d.ts +168 -0
  117. package/dist/confluent/tools/connection-predicates.d.ts.map +1 -0
  118. package/dist/confluent/tools/connection-predicates.js +273 -0
  119. package/dist/confluent/tools/connection-predicates.js.map +1 -0
  120. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts +3 -5
  121. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts.map +1 -1
  122. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.js +4 -8
  123. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.js.map +1 -1
  124. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.d.ts +4 -5
  125. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.d.ts.map +1 -1
  126. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.js +4 -8
  127. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.js.map +1 -1
  128. package/dist/confluent/tools/handlers/catalog/create-topic-tags.d.ts +4 -5
  129. package/dist/confluent/tools/handlers/catalog/create-topic-tags.d.ts.map +1 -1
  130. package/dist/confluent/tools/handlers/catalog/create-topic-tags.js +4 -8
  131. package/dist/confluent/tools/handlers/catalog/create-topic-tags.js.map +1 -1
  132. package/dist/confluent/tools/handlers/catalog/delete-tag.d.ts +4 -5
  133. package/dist/confluent/tools/handlers/catalog/delete-tag.d.ts.map +1 -1
  134. package/dist/confluent/tools/handlers/catalog/delete-tag.js +4 -8
  135. package/dist/confluent/tools/handlers/catalog/delete-tag.js.map +1 -1
  136. package/dist/confluent/tools/handlers/catalog/list-tags.d.ts +4 -5
  137. package/dist/confluent/tools/handlers/catalog/list-tags.d.ts.map +1 -1
  138. package/dist/confluent/tools/handlers/catalog/list-tags.js +4 -8
  139. package/dist/confluent/tools/handlers/catalog/list-tags.js.map +1 -1
  140. package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.d.ts +4 -5
  141. package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.d.ts.map +1 -1
  142. package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.js +4 -8
  143. package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.js.map +1 -1
  144. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.d.ts +3 -5
  145. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.d.ts.map +1 -1
  146. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.js +9 -12
  147. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.js.map +1 -1
  148. package/dist/confluent/tools/handlers/connect/connect-tool-handler.d.ts +21 -0
  149. package/dist/confluent/tools/handlers/connect/connect-tool-handler.d.ts.map +1 -0
  150. package/dist/confluent/tools/handlers/connect/connect-tool-handler.js +22 -0
  151. package/dist/confluent/tools/handlers/connect/connect-tool-handler.js.map +1 -0
  152. package/dist/confluent/tools/handlers/connect/create-connector-handler.d.ts +11 -7
  153. package/dist/confluent/tools/handlers/connect/create-connector-handler.d.ts.map +1 -1
  154. package/dist/confluent/tools/handlers/connect/create-connector-handler.js +21 -21
  155. package/dist/confluent/tools/handlers/connect/create-connector-handler.js.map +1 -1
  156. package/dist/confluent/tools/handlers/connect/delete-connector-handler.d.ts +6 -7
  157. package/dist/confluent/tools/handlers/connect/delete-connector-handler.d.ts.map +1 -1
  158. package/dist/confluent/tools/handlers/connect/delete-connector-handler.js +10 -15
  159. package/dist/confluent/tools/handlers/connect/delete-connector-handler.js.map +1 -1
  160. package/dist/confluent/tools/handlers/connect/list-connectors-handler.d.ts +6 -7
  161. package/dist/confluent/tools/handlers/connect/list-connectors-handler.d.ts.map +1 -1
  162. package/dist/confluent/tools/handlers/connect/list-connectors-handler.js +15 -17
  163. package/dist/confluent/tools/handlers/connect/list-connectors-handler.js.map +1 -1
  164. package/dist/confluent/tools/handlers/connect/read-connectors-handler.d.ts +6 -7
  165. package/dist/confluent/tools/handlers/connect/read-connectors-handler.d.ts.map +1 -1
  166. package/dist/confluent/tools/handlers/connect/read-connectors-handler.js +10 -15
  167. package/dist/confluent/tools/handlers/connect/read-connectors-handler.js.map +1 -1
  168. package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.d.ts +57 -0
  169. package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.d.ts.map +1 -0
  170. package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.js +122 -0
  171. package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.js.map +1 -0
  172. package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.d.ts +17 -0
  173. package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.d.ts.map +1 -0
  174. package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.js +234 -0
  175. package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.js.map +1 -0
  176. package/dist/confluent/tools/handlers/docs/search-product-docs-handler.d.ts +13 -0
  177. package/dist/confluent/tools/handlers/docs/search-product-docs-handler.d.ts.map +1 -0
  178. package/dist/confluent/tools/handlers/docs/search-product-docs-handler.js +285 -0
  179. package/dist/confluent/tools/handlers/docs/search-product-docs-handler.js.map +1 -0
  180. package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts +3 -5
  181. package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts.map +1 -1
  182. package/dist/confluent/tools/handlers/environments/list-environments-handler.js +4 -8
  183. package/dist/confluent/tools/handlers/environments/list-environments-handler.js.map +1 -1
  184. package/dist/confluent/tools/handlers/environments/read-environment-handler.d.ts +3 -5
  185. package/dist/confluent/tools/handlers/environments/read-environment-handler.d.ts.map +1 -1
  186. package/dist/confluent/tools/handlers/environments/read-environment-handler.js +4 -8
  187. package/dist/confluent/tools/handlers/environments/read-environment-handler.js.map +1 -1
  188. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts +16 -9
  189. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts.map +1 -1
  190. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js +18 -12
  191. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js.map +1 -1
  192. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.d.ts +5 -7
  193. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.d.ts.map +1 -1
  194. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js +15 -21
  195. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js.map +1 -1
  196. package/dist/confluent/tools/handlers/flink/catalog/flink-catalog-tool-handler.d.ts +14 -0
  197. package/dist/confluent/tools/handlers/flink/catalog/flink-catalog-tool-handler.d.ts.map +1 -0
  198. package/dist/confluent/tools/handlers/flink/catalog/flink-catalog-tool-handler.js +15 -0
  199. package/dist/confluent/tools/handlers/flink/catalog/flink-catalog-tool-handler.js.map +1 -0
  200. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.d.ts +5 -7
  201. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.d.ts.map +1 -1
  202. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js +15 -21
  203. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js.map +1 -1
  204. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.d.ts +5 -7
  205. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.d.ts.map +1 -1
  206. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js +12 -20
  207. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js.map +1 -1
  208. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.d.ts +5 -7
  209. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.d.ts.map +1 -1
  210. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js +12 -20
  211. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js.map +1 -1
  212. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.d.ts +5 -7
  213. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.d.ts.map +1 -1
  214. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js +13 -29
  215. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js.map +1 -1
  216. package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.d.ts +5 -7
  217. package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.d.ts.map +1 -1
  218. package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.js +18 -23
  219. package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.js.map +1 -1
  220. package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.d.ts +5 -7
  221. package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.d.ts.map +1 -1
  222. package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.js +7 -13
  223. package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.js.map +1 -1
  224. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.d.ts +5 -7
  225. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.d.ts.map +1 -1
  226. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js +7 -13
  227. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js.map +1 -1
  228. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.d.ts +5 -7
  229. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.d.ts.map +1 -1
  230. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js +8 -15
  231. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js.map +1 -1
  232. package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.d.ts +2 -2
  233. package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.d.ts.map +1 -1
  234. package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.js.map +1 -1
  235. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.d.ts +7 -7
  236. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.d.ts.map +1 -1
  237. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js +11 -17
  238. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js.map +1 -1
  239. package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts +2 -2
  240. package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts.map +1 -1
  241. package/dist/confluent/tools/handlers/flink/flink-sql-helper.js.map +1 -1
  242. package/dist/confluent/tools/handlers/flink/flink-tool-handler.d.ts +21 -0
  243. package/dist/confluent/tools/handlers/flink/flink-tool-handler.d.ts.map +1 -0
  244. package/dist/confluent/tools/handlers/flink/flink-tool-handler.js +31 -0
  245. package/dist/confluent/tools/handlers/flink/flink-tool-handler.js.map +1 -0
  246. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.d.ts +5 -7
  247. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.d.ts.map +1 -1
  248. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js +7 -13
  249. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js.map +1 -1
  250. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.d.ts +5 -7
  251. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.d.ts.map +1 -1
  252. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js +9 -16
  253. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js.map +1 -1
  254. package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.d.ts +5 -7
  255. package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.d.ts.map +1 -1
  256. package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.js +7 -13
  257. package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.js.map +1 -1
  258. package/dist/confluent/tools/handlers/kafka/alter-topic-config.d.ts +3 -5
  259. package/dist/confluent/tools/handlers/kafka/alter-topic-config.d.ts.map +1 -1
  260. package/dist/confluent/tools/handlers/kafka/alter-topic-config.js +20 -19
  261. package/dist/confluent/tools/handlers/kafka/alter-topic-config.js.map +1 -1
  262. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.d.ts +5 -4
  263. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.d.ts.map +1 -1
  264. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js +23 -16
  265. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js.map +1 -1
  266. package/dist/confluent/tools/handlers/kafka/create-topics-handler.d.ts +3 -4
  267. package/dist/confluent/tools/handlers/kafka/create-topics-handler.d.ts.map +1 -1
  268. package/dist/confluent/tools/handlers/kafka/create-topics-handler.js +50 -14
  269. package/dist/confluent/tools/handlers/kafka/create-topics-handler.js.map +1 -1
  270. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.d.ts +3 -4
  271. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.d.ts.map +1 -1
  272. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js +24 -7
  273. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js.map +1 -1
  274. package/dist/confluent/tools/handlers/kafka/get-topic-config.d.ts +3 -5
  275. package/dist/confluent/tools/handlers/kafka/get-topic-config.d.ts.map +1 -1
  276. package/dist/confluent/tools/handlers/kafka/get-topic-config.js +20 -19
  277. package/dist/confluent/tools/handlers/kafka/get-topic-config.js.map +1 -1
  278. package/dist/confluent/tools/handlers/kafka/list-topics-handler.d.ts +3 -4
  279. package/dist/confluent/tools/handlers/kafka/list-topics-handler.d.ts.map +1 -1
  280. package/dist/confluent/tools/handlers/kafka/list-topics-handler.js +23 -9
  281. package/dist/confluent/tools/handlers/kafka/list-topics-handler.js.map +1 -1
  282. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.d.ts +3 -4
  283. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.d.ts.map +1 -1
  284. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js +51 -32
  285. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js.map +1 -1
  286. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts +4 -5
  287. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts.map +1 -1
  288. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js +4 -8
  289. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js.map +1 -1
  290. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts +22 -5
  291. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts.map +1 -1
  292. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js +86 -52
  293. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js.map +1 -1
  294. package/dist/confluent/tools/handlers/organizations/list-organizations-handler.d.ts +49 -0
  295. package/dist/confluent/tools/handlers/organizations/list-organizations-handler.d.ts.map +1 -0
  296. package/dist/confluent/tools/handlers/organizations/list-organizations-handler.js +115 -0
  297. package/dist/confluent/tools/handlers/organizations/list-organizations-handler.js.map +1 -0
  298. package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts +3 -4
  299. package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts.map +1 -1
  300. package/dist/confluent/tools/handlers/schema/delete-schema-handler.js +11 -7
  301. package/dist/confluent/tools/handlers/schema/delete-schema-handler.js.map +1 -1
  302. package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts +3 -4
  303. package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts.map +1 -1
  304. package/dist/confluent/tools/handlers/schema/list-schemas-handler.js +11 -6
  305. package/dist/confluent/tools/handlers/schema/list-schemas-handler.js.map +1 -1
  306. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.d.ts +4 -5
  307. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.d.ts.map +1 -1
  308. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.js +4 -8
  309. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.js.map +1 -1
  310. package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.d.ts +4 -5
  311. package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.d.ts.map +1 -1
  312. package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.js +4 -8
  313. package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.js.map +1 -1
  314. package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.d.ts +5 -7
  315. package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.d.ts.map +1 -1
  316. package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.js +17 -13
  317. package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.js.map +1 -1
  318. package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.d.ts +5 -7
  319. package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.d.ts.map +1 -1
  320. package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.js +6 -12
  321. package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.js.map +1 -1
  322. package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.d.ts +5 -7
  323. package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.d.ts.map +1 -1
  324. package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.js +7 -13
  325. package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.js.map +1 -1
  326. package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.d.ts +5 -7
  327. package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.d.ts.map +1 -1
  328. package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.js +6 -12
  329. package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.js.map +1 -1
  330. package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.d.ts +5 -7
  331. package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.d.ts.map +1 -1
  332. package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.js +5 -9
  333. package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.js.map +1 -1
  334. package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.d.ts +5 -7
  335. package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.d.ts.map +1 -1
  336. package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.js +19 -21
  337. package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.js.map +1 -1
  338. package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.d.ts +25 -0
  339. package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.d.ts.map +1 -0
  340. package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.js +27 -0
  341. package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.js.map +1 -0
  342. package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.d.ts +5 -7
  343. package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.d.ts.map +1 -1
  344. package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.js +17 -13
  345. package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.js.map +1 -1
  346. package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.d.ts +5 -7
  347. package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.d.ts.map +1 -1
  348. package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.js +6 -12
  349. package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.js.map +1 -1
  350. package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.d.ts +5 -7
  351. package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.d.ts.map +1 -1
  352. package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.js +7 -13
  353. package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.js.map +1 -1
  354. package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.d.ts +5 -7
  355. package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.d.ts.map +1 -1
  356. package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.js +6 -12
  357. package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.js.map +1 -1
  358. package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.d.ts +5 -7
  359. package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.d.ts.map +1 -1
  360. package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.js +5 -9
  361. package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.js.map +1 -1
  362. package/dist/confluent/tools/tool-availability.d.ts +74 -0
  363. package/dist/confluent/tools/tool-availability.d.ts.map +1 -0
  364. package/dist/confluent/tools/tool-availability.js +121 -0
  365. package/dist/confluent/tools/tool-availability.js.map +1 -0
  366. package/dist/confluent/tools/tool-name.d.ts +5 -1
  367. package/dist/confluent/tools/tool-name.d.ts.map +1 -1
  368. package/dist/confluent/tools/tool-name.js +4 -0
  369. package/dist/confluent/tools/tool-name.js.map +1 -1
  370. package/dist/confluent/tools/tool-registry.d.ts +18 -0
  371. package/dist/confluent/tools/tool-registry.d.ts.map +1 -0
  372. package/dist/confluent/tools/{tool-factory.js → tool-registry.js} +32 -19
  373. package/dist/confluent/tools/tool-registry.js.map +1 -0
  374. package/dist/env-schema.d.ts +5 -7
  375. package/dist/env-schema.d.ts.map +1 -1
  376. package/dist/env-schema.js +20 -39
  377. package/dist/env-schema.js.map +1 -1
  378. package/dist/env.d.ts +16 -7
  379. package/dist/env.d.ts.map +1 -1
  380. package/dist/env.js +16 -6
  381. package/dist/env.js.map +1 -1
  382. package/dist/index.d.ts +74 -1
  383. package/dist/index.d.ts.map +1 -1
  384. package/dist/index.js +279 -166
  385. package/dist/index.js.map +1 -1
  386. package/dist/logger.d.ts.map +1 -1
  387. package/dist/logger.js +21 -20
  388. package/dist/logger.js.map +1 -1
  389. package/dist/mcp/server.d.ts +29 -0
  390. package/dist/mcp/server.d.ts.map +1 -0
  391. package/dist/mcp/server.js +52 -0
  392. package/dist/mcp/server.js.map +1 -0
  393. package/dist/mcp/transports/auth.d.ts +20 -4
  394. package/dist/mcp/transports/auth.d.ts.map +1 -1
  395. package/dist/mcp/transports/auth.js +27 -7
  396. package/dist/mcp/transports/auth.js.map +1 -1
  397. package/dist/mcp/transports/http.d.ts +8 -2
  398. package/dist/mcp/transports/http.d.ts.map +1 -1
  399. package/dist/mcp/transports/http.js +57 -42
  400. package/dist/mcp/transports/http.js.map +1 -1
  401. package/dist/mcp/transports/manager.d.ts +23 -9
  402. package/dist/mcp/transports/manager.d.ts.map +1 -1
  403. package/dist/mcp/transports/manager.js +27 -24
  404. package/dist/mcp/transports/manager.js.map +1 -1
  405. package/dist/mcp/transports/server.d.ts +1 -1
  406. package/dist/mcp/transports/server.d.ts.map +1 -1
  407. package/dist/mcp/transports/server.js +17 -5
  408. package/dist/mcp/transports/server.js.map +1 -1
  409. package/dist/mcp/transports/session-registry.d.ts +33 -0
  410. package/dist/mcp/transports/session-registry.d.ts.map +1 -0
  411. package/dist/mcp/transports/session-registry.js +65 -0
  412. package/dist/mcp/transports/session-registry.js.map +1 -0
  413. package/dist/mcp/transports/sse.d.ts +13 -2
  414. package/dist/mcp/transports/sse.d.ts.map +1 -1
  415. package/dist/mcp/transports/sse.js +58 -46
  416. package/dist/mcp/transports/sse.js.map +1 -1
  417. package/dist/server-runtime.d.ts +28 -0
  418. package/dist/server-runtime.d.ts.map +1 -0
  419. package/dist/server-runtime.js +73 -0
  420. package/dist/server-runtime.js.map +1 -0
  421. package/package.json +25 -9
  422. package/dist/confluent/helpers.d.ts +0 -11
  423. package/dist/confluent/helpers.d.ts.map +0 -1
  424. package/dist/confluent/helpers.js +0 -17
  425. package/dist/confluent/helpers.js.map +0 -1
  426. package/dist/confluent/tools/tool-factory.d.ts +0 -9
  427. package/dist/confluent/tools/tool-factory.d.ts.map +0 -1
  428. package/dist/confluent/tools/tool-factory.js.map +0 -1
@@ -0,0 +1,155 @@
1
+ import { AuthContext } from "../../confluent/oauth/auth-context.js";
2
+ import { getAuth0Config } from "../../confluent/oauth/auth0-config.js";
3
+ import { generateOpaqueToken } from "../../confluent/oauth/crypto-utils.js";
4
+ import { hasNonTransientError } from "../../confluent/oauth/errors.js";
5
+ import { PkceLoginError, runPkceLogin, } from "../../confluent/oauth/pkce-login.js";
6
+ import { TelemetryEvent, TelemetryService } from "../../confluent/telemetry.js";
7
+ import { logger } from "../../logger.js";
8
+ /**
9
+ * Owns the process's {@link AuthContext} and lazily drives PKCE on demand.
10
+ * Construction is side-effect-free; callers go through {@link ensureLoggedIn}.
11
+ *
12
+ * State machine:
13
+ * - Idle: starts PKCE.
14
+ * - Logging in: concurrent callers share the in-flight Promise.
15
+ * - Logged in: no-op (or single-flight refresh if bearer tokens are stale).
16
+ * - Failed / refresh-family expired: clears ctx and starts a fresh PKCE.
17
+ * - Shut down: rejects.
18
+ */
19
+ export class OAuthHolder {
20
+ env;
21
+ ctx;
22
+ cleared = false;
23
+ abortController = new AbortController();
24
+ inFlightLogin = null;
25
+ constructor(env) {
26
+ this.env = env;
27
+ }
28
+ getControlPlaneToken() {
29
+ return this.ctx?.getControlPlaneToken();
30
+ }
31
+ getDataPlaneToken() {
32
+ return this.ctx?.getDataPlaneToken();
33
+ }
34
+ /**
35
+ * Ensure the holder has usable bearer tokens, starting PKCE on demand.
36
+ * Single-flight, replayable after a PKCE failure, rejects after shutdown.
37
+ */
38
+ async ensureLoggedIn() {
39
+ if (this.cleared) {
40
+ throw new Error("OAuthHolder is shut down");
41
+ }
42
+ if (this.inFlightLogin) {
43
+ return this.inFlightLogin;
44
+ }
45
+ if (this.ctx) {
46
+ if (this.ctx.refreshTokenExpired() ||
47
+ hasNonTransientError(this.ctx.getErrors())) {
48
+ this.ctx.clear();
49
+ this.ctx = undefined;
50
+ // fall through to PKCE
51
+ }
52
+ else if (this.ctx.getControlPlaneToken() !== undefined &&
53
+ this.ctx.getDataPlaneToken() !== undefined) {
54
+ return;
55
+ }
56
+ else {
57
+ // Refresh token alive but bearer tokens stale (e.g., system sleep
58
+ // suspended the refresh-loop tick). Refresh on demand rather than
59
+ // re-prompt; `AuthContext.refresh()` joins any in-flight refresh.
60
+ await this.ctx.refresh();
61
+ if (this.cleared) {
62
+ throw new Error("OAuthHolder is shut down");
63
+ }
64
+ if (this.ctx.getControlPlaneToken() !== undefined &&
65
+ this.ctx.getDataPlaneToken() !== undefined) {
66
+ return;
67
+ }
68
+ // Refresh didn't restore tokens. Surface a retry-friendly error
69
+ // rather than launch a browser; if the failure becomes
70
+ // non-transient, the next call falls through to PKCE.
71
+ throw new Error("OAuth bearer tokens unavailable after refresh; retry the tool call");
72
+ }
73
+ }
74
+ this.inFlightLogin = this.runLogin().finally(() => {
75
+ this.inFlightLogin = null;
76
+ });
77
+ return this.inFlightLogin;
78
+ }
79
+ /**
80
+ * Terminal — clears ctx (which stops the refresh loop) and aborts any
81
+ * in-flight PKCE. Idempotent.
82
+ */
83
+ shutdown() {
84
+ this.ctx?.clear();
85
+ this.ctx = undefined;
86
+ this.cleared = true;
87
+ this.abortController.abort();
88
+ }
89
+ async runLogin() {
90
+ const auth0Config = getAuth0Config(this.env);
91
+ logger.info({ env: this.env }, "Starting OAuth login");
92
+ let tokenChain;
93
+ try {
94
+ tokenChain = await runPkceLogin(auth0Config, this.abortController.signal);
95
+ }
96
+ catch (err) {
97
+ // The MCP tool-call wrapper rethrows but doesn't log; surface the
98
+ // failure here so server stderr captures the cause (timeout,
99
+ // port_in_use, configuration, user_aborted).
100
+ const reason = err instanceof PkceLoginError ? err.reason : undefined;
101
+ if (this.cleared) {
102
+ logger.info({ env: this.env }, "OAuth login aborted by shutdown");
103
+ }
104
+ else {
105
+ logger.error({ env: this.env, err, reason }, "OAuth login failed");
106
+ }
107
+ TelemetryService.getInstance().track(TelemetryEvent.CCLOUD_AUTHENTICATION, {
108
+ status: "error",
109
+ ccloudUserId: undefined,
110
+ ccloudDomain: undefined,
111
+ failureReason: reason,
112
+ });
113
+ throw err;
114
+ }
115
+ if (this.cleared) {
116
+ // shutdown() raced with PKCE completion — discard the tokens we just
117
+ // obtained rather than attaching them to a holder that's been
118
+ // explicitly torn down. Emit a terminal-outcome event so the warehouse
119
+ // still counts this attempt; the `user_aborted` reason matches what
120
+ // an upstream shutdown signal implies.
121
+ logger.info({ env: this.env }, "OAuth login completed but holder was cleared; discarding tokens");
122
+ TelemetryService.getInstance().track(TelemetryEvent.CCLOUD_AUTHENTICATION, {
123
+ status: "error",
124
+ ccloudUserId: undefined,
125
+ ccloudDomain: undefined,
126
+ failureReason: "user_aborted",
127
+ });
128
+ return;
129
+ }
130
+ // Explicit field copy: `TokenChainResult` carries identity fields
131
+ // (`resourceId`, `email`) that aren't part of `ConfluentTokenSet` and
132
+ // would otherwise be retained on the long-lived `AuthContext` via a
133
+ // spread. Pin the token set to just token material.
134
+ const tokens = {
135
+ refreshToken: tokenChain.refreshToken,
136
+ refreshTokenAbsoluteExpiresAt: tokenChain.refreshTokenAbsoluteExpiresAt,
137
+ refreshTokenIdleExpiresAt: tokenChain.refreshTokenIdleExpiresAt,
138
+ controlPlaneToken: tokenChain.controlPlaneToken,
139
+ controlPlaneExpiresAt: tokenChain.controlPlaneExpiresAt,
140
+ dataPlaneToken: tokenChain.dataPlaneToken,
141
+ dataPlaneExpiresAt: tokenChain.dataPlaneExpiresAt,
142
+ accessToken: generateOpaqueToken(),
143
+ };
144
+ const ctx = AuthContext.fromTokens(auth0Config, tokens);
145
+ ctx.startRefreshLoop();
146
+ this.ctx = ctx;
147
+ logger.info({ env: this.env }, "OAuth login successful");
148
+ TelemetryService.getInstance().track(TelemetryEvent.CCLOUD_AUTHENTICATION, {
149
+ status: "success",
150
+ ccloudUserId: tokenChain.resourceId,
151
+ ccloudDomain: tokenChain.email?.split("@")[1],
152
+ });
153
+ }
154
+ }
155
+ //# sourceMappingURL=oauth-holder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-holder.js","sourceRoot":"","sources":["../../../src/confluent/oauth/oauth-holder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { type TokenChainResult } from "../../confluent/oauth/token-chain.js";
2
+ import type { Auth0Config } from "../../confluent/oauth/types.js";
3
+ /** Maximum time to wait for the user to complete the browser PKCE flow. */
4
+ export declare const PKCE_LOGIN_TIMEOUT_MS = 120000;
5
+ /** Reasons a PKCE login can fail. Carried on {@link PkceLoginError}. */
6
+ export type PkceLoginFailureReason = "timeout" | "user_aborted" | "port_in_use" | "auth0_unreachable" | "configuration";
7
+ /** Structured error so callers can react to the cause of a failed PKCE login. */
8
+ export declare class PkceLoginError extends Error {
9
+ readonly reason: PkceLoginFailureReason;
10
+ constructor(reason: PkceLoginFailureReason, message: string);
11
+ }
12
+ /**
13
+ * Runs the PKCE flow end-to-end:
14
+ * - generates verifier / challenge / state
15
+ * - binds a one-shot HTTP listener on {@link OAUTH_CALLBACK_PORT}
16
+ * - opens the browser to the Auth0 authorization endpoint
17
+ * - waits for the redirect carrying the auth code
18
+ * - exchanges the code for the full Confluent token chain
19
+ *
20
+ * Bounded by {@link PKCE_LOGIN_TIMEOUT_MS}. Throws {@link PkceLoginError} on
21
+ * failure with a structured `reason`. If `signal` aborts before the auth
22
+ * code arrives, throws `PkceLoginError("user_aborted", ...)` and the finally
23
+ * block tears down the timer + HTTP server.
24
+ */
25
+ export declare function runPkceLogin(auth0Config: Auth0Config, signal?: AbortSignal): Promise<TokenChainResult>;
26
+ //# sourceMappingURL=pkce-login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pkce-login.d.ts","sourceRoot":"","sources":["../../../src/confluent/oauth/pkce-login.ts"],"names":[],"mappings":"AAiBA,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAGjE,2EAA2E;AAC3E,eAAO,MAAM,qBAAqB,SAAU,CAAC;AAE7C,wEAAwE;AACxE,MAAM,MAAM,sBAAsB,GAC9B,SAAS,GACT,cAAc,GACd,aAAa,GACb,mBAAmB,GACnB,eAAe,CAAC;AAEpB,iFAAiF;AACjF,qBAAa,cAAe,SAAQ,KAAK;aAErB,MAAM,EAAE,sBAAsB;gBAA9B,MAAM,EAAE,sBAAsB,EAC9C,OAAO,EAAE,MAAM;CAKlB;AAwBD;;;;;;;;;;;;GAYG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,WAAW,EACxB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAqJ3B"}
@@ -0,0 +1,161 @@
1
+ import { nodeHttp, nodeOpen } from "../../confluent/node-deps.js";
2
+ import { OAUTH_CALLBACK_HOST, OAUTH_CALLBACK_PATH, OAUTH_CALLBACK_PORT, } from "../../confluent/oauth/auth0-config.js";
3
+ import { renderErrorPage, renderSuccessPage, } from "../../confluent/oauth/callback-pages.js";
4
+ import { generateCodeChallenge, generateCodeVerifier, generateOpaqueToken, } from "../../confluent/oauth/crypto-utils.js";
5
+ import { executeFullTokenChain, } from "../../confluent/oauth/token-chain.js";
6
+ import { logger } from "../../logger.js";
7
+ /** Maximum time to wait for the user to complete the browser PKCE flow. */
8
+ export const PKCE_LOGIN_TIMEOUT_MS = 120_000;
9
+ /** Structured error so callers can react to the cause of a failed PKCE login. */
10
+ export class PkceLoginError extends Error {
11
+ reason;
12
+ constructor(reason, message) {
13
+ super(message);
14
+ this.reason = reason;
15
+ this.name = "PkceLoginError";
16
+ }
17
+ }
18
+ function sendHtml(res, status, body) {
19
+ res.writeHead(status, { "Content-Type": "text/html; charset=UTF-8" });
20
+ res.end(body);
21
+ }
22
+ function buildAuthorizationUrl(auth0Config, codeChallenge, state) {
23
+ const params = new URLSearchParams({
24
+ client_id: auth0Config.clientId,
25
+ response_type: "code",
26
+ redirect_uri: auth0Config.callbackUrl,
27
+ scope: auth0Config.scopes,
28
+ code_challenge: codeChallenge,
29
+ code_challenge_method: "S256",
30
+ state,
31
+ });
32
+ return `https://${auth0Config.domain}/authorize?${params.toString()}`;
33
+ }
34
+ /**
35
+ * Runs the PKCE flow end-to-end:
36
+ * - generates verifier / challenge / state
37
+ * - binds a one-shot HTTP listener on {@link OAUTH_CALLBACK_PORT}
38
+ * - opens the browser to the Auth0 authorization endpoint
39
+ * - waits for the redirect carrying the auth code
40
+ * - exchanges the code for the full Confluent token chain
41
+ *
42
+ * Bounded by {@link PKCE_LOGIN_TIMEOUT_MS}. Throws {@link PkceLoginError} on
43
+ * failure with a structured `reason`. If `signal` aborts before the auth
44
+ * code arrives, throws `PkceLoginError("user_aborted", ...)` and the finally
45
+ * block tears down the timer + HTTP server.
46
+ */
47
+ export async function runPkceLogin(auth0Config, signal) {
48
+ // Early abort: skip the bind/open work entirely if the caller has already
49
+ // signaled cancellation.
50
+ if (signal?.aborted) {
51
+ throw new PkceLoginError("user_aborted", "PKCE login aborted");
52
+ }
53
+ if (!auth0Config.clientId) {
54
+ throw new PkceLoginError("configuration", "Auth0 clientId is not configured for the selected environment");
55
+ }
56
+ const codeVerifier = generateCodeVerifier();
57
+ const codeChallenge = generateCodeChallenge(codeVerifier);
58
+ const state = generateOpaqueToken();
59
+ let resolveCode = () => undefined;
60
+ let rejectFlow = () => undefined;
61
+ const codePromise = new Promise((resolve, reject) => {
62
+ resolveCode = resolve;
63
+ rejectFlow = reject;
64
+ });
65
+ const server = nodeHttp.createServer((req, res) => {
66
+ const reqUrl = req.url ?? "";
67
+ const parsed = new URL(reqUrl, "http://127.0.0.1");
68
+ if (parsed.pathname !== OAUTH_CALLBACK_PATH) {
69
+ sendHtml(res, 404, renderErrorPage("Not found"));
70
+ return;
71
+ }
72
+ const receivedState = parsed.searchParams.get("state");
73
+ if (receivedState !== state) {
74
+ sendHtml(res, 400, renderErrorPage("State mismatch"));
75
+ return;
76
+ }
77
+ const errorParam = parsed.searchParams.get("error");
78
+ if (errorParam) {
79
+ sendHtml(res, 400, renderErrorPage(`Authentication failed: ${errorParam}`));
80
+ rejectFlow(new PkceLoginError("user_aborted", `Auth0 redirect carried error=${errorParam}`));
81
+ return;
82
+ }
83
+ const code = parsed.searchParams.get("code");
84
+ if (!code) {
85
+ sendHtml(res, 400, renderErrorPage("Missing authorization code"));
86
+ return;
87
+ }
88
+ sendHtml(res, 200, renderSuccessPage());
89
+ resolveCode(code);
90
+ });
91
+ let bound = false;
92
+ const bindResult = new Promise((resolve, reject) => {
93
+ const onBindError = (err) => {
94
+ if (err.code === "EADDRINUSE") {
95
+ reject(new PkceLoginError("port_in_use", `Port ${OAUTH_CALLBACK_PORT} is already in use; another mcp-confluent OAuth session may be active`));
96
+ }
97
+ else {
98
+ reject(new PkceLoginError("configuration", `Failed to bind PKCE callback server on ${OAUTH_CALLBACK_HOST}:${OAUTH_CALLBACK_PORT}: ${err.message}`));
99
+ }
100
+ };
101
+ server.on("error", onBindError);
102
+ server.listen(OAUTH_CALLBACK_PORT, OAUTH_CALLBACK_HOST, () => {
103
+ bound = true;
104
+ server.off("error", onBindError);
105
+ // Replace the bind-time rejector with a log-only listener so a stray
106
+ // post-bind socket error doesn't escape as an uncaught 'error' event.
107
+ server.on("error", (err) => {
108
+ logger.warn({ err }, "PKCE callback server post-bind error");
109
+ });
110
+ resolve();
111
+ });
112
+ });
113
+ let timer;
114
+ const timeoutPromise = new Promise((_, reject) => {
115
+ timer = setTimeout(() => {
116
+ reject(new PkceLoginError("timeout", `PKCE login timed out after ${PKCE_LOGIN_TIMEOUT_MS}ms`));
117
+ }, PKCE_LOGIN_TIMEOUT_MS);
118
+ });
119
+ // One abortPromise + listener races every long-lived await below, so a
120
+ // cancellation observed during bind/open also unblocks promptly.
121
+ let abortListener;
122
+ const abortPromise = new Promise((_, reject) => {
123
+ abortListener = () => reject(new PkceLoginError("user_aborted", "PKCE login aborted"));
124
+ signal?.addEventListener("abort", abortListener, { once: true });
125
+ });
126
+ let authCode;
127
+ try {
128
+ await Promise.race([bindResult, abortPromise]);
129
+ try {
130
+ await Promise.race([
131
+ nodeOpen.open(buildAuthorizationUrl(auth0Config, codeChallenge, state)),
132
+ abortPromise,
133
+ ]);
134
+ }
135
+ catch (err) {
136
+ // Preserve user_aborted from the race; wrap any other open() failure.
137
+ if (err instanceof PkceLoginError)
138
+ throw err;
139
+ throw new PkceLoginError("configuration", `Failed to open browser: ${err instanceof Error ? err.message : String(err)}`);
140
+ }
141
+ authCode = await Promise.race([codePromise, timeoutPromise, abortPromise]);
142
+ }
143
+ finally {
144
+ // Remove the abort listener if the race resolved via something other
145
+ // than abort, so we don't leak a listener on a long-lived AbortSignal.
146
+ if (signal && abortListener) {
147
+ signal.removeEventListener("abort", abortListener);
148
+ }
149
+ clearTimeout(timer);
150
+ if (bound)
151
+ server.close();
152
+ }
153
+ logger.info("PKCE auth code received; exchanging for token chain");
154
+ try {
155
+ return await executeFullTokenChain(auth0Config, authCode, codeVerifier);
156
+ }
157
+ catch (err) {
158
+ throw new PkceLoginError("auth0_unreachable", `Token chain failed: ${err instanceof Error ? err.message : String(err)}`);
159
+ }
160
+ }
161
+ //# sourceMappingURL=pkce-login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pkce-login.js","sourceRoot":"","sources":["../../../src/confluent/oauth/pkce-login.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,eAAe,EACf,iBAAiB,GAClB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,qBAAqB,GAEtB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,2EAA2E;AAC3E,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAU7C,iFAAiF;AACjF,MAAM,OAAO,cAAe,SAAQ,KAAK;IAErB;IADlB,YACkB,MAA8B,EAC9C,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,WAAM,GAAN,MAAM,CAAwB;QAI9C,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,SAAS,QAAQ,CAAC,GAAmB,EAAE,MAAc,EAAE,IAAY;IACjE,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAC;IACtE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAC5B,WAAwB,EACxB,aAAqB,EACrB,KAAa;IAEb,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,SAAS,EAAE,WAAW,CAAC,QAAQ;QAC/B,aAAa,EAAE,MAAM;QACrB,YAAY,EAAE,WAAW,CAAC,WAAW;QACrC,KAAK,EAAE,WAAW,CAAC,MAAM;QACzB,cAAc,EAAE,aAAa;QAC7B,qBAAqB,EAAE,MAAM;QAC7B,KAAK;KACN,CAAC,CAAC;IACH,OAAO,WAAW,WAAW,CAAC,MAAM,cAAc,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;AACxE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,WAAwB,EACxB,MAAoB;IAEpB,0EAA0E;IAC1E,yBAAyB;IACzB,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,cAAc,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,cAAc,CACtB,eAAe,EACf,+DAA+D,CAChE,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,oBAAoB,EAAE,CAAC;IAC5C,MAAM,aAAa,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IAEpC,IAAI,WAAW,GAA2B,GAAG,EAAE,CAAC,SAAS,CAAC;IAC1D,IAAI,UAAU,GAAkC,GAAG,EAAE,CAAC,SAAS,CAAC;IAChE,MAAM,WAAW,GAAG,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1D,WAAW,GAAG,OAAO,CAAC;QACtB,UAAU,GAAG,MAAM,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAChD,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,QAAQ,KAAK,mBAAmB,EAAE,CAAC;YAC5C,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QACD,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;YAC5B,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,UAAU,EAAE,CAAC;YACf,QAAQ,CACN,GAAG,EACH,GAAG,EACH,eAAe,CAAC,0BAA0B,UAAU,EAAE,CAAC,CACxD,CAAC;YACF,UAAU,CACR,IAAI,cAAc,CAChB,cAAc,EACd,gCAAgC,UAAU,EAAE,CAC7C,CACF,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,eAAe,CAAC,4BAA4B,CAAC,CAAC,CAAC;YAClE,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACxC,WAAW,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,MAAM,UAAU,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACvD,MAAM,WAAW,GAAG,CAAC,GAA0B,EAAE,EAAE;YACjD,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC9B,MAAM,CACJ,IAAI,cAAc,CAChB,aAAa,EACb,QAAQ,mBAAmB,uEAAuE,CACnG,CACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,CACJ,IAAI,cAAc,CAChB,eAAe,EACf,0CAA0C,mBAAmB,IAAI,mBAAmB,KAAK,GAAG,CAAC,OAAO,EAAE,CACvG,CACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,GAAG,EAAE;YAC3D,KAAK,GAAG,IAAI,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YACjC,qEAAqE;YACrE,sEAAsE;YACtE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACzB,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,sCAAsC,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;YACH,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,KAAgD,CAAC;IACrD,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QACtD,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,MAAM,CACJ,IAAI,cAAc,CAChB,SAAS,EACT,8BAA8B,qBAAqB,IAAI,CACxD,CACF,CAAC;QACJ,CAAC,EAAE,qBAAqB,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,uEAAuE;IACvE,iEAAiE;IACjE,IAAI,aAAuC,CAAC;IAC5C,MAAM,YAAY,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QACpD,aAAa,GAAG,GAAG,EAAE,CACnB,MAAM,CAAC,IAAI,cAAc,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC,CAAC;QACnE,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;gBACvE,YAAY;aACb,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,sEAAsE;YACtE,IAAI,GAAG,YAAY,cAAc;gBAAE,MAAM,GAAG,CAAC;YAC7C,MAAM,IAAI,cAAc,CACtB,eAAe,EACf,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC9E,CAAC;QACJ,CAAC;QACD,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;IAC7E,CAAC;YAAS,CAAC;QACT,qEAAqE;QACrE,uEAAuE;QACvE,IAAI,MAAM,IAAI,aAAa,EAAE,CAAC;YAC5B,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACrD,CAAC;QACD,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IACnE,IAAI,CAAC;QACH,OAAO,MAAM,qBAAqB,CAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,cAAc,CACtB,mBAAmB,EACnB,uBAAuB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC1E,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,53 @@
1
+ import type { Auth0Config, Auth0TokenResponse, ControlPlaneTokenResponse, DataPlaneTokenResponse } from "../../confluent/oauth/types.js";
2
+ /** Result of a full initial-login token chain from {@link executeFullTokenChain}. */
3
+ export interface TokenChainResult {
4
+ refreshToken: string;
5
+ /** Set once on initial login and preserved across subsequent refreshes. */
6
+ refreshTokenAbsoluteExpiresAt: number;
7
+ /** Set on initial login; subsequent refreshes bump this value in the store directly. */
8
+ refreshTokenIdleExpiresAt: number;
9
+ controlPlaneToken: string;
10
+ controlPlaneExpiresAt: number;
11
+ dataPlaneToken: string;
12
+ dataPlaneExpiresAt: number;
13
+ /**
14
+ * User identity fields lifted from the `/api/sessions` response body
15
+ * (`response.user`). Surface here so callers (the OAuth holder) can
16
+ * attach the user's identity to telemetry without having to parse the
17
+ * raw CP response themselves. Either field is `undefined` when the
18
+ * response omits `user` or the underlying field.
19
+ */
20
+ resourceId: string | undefined;
21
+ email: string | undefined;
22
+ }
23
+ /**
24
+ * Exchanges an authorization code for Auth0 tokens (ID token + refresh token).
25
+ * This is the first step in the Confluent token chain.
26
+ */
27
+ export declare function exchangeAuthCodeForTokens(auth0Config: Auth0Config, authCode: string, codeVerifier: string): Promise<Auth0TokenResponse>;
28
+ /**
29
+ * Exchanges an Auth0 ID token for a Confluent Cloud control plane token.
30
+ * POST {apiUrl}/api/sessions with the ID token in the body.
31
+ */
32
+ export declare function exchangeIdTokenForControlPlaneToken(apiUrl: string, idToken: string): Promise<ControlPlaneTokenResponse>;
33
+ /**
34
+ * Exchanges a control plane token for a Confluent Cloud data plane token.
35
+ * POST {apiUrl}/api/access_tokens with the CP token as Bearer auth.
36
+ */
37
+ export declare function exchangeControlPlaneForDataPlaneToken(apiUrl: string, controlPlaneToken: string): Promise<DataPlaneTokenResponse>;
38
+ /**
39
+ * Exchanges a refresh token for a new Auth0 token set (ID token + rotated
40
+ * refresh token). This is a single-use destructive operation: on success the
41
+ * old refresh token is invalidated by Auth0. Callers that then derive CP/DP
42
+ * tokens should persist the new refresh token BEFORE the CP/DP calls so a
43
+ * failure there doesn't lose the rotated token.
44
+ */
45
+ export declare function exchangeRefreshTokenForAuth0Tokens(auth0Config: Auth0Config, refreshToken: string): Promise<Auth0TokenResponse>;
46
+ /**
47
+ * Runs the full token chain from an authorization code.
48
+ * auth code → ID token + refresh token → control plane → data plane
49
+ *
50
+ * Sets both absolute (8hr) and idle (4hr) refresh token expiry.
51
+ */
52
+ export declare function executeFullTokenChain(auth0Config: Auth0Config, authCode: string, codeVerifier: string): Promise<TokenChainResult>;
53
+ //# sourceMappingURL=token-chain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-chain.d.ts","sourceRoot":"","sources":["../../../src/confluent/oauth/token-chain.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,yBAAyB,EACzB,sBAAsB,EACvB,MAAM,+BAA+B,CAAC;AAMvC,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,6BAA6B,EAAE,MAAM,CAAC;IACtC,wFAAwF;IACxF,yBAAyB,EAAE,MAAM,CAAC;IAClC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAoCD;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAyB7B;AAED;;;GAGG;AACH,wBAAsB,mCAAmC,CACvD,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,yBAAyB,CAAC,CAcpC;AAED;;;GAGG;AACH,wBAAsB,qCAAqC,CACzD,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,sBAAsB,CAAC,CAiBjC;AAED;;;;;;GAMG;AACH,wBAAsB,kCAAkC,CACtD,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAuB7B;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,CAAC,CA6B3B"}
@@ -0,0 +1,141 @@
1
+ import { nodeFetch } from "../../confluent/node-deps.js";
2
+ import { CONTROL_PLANE_TOKEN_LIFETIME_MS, DATA_PLANE_TOKEN_LIFETIME_MS, REFRESH_TOKEN_ABSOLUTE_LIFETIME_MS, REFRESH_TOKEN_IDLE_LIFETIME_MS, } from "../../confluent/oauth/token-lifetimes.js";
3
+ import { logger } from "../../logger.js";
4
+ /** Per-request timeout bounding each Auth0/Confluent HTTP call. */
5
+ const REQUEST_TIMEOUT_MS = 30_000;
6
+ /**
7
+ * POSTs to the OAuth/Confluent endpoint and returns the decoded JSON body,
8
+ * throwing a labeled error when the response is not OK. Each request is bounded
9
+ * by {@link REQUEST_TIMEOUT_MS} so a hung Auth0/Confluent call can't stall the
10
+ * refresh loop.
11
+ */
12
+ async function postJson(url, init, operation) {
13
+ let response;
14
+ try {
15
+ response = await nodeFetch.fetch(url, {
16
+ ...init,
17
+ signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
18
+ });
19
+ }
20
+ catch (err) {
21
+ if (err instanceof Error && err.name === "TimeoutError") {
22
+ logger.error(`${operation} timed out`);
23
+ throw new Error(`${operation} timed out after ${REQUEST_TIMEOUT_MS}ms`);
24
+ }
25
+ throw err;
26
+ }
27
+ if (!response.ok) {
28
+ const errorText = await response.text();
29
+ logger.error({ status: response.status }, `${operation} failed`);
30
+ throw new Error(`${operation} failed (${response.status}): ${errorText}`);
31
+ }
32
+ return (await response.json());
33
+ }
34
+ /**
35
+ * Exchanges an authorization code for Auth0 tokens (ID token + refresh token).
36
+ * This is the first step in the Confluent token chain.
37
+ */
38
+ export async function exchangeAuthCodeForTokens(auth0Config, authCode, codeVerifier) {
39
+ const body = new URLSearchParams({
40
+ grant_type: "authorization_code",
41
+ client_id: auth0Config.clientId,
42
+ code: authCode,
43
+ code_verifier: codeVerifier,
44
+ redirect_uri: auth0Config.callbackUrl,
45
+ });
46
+ const response = await postJson(`https://${auth0Config.domain}/oauth/token`, {
47
+ method: "POST",
48
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
49
+ body: body.toString(),
50
+ }, "Auth0 token exchange");
51
+ if (!response.id_token) {
52
+ throw new Error("Auth0 token exchange: missing id_token");
53
+ }
54
+ if (!response.refresh_token) {
55
+ throw new Error("Auth0 token exchange: missing refresh_token");
56
+ }
57
+ return response;
58
+ }
59
+ /**
60
+ * Exchanges an Auth0 ID token for a Confluent Cloud control plane token.
61
+ * POST {apiUrl}/api/sessions with the ID token in the body.
62
+ */
63
+ export async function exchangeIdTokenForControlPlaneToken(apiUrl, idToken) {
64
+ const response = await postJson(`${apiUrl}/api/sessions`, {
65
+ method: "POST",
66
+ headers: { "Content-Type": "application/json" },
67
+ body: JSON.stringify({ id_token: idToken }),
68
+ }, "Control plane token exchange");
69
+ if (!response.token) {
70
+ throw new Error("Control plane token exchange: missing token");
71
+ }
72
+ return response;
73
+ }
74
+ /**
75
+ * Exchanges a control plane token for a Confluent Cloud data plane token.
76
+ * POST {apiUrl}/api/access_tokens with the CP token as Bearer auth.
77
+ */
78
+ export async function exchangeControlPlaneForDataPlaneToken(apiUrl, controlPlaneToken) {
79
+ const response = await postJson(`${apiUrl}/api/access_tokens`, {
80
+ method: "POST",
81
+ headers: {
82
+ "Content-Type": "application/json",
83
+ Authorization: `Bearer ${controlPlaneToken}`,
84
+ },
85
+ body: JSON.stringify({}),
86
+ }, "Data plane token exchange");
87
+ if (!response.token) {
88
+ throw new Error("Data plane token exchange: missing token");
89
+ }
90
+ return response;
91
+ }
92
+ /**
93
+ * Exchanges a refresh token for a new Auth0 token set (ID token + rotated
94
+ * refresh token). This is a single-use destructive operation: on success the
95
+ * old refresh token is invalidated by Auth0. Callers that then derive CP/DP
96
+ * tokens should persist the new refresh token BEFORE the CP/DP calls so a
97
+ * failure there doesn't lose the rotated token.
98
+ */
99
+ export async function exchangeRefreshTokenForAuth0Tokens(auth0Config, refreshToken) {
100
+ const body = new URLSearchParams({
101
+ grant_type: "refresh_token",
102
+ client_id: auth0Config.clientId,
103
+ refresh_token: refreshToken,
104
+ });
105
+ const response = await postJson(`https://${auth0Config.domain}/oauth/token`, {
106
+ method: "POST",
107
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
108
+ body: body.toString(),
109
+ }, "Auth0 token refresh");
110
+ if (!response.id_token) {
111
+ throw new Error("Auth0 token refresh: missing id_token");
112
+ }
113
+ if (!response.refresh_token) {
114
+ throw new Error("Auth0 token refresh: missing refresh_token");
115
+ }
116
+ return response;
117
+ }
118
+ /**
119
+ * Runs the full token chain from an authorization code.
120
+ * auth code → ID token + refresh token → control plane → data plane
121
+ *
122
+ * Sets both absolute (8hr) and idle (4hr) refresh token expiry.
123
+ */
124
+ export async function executeFullTokenChain(auth0Config, authCode, codeVerifier) {
125
+ const auth0Response = await exchangeAuthCodeForTokens(auth0Config, authCode, codeVerifier);
126
+ const cpResponse = await exchangeIdTokenForControlPlaneToken(auth0Config.apiUrl, auth0Response.id_token);
127
+ const dpResponse = await exchangeControlPlaneForDataPlaneToken(auth0Config.apiUrl, cpResponse.token);
128
+ const now = Date.now();
129
+ return {
130
+ refreshToken: auth0Response.refresh_token,
131
+ refreshTokenAbsoluteExpiresAt: now + REFRESH_TOKEN_ABSOLUTE_LIFETIME_MS,
132
+ refreshTokenIdleExpiresAt: now + REFRESH_TOKEN_IDLE_LIFETIME_MS,
133
+ controlPlaneToken: cpResponse.token,
134
+ controlPlaneExpiresAt: now + CONTROL_PLANE_TOKEN_LIFETIME_MS,
135
+ dataPlaneToken: dpResponse.token,
136
+ dataPlaneExpiresAt: now + DATA_PLANE_TOKEN_LIFETIME_MS,
137
+ resourceId: cpResponse.user?.resource_id,
138
+ email: cpResponse.user?.email,
139
+ };
140
+ }
141
+ //# sourceMappingURL=token-chain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-chain.js","sourceRoot":"","sources":["../../../src/confluent/oauth/token-chain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EACL,+BAA+B,EAC/B,4BAA4B,EAC5B,kCAAkC,EAClC,8BAA8B,GAC/B,MAAM,yCAAyC,CAAC;AAOjD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,mEAAmE;AACnE,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAwBlC;;;;;GAKG;AACH,KAAK,UAAU,QAAQ,CACrB,GAAW,EACX,IAAiB,EACjB,SAAiB;IAEjB,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE;YACpC,GAAG,IAAI;YACP,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC;SAChD,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACxD,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,YAAY,CAAC,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,oBAAoB,kBAAkB,IAAI,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,GAAG,SAAS,SAAS,CAAC,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,YAAY,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,WAAwB,EACxB,QAAgB,EAChB,YAAoB;IAEpB,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC;QAC/B,UAAU,EAAE,oBAAoB;QAChC,SAAS,EAAE,WAAW,CAAC,QAAQ;QAC/B,IAAI,EAAE,QAAQ;QACd,aAAa,EAAE,YAAY;QAC3B,YAAY,EAAE,WAAW,CAAC,WAAW;KACtC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAC7B,WAAW,WAAW,CAAC,MAAM,cAAc,EAC3C;QACE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;QAChE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;KACtB,EACD,sBAAsB,CACvB,CAAC;IACF,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACvD,MAAc,EACd,OAAe;IAEf,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAC7B,GAAG,MAAM,eAAe,EACxB;QACE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;KAC5C,EACD,8BAA8B,CAC/B,CAAC;IACF,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qCAAqC,CACzD,MAAc,EACd,iBAAyB;IAEzB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAC7B,GAAG,MAAM,oBAAoB,EAC7B;QACE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,iBAAiB,EAAE;SAC7C;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;KACzB,EACD,2BAA2B,CAC5B,CAAC;IACF,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,WAAwB,EACxB,YAAoB;IAEpB,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC;QAC/B,UAAU,EAAE,eAAe;QAC3B,SAAS,EAAE,WAAW,CAAC,QAAQ;QAC/B,aAAa,EAAE,YAAY;KAC5B,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAC7B,WAAW,WAAW,CAAC,MAAM,cAAc,EAC3C;QACE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;QAChE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;KACtB,EACD,qBAAqB,CACtB,CAAC;IACF,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,WAAwB,EACxB,QAAgB,EAChB,YAAoB;IAEpB,MAAM,aAAa,GAAG,MAAM,yBAAyB,CACnD,WAAW,EACX,QAAQ,EACR,YAAY,CACb,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,mCAAmC,CAC1D,WAAW,CAAC,MAAM,EAClB,aAAa,CAAC,QAAQ,CACvB,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,qCAAqC,CAC5D,WAAW,CAAC,MAAM,EAClB,UAAU,CAAC,KAAK,CACjB,CAAC;IAEF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,OAAO;QACL,YAAY,EAAE,aAAa,CAAC,aAAa;QACzC,6BAA6B,EAAE,GAAG,GAAG,kCAAkC;QACvE,yBAAyB,EAAE,GAAG,GAAG,8BAA8B;QAC/D,iBAAiB,EAAE,UAAU,CAAC,KAAK;QACnC,qBAAqB,EAAE,GAAG,GAAG,+BAA+B;QAC5D,cAAc,EAAE,UAAU,CAAC,KAAK;QAChC,kBAAkB,EAAE,GAAG,GAAG,4BAA4B;QACtD,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,WAAW;QACxC,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK;KAC9B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ /** 5 minutes in milliseconds — control plane token lifetime */
2
+ export declare const CONTROL_PLANE_TOKEN_LIFETIME_MS: number;
3
+ /** 10 minutes in milliseconds — data plane token lifetime */
4
+ export declare const DATA_PLANE_TOKEN_LIFETIME_MS: number;
5
+ /** 8 hours in milliseconds — refresh token absolute lifetime from original login */
6
+ export declare const REFRESH_TOKEN_ABSOLUTE_LIFETIME_MS: number;
7
+ /** 4 hours in milliseconds — refresh token idle timeout, resets on each rotation */
8
+ export declare const REFRESH_TOKEN_IDLE_LIFETIME_MS: number;
9
+ /** 30 seconds in milliseconds — refresh control plane token this much before expiry */
10
+ export declare const CONTROL_PLANE_REFRESH_WINDOW_MS: number;
11
+ /** Failure count at which the auth context is flagged as permanently failed. */
12
+ export declare const MAX_CONSECUTIVE_TRANSIENT_FAILURES = 50;
13
+ //# sourceMappingURL=token-lifetimes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-lifetimes.d.ts","sourceRoot":"","sources":["../../../src/confluent/oauth/token-lifetimes.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,eAAO,MAAM,+BAA+B,QAAgB,CAAC;AAE7D,6DAA6D;AAC7D,eAAO,MAAM,4BAA4B,QAAiB,CAAC;AAE3D,oFAAoF;AACpF,eAAO,MAAM,kCAAkC,QAAqB,CAAC;AAErE,oFAAoF;AACpF,eAAO,MAAM,8BAA8B,QAAqB,CAAC;AAEjE,uFAAuF;AACvF,eAAO,MAAM,+BAA+B,QAAY,CAAC;AAEzD,gFAAgF;AAChF,eAAO,MAAM,kCAAkC,KAAK,CAAC"}
@@ -0,0 +1,13 @@
1
+ /** 5 minutes in milliseconds — control plane token lifetime */
2
+ export const CONTROL_PLANE_TOKEN_LIFETIME_MS = 5 * 60 * 1000;
3
+ /** 10 minutes in milliseconds — data plane token lifetime */
4
+ export const DATA_PLANE_TOKEN_LIFETIME_MS = 10 * 60 * 1000;
5
+ /** 8 hours in milliseconds — refresh token absolute lifetime from original login */
6
+ export const REFRESH_TOKEN_ABSOLUTE_LIFETIME_MS = 8 * 60 * 60 * 1000;
7
+ /** 4 hours in milliseconds — refresh token idle timeout, resets on each rotation */
8
+ export const REFRESH_TOKEN_IDLE_LIFETIME_MS = 4 * 60 * 60 * 1000;
9
+ /** 30 seconds in milliseconds — refresh control plane token this much before expiry */
10
+ export const CONTROL_PLANE_REFRESH_WINDOW_MS = 30 * 1000;
11
+ /** Failure count at which the auth context is flagged as permanently failed. */
12
+ export const MAX_CONSECUTIVE_TRANSIENT_FAILURES = 50;
13
+ //# sourceMappingURL=token-lifetimes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-lifetimes.js","sourceRoot":"","sources":["../../../src/confluent/oauth/token-lifetimes.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAE7D,6DAA6D;AAC7D,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE3D,oFAAoF;AACpF,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAErE,oFAAoF;AACpF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEjE,uFAAuF;AACvF,MAAM,CAAC,MAAM,+BAA+B,GAAG,EAAE,GAAG,IAAI,CAAC;AAEzD,gFAAgF;AAChF,MAAM,CAAC,MAAM,kCAAkC,GAAG,EAAE,CAAC"}