@hasna/connectors 0.9.1 → 0.9.2

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 (659) hide show
  1. package/bin/index.js +260 -1
  2. package/bin/mcp.js +260 -1
  3. package/bin/serve.js +259 -0
  4. package/connectors/connect-datasoap/.env.example +11 -0
  5. package/connectors/connect-datasoap/CLAUDE.md +272 -0
  6. package/connectors/connect-datasoap/README.md +193 -0
  7. package/connectors/connect-datasoap/package.json +50 -0
  8. package/connectors/connect-datasoap/scripts/release.ts +179 -0
  9. package/connectors/connect-datasoap/src/api/client.ts +213 -0
  10. package/connectors/connect-datasoap/src/api/example.ts +48 -0
  11. package/connectors/connect-datasoap/src/api/index.ts +51 -0
  12. package/connectors/connect-datasoap/src/cli/index.ts +254 -0
  13. package/connectors/connect-datasoap/src/index.ts +103 -0
  14. package/connectors/connect-datasoap/src/types/index.ts +237 -0
  15. package/connectors/connect-datasoap/src/utils/auth.ts +274 -0
  16. package/connectors/connect-datasoap/src/utils/bulk.ts +212 -0
  17. package/connectors/connect-datasoap/src/utils/config.ts +326 -0
  18. package/connectors/connect-datasoap/src/utils/output.ts +175 -0
  19. package/connectors/connect-datasoap/src/utils/settings.ts +114 -0
  20. package/connectors/connect-datasoap/src/utils/storage.ts +198 -0
  21. package/connectors/connect-datasoap/tsconfig.json +16 -0
  22. package/connectors/connect-datumbox/.env.example +11 -0
  23. package/connectors/connect-datumbox/CLAUDE.md +272 -0
  24. package/connectors/connect-datumbox/README.md +193 -0
  25. package/connectors/connect-datumbox/package.json +51 -0
  26. package/connectors/connect-datumbox/scripts/release.ts +179 -0
  27. package/connectors/connect-datumbox/src/api/client.ts +213 -0
  28. package/connectors/connect-datumbox/src/api/example.ts +48 -0
  29. package/connectors/connect-datumbox/src/api/index.ts +51 -0
  30. package/connectors/connect-datumbox/src/cli/index.ts +254 -0
  31. package/connectors/connect-datumbox/src/index.ts +103 -0
  32. package/connectors/connect-datumbox/src/types/index.ts +237 -0
  33. package/connectors/connect-datumbox/src/utils/auth.ts +274 -0
  34. package/connectors/connect-datumbox/src/utils/bulk.ts +212 -0
  35. package/connectors/connect-datumbox/src/utils/config.ts +326 -0
  36. package/connectors/connect-datumbox/src/utils/output.ts +175 -0
  37. package/connectors/connect-datumbox/src/utils/settings.ts +114 -0
  38. package/connectors/connect-datumbox/src/utils/storage.ts +198 -0
  39. package/connectors/connect-datumbox/tsconfig.json +16 -0
  40. package/connectors/connect-dayschedule/.env.example +11 -0
  41. package/connectors/connect-dayschedule/CLAUDE.md +272 -0
  42. package/connectors/connect-dayschedule/README.md +193 -0
  43. package/connectors/connect-dayschedule/package.json +51 -0
  44. package/connectors/connect-dayschedule/scripts/release.ts +179 -0
  45. package/connectors/connect-dayschedule/src/api/client.ts +213 -0
  46. package/connectors/connect-dayschedule/src/api/example.ts +48 -0
  47. package/connectors/connect-dayschedule/src/api/index.ts +51 -0
  48. package/connectors/connect-dayschedule/src/cli/index.ts +254 -0
  49. package/connectors/connect-dayschedule/src/index.ts +103 -0
  50. package/connectors/connect-dayschedule/src/types/index.ts +237 -0
  51. package/connectors/connect-dayschedule/src/utils/auth.ts +274 -0
  52. package/connectors/connect-dayschedule/src/utils/bulk.ts +212 -0
  53. package/connectors/connect-dayschedule/src/utils/config.ts +326 -0
  54. package/connectors/connect-dayschedule/src/utils/output.ts +175 -0
  55. package/connectors/connect-dayschedule/src/utils/settings.ts +114 -0
  56. package/connectors/connect-dayschedule/src/utils/storage.ts +198 -0
  57. package/connectors/connect-dayschedule/tsconfig.json +16 -0
  58. package/connectors/connect-deepinfra/.env.example +11 -0
  59. package/connectors/connect-deepinfra/CLAUDE.md +128 -0
  60. package/connectors/connect-deepinfra/README.md +193 -0
  61. package/connectors/connect-deepinfra/package.json +50 -0
  62. package/connectors/connect-deepinfra/src/api/client.ts +64 -0
  63. package/connectors/connect-deepinfra/src/api/index.ts +32 -0
  64. package/connectors/connect-deepinfra/src/cli/index.ts +244 -0
  65. package/connectors/connect-deepinfra/src/index.ts +19 -0
  66. package/connectors/connect-deepinfra/src/types/index.ts +65 -0
  67. package/connectors/connect-deepinfra/src/utils/config.ts +103 -0
  68. package/connectors/connect-deepinfra/src/utils/output.ts +119 -0
  69. package/connectors/connect-deepinfra/tsconfig.json +16 -0
  70. package/connectors/connect-deepl/.env.example +11 -0
  71. package/connectors/connect-deepl/CLAUDE.md +272 -0
  72. package/connectors/connect-deepl/README.md +193 -0
  73. package/connectors/connect-deepl/package.json +51 -0
  74. package/connectors/connect-deepl/scripts/release.ts +179 -0
  75. package/connectors/connect-deepl/src/api/client.ts +213 -0
  76. package/connectors/connect-deepl/src/api/example.ts +48 -0
  77. package/connectors/connect-deepl/src/api/index.ts +51 -0
  78. package/connectors/connect-deepl/src/cli/index.ts +254 -0
  79. package/connectors/connect-deepl/src/index.ts +103 -0
  80. package/connectors/connect-deepl/src/types/index.ts +237 -0
  81. package/connectors/connect-deepl/src/utils/auth.ts +274 -0
  82. package/connectors/connect-deepl/src/utils/bulk.ts +212 -0
  83. package/connectors/connect-deepl/src/utils/config.ts +326 -0
  84. package/connectors/connect-deepl/src/utils/output.ts +175 -0
  85. package/connectors/connect-deepl/src/utils/settings.ts +114 -0
  86. package/connectors/connect-deepl/src/utils/storage.ts +198 -0
  87. package/connectors/connect-deepl/tsconfig.json +16 -0
  88. package/connectors/connect-demio/.env.example +11 -0
  89. package/connectors/connect-demio/CLAUDE.md +272 -0
  90. package/connectors/connect-demio/README.md +193 -0
  91. package/connectors/connect-demio/package.json +51 -0
  92. package/connectors/connect-demio/scripts/release.ts +179 -0
  93. package/connectors/connect-demio/src/api/client.ts +213 -0
  94. package/connectors/connect-demio/src/api/example.ts +48 -0
  95. package/connectors/connect-demio/src/api/index.ts +51 -0
  96. package/connectors/connect-demio/src/cli/index.ts +254 -0
  97. package/connectors/connect-demio/src/index.ts +103 -0
  98. package/connectors/connect-demio/src/types/index.ts +237 -0
  99. package/connectors/connect-demio/src/utils/auth.ts +274 -0
  100. package/connectors/connect-demio/src/utils/bulk.ts +212 -0
  101. package/connectors/connect-demio/src/utils/config.ts +326 -0
  102. package/connectors/connect-demio/src/utils/output.ts +175 -0
  103. package/connectors/connect-demio/src/utils/settings.ts +114 -0
  104. package/connectors/connect-demio/src/utils/storage.ts +198 -0
  105. package/connectors/connect-demio/tsconfig.json +16 -0
  106. package/connectors/connect-descript/.env.example +11 -0
  107. package/connectors/connect-descript/CLAUDE.md +272 -0
  108. package/connectors/connect-descript/README.md +193 -0
  109. package/connectors/connect-descript/package.json +52 -0
  110. package/connectors/connect-descript/scripts/release.ts +179 -0
  111. package/connectors/connect-descript/src/api/client.ts +213 -0
  112. package/connectors/connect-descript/src/api/example.ts +48 -0
  113. package/connectors/connect-descript/src/api/index.ts +51 -0
  114. package/connectors/connect-descript/src/cli/index.ts +254 -0
  115. package/connectors/connect-descript/src/index.ts +103 -0
  116. package/connectors/connect-descript/src/types/index.ts +237 -0
  117. package/connectors/connect-descript/src/utils/auth.ts +274 -0
  118. package/connectors/connect-descript/src/utils/bulk.ts +212 -0
  119. package/connectors/connect-descript/src/utils/config.ts +326 -0
  120. package/connectors/connect-descript/src/utils/output.ts +175 -0
  121. package/connectors/connect-descript/src/utils/settings.ts +114 -0
  122. package/connectors/connect-descript/src/utils/storage.ts +198 -0
  123. package/connectors/connect-descript/tsconfig.json +16 -0
  124. package/connectors/connect-detrack/.env.example +11 -0
  125. package/connectors/connect-detrack/CLAUDE.md +272 -0
  126. package/connectors/connect-detrack/README.md +193 -0
  127. package/connectors/connect-detrack/package.json +52 -0
  128. package/connectors/connect-detrack/scripts/release.ts +179 -0
  129. package/connectors/connect-detrack/src/api/client.ts +213 -0
  130. package/connectors/connect-detrack/src/api/example.ts +48 -0
  131. package/connectors/connect-detrack/src/api/index.ts +51 -0
  132. package/connectors/connect-detrack/src/cli/index.ts +254 -0
  133. package/connectors/connect-detrack/src/index.ts +103 -0
  134. package/connectors/connect-detrack/src/types/index.ts +237 -0
  135. package/connectors/connect-detrack/src/utils/auth.ts +274 -0
  136. package/connectors/connect-detrack/src/utils/bulk.ts +212 -0
  137. package/connectors/connect-detrack/src/utils/config.ts +326 -0
  138. package/connectors/connect-detrack/src/utils/output.ts +175 -0
  139. package/connectors/connect-detrack/src/utils/settings.ts +114 -0
  140. package/connectors/connect-detrack/src/utils/storage.ts +198 -0
  141. package/connectors/connect-detrack/tsconfig.json +16 -0
  142. package/connectors/connect-devcycle/.env.example +11 -0
  143. package/connectors/connect-devcycle/CLAUDE.md +272 -0
  144. package/connectors/connect-devcycle/README.md +193 -0
  145. package/connectors/connect-devcycle/package.json +50 -0
  146. package/connectors/connect-devcycle/scripts/release.ts +179 -0
  147. package/connectors/connect-devcycle/src/api/client.ts +213 -0
  148. package/connectors/connect-devcycle/src/api/example.ts +48 -0
  149. package/connectors/connect-devcycle/src/api/index.ts +51 -0
  150. package/connectors/connect-devcycle/src/cli/index.ts +254 -0
  151. package/connectors/connect-devcycle/src/index.ts +103 -0
  152. package/connectors/connect-devcycle/src/types/index.ts +237 -0
  153. package/connectors/connect-devcycle/src/utils/auth.ts +274 -0
  154. package/connectors/connect-devcycle/src/utils/bulk.ts +212 -0
  155. package/connectors/connect-devcycle/src/utils/config.ts +326 -0
  156. package/connectors/connect-devcycle/src/utils/output.ts +175 -0
  157. package/connectors/connect-devcycle/src/utils/settings.ts +114 -0
  158. package/connectors/connect-devcycle/src/utils/storage.ts +198 -0
  159. package/connectors/connect-devcycle/tsconfig.json +16 -0
  160. package/connectors/connect-dhl/.env.example +11 -0
  161. package/connectors/connect-dhl/CLAUDE.md +272 -0
  162. package/connectors/connect-dhl/README.md +193 -0
  163. package/connectors/connect-dhl/package.json +51 -0
  164. package/connectors/connect-dhl/scripts/release.ts +179 -0
  165. package/connectors/connect-dhl/src/api/client.ts +213 -0
  166. package/connectors/connect-dhl/src/api/example.ts +48 -0
  167. package/connectors/connect-dhl/src/api/index.ts +51 -0
  168. package/connectors/connect-dhl/src/cli/index.ts +254 -0
  169. package/connectors/connect-dhl/src/index.ts +103 -0
  170. package/connectors/connect-dhl/src/types/index.ts +237 -0
  171. package/connectors/connect-dhl/src/utils/auth.ts +274 -0
  172. package/connectors/connect-dhl/src/utils/bulk.ts +212 -0
  173. package/connectors/connect-dhl/src/utils/config.ts +326 -0
  174. package/connectors/connect-dhl/src/utils/output.ts +175 -0
  175. package/connectors/connect-dhl/src/utils/settings.ts +114 -0
  176. package/connectors/connect-dhl/src/utils/storage.ts +198 -0
  177. package/connectors/connect-dhl/tsconfig.json +16 -0
  178. package/connectors/connect-dialzara/.env.example +11 -0
  179. package/connectors/connect-dialzara/CLAUDE.md +272 -0
  180. package/connectors/connect-dialzara/README.md +96 -0
  181. package/connectors/connect-dialzara/package.json +50 -0
  182. package/connectors/connect-dialzara/scripts/release.ts +179 -0
  183. package/connectors/connect-dialzara/src/api/client.ts +213 -0
  184. package/connectors/connect-dialzara/src/api/example.ts +48 -0
  185. package/connectors/connect-dialzara/src/api/index.ts +51 -0
  186. package/connectors/connect-dialzara/src/cli/index.ts +254 -0
  187. package/connectors/connect-dialzara/src/index.ts +103 -0
  188. package/connectors/connect-dialzara/src/types/index.ts +237 -0
  189. package/connectors/connect-dialzara/src/utils/auth.ts +274 -0
  190. package/connectors/connect-dialzara/src/utils/bulk.ts +212 -0
  191. package/connectors/connect-dialzara/src/utils/config.ts +326 -0
  192. package/connectors/connect-dialzara/src/utils/output.ts +175 -0
  193. package/connectors/connect-dialzara/src/utils/settings.ts +114 -0
  194. package/connectors/connect-dialzara/src/utils/storage.ts +198 -0
  195. package/connectors/connect-dialzara/tsconfig.json +16 -0
  196. package/connectors/connect-diddoai/.env.example +11 -0
  197. package/connectors/connect-diddoai/CLAUDE.md +272 -0
  198. package/connectors/connect-diddoai/README.md +96 -0
  199. package/connectors/connect-diddoai/package.json +52 -0
  200. package/connectors/connect-diddoai/scripts/release.ts +179 -0
  201. package/connectors/connect-diddoai/src/api/client.ts +213 -0
  202. package/connectors/connect-diddoai/src/api/example.ts +48 -0
  203. package/connectors/connect-diddoai/src/api/index.ts +51 -0
  204. package/connectors/connect-diddoai/src/cli/index.ts +254 -0
  205. package/connectors/connect-diddoai/src/index.ts +103 -0
  206. package/connectors/connect-diddoai/src/types/index.ts +237 -0
  207. package/connectors/connect-diddoai/src/utils/auth.ts +274 -0
  208. package/connectors/connect-diddoai/src/utils/bulk.ts +212 -0
  209. package/connectors/connect-diddoai/src/utils/config.ts +326 -0
  210. package/connectors/connect-diddoai/src/utils/output.ts +175 -0
  211. package/connectors/connect-diddoai/src/utils/settings.ts +114 -0
  212. package/connectors/connect-diddoai/src/utils/storage.ts +198 -0
  213. package/connectors/connect-diddoai/tsconfig.json +16 -0
  214. package/connectors/connect-diffy/.env.example +11 -0
  215. package/connectors/connect-diffy/CLAUDE.md +272 -0
  216. package/connectors/connect-diffy/README.md +96 -0
  217. package/connectors/connect-diffy/package.json +52 -0
  218. package/connectors/connect-diffy/scripts/release.ts +179 -0
  219. package/connectors/connect-diffy/src/api/client.ts +213 -0
  220. package/connectors/connect-diffy/src/api/example.ts +48 -0
  221. package/connectors/connect-diffy/src/api/index.ts +51 -0
  222. package/connectors/connect-diffy/src/cli/index.ts +254 -0
  223. package/connectors/connect-diffy/src/index.ts +103 -0
  224. package/connectors/connect-diffy/src/types/index.ts +237 -0
  225. package/connectors/connect-diffy/src/utils/auth.ts +274 -0
  226. package/connectors/connect-diffy/src/utils/bulk.ts +212 -0
  227. package/connectors/connect-diffy/src/utils/config.ts +326 -0
  228. package/connectors/connect-diffy/src/utils/output.ts +175 -0
  229. package/connectors/connect-diffy/src/utils/settings.ts +114 -0
  230. package/connectors/connect-diffy/src/utils/storage.ts +198 -0
  231. package/connectors/connect-diffy/tsconfig.json +16 -0
  232. package/connectors/connect-digicert/.env.example +11 -0
  233. package/connectors/connect-digicert/CLAUDE.md +272 -0
  234. package/connectors/connect-digicert/README.md +96 -0
  235. package/connectors/connect-digicert/package.json +53 -0
  236. package/connectors/connect-digicert/scripts/release.ts +179 -0
  237. package/connectors/connect-digicert/src/api/client.ts +213 -0
  238. package/connectors/connect-digicert/src/api/example.ts +48 -0
  239. package/connectors/connect-digicert/src/api/index.ts +51 -0
  240. package/connectors/connect-digicert/src/cli/index.ts +254 -0
  241. package/connectors/connect-digicert/src/index.ts +103 -0
  242. package/connectors/connect-digicert/src/types/index.ts +237 -0
  243. package/connectors/connect-digicert/src/utils/auth.ts +274 -0
  244. package/connectors/connect-digicert/src/utils/bulk.ts +212 -0
  245. package/connectors/connect-digicert/src/utils/config.ts +326 -0
  246. package/connectors/connect-digicert/src/utils/output.ts +175 -0
  247. package/connectors/connect-digicert/src/utils/settings.ts +114 -0
  248. package/connectors/connect-digicert/src/utils/storage.ts +198 -0
  249. package/connectors/connect-digicert/tsconfig.json +16 -0
  250. package/connectors/connect-digitalocean/.env.example +11 -0
  251. package/connectors/connect-digitalocean/CLAUDE.md +197 -0
  252. package/connectors/connect-digitalocean/README.md +146 -0
  253. package/connectors/connect-digitalocean/package.json +53 -0
  254. package/connectors/connect-digitalocean/src/api/client.ts +132 -0
  255. package/connectors/connect-digitalocean/src/api/index.ts +663 -0
  256. package/connectors/connect-digitalocean/src/cli/index.ts +1264 -0
  257. package/connectors/connect-digitalocean/src/index.ts +22 -0
  258. package/connectors/connect-digitalocean/src/types/index.ts +575 -0
  259. package/connectors/connect-digitalocean/src/utils/config.ts +171 -0
  260. package/connectors/connect-digitalocean/src/utils/output.ts +119 -0
  261. package/connectors/connect-digitalocean/tsconfig.json +16 -0
  262. package/connectors/connect-discourse/.env.example +11 -0
  263. package/connectors/connect-discourse/CLAUDE.md +272 -0
  264. package/connectors/connect-discourse/README.md +96 -0
  265. package/connectors/connect-discourse/package.json +52 -0
  266. package/connectors/connect-discourse/scripts/release.ts +179 -0
  267. package/connectors/connect-discourse/src/api/client.ts +213 -0
  268. package/connectors/connect-discourse/src/api/example.ts +48 -0
  269. package/connectors/connect-discourse/src/api/index.ts +51 -0
  270. package/connectors/connect-discourse/src/cli/index.ts +254 -0
  271. package/connectors/connect-discourse/src/index.ts +103 -0
  272. package/connectors/connect-discourse/src/types/index.ts +237 -0
  273. package/connectors/connect-discourse/src/utils/auth.ts +274 -0
  274. package/connectors/connect-discourse/src/utils/bulk.ts +212 -0
  275. package/connectors/connect-discourse/src/utils/config.ts +326 -0
  276. package/connectors/connect-discourse/src/utils/output.ts +175 -0
  277. package/connectors/connect-discourse/src/utils/settings.ts +114 -0
  278. package/connectors/connect-discourse/src/utils/storage.ts +198 -0
  279. package/connectors/connect-discourse/tsconfig.json +16 -0
  280. package/connectors/connect-disqus/.env.example +11 -0
  281. package/connectors/connect-disqus/CLAUDE.md +272 -0
  282. package/connectors/connect-disqus/README.md +96 -0
  283. package/connectors/connect-disqus/package.json +52 -0
  284. package/connectors/connect-disqus/scripts/release.ts +179 -0
  285. package/connectors/connect-disqus/src/api/client.ts +213 -0
  286. package/connectors/connect-disqus/src/api/example.ts +48 -0
  287. package/connectors/connect-disqus/src/api/index.ts +51 -0
  288. package/connectors/connect-disqus/src/cli/index.ts +254 -0
  289. package/connectors/connect-disqus/src/index.ts +103 -0
  290. package/connectors/connect-disqus/src/types/index.ts +237 -0
  291. package/connectors/connect-disqus/src/utils/auth.ts +274 -0
  292. package/connectors/connect-disqus/src/utils/bulk.ts +212 -0
  293. package/connectors/connect-disqus/src/utils/config.ts +326 -0
  294. package/connectors/connect-disqus/src/utils/output.ts +175 -0
  295. package/connectors/connect-disqus/src/utils/settings.ts +114 -0
  296. package/connectors/connect-disqus/src/utils/storage.ts +198 -0
  297. package/connectors/connect-disqus/tsconfig.json +16 -0
  298. package/connectors/connect-dockcerts/.env.example +11 -0
  299. package/connectors/connect-dockcerts/CLAUDE.md +272 -0
  300. package/connectors/connect-dockcerts/README.md +96 -0
  301. package/connectors/connect-dockcerts/package.json +52 -0
  302. package/connectors/connect-dockcerts/scripts/release.ts +179 -0
  303. package/connectors/connect-dockcerts/src/api/client.ts +213 -0
  304. package/connectors/connect-dockcerts/src/api/example.ts +48 -0
  305. package/connectors/connect-dockcerts/src/api/index.ts +51 -0
  306. package/connectors/connect-dockcerts/src/cli/index.ts +254 -0
  307. package/connectors/connect-dockcerts/src/index.ts +103 -0
  308. package/connectors/connect-dockcerts/src/types/index.ts +237 -0
  309. package/connectors/connect-dockcerts/src/utils/auth.ts +274 -0
  310. package/connectors/connect-dockcerts/src/utils/bulk.ts +212 -0
  311. package/connectors/connect-dockcerts/src/utils/config.ts +326 -0
  312. package/connectors/connect-dockcerts/src/utils/output.ts +175 -0
  313. package/connectors/connect-dockcerts/src/utils/settings.ts +114 -0
  314. package/connectors/connect-dockcerts/src/utils/storage.ts +198 -0
  315. package/connectors/connect-dockcerts/tsconfig.json +16 -0
  316. package/connectors/connect-docparser/.env.example +11 -0
  317. package/connectors/connect-docparser/CLAUDE.md +272 -0
  318. package/connectors/connect-docparser/README.md +96 -0
  319. package/connectors/connect-docparser/package.json +53 -0
  320. package/connectors/connect-docparser/scripts/release.ts +179 -0
  321. package/connectors/connect-docparser/src/api/client.ts +213 -0
  322. package/connectors/connect-docparser/src/api/example.ts +48 -0
  323. package/connectors/connect-docparser/src/api/index.ts +51 -0
  324. package/connectors/connect-docparser/src/cli/index.ts +254 -0
  325. package/connectors/connect-docparser/src/index.ts +103 -0
  326. package/connectors/connect-docparser/src/types/index.ts +237 -0
  327. package/connectors/connect-docparser/src/utils/auth.ts +274 -0
  328. package/connectors/connect-docparser/src/utils/bulk.ts +212 -0
  329. package/connectors/connect-docparser/src/utils/config.ts +326 -0
  330. package/connectors/connect-docparser/src/utils/output.ts +175 -0
  331. package/connectors/connect-docparser/src/utils/settings.ts +114 -0
  332. package/connectors/connect-docparser/src/utils/storage.ts +198 -0
  333. package/connectors/connect-docparser/tsconfig.json +16 -0
  334. package/connectors/connect-docsbotai/.env.example +11 -0
  335. package/connectors/connect-docsbotai/CLAUDE.md +272 -0
  336. package/connectors/connect-docsbotai/README.md +96 -0
  337. package/connectors/connect-docsbotai/package.json +53 -0
  338. package/connectors/connect-docsbotai/scripts/release.ts +179 -0
  339. package/connectors/connect-docsbotai/src/api/client.ts +213 -0
  340. package/connectors/connect-docsbotai/src/api/example.ts +48 -0
  341. package/connectors/connect-docsbotai/src/api/index.ts +51 -0
  342. package/connectors/connect-docsbotai/src/cli/index.ts +254 -0
  343. package/connectors/connect-docsbotai/src/index.ts +103 -0
  344. package/connectors/connect-docsbotai/src/types/index.ts +237 -0
  345. package/connectors/connect-docsbotai/src/utils/auth.ts +274 -0
  346. package/connectors/connect-docsbotai/src/utils/bulk.ts +212 -0
  347. package/connectors/connect-docsbotai/src/utils/config.ts +326 -0
  348. package/connectors/connect-docsbotai/src/utils/output.ts +175 -0
  349. package/connectors/connect-docsbotai/src/utils/settings.ts +114 -0
  350. package/connectors/connect-docsbotai/src/utils/storage.ts +198 -0
  351. package/connectors/connect-docsbotai/tsconfig.json +16 -0
  352. package/connectors/connect-docupilot/.env.example +11 -0
  353. package/connectors/connect-docupilot/CLAUDE.md +272 -0
  354. package/connectors/connect-docupilot/README.md +193 -0
  355. package/connectors/connect-docupilot/package.json +51 -0
  356. package/connectors/connect-docupilot/scripts/release.ts +179 -0
  357. package/connectors/connect-docupilot/src/api/client.ts +213 -0
  358. package/connectors/connect-docupilot/src/api/example.ts +48 -0
  359. package/connectors/connect-docupilot/src/api/index.ts +51 -0
  360. package/connectors/connect-docupilot/src/cli/index.ts +254 -0
  361. package/connectors/connect-docupilot/src/index.ts +103 -0
  362. package/connectors/connect-docupilot/src/types/index.ts +237 -0
  363. package/connectors/connect-docupilot/src/utils/auth.ts +274 -0
  364. package/connectors/connect-docupilot/src/utils/bulk.ts +212 -0
  365. package/connectors/connect-docupilot/src/utils/config.ts +326 -0
  366. package/connectors/connect-docupilot/src/utils/output.ts +175 -0
  367. package/connectors/connect-docupilot/src/utils/settings.ts +114 -0
  368. package/connectors/connect-docupilot/src/utils/storage.ts +198 -0
  369. package/connectors/connect-docupilot/tsconfig.json +16 -0
  370. package/connectors/connect-docuwriter/.env.example +11 -0
  371. package/connectors/connect-docuwriter/CLAUDE.md +272 -0
  372. package/connectors/connect-docuwriter/README.md +193 -0
  373. package/connectors/connect-docuwriter/package.json +51 -0
  374. package/connectors/connect-docuwriter/scripts/release.ts +179 -0
  375. package/connectors/connect-docuwriter/src/api/client.ts +213 -0
  376. package/connectors/connect-docuwriter/src/api/example.ts +48 -0
  377. package/connectors/connect-docuwriter/src/api/index.ts +51 -0
  378. package/connectors/connect-docuwriter/src/cli/index.ts +254 -0
  379. package/connectors/connect-docuwriter/src/index.ts +103 -0
  380. package/connectors/connect-docuwriter/src/types/index.ts +237 -0
  381. package/connectors/connect-docuwriter/src/utils/auth.ts +274 -0
  382. package/connectors/connect-docuwriter/src/utils/bulk.ts +212 -0
  383. package/connectors/connect-docuwriter/src/utils/config.ts +326 -0
  384. package/connectors/connect-docuwriter/src/utils/output.ts +175 -0
  385. package/connectors/connect-docuwriter/src/utils/settings.ts +114 -0
  386. package/connectors/connect-docuwriter/src/utils/storage.ts +198 -0
  387. package/connectors/connect-docuwriter/tsconfig.json +16 -0
  388. package/connectors/connect-dokan/.env.example +11 -0
  389. package/connectors/connect-dokan/CLAUDE.md +272 -0
  390. package/connectors/connect-dokan/README.md +193 -0
  391. package/connectors/connect-dokan/package.json +51 -0
  392. package/connectors/connect-dokan/scripts/release.ts +179 -0
  393. package/connectors/connect-dokan/src/api/client.ts +213 -0
  394. package/connectors/connect-dokan/src/api/example.ts +48 -0
  395. package/connectors/connect-dokan/src/api/index.ts +51 -0
  396. package/connectors/connect-dokan/src/cli/index.ts +254 -0
  397. package/connectors/connect-dokan/src/index.ts +103 -0
  398. package/connectors/connect-dokan/src/types/index.ts +237 -0
  399. package/connectors/connect-dokan/src/utils/auth.ts +274 -0
  400. package/connectors/connect-dokan/src/utils/bulk.ts +212 -0
  401. package/connectors/connect-dokan/src/utils/config.ts +326 -0
  402. package/connectors/connect-dokan/src/utils/output.ts +175 -0
  403. package/connectors/connect-dokan/src/utils/settings.ts +114 -0
  404. package/connectors/connect-dokan/src/utils/storage.ts +198 -0
  405. package/connectors/connect-dokan/tsconfig.json +16 -0
  406. package/connectors/connect-domo/.env.example +11 -0
  407. package/connectors/connect-domo/CLAUDE.md +272 -0
  408. package/connectors/connect-domo/README.md +193 -0
  409. package/connectors/connect-domo/package.json +51 -0
  410. package/connectors/connect-domo/scripts/release.ts +179 -0
  411. package/connectors/connect-domo/src/api/client.ts +213 -0
  412. package/connectors/connect-domo/src/api/example.ts +48 -0
  413. package/connectors/connect-domo/src/api/index.ts +51 -0
  414. package/connectors/connect-domo/src/cli/index.ts +254 -0
  415. package/connectors/connect-domo/src/index.ts +103 -0
  416. package/connectors/connect-domo/src/types/index.ts +237 -0
  417. package/connectors/connect-domo/src/utils/auth.ts +274 -0
  418. package/connectors/connect-domo/src/utils/bulk.ts +212 -0
  419. package/connectors/connect-domo/src/utils/config.ts +326 -0
  420. package/connectors/connect-domo/src/utils/output.ts +175 -0
  421. package/connectors/connect-domo/src/utils/settings.ts +114 -0
  422. package/connectors/connect-domo/src/utils/storage.ts +198 -0
  423. package/connectors/connect-domo/tsconfig.json +16 -0
  424. package/connectors/connect-draftable/.env.example +11 -0
  425. package/connectors/connect-draftable/CLAUDE.md +272 -0
  426. package/connectors/connect-draftable/README.md +193 -0
  427. package/connectors/connect-draftable/package.json +51 -0
  428. package/connectors/connect-draftable/scripts/release.ts +179 -0
  429. package/connectors/connect-draftable/src/api/client.ts +213 -0
  430. package/connectors/connect-draftable/src/api/example.ts +48 -0
  431. package/connectors/connect-draftable/src/api/index.ts +51 -0
  432. package/connectors/connect-draftable/src/cli/index.ts +254 -0
  433. package/connectors/connect-draftable/src/index.ts +103 -0
  434. package/connectors/connect-draftable/src/types/index.ts +237 -0
  435. package/connectors/connect-draftable/src/utils/auth.ts +274 -0
  436. package/connectors/connect-draftable/src/utils/bulk.ts +212 -0
  437. package/connectors/connect-draftable/src/utils/config.ts +326 -0
  438. package/connectors/connect-draftable/src/utils/output.ts +175 -0
  439. package/connectors/connect-draftable/src/utils/settings.ts +114 -0
  440. package/connectors/connect-draftable/src/utils/storage.ts +198 -0
  441. package/connectors/connect-draftable/tsconfig.json +16 -0
  442. package/connectors/connect-dropcontact/.env.example +11 -0
  443. package/connectors/connect-dropcontact/CLAUDE.md +272 -0
  444. package/connectors/connect-dropcontact/README.md +193 -0
  445. package/connectors/connect-dropcontact/package.json +51 -0
  446. package/connectors/connect-dropcontact/scripts/release.ts +179 -0
  447. package/connectors/connect-dropcontact/src/api/client.ts +213 -0
  448. package/connectors/connect-dropcontact/src/api/example.ts +48 -0
  449. package/connectors/connect-dropcontact/src/api/index.ts +51 -0
  450. package/connectors/connect-dropcontact/src/cli/index.ts +254 -0
  451. package/connectors/connect-dropcontact/src/index.ts +103 -0
  452. package/connectors/connect-dropcontact/src/types/index.ts +237 -0
  453. package/connectors/connect-dropcontact/src/utils/auth.ts +274 -0
  454. package/connectors/connect-dropcontact/src/utils/bulk.ts +212 -0
  455. package/connectors/connect-dropcontact/src/utils/config.ts +326 -0
  456. package/connectors/connect-dropcontact/src/utils/output.ts +175 -0
  457. package/connectors/connect-dropcontact/src/utils/settings.ts +114 -0
  458. package/connectors/connect-dropcontact/src/utils/storage.ts +198 -0
  459. package/connectors/connect-dropcontact/tsconfig.json +16 -0
  460. package/connectors/connect-droxy/.env.example +11 -0
  461. package/connectors/connect-droxy/CLAUDE.md +272 -0
  462. package/connectors/connect-droxy/README.md +193 -0
  463. package/connectors/connect-droxy/package.json +51 -0
  464. package/connectors/connect-droxy/scripts/release.ts +179 -0
  465. package/connectors/connect-droxy/src/api/client.ts +213 -0
  466. package/connectors/connect-droxy/src/api/example.ts +48 -0
  467. package/connectors/connect-droxy/src/api/index.ts +51 -0
  468. package/connectors/connect-droxy/src/cli/index.ts +254 -0
  469. package/connectors/connect-droxy/src/index.ts +103 -0
  470. package/connectors/connect-droxy/src/types/index.ts +237 -0
  471. package/connectors/connect-droxy/src/utils/auth.ts +274 -0
  472. package/connectors/connect-droxy/src/utils/bulk.ts +212 -0
  473. package/connectors/connect-droxy/src/utils/config.ts +326 -0
  474. package/connectors/connect-droxy/src/utils/output.ts +175 -0
  475. package/connectors/connect-droxy/src/utils/settings.ts +114 -0
  476. package/connectors/connect-droxy/src/utils/storage.ts +198 -0
  477. package/connectors/connect-droxy/tsconfig.json +16 -0
  478. package/connectors/connect-dynatrace/.env.example +11 -0
  479. package/connectors/connect-dynatrace/CLAUDE.md +272 -0
  480. package/connectors/connect-dynatrace/README.md +193 -0
  481. package/connectors/connect-dynatrace/package.json +51 -0
  482. package/connectors/connect-dynatrace/scripts/release.ts +179 -0
  483. package/connectors/connect-dynatrace/src/api/client.ts +213 -0
  484. package/connectors/connect-dynatrace/src/api/example.ts +48 -0
  485. package/connectors/connect-dynatrace/src/api/index.ts +51 -0
  486. package/connectors/connect-dynatrace/src/cli/index.ts +254 -0
  487. package/connectors/connect-dynatrace/src/index.ts +103 -0
  488. package/connectors/connect-dynatrace/src/types/index.ts +237 -0
  489. package/connectors/connect-dynatrace/src/utils/auth.ts +274 -0
  490. package/connectors/connect-dynatrace/src/utils/bulk.ts +212 -0
  491. package/connectors/connect-dynatrace/src/utils/config.ts +326 -0
  492. package/connectors/connect-dynatrace/src/utils/output.ts +175 -0
  493. package/connectors/connect-dynatrace/src/utils/settings.ts +114 -0
  494. package/connectors/connect-dynatrace/src/utils/storage.ts +198 -0
  495. package/connectors/connect-dynatrace/tsconfig.json +16 -0
  496. package/connectors/connect-eartho/.env.example +11 -0
  497. package/connectors/connect-eartho/CLAUDE.md +272 -0
  498. package/connectors/connect-eartho/README.md +193 -0
  499. package/connectors/connect-eartho/package.json +51 -0
  500. package/connectors/connect-eartho/scripts/release.ts +179 -0
  501. package/connectors/connect-eartho/src/api/client.ts +213 -0
  502. package/connectors/connect-eartho/src/api/example.ts +48 -0
  503. package/connectors/connect-eartho/src/api/index.ts +51 -0
  504. package/connectors/connect-eartho/src/cli/index.ts +254 -0
  505. package/connectors/connect-eartho/src/index.ts +103 -0
  506. package/connectors/connect-eartho/src/types/index.ts +237 -0
  507. package/connectors/connect-eartho/src/utils/auth.ts +274 -0
  508. package/connectors/connect-eartho/src/utils/bulk.ts +212 -0
  509. package/connectors/connect-eartho/src/utils/config.ts +326 -0
  510. package/connectors/connect-eartho/src/utils/output.ts +175 -0
  511. package/connectors/connect-eartho/src/utils/settings.ts +114 -0
  512. package/connectors/connect-eartho/src/utils/storage.ts +198 -0
  513. package/connectors/connect-eartho/tsconfig.json +16 -0
  514. package/connectors/connect-easyship/.env.example +11 -0
  515. package/connectors/connect-easyship/CLAUDE.md +272 -0
  516. package/connectors/connect-easyship/README.md +193 -0
  517. package/connectors/connect-easyship/package.json +51 -0
  518. package/connectors/connect-easyship/scripts/release.ts +179 -0
  519. package/connectors/connect-easyship/src/api/client.ts +213 -0
  520. package/connectors/connect-easyship/src/api/example.ts +48 -0
  521. package/connectors/connect-easyship/src/api/index.ts +51 -0
  522. package/connectors/connect-easyship/src/cli/index.ts +254 -0
  523. package/connectors/connect-easyship/src/index.ts +103 -0
  524. package/connectors/connect-easyship/src/types/index.ts +237 -0
  525. package/connectors/connect-easyship/src/utils/auth.ts +274 -0
  526. package/connectors/connect-easyship/src/utils/bulk.ts +212 -0
  527. package/connectors/connect-easyship/src/utils/config.ts +326 -0
  528. package/connectors/connect-easyship/src/utils/output.ts +175 -0
  529. package/connectors/connect-easyship/src/utils/settings.ts +114 -0
  530. package/connectors/connect-easyship/src/utils/storage.ts +198 -0
  531. package/connectors/connect-easyship/tsconfig.json +16 -0
  532. package/connectors/connect-echowin/.env.example +11 -0
  533. package/connectors/connect-echowin/CLAUDE.md +272 -0
  534. package/connectors/connect-echowin/README.md +193 -0
  535. package/connectors/connect-echowin/package.json +51 -0
  536. package/connectors/connect-echowin/scripts/release.ts +179 -0
  537. package/connectors/connect-echowin/src/api/client.ts +213 -0
  538. package/connectors/connect-echowin/src/api/example.ts +48 -0
  539. package/connectors/connect-echowin/src/api/index.ts +51 -0
  540. package/connectors/connect-echowin/src/cli/index.ts +254 -0
  541. package/connectors/connect-echowin/src/index.ts +103 -0
  542. package/connectors/connect-echowin/src/types/index.ts +237 -0
  543. package/connectors/connect-echowin/src/utils/auth.ts +274 -0
  544. package/connectors/connect-echowin/src/utils/bulk.ts +212 -0
  545. package/connectors/connect-echowin/src/utils/config.ts +326 -0
  546. package/connectors/connect-echowin/src/utils/output.ts +175 -0
  547. package/connectors/connect-echowin/src/utils/settings.ts +114 -0
  548. package/connectors/connect-echowin/src/utils/storage.ts +198 -0
  549. package/connectors/connect-echowin/tsconfig.json +16 -0
  550. package/connectors/connect-ecwid/.env.example +11 -0
  551. package/connectors/connect-ecwid/CLAUDE.md +272 -0
  552. package/connectors/connect-ecwid/README.md +193 -0
  553. package/connectors/connect-ecwid/package.json +51 -0
  554. package/connectors/connect-ecwid/scripts/release.ts +179 -0
  555. package/connectors/connect-ecwid/src/api/client.ts +213 -0
  556. package/connectors/connect-ecwid/src/api/example.ts +48 -0
  557. package/connectors/connect-ecwid/src/api/index.ts +51 -0
  558. package/connectors/connect-ecwid/src/cli/index.ts +254 -0
  559. package/connectors/connect-ecwid/src/index.ts +103 -0
  560. package/connectors/connect-ecwid/src/types/index.ts +237 -0
  561. package/connectors/connect-ecwid/src/utils/auth.ts +274 -0
  562. package/connectors/connect-ecwid/src/utils/bulk.ts +212 -0
  563. package/connectors/connect-ecwid/src/utils/config.ts +326 -0
  564. package/connectors/connect-ecwid/src/utils/output.ts +175 -0
  565. package/connectors/connect-ecwid/src/utils/settings.ts +114 -0
  566. package/connectors/connect-ecwid/src/utils/storage.ts +198 -0
  567. package/connectors/connect-ecwid/tsconfig.json +16 -0
  568. package/connectors/connect-edenai/.env.example +11 -0
  569. package/connectors/connect-edenai/CLAUDE.md +272 -0
  570. package/connectors/connect-edenai/README.md +193 -0
  571. package/connectors/connect-edenai/package.json +51 -0
  572. package/connectors/connect-edenai/scripts/release.ts +179 -0
  573. package/connectors/connect-edenai/src/api/client.ts +213 -0
  574. package/connectors/connect-edenai/src/api/example.ts +48 -0
  575. package/connectors/connect-edenai/src/api/index.ts +51 -0
  576. package/connectors/connect-edenai/src/cli/index.ts +254 -0
  577. package/connectors/connect-edenai/src/index.ts +103 -0
  578. package/connectors/connect-edenai/src/types/index.ts +237 -0
  579. package/connectors/connect-edenai/src/utils/auth.ts +274 -0
  580. package/connectors/connect-edenai/src/utils/bulk.ts +212 -0
  581. package/connectors/connect-edenai/src/utils/config.ts +326 -0
  582. package/connectors/connect-edenai/src/utils/output.ts +175 -0
  583. package/connectors/connect-edenai/src/utils/settings.ts +114 -0
  584. package/connectors/connect-edenai/src/utils/storage.ts +198 -0
  585. package/connectors/connect-edenai/tsconfig.json +16 -0
  586. package/connectors/connect-egoi/.env.example +11 -0
  587. package/connectors/connect-egoi/CLAUDE.md +272 -0
  588. package/connectors/connect-egoi/README.md +193 -0
  589. package/connectors/connect-egoi/package.json +51 -0
  590. package/connectors/connect-egoi/scripts/release.ts +179 -0
  591. package/connectors/connect-egoi/src/api/client.ts +213 -0
  592. package/connectors/connect-egoi/src/api/example.ts +48 -0
  593. package/connectors/connect-egoi/src/api/index.ts +51 -0
  594. package/connectors/connect-egoi/src/cli/index.ts +254 -0
  595. package/connectors/connect-egoi/src/index.ts +103 -0
  596. package/connectors/connect-egoi/src/types/index.ts +237 -0
  597. package/connectors/connect-egoi/src/utils/auth.ts +274 -0
  598. package/connectors/connect-egoi/src/utils/bulk.ts +212 -0
  599. package/connectors/connect-egoi/src/utils/config.ts +326 -0
  600. package/connectors/connect-egoi/src/utils/output.ts +175 -0
  601. package/connectors/connect-egoi/src/utils/settings.ts +114 -0
  602. package/connectors/connect-egoi/src/utils/storage.ts +198 -0
  603. package/connectors/connect-egoi/tsconfig.json +16 -0
  604. package/connectors/connect-elasticsearch/.env.example +11 -0
  605. package/connectors/connect-elasticsearch/CLAUDE.md +272 -0
  606. package/connectors/connect-elasticsearch/README.md +193 -0
  607. package/connectors/connect-elasticsearch/package.json +51 -0
  608. package/connectors/connect-elasticsearch/scripts/release.ts +179 -0
  609. package/connectors/connect-elasticsearch/src/api/client.ts +213 -0
  610. package/connectors/connect-elasticsearch/src/api/example.ts +48 -0
  611. package/connectors/connect-elasticsearch/src/api/index.ts +51 -0
  612. package/connectors/connect-elasticsearch/src/cli/index.ts +254 -0
  613. package/connectors/connect-elasticsearch/src/index.ts +103 -0
  614. package/connectors/connect-elasticsearch/src/types/index.ts +237 -0
  615. package/connectors/connect-elasticsearch/src/utils/auth.ts +274 -0
  616. package/connectors/connect-elasticsearch/src/utils/bulk.ts +212 -0
  617. package/connectors/connect-elasticsearch/src/utils/config.ts +326 -0
  618. package/connectors/connect-elasticsearch/src/utils/output.ts +175 -0
  619. package/connectors/connect-elasticsearch/src/utils/settings.ts +114 -0
  620. package/connectors/connect-elasticsearch/src/utils/storage.ts +198 -0
  621. package/connectors/connect-elasticsearch/tsconfig.json +16 -0
  622. package/connectors/connect-elasticsecurity/.env.example +11 -0
  623. package/connectors/connect-elasticsecurity/CLAUDE.md +272 -0
  624. package/connectors/connect-elasticsecurity/README.md +193 -0
  625. package/connectors/connect-elasticsecurity/package.json +51 -0
  626. package/connectors/connect-elasticsecurity/scripts/release.ts +179 -0
  627. package/connectors/connect-elasticsecurity/src/api/client.ts +213 -0
  628. package/connectors/connect-elasticsecurity/src/api/example.ts +48 -0
  629. package/connectors/connect-elasticsecurity/src/api/index.ts +51 -0
  630. package/connectors/connect-elasticsecurity/src/cli/index.ts +254 -0
  631. package/connectors/connect-elasticsecurity/src/index.ts +103 -0
  632. package/connectors/connect-elasticsecurity/src/types/index.ts +237 -0
  633. package/connectors/connect-elasticsecurity/src/utils/auth.ts +274 -0
  634. package/connectors/connect-elasticsecurity/src/utils/bulk.ts +212 -0
  635. package/connectors/connect-elasticsecurity/src/utils/config.ts +326 -0
  636. package/connectors/connect-elasticsecurity/src/utils/output.ts +175 -0
  637. package/connectors/connect-elasticsecurity/src/utils/settings.ts +114 -0
  638. package/connectors/connect-elasticsecurity/src/utils/storage.ts +198 -0
  639. package/connectors/connect-elasticsecurity/tsconfig.json +16 -0
  640. package/connectors/connect-elmah/.env.example +11 -0
  641. package/connectors/connect-elmah/CLAUDE.md +272 -0
  642. package/connectors/connect-elmah/README.md +193 -0
  643. package/connectors/connect-elmah/package.json +51 -0
  644. package/connectors/connect-elmah/scripts/release.ts +179 -0
  645. package/connectors/connect-elmah/src/api/client.ts +213 -0
  646. package/connectors/connect-elmah/src/api/example.ts +48 -0
  647. package/connectors/connect-elmah/src/api/index.ts +51 -0
  648. package/connectors/connect-elmah/src/cli/index.ts +254 -0
  649. package/connectors/connect-elmah/src/index.ts +103 -0
  650. package/connectors/connect-elmah/src/types/index.ts +237 -0
  651. package/connectors/connect-elmah/src/utils/auth.ts +274 -0
  652. package/connectors/connect-elmah/src/utils/bulk.ts +212 -0
  653. package/connectors/connect-elmah/src/utils/config.ts +326 -0
  654. package/connectors/connect-elmah/src/utils/output.ts +175 -0
  655. package/connectors/connect-elmah/src/utils/settings.ts +114 -0
  656. package/connectors/connect-elmah/src/utils/storage.ts +198 -0
  657. package/connectors/connect-elmah/tsconfig.json +16 -0
  658. package/dist/index.js +259 -0
  659. package/package.json +1 -1
