@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
package/dist/env.js CHANGED
@@ -7,7 +7,7 @@ let envValues = {};
7
7
  * Loads and validates environment variables
8
8
  * @returns Validated environment object
9
9
  */
10
- export async function loadEnv() {
10
+ function loadEnv() {
11
11
  try {
12
12
  // Load and validate environment variables with automatic type conversion
13
13
  return combinedSchema.parse(process.env);
@@ -20,15 +20,26 @@ export async function loadEnv() {
20
20
  /**
21
21
  * Initialize environment and save the values
22
22
  */
23
- export async function initEnv() {
23
+ export function initEnv() {
24
24
  if (!isInitialized) {
25
- envValues = await loadEnv();
25
+ envValues = loadEnv();
26
26
  isInitialized = true;
27
27
  }
28
28
  return envValues;
29
29
  }
30
- // Create a module to provide access to environment variables
31
- const env = new Proxy({}, {
30
+ /**
31
+ * Lazy proxy over the validated environment values. Reading any property
32
+ * before {@linkcode initEnv} has run throws — this is what catches code that
33
+ * tries to consult the env outside the bootstrap.
34
+ *
35
+ * The default-export shape was retired in #234 to make accidental consumers
36
+ * visibly fail at the import site, and an ESLint rule slams the door behind
37
+ * it. The intended pattern is: `main()` calls `initEnv()` once, captures the
38
+ * returned `Environment` into a local, and passes it explicitly to the few
39
+ * call sites that need it. No global env consultation lives in handler code,
40
+ * test infrastructure, or anywhere else.
41
+ */
42
+ export const env = new Proxy({}, {
32
43
  get: (_, property) => {
33
44
  if (!isInitialized) {
34
45
  throw new Error(`Environment not initialized. Attempted to access ${property} before initialization.`);
@@ -36,5 +47,4 @@ const env = new Proxy({}, {
36
47
  return envValues[property];
37
48
  },
38
49
  });
39
- export default env;
40
50
  //# sourceMappingURL=env.js.map
package/dist/env.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAKxC,sCAAsC;AACtC,IAAI,aAAa,GAAG,KAAK,CAAC;AAC1B,IAAI,SAAS,GAAgB,EAAiB,CAAC;AAE/C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,IAAI,CAAC;QACH,yEAAyE;QACzE,OAAO,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,8BAA8B,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,SAAS,GAAG,MAAM,OAAO,EAAE,CAAC;QAC5B,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,6DAA6D;AAC7D,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,EAAiB,EAAE;IACvC,GAAG,EAAE,CAAC,CAAC,EAAE,QAAgB,EAAE,EAAE;QAC3B,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,oDAAoD,QAAQ,yBAAyB,CACtF,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC,QAA6B,CAAC,CAAC;IAClD,CAAC;CACF,CAAC,CAAC;AAEH,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAKxC,sCAAsC;AACtC,IAAI,aAAa,GAAG,KAAK,CAAC;AAC1B,IAAI,SAAS,GAAgB,EAAiB,CAAC;AAE/C;;;GAGG;AACH,SAAS,OAAO;IACd,IAAI,CAAC;QACH,yEAAyE;QACzE,OAAO,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,8BAA8B,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO;IACrB,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,SAAS,GAAG,OAAO,EAAE,CAAC;QACtB,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,EAAiB,EAAE;IAC9C,GAAG,EAAE,CAAC,CAAC,EAAE,QAAgB,EAAE,EAAE;QAC3B,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,oDAAoD,QAAQ,yBAAyB,CACtF,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC,QAA6B,CAAC,CAAC;IAClD,CAAC;CACF,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,76 @@
1
1
  #!/usr/bin/env node
2
- export {};
2
+ import { CLIOptions } from "./cli.js";
3
+ import { MCPServerConfiguration } from "./config/index.js";
4
+ import { ToolHandler } from "./confluent/tools/base-tools.js";
5
+ import { ToolName } from "./confluent/tools/tool-name.js";
6
+ import { ServerRuntime } from "./server-runtime.js";
7
+ /**
8
+ * Determine the subset of ToolHandlers to register based on the filtered tool names
9
+ * and which connections satisfy each tool's service requirements.
10
+ **/
11
+ export declare function getToolHandlersToRegister(filteredToolNames: ToolName[], runtime: ServerRuntime): Map<ToolName, ToolHandler>;
12
+ /**
13
+ * Resolve the Segment write key handed to `TelemetryService.initialize`.
14
+ *
15
+ * Precedence: an explicit YAML `server.analytics.write_key` wins; otherwise
16
+ * fall back to `buildConfig.TELEMETRY_WRITE_KEY` (the value `npm pack` injects
17
+ * at release time). On unpacked / dev builds the build-time value is empty,
18
+ * so an absent YAML field produces an empty-string fallback that
19
+ * `TelemetryService` treats as "no key supplied" — analytics stays off.
20
+ *
21
+ * Extracted from `main()` so the precedence is unit-testable without booting
22
+ * the full server.
23
+ */
24
+ export declare function resolveTelemetryWriteKey(mcpConfig: MCPServerConfiguration): string | undefined;
25
+ export declare function outputApiKey(): void;
26
+ /**
27
+ * Bootstrap a starter `config.yaml` in the current working directory by
28
+ * copying one of the bundled example templates, then ensure the new file
29
+ * is listed in `<cwd>/.gitignore` so credentials filled in later don't
30
+ * slip into git.
31
+ *
32
+ * Resolved relative to `import.meta.url` (the compiled `dist/index.js`)
33
+ * so this keeps working when invoked via `npx`, where `process.cwd()`
34
+ * is the user's project but the example file lives next to the install.
35
+ *
36
+ * Refuses to overwrite an existing destination so an accidental rerun
37
+ * cannot wipe credentials the user already filled in. The write uses
38
+ * `wx` (exclusive create) so the existence check and the create happen
39
+ * as a single syscall — there is no TOCTOU window where another process
40
+ * could create the file between a precheck and the write.
41
+ *
42
+ * @param oauth When true, copy `config.oauth.example.yaml` (the minimal
43
+ * OAuth template); when false, copy `config.example.yaml` (the
44
+ * fully-annotated direct/api-key template). The CLI flag in the EEXIST
45
+ * error message is selected to match.
46
+ */
47
+ export declare function outputInitConfig(oauth?: boolean): void;
48
+ export declare function outputToolList(filteredToolNames: ToolName[]): void;
49
+ /**
50
+ * Result of {@link handleEarlyExits}. Returning a value instead of calling
51
+ * `process.exit` directly keeps the function pure enough that tests can
52
+ * assert dispatch behavior by inspecting the result + per-output spies,
53
+ * without having to stub `process.exit`.
54
+ */
55
+ export type EarlyExitResult = {
56
+ handled: false;
57
+ } | {
58
+ handled: true;
59
+ exitCode: 0;
60
+ } | {
61
+ handled: true;
62
+ exitCode: 1;
63
+ stderr: string;
64
+ };
65
+ /**
66
+ * Dispatch the CLI's mutually-exclusive early-exit modes — generate-key,
67
+ * init-config, init-oauth-config, and list-tools — before the server
68
+ * bootstrap begins. Returns `{ handled: false }` when none apply, in
69
+ * which case the caller continues with normal startup.
70
+ *
71
+ * On init-config failure, the friendly error message is returned in
72
+ * `stderr` rather than written here, so the caller controls writing to
73
+ * stderr and exiting.
74
+ */
75
+ export declare function handleEarlyExits(cliOptions: CLIOptions): EarlyExitResult;
3
76
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EACL,UAAU,EAMX,MAAM,aAAa,CAAC;AACrB,OAAO,EAGL,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAEjE,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAM7D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD;;;IAGI;AACJ,wBAAgB,yBAAyB,CACvC,iBAAiB,EAAE,QAAQ,EAAE,EAC7B,OAAO,EAAE,aAAa,GACrB,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAiD5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,sBAAsB,GAChC,MAAM,GAAG,SAAS,CAIpB;AAED,wBAAgB,YAAY,IAAI,IAAI,CAQnC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,GAAE,OAAe,GAAG,IAAI,CAgC7D;AAkCD,wBAAgB,cAAc,CAAC,iBAAiB,EAAE,QAAQ,EAAE,GAAG,IAAI,CAUlE;AAED;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GACvB;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,GAClB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,CAAC,CAAA;CAAE,GAC9B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe,CAqBxE"}
package/dist/index.js CHANGED
@@ -1,17 +1,75 @@
1
1
  #!/usr/bin/env node
2
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
- import { getFilteredToolNames, getPackageVersion, parseCliArgs, } from "./cli.js";
4
- import { DefaultClientManager } from "./confluent/client-manager.js";
5
- import { ToolFactory } from "./confluent/tools/tool-factory.js";
6
- import { ToolName } from "./confluent/tools/tool-name.js";
2
+ import { DisplayedCommandLineUsageError, getFilteredToolNames, getPackageVersion, loadDotEnvFile, parseCliArgs, } from "./cli.js";
3
+ import { buildConfigFromEnvAndCli, loadConfigFromYaml, } from "./config/index.js";
4
+ import { buildConfigTelemetry } from "./confluent/config-telemetry.js";
5
+ import { buildConfig, fs, path } from "./confluent/node-deps.js";
7
6
  import { TelemetryEvent, TelemetryService } from "./confluent/telemetry.js";
7
+ import { groupDisabledToolsByReason } from "./confluent/tools/tool-availability.js";
8
+ import { ToolName } from "./confluent/tools/tool-name.js";
9
+ import { ToolHandlerRegistry } from "./confluent/tools/tool-registry.js";
8
10
  import { initEnv } from "./env.js";
9
11
  import { logger, setLogLevel } from "./logger.js";
10
12
  import { generateApiKey, TransportManager } from "./mcp/transports/index.js";
11
- // Parse command line arguments and load environment variables if --env-file is specified
12
- const cliOptions = parseCliArgs();
13
- // Handle --generate-key early (before any other initialization)
14
- if (cliOptions.generateKey) {
13
+ import { ServerRuntime } from "./server-runtime.js";
14
+ /**
15
+ * Determine the subset of ToolHandlers to register based on the filtered tool names
16
+ * and which connections satisfy each tool's service requirements.
17
+ **/
18
+ export function getToolHandlersToRegister(filteredToolNames, runtime) {
19
+ const toolHandlers = new Map();
20
+ const knownIds = new Set(Object.keys(runtime.config.connections));
21
+ // Pass 1: drop tools excluded by the allow/block list (logged per-tool —
22
+ // the reason is config-driven, not predicate-driven, so it doesn't fold
23
+ // into the grouped warning emitted later).
24
+ const candidates = [];
25
+ for (const toolName of Object.values(ToolName)) {
26
+ if (!filteredToolNames.includes(toolName)) {
27
+ logger.warn(`Tool ${toolName} disabled due to allow/block list rules`);
28
+ continue;
29
+ }
30
+ candidates.push([toolName, ToolHandlerRegistry.getToolHandler(toolName)]);
31
+ }
32
+ // Pass 2: register tools that are enabled on at least one connection.
33
+ for (const [toolName, handler] of candidates) {
34
+ const enabledIds = handler.enabledConnectionIds(runtime);
35
+ const unknownIds = enabledIds.filter((id) => !knownIds.has(id));
36
+ if (unknownIds.length > 0) {
37
+ throw new Error(`Tool ${toolName}: enabledConnectionIds() returned unknown connection ID(s): ${unknownIds.join(", ")}`);
38
+ }
39
+ if (enabledIds.length > 0) {
40
+ toolHandlers.set(toolName, handler);
41
+ logger.info(`Tool ${toolName} enabled`);
42
+ }
43
+ }
44
+ // Pass 3: emit one grouped warning per (connectionId, reason) for tools
45
+ // that are fully disabled — readers see the missing config piece and the
46
+ // list of all tools blocked by it in a single line, rather than one
47
+ // line per tool.
48
+ for (const group of groupDisabledToolsByReason(candidates, runtime)) {
49
+ logger.warn(`Tools disabled on connection '${group.connectionId}' — ${group.reason}: ${group.toolNames.join(", ")}`);
50
+ }
51
+ // Raise an error if no tools are enabled, as the server would be non-functional without any tools.
52
+ if (toolHandlers.size === 0) {
53
+ throw new Error("No tools enabled. Please check your configuration and environment variables.");
54
+ }
55
+ return toolHandlers;
56
+ }
57
+ /**
58
+ * Resolve the Segment write key handed to `TelemetryService.initialize`.
59
+ *
60
+ * Precedence: an explicit YAML `server.analytics.write_key` wins; otherwise
61
+ * fall back to `buildConfig.TELEMETRY_WRITE_KEY` (the value `npm pack` injects
62
+ * at release time). On unpacked / dev builds the build-time value is empty,
63
+ * so an absent YAML field produces an empty-string fallback that
64
+ * `TelemetryService` treats as "no key supplied" — analytics stays off.
65
+ *
66
+ * Extracted from `main()` so the precedence is unit-testable without booting
67
+ * the full server.
68
+ */
69
+ export function resolveTelemetryWriteKey(mcpConfig) {
70
+ return (mcpConfig.server.analytics?.write_key ?? buildConfig.TELEMETRY_WRITE_KEY);
71
+ }
72
+ export function outputApiKey() {
15
73
  const apiKey = generateApiKey();
16
74
  console.log("\nGenerated MCP API Key:");
17
75
  console.log("=".repeat(64));
@@ -19,176 +77,229 @@ if (cliOptions.generateKey) {
19
77
  console.log("=".repeat(64));
20
78
  console.log("\nAdd this to your .env file:");
21
79
  console.log(`MCP_API_KEY=${apiKey}\n`);
22
- process.exit(0);
80
+ }
81
+ /**
82
+ * Bootstrap a starter `config.yaml` in the current working directory by
83
+ * copying one of the bundled example templates, then ensure the new file
84
+ * is listed in `<cwd>/.gitignore` so credentials filled in later don't
85
+ * slip into git.
86
+ *
87
+ * Resolved relative to `import.meta.url` (the compiled `dist/index.js`)
88
+ * so this keeps working when invoked via `npx`, where `process.cwd()`
89
+ * is the user's project but the example file lives next to the install.
90
+ *
91
+ * Refuses to overwrite an existing destination so an accidental rerun
92
+ * cannot wipe credentials the user already filled in. The write uses
93
+ * `wx` (exclusive create) so the existence check and the create happen
94
+ * as a single syscall — there is no TOCTOU window where another process
95
+ * could create the file between a precheck and the write.
96
+ *
97
+ * @param oauth When true, copy `config.oauth.example.yaml` (the minimal
98
+ * OAuth template); when false, copy `config.example.yaml` (the
99
+ * fully-annotated direct/api-key template). The CLI flag in the EEXIST
100
+ * error message is selected to match.
101
+ */
102
+ export function outputInitConfig(oauth = false) {
103
+ const sourceFileName = oauth
104
+ ? "config.oauth.example.yaml"
105
+ : "config.example.yaml";
106
+ const flagName = oauth ? "init-oauth-config" : "init-config";
107
+ const sourceUrl = new URL(`../${sourceFileName}`, import.meta.url);
108
+ const destPath = path.resolve("config.yaml");
109
+ const contents = fs.readFileSync(sourceUrl, "utf-8");
110
+ try {
111
+ fs.writeFileSync(destPath, contents, { flag: "wx" });
112
+ }
113
+ catch (err) {
114
+ if (err.code === "EEXIST") {
115
+ throw new Error(`config.yaml already exists at ${destPath}. ` +
116
+ `Remove or rename it before running --${flagName}.`);
117
+ }
118
+ throw err;
119
+ }
120
+ const gitignoreNote = ensureGitignoreEntry(destPath);
121
+ console.log(`wrote ./config.yaml (${gitignoreNote})`);
122
+ // OAuth has no credentials to edit; the bundled template is already
123
+ // runnable as-is. The api-key template, by contrast, ships placeholder
124
+ // values the user must fill in before the server can connect.
125
+ console.log(oauth
126
+ ? `Next: run with --config ./config.yaml`
127
+ : `Next: edit credentials in config.yaml and run with --config ./config.yaml`);
128
+ }
129
+ /**
130
+ * Ensure the basename of `filePath` is listed in `<dirname(filePath)>/.gitignore`.
131
+ * Creates the gitignore if missing; appends idempotently if present (matching
132
+ * trimmed lines verbatim — `*.yaml` globs or `/config.yaml` anchors are not
133
+ * recognized, so a user who already wrote either form will see a duplicate
134
+ * `config.yaml` entry, which is harmless).
135
+ *
136
+ * @returns A short note describing what happened, suitable for the success message.
137
+ */
138
+ function ensureGitignoreEntry(filePath) {
139
+ const dir = path.dirname(filePath);
140
+ const fileName = path.basename(filePath);
141
+ const gitignorePath = path.join(dir, ".gitignore");
142
+ if (!fs.existsSync(gitignorePath)) {
143
+ fs.writeFileSync(gitignorePath, `${fileName}\n`);
144
+ return "added to .gitignore";
145
+ }
146
+ const existing = fs.readFileSync(gitignorePath, "utf-8");
147
+ const alreadyListed = existing
148
+ .split("\n")
149
+ .some((line) => line.trim() === fileName);
150
+ if (alreadyListed) {
151
+ return ".gitignore already excludes it";
152
+ }
153
+ const prefix = existing.length > 0 && !existing.endsWith("\n") ? "\n" : "";
154
+ fs.appendFileSync(gitignorePath, `${prefix}${fileName}\n`);
155
+ return "added to .gitignore";
156
+ }
157
+ export function outputToolList(filteredToolNames) {
158
+ const MAX_DESC_LENGTH = 120;
159
+ filteredToolNames.forEach((toolName) => {
160
+ const config = ToolHandlerRegistry.getToolConfig(toolName);
161
+ let desc = config.description.replaceAll(/\s+/g, " ").trim();
162
+ if (desc.length > MAX_DESC_LENGTH) {
163
+ desc = desc.slice(0, MAX_DESC_LENGTH - 3) + "...";
164
+ }
165
+ console.log(`\x1b[32m${config.name}\x1b[0m: ${desc}`);
166
+ });
167
+ }
168
+ /**
169
+ * Dispatch the CLI's mutually-exclusive early-exit modes — generate-key,
170
+ * init-config, init-oauth-config, and list-tools — before the server
171
+ * bootstrap begins. Returns `{ handled: false }` when none apply, in
172
+ * which case the caller continues with normal startup.
173
+ *
174
+ * On init-config failure, the friendly error message is returned in
175
+ * `stderr` rather than written here, so the caller controls writing to
176
+ * stderr and exiting.
177
+ */
178
+ export function handleEarlyExits(cliOptions) {
179
+ if (cliOptions.generateKey) {
180
+ outputApiKey();
181
+ return { handled: true, exitCode: 0 };
182
+ }
183
+ if (cliOptions.initConfig) {
184
+ return runOutputInitConfig(false);
185
+ }
186
+ if (cliOptions.initOauthConfig) {
187
+ return runOutputInitConfig(true);
188
+ }
189
+ if (cliOptions.listTools) {
190
+ outputToolList(getFilteredToolNames(cliOptions.allowTools ?? [], cliOptions.blockTools ?? []));
191
+ return { handled: true, exitCode: 0 };
192
+ }
193
+ return { handled: false };
194
+ }
195
+ function runOutputInitConfig(oauth) {
196
+ try {
197
+ outputInitConfig(oauth);
198
+ return { handled: true, exitCode: 0 };
199
+ }
200
+ catch (error) {
201
+ const msg = error instanceof Error ? error.message : String(error);
202
+ const flag = oauth ? "--init-oauth-config" : "--init-config";
203
+ return { handled: true, exitCode: 1, stderr: `${flag} failed: ${msg}` };
204
+ }
23
205
  }
24
206
  async function main() {
25
207
  try {
26
- // Initialize environment after CLI args are processed
27
- const env = await initEnv();
28
- setLogLevel(env.LOG_LEVEL);
29
- // Merge environment variables with kafka config from CLI
30
- // some additional configurations could be set in the client manager
31
- // like separating groupIds by sessionId
32
- const kafkaClientConfig = {
33
- // Base configuration from environment variables
34
- "bootstrap.servers": env.BOOTSTRAP_SERVERS,
35
- "client.id": "mcp-confluent",
36
- ...(env.KAFKA_API_KEY && env.KAFKA_API_SECRET
37
- ? {
38
- "security.protocol": "sasl_ssl",
39
- "sasl.mechanisms": "PLAIN",
40
- "sasl.username": env.KAFKA_API_KEY,
41
- "sasl.password": env.KAFKA_API_SECRET,
42
- }
43
- : {}),
44
- // Merge any additional properties from the kafka config file
45
- ...cliOptions.kafkaConfig,
46
- };
47
- const clientManager = new DefaultClientManager({
48
- kafka: kafkaClientConfig,
49
- endpoints: {
50
- cloud: env.CONFLUENT_CLOUD_REST_ENDPOINT,
51
- flink: env.FLINK_REST_ENDPOINT,
52
- schemaRegistry: env.SCHEMA_REGISTRY_ENDPOINT,
53
- kafka: env.KAFKA_REST_ENDPOINT,
54
- telemetry: env.TELEMETRY_ENDPOINT ?? "https://api.telemetry.confluent.cloud",
55
- },
56
- auth: {
57
- cloud: {
58
- apiKey: env.CONFLUENT_CLOUD_API_KEY,
59
- apiSecret: env.CONFLUENT_CLOUD_API_SECRET,
60
- },
61
- tableflow: {
62
- apiKey: env.TABLEFLOW_API_KEY,
63
- apiSecret: env.TABLEFLOW_API_SECRET,
64
- },
65
- flink: {
66
- apiKey: env.FLINK_API_KEY,
67
- apiSecret: env.FLINK_API_SECRET,
68
- },
69
- schemaRegistry: {
70
- apiKey: env.SCHEMA_REGISTRY_API_KEY,
71
- apiSecret: env.SCHEMA_REGISTRY_API_SECRET,
72
- },
73
- kafka: {
74
- apiKey: env.KAFKA_API_KEY,
75
- apiSecret: env.KAFKA_API_SECRET,
76
- },
77
- telemetry: {
78
- apiKey: (env.TELEMETRY_API_KEY ?? env.CONFLUENT_CLOUD_API_KEY),
79
- apiSecret: (env.TELEMETRY_API_SECRET ??
80
- env.CONFLUENT_CLOUD_API_SECRET),
81
- },
82
- },
83
- });
84
- const filteredToolNames = getFilteredToolNames(cliOptions);
85
- // If --list-tools is set, print tool names with descriptions and exit
86
- if (cliOptions.listTools) {
87
- const MAX_DESC_LENGTH = 120;
88
- filteredToolNames.forEach((toolName) => {
89
- const config = ToolFactory.getToolConfig(toolName);
90
- let desc = config.description.replace(/\s+/g, " ").trim();
91
- if (desc.length > MAX_DESC_LENGTH) {
92
- desc = desc.slice(0, MAX_DESC_LENGTH - 3) + "...";
93
- }
94
- console.log(`\x1b[32m${config.name}\x1b[0m: ${desc}`);
208
+ // Parse command line arguments.(NO LONGER LOADS ENV VARS FROM -e file!)
209
+ const cliOptions = parseCliArgs(process.argv);
210
+ const earlyExit = handleEarlyExits(cliOptions);
211
+ if (earlyExit.handled) {
212
+ if (earlyExit.exitCode === 1) {
213
+ console.error(earlyExit.stderr);
214
+ }
215
+ process.exit(earlyExit.exitCode);
216
+ }
217
+ const filteredToolNames = getFilteredToolNames(cliOptions.allowTools ?? [], cliOptions.blockTools ?? []);
218
+ if (cliOptions.envFile) {
219
+ loadDotEnvFile(cliOptions.envFile);
220
+ }
221
+ // Convert our known env vars into a typed Environment obj.
222
+ const env = initEnv();
223
+ let mcpConfig;
224
+ // Load and validate configuration — from YAML file if --config provided, else from env vars + CLI overrides.
225
+ if (cliOptions.config) {
226
+ mcpConfig = loadConfigFromYaml(cliOptions.config, process.env);
227
+ }
228
+ else {
229
+ mcpConfig = buildConfigFromEnvAndCli(env, {
230
+ disableAuth: cliOptions.disableAuth,
231
+ allowedHosts: cliOptions.allowedHosts,
232
+ kafkaConfig: cliOptions.kafkaConfig,
233
+ oauth: cliOptions.oauth,
234
+ ccloudEnv: cliOptions.ccloudEnv,
95
235
  });
96
- process.exit(0);
97
236
  }
98
- const toolHandlers = new Map();
99
- // Initialize tools and check their requirements
100
- Object.values(ToolName).forEach((toolName) => {
101
- if (!filteredToolNames.includes(toolName)) {
102
- logger.warn(`Tool ${toolName} disabled due to allow/block list rules`);
103
- return;
104
- }
105
- const handler = ToolFactory.createToolHandler(toolName);
106
- // Skip cloud-only tools if disabled by CLI/env
107
- if (cliOptions.disableConfluentCloudTools &&
108
- handler.isConfluentCloudOnly()) {
109
- logger.warn(`Tool ${toolName} disabled due to --disable-confluent-cloud-tools flag or DISABLE_CONFLUENT_CLOUD_TOOLS env var`);
110
- return;
111
- }
112
- const missingVars = handler
113
- .getRequiredEnvVars()
114
- .filter((varName) => !env[varName]);
115
- if (missingVars.length === 0) {
116
- toolHandlers.set(toolName, handler);
117
- logger.info(`Tool ${toolName} enabled`);
118
- }
119
- else {
120
- logger.warn(`Tool ${toolName} disabled due to missing environment variables: ${missingVars.join(", ")}`);
121
- }
237
+ setLogLevel(mcpConfig.server.log_level);
238
+ // Transport selection: YAML config is authoritative when --config is used;
239
+ // CLI flag (or its default) is used on the env-var path.
240
+ const transports = cliOptions.config
241
+ ? mcpConfig.server.transports
242
+ : cliOptions.transports;
243
+ // DO_NOT_TRACK is a cross-tool user preference (consoledonottrack.com);
244
+ // the env var acts as a floor so it is honored even when --config is used.
245
+ TelemetryService.initialize({
246
+ doNotTrack: mcpConfig.server.do_not_track || env.DO_NOT_TRACK,
247
+ writeKey: resolveTelemetryWriteKey(mcpConfig),
122
248
  });
249
+ const telemetry = TelemetryService.getInstance();
250
+ logger.info(`${mcpConfig.getConnectionNames().length} connections loaded successfully`);
251
+ const runtime = ServerRuntime.fromConfig(mcpConfig);
123
252
  const serverVersion = getPackageVersion();
124
- const server = new McpServer({
125
- name: "confluent",
126
- version: serverVersion,
127
- });
128
- TelemetryService.getInstance().setCommonProperties({
129
- serverVersion,
130
- transportType: cliOptions.transports.join(","),
131
- });
132
- // Capture MCP client info when the handshake completes.
133
- server.server.oninitialized = () => {
134
- const clientInfo = server.server.getClientVersion();
135
- TelemetryService.getInstance().setCommonProperties({
136
- clientName: clientInfo?.name,
137
- clientVersion: clientInfo?.version,
138
- });
139
- };
140
- toolHandlers.forEach((handler, name) => {
141
- const config = handler.getToolConfig();
142
- server.registerTool(name, {
143
- description: config.description,
144
- inputSchema: config.inputSchema,
145
- annotations: config.annotations,
146
- }, async (args, context) => {
147
- const sessionId = context?.sessionId;
148
- const startTime = Date.now();
149
- try {
150
- const result = await handler.handle(clientManager, args, sessionId);
151
- TelemetryService.getInstance().track(TelemetryEvent.TOOL_CALL, {
152
- toolName: name,
153
- durationMs: Date.now() - startTime,
154
- status: result.isError ? "error" : "success",
155
- });
156
- return result;
157
- }
158
- catch (error) {
159
- TelemetryService.getInstance().track(TelemetryEvent.TOOL_CALL, {
160
- toolName: name,
161
- durationMs: Date.now() - startTime,
162
- status: "error",
163
- });
164
- throw error;
165
- }
166
- });
167
- });
168
- // Prepare auth configuration
169
- const disableAuth = cliOptions.disableAuth || env.MCP_AUTH_DISABLED;
170
- const allowedHosts = cliOptions.allowedHosts || env.MCP_ALLOWED_HOSTS;
171
- const apiKey = env.MCP_API_KEY;
253
+ telemetry.setCommonProperties({ serverVersion });
254
+ const toolHandlers = getToolHandlersToRegister(filteredToolNames, runtime);
255
+ logger.info({ enabledTools: [...toolHandlers.keys()] }, `${toolHandlers.size} tool(s) enabled`);
172
256
  // Warn if auth is disabled
173
- if (disableAuth) {
257
+ if (mcpConfig.server.auth.disabled) {
174
258
  logger.warn("Authentication is DISABLED for HTTP/SSE transports. " +
175
259
  "This should only be used in development environments.");
176
260
  }
177
- const transportManager = new TransportManager(server, {
178
- disableAuth,
179
- allowedHosts,
180
- apiKey,
261
+ const transportManager = new TransportManager({
262
+ disableAuth: mcpConfig.server.auth.disabled,
263
+ allowedHosts: mcpConfig.server.auth.allowed_hosts,
264
+ apiKey: mcpConfig.server.auth.api_key,
181
265
  });
266
+ const serverOptions = {
267
+ serverVersion,
268
+ toolHandlers,
269
+ runtime,
270
+ track: (props) => telemetry.track(TelemetryEvent.TOOL_CALL, {
271
+ ...props,
272
+ }),
273
+ };
182
274
  // Start all transports with a single call
183
- logger.info(`Starting transports: ${cliOptions.transports.join(", ")}`);
184
- await transportManager.start(cliOptions.transports, env.HTTP_PORT, env.HTTP_HOST, env.HTTP_MCP_ENDPOINT_PATH, env.SSE_MCP_ENDPOINT_PATH, env.SSE_MCP_MESSAGE_ENDPOINT_PATH);
275
+ logger.info(`Starting transports: ${transports.join(", ")}`);
276
+ await transportManager.start({
277
+ serverOptions,
278
+ types: transports,
279
+ http: {
280
+ port: mcpConfig.server.http.port,
281
+ host: mcpConfig.server.http.host,
282
+ mcpEndpointPath: mcpConfig.server.http.mcp_endpoint,
283
+ sseEndpointPath: mcpConfig.server.http.sse_endpoint,
284
+ sseMessageEndpointPath: mcpConfig.server.http.sse_message_endpoint,
285
+ },
286
+ });
287
+ // Boot-time invariants (config source, active transports, connection
288
+ // types) ride this one-shot event rather than every TOOL_CALL — they
289
+ // don't change after startup, so duplicating them per tool call buys
290
+ // nothing. Warehouse queries join SERVER_START to TOOL_CALL on
291
+ // `serverSessionId` (a common property) when slicing is needed.
292
+ telemetry.track(TelemetryEvent.SERVER_START, {
293
+ ...buildConfigTelemetry(cliOptions, mcpConfig, transports),
294
+ });
185
295
  // Set up cleanup handlers
186
296
  const performCleanup = async () => {
187
297
  logger.info("Shutting down...");
188
- await TelemetryService.getInstance().shutdown();
298
+ await telemetry.shutdown();
189
299
  await transportManager.stop();
190
- await clientManager.disconnect();
191
- await server.close();
300
+ // shutdown() is race-safe with an in-flight bootstrap.
301
+ runtime.oauthHolder?.shutdown();
302
+ await runtime.clientManager.disconnect();
192
303
  process.exit(0);
193
304
  };
194
305
  process.on("SIGINT", performCleanup);
@@ -197,12 +308,14 @@ async function main() {
197
308
  process.on("SIGUSR2", performCleanup);
198
309
  }
199
310
  catch (error) {
311
+ if (error instanceof DisplayedCommandLineUsageError) {
312
+ process.exit(0);
313
+ }
200
314
  logger.error({ err: error }, "Error starting server");
201
315
  process.exit(1);
202
316
  }
203
317
  }
204
- main().catch((error) => {
205
- logger.error({ error }, "Error starting server");
206
- process.exit(1);
207
- });
318
+ if (process.env.NODE_ENV !== "test") {
319
+ await main();
320
+ }
208
321
  //# sourceMappingURL=index.js.map