komodo-mcp-server 1.2.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 (402) hide show
  1. package/CHANGELOG.md +187 -0
  2. package/LICENSE +29 -0
  3. package/README.md +214 -0
  4. package/build/app/adapters.d.ts +20 -0
  5. package/build/app/adapters.js +36 -0
  6. package/build/app/api/base.d.ts +43 -0
  7. package/build/app/api/base.js +108 -0
  8. package/build/app/api/client.d.ts +17 -0
  9. package/build/app/api/client.js +102 -0
  10. package/build/app/api/index.d.ts +7 -0
  11. package/build/app/api/index.js +5 -0
  12. package/build/app/api/resources/containers.d.ts +23 -0
  13. package/build/app/api/resources/containers.js +90 -0
  14. package/build/app/api/resources/deployments.d.ts +23 -0
  15. package/build/app/api/resources/deployments.js +103 -0
  16. package/build/app/api/resources/index.d.ts +4 -0
  17. package/build/app/api/resources/index.js +4 -0
  18. package/build/app/api/resources/servers.d.ts +16 -0
  19. package/build/app/api/resources/servers.js +59 -0
  20. package/build/app/api/resources/stacks.d.ts +23 -0
  21. package/build/app/api/resources/stacks.js +103 -0
  22. package/build/app/api/types.d.ts +17 -0
  23. package/build/app/api/types.js +3 -0
  24. package/build/app/api/utils.d.ts +21 -0
  25. package/build/app/api/utils.js +53 -0
  26. package/build/app/client-initializer.d.ts +1 -0
  27. package/build/app/client-initializer.js +38 -0
  28. package/build/app/config/descriptions.d.ts +112 -0
  29. package/build/app/config/descriptions.js +112 -0
  30. package/build/app/config/env.d.ts +134 -0
  31. package/build/app/config/env.js +35 -0
  32. package/build/app/config/index.d.ts +12 -0
  33. package/build/app/config/index.js +11 -0
  34. package/build/app/config/mcp.config.d.ts +18 -0
  35. package/build/app/config/mcp.config.js +23 -0
  36. package/build/app/config/tools.config.d.ts +13 -0
  37. package/build/app/config/tools.config.js +13 -0
  38. package/build/app/config/transport.config.d.ts +11 -0
  39. package/build/app/config/transport.config.js +58 -0
  40. package/build/app/connection.d.ts +4 -0
  41. package/build/app/connection.js +2 -0
  42. package/build/app/errors/api.d.ts +33 -0
  43. package/build/app/errors/api.js +158 -0
  44. package/build/app/errors/factory.d.ts +112 -0
  45. package/build/app/errors/factory.js +54 -0
  46. package/build/app/errors/index.d.ts +5 -0
  47. package/build/app/errors/index.js +5 -0
  48. package/build/app/errors/messages.d.ts +33 -0
  49. package/build/app/errors/messages.js +38 -0
  50. package/build/app/errors/resource.d.ts +17 -0
  51. package/build/app/errors/resource.js +75 -0
  52. package/build/app/framework.d.ts +1 -0
  53. package/build/app/framework.js +1 -0
  54. package/build/app/index.d.ts +9 -0
  55. package/build/app/index.js +6 -0
  56. package/build/app/mcp/prompts/base.d.ts +55 -0
  57. package/build/app/mcp/prompts/base.js +23 -0
  58. package/build/app/mcp/prompts/config/index.d.ts +24 -0
  59. package/build/app/mcp/prompts/config/index.js +21 -0
  60. package/build/app/mcp/prompts/example-troubleshoot.d.ts +1 -0
  61. package/build/app/mcp/prompts/example-troubleshoot.js +117 -0
  62. package/build/app/mcp/prompts/factory.d.ts +38 -0
  63. package/build/app/mcp/prompts/factory.js +138 -0
  64. package/build/app/mcp/prompts/index.d.ts +3 -0
  65. package/build/app/mcp/prompts/index.js +6 -0
  66. package/build/app/mcp/resources/base.d.ts +51 -0
  67. package/build/app/mcp/resources/base.js +39 -0
  68. package/build/app/mcp/resources/config/index.d.ts +42 -0
  69. package/build/app/mcp/resources/config/index.js +31 -0
  70. package/build/app/mcp/resources/example-server-info.d.ts +1 -0
  71. package/build/app/mcp/resources/example-server-info.js +37 -0
  72. package/build/app/mcp/resources/factory.d.ts +35 -0
  73. package/build/app/mcp/resources/factory.js +76 -0
  74. package/build/app/mcp/resources/index.d.ts +3 -0
  75. package/build/app/mcp/resources/index.js +6 -0
  76. package/build/app/mcp/tools/base.d.ts +36 -0
  77. package/build/app/mcp/tools/base.js +96 -0
  78. package/build/app/mcp/tools/config/configure.d.ts +2 -0
  79. package/build/app/mcp/tools/config/configure.js +60 -0
  80. package/build/app/mcp/tools/config/health.d.ts +2 -0
  81. package/build/app/mcp/tools/config/health.js +102 -0
  82. package/build/app/mcp/tools/config/index.d.ts +2 -0
  83. package/build/app/mcp/tools/config/index.js +2 -0
  84. package/build/app/mcp/tools/container/index.d.ts +6 -0
  85. package/build/app/mcp/tools/container/index.js +6 -0
  86. package/build/app/mcp/tools/container/info.d.ts +2 -0
  87. package/build/app/mcp/tools/container/info.js +16 -0
  88. package/build/app/mcp/tools/container/list.d.ts +2 -0
  89. package/build/app/mcp/tools/container/list.js +17 -0
  90. package/build/app/mcp/tools/container/logs.d.ts +2 -0
  91. package/build/app/mcp/tools/container/logs.js +46 -0
  92. package/build/app/mcp/tools/container/manage.d.ts +6 -0
  93. package/build/app/mcp/tools/container/manage.js +89 -0
  94. package/build/app/mcp/tools/container/prune.d.ts +2 -0
  95. package/build/app/mcp/tools/container/prune.js +22 -0
  96. package/build/app/mcp/tools/container/search-logs.d.ts +2 -0
  97. package/build/app/mcp/tools/container/search-logs.js +45 -0
  98. package/build/app/mcp/tools/deployment/actions.d.ts +9 -0
  99. package/build/app/mcp/tools/deployment/actions.js +149 -0
  100. package/build/app/mcp/tools/deployment/index.d.ts +3 -0
  101. package/build/app/mcp/tools/deployment/index.js +3 -0
  102. package/build/app/mcp/tools/deployment/list.d.ts +2 -0
  103. package/build/app/mcp/tools/deployment/list.js +21 -0
  104. package/build/app/mcp/tools/deployment/manage.d.ts +5 -0
  105. package/build/app/mcp/tools/deployment/manage.js +128 -0
  106. package/build/app/mcp/tools/factory.d.ts +29 -0
  107. package/build/app/mcp/tools/factory.js +137 -0
  108. package/build/app/mcp/tools/index.d.ts +3 -0
  109. package/build/app/mcp/tools/index.js +54 -0
  110. package/build/app/mcp/tools/schemas/container-operations.schema.d.ts +12 -0
  111. package/build/app/mcp/tools/schemas/container-operations.schema.js +15 -0
  112. package/build/app/mcp/tools/schemas/deployment-config.schema.d.ts +416 -0
  113. package/build/app/mcp/tools/schemas/deployment-config.schema.js +90 -0
  114. package/build/app/mcp/tools/schemas/index.d.ts +4 -0
  115. package/build/app/mcp/tools/schemas/index.js +4 -0
  116. package/build/app/mcp/tools/schemas/server-config.schema.d.ts +109 -0
  117. package/build/app/mcp/tools/schemas/server-config.schema.js +66 -0
  118. package/build/app/mcp/tools/schemas/stack-config.schema.d.ts +370 -0
  119. package/build/app/mcp/tools/schemas/stack-config.schema.js +109 -0
  120. package/build/app/mcp/tools/server/index.d.ts +3 -0
  121. package/build/app/mcp/tools/server/index.js +3 -0
  122. package/build/app/mcp/tools/server/list.d.ts +2 -0
  123. package/build/app/mcp/tools/server/list.js +20 -0
  124. package/build/app/mcp/tools/server/manage.d.ts +5 -0
  125. package/build/app/mcp/tools/server/manage.js +54 -0
  126. package/build/app/mcp/tools/server/stats.d.ts +2 -0
  127. package/build/app/mcp/tools/server/stats.js +22 -0
  128. package/build/app/mcp/tools/stack/actions.d.ts +9 -0
  129. package/build/app/mcp/tools/stack/actions.js +149 -0
  130. package/build/app/mcp/tools/stack/index.d.ts +3 -0
  131. package/build/app/mcp/tools/stack/index.js +3 -0
  132. package/build/app/mcp/tools/stack/list.d.ts +2 -0
  133. package/build/app/mcp/tools/stack/list.js +20 -0
  134. package/build/app/mcp/tools/stack/manage.d.ts +5 -0
  135. package/build/app/mcp/tools/stack/manage.js +92 -0
  136. package/build/app/mcp/tools/tools.config.d.ts +34 -0
  137. package/build/app/mcp/tools/tools.config.js +34 -0
  138. package/build/app/mcp/tools/utils.d.ts +13 -0
  139. package/build/app/mcp/tools/utils.js +74 -0
  140. package/build/app/server-options.d.ts +6 -0
  141. package/build/app/server-options.js +117 -0
  142. package/build/app/telemetry.d.ts +7 -0
  143. package/build/app/telemetry.js +5 -0
  144. package/build/app/types.d.ts +14 -0
  145. package/build/app/types.js +1 -0
  146. package/build/app/utils/index.d.ts +1 -0
  147. package/build/app/utils/index.js +1 -0
  148. package/build/app/utils/response-formatter.d.ts +52 -0
  149. package/build/app/utils/response-formatter.js +111 -0
  150. package/build/index.d.ts +2 -0
  151. package/build/index.js +38 -0
  152. package/build/server/builder/constants.d.ts +44 -0
  153. package/build/server/builder/constants.js +42 -0
  154. package/build/server/builder/index.d.ts +4 -0
  155. package/build/server/builder/index.js +3 -0
  156. package/build/server/builder/server-builder.d.ts +16 -0
  157. package/build/server/builder/server-builder.js +448 -0
  158. package/build/server/builder/types.d.ts +100 -0
  159. package/build/server/builder/types.js +12 -0
  160. package/build/server/config/env.d.ts +58 -0
  161. package/build/server/config/env.js +54 -0
  162. package/build/server/config/index.d.ts +24 -0
  163. package/build/server/config/index.js +9 -0
  164. package/build/server/config/server.config.d.ts +21 -0
  165. package/build/server/config/server.config.js +29 -0
  166. package/build/server/config/transport.config.d.ts +24 -0
  167. package/build/server/config/transport.config.js +69 -0
  168. package/build/server/connection/connection-state.d.ts +28 -0
  169. package/build/server/connection/connection-state.js +143 -0
  170. package/build/server/connection/core/base.d.ts +23 -0
  171. package/build/server/connection/core/base.js +52 -0
  172. package/build/server/connection/core/constants.d.ts +63 -0
  173. package/build/server/connection/core/constants.js +63 -0
  174. package/build/server/connection/core/index.d.ts +4 -0
  175. package/build/server/connection/core/index.js +3 -0
  176. package/build/server/connection/core/types.d.ts +46 -0
  177. package/build/server/connection/core/types.js +1 -0
  178. package/build/server/connection/index.d.ts +5 -0
  179. package/build/server/connection/index.js +4 -0
  180. package/build/server/connection/request-manager.d.ts +19 -0
  181. package/build/server/connection/request-manager.js +106 -0
  182. package/build/server/errors/categories/connection.d.ts +12 -0
  183. package/build/server/errors/categories/connection.js +59 -0
  184. package/build/server/errors/categories/index.d.ts +5 -0
  185. package/build/server/errors/categories/index.js +5 -0
  186. package/build/server/errors/categories/mcp.d.ts +45 -0
  187. package/build/server/errors/categories/mcp.js +218 -0
  188. package/build/server/errors/categories/operation.d.ts +19 -0
  189. package/build/server/errors/categories/operation.js +78 -0
  190. package/build/server/errors/categories/system.d.ts +20 -0
  191. package/build/server/errors/categories/system.js +90 -0
  192. package/build/server/errors/categories/validation.d.ts +27 -0
  193. package/build/server/errors/categories/validation.js +136 -0
  194. package/build/server/errors/core/base.d.ts +20 -0
  195. package/build/server/errors/core/base.js +115 -0
  196. package/build/server/errors/core/constants.d.ts +9 -0
  197. package/build/server/errors/core/constants.js +23 -0
  198. package/build/server/errors/core/error-codes.d.ts +29 -0
  199. package/build/server/errors/core/error-codes.js +27 -0
  200. package/build/server/errors/core/http.d.ts +24 -0
  201. package/build/server/errors/core/http.js +42 -0
  202. package/build/server/errors/core/index.d.ts +7 -0
  203. package/build/server/errors/core/index.js +6 -0
  204. package/build/server/errors/core/json-rpc.d.ts +14 -0
  205. package/build/server/errors/core/json-rpc.js +19 -0
  206. package/build/server/errors/core/messages.d.ts +88 -0
  207. package/build/server/errors/core/messages.js +101 -0
  208. package/build/server/errors/core/types.d.ts +35 -0
  209. package/build/server/errors/core/types.js +1 -0
  210. package/build/server/errors/factory.d.ts +73 -0
  211. package/build/server/errors/factory.js +81 -0
  212. package/build/server/errors/index.d.ts +4 -0
  213. package/build/server/errors/index.js +3 -0
  214. package/build/server/handlers/cancellation.d.ts +4 -0
  215. package/build/server/handlers/cancellation.js +30 -0
  216. package/build/server/handlers/core/constants.d.ts +26 -0
  217. package/build/server/handlers/core/constants.js +25 -0
  218. package/build/server/handlers/core/index.d.ts +2 -0
  219. package/build/server/handlers/core/index.js +1 -0
  220. package/build/server/handlers/core/types.d.ts +31 -0
  221. package/build/server/handlers/core/types.js +1 -0
  222. package/build/server/handlers/index.d.ts +6 -0
  223. package/build/server/handlers/index.js +5 -0
  224. package/build/server/handlers/ping.d.ts +4 -0
  225. package/build/server/handlers/ping.js +23 -0
  226. package/build/server/index.d.ts +19 -0
  227. package/build/server/index.js +15 -0
  228. package/build/server/logger/core/constants.d.ts +34 -0
  229. package/build/server/logger/core/constants.js +99 -0
  230. package/build/server/logger/core/context.d.ts +11 -0
  231. package/build/server/logger/core/context.js +57 -0
  232. package/build/server/logger/core/errors.d.ts +52 -0
  233. package/build/server/logger/core/errors.js +93 -0
  234. package/build/server/logger/core/format.d.ts +3 -0
  235. package/build/server/logger/core/format.js +10 -0
  236. package/build/server/logger/core/index.d.ts +7 -0
  237. package/build/server/logger/core/index.js +4 -0
  238. package/build/server/logger/core/types.d.ts +62 -0
  239. package/build/server/logger/core/types.js +1 -0
  240. package/build/server/logger/factory.d.ts +45 -0
  241. package/build/server/logger/factory.js +116 -0
  242. package/build/server/logger/formatters/index.d.ts +3 -0
  243. package/build/server/logger/formatters/index.js +3 -0
  244. package/build/server/logger/formatters/json-formatter.d.ts +13 -0
  245. package/build/server/logger/formatters/json-formatter.js +33 -0
  246. package/build/server/logger/formatters/schema.d.ts +57 -0
  247. package/build/server/logger/formatters/schema.js +106 -0
  248. package/build/server/logger/formatters/text-formatter.d.ts +13 -0
  249. package/build/server/logger/formatters/text-formatter.js +54 -0
  250. package/build/server/logger/index.d.ts +19 -0
  251. package/build/server/logger/index.js +17 -0
  252. package/build/server/logger/logger.d.ts +52 -0
  253. package/build/server/logger/logger.js +167 -0
  254. package/build/server/logger/mcp-logger.d.ts +38 -0
  255. package/build/server/logger/mcp-logger.js +116 -0
  256. package/build/server/logger/scrubbing/index.d.ts +2 -0
  257. package/build/server/logger/scrubbing/index.js +2 -0
  258. package/build/server/logger/scrubbing/injection-guard.d.ts +11 -0
  259. package/build/server/logger/scrubbing/injection-guard.js +29 -0
  260. package/build/server/logger/scrubbing/secret-scrubber.d.ts +9 -0
  261. package/build/server/logger/scrubbing/secret-scrubber.js +69 -0
  262. package/build/server/logger/writers/base-writer.d.ts +8 -0
  263. package/build/server/logger/writers/base-writer.js +12 -0
  264. package/build/server/logger/writers/composite-writer.d.ts +14 -0
  265. package/build/server/logger/writers/composite-writer.js +46 -0
  266. package/build/server/logger/writers/console-writer.d.ts +13 -0
  267. package/build/server/logger/writers/console-writer.js +28 -0
  268. package/build/server/logger/writers/file-writer.d.ts +24 -0
  269. package/build/server/logger/writers/file-writer.js +86 -0
  270. package/build/server/logger/writers/index.d.ts +5 -0
  271. package/build/server/logger/writers/index.js +5 -0
  272. package/build/server/logger/writers/mcp-writer.d.ts +17 -0
  273. package/build/server/logger/writers/mcp-writer.js +48 -0
  274. package/build/server/session/core/base.d.ts +21 -0
  275. package/build/server/session/core/base.js +54 -0
  276. package/build/server/session/core/constants.d.ts +24 -0
  277. package/build/server/session/core/constants.js +33 -0
  278. package/build/server/session/core/errors.d.ts +41 -0
  279. package/build/server/session/core/errors.js +168 -0
  280. package/build/server/session/core/events.d.ts +42 -0
  281. package/build/server/session/core/events.js +55 -0
  282. package/build/server/session/core/index.d.ts +11 -0
  283. package/build/server/session/core/index.js +6 -0
  284. package/build/server/session/core/metrics.d.ts +52 -0
  285. package/build/server/session/core/metrics.js +217 -0
  286. package/build/server/session/core/schemas.d.ts +120 -0
  287. package/build/server/session/core/schemas.js +184 -0
  288. package/build/server/session/core/types.d.ts +38 -0
  289. package/build/server/session/core/types.js +1 -0
  290. package/build/server/session/index.d.ts +5 -0
  291. package/build/server/session/index.js +4 -0
  292. package/build/server/session/operations/cleanup.d.ts +19 -0
  293. package/build/server/session/operations/cleanup.js +45 -0
  294. package/build/server/session/operations/heartbeat.d.ts +21 -0
  295. package/build/server/session/operations/heartbeat.js +67 -0
  296. package/build/server/session/operations/index.d.ts +3 -0
  297. package/build/server/session/operations/index.js +3 -0
  298. package/build/server/session/operations/lifecycle.d.ts +9 -0
  299. package/build/server/session/operations/lifecycle.js +60 -0
  300. package/build/server/session/session-manager.d.ts +35 -0
  301. package/build/server/session/session-manager.js +212 -0
  302. package/build/server/session/utils/format.d.ts +8 -0
  303. package/build/server/session/utils/format.js +67 -0
  304. package/build/server/session/utils/index.d.ts +2 -0
  305. package/build/server/session/utils/index.js +2 -0
  306. package/build/server/session/utils/validation.d.ts +11 -0
  307. package/build/server/session/utils/validation.js +43 -0
  308. package/build/server/telemetry/core/config.d.ts +3 -0
  309. package/build/server/telemetry/core/config.js +22 -0
  310. package/build/server/telemetry/core/constants.d.ts +85 -0
  311. package/build/server/telemetry/core/constants.js +85 -0
  312. package/build/server/telemetry/core/index.d.ts +3 -0
  313. package/build/server/telemetry/core/index.js +2 -0
  314. package/build/server/telemetry/core/types.d.ts +40 -0
  315. package/build/server/telemetry/core/types.js +1 -0
  316. package/build/server/telemetry/index.d.ts +12 -0
  317. package/build/server/telemetry/index.js +8 -0
  318. package/build/server/telemetry/metrics.d.ts +23 -0
  319. package/build/server/telemetry/metrics.js +170 -0
  320. package/build/server/telemetry/sdk.d.ts +3 -0
  321. package/build/server/telemetry/sdk.js +83 -0
  322. package/build/server/telemetry/tracing.d.ts +9 -0
  323. package/build/server/telemetry/tracing.js +98 -0
  324. package/build/server/transport/core/base.d.ts +27 -0
  325. package/build/server/transport/core/base.js +64 -0
  326. package/build/server/transport/core/constants.d.ts +44 -0
  327. package/build/server/transport/core/constants.js +46 -0
  328. package/build/server/transport/core/index.d.ts +4 -0
  329. package/build/server/transport/core/index.js +3 -0
  330. package/build/server/transport/core/types.d.ts +16 -0
  331. package/build/server/transport/core/types.js +1 -0
  332. package/build/server/transport/http-server.d.ts +16 -0
  333. package/build/server/transport/http-server.js +55 -0
  334. package/build/server/transport/index.d.ts +11 -0
  335. package/build/server/transport/index.js +8 -0
  336. package/build/server/transport/middleware/accept-header.d.ts +2 -0
  337. package/build/server/transport/middleware/accept-header.js +32 -0
  338. package/build/server/transport/middleware/content-type.d.ts +2 -0
  339. package/build/server/transport/middleware/content-type.js +20 -0
  340. package/build/server/transport/middleware/dns-rebinding.d.ts +2 -0
  341. package/build/server/transport/middleware/dns-rebinding.js +57 -0
  342. package/build/server/transport/middleware/index.d.ts +6 -0
  343. package/build/server/transport/middleware/index.js +6 -0
  344. package/build/server/transport/middleware/json-rpc.d.ts +2 -0
  345. package/build/server/transport/middleware/json-rpc.js +73 -0
  346. package/build/server/transport/middleware/protocol-version.d.ts +2 -0
  347. package/build/server/transport/middleware/protocol-version.js +22 -0
  348. package/build/server/transport/middleware/rate-limit.d.ts +7 -0
  349. package/build/server/transport/middleware/rate-limit.js +25 -0
  350. package/build/server/transport/routes/health.d.ts +11 -0
  351. package/build/server/transport/routes/health.js +91 -0
  352. package/build/server/transport/routes/index.d.ts +1 -0
  353. package/build/server/transport/routes/index.js +1 -0
  354. package/build/server/transport/sse/index.d.ts +5 -0
  355. package/build/server/transport/sse/index.js +3 -0
  356. package/build/server/transport/sse/lifecycle/constants.d.ts +53 -0
  357. package/build/server/transport/sse/lifecycle/constants.js +53 -0
  358. package/build/server/transport/sse/lifecycle/index.d.ts +3 -0
  359. package/build/server/transport/sse/lifecycle/index.js +2 -0
  360. package/build/server/transport/sse/lifecycle/types.d.ts +38 -0
  361. package/build/server/transport/sse/lifecycle/types.js +1 -0
  362. package/build/server/transport/sse/routes.d.ts +12 -0
  363. package/build/server/transport/sse/routes.js +133 -0
  364. package/build/server/transport/sse/transport.d.ts +22 -0
  365. package/build/server/transport/sse/transport.js +87 -0
  366. package/build/server/transport/sse/types.d.ts +4 -0
  367. package/build/server/transport/sse/types.js +1 -0
  368. package/build/server/transport/streamable-http/index.d.ts +4 -0
  369. package/build/server/transport/streamable-http/index.js +2 -0
  370. package/build/server/transport/streamable-http/lifecycle/constants.d.ts +62 -0
  371. package/build/server/transport/streamable-http/lifecycle/constants.js +62 -0
  372. package/build/server/transport/streamable-http/lifecycle/index.d.ts +3 -0
  373. package/build/server/transport/streamable-http/lifecycle/index.js +2 -0
  374. package/build/server/transport/streamable-http/lifecycle/types.d.ts +52 -0
  375. package/build/server/transport/streamable-http/lifecycle/types.js +1 -0
  376. package/build/server/transport/streamable-http/routes.d.ts +4 -0
  377. package/build/server/transport/streamable-http/routes.js +151 -0
  378. package/build/server/transport/streamable-http/types.d.ts +1 -0
  379. package/build/server/transport/streamable-http/types.js +1 -0
  380. package/build/server/transport/utils/index.d.ts +2 -0
  381. package/build/server/transport/utils/index.js +2 -0
  382. package/build/server/transport/utils/json-rpc.d.ts +16 -0
  383. package/build/server/transport/utils/json-rpc.js +16 -0
  384. package/build/server/transport/utils/logging.d.ts +4 -0
  385. package/build/server/transport/utils/logging.js +19 -0
  386. package/build/server/types/client.d.ts +14 -0
  387. package/build/server/types/client.js +8 -0
  388. package/build/server/types/index.d.ts +8 -0
  389. package/build/server/types/index.js +3 -0
  390. package/build/server/types/lifecycle.d.ts +32 -0
  391. package/build/server/types/lifecycle.js +6 -0
  392. package/build/server/types/registry.d.ts +62 -0
  393. package/build/server/types/registry.js +1 -0
  394. package/build/server/types/server-options.d.ts +51 -0
  395. package/build/server/types/server-options.js +4 -0
  396. package/build/server/types/tool-context.d.ts +14 -0
  397. package/build/server/types/tool-context.js +1 -0
  398. package/build/server/utils/env-helpers.d.ts +3 -0
  399. package/build/server/utils/env-helpers.js +9 -0
  400. package/build/server/utils/index.d.ts +1 -0
  401. package/build/server/utils/index.js +1 -0
  402. package/package.json +79 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,187 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ --------------------------------------------------------------