@@ -0,0 +1,1264 @@
1
+ #!/usr/bin/env bun
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import { DigitalOcean } from '../api';
5
+ import {
6
+ getApiKey,
7
+ setApiKey,
8
+ clearConfig,
9
+ getConfigDir,
10
+ setProfileOverride,
11
+ getCurrentProfile,
12
+ setCurrentProfile,
13
+ listProfiles,
14
+ createProfile,
15
+ deleteProfile,
16
+ profileExists,
17
+ loadProfile,
18
+ } from '../utils/config';
19
+ import type { OutputFormat } from '../utils/output';
20
+ import { success, error, info, print } from '../utils/output';
21
+
22
+ const CONNECTOR_NAME = 'connect-digitalocean';
23
+ const VERSION = '0.0.2';
24
+
25
+ const program = new Command();
26
+
27
+ program
28
+ .name(CONNECTOR_NAME)
29
+ .description('DigitalOcean connector - Manage droplets, volumes, databases, domains, and more')
30
+ .version(VERSION)
31
+ .option('-k, --api-key <key>', 'API key (overrides config)')
32
+ .option('-f, --format <format>', 'Output format (json, pretty)', 'pretty')
33
+ .option('-p, --profile <profile>', 'Use a specific profile')
34
+ .hook('preAction', (thisCommand) => {
35
+ const opts = thisCommand.opts();
36
+ if (opts.profile) {
37
+ if (!profileExists(opts.profile)) {
38
+ error(`Profile "${opts.profile}" does not exist. Create it with "${CONNECTOR_NAME} profile create ${opts.profile}"`);
39
+ process.exit(1);
40
+ }
41
+ setProfileOverride(opts.profile);
42
+ }
43
+ if (opts.apiKey) {
44
+ process.env.DIGITALOCEAN_TOKEN = opts.apiKey;
45
+ }
46
+ });
47
+
48
+ function getFormat(cmd: Command): OutputFormat {
49
+ const parent = cmd.parent;
50
+ return (parent?.opts().format || 'pretty') as OutputFormat;
51
+ }
52
+
53
+ function getClient(): DigitalOcean {
54
+ const apiKey = getApiKey();
55
+ if (!apiKey) {
56
+ error(`No API key configured. Run "${CONNECTOR_NAME} config set-key <key>" or set DIGITALOCEAN_TOKEN environment variable.`);
57
+ process.exit(1);
58
+ }
59
+ return new DigitalOcean({ apiKey });
60
+ }
61
+
62
+ // ============================================
63
+ // Profile Commands
64
+ // ============================================
65
+ const profileCmd = program
66
+ .command('profile')
67
+ .description('Manage configuration profiles');
68
+
69
+ profileCmd
70
+ .command('list')
71
+ .description('List all profiles')
72
+ .action(() => {
73
+ const profiles = listProfiles();
74
+ const current = getCurrentProfile();
75
+
76
+ if (profiles.length === 0) {
77
+ info('No profiles found. Use "profile create <name>" to create one.');
78
+ return;
79
+ }
80
+
81
+ success(`Profiles:`);
82
+ profiles.forEach(p => {
83
+ const isActive = p === current ? chalk.green(' (active)') : '';
84
+ console.log(` ${p}${isActive}`);
85
+ });
86
+ });
87
+
88
+ profileCmd
89
+ .command('use <name>')
90
+ .description('Switch to a profile')
91
+ .action((name: string) => {
92
+ if (!profileExists(name)) {
93
+ error(`Profile "${name}" does not exist. Create it with "profile create ${name}"`);
94
+ process.exit(1);
95
+ }
96
+ setCurrentProfile(name);
97
+ success(`Switched to profile: ${name}`);
98
+ });
99
+
100
+ profileCmd
101
+ .command('create <name>')
102
+ .description('Create a new profile')
103
+ .option('--api-key <key>', 'API key')
104
+ .option('--use', 'Switch to this profile after creation')
105
+ .action((name: string, opts) => {
106
+ if (profileExists(name)) {
107
+ error(`Profile "${name}" already exists`);
108
+ process.exit(1);
109
+ }
110
+
111
+ createProfile(name, {
112
+ apiKey: opts.apiKey,
113
+ });
114
+ success(`Profile "${name}" created`);
115
+
116
+ if (opts.use) {
117
+ setCurrentProfile(name);
118
+ info(`Switched to profile: ${name}`);
119
+ }
120
+ });
121
+
122
+ profileCmd
123
+ .command('delete <name>')
124
+ .description('Delete a profile')
125
+ .action((name: string) => {
126
+ if (name === 'default') {
127
+ error('Cannot delete the default profile');
128
+ process.exit(1);
129
+ }
130
+ if (deleteProfile(name)) {
131
+ success(`Profile "${name}" deleted`);
132
+ } else {
133
+ error(`Profile "${name}" not found`);
134
+ process.exit(1);
135
+ }
136
+ });
137
+
138
+ profileCmd
139
+ .command('show [name]')
140
+ .description('Show profile configuration')
141
+ .action((name?: string) => {
142
+ const profileName = name || getCurrentProfile();
143
+ const config = loadProfile(profileName);
144
+ const active = getCurrentProfile();
145
+
146
+ console.log(chalk.bold(`Profile: ${profileName}${profileName === active ? chalk.green(' (active)') : ''}`));
147
+ info(`API Key: ${config.apiKey ? `${config.apiKey.substring(0, 8)}...` : chalk.gray('not set')}`);
148
+ });
149
+
150
+ // ============================================
151
+ // Config Commands
152
+ // ============================================
153
+ const configCmd = program
154
+ .command('config')
155
+ .description('Manage CLI configuration');
156
+
157
+ configCmd
158
+ .command('set-key <apiKey>')
159
+ .description('Set API key')
160
+ .action((apiKey: string) => {
161
+ setApiKey(apiKey);
162
+ success(`API key saved to profile: ${getCurrentProfile()}`);
163
+ });
164
+
165
+ configCmd
166
+ .command('show')
167
+ .description('Show current configuration')
168
+ .action(() => {
169
+ const profileName = getCurrentProfile();
170
+ const apiKey = getApiKey();
171
+
172
+ console.log(chalk.bold(`Active Profile: ${profileName}`));
173
+ info(`Config directory: ${getConfigDir()}`);
174
+ info(`API Key: ${apiKey ? `${apiKey.substring(0, 8)}...` : chalk.gray('not set')}`);
175
+ });
176
+
177
+ configCmd
178
+ .command('clear')
179
+ .description('Clear configuration')
180
+ .action(() => {
181
+ clearConfig();
182
+ success(`Configuration cleared for profile: ${getCurrentProfile()}`);
183
+ });
184
+
185
+ // ============================================
186
+ // Account Commands
187
+ // ============================================
188
+ program
189
+ .command('account')
190
+ .description('Get account info')
191
+ .action(async function(this: Command) {
192
+ try {
193
+ const client = getClient();
194
+ const result = await client.getAccount();
195
+ print(result.account, getFormat(this));
196
+ } catch (err) {
197
+ error(String(err));
198
+ process.exit(1);
199
+ }
200
+ });
201
+
202
+ // ============================================
203
+ // Region Commands
204
+ // ============================================
205
+ program
206
+ .command('regions')
207
+ .description('List regions')
208
+ .action(async function(this: Command) {
209
+ try {
210
+ const client = getClient();
211
+ const result = await client.listRegions();
212
+ print(result.regions, getFormat(this));
213
+ } catch (err) {
214
+ error(String(err));
215
+ process.exit(1);
216
+ }
217
+ });
218
+
219
+ // ============================================
220
+ // Size Commands
221
+ // ============================================
222
+ program
223
+ .command('sizes')
224
+ .description('List sizes')
225
+ .action(async function(this: Command) {
226
+ try {
227
+ const client = getClient();
228
+ const result = await client.listSizes();
229
+ print(result.sizes, getFormat(this));
230
+ } catch (err) {
231
+ error(String(err));
232
+ process.exit(1);
233
+ }
234
+ });
235
+
236
+ // ============================================
237
+ // Droplet Commands
238
+ // ============================================
239
+ const dropletCmd = program
240
+ .command('droplet')
241
+ .description('Droplet operations');
242
+
243
+ dropletCmd
244
+ .command('list')
245
+ .description('List droplets')
246
+ .option('--page <page>', 'Page number')
247
+ .option('--per-page <count>', 'Items per page')
248
+ .option('--tag <tag>', 'Filter by tag')
249
+ .action(async function(this: Command, opts) {
250
+ try {
251
+ const client = getClient();
252
+ const result = await client.listDroplets({
253
+ page: opts.page ? parseInt(opts.page) : undefined,
254
+ per_page: opts.perPage ? parseInt(opts.perPage) : undefined,
255
+ tag_name: opts.tag,
256
+ });
257
+ print(result.droplets, getFormat(this));
258
+ } catch (err) {
259
+ error(String(err));
260
+ process.exit(1);
261
+ }
262
+ });
263
+
264
+ dropletCmd
265
+ .command('get <dropletId>')
266
+ .description('Get droplet details')
267
+ .action(async function(this: Command, dropletId: string) {
268
+ try {
269
+ const client = getClient();
270
+ const result = await client.getDroplet(parseInt(dropletId));
271
+ print(result.droplet, getFormat(this));
272
+ } catch (err) {
273
+ error(String(err));
274
+ process.exit(1);
275
+ }
276
+ });
277
+
278
+ dropletCmd
279
+ .command('create')
280
+ .description('Create a droplet')
281
+ .requiredOption('-n, --name <name>', 'Droplet name')
282
+ .requiredOption('-r, --region <region>', 'Region slug')
283
+ .requiredOption('-s, --size <size>', 'Size slug')
284
+ .requiredOption('-i, --image <image>', 'Image ID or slug')
285
+ .option('--ssh-keys <keys>', 'SSH key IDs (comma-separated)')
286
+ .option('--backups', 'Enable backups')
287
+ .option('--ipv6', 'Enable IPv6')
288
+ .option('--monitoring', 'Enable monitoring')
289
+ .option('--tags <tags>', 'Tags (comma-separated)')
290
+ .action(async function(this: Command, opts) {
291
+ try {
292
+ const client = getClient();
293
+ const result = await client.createDroplet({
294
+ name: opts.name,
295
+ region: opts.region,
296
+ size: opts.size,
297
+ image: opts.image,
298
+ ssh_keys: opts.sshKeys ? opts.sshKeys.split(',') : undefined,
299
+ backups: opts.backups,
300
+ ipv6: opts.ipv6,
301
+ monitoring: opts.monitoring,
302
+ tags: opts.tags ? opts.tags.split(',') : undefined,
303
+ });
304
+ success('Droplet created!');
305
+ print(result.droplet, getFormat(this));
306
+ } catch (err) {
307
+ error(String(err));
308
+ process.exit(1);
309
+ }
310
+ });
311
+
312
+ dropletCmd
313
+ .command('delete <dropletId>')
314
+ .description('Delete a droplet')
315
+ .action(async function(this: Command, dropletId: string) {
316
+ try {
317
+ const client = getClient();
318
+ await client.deleteDroplet(parseInt(dropletId));
319
+ success('Droplet deleted!');
320
+ } catch (err) {
321
+ error(String(err));
322
+ process.exit(1);
323
+ }
324
+ });
325
+
326
+ dropletCmd
327
+ .command('action <dropletId>')
328
+ .description('Perform a droplet action')
329
+ .requiredOption('-t, --type <type>', 'Action type (reboot, power_cycle, shutdown, power_off, power_on, etc.)')
330
+ .option('--size <size>', 'Size for resize action')
331
+ .option('--image <image>', 'Image for rebuild action')
332
+ .option('--name <name>', 'Name for rename action')
333
+ .action(async function(this: Command, dropletId: string, opts) {
334
+ try {
335
+ const client = getClient();
336
+ const result = await client.performDropletAction(parseInt(dropletId), {
337
+ type: opts.type,
338
+ size: opts.size,
339
+ image: opts.image,
340
+ name: opts.name,
341
+ });
342
+ success('Action initiated!');
343
+ print(result.action, getFormat(this));
344
+ } catch (err) {
345
+ error(String(err));
346
+ process.exit(1);
347
+ }
348
+ });
349
+
350
+ // ============================================
351
+ // Image Commands
352
+ // ============================================
353
+ const imageCmd = program
354
+ .command('image')
355
+ .description('Image operations');
356
+
357
+ imageCmd
358
+ .command('list')
359
+ .description('List images')
360
+ .option('--type <type>', 'Image type (distribution, application, backup, snapshot)')
361
+ .option('--private', 'Show only private images')
362
+ .option('--page <page>', 'Page number')
363
+ .option('--per-page <count>', 'Items per page')
364
+ .action(async function(this: Command, opts) {
365
+ try {
366
+ const client = getClient();
367
+ const result = await client.listImages({
368
+ type: opts.type,
369
+ private: opts.private,
370
+ page: opts.page ? parseInt(opts.page) : undefined,
371
+ per_page: opts.perPage ? parseInt(opts.perPage) : undefined,
372
+ });
373
+ print(result.images, getFormat(this));
374
+ } catch (err) {
375
+ error(String(err));
376
+ process.exit(1);
377
+ }
378
+ });
379
+
380
+ imageCmd
381
+ .command('get <imageId>')
382
+ .description('Get image details')
383
+ .action(async function(this: Command, imageId: string) {
384
+ try {
385
+ const client = getClient();
386
+ const result = await client.getImage(imageId);
387
+ print(result.image, getFormat(this));
388
+ } catch (err) {
389
+ error(String(err));
390
+ process.exit(1);
391
+ }
392
+ });
393
+
394
+ imageCmd
395
+ .command('delete <imageId>')
396
+ .description('Delete an image')
397
+ .action(async function(this: Command, imageId: string) {
398
+ try {
399
+ const client = getClient();
400
+ await client.deleteImage(parseInt(imageId));
401
+ success('Image deleted!');
402
+ } catch (err) {
403
+ error(String(err));
404
+ process.exit(1);
405
+ }
406
+ });
407
+
408
+ // ============================================
409
+ // SSH Key Commands
410
+ // ============================================
411
+ const sshKeyCmd = program
412
+ .command('ssh-key')
413
+ .description('SSH key operations');
414
+
415
+ sshKeyCmd
416
+ .command('list')
417
+ .description('List SSH keys')
418
+ .action(async function(this: Command) {
419
+ try {
420
+ const client = getClient();
421
+ const result = await client.listSSHKeys();
422
+ print(result.ssh_keys, getFormat(this));
423
+ } catch (err) {
424
+ error(String(err));
425
+ process.exit(1);
426
+ }
427
+ });
428
+
429
+ sshKeyCmd
430
+ .command('get <keyId>')
431
+ .description('Get SSH key details')
432
+ .action(async function(this: Command, keyId: string) {
433
+ try {
434
+ const client = getClient();
435
+ const result = await client.getSSHKey(keyId);
436
+ print(result.ssh_key, getFormat(this));
437
+ } catch (err) {
438
+ error(String(err));
439
+ process.exit(1);
440
+ }
441
+ });
442
+
443
+ sshKeyCmd
444
+ .command('create')
445
+ .description('Create an SSH key')
446
+ .requiredOption('-n, --name <name>', 'Key name')
447
+ .requiredOption('--public-key <key>', 'Public key content')
448
+ .action(async function(this: Command, opts) {
449
+ try {
450
+ const client = getClient();
451
+ const result = await client.createSSHKey({
452
+ name: opts.name,
453
+ public_key: opts.publicKey,
454
+ });
455
+ success('SSH key created!');
456
+ print(result.ssh_key, getFormat(this));
457
+ } catch (err) {
458
+ error(String(err));
459
+ process.exit(1);
460
+ }
461
+ });
462
+
463
+ sshKeyCmd
464
+ .command('delete <keyId>')
465
+ .description('Delete an SSH key')
466
+ .action(async function(this: Command, keyId: string) {
467
+ try {
468
+ const client = getClient();
469
+ await client.deleteSSHKey(keyId);
470
+ success('SSH key deleted!');
471
+ } catch (err) {
472
+ error(String(err));
473
+ process.exit(1);
474
+ }
475
+ });
476
+
477
+ // ============================================
478
+ // Volume Commands
479
+ // ============================================
480
+ const volumeCmd = program
481
+ .command('volume')
482
+ .description('Volume operations');
483
+
484
+ volumeCmd
485
+ .command('list')
486
+ .description('List volumes')
487
+ .option('--region <region>', 'Filter by region')
488
+ .option('--name <name>', 'Filter by name')
489
+ .action(async function(this: Command, opts) {
490
+ try {
491
+ const client = getClient();
492
+ const result = await client.listVolumes({
493
+ region: opts.region,
494
+ name: opts.name,
495
+ });
496
+ print(result.volumes, getFormat(this));
497
+ } catch (err) {
498
+ error(String(err));
499
+ process.exit(1);
500
+ }
501
+ });
502
+
503
+ volumeCmd
504
+ .command('get <volumeId>')
505
+ .description('Get volume details')
506
+ .action(async function(this: Command, volumeId: string) {
507
+ try {
508
+ const client = getClient();
509
+ const result = await client.getVolume(volumeId);
510
+ print(result.volume, getFormat(this));
511
+ } catch (err) {
512
+ error(String(err));
513
+ process.exit(1);
514
+ }
515
+ });
516
+
517
+ volumeCmd
518
+ .command('create')
519
+ .description('Create a volume')
520
+ .requiredOption('-n, --name <name>', 'Volume name')
521
+ .requiredOption('-s, --size <size>', 'Size in GB')
522
+ .requiredOption('-r, --region <region>', 'Region slug')
523
+ .option('-d, --description <description>', 'Description')
524
+ .action(async function(this: Command, opts) {
525
+ try {
526
+ const client = getClient();
527
+ const result = await client.createVolume({
528
+ name: opts.name,
529
+ size_gigabytes: parseInt(opts.size),
530
+ region: opts.region,
531
+ description: opts.description,
532
+ });
533
+ success('Volume created!');
534
+ print(result.volume, getFormat(this));
535
+ } catch (err) {
536
+ error(String(err));
537
+ process.exit(1);
538
+ }
539
+ });
540
+
541
+ volumeCmd
542
+ .command('delete <volumeId>')
543
+ .description('Delete a volume')
544
+ .action(async function(this: Command, volumeId: string) {
545
+ try {
546
+ const client = getClient();
547
+ await client.deleteVolume(volumeId);
548
+ success('Volume deleted!');
549
+ } catch (err) {
550
+ error(String(err));
551
+ process.exit(1);
552
+ }
553
+ });
554
+
555
+ volumeCmd
556
+ .command('attach <volumeId> <dropletId>')
557
+ .description('Attach volume to droplet')
558
+ .option('-r, --region <region>', 'Region')
559
+ .action(async function(this: Command, volumeId: string, dropletId: string, opts) {
560
+ try {
561
+ const client = getClient();
562
+ const result = await client.attachVolume(volumeId, parseInt(dropletId), opts.region);
563
+ success('Volume attached!');
564
+ print(result.action, getFormat(this));
565
+ } catch (err) {
566
+ error(String(err));
567
+ process.exit(1);
568
+ }
569
+ });
570
+
571
+ volumeCmd
572
+ .command('detach <volumeId> <dropletId>')
573
+ .description('Detach volume from droplet')
574
+ .option('-r, --region <region>', 'Region')
575
+ .action(async function(this: Command, volumeId: string, dropletId: string, opts) {
576
+ try {
577
+ const client = getClient();
578
+ const result = await client.detachVolume(volumeId, parseInt(dropletId), opts.region);
579
+ success('Volume detached!');
580
+ print(result.action, getFormat(this));
581
+ } catch (err) {
582
+ error(String(err));
583
+ process.exit(1);
584
+ }
585
+ });
586
+
587
+ // ============================================
588
+ // Domain Commands
589
+ // ============================================
590
+ const domainCmd = program
591
+ .command('domain')
592
+ .description('Domain operations');
593
+
594
+ domainCmd
595
+ .command('list')
596
+ .description('List domains')
597
+ .action(async function(this: Command) {
598
+ try {
599
+ const client = getClient();
600
+ const result = await client.listDomains();
601
+ print(result.domains, getFormat(this));
602
+ } catch (err) {
603
+ error(String(err));
604
+ process.exit(1);
605
+ }
606
+ });
607
+
608
+ domainCmd
609
+ .command('get <domain>')
610
+ .description('Get domain details')
611
+ .action(async function(this: Command, domain: string) {
612
+ try {
613
+ const client = getClient();
614
+ const result = await client.getDomain(domain);
615
+ print(result.domain, getFormat(this));
616
+ } catch (err) {
617
+ error(String(err));
618
+ process.exit(1);
619
+ }
620
+ });
621
+
622
+ domainCmd
623
+ .command('create <domain>')
624
+ .description('Create a domain')
625
+ .option('--ip <ip>', 'IP address')
626
+ .action(async function(this: Command, domain: string, opts) {
627
+ try {
628
+ const client = getClient();
629
+ const result = await client.createDomain(domain, opts.ip);
630
+ success('Domain created!');
631
+ print(result.domain, getFormat(this));
632
+ } catch (err) {
633
+ error(String(err));
634
+ process.exit(1);
635
+ }
636
+ });
637
+
638
+ domainCmd
639
+ .command('delete <domain>')
640
+ .description('Delete a domain')
641
+ .action(async function(this: Command, domain: string) {
642
+ try {
643
+ const client = getClient();
644
+ await client.deleteDomain(domain);
645
+ success('Domain deleted!');
646
+ } catch (err) {
647
+ error(String(err));
648
+ process.exit(1);
649
+ }
650
+ });
651
+
652
+ domainCmd
653
+ .command('records <domain>')
654
+ .description('List domain records')
655
+ .action(async function(this: Command, domain: string) {
656
+ try {
657
+ const client = getClient();
658
+ const result = await client.listDomainRecords(domain);
659
+ print(result.domain_records, getFormat(this));
660
+ } catch (err) {
661
+ error(String(err));
662
+ process.exit(1);
663
+ }
664
+ });
665
+
666
+ domainCmd
667
+ .command('record-create <domain>')
668
+ .description('Create a domain record')
669
+ .requiredOption('-t, --type <type>', 'Record type (A, AAAA, CNAME, MX, TXT, etc.)')
670
+ .requiredOption('-n, --name <name>', 'Record name')
671
+ .requiredOption('-d, --data <data>', 'Record data')
672
+ .option('--ttl <ttl>', 'TTL')
673
+ .option('--priority <priority>', 'Priority (for MX)')
674
+ .action(async function(this: Command, domain: string, opts) {
675
+ try {
676
+ const client = getClient();
677
+ const result = await client.createDomainRecord(domain, {
678
+ type: opts.type,
679
+ name: opts.name,
680
+ data: opts.data,
681
+ ttl: opts.ttl ? parseInt(opts.ttl) : undefined,
682
+ priority: opts.priority ? parseInt(opts.priority) : undefined,
683
+ });
684
+ success('Record created!');
685
+ print(result.domain_record, getFormat(this));
686
+ } catch (err) {
687
+ error(String(err));
688
+ process.exit(1);
689
+ }
690
+ });
691
+
692
+ domainCmd
693
+ .command('record-delete <domain> <recordId>')
694
+ .description('Delete a domain record')
695
+ .action(async function(this: Command, domain: string, recordId: string) {
696
+ try {
697
+ const client = getClient();
698
+ await client.deleteDomainRecord(domain, parseInt(recordId));
699
+ success('Record deleted!');
700
+ } catch (err) {
701
+ error(String(err));
702
+ process.exit(1);
703
+ }
704
+ });
705
+
706
+ // ============================================
707
+ // Firewall Commands
708
+ // ============================================
709
+ const firewallCmd = program
710
+ .command('firewall')
711
+ .description('Firewall operations');
712
+
713
+ firewallCmd
714
+ .command('list')
715
+ .description('List firewalls')
716
+ .action(async function(this: Command) {
717
+ try {
718
+ const client = getClient();
719
+ const result = await client.listFirewalls();
720
+ print(result.firewalls, getFormat(this));
721
+ } catch (err) {
722
+ error(String(err));
723
+ process.exit(1);
724
+ }
725
+ });
726
+
727
+ firewallCmd
728
+ .command('get <firewallId>')
729
+ .description('Get firewall details')
730
+ .action(async function(this: Command, firewallId: string) {
731
+ try {
732
+ const client = getClient();
733
+ const result = await client.getFirewall(firewallId);
734
+ print(result.firewall, getFormat(this));
735
+ } catch (err) {
736
+ error(String(err));
737
+ process.exit(1);
738
+ }
739
+ });
740
+
741
+ firewallCmd
742
+ .command('delete <firewallId>')
743
+ .description('Delete a firewall')
744
+ .action(async function(this: Command, firewallId: string) {
745
+ try {
746
+ const client = getClient();
747
+ await client.deleteFirewall(firewallId);
748
+ success('Firewall deleted!');
749
+ } catch (err) {
750
+ error(String(err));
751
+ process.exit(1);
752
+ }
753
+ });
754
+
755
+ // ============================================
756
+ // Load Balancer Commands
757
+ // ============================================
758
+ const lbCmd = program
759
+ .command('load-balancer')
760
+ .description('Load balancer operations');
761
+
762
+ lbCmd
763
+ .command('list')
764
+ .description('List load balancers')
765
+ .action(async function(this: Command) {
766
+ try {
767
+ const client = getClient();
768
+ const result = await client.listLoadBalancers();
769
+ print(result.load_balancers, getFormat(this));
770
+ } catch (err) {
771
+ error(String(err));
772
+ process.exit(1);
773
+ }
774
+ });
775
+
776
+ lbCmd
777
+ .command('get <loadBalancerId>')
778
+ .description('Get load balancer details')
779
+ .action(async function(this: Command, loadBalancerId: string) {
780
+ try {
781
+ const client = getClient();
782
+ const result = await client.getLoadBalancer(loadBalancerId);
783
+ print(result.load_balancer, getFormat(this));
784
+ } catch (err) {
785
+ error(String(err));
786
+ process.exit(1);
787
+ }
788
+ });
789
+
790
+ lbCmd
791
+ .command('delete <loadBalancerId>')
792
+ .description('Delete a load balancer')
793
+ .action(async function(this: Command, loadBalancerId: string) {
794
+ try {
795
+ const client = getClient();
796
+ await client.deleteLoadBalancer(loadBalancerId);
797
+ success('Load balancer deleted!');
798
+ } catch (err) {
799
+ error(String(err));
800
+ process.exit(1);
801
+ }
802
+ });
803
+
804
+ // ============================================
805
+ // Database Commands
806
+ // ============================================
807
+ const dbCmd = program
808
+ .command('database')
809
+ .description('Database operations');
810
+
811
+ dbCmd
812
+ .command('list')
813
+ .description('List databases')
814
+ .action(async function(this: Command) {
815
+ try {
816
+ const client = getClient();
817
+ const result = await client.listDatabases();
818
+ print(result.databases, getFormat(this));
819
+ } catch (err) {
820
+ error(String(err));
821
+ process.exit(1);
822
+ }
823
+ });
824
+
825
+ dbCmd
826
+ .command('get <databaseId>')
827
+ .description('Get database details')
828
+ .action(async function(this: Command, databaseId: string) {
829
+ try {
830
+ const client = getClient();
831
+ const result = await client.getDatabase(databaseId);
832
+ print(result.database, getFormat(this));
833
+ } catch (err) {
834
+ error(String(err));
835
+ process.exit(1);
836
+ }
837
+ });
838
+
839
+ dbCmd
840
+ .command('create')
841
+ .description('Create a database cluster')
842
+ .requiredOption('-n, --name <name>', 'Database name')
843
+ .requiredOption('-e, --engine <engine>', 'Engine (pg, mysql, redis, mongodb)')
844
+ .requiredOption('-s, --size <size>', 'Size slug')
845
+ .requiredOption('-r, --region <region>', 'Region slug')
846
+ .requiredOption('--nodes <nodes>', 'Number of nodes')
847
+ .action(async function(this: Command, opts) {
848
+ try {
849
+ const client = getClient();
850
+ const result = await client.createDatabase({
851
+ name: opts.name,
852
+ engine: opts.engine,
853
+ size: opts.size,
854
+ region: opts.region,
855
+ num_nodes: parseInt(opts.nodes),
856
+ });
857
+ success('Database cluster created!');
858
+ print(result.database, getFormat(this));
859
+ } catch (err) {
860
+ error(String(err));
861
+ process.exit(1);
862
+ }
863
+ });
864
+
865
+ dbCmd
866
+ .command('delete <databaseId>')
867
+ .description('Delete a database cluster')
868
+ .action(async function(this: Command, databaseId: string) {
869
+ try {
870
+ const client = getClient();
871
+ await client.deleteDatabase(databaseId);
872
+ success('Database cluster deleted!');
873
+ } catch (err) {
874
+ error(String(err));
875
+ process.exit(1);
876
+ }
877
+ });
878
+
879
+ // ============================================
880
+ // Kubernetes Commands
881
+ // ============================================
882
+ const k8sCmd = program
883
+ .command('kubernetes')
884
+ .description('Kubernetes operations');
885
+
886
+ k8sCmd
887
+ .command('list')
888
+ .description('List Kubernetes clusters')
889
+ .action(async function(this: Command) {
890
+ try {
891
+ const client = getClient();
892
+ const result = await client.listKubernetesClusters();
893
+ print(result.kubernetes_clusters, getFormat(this));
894
+ } catch (err) {
895
+ error(String(err));
896
+ process.exit(1);
897
+ }
898
+ });
899
+
900
+ k8sCmd
901
+ .command('get <clusterId>')
902
+ .description('Get Kubernetes cluster details')
903
+ .action(async function(this: Command, clusterId: string) {
904
+ try {
905
+ const client = getClient();
906
+ const result = await client.getKubernetesCluster(clusterId);
907
+ print(result.kubernetes_cluster, getFormat(this));
908
+ } catch (err) {
909
+ error(String(err));
910
+ process.exit(1);
911
+ }
912
+ });
913
+
914
+ k8sCmd
915
+ .command('delete <clusterId>')
916
+ .description('Delete a Kubernetes cluster')
917
+ .action(async function(this: Command, clusterId: string) {
918
+ try {
919
+ const client = getClient();
920
+ await client.deleteKubernetesCluster(clusterId);
921
+ success('Kubernetes cluster deleted!');
922
+ } catch (err) {
923
+ error(String(err));
924
+ process.exit(1);
925
+ }
926
+ });
927
+
928
+ k8sCmd
929
+ .command('kubeconfig <clusterId>')
930
+ .description('Get kubeconfig for a cluster')
931
+ .action(async function(this: Command, clusterId: string) {
932
+ try {
933
+ const client = getClient();
934
+ const kubeconfig = await client.getKubeconfig(clusterId);
935
+ console.log(kubeconfig);
936
+ } catch (err) {
937
+ error(String(err));
938
+ process.exit(1);
939
+ }
940
+ });
941
+
942
+ // ============================================
943
+ // Project Commands
944
+ // ============================================
945
+ const projectCmd = program
946
+ .command('project')
947
+ .description('Project operations');
948
+
949
+ projectCmd
950
+ .command('list')
951
+ .description('List projects')
952
+ .action(async function(this: Command) {
953
+ try {
954
+ const client = getClient();
955
+ const result = await client.listProjects();
956
+ print(result.projects, getFormat(this));
957
+ } catch (err) {
958
+ error(String(err));
959
+ process.exit(1);
960
+ }
961
+ });
962
+
963
+ projectCmd
964
+ .command('get <projectId>')
965
+ .description('Get project details')
966
+ .action(async function(this: Command, projectId: string) {
967
+ try {
968
+ const client = getClient();
969
+ const result = await client.getProject(projectId);
970
+ print(result.project, getFormat(this));
971
+ } catch (err) {
972
+ error(String(err));
973
+ process.exit(1);
974
+ }
975
+ });
976
+
977
+ projectCmd
978
+ .command('create')
979
+ .description('Create a project')
980
+ .requiredOption('-n, --name <name>', 'Project name')
981
+ .option('-d, --description <description>', 'Description')
982
+ .option('--purpose <purpose>', 'Purpose')
983
+ .option('-e, --environment <environment>', 'Environment (Development, Staging, Production)')
984
+ .action(async function(this: Command, opts) {
985
+ try {
986
+ const client = getClient();
987
+ const result = await client.createProject({
988
+ name: opts.name,
989
+ description: opts.description,
990
+ purpose: opts.purpose,
991
+ environment: opts.environment,
992
+ });
993
+ success('Project created!');
994
+ print(result.project, getFormat(this));
995
+ } catch (err) {
996
+ error(String(err));
997
+ process.exit(1);
998
+ }
999
+ });
1000
+
1001
+ projectCmd
1002
+ .command('delete <projectId>')
1003
+ .description('Delete a project')
1004
+ .action(async function(this: Command, projectId: string) {
1005
+ try {
1006
+ const client = getClient();
1007
+ await client.deleteProject(projectId);
1008
+ success('Project deleted!');
1009
+ } catch (err) {
1010
+ error(String(err));
1011
+ process.exit(1);
1012
+ }
1013
+ });
1014
+
1015
+ projectCmd
1016
+ .command('default')
1017
+ .description('Get the default project')
1018
+ .action(async function(this: Command) {
1019
+ try {
1020
+ const client = getClient();
1021
+ const result = await client.getDefaultProject();
1022
+ print(result.project, getFormat(this));
1023
+ } catch (err) {
1024
+ error(String(err));
1025
+ process.exit(1);
1026
+ }
1027
+ });
1028
+
1029
+ // ============================================
1030
+ // Snapshot Commands
1031
+ // ============================================
1032
+ const snapshotCmd = program
1033
+ .command('snapshot')
1034
+ .description('Snapshot operations');
1035
+
1036
+ snapshotCmd
1037
+ .command('list')
1038
+ .description('List snapshots')
1039
+ .option('--resource-type <type>', 'Resource type (droplet, volume)')
1040
+ .action(async function(this: Command, opts) {
1041
+ try {
1042
+ const client = getClient();
1043
+ const result = await client.listSnapshots({
1044
+ resource_type: opts.resourceType,
1045
+ });
1046
+ print(result.snapshots, getFormat(this));
1047
+ } catch (err) {
1048
+ error(String(err));
1049
+ process.exit(1);
1050
+ }
1051
+ });
1052
+
1053
+ snapshotCmd
1054
+ .command('get <snapshotId>')
1055
+ .description('Get snapshot details')
1056
+ .action(async function(this: Command, snapshotId: string) {
1057
+ try {
1058
+ const client = getClient();
1059
+ const result = await client.getSnapshot(snapshotId);
1060
+ print(result.snapshot, getFormat(this));
1061
+ } catch (err) {
1062
+ error(String(err));
1063
+ process.exit(1);
1064
+ }
1065
+ });
1066
+
1067
+ snapshotCmd
1068
+ .command('delete <snapshotId>')
1069
+ .description('Delete a snapshot')
1070
+ .action(async function(this: Command, snapshotId: string) {
1071
+ try {
1072
+ const client = getClient();
1073
+ await client.deleteSnapshot(snapshotId);
1074
+ success('Snapshot deleted!');
1075
+ } catch (err) {
1076
+ error(String(err));
1077
+ process.exit(1);
1078
+ }
1079
+ });
1080
+
1081
+ // ============================================
1082
+ // Floating IP Commands
1083
+ // ============================================
1084
+ const floatingIpCmd = program
1085
+ .command('floating-ip')
1086
+ .description('Floating IP operations');
1087
+
1088
+ floatingIpCmd
1089
+ .command('list')
1090
+ .description('List floating IPs')
1091
+ .action(async function(this: Command) {
1092
+ try {
1093
+ const client = getClient();
1094
+ const result = await client.listFloatingIPs();
1095
+ print(result.floating_ips, getFormat(this));
1096
+ } catch (err) {
1097
+ error(String(err));
1098
+ process.exit(1);
1099
+ }
1100
+ });
1101
+
1102
+ floatingIpCmd
1103
+ .command('get <ip>')
1104
+ .description('Get floating IP details')
1105
+ .action(async function(this: Command, ip: string) {
1106
+ try {
1107
+ const client = getClient();
1108
+ const result = await client.getFloatingIP(ip);
1109
+ print(result.floating_ip, getFormat(this));
1110
+ } catch (err) {
1111
+ error(String(err));
1112
+ process.exit(1);
1113
+ }
1114
+ });
1115
+
1116
+ floatingIpCmd
1117
+ .command('create')
1118
+ .description('Create a floating IP')
1119
+ .option('-r, --region <region>', 'Region slug')
1120
+ .option('-d, --droplet-id <dropletId>', 'Droplet ID')
1121
+ .action(async function(this: Command, opts) {
1122
+ try {
1123
+ const client = getClient();
1124
+ const result = await client.createFloatingIP({
1125
+ region: opts.region,
1126
+ droplet_id: opts.dropletId ? parseInt(opts.dropletId) : undefined,
1127
+ });
1128
+ success('Floating IP created!');
1129
+ print(result.floating_ip, getFormat(this));
1130
+ } catch (err) {
1131
+ error(String(err));
1132
+ process.exit(1);
1133
+ }
1134
+ });
1135
+
1136
+ floatingIpCmd
1137
+ .command('delete <ip>')
1138
+ .description('Delete a floating IP')
1139
+ .action(async function(this: Command, ip: string) {
1140
+ try {
1141
+ const client = getClient();
1142
+ await client.deleteFloatingIP(ip);
1143
+ success('Floating IP deleted!');
1144
+ } catch (err) {
1145
+ error(String(err));
1146
+ process.exit(1);
1147
+ }
1148
+ });
1149
+
1150
+ // ============================================
1151
+ // VPC Commands
1152
+ // ============================================
1153
+ const vpcCmd = program
1154
+ .command('vpc')
1155
+ .description('VPC operations');
1156
+
1157
+ vpcCmd
1158
+ .command('list')
1159
+ .description('List VPCs')
1160
+ .action(async function(this: Command) {
1161
+ try {
1162
+ const client = getClient();
1163
+ const result = await client.listVPCs();
1164
+ print(result.vpcs, getFormat(this));
1165
+ } catch (err) {
1166
+ error(String(err));
1167
+ process.exit(1);
1168
+ }
1169
+ });
1170
+
1171
+ vpcCmd
1172
+ .command('get <vpcId>')
1173
+ .description('Get VPC details')
1174
+ .action(async function(this: Command, vpcId: string) {
1175
+ try {
1176
+ const client = getClient();
1177
+ const result = await client.getVPC(vpcId);
1178
+ print(result.vpc, getFormat(this));
1179
+ } catch (err) {
1180
+ error(String(err));
1181
+ process.exit(1);
1182
+ }
1183
+ });
1184
+
1185
+ vpcCmd
1186
+ .command('create')
1187
+ .description('Create a VPC')
1188
+ .requiredOption('-n, --name <name>', 'VPC name')
1189
+ .requiredOption('-r, --region <region>', 'Region slug')
1190
+ .option('-d, --description <description>', 'Description')
1191
+ .option('--ip-range <range>', 'IP range')
1192
+ .action(async function(this: Command, opts) {
1193
+ try {
1194
+ const client = getClient();
1195
+ const result = await client.createVPC({
1196
+ name: opts.name,
1197
+ region: opts.region,
1198
+ description: opts.description,
1199
+ ip_range: opts.ipRange,
1200
+ });
1201
+ success('VPC created!');
1202
+ print(result.vpc, getFormat(this));
1203
+ } catch (err) {
1204
+ error(String(err));
1205
+ process.exit(1);
1206
+ }
1207
+ });
1208
+
1209
+ vpcCmd
1210
+ .command('delete <vpcId>')
1211
+ .description('Delete a VPC')
1212
+ .action(async function(this: Command, vpcId: string) {
1213
+ try {
1214
+ const client = getClient();
1215
+ await client.deleteVPC(vpcId);
1216
+ success('VPC deleted!');
1217
+ } catch (err) {
1218
+ error(String(err));
1219
+ process.exit(1);
1220
+ }
1221
+ });
1222
+
1223
+ // ============================================
1224
+ // Action Commands
1225
+ // ============================================
1226
+ const actionCmd = program
1227
+ .command('action')
1228
+ .description('Action operations');
1229
+
1230
+ actionCmd
1231
+ .command('list')
1232
+ .description('List all actions')
1233
+ .option('--page <page>', 'Page number')
1234
+ .option('--per-page <count>', 'Items per page')
1235
+ .action(async function(this: Command, opts) {
1236
+ try {
1237
+ const client = getClient();
1238
+ const result = await client.listActions({
1239
+ page: opts.page ? parseInt(opts.page) : undefined,
1240
+ per_page: opts.perPage ? parseInt(opts.perPage) : undefined,
1241
+ });
1242
+ print(result.actions, getFormat(this));
1243
+ } catch (err) {
1244
+ error(String(err));
1245
+ process.exit(1);
1246
+ }
1247
+ });
1248
+
1249
+ actionCmd
1250
+ .command('get <actionId>')
1251
+ .description('Get action details')
1252
+ .action(async function(this: Command, actionId: string) {
1253
+ try {
1254
+ const client = getClient();
1255
+ const result = await client.getAction(parseInt(actionId));
1256
+ print(result.action, getFormat(this));
1257
+ } catch (err) {
1258
+ error(String(err));
1259
+ process.exit(1);
1260
+ }
1261
+ });
1262
+
1263
+ // Parse and execute
1264
+ program.parse();