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,500 @@
1
+ import * as k8s from '@kubernetes/client-node';
2
+ import { Logger } from 'winston';
3
+ import { join } from 'path';
4
+ import { homedir } from 'os';
5
+ import { existsSync } from 'fs';
6
+ import { ResourceOperations } from './ResourceOperations.js';
7
+ import type { ApiType, Configuration } from '@kubernetes/client-node';
8
+ // import { URL } from 'url';
9
+
10
+ /**
11
+ * Configuration options for KubernetesClient
12
+ */
13
+ export interface KubernetesClientConfig {
14
+ /**
15
+ * Path to kubeconfig file. If not specified, will try default locations
16
+ */
17
+ kubeConfigPath?: string;
18
+
19
+ /**
20
+ * Specific context to use from kubeconfig. If not specified, uses current context
21
+ */
22
+ context?: string;
23
+
24
+ /**
25
+ * Whether to use in-cluster configuration (for pods running inside k8s)
26
+ */
27
+ inCluster?: boolean;
28
+
29
+ /**
30
+ * Bearer token for authentication
31
+ */
32
+ bearerToken?: string;
33
+
34
+ /**
35
+ * Kubernetes API server URL (used with bearerToken)
36
+ */
37
+ apiServerUrl?: string;
38
+
39
+ /**
40
+ * Skip TLS verification (not recommended for production)
41
+ */
42
+ skipTlsVerify?: boolean;
43
+
44
+ /**
45
+ * Logger instance for debug output
46
+ */
47
+ logger?: Logger;
48
+ }
49
+
50
+ /**
51
+ * Authentication method types
52
+ */
53
+ export enum AuthMethod {
54
+ KUBECONFIG = 'kubeconfig',
55
+ IN_CLUSTER = 'in-cluster',
56
+ TOKEN = 'token',
57
+ }
58
+
59
+ /**
60
+ * KubernetesClient provides a high-level interface for interacting with Kubernetes clusters
61
+ */
62
+ export class KubernetesClient {
63
+ private kc: k8s.KubeConfig;
64
+ private coreV1Api!: k8s.CoreV1Api;
65
+ private appsV1Api!: k8s.AppsV1Api;
66
+ private batchV1Api!: k8s.BatchV1Api;
67
+ private networkingV1Api!: k8s.NetworkingV1Api;
68
+ private authMethod: AuthMethod;
69
+ private logger?: Logger;
70
+ private _resources: ResourceOperations;
71
+ private _customObjectsApi?: k8s.CustomObjectsApi;
72
+
73
+ constructor(private config: KubernetesClientConfig = {}) {
74
+ this.logger = config.logger;
75
+ this.kc = new k8s.KubeConfig();
76
+ this.authMethod = this.detectAuthMethod();
77
+ this.initializeClient();
78
+
79
+ this.config.skipTlsVerify = true;
80
+
81
+ this.initializeApiClients();
82
+
83
+ this._resources = new ResourceOperations(this);
84
+ }
85
+
86
+ /**
87
+ * Detect which authentication method to use based on configuration
88
+ */
89
+ private detectAuthMethod(): AuthMethod {
90
+ if (this.config.inCluster) {
91
+ return AuthMethod.IN_CLUSTER;
92
+ }
93
+
94
+ if (this.config.bearerToken && this.config.apiServerUrl) {
95
+ return AuthMethod.TOKEN;
96
+ }
97
+
98
+ return AuthMethod.KUBECONFIG;
99
+ }
100
+
101
+ /**
102
+ * Initialize the Kubernetes client based on the detected auth method
103
+ */
104
+ private initializeClient(): void {
105
+ try {
106
+ switch (this.authMethod) {
107
+ case AuthMethod.IN_CLUSTER:
108
+ this.initializeInClusterConfig();
109
+ break;
110
+
111
+ case AuthMethod.TOKEN:
112
+ this.initializeTokenConfig();
113
+ break;
114
+
115
+ case AuthMethod.KUBECONFIG:
116
+ default:
117
+ this.initializeKubeConfig();
118
+ break;
119
+ }
120
+
121
+ this.logger?.info(`Kubernetes client initialized using ${this.authMethod} authentication`);
122
+ } catch (error) {
123
+ const message = `Failed to initialize Kubernetes client: ${error instanceof Error ? error.message : String(error)}`;
124
+ this.logger?.error(message);
125
+ throw new Error(message);
126
+ }
127
+ }
128
+
129
+ /**
130
+ * Initialize using kubeconfig file
131
+ */
132
+ private initializeKubeConfig(): void {
133
+ const kubeConfigPath = this.getKubeConfigPath();
134
+
135
+ if (!existsSync(kubeConfigPath)) {
136
+ throw new Error(`Kubeconfig file not found at: ${kubeConfigPath}`);
137
+ }
138
+
139
+ this.kc.loadFromFile(kubeConfigPath);
140
+
141
+ if (this.config.context) {
142
+ this.kc.setCurrentContext(this.config.context);
143
+ }
144
+
145
+ this.logger?.debug(`Loaded kubeconfig from: ${kubeConfigPath}`);
146
+ }
147
+
148
+ /**
149
+ * Initialize using in-cluster configuration
150
+ */
151
+ private initializeInClusterConfig(): void {
152
+ this.kc.loadFromCluster();
153
+ this.logger?.debug('Loaded in-cluster configuration');
154
+ }
155
+
156
+ /**
157
+ * Initialize using bearer token
158
+ */
159
+ private initializeTokenConfig(): void {
160
+ if (!this.config.bearerToken || !this.config.apiServerUrl) {
161
+ throw new Error('Bearer token and API server URL are required for token authentication');
162
+ }
163
+
164
+ const cluster: k8s.Cluster = {
165
+ name: 'default',
166
+ server: this.config.apiServerUrl,
167
+ skipTLSVerify: this.config.skipTlsVerify || false,
168
+ };
169
+
170
+ const user: k8s.User = {
171
+ name: 'default',
172
+ token: this.config.bearerToken,
173
+ };
174
+
175
+ const context: k8s.Context = {
176
+ name: 'default',
177
+ cluster: cluster.name,
178
+ user: user.name,
179
+ };
180
+
181
+ this.kc.loadFromOptions({
182
+ clusters: [cluster],
183
+ users: [user],
184
+ contexts: [context],
185
+ currentContext: context.name,
186
+ });
187
+
188
+ this.logger?.debug(`Configured token authentication for: ${this.config.apiServerUrl}`);
189
+ }
190
+
191
+ /**
192
+ * Get the path to the kubeconfig file
193
+ */
194
+ private getKubeConfigPath(): string {
195
+ if (this.config.kubeConfigPath) {
196
+ return this.config.kubeConfigPath;
197
+ }
198
+
199
+ // Check KUBECONFIG environment variable
200
+ const kubeConfigEnv = process.env.KUBECONFIG;
201
+ if (kubeConfigEnv) {
202
+ // KUBECONFIG can contain multiple paths separated by :
203
+ const paths = kubeConfigEnv.split(':');
204
+ for (const path of paths) {
205
+ if (existsSync(path)) {
206
+ return path;
207
+ }
208
+ }
209
+ }
210
+
211
+ // Default location
212
+ return join(homedir(), '.kube', 'config');
213
+ }
214
+
215
+ /**
216
+ * Initialize API clients for different Kubernetes resources
217
+ */
218
+ private initializeApiClients(): void {
219
+ this.coreV1Api = this.kc.makeApiClient(k8s.CoreV1Api);
220
+ this.appsV1Api = this.kc.makeApiClient(k8s.AppsV1Api);
221
+ this.batchV1Api = this.kc.makeApiClient(k8s.BatchV1Api);
222
+ this.networkingV1Api = this.kc.makeApiClient(k8s.NetworkingV1Api);
223
+ }
224
+
225
+ /**
226
+ * Get the current cluster information
227
+ */
228
+ public getCurrentCluster(): k8s.Cluster | null {
229
+ const currentContext = this.kc.getCurrentContext();
230
+ const contexts = this.kc.getContexts();
231
+ const context = contexts.find((c) => c.name === currentContext);
232
+
233
+ if (!context) {
234
+ return null;
235
+ }
236
+
237
+ const clusters = this.kc.getClusters();
238
+ return clusters.find((c) => c.name === context.cluster) || null;
239
+ }
240
+
241
+ /**
242
+ * Get the current context name
243
+ */
244
+ public getCurrentContext(): string {
245
+ return this.kc.getCurrentContext();
246
+ }
247
+
248
+ /**
249
+ * Get all available contexts
250
+ */
251
+ public getContexts(): string[] {
252
+ return this.kc.getContexts().map((ctx) => ctx.name);
253
+ }
254
+
255
+ /**
256
+ * Refresh the current context by reloading the kubeconfig file
257
+ * This ensures we always use the latest context when executing operations
258
+ */
259
+ public async refreshCurrentContext(): Promise<void> {
260
+ // Only refresh for kubeconfig-based authentication
261
+ if (this.authMethod !== AuthMethod.KUBECONFIG) {
262
+ this.logger?.debug('Skipping context refresh for non-kubeconfig authentication');
263
+ return;
264
+ }
265
+
266
+ try {
267
+ const kubeConfigPath = this.getKubeConfigPath();
268
+
269
+ if (!existsSync(kubeConfigPath)) {
270
+ this.logger?.warn(`Kubeconfig file not found at: ${kubeConfigPath} during refresh`);
271
+ return;
272
+ }
273
+
274
+ // Store the old context to detect changes
275
+ const oldContext = this.kc.getCurrentContext();
276
+
277
+ // Reload the kubeconfig file to get the latest context
278
+ this.kc.loadFromFile(kubeConfigPath);
279
+
280
+ const newContext = this.kc.getCurrentContext();
281
+
282
+ // If context changed, reinitialize API clients
283
+ if (oldContext !== newContext) {
284
+ this.initializeApiClients();
285
+ this.logger?.info(
286
+ `Context changed from '${oldContext}' to '${newContext}' - API clients reinitialized`,
287
+ );
288
+ } else {
289
+ this.logger?.debug(`Context unchanged: '${newContext}'`);
290
+ }
291
+ } catch (error) {
292
+ this.logger?.error(
293
+ `Failed to refresh current context: ${error instanceof Error ? error.message : String(error)}`,
294
+ );
295
+ // Don't throw - we'll continue with the existing context
296
+ }
297
+ }
298
+
299
+ /**
300
+ * Switch to a different context
301
+ */
302
+ public async switchContext(contextName: string): Promise<void> {
303
+ const contexts = this.kc.getContexts();
304
+ const context = contexts.find((c) => c.name === contextName);
305
+
306
+ if (!context) {
307
+ throw new Error(`Context not found: ${contextName}`);
308
+ }
309
+
310
+ this.kc.setCurrentContext(contextName);
311
+ this.initializeApiClients();
312
+
313
+ this.logger?.info(`Switched to context: ${contextName}`);
314
+ }
315
+
316
+ /**
317
+ * Get the authentication method being used
318
+ */
319
+ public getAuthMethod(): AuthMethod {
320
+ return this.authMethod;
321
+ }
322
+
323
+ /**
324
+ * Test the connection to the Kubernetes API server
325
+ */
326
+ public async testConnection(): Promise<boolean> {
327
+ try {
328
+ await this.coreV1Api.listNamespace();
329
+ this.logger?.debug('Successfully connected to Kubernetes API server');
330
+ return true;
331
+ } catch (error) {
332
+ this.logger?.error(`Failed to connect to Kubernetes API server: ${error}`);
333
+ return false;
334
+ }
335
+ }
336
+
337
+ /**
338
+ * Factory method to create a KubernetesClient from a kubeconfig file
339
+ */
340
+ public static fromKubeConfig(
341
+ kubeConfigPath?: string,
342
+ context?: string,
343
+ logger?: Logger,
344
+ ): KubernetesClient {
345
+ return new KubernetesClient({
346
+ kubeConfigPath,
347
+ context,
348
+ logger,
349
+ });
350
+ }
351
+
352
+ /**
353
+ * Factory method to create a KubernetesClient for in-cluster use
354
+ */
355
+ public static fromInCluster(logger?: Logger): KubernetesClient {
356
+ return new KubernetesClient({
357
+ inCluster: true,
358
+ logger,
359
+ });
360
+ }
361
+
362
+ /**
363
+ * Factory method to create a KubernetesClient using a bearer token
364
+ */
365
+ public static fromToken(
366
+ apiServerUrl: string,
367
+ bearerToken: string,
368
+ skipTlsVerify = false,
369
+ logger?: Logger,
370
+ ): KubernetesClient {
371
+ return new KubernetesClient({
372
+ apiServerUrl,
373
+ bearerToken,
374
+ skipTlsVerify,
375
+ logger,
376
+ });
377
+ }
378
+
379
+ // Getters for API clients
380
+ public get core(): k8s.CoreV1Api {
381
+ return this.coreV1Api;
382
+ }
383
+
384
+ public get apps(): k8s.AppsV1Api {
385
+ return this.appsV1Api;
386
+ }
387
+
388
+ public get batch(): k8s.BatchV1Api {
389
+ return this.batchV1Api;
390
+ }
391
+
392
+ public get networking(): k8s.NetworkingV1Api {
393
+ return this.networkingV1Api;
394
+ }
395
+
396
+ public get kubeConfig(): k8s.KubeConfig {
397
+ return this.kc;
398
+ }
399
+
400
+ /**
401
+ * Get resource operations for working with Kubernetes resources
402
+ */
403
+ public get resources(): ResourceOperations {
404
+ return this._resources;
405
+ }
406
+
407
+ /**
408
+ * Returns a Kubernetes API client for the specified API constructor.
409
+ * This allows for accessing various Kubernetes APIs in a type-safe manner.
410
+ * @param apiClientConstructor The constructor of the API client to instantiate (e.g., k8s.CoreV1Api).
411
+ * It should conform to `new (config: Configuration) => T`.
412
+ * @returns An instance of the requested API client.
413
+ */
414
+ public getGenericApiClient<T extends ApiType>(
415
+ apiClientConstructor: new (config: Configuration) => T,
416
+ ): T {
417
+ return this.kc.makeApiClient(apiClientConstructor);
418
+ }
419
+
420
+ /**
421
+ * Makes a generic GET request to the Kubernetes API server.
422
+ * This is useful for accessing API endpoints not covered by specific client APIs (e.g., custom resources or aggregated APIs like metrics.k8s.io).
423
+ * @param path The API path to request (e.g., '/apis/metrics.k8s.io/v1beta1/nodes').
424
+ * @returns A promise that resolves with the API response.
425
+ * @throws Will throw an error if the request fails.
426
+ */
427
+ public async getRaw<T = any>(path: string): Promise<T> {
428
+ this.logger?.debug(`Making authenticated raw request to: ${path}`);
429
+
430
+ try {
431
+ // Use the customObjects API as a workaround for raw requests
432
+ // Since metrics are served by the metrics-server through custom resources
433
+ if (path.includes('metrics.k8s.io')) {
434
+ const group = 'metrics.k8s.io';
435
+ const version = 'v1beta1';
436
+
437
+ if (path.includes('/nodes')) {
438
+ return (await this.customObjects.listClusterCustomObject({
439
+ group: group,
440
+ version: version,
441
+ plural: 'nodes',
442
+ })) as T;
443
+ } else if (path.includes('/pods')) {
444
+ // Handle namespaced vs cluster-wide pod metrics
445
+ const namespacedMatch = path.match(/\/namespaces\/([\w-]+)\/pods/);
446
+ if (namespacedMatch) {
447
+ const namespace = namespacedMatch[1];
448
+ return (await this.customObjects.listNamespacedCustomObject({
449
+ group: group,
450
+ version: version,
451
+ namespace: namespace,
452
+ plural: 'pods',
453
+ })) as T;
454
+ } else {
455
+ return (await this.customObjects.listClusterCustomObject({
456
+ group: group,
457
+ version: version,
458
+ plural: 'pods',
459
+ })) as T;
460
+ }
461
+ }
462
+ }
463
+
464
+ // For non-metrics paths, throw an error explaining the limitation
465
+ throw new Error(
466
+ `Raw requests are only supported for metrics.k8s.io API paths. Attempted path: ${path}`,
467
+ );
468
+ } catch (error: any) {
469
+ this.logger?.error(`Error making raw request to ${path}: ${error.message}`);
470
+
471
+ // If it's a 403 error, provide more helpful debugging information
472
+ if (error.statusCode === 403 || (error.response && error.response.statusCode === 403)) {
473
+ this.logger?.error(
474
+ 'Authentication failed - check that your kubeconfig is valid and you have the necessary permissions',
475
+ );
476
+ this.logger?.error(
477
+ 'If using exec-based auth, ensure the authentication plugin is properly configured',
478
+ );
479
+ }
480
+
481
+ throw error;
482
+ }
483
+ }
484
+
485
+ public get customObjects(): k8s.CustomObjectsApi {
486
+ if (!this._customObjectsApi) {
487
+ this._customObjectsApi = this.kc.makeApiClient(k8s.CustomObjectsApi);
488
+ }
489
+ return this._customObjectsApi;
490
+ }
491
+
492
+ /**
493
+ * Sets whether to skip TLS verification for API requests
494
+ * @param skip True to skip TLS verification, false otherwise
495
+ */
496
+ public setSkipTlsVerify(skip: boolean): void {
497
+ this.config.skipTlsVerify = skip;
498
+ this.logger?.debug(`TLS verification set to: ${!skip}`);
499
+ }
500
+ }