9
+
10
+ ## [1.2.0] - Major Architecture Overhaul
11
+
12
+ This release introduces a complete internal restructuring of the codebase for better maintainability,
13
+ performance, and extensibility. The external API remains backwards compatible.
14
+
15
+ ### ✨ Highlights
16
+
17
+ - **Clean Architecture**: Complete separation of framework (`server/`) and application (`app/`) layers
18
+ - **New Server Builder Pattern**: Declarative, fluent API for MCP server construction
19
+ - **OpenTelemetry Support**: Optional distributed tracing and metrics collection
20
+ - **Dynamic Tool Availability**: Tools are now enabled/disabled based on Komodo connection status
21
+ - **Improved Container Health Checks**: Smart readiness probes for better orchestration
22
+ - **Legacy SSE Support**: Optional backwards compatibility for older MCP clients
23
+
24
+ ### 🔐 Security
25
+ - **Docker Image Signing**: All images are now signed using Sigstore/Cosign keyless signing
26
+ - **Build Attestation**: SLSA provenance is attached to all Docker images
27
+ - **SBOM Generation**: Software Bill of Materials included with every release
28
+ - **CORS Protection**: Wildcard origins blocked in production mode
29
+ - **Rate Limiting**: Configurable request limits (default: 1000/15min)
30
+ - **Session Limits**: Prevent memory exhaustion attacks
31
+
32
+ ### 🚀 New Features
33
+
34
+ #### MCP Registry & npm Publishing
35
+ - **MCP Registry Publishing**: New workflow to publish to the official MCP Registry (`io.github.mp-tool/komodo-mcp-server`)
36
+ - **server.json**: Added MCP Registry metadata file for discoverability
37
+ - **npm Publishing**: New workflow for npm registry releases
38
+ - **Production Build**: Optimized builds without source maps for npm releases
39
+
40
+ #### Server Builder Pattern
41
+ Build MCP servers with a clean, declarative API:
42
+ ```typescript
43
+ const server = new McpServerBuilder<KomodoClient>()
44
+ .withOptions(serverOptions)
45
+ .withToolProvider(toolAdapter)
46
+ .build();
47
+ ```
48
+
49
+ #### Dynamic Tool Availability
50
+ - Tools requiring Komodo connection are disabled until connected
51
+ - `komodo_configure` is always available
52
+ - MCP clients automatically receive updated tool lists
53
+
54
+ #### OpenTelemetry Observability
55
+ - Enable with `OTEL_ENABLED=true`
56
+ - Automatic tracing for all API calls and tool executions
57
+ - Metrics collection for request counts, durations, and errors
58
+ - Compatible with Jaeger, Zipkin, and Datadog (not Tested)
59
+
60
+ #### Improved Health & Readiness Probes
61
+ - `/health` - Liveness probe (always 200 if server is running)
62
+ - `/ready` - Smart readiness with accurate status codes:
63
+ - `200` - Ready to accept traffic
64
+ - `503` - Komodo configured but not connected
65
+ - `429` - Session limits reached
66
+
67
+ #### Legacy SSE Transport
68
+ - Enable with `MCP_LEGACY_SSE_ENABLED=true`
69
+ - Supports older MCP clients using protocol 2024-11-05
70
+ - Both modern Streamable HTTP and legacy SSE can run simultaneously
71
+
72
+ ### 🔧 Improvements
73
+
74
+ #### CI/CD Pipeline
75
+ - **Release Workflow**: Enhanced with image signing, build attestation, and improved release notes
76
+ - **Pre-release Support**: Versions with hyphen (e.g., `1.2.0-beta.1`) are now marked as pre-releases
77
+ - **Job Timeouts**: All CI jobs now have explicit timeouts for reliability
78
+ - **Dependabot**: Automated dependency updates for npm, GitHub Actions, and Docker
79
+ - **OSV Scanner**: New vulnerability scanning workflow for known CVEs
80
+
81
+ #### Performance
82
+ - **Faster Logging**: Pre-compiled regex patterns (~50-80% faster under load)
83
+ - **Cached Tool Registry**: Eliminates repeated array allocations
84
+ - **Efficient History Tracking**: O(1) circular buffer for connection state
85
+
86
+ #### Developer Experience
87
+ - **Structured Logging**: ECS-compatible JSON format for log aggregation
88
+ - **Request Cancellation**: Full AbortSignal support through all layers
89
+ - **Better Error Messages**: User-friendly recovery hints in error responses
90
+
91
+ ### 📦 Configuration
92
+
93
+ New environment variables:
94
+
95
+ | Variable | Description | Default |
96
+ |----------|-------------|---------|
97
+ | `OTEL_ENABLED` | Enable OpenTelemetry tracing | `false` |
98
+ | `MCP_LEGACY_SSE_ENABLED` | Enable legacy SSE transport | `false` |
99
+ | `SESSION_MAX_COUNT` | Max Streamable HTTP sessions | `100` |
100
+ | `LEGACY_SSE_MAX_SESSIONS` | Max legacy SSE sessions | `50` |
101
+
102
+ ### 🔄 Migration Notes
103
+
104
+ This release is **backwards compatible**. No changes required for existing deployments.
105
+
106
+ Internal changes (for contributors):
107
+ - Source code reorganized: `src/app/` for Komodo-specific code, `src/server/` for reusable framework
108
+ - API client moved from `src/api/` to `src/app/api/`
109
+ - Configuration split into `src/app/config/` and `src/server/config/`
110
+ - Error system moved to `src/server/errors/`
111
+
112
+ --------------------------------------------------------------
113
+
114
+ ## [1.1.0] - Feature Parity Release
115
+
116
+ ### 🚀 New Tools
117
+ - **Container Logs**: `komodo_get_container_logs`, `komodo_search_logs`
118
+ - **Deployment Lifecycle**: pull, start, stop, restart, pause, unpause, destroy
119
+ - **Stack Lifecycle**: pull, start, stop, restart, pause, unpause, destroy
120
+
121
+ ### 🔧 Improvements
122
+ - Modernized transport layer using native MCP SDK
123
+ - Improved type safety across all 44 tools
124
+ - Better AI-agent-friendly tool descriptions
125
+ - Centralized schema system for consistent validation
126
+
127
+ --------------------------------------------------------------
128
+
129
+ ## [1.0.7] - Security & Auth
130
+
131
+ ### 🔒 Security
132
+ - Added `helmet` middleware for HTTP security headers
133
+ - API Key authentication support (`KOMODO_API_KEY`, `KOMODO_API_SECRET`)
134
+
135
+ ### 📖 Documentation
136
+ - Comprehensive JSDoc documentation for all public APIs
137
+
138
+ --------------------------------------------------------------
139
+
140
+ ## [1.0.6] - Advanced Logging
141
+
142
+ ### 📝 Logging System
143
+ - Structured logging with configurable levels
144
+ - Automatic sensitive data redaction
145
+ - JWT and Bearer token scrubbing
146
+ - Log injection prevention (CWE-117)
147
+ - File logging support (`LOG_DIR`)
148
+ - JSON format support (`LOG_FORMAT=json`)
149
+
150
+ --------------------------------------------------------------
151
+
152
+ ## [1.0.5] - Security Hardening
153
+
154
+ ### 🔒 Security
155
+ - CodeQL and OpenSSF Scorecard workflows
156
+ - Automated dependency review
157
+ - DNS rebinding protection
158
+ - Rate limiting for MCP endpoints
159
+ - Protocol version validation
160
+
161
+ ### 🔄 Transport
162
+ - Migrated to Streamable HTTP Transport (MCP Spec 2025-06-18)
163
+ - Active heartbeat mechanism
164
+ - Session resilience with fault tolerance
165
+
166
+ --------------------------------------------------------------
167
+
168
+ ## [1.0.4] - Architecture Refactoring
169
+
170
+ ### 🏗️ Architecture
171
+ - Refactored from monolithic to modular design
172
+ - Updated to latest `@modelcontextprotocol/sdk`
173
+ - Added Zod schemas for input validation
174
+ - Dynamic tool registry system
175
+
176
+ --------------------------------------------------------------
177
+
178
+ ## [1.0.0] - Initial Release
179
+
180
+ First public release of Komodo MCP Server.
181
+
182
+ ### Features
183
+ - Docker container management (start, stop, restart, pause, unpause)
184
+ - Server management and monitoring
185
+ - Stack management for Docker Compose
186
+ - Deployment management
187
+ - Dual transport support (Stdio and HTTP)
package/LICENSE ADDED
@@ -0,0 +1,29 @@
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 3, 29 June 2007
3
+
4
+ Copyright (C) 2025 Marcel Pfennig
5
+
6
+ This program is free software: you can redistribute it and/or modify
7
+ it under the terms of the GNU General Public License as published by
8
+ the Free Software Foundation, either version 3 of the License, or
9
+ (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
16
+ You should have received a copy of the GNU General Public License
17
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
18
+
19
+ ---
20
+
21
+ Komodo MCP Server - Model Context Protocol Server for Komodo Container Manager
22
+ Author: Marcel Pfennig
23
+ Repository: https://github.com/MP-Tool/komodo-mcp-server
24
+
25
+ This project enables AI assistants to interact with Docker containers,
26
+ deployments, stacks, and servers managed by Komodo through the Model Context Protocol.
27
+
28
+ For the full GPL-3.0 license text, visit:
29
+ https://www.gnu.org/licenses/gpl-3.0.en.html
package/README.md ADDED
@@ -0,0 +1,214 @@
1
+ <div align="center">
2
+
3
+ # 🦎 Komodo MCP Server
4
+
5
+ **Model Context Protocol Server for [Komodo](https://github.com/moghtech/komodo)**
6
+
7
+ Manage your Docker or Podman deployments through Komodo with AI assistants and automation tools.
8
+
9
+ Komodo MCP Server enables seamless interaction between AI assistants (like Claude, GitHub Copilot) and Komodo (Container Management Platform) for efficient container management, server orchestration, and deployment operations. The MCP-Server gives you the ability to control your Komodo-managed infrastructure by using natural language or automated workflows.
10
+
11
+ [![License: GPL-3.0](https://img.shields.io/badge/License-GPL--3.0-blue.svg)](LICENSE) [![GitHub Release](https://img.shields.io/github/v/release/MP-Tool/komodo-mcp-server?logo=github)](https://github.com/MP-Tool/komodo-mcp-server/releases) [![Docker](https://img.shields.io/badge/Docker-Ready-2496ED?logo=docker&logoColor=white)](https://github.com/MP-Tool/komodo-mcp-server/pkgs/container/komodo-mcp-server) [![MCP](https://img.shields.io/badge/MCP-Compatible-green)](https://modelcontextprotocol.io)
12
+
13
+ [![Build Status](https://github.com/MP-Tool/komodo-mcp-server/actions/workflows/release.yml/badge.svg)](https://github.com/MP-Tool/komodo-mcp-server/actions/workflows/release.yml) [![CodeQL](https://github.com/MP-Tool/komodo-mcp-server/actions/workflows/codeql.yml/badge.svg)](https://github.com/MP-Tool/komodo-mcp-server/actions/workflows/codeql.yml) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/MP-Tool/komodo-mcp-server/badge)](https://securityscorecards.dev/viewer/?uri=github.com/MP-Tool/komodo-mcp-server) [![GitHub Issues](https://img.shields.io/github/issues/MP-Tool/komodo-mcp-server?logo=github)](https://github.com/MP-Tool/komodo-mcp-server/issues)
14
+
15
+ [Features](#features) • [Quick Start](#quick-start) • [Examples](#examples) • [Documentation](#documentation)
16
+
17
+ </div>
18
+
19
+ ---
20
+
21
+ ## Features
22
+
23
+ <table>
24
+ <tr>
25
+ <td width="50%">
26
+
27
+ ### 🐳 Container Management
28
+ - Start, stop, restart containers
29
+ - Pause and unpause operations
30
+ - List and monitor containers
31
+ - Cross-server management
32
+
33
+ </td>
34
+ <td width="50%">
35
+
36
+ ### 📦 Deployment & Stacks
37
+ - Deploy containers and updates
38
+ - Manage Docker Compose stacks
39
+ - Multi-environment deployments
40
+ - Stack lifecycle control
41
+
42
+ </td>
43
+ </tr>
44
+ <tr>
45
+ <td width="50%">
46
+
47
+ ### 🖥️ Server Operations
48
+ - List all managed servers
49
+ - Get server statistics
50
+ - Health monitoring
51
+ - Resource tracking
52
+
53
+ </td>
54
+ <td width="50%">
55
+
56
+ ### 🤖 MCP Integration
57
+ - Works with any MCP client
58
+ - Claude Desktop ready
59
+ - VS Code Copilot support
60
+ - n8n automation compatible
61
+ - Dual Transport (Stdio + HTTP/SSE)
62
+
63
+ </td>
64
+ </tr>
65
+ <tr>
66
+ <td width="50%">
67
+
68
+ ### ⚡ Performance
69
+ - Pre-compiled regex for logging
70
+ - Tool registry caching
71
+ - O(1) circular buffer history
72
+ - Request cancellation support
73
+
74
+ </td>
75
+ <td width="50%">
76
+
77
+ ### 🔒 Security & Reliability
78
+ - DNS rebinding protection
79
+ - Rate limiting (configurable)
80
+ - CORS origin validation
81
+ - Graceful shutdown handling
82
+
83
+ </td>
84
+ </tr>
85
+ </table>
86
+
87
+ ## Quick Start
88
+
89
+ ### Option 1: Docker (Recommended)
90
+
91
+ ```bash
92
+ # Pull the image
93
+ docker pull ghcr.io/mp-tool/komodo-mcp-server:latest
94
+
95
+ # Run with Docker Compose
96
+ cd examples/compose
97
+ cp .env.example .env
98
+ # Edit .env with your Komodo credentials
99
+ docker compose up -d
100
+ ```
101
+
102
+ ### Option 2: Claude Desktop
103
+
104
+ ```bash
105
+ # Copy config
106
+ cp examples/claude/claude_desktop_config.json \
107
+ ~/Library/Application\ Support/Claude/claude_desktop_config.json
108
+
109
+ # Edit credentials and restart Claude
110
+ ```
111
+
112
+ ### Option 3: VS Code
113
+
114
+ ```bash
115
+ # Global integration
116
+ mkdir -p ~/.vscode/mcp
117
+ cp examples/vscode/mcp.json ~/.vscode/mcp/
118
+
119
+ # Edit credentials and reload VS Code
120
+ ```
121
+
122
+ > **📚 Full setup guides:** See [`examples/`](examples/) for detailed instructions
123
+
124
+ ## Examples
125
+
126
+ ### 💬 With AI Assistants
127
+
128
+ Ask Claude, Copilot, or any MCP-compatible assistant:
129
+
130
+ ```
131
+ "List all my Komodo servers"
132
+ "Show containers on production-server"
133
+ "Start the nginx container"
134
+ "Deploy my-app to staging"
135
+ "Get stats for dev-server"
136
+ ```
137
+
138
+ ### 🔄 With n8n Automation
139
+
140
+ Comming soon: Pre-built n8n workflows for automated container health checks and deployment pipelines.
141
+
142
+ ## Documentation
143
+
144
+ ### Requirements
145
+ - **Komodo** v1.19.5 or later
146
+ - **Docker** (for containerized deployment)
147
+ - **Node.js 20+** (for local development)
148
+ - **Valid Komodo credentials** (API Key/Secret or username/password)
149
+
150
+ ### Integration Guides
151
+ - **[Claude Desktop](examples/claude/)** - Direct MCP integration
152
+ - **[VS Code](examples/vscode/)** - GitHub Copilot Chat support
153
+ - **[Docker Compose](examples/compose/)** - Standalone deployment
154
+ - **[Docker Desktop](examples/docker-desktop/)** - Native MCP beta feature
155
+
156
+ ### Observability (OpenTelemetry)
157
+
158
+ Enable distributed tracing and metrics with OpenTelemetry:
159
+
160
+ | Variable | Default | Description |
161
+ |----------|---------|-------------|
162
+ | `OTEL_ENABLED` | `false` | Enable OpenTelemetry |
163
+ | `OTEL_SERVICE_NAME` | `mcp-server` | Service name for traces |
164
+ | `OTEL_EXPORTER_OTLP_ENDPOINT` | - | OTLP endpoint (e.g., Jaeger, Grafana) |
165
+ | `OTEL_DEBUG` | `false` | Enable debug logging |
166
+
167
+
168
+ ## License
169
+ GPL-3.0 License - see [LICENSE](LICENSE) for details.
170
+
171
+ ## Contributing
172
+ Contributions are welcome! See our [Contributing Guide](CONTRIBUTING.md) for details.
173
+
174
+ - 🐛 [Report bugs](https://github.com/MP-Tool/komodo-mcp-server/issues)
175
+ - 💡 [Request features](https://github.com/MP-Tool/komodo-mcp-server/issues)
176
+ - 🔧 [Submit PRs](https://github.com/MP-Tool/komodo-mcp-server/pulls)
177
+
178
+ ### Development
179
+
180
+ ```bash
181
+ # Clone and install
182
+ git clone https://github.com/MP-Tool/komodo-mcp-server.git
183
+ cd komodo-mcp-server
184
+ npm install
185
+
186
+ # Build and run
187
+ npm run build
188
+ npm start
189
+ ```
190
+
191
+ ## Security
192
+ Report security vulnerabilities via GitHub's Private Vulnerability Reporting (see [SECURITY.md](SECURITY.md)).
193
+
194
+ **Best practices:**
195
+ - Never commit credentials
196
+ - Use environment variables
197
+ - Keep dependencies updated
198
+ - Run as non-root user (default in Docker)
199
+
200
+ ## Links
201
+
202
+ - **[Komodo GitHub](https://github.com/moghtech/komodo)** - Container orchestration platform
203
+ - **[Komodo Docs](https://komo.do/docs)** - Komodo documentation
204
+ - **[Model Context Protocol](https://modelcontextprotocol.io)** - MCP specification
205
+ - **[Examples & Integrations](examples/)** - Ready-to-use configurations
206
+
207
+ ---
208
+
209
+ <div align="center">
210
+
211
+ **Built with ❤️ for the Komodo community 🦎**
212
+ [Report Bug](https://github.com/MP-Tool/komodo-mcp-server/issues) • [Request Feature](https://github.com/MP-Tool/komodo-mcp-server/issues) • [Discussions](https://github.com/MP-Tool/komodo-mcp-server/discussions)
213
+
214
+ </div>
@@ -0,0 +1,20 @@
1
+ import type { KomodoClient } from './api/index.js';
2
+ import type { IToolProvider, IToolDefinition, IResourceProvider, IResourceDefinition, IResourceTemplateDefinition, IPromptProvider, IPromptDefinition } from './framework.js';
3
+ declare class ToolRegistryAdapter implements IToolProvider<KomodoClient> {
4
+ getTools(): ReadonlyArray<IToolDefinition<unknown, KomodoClient>>;
5
+ getAvailableTools(): ReadonlyArray<IToolDefinition<unknown, KomodoClient>>;
6
+ setConnectionState(connected: boolean): void;
7
+ }
8
+ export declare const toolRegistryAdapter: ToolRegistryAdapter;
9
+ declare class ResourceRegistryAdapter implements IResourceProvider {
10
+ getResources(): ReadonlyArray<IResourceDefinition>;
11
+ getTemplates(): ReadonlyArray<IResourceTemplateDefinition>;
12
+ hasResources(): boolean;
13
+ }
14
+ export declare const resourceRegistryAdapter: ResourceRegistryAdapter;
15
+ declare class PromptRegistryAdapter implements IPromptProvider {
16
+ getPrompts(): ReadonlyArray<IPromptDefinition>;
17
+ hasPrompts(): boolean;
18
+ }
19
+ export declare const promptRegistryAdapter: PromptRegistryAdapter;
20
+ export {};
@@ -0,0 +1,36 @@
1
+ import { toolRegistry } from './mcp/tools/index.js';
2
+ import { resourceRegistry } from './mcp/resources/index.js';
3
+ import { promptRegistry } from './mcp/prompts/index.js';
4
+ class ToolRegistryAdapter {
5
+ getTools() {
6
+ return toolRegistry.getTools();
7
+ }
8
+ getAvailableTools() {
9
+ return toolRegistry.getAvailableTools();
10
+ }
11
+ setConnectionState(connected) {
12
+ toolRegistry.setConnectionState(connected);
13
+ }
14
+ }
15
+ export const toolRegistryAdapter = new ToolRegistryAdapter();
16
+ class ResourceRegistryAdapter {
17
+ getResources() {
18
+ return resourceRegistry.getResources();
19
+ }
20
+ getTemplates() {
21
+ return resourceRegistry.getTemplates();
22
+ }
23
+ hasResources() {
24
+ return resourceRegistry.hasResources();
25
+ }
26
+ }
27
+ export const resourceRegistryAdapter = new ResourceRegistryAdapter();
28
+ class PromptRegistryAdapter {
29
+ getPrompts() {
30
+ return promptRegistry.getPrompts();
31
+ }
32
+ hasPrompts() {
33
+ return promptRegistry.hasPrompts();
34
+ }
35
+ }
36
+ export const promptRegistryAdapter = new PromptRegistryAdapter();
@@ -0,0 +1,43 @@
1
+ import { KomodoClient as CoreClient } from 'komodo_client';
2
+ export type OperationType = 'list' | 'get' | 'create' | 'update' | 'delete' | 'action' | 'logs';
3
+ export declare const OPERATION_TIMEOUTS: Record<OperationType, number>;
4
+ export interface ApiOperationOptions {
5
+ signal?: AbortSignal;
6
+ operationType?: OperationType;
7
+ timeout?: number;
8
+ }
9
+ export declare const RETRYABLE_NETWORK_ERROR_CODES: readonly ["ECONNREFUSED", "ETIMEDOUT", "ECONNRESET", "ENOTFOUND", "ENETUNREACH", "EHOSTUNREACH", "EPIPE", "EAI_AGAIN"];
10
+ export interface ErrorWithCode extends Error {
11
+ code?: string;
12
+ }
13
+ export interface ErrorWithStatus extends Error {
14
+ status?: number;
15
+ response?: {
16
+ status?: number;
17
+ };
18
+ }
19
+ export declare function isErrorWithCode(error: unknown): error is ErrorWithCode;
20
+ export declare function isErrorWithStatus(error: unknown): error is ErrorWithStatus;
21
+ export declare function getErrorStatusCode(error: unknown): number | undefined;
22
+ export interface RetryConfig {
23
+ maxRetries: number;
24
+ baseDelayMs: number;
25
+ exponentialBackoff: boolean;
26
+ retryableStatusCodes: number[];
27
+ jitterFactor: number;
28
+ }
29
+ export declare const DEFAULT_RETRY_CONFIG: RetryConfig;
30
+ type ValidationFunction = (value: string) => void;
31
+ export declare abstract class BaseResource {
32
+ protected client: ReturnType<typeof CoreClient>;
33
+ protected logger: import("../framework.js").Logger;
34
+ constructor(client: ReturnType<typeof CoreClient>);
35
+ protected checkAborted(signal?: AbortSignal): void;
36
+ protected withValidation(value: string, validator: ValidationFunction, options?: ApiOperationOptions): void;
37
+ protected getTimeout(options?: ApiOperationOptions, defaultType?: OperationType): number;
38
+ protected withRetry<T>(operation: () => Promise<T>, config?: Partial<RetryConfig>, operationName?: string): Promise<T>;
39
+ private isRetryableError;
40
+ private calculateRetryDelay;
41
+ private sleep;
42
+ }
43
+ export {};
@@ -0,0 +1,108 @@
1
+ import { logger as baseLogger } from '../framework.js';
2
+ export const OPERATION_TIMEOUTS = {
3
+ list: 10_000,
4
+ get: 10_000,
5
+ create: 30_000,
6
+ update: 30_000,
7
+ delete: 30_000,
8
+ action: 300_000,
9
+ logs: 60_000,
10
+ };
11
+ export const RETRYABLE_NETWORK_ERROR_CODES = [
12
+ 'ECONNREFUSED',
13
+ 'ETIMEDOUT',
14
+ 'ECONNRESET',
15
+ 'ENOTFOUND',
16
+ 'ENETUNREACH',
17
+ 'EHOSTUNREACH',
18
+ 'EPIPE',
19
+ 'EAI_AGAIN',
20
+ ];
21
+ export function isErrorWithCode(error) {
22
+ return error instanceof Error && 'code' in error && typeof error.code === 'string';
23
+ }
24
+ export function isErrorWithStatus(error) {
25
+ if (!(error instanceof Error))
26
+ return false;
27
+ const err = error;
28
+ return typeof err.status === 'number' || typeof err.response?.status === 'number';
29
+ }
30
+ export function getErrorStatusCode(error) {
31
+ if (!isErrorWithStatus(error))
32
+ return undefined;
33
+ return error.status ?? error.response?.status;
34
+ }
35
+ export const DEFAULT_RETRY_CONFIG = {
36
+ maxRetries: 3,
37
+ baseDelayMs: 1000,
38
+ exponentialBackoff: true,
39
+ retryableStatusCodes: [408, 429, 500, 502, 503, 504],
40
+ jitterFactor: 0.2,
41
+ };
42
+ export class BaseResource {
43
+ client;
44
+ logger;
45
+ constructor(client) {
46
+ this.client = client;
47
+ this.logger = baseLogger.child({ component: this.constructor.name });
48
+ }
49
+ checkAborted(signal) {
50
+ if (signal?.aborted) {
51
+ const error = new Error('Operation cancelled');
52
+ error.name = 'AbortError';
53
+ throw error;
54
+ }
55
+ }
56
+ withValidation(value, validator, options) {
57
+ validator(value);
58
+ this.checkAborted(options?.signal);
59
+ }
60
+ getTimeout(options, defaultType = 'get') {
61
+ if (options?.timeout) {
62
+ return options.timeout;
63
+ }
64
+ return OPERATION_TIMEOUTS[options?.operationType ?? defaultType];
65
+ }
66
+ async withRetry(operation, config = {}, operationName) {
67
+ const retryConfig = { ...DEFAULT_RETRY_CONFIG, ...config };
68
+ let lastError;
69
+ for (let attempt = 0; attempt <= retryConfig.maxRetries; attempt++) {
70
+ try {
71
+ return await operation();
72
+ }
73
+ catch (error) {
74
+ lastError = error;
75
+ const isRetryable = this.isRetryableError(error, retryConfig.retryableStatusCodes);
76
+ if (!isRetryable || attempt >= retryConfig.maxRetries) {
77
+ throw error;
78
+ }
79
+ const delay = this.calculateRetryDelay(attempt, retryConfig);
80
+ this.logger.warn(`${operationName ?? 'Operation'} failed (attempt ${attempt + 1}/${retryConfig.maxRetries + 1}), ` +
81
+ `retrying in ${delay}ms: ${error.message}`);
82
+ await this.sleep(delay);
83
+ }
84
+ }
85
+ throw lastError ?? new Error('Retry failed');
86
+ }
87
+ isRetryableError(error, retryableStatusCodes) {
88
+ if (isErrorWithCode(error)) {
89
+ const errorCode = error.code;
90
+ if (errorCode && RETRYABLE_NETWORK_ERROR_CODES.includes(errorCode)) {
91
+ return true;
92
+ }
93
+ }
94
+ const statusCode = getErrorStatusCode(error);
95
+ if (statusCode !== undefined && retryableStatusCodes.includes(statusCode)) {
96
+ return true;
97
+ }
98
+ return false;
99
+ }
100
+ calculateRetryDelay(attempt, config) {
101
+ const baseDelay = config.exponentialBackoff ? config.baseDelayMs * Math.pow(2, attempt) : config.baseDelayMs;
102
+ const jitter = baseDelay * config.jitterFactor * Math.random();
103
+ return Math.floor(baseDelay + jitter);
104
+ }
105
+ sleep(ms) {
106
+ return new Promise((resolve) => setTimeout(resolve, ms));
107
+ }
108
+ }
@@ -0,0 +1,17 @@
1
+ import { type IApiClient } from '../framework.js';
2
+ import { HealthCheckResult } from './types.js';
3
+ import { ServerResource, ContainerResource, StackResource, DeploymentResource } from './resources/index.js';
4
+ export declare class KomodoClient implements IApiClient {
5
+ readonly clientType: "komodo";
6
+ private client;
7
+ private baseUrl;
8
+ readonly servers: ServerResource;
9
+ readonly containers: ContainerResource;
10
+ readonly stacks: StackResource;
11
+ readonly deployments: DeploymentResource;
12
+ private constructor();
13
+ getBaseUrl(): string;
14
+ static login(baseUrl: string, username: string, password: string, timeoutMs?: number): Promise<KomodoClient>;
15
+ static connectWithApiKey(baseUrl: string, key: string, secret: string): KomodoClient;
16
+ healthCheck(): Promise<HealthCheckResult>;
17
+ }