kubeview-mcp 1.0.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 (454) hide show
  1. package/.prettierrc.json +11 -0
  2. package/CHANGELOG.md +55 -0
  3. package/LICENSE +21 -0
  4. package/README.md +251 -0
  5. package/RELEASE.md +154 -0
  6. package/TODO.md +0 -0
  7. package/bin/kubeview-mcp.js +274 -0
  8. package/bin/setup.js +368 -0
  9. package/dist/src/cli/cli.d.ts +3 -0
  10. package/dist/src/cli/cli.d.ts.map +1 -0
  11. package/dist/src/cli/cli.js +23 -0
  12. package/dist/src/cli/cli.js.map +1 -0
  13. package/dist/src/index.d.ts +8 -0
  14. package/dist/src/index.d.ts.map +1 -0
  15. package/dist/src/index.js +45 -0
  16. package/dist/src/index.js.map +1 -0
  17. package/dist/src/kubernetes/BaseResourceOperations.d.ts +155 -0
  18. package/dist/src/kubernetes/BaseResourceOperations.d.ts.map +1 -0
  19. package/dist/src/kubernetes/BaseResourceOperations.js +136 -0
  20. package/dist/src/kubernetes/BaseResourceOperations.js.map +1 -0
  21. package/dist/src/kubernetes/CircuitBreaker.d.ts +182 -0
  22. package/dist/src/kubernetes/CircuitBreaker.d.ts.map +1 -0
  23. package/dist/src/kubernetes/CircuitBreaker.js +369 -0
  24. package/dist/src/kubernetes/CircuitBreaker.js.map +1 -0
  25. package/dist/src/kubernetes/ConnectionManager.d.ts +60 -0
  26. package/dist/src/kubernetes/ConnectionManager.d.ts.map +1 -0
  27. package/dist/src/kubernetes/ConnectionManager.js +77 -0
  28. package/dist/src/kubernetes/ConnectionManager.js.map +1 -0
  29. package/dist/src/kubernetes/ConnectionPool.d.ts +183 -0
  30. package/dist/src/kubernetes/ConnectionPool.d.ts.map +1 -0
  31. package/dist/src/kubernetes/ConnectionPool.js +437 -0
  32. package/dist/src/kubernetes/ConnectionPool.js.map +1 -0
  33. package/dist/src/kubernetes/ErrorHandler.d.ts +172 -0
  34. package/dist/src/kubernetes/ErrorHandler.d.ts.map +1 -0
  35. package/dist/src/kubernetes/ErrorHandler.js +328 -0
  36. package/dist/src/kubernetes/ErrorHandler.js.map +1 -0
  37. package/dist/src/kubernetes/ErrorHandling.d.ts +148 -0
  38. package/dist/src/kubernetes/ErrorHandling.d.ts.map +1 -0
  39. package/dist/src/kubernetes/ErrorHandling.js +304 -0
  40. package/dist/src/kubernetes/ErrorHandling.js.map +1 -0
  41. package/dist/src/kubernetes/KubernetesClient.d.ts +162 -0
  42. package/dist/src/kubernetes/KubernetesClient.d.ts.map +1 -0
  43. package/dist/src/kubernetes/KubernetesClient.js +382 -0
  44. package/dist/src/kubernetes/KubernetesClient.js.map +1 -0
  45. package/dist/src/kubernetes/ResourceOperations.d.ts +69 -0
  46. package/dist/src/kubernetes/ResourceOperations.d.ts.map +1 -0
  47. package/dist/src/kubernetes/ResourceOperations.js +99 -0
  48. package/dist/src/kubernetes/ResourceOperations.js.map +1 -0
  49. package/dist/src/kubernetes/RetryStrategy.d.ts +137 -0
  50. package/dist/src/kubernetes/RetryStrategy.d.ts.map +1 -0
  51. package/dist/src/kubernetes/RetryStrategy.js +277 -0
  52. package/dist/src/kubernetes/RetryStrategy.js.map +1 -0
  53. package/dist/src/kubernetes/RetryableOperation.d.ts +118 -0
  54. package/dist/src/kubernetes/RetryableOperation.d.ts.map +1 -0
  55. package/dist/src/kubernetes/RetryableOperation.js +233 -0
  56. package/dist/src/kubernetes/RetryableOperation.js.map +1 -0
  57. package/dist/src/kubernetes/index.d.ts +18 -0
  58. package/dist/src/kubernetes/index.d.ts.map +1 -0
  59. package/dist/src/kubernetes/index.js +28 -0
  60. package/dist/src/kubernetes/index.js.map +1 -0
  61. package/dist/src/kubernetes/resources/ConfigMapOperations.d.ts +60 -0
  62. package/dist/src/kubernetes/resources/ConfigMapOperations.d.ts.map +1 -0
  63. package/dist/src/kubernetes/resources/ConfigMapOperations.js +306 -0
  64. package/dist/src/kubernetes/resources/ConfigMapOperations.js.map +1 -0
  65. package/dist/src/kubernetes/resources/CustomResourceOperations.d.ts +55 -0
  66. package/dist/src/kubernetes/resources/CustomResourceOperations.d.ts.map +1 -0
  67. package/dist/src/kubernetes/resources/CustomResourceOperations.js +363 -0
  68. package/dist/src/kubernetes/resources/CustomResourceOperations.js.map +1 -0
  69. package/dist/src/kubernetes/resources/DeploymentOperations.d.ts +66 -0
  70. package/dist/src/kubernetes/resources/DeploymentOperations.d.ts.map +1 -0
  71. package/dist/src/kubernetes/resources/DeploymentOperations.js +234 -0
  72. package/dist/src/kubernetes/resources/DeploymentOperations.js.map +1 -0
  73. package/dist/src/kubernetes/resources/IngressOperations.d.ts +60 -0
  74. package/dist/src/kubernetes/resources/IngressOperations.d.ts.map +1 -0
  75. package/dist/src/kubernetes/resources/IngressOperations.js +224 -0
  76. package/dist/src/kubernetes/resources/IngressOperations.js.map +1 -0
  77. package/dist/src/kubernetes/resources/MetricOperations.d.ts +218 -0
  78. package/dist/src/kubernetes/resources/MetricOperations.d.ts.map +1 -0
  79. package/dist/src/kubernetes/resources/MetricOperations.js +893 -0
  80. package/dist/src/kubernetes/resources/MetricOperations.js.map +1 -0
  81. package/dist/src/kubernetes/resources/NamespaceOperations.d.ts +38 -0
  82. package/dist/src/kubernetes/resources/NamespaceOperations.d.ts.map +1 -0
  83. package/dist/src/kubernetes/resources/NamespaceOperations.js +101 -0
  84. package/dist/src/kubernetes/resources/NamespaceOperations.js.map +1 -0
  85. package/dist/src/kubernetes/resources/PersistentVolumeClaimOperations.d.ts +109 -0
  86. package/dist/src/kubernetes/resources/PersistentVolumeClaimOperations.d.ts.map +1 -0
  87. package/dist/src/kubernetes/resources/PersistentVolumeClaimOperations.js +383 -0
  88. package/dist/src/kubernetes/resources/PersistentVolumeClaimOperations.js.map +1 -0
  89. package/dist/src/kubernetes/resources/PersistentVolumeOperations.d.ts +97 -0
  90. package/dist/src/kubernetes/resources/PersistentVolumeOperations.d.ts.map +1 -0
  91. package/dist/src/kubernetes/resources/PersistentVolumeOperations.js +321 -0
  92. package/dist/src/kubernetes/resources/PersistentVolumeOperations.js.map +1 -0
  93. package/dist/src/kubernetes/resources/PodOperations.d.ts +99 -0
  94. package/dist/src/kubernetes/resources/PodOperations.d.ts.map +1 -0
  95. package/dist/src/kubernetes/resources/PodOperations.js +333 -0
  96. package/dist/src/kubernetes/resources/PodOperations.js.map +1 -0
  97. package/dist/src/kubernetes/resources/SecretOperations.d.ts +71 -0
  98. package/dist/src/kubernetes/resources/SecretOperations.d.ts.map +1 -0
  99. package/dist/src/kubernetes/resources/SecretOperations.js +254 -0
  100. package/dist/src/kubernetes/resources/SecretOperations.js.map +1 -0
  101. package/dist/src/kubernetes/resources/ServiceOperations.d.ts +64 -0
  102. package/dist/src/kubernetes/resources/ServiceOperations.d.ts.map +1 -0
  103. package/dist/src/kubernetes/resources/ServiceOperations.js +232 -0
  104. package/dist/src/kubernetes/resources/ServiceOperations.js.map +1 -0
  105. package/dist/src/kubernetes/utils/ResourceUtils.d.ts +238 -0
  106. package/dist/src/kubernetes/utils/ResourceUtils.d.ts.map +1 -0
  107. package/dist/src/kubernetes/utils/ResourceUtils.js +439 -0
  108. package/dist/src/kubernetes/utils/ResourceUtils.js.map +1 -0
  109. package/dist/src/plugins/ArgoCDToolsPlugin.d.ts +45 -0
  110. package/dist/src/plugins/ArgoCDToolsPlugin.d.ts.map +1 -0
  111. package/dist/src/plugins/ArgoCDToolsPlugin.js +155 -0
  112. package/dist/src/plugins/ArgoCDToolsPlugin.js.map +1 -0
  113. package/dist/src/plugins/ArgoToolsPlugin.d.ts +45 -0
  114. package/dist/src/plugins/ArgoToolsPlugin.d.ts.map +1 -0
  115. package/dist/src/plugins/ArgoToolsPlugin.js +149 -0
  116. package/dist/src/plugins/ArgoToolsPlugin.js.map +1 -0
  117. package/dist/src/plugins/HelmToolsPlugin.d.ts +41 -0
  118. package/dist/src/plugins/HelmToolsPlugin.d.ts.map +1 -0
  119. package/dist/src/plugins/HelmToolsPlugin.js +146 -0
  120. package/dist/src/plugins/HelmToolsPlugin.js.map +1 -0
  121. package/dist/src/plugins/KubernetesToolsPlugin.d.ts +44 -0
  122. package/dist/src/plugins/KubernetesToolsPlugin.d.ts.map +1 -0
  123. package/dist/src/plugins/KubernetesToolsPlugin.js +159 -0
  124. package/dist/src/plugins/KubernetesToolsPlugin.js.map +1 -0
  125. package/dist/src/plugins/SamplePlugin.d.ts +12 -0
  126. package/dist/src/plugins/SamplePlugin.d.ts.map +1 -0
  127. package/dist/src/plugins/SamplePlugin.js +51 -0
  128. package/dist/src/plugins/SamplePlugin.js.map +1 -0
  129. package/dist/src/plugins/index.d.ts +5 -0
  130. package/dist/src/plugins/index.d.ts.map +1 -0
  131. package/dist/src/plugins/index.js +5 -0
  132. package/dist/src/plugins/index.js.map +1 -0
  133. package/dist/src/server/MCPServer.d.ts +93 -0
  134. package/dist/src/server/MCPServer.d.ts.map +1 -0
  135. package/dist/src/server/MCPServer.js +398 -0
  136. package/dist/src/server/MCPServer.js.map +1 -0
  137. package/dist/src/tools/argo/ArgoCronListTool.d.ts +10 -0
  138. package/dist/src/tools/argo/ArgoCronListTool.d.ts.map +1 -0
  139. package/dist/src/tools/argo/ArgoCronListTool.js +70 -0
  140. package/dist/src/tools/argo/ArgoCronListTool.js.map +1 -0
  141. package/dist/src/tools/argo/ArgoGetTool.d.ts +10 -0
  142. package/dist/src/tools/argo/ArgoGetTool.d.ts.map +1 -0
  143. package/dist/src/tools/argo/ArgoGetTool.js +80 -0
  144. package/dist/src/tools/argo/ArgoGetTool.js.map +1 -0
  145. package/dist/src/tools/argo/ArgoListTool.d.ts +10 -0
  146. package/dist/src/tools/argo/ArgoListTool.d.ts.map +1 -0
  147. package/dist/src/tools/argo/ArgoListTool.js +133 -0
  148. package/dist/src/tools/argo/ArgoListTool.js.map +1 -0
  149. package/dist/src/tools/argo/ArgoLogsTool.d.ts +10 -0
  150. package/dist/src/tools/argo/ArgoLogsTool.d.ts.map +1 -0
  151. package/dist/src/tools/argo/ArgoLogsTool.js +117 -0
  152. package/dist/src/tools/argo/ArgoLogsTool.js.map +1 -0
  153. package/dist/src/tools/argo/BaseTool.d.ts +60 -0
  154. package/dist/src/tools/argo/BaseTool.d.ts.map +1 -0
  155. package/dist/src/tools/argo/BaseTool.js +51 -0
  156. package/dist/src/tools/argo/BaseTool.js.map +1 -0
  157. package/dist/src/tools/argo/index.d.ts +7 -0
  158. package/dist/src/tools/argo/index.d.ts.map +1 -0
  159. package/dist/src/tools/argo/index.js +6 -0
  160. package/dist/src/tools/argo/index.js.map +1 -0
  161. package/dist/src/tools/argocd/ArgoCDAppGetTool.d.ts +10 -0
  162. package/dist/src/tools/argocd/ArgoCDAppGetTool.d.ts.map +1 -0
  163. package/dist/src/tools/argocd/ArgoCDAppGetTool.js +97 -0
  164. package/dist/src/tools/argocd/ArgoCDAppGetTool.js.map +1 -0
  165. package/dist/src/tools/argocd/ArgoCDAppHistoryTool.d.ts +10 -0
  166. package/dist/src/tools/argocd/ArgoCDAppHistoryTool.d.ts.map +1 -0
  167. package/dist/src/tools/argocd/ArgoCDAppHistoryTool.js +80 -0
  168. package/dist/src/tools/argocd/ArgoCDAppHistoryTool.js.map +1 -0
  169. package/dist/src/tools/argocd/ArgoCDAppListTool.d.ts +10 -0
  170. package/dist/src/tools/argocd/ArgoCDAppListTool.d.ts.map +1 -0
  171. package/dist/src/tools/argocd/ArgoCDAppListTool.js +128 -0
  172. package/dist/src/tools/argocd/ArgoCDAppListTool.js.map +1 -0
  173. package/dist/src/tools/argocd/ArgoCDAppLogsTool.d.ts +10 -0
  174. package/dist/src/tools/argocd/ArgoCDAppLogsTool.d.ts.map +1 -0
  175. package/dist/src/tools/argocd/ArgoCDAppLogsTool.js +143 -0
  176. package/dist/src/tools/argocd/ArgoCDAppLogsTool.js.map +1 -0
  177. package/dist/src/tools/argocd/ArgoCDAppResourcesTool.d.ts +10 -0
  178. package/dist/src/tools/argocd/ArgoCDAppResourcesTool.d.ts.map +1 -0
  179. package/dist/src/tools/argocd/ArgoCDAppResourcesTool.js +123 -0
  180. package/dist/src/tools/argocd/ArgoCDAppResourcesTool.js.map +1 -0
  181. package/dist/src/tools/argocd/BaseTool.d.ts +71 -0
  182. package/dist/src/tools/argocd/BaseTool.d.ts.map +1 -0
  183. package/dist/src/tools/argocd/BaseTool.js +62 -0
  184. package/dist/src/tools/argocd/BaseTool.js.map +1 -0
  185. package/dist/src/tools/argocd/index.d.ts +8 -0
  186. package/dist/src/tools/argocd/index.d.ts.map +1 -0
  187. package/dist/src/tools/argocd/index.js +7 -0
  188. package/dist/src/tools/argocd/index.js.map +1 -0
  189. package/dist/src/tools/helm/BaseTool.d.ts +51 -0
  190. package/dist/src/tools/helm/BaseTool.d.ts.map +1 -0
  191. package/dist/src/tools/helm/BaseTool.js +42 -0
  192. package/dist/src/tools/helm/BaseTool.js.map +1 -0
  193. package/dist/src/tools/helm/HelmGetHooksTool.d.ts +10 -0
  194. package/dist/src/tools/helm/HelmGetHooksTool.d.ts.map +1 -0
  195. package/dist/src/tools/helm/HelmGetHooksTool.js +38 -0
  196. package/dist/src/tools/helm/HelmGetHooksTool.js.map +1 -0
  197. package/dist/src/tools/helm/HelmGetManifestTool.d.ts +10 -0
  198. package/dist/src/tools/helm/HelmGetManifestTool.d.ts.map +1 -0
  199. package/dist/src/tools/helm/HelmGetManifestTool.js +38 -0
  200. package/dist/src/tools/helm/HelmGetManifestTool.js.map +1 -0
  201. package/dist/src/tools/helm/HelmGetNotesTool.d.ts +10 -0
  202. package/dist/src/tools/helm/HelmGetNotesTool.d.ts.map +1 -0
  203. package/dist/src/tools/helm/HelmGetNotesTool.js +38 -0
  204. package/dist/src/tools/helm/HelmGetNotesTool.js.map +1 -0
  205. package/dist/src/tools/helm/HelmGetResourcesTool.d.ts +13 -0
  206. package/dist/src/tools/helm/HelmGetResourcesTool.d.ts.map +1 -0
  207. package/dist/src/tools/helm/HelmGetResourcesTool.js +124 -0
  208. package/dist/src/tools/helm/HelmGetResourcesTool.js.map +1 -0
  209. package/dist/src/tools/helm/HelmGetValuesTool.d.ts +10 -0
  210. package/dist/src/tools/helm/HelmGetValuesTool.d.ts.map +1 -0
  211. package/dist/src/tools/helm/HelmGetValuesTool.js +54 -0
  212. package/dist/src/tools/helm/HelmGetValuesTool.js.map +1 -0
  213. package/dist/src/tools/helm/HelmHistoryTool.d.ts +10 -0
  214. package/dist/src/tools/helm/HelmHistoryTool.d.ts.map +1 -0
  215. package/dist/src/tools/helm/HelmHistoryTool.js +49 -0
  216. package/dist/src/tools/helm/HelmHistoryTool.js.map +1 -0
  217. package/dist/src/tools/helm/HelmListTool.d.ts +10 -0
  218. package/dist/src/tools/helm/HelmListTool.d.ts.map +1 -0
  219. package/dist/src/tools/helm/HelmListTool.js +107 -0
  220. package/dist/src/tools/helm/HelmListTool.js.map +1 -0
  221. package/dist/src/tools/helm/HelmListWithResourcesTool.d.ts +14 -0
  222. package/dist/src/tools/helm/HelmListWithResourcesTool.d.ts.map +1 -0
  223. package/dist/src/tools/helm/HelmListWithResourcesTool.js +175 -0
  224. package/dist/src/tools/helm/HelmListWithResourcesTool.js.map +1 -0
  225. package/dist/src/tools/helm/HelmStatusTool.d.ts +10 -0
  226. package/dist/src/tools/helm/HelmStatusTool.d.ts.map +1 -0
  227. package/dist/src/tools/helm/HelmStatusTool.js +54 -0
  228. package/dist/src/tools/helm/HelmStatusTool.js.map +1 -0
  229. package/dist/src/tools/helm/index.d.ts +12 -0
  230. package/dist/src/tools/helm/index.d.ts.map +1 -0
  231. package/dist/src/tools/helm/index.js +11 -0
  232. package/dist/src/tools/helm/index.js.map +1 -0
  233. package/dist/src/tools/kubernetes/BaseTool.d.ts +48 -0
  234. package/dist/src/tools/kubernetes/BaseTool.d.ts.map +1 -0
  235. package/dist/src/tools/kubernetes/BaseTool.js +55 -0
  236. package/dist/src/tools/kubernetes/BaseTool.js.map +1 -0
  237. package/dist/src/tools/kubernetes/GetConfigMapTool.d.ts +11 -0
  238. package/dist/src/tools/kubernetes/GetConfigMapTool.d.ts.map +1 -0
  239. package/dist/src/tools/kubernetes/GetConfigMapTool.js +28 -0
  240. package/dist/src/tools/kubernetes/GetConfigMapTool.js.map +1 -0
  241. package/dist/src/tools/kubernetes/GetContainerLogsTool.d.ts +15 -0
  242. package/dist/src/tools/kubernetes/GetContainerLogsTool.d.ts.map +1 -0
  243. package/dist/src/tools/kubernetes/GetContainerLogsTool.js +119 -0
  244. package/dist/src/tools/kubernetes/GetContainerLogsTool.js.map +1 -0
  245. package/dist/src/tools/kubernetes/GetDeploymentsTool.d.ts +11 -0
  246. package/dist/src/tools/kubernetes/GetDeploymentsTool.d.ts.map +1 -0
  247. package/dist/src/tools/kubernetes/GetDeploymentsTool.js +30 -0
  248. package/dist/src/tools/kubernetes/GetDeploymentsTool.js.map +1 -0
  249. package/dist/src/tools/kubernetes/GetEventsTool.d.ts +11 -0
  250. package/dist/src/tools/kubernetes/GetEventsTool.d.ts.map +1 -0
  251. package/dist/src/tools/kubernetes/GetEventsTool.js +123 -0
  252. package/dist/src/tools/kubernetes/GetEventsTool.js.map +1 -0
  253. package/dist/src/tools/kubernetes/GetIngressTool.d.ts +11 -0
  254. package/dist/src/tools/kubernetes/GetIngressTool.d.ts.map +1 -0
  255. package/dist/src/tools/kubernetes/GetIngressTool.js +35 -0
  256. package/dist/src/tools/kubernetes/GetIngressTool.js.map +1 -0
  257. package/dist/src/tools/kubernetes/GetMetricsTool.d.ts +11 -0
  258. package/dist/src/tools/kubernetes/GetMetricsTool.d.ts.map +1 -0
  259. package/dist/src/tools/kubernetes/GetMetricsTool.js +40 -0
  260. package/dist/src/tools/kubernetes/GetMetricsTool.js.map +1 -0
  261. package/dist/src/tools/kubernetes/GetNamespacesTool.d.ts +11 -0
  262. package/dist/src/tools/kubernetes/GetNamespacesTool.d.ts.map +1 -0
  263. package/dist/src/tools/kubernetes/GetNamespacesTool.js +33 -0
  264. package/dist/src/tools/kubernetes/GetNamespacesTool.js.map +1 -0
  265. package/dist/src/tools/kubernetes/GetPersistentVolumeClaimsTool.d.ts +11 -0
  266. package/dist/src/tools/kubernetes/GetPersistentVolumeClaimsTool.d.ts.map +1 -0
  267. package/dist/src/tools/kubernetes/GetPersistentVolumeClaimsTool.js +92 -0
  268. package/dist/src/tools/kubernetes/GetPersistentVolumeClaimsTool.js.map +1 -0
  269. package/dist/src/tools/kubernetes/GetPersistentVolumesTool.d.ts +11 -0
  270. package/dist/src/tools/kubernetes/GetPersistentVolumesTool.d.ts.map +1 -0
  271. package/dist/src/tools/kubernetes/GetPersistentVolumesTool.js +88 -0
  272. package/dist/src/tools/kubernetes/GetPersistentVolumesTool.js.map +1 -0
  273. package/dist/src/tools/kubernetes/GetPodMetricsTool.d.ts +11 -0
  274. package/dist/src/tools/kubernetes/GetPodMetricsTool.d.ts.map +1 -0
  275. package/dist/src/tools/kubernetes/GetPodMetricsTool.js +100 -0
  276. package/dist/src/tools/kubernetes/GetPodMetricsTool.js.map +1 -0
  277. package/dist/src/tools/kubernetes/GetPodsTool.d.ts +11 -0
  278. package/dist/src/tools/kubernetes/GetPodsTool.d.ts.map +1 -0
  279. package/dist/src/tools/kubernetes/GetPodsTool.js +35 -0
  280. package/dist/src/tools/kubernetes/GetPodsTool.js.map +1 -0
  281. package/dist/src/tools/kubernetes/GetResourceTool.d.ts +12 -0
  282. package/dist/src/tools/kubernetes/GetResourceTool.d.ts.map +1 -0
  283. package/dist/src/tools/kubernetes/GetResourceTool.js +79 -0
  284. package/dist/src/tools/kubernetes/GetResourceTool.js.map +1 -0
  285. package/dist/src/tools/kubernetes/GetSecretsTool.d.ts +11 -0
  286. package/dist/src/tools/kubernetes/GetSecretsTool.d.ts.map +1 -0
  287. package/dist/src/tools/kubernetes/GetSecretsTool.js +49 -0
  288. package/dist/src/tools/kubernetes/GetSecretsTool.js.map +1 -0
  289. package/dist/src/tools/kubernetes/GetServicesTool.d.ts +11 -0
  290. package/dist/src/tools/kubernetes/GetServicesTool.d.ts.map +1 -0
  291. package/dist/src/tools/kubernetes/GetServicesTool.js +35 -0
  292. package/dist/src/tools/kubernetes/GetServicesTool.js.map +1 -0
  293. package/dist/src/tools/kubernetes/index.d.ts +17 -0
  294. package/dist/src/tools/kubernetes/index.d.ts.map +1 -0
  295. package/dist/src/tools/kubernetes/index.js +16 -0
  296. package/dist/src/tools/kubernetes/index.js.map +1 -0
  297. package/dist/src/utils/CliUtils.d.ts +24 -0
  298. package/dist/src/utils/CliUtils.d.ts.map +1 -0
  299. package/dist/src/utils/CliUtils.js +159 -0
  300. package/dist/src/utils/CliUtils.js.map +1 -0
  301. package/dist/tests/__mocks__/@kubernetes/client-node.d.ts +34 -0
  302. package/dist/tests/__mocks__/@kubernetes/client-node.d.ts.map +1 -0
  303. package/dist/tests/__mocks__/@kubernetes/client-node.js +20 -0
  304. package/dist/tests/__mocks__/@kubernetes/client-node.js.map +1 -0
  305. package/dist/tests/argo/ArgoGetTool.test.d.ts +2 -0
  306. package/dist/tests/argo/ArgoGetTool.test.d.ts.map +1 -0
  307. package/dist/tests/argo/ArgoGetTool.test.js +141 -0
  308. package/dist/tests/argo/ArgoGetTool.test.js.map +1 -0
  309. package/dist/tests/helm/BaseTool.test.d.ts +2 -0
  310. package/dist/tests/helm/BaseTool.test.d.ts.map +1 -0
  311. package/dist/tests/helm/BaseTool.test.js +241 -0
  312. package/dist/tests/helm/BaseTool.test.js.map +1 -0
  313. package/dist/tests/index.test.d.ts +2 -0
  314. package/dist/tests/index.test.d.ts.map +1 -0
  315. package/dist/tests/index.test.js +7 -0
  316. package/dist/tests/index.test.js.map +1 -0
  317. package/dist/tests/kubernetes/ConfigMapOperations.test.d.ts +2 -0
  318. package/dist/tests/kubernetes/ConfigMapOperations.test.d.ts.map +1 -0
  319. package/dist/tests/kubernetes/ConfigMapOperations.test.js +460 -0
  320. package/dist/tests/kubernetes/ConfigMapOperations.test.js.map +1 -0
  321. package/dist/tests/kubernetes/ConnectionManager.test.d.ts +2 -0
  322. package/dist/tests/kubernetes/ConnectionManager.test.d.ts.map +1 -0
  323. package/dist/tests/kubernetes/ConnectionManager.test.js +97 -0
  324. package/dist/tests/kubernetes/ConnectionManager.test.js.map +1 -0
  325. package/dist/tests/kubernetes/ConnectionPool.test.d.ts +2 -0
  326. package/dist/tests/kubernetes/ConnectionPool.test.d.ts.map +1 -0
  327. package/dist/tests/kubernetes/ConnectionPool.test.js +328 -0
  328. package/dist/tests/kubernetes/ConnectionPool.test.js.map +1 -0
  329. package/dist/tests/kubernetes/DeploymentOperations.test.d.ts +2 -0
  330. package/dist/tests/kubernetes/DeploymentOperations.test.d.ts.map +1 -0
  331. package/dist/tests/kubernetes/DeploymentOperations.test.js +196 -0
  332. package/dist/tests/kubernetes/DeploymentOperations.test.js.map +1 -0
  333. package/dist/tests/kubernetes/ErrorHandling.test.d.ts +2 -0
  334. package/dist/tests/kubernetes/ErrorHandling.test.d.ts.map +1 -0
  335. package/dist/tests/kubernetes/ErrorHandling.test.js +329 -0
  336. package/dist/tests/kubernetes/ErrorHandling.test.js.map +1 -0
  337. package/dist/tests/kubernetes/GetPodMetricsTool.test.d.ts +2 -0
  338. package/dist/tests/kubernetes/GetPodMetricsTool.test.d.ts.map +1 -0
  339. package/dist/tests/kubernetes/GetPodMetricsTool.test.js +150 -0
  340. package/dist/tests/kubernetes/GetPodMetricsTool.test.js.map +1 -0
  341. package/dist/tests/kubernetes/KubernetesClient.test.d.ts +2 -0
  342. package/dist/tests/kubernetes/KubernetesClient.test.d.ts.map +1 -0
  343. package/dist/tests/kubernetes/KubernetesClient.test.js +371 -0
  344. package/dist/tests/kubernetes/KubernetesClient.test.js.map +1 -0
  345. package/dist/tests/kubernetes/MetricOperations.parsing.test.d.ts +2 -0
  346. package/dist/tests/kubernetes/MetricOperations.parsing.test.d.ts.map +1 -0
  347. package/dist/tests/kubernetes/MetricOperations.parsing.test.js +49 -0
  348. package/dist/tests/kubernetes/MetricOperations.parsing.test.js.map +1 -0
  349. package/dist/tests/kubernetes/NamespaceOperations.test.d.ts +2 -0
  350. package/dist/tests/kubernetes/NamespaceOperations.test.d.ts.map +1 -0
  351. package/dist/tests/kubernetes/NamespaceOperations.test.js +115 -0
  352. package/dist/tests/kubernetes/NamespaceOperations.test.js.map +1 -0
  353. package/dist/tests/kubernetes/PodOperations.test.d.ts +2 -0
  354. package/dist/tests/kubernetes/PodOperations.test.d.ts.map +1 -0
  355. package/dist/tests/kubernetes/PodOperations.test.js +209 -0
  356. package/dist/tests/kubernetes/PodOperations.test.js.map +1 -0
  357. package/dist/tests/kubernetes/RetryStrategy.test.d.ts +2 -0
  358. package/dist/tests/kubernetes/RetryStrategy.test.d.ts.map +1 -0
  359. package/dist/tests/kubernetes/RetryStrategy.test.js +419 -0
  360. package/dist/tests/kubernetes/RetryStrategy.test.js.map +1 -0
  361. package/dist/tests/kubernetes/ServiceOperations.test.d.ts +2 -0
  362. package/dist/tests/kubernetes/ServiceOperations.test.d.ts.map +1 -0
  363. package/dist/tests/kubernetes/ServiceOperations.test.js +159 -0
  364. package/dist/tests/kubernetes/ServiceOperations.test.js.map +1 -0
  365. package/dist/tests/plugins/KubernetesToolsPlugin.test.d.ts +2 -0
  366. package/dist/tests/plugins/KubernetesToolsPlugin.test.d.ts.map +1 -0
  367. package/dist/tests/plugins/KubernetesToolsPlugin.test.js +153 -0
  368. package/dist/tests/plugins/KubernetesToolsPlugin.test.js.map +1 -0
  369. package/dist/tests/server/MCPServer.integration.test.d.ts +2 -0
  370. package/dist/tests/server/MCPServer.integration.test.d.ts.map +1 -0
  371. package/dist/tests/server/MCPServer.integration.test.js +244 -0
  372. package/dist/tests/server/MCPServer.integration.test.js.map +1 -0
  373. package/dist/tests/server/MCPServer.test.d.ts +2 -0
  374. package/dist/tests/server/MCPServer.test.d.ts.map +1 -0
  375. package/dist/tests/server/MCPServer.test.js +257 -0
  376. package/dist/tests/server/MCPServer.test.js.map +1 -0
  377. package/package.json +85 -0
  378. package/src/cli/cli.ts +25 -0
  379. package/src/cli/run-command.js +391 -0
  380. package/src/index.ts +46 -0
  381. package/src/kubernetes/BaseResourceOperations.ts +286 -0
  382. package/src/kubernetes/CircuitBreaker.ts +485 -0
  383. package/src/kubernetes/ConnectionManager.ts +114 -0
  384. package/src/kubernetes/ConnectionPool.ts +551 -0
  385. package/src/kubernetes/ErrorHandler.ts +436 -0
  386. package/src/kubernetes/ErrorHandling.ts +401 -0
  387. package/src/kubernetes/KubernetesClient.ts +500 -0
  388. package/src/kubernetes/README.md +349 -0
  389. package/src/kubernetes/ResourceOperations.ts +116 -0
  390. package/src/kubernetes/RetryStrategy.ts +365 -0
  391. package/src/kubernetes/RetryableOperation.ts +313 -0
  392. package/src/kubernetes/docs/ResourceOperations.md +606 -0
  393. package/src/kubernetes/index.ts +116 -0
  394. package/src/kubernetes/resources/ConfigMapOperations.ts +367 -0
  395. package/src/kubernetes/resources/CustomResourceOperations.ts +392 -0
  396. package/src/kubernetes/resources/DeploymentOperations.ts +294 -0
  397. package/src/kubernetes/resources/IngressOperations.ts +277 -0
  398. package/src/kubernetes/resources/MetricOperations.ts +1159 -0
  399. package/src/kubernetes/resources/NamespaceOperations.ts +129 -0
  400. package/src/kubernetes/resources/PersistentVolumeClaimOperations.ts +516 -0
  401. package/src/kubernetes/resources/PersistentVolumeOperations.ts +438 -0
  402. package/src/kubernetes/resources/PodOperations.ts +417 -0
  403. package/src/kubernetes/resources/SecretOperations.ts +304 -0
  404. package/src/kubernetes/resources/ServiceOperations.ts +283 -0
  405. package/src/kubernetes/utils/ResourceUtils.ts +553 -0
  406. package/src/plugins/ArgoCDToolsPlugin.ts +189 -0
  407. package/src/plugins/ArgoToolsPlugin.ts +180 -0
  408. package/src/plugins/HelmToolsPlugin.ts +180 -0
  409. package/src/plugins/KubernetesToolsPlugin.ts +198 -0
  410. package/src/plugins/SamplePlugin.ts +60 -0
  411. package/src/plugins/index.ts +4 -0
  412. package/src/server/MCPServer.ts +500 -0
  413. package/src/tools/argo/ArgoCronListTool.ts +78 -0
  414. package/src/tools/argo/ArgoGetTool.ts +91 -0
  415. package/src/tools/argo/ArgoListTool.ts +143 -0
  416. package/src/tools/argo/ArgoLogsTool.ts +131 -0
  417. package/src/tools/argo/BaseTool.ts +69 -0
  418. package/src/tools/argo/index.ts +6 -0
  419. package/src/tools/argocd/ArgoCDAppGetTool.ts +109 -0
  420. package/src/tools/argocd/ArgoCDAppHistoryTool.ts +91 -0
  421. package/src/tools/argocd/ArgoCDAppListTool.ts +144 -0
  422. package/src/tools/argocd/ArgoCDAppLogsTool.ts +162 -0
  423. package/src/tools/argocd/ArgoCDAppResourcesTool.ts +139 -0
  424. package/src/tools/argocd/BaseTool.ts +83 -0
  425. package/src/tools/argocd/index.ts +7 -0
  426. package/src/tools/helm/BaseTool.ts +60 -0
  427. package/src/tools/helm/HelmGetHooksTool.ts +44 -0
  428. package/src/tools/helm/HelmGetManifestTool.ts +44 -0
  429. package/src/tools/helm/HelmGetNotesTool.ts +44 -0
  430. package/src/tools/helm/HelmGetResourcesTool.ts +140 -0
  431. package/src/tools/helm/HelmGetValuesTool.ts +62 -0
  432. package/src/tools/helm/HelmHistoryTool.ts +56 -0
  433. package/src/tools/helm/HelmListTool.ts +107 -0
  434. package/src/tools/helm/HelmListWithResourcesTool.ts +194 -0
  435. package/src/tools/helm/HelmStatusTool.ts +62 -0
  436. package/src/tools/helm/index.ts +11 -0
  437. package/src/tools/kubernetes/BaseTool.ts +76 -0
  438. package/src/tools/kubernetes/GetConfigMapTool.ts +33 -0
  439. package/src/tools/kubernetes/GetContainerLogsTool.ts +140 -0
  440. package/src/tools/kubernetes/GetDeploymentsTool.ts +33 -0
  441. package/src/tools/kubernetes/GetEventsTool.ts +133 -0
  442. package/src/tools/kubernetes/GetIngressTool.ts +39 -0
  443. package/src/tools/kubernetes/GetMetricsTool.ts +53 -0
  444. package/src/tools/kubernetes/GetNamespacesTool.ts +36 -0
  445. package/src/tools/kubernetes/GetPersistentVolumeClaimsTool.ts +113 -0
  446. package/src/tools/kubernetes/GetPersistentVolumesTool.ts +107 -0
  447. package/src/tools/kubernetes/GetPodMetricsTool.ts +113 -0
  448. package/src/tools/kubernetes/GetPodsTool.ts +39 -0
  449. package/src/tools/kubernetes/GetResourceTool.ts +90 -0
  450. package/src/tools/kubernetes/GetSecretsTool.ts +55 -0
  451. package/src/tools/kubernetes/GetServicesTool.ts +39 -0
  452. package/src/tools/kubernetes/index.ts +16 -0
  453. package/src/utils/CliUtils.ts +207 -0
  454. package/tsconfig.json +36 -0
@@ -0,0 +1,551 @@
1
+ import * as k8s from '@kubernetes/client-node';
2
+ import { Logger } from 'winston';
3
+ import { EventEmitter } from 'events';
4
+
5
+ /**
6
+ * Configuration options for connection pooling
7
+ */
8
+ export interface ConnectionPoolConfig {
9
+ /**
10
+ * Maximum number of connections per pool
11
+ */
12
+ maxConnections?: number;
13
+
14
+ /**
15
+ * Minimum number of connections to maintain
16
+ */
17
+ minConnections?: number;
18
+
19
+ /**
20
+ * Maximum idle time for a connection before removal (ms)
21
+ */
22
+ maxIdleTime?: number;
23
+
24
+ /**
25
+ * Time to wait for a connection to become available (ms)
26
+ */
27
+ acquireTimeout?: number;
28
+
29
+ /**
30
+ * Interval for health check runs (ms)
31
+ */
32
+ healthCheckInterval?: number;
33
+
34
+ /**
35
+ * Number of retries for failed health checks
36
+ */
37
+ healthCheckRetries?: number;
38
+
39
+ /**
40
+ * Enable connection warm-up on pool initialization
41
+ */
42
+ enableWarmup?: boolean;
43
+
44
+ /**
45
+ * Logger instance for debug output
46
+ */
47
+ logger?: Logger;
48
+ }
49
+
50
+ /**
51
+ * Default configuration values
52
+ */
53
+ const DEFAULT_CONFIG: Required<Omit<ConnectionPoolConfig, 'logger'>> = {
54
+ maxConnections: 10,
55
+ minConnections: 2,
56
+ maxIdleTime: 300000, // 5 minutes
57
+ acquireTimeout: 30000, // 30 seconds
58
+ healthCheckInterval: 60000, // 1 minute
59
+ healthCheckRetries: 3,
60
+ enableWarmup: true,
61
+ };
62
+
63
+ /**
64
+ * Connection state enum
65
+ */
66
+ export enum ConnectionState {
67
+ IDLE = 'idle',
68
+ IN_USE = 'in-use',
69
+ UNHEALTHY = 'unhealthy',
70
+ DISPOSED = 'disposed',
71
+ }
72
+
73
+ /**
74
+ * Connection entry tracking individual API client instances
75
+ */
76
+ export class ConnectionEntry {
77
+ private _state: ConnectionState = ConnectionState.IDLE;
78
+ private _lastUsed: Date = new Date();
79
+ private _createdAt: Date = new Date();
80
+ private _useCount: number = 0;
81
+ private _lastHealthCheck?: Date;
82
+ private _healthCheckFailures: number = 0;
83
+
84
+ constructor(
85
+ public readonly id: string,
86
+ public readonly kubeConfig: k8s.KubeConfig,
87
+ private readonly logger?: Logger,
88
+ ) {}
89
+
90
+ /**
91
+ * Get the current state of the connection
92
+ */
93
+ get state(): ConnectionState {
94
+ return this._state;
95
+ }
96
+
97
+ /**
98
+ * Set the connection state
99
+ */
100
+ set state(value: ConnectionState) {
101
+ this.logger?.debug(`Connection ${this.id} state changed: ${this._state} -> ${value}`);
102
+ this._state = value;
103
+ }
104
+
105
+ /**
106
+ * Get the last used timestamp
107
+ */
108
+ get lastUsed(): Date {
109
+ return this._lastUsed;
110
+ }
111
+
112
+ /**
113
+ * Get the creation timestamp
114
+ */
115
+ get createdAt(): Date {
116
+ return this._createdAt;
117
+ }
118
+
119
+ /**
120
+ * Get the use count
121
+ */
122
+ get useCount(): number {
123
+ return this._useCount;
124
+ }
125
+
126
+ /**
127
+ * Get health check failure count
128
+ */
129
+ get healthCheckFailures(): number {
130
+ return this._healthCheckFailures;
131
+ }
132
+
133
+ /**
134
+ * Get last health check timestamp
135
+ */
136
+ get lastHealthCheck(): Date | undefined {
137
+ return this._lastHealthCheck;
138
+ }
139
+
140
+ /**
141
+ * Mark the connection as used
142
+ */
143
+ markUsed(): void {
144
+ this._lastUsed = new Date();
145
+ this._useCount++;
146
+ this.state = ConnectionState.IN_USE;
147
+ }
148
+
149
+ /**
150
+ * Release the connection back to the pool
151
+ */
152
+ release(): void {
153
+ if (this.state === ConnectionState.IN_USE) {
154
+ this.state = ConnectionState.IDLE;
155
+ }
156
+ }
157
+
158
+ /**
159
+ * Perform a health check on the connection
160
+ */
161
+ async checkHealth(): Promise<boolean> {
162
+ try {
163
+ const api = this.kubeConfig.makeApiClient(k8s.CoreV1Api);
164
+ await api.listNamespace();
165
+
166
+ this._lastHealthCheck = new Date();
167
+ this._healthCheckFailures = 0;
168
+
169
+ if (this.state === ConnectionState.UNHEALTHY) {
170
+ this.state = ConnectionState.IDLE;
171
+ this.logger?.info(`Connection ${this.id} recovered`);
172
+ }
173
+
174
+ return true;
175
+ } catch (error) {
176
+ this._healthCheckFailures++;
177
+ this.logger?.warn(`Health check failed for connection ${this.id}: ${error}`);
178
+
179
+ if (this.state !== ConnectionState.IN_USE) {
180
+ this.state = ConnectionState.UNHEALTHY;
181
+ }
182
+
183
+ return false;
184
+ }
185
+ }
186
+
187
+ /**
188
+ * Check if the connection has been idle too long
189
+ */
190
+ isIdleExpired(maxIdleTime: number): boolean {
191
+ if (this.state !== ConnectionState.IDLE) {
192
+ return false;
193
+ }
194
+
195
+ const idleTime = Date.now() - this.lastUsed.getTime();
196
+ return idleTime > maxIdleTime;
197
+ }
198
+
199
+ /**
200
+ * Dispose of the connection
201
+ */
202
+ dispose(): void {
203
+ this.state = ConnectionState.DISPOSED;
204
+ this.logger?.debug(`Connection ${this.id} disposed`);
205
+ }
206
+
207
+ /**
208
+ * Create an API client of the specified type
209
+ */
210
+ makeApiClient<T extends k8s.ApiType>(apiClientType: new (config: k8s.Configuration) => T): T {
211
+ return this.kubeConfig.makeApiClient(apiClientType);
212
+ }
213
+ }
214
+
215
+ /**
216
+ * Connection pool for managing Kubernetes API client connections
217
+ */
218
+ export class ConnectionPool extends EventEmitter {
219
+ private readonly config: Required<Omit<ConnectionPoolConfig, 'logger'>>;
220
+ private readonly connections: Map<string, ConnectionEntry> = new Map();
221
+ private readonly waitQueue: Array<(conn: ConnectionEntry | null) => void> = [];
222
+ private healthCheckTimer?: NodeJS.Timeout;
223
+ private idleCheckTimer?: NodeJS.Timeout;
224
+ private disposed = false;
225
+ private connectionCounter = 0;
226
+
227
+ constructor(
228
+ private readonly contextName: string,
229
+ private readonly kubeConfigFactory: () => k8s.KubeConfig,
230
+ config: ConnectionPoolConfig = {},
231
+ ) {
232
+ super();
233
+ this.config = { ...DEFAULT_CONFIG, ...config };
234
+ this.logger = config.logger;
235
+
236
+ this.logger?.info(`Creating connection pool for context: ${contextName}`, {
237
+ config: this.config,
238
+ });
239
+
240
+ if (this.config.enableWarmup) {
241
+ this.warmup();
242
+ }
243
+
244
+ this.startHealthChecks();
245
+ this.startIdleChecks();
246
+ }
247
+
248
+ private logger?: Logger;
249
+
250
+ /**
251
+ * Get pool statistics
252
+ */
253
+ get stats(): {
254
+ total: number;
255
+ idle: number;
256
+ inUse: number;
257
+ unhealthy: number;
258
+ waitQueueLength: number;
259
+ } {
260
+ let idle = 0;
261
+ let inUse = 0;
262
+ let unhealthy = 0;
263
+
264
+ for (const conn of this.connections.values()) {
265
+ switch (conn.state) {
266
+ case ConnectionState.IDLE:
267
+ idle++;
268
+ break;
269
+ case ConnectionState.IN_USE:
270
+ inUse++;
271
+ break;
272
+ case ConnectionState.UNHEALTHY:
273
+ unhealthy++;
274
+ break;
275
+ }
276
+ }
277
+
278
+ return {
279
+ total: this.connections.size,
280
+ idle,
281
+ inUse,
282
+ unhealthy,
283
+ waitQueueLength: this.waitQueue.length,
284
+ };
285
+ }
286
+
287
+ /**
288
+ * Warm up the pool by creating minimum connections
289
+ */
290
+ private async warmup(): Promise<void> {
291
+ this.logger?.debug(`Warming up pool for context: ${this.contextName}`);
292
+
293
+ const promises: Promise<ConnectionEntry>[] = [];
294
+ for (let i = 0; i < this.config.minConnections; i++) {
295
+ promises.push(this.createConnection());
296
+ }
297
+
298
+ await Promise.all(promises);
299
+ this.logger?.info(`Pool warmed up with ${this.config.minConnections} connections`);
300
+ }
301
+
302
+ /**
303
+ * Create a new connection
304
+ */
305
+ private async createConnection(): Promise<ConnectionEntry> {
306
+ const id = `${this.contextName}-${++this.connectionCounter}`;
307
+ const kubeConfig = this.kubeConfigFactory();
308
+
309
+ const connection = new ConnectionEntry(id, kubeConfig, this.logger);
310
+
311
+ // Verify the connection works
312
+ const isHealthy = await connection.checkHealth();
313
+ if (!isHealthy) {
314
+ throw new Error(`Failed to create healthy connection for context: ${this.contextName}`);
315
+ }
316
+
317
+ this.connections.set(id, connection);
318
+ this.emit('connectionCreated', connection);
319
+
320
+ this.logger?.debug(`Created connection: ${id}`);
321
+ return connection;
322
+ }
323
+
324
+ /**
325
+ * Acquire a connection from the pool
326
+ */
327
+ async acquire(): Promise<ConnectionEntry> {
328
+ if (this.disposed) {
329
+ throw new Error('Connection pool has been disposed');
330
+ }
331
+
332
+ // Try to find an idle connection
333
+ for (const conn of this.connections.values()) {
334
+ if (conn.state === ConnectionState.IDLE) {
335
+ conn.markUsed();
336
+ this.emit('connectionAcquired', conn);
337
+ return conn;
338
+ }
339
+ }
340
+
341
+ // Create a new connection if under the limit
342
+ if (this.connections.size < this.config.maxConnections) {
343
+ try {
344
+ const conn = await this.createConnection();
345
+ conn.markUsed();
346
+ this.emit('connectionAcquired', conn);
347
+ return conn;
348
+ } catch (error) {
349
+ this.logger?.error(`Failed to create new connection: ${error}`);
350
+ throw error;
351
+ }
352
+ }
353
+
354
+ // Wait for a connection to become available
355
+ return new Promise((resolve, reject) => {
356
+ const timeoutId = setTimeout(() => {
357
+ const index = this.waitQueue.indexOf(callback);
358
+ if (index !== -1) {
359
+ this.waitQueue.splice(index, 1);
360
+ }
361
+ reject(new Error(`Connection acquire timeout after ${this.config.acquireTimeout}ms`));
362
+ }, this.config.acquireTimeout);
363
+
364
+ const callback = (conn: ConnectionEntry | null) => {
365
+ clearTimeout(timeoutId);
366
+ if (conn) {
367
+ conn.markUsed();
368
+ this.emit('connectionAcquired', conn);
369
+ resolve(conn);
370
+ } else {
371
+ reject(new Error('Failed to acquire connection'));
372
+ }
373
+ };
374
+
375
+ this.waitQueue.push(callback);
376
+ });
377
+ }
378
+
379
+ /**
380
+ * Release a connection back to the pool
381
+ */
382
+ release(connection: ConnectionEntry): void {
383
+ if (connection.state !== ConnectionState.IN_USE) {
384
+ this.logger?.warn(`Attempting to release connection ${connection.id} that is not in use`);
385
+ return;
386
+ }
387
+
388
+ connection.release();
389
+ this.emit('connectionReleased', connection);
390
+
391
+ // If there are waiting requests, fulfill them
392
+ if (this.waitQueue.length > 0) {
393
+ const callback = this.waitQueue.shift();
394
+ if (callback) {
395
+ callback(connection);
396
+ return;
397
+ }
398
+ }
399
+
400
+ // Check if we have too many idle connections
401
+ const stats = this.stats;
402
+ if (stats.idle > this.config.minConnections) {
403
+ // Remove this connection if it's the oldest idle one
404
+ let oldestIdle: ConnectionEntry | null = null;
405
+ for (const conn of this.connections.values()) {
406
+ if (conn.state === ConnectionState.IDLE && conn !== connection) {
407
+ if (!oldestIdle || conn.lastUsed < oldestIdle.lastUsed) {
408
+ oldestIdle = conn;
409
+ }
410
+ }
411
+ }
412
+
413
+ if (oldestIdle && oldestIdle.lastUsed < connection.lastUsed) {
414
+ this.removeConnection(oldestIdle.id);
415
+ }
416
+ }
417
+ }
418
+
419
+ /**
420
+ * Remove a connection from the pool
421
+ */
422
+ private removeConnection(connectionId: string): void {
423
+ const conn = this.connections.get(connectionId);
424
+ if (conn) {
425
+ conn.dispose();
426
+ this.connections.delete(connectionId);
427
+ this.emit('connectionRemoved', conn);
428
+ this.logger?.debug(`Removed connection: ${connectionId}`);
429
+ }
430
+ }
431
+
432
+ /**
433
+ * Start periodic health checks
434
+ */
435
+ private startHealthChecks(): void {
436
+ if (this.config.healthCheckInterval <= 0) {
437
+ return;
438
+ }
439
+
440
+ this.healthCheckTimer = setInterval(async () => {
441
+ await this.performHealthChecks();
442
+ }, this.config.healthCheckInterval);
443
+ }
444
+
445
+ /**
446
+ * Perform health checks on all connections
447
+ */
448
+ private async performHealthChecks(): Promise<void> {
449
+ if (this.disposed) {
450
+ return;
451
+ }
452
+
453
+ this.logger?.debug(`Performing health checks for pool: ${this.contextName}`);
454
+ const promises: Promise<void>[] = [];
455
+
456
+ for (const conn of this.connections.values()) {
457
+ if (conn.state !== ConnectionState.IN_USE) {
458
+ promises.push(
459
+ conn.checkHealth().then((healthy) => {
460
+ if (!healthy && conn.healthCheckFailures >= this.config.healthCheckRetries) {
461
+ this.logger?.warn(`Connection ${conn.id} failed health checks, removing from pool`);
462
+ this.removeConnection(conn.id);
463
+ }
464
+ }),
465
+ );
466
+ }
467
+ }
468
+
469
+ await Promise.all(promises);
470
+
471
+ // Ensure minimum connections
472
+ const stats = this.stats;
473
+ if (stats.total < this.config.minConnections && !this.disposed) {
474
+ const toCreate = this.config.minConnections - stats.total;
475
+ for (let i = 0; i < toCreate; i++) {
476
+ try {
477
+ await this.createConnection();
478
+ } catch (error) {
479
+ this.logger?.error(`Failed to create connection during health check: ${error}`);
480
+ }
481
+ }
482
+ }
483
+ }
484
+
485
+ /**
486
+ * Start periodic idle connection checks
487
+ */
488
+ private startIdleChecks(): void {
489
+ this.idleCheckTimer = setInterval(() => {
490
+ this.removeIdleConnections();
491
+ }, 30000); // Check every 30 seconds
492
+ }
493
+
494
+ /**
495
+ * Remove connections that have been idle too long
496
+ */
497
+ private removeIdleConnections(): void {
498
+ if (this.disposed) {
499
+ return;
500
+ }
501
+
502
+ const stats = this.stats;
503
+ if (stats.total <= this.config.minConnections) {
504
+ return;
505
+ }
506
+
507
+ for (const conn of this.connections.values()) {
508
+ if (conn.isIdleExpired(this.config.maxIdleTime) && stats.total > this.config.minConnections) {
509
+ this.removeConnection(conn.id);
510
+ stats.total--;
511
+ }
512
+ }
513
+ }
514
+
515
+ /**
516
+ * Dispose of the connection pool
517
+ */
518
+ async dispose(): Promise<void> {
519
+ if (this.disposed) {
520
+ return;
521
+ }
522
+
523
+ this.disposed = true;
524
+ this.logger?.info(`Disposing connection pool for context: ${this.contextName}`);
525
+
526
+ // Clear timers
527
+ if (this.healthCheckTimer) {
528
+ clearInterval(this.healthCheckTimer);
529
+ }
530
+ if (this.idleCheckTimer) {
531
+ clearInterval(this.idleCheckTimer);
532
+ }
533
+
534
+ // Reject all waiting requests
535
+ while (this.waitQueue.length > 0) {
536
+ const callback = this.waitQueue.shift();
537
+ if (callback) {
538
+ callback(null);
539
+ }
540
+ }
541
+
542
+ // Dispose all connections
543
+ for (const conn of this.connections.values()) {
544
+ conn.dispose();
545
+ }
546
+ this.connections.clear();
547
+
548
+ this.emit('disposed');
549
+ this.removeAllListeners();
550
+ }
551
+ }