@hasna/connectors 0.6.0 → 0.7.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 (411) hide show
  1. package/bin/index.js +181 -6
  2. package/bin/mcp.js +162 -1
  3. package/bin/serve.js +180 -5
  4. package/connectors/connect-activecampaign/.env.example +11 -0
  5. package/connectors/connect-activecampaign/CLAUDE.md +68 -0
  6. package/connectors/connect-activecampaign/README.md +193 -0
  7. package/connectors/connect-activecampaign/package.json +53 -0
  8. package/connectors/connect-activecampaign/scripts/release.ts +179 -0
  9. package/connectors/connect-activecampaign/src/api/accounts.ts +44 -0
  10. package/connectors/connect-activecampaign/src/api/automations.ts +32 -0
  11. package/connectors/connect-activecampaign/src/api/campaigns.ts +30 -0
  12. package/connectors/connect-activecampaign/src/api/client.ts +183 -0
  13. package/connectors/connect-activecampaign/src/api/contacts.ts +64 -0
  14. package/connectors/connect-activecampaign/src/api/deals.ts +58 -0
  15. package/connectors/connect-activecampaign/src/api/index.ts +70 -0
  16. package/connectors/connect-activecampaign/src/api/lists.ts +30 -0
  17. package/connectors/connect-activecampaign/src/api/notes.ts +22 -0
  18. package/connectors/connect-activecampaign/src/api/tags.ts +34 -0
  19. package/connectors/connect-activecampaign/src/api/webhooks.ts +29 -0
  20. package/connectors/connect-activecampaign/src/cli/index.ts +1027 -0
  21. package/connectors/connect-activecampaign/src/index.ts +114 -0
  22. package/connectors/connect-activecampaign/src/types/index.ts +589 -0
  23. package/connectors/connect-activecampaign/src/utils/auth.ts +274 -0
  24. package/connectors/connect-activecampaign/src/utils/bulk.ts +212 -0
  25. package/connectors/connect-activecampaign/src/utils/config.ts +325 -0
  26. package/connectors/connect-activecampaign/src/utils/output.ts +175 -0
  27. package/connectors/connect-activecampaign/src/utils/settings.ts +114 -0
  28. package/connectors/connect-activecampaign/src/utils/storage.ts +198 -0
  29. package/connectors/connect-activecampaign/tsconfig.json +16 -0
  30. package/connectors/connect-adobe/.env.example +11 -0
  31. package/connectors/connect-adobe/CLAUDE.md +68 -0
  32. package/connectors/connect-adobe/README.md +193 -0
  33. package/connectors/connect-adobe/package.json +53 -0
  34. package/connectors/connect-adobe/scripts/release.ts +179 -0
  35. package/connectors/connect-adobe/src/api/assets.ts +31 -0
  36. package/connectors/connect-adobe/src/api/client.ts +276 -0
  37. package/connectors/connect-adobe/src/api/index.ts +48 -0
  38. package/connectors/connect-adobe/src/api/jobs.ts +44 -0
  39. package/connectors/connect-adobe/src/api/operations.ts +202 -0
  40. package/connectors/connect-adobe/src/cli/index.ts +544 -0
  41. package/connectors/connect-adobe/src/index.ts +103 -0
  42. package/connectors/connect-adobe/src/types/index.ts +320 -0
  43. package/connectors/connect-adobe/src/utils/auth.ts +274 -0
  44. package/connectors/connect-adobe/src/utils/bulk.ts +212 -0
  45. package/connectors/connect-adobe/src/utils/config.ts +326 -0
  46. package/connectors/connect-adobe/src/utils/output.ts +175 -0
  47. package/connectors/connect-adobe/src/utils/settings.ts +114 -0
  48. package/connectors/connect-adobe/src/utils/storage.ts +198 -0
  49. package/connectors/connect-adobe/tsconfig.json +16 -0
  50. package/connectors/connect-auth0/.env.example +11 -0
  51. package/connectors/connect-auth0/CLAUDE.md +272 -0
  52. package/connectors/connect-auth0/README.md +193 -0
  53. package/connectors/connect-auth0/package.json +53 -0
  54. package/connectors/connect-auth0/scripts/release.ts +179 -0
  55. package/connectors/connect-auth0/src/api/client.ts +213 -0
  56. package/connectors/connect-auth0/src/api/example.ts +48 -0
  57. package/connectors/connect-auth0/src/api/index.ts +51 -0
  58. package/connectors/connect-auth0/src/cli/index.ts +254 -0
  59. package/connectors/connect-auth0/src/index.ts +103 -0
  60. package/connectors/connect-auth0/src/types/index.ts +237 -0
  61. package/connectors/connect-auth0/src/utils/auth.ts +274 -0
  62. package/connectors/connect-auth0/src/utils/bulk.ts +212 -0
  63. package/connectors/connect-auth0/src/utils/config.ts +326 -0
  64. package/connectors/connect-auth0/src/utils/output.ts +175 -0
  65. package/connectors/connect-auth0/src/utils/settings.ts +114 -0
  66. package/connectors/connect-auth0/src/utils/storage.ts +198 -0
  67. package/connectors/connect-auth0/tsconfig.json +16 -0
  68. package/connectors/connect-bamboohr/.env.example +11 -0
  69. package/connectors/connect-bamboohr/CLAUDE.md +272 -0
  70. package/connectors/connect-bamboohr/README.md +193 -0
  71. package/connectors/connect-bamboohr/package.json +51 -0
  72. package/connectors/connect-bamboohr/scripts/release.ts +179 -0
  73. package/connectors/connect-bamboohr/src/api/client.ts +213 -0
  74. package/connectors/connect-bamboohr/src/api/example.ts +48 -0
  75. package/connectors/connect-bamboohr/src/api/index.ts +51 -0
  76. package/connectors/connect-bamboohr/src/cli/index.ts +254 -0
  77. package/connectors/connect-bamboohr/src/index.ts +103 -0
  78. package/connectors/connect-bamboohr/src/types/index.ts +237 -0
  79. package/connectors/connect-bamboohr/src/utils/auth.ts +274 -0
  80. package/connectors/connect-bamboohr/src/utils/bulk.ts +212 -0
  81. package/connectors/connect-bamboohr/src/utils/config.ts +326 -0
  82. package/connectors/connect-bamboohr/src/utils/output.ts +175 -0
  83. package/connectors/connect-bamboohr/src/utils/settings.ts +114 -0
  84. package/connectors/connect-bamboohr/src/utils/storage.ts +198 -0
  85. package/connectors/connect-bamboohr/tsconfig.json +16 -0
  86. package/connectors/connect-bannerbear/.env.example +11 -0
  87. package/connectors/connect-bannerbear/CLAUDE.md +272 -0
  88. package/connectors/connect-bannerbear/README.md +193 -0
  89. package/connectors/connect-bannerbear/package.json +51 -0
  90. package/connectors/connect-bannerbear/scripts/release.ts +179 -0
  91. package/connectors/connect-bannerbear/src/api/client.ts +213 -0
  92. package/connectors/connect-bannerbear/src/api/example.ts +48 -0
  93. package/connectors/connect-bannerbear/src/api/index.ts +51 -0
  94. package/connectors/connect-bannerbear/src/cli/index.ts +254 -0
  95. package/connectors/connect-bannerbear/src/index.ts +103 -0
  96. package/connectors/connect-bannerbear/src/types/index.ts +237 -0
  97. package/connectors/connect-bannerbear/src/utils/auth.ts +274 -0
  98. package/connectors/connect-bannerbear/src/utils/bulk.ts +212 -0
  99. package/connectors/connect-bannerbear/src/utils/config.ts +326 -0
  100. package/connectors/connect-bannerbear/src/utils/output.ts +175 -0
  101. package/connectors/connect-bannerbear/src/utils/settings.ts +114 -0
  102. package/connectors/connect-bannerbear/src/utils/storage.ts +198 -0
  103. package/connectors/connect-bannerbear/tsconfig.json +16 -0
  104. package/connectors/connect-brevo/.env.example +11 -0
  105. package/connectors/connect-brevo/CLAUDE.md +272 -0
  106. package/connectors/connect-brevo/README.md +193 -0
  107. package/connectors/connect-brevo/package.json +51 -0
  108. package/connectors/connect-brevo/scripts/release.ts +179 -0
  109. package/connectors/connect-brevo/src/api/client.ts +213 -0
  110. package/connectors/connect-brevo/src/api/example.ts +48 -0
  111. package/connectors/connect-brevo/src/api/index.ts +51 -0
  112. package/connectors/connect-brevo/src/cli/index.ts +254 -0
  113. package/connectors/connect-brevo/src/index.ts +103 -0
  114. package/connectors/connect-brevo/src/types/index.ts +237 -0
  115. package/connectors/connect-brevo/src/utils/auth.ts +274 -0
  116. package/connectors/connect-brevo/src/utils/bulk.ts +212 -0
  117. package/connectors/connect-brevo/src/utils/config.ts +326 -0
  118. package/connectors/connect-brevo/src/utils/output.ts +175 -0
  119. package/connectors/connect-brevo/src/utils/settings.ts +114 -0
  120. package/connectors/connect-brevo/src/utils/storage.ts +198 -0
  121. package/connectors/connect-brevo/tsconfig.json +16 -0
  122. package/connectors/connect-coingecko/.env.example +11 -0
  123. package/connectors/connect-coingecko/CLAUDE.md +272 -0
  124. package/connectors/connect-coingecko/README.md +193 -0
  125. package/connectors/connect-coingecko/package.json +51 -0
  126. package/connectors/connect-coingecko/scripts/release.ts +179 -0
  127. package/connectors/connect-coingecko/src/api/client.ts +213 -0
  128. package/connectors/connect-coingecko/src/api/example.ts +48 -0
  129. package/connectors/connect-coingecko/src/api/index.ts +51 -0
  130. package/connectors/connect-coingecko/src/cli/index.ts +254 -0
  131. package/connectors/connect-coingecko/src/index.ts +103 -0
  132. package/connectors/connect-coingecko/src/types/index.ts +237 -0
  133. package/connectors/connect-coingecko/src/utils/auth.ts +274 -0
  134. package/connectors/connect-coingecko/src/utils/bulk.ts +212 -0
  135. package/connectors/connect-coingecko/src/utils/config.ts +326 -0
  136. package/connectors/connect-coingecko/src/utils/output.ts +175 -0
  137. package/connectors/connect-coingecko/src/utils/settings.ts +114 -0
  138. package/connectors/connect-coingecko/src/utils/storage.ts +198 -0
  139. package/connectors/connect-coingecko/tsconfig.json +16 -0
  140. package/connectors/connect-customerio/.env.example +11 -0
  141. package/connectors/connect-customerio/CLAUDE.md +272 -0
  142. package/connectors/connect-customerio/README.md +193 -0
  143. package/connectors/connect-customerio/package.json +51 -0
  144. package/connectors/connect-customerio/scripts/release.ts +179 -0
  145. package/connectors/connect-customerio/src/api/client.ts +213 -0
  146. package/connectors/connect-customerio/src/api/example.ts +48 -0
  147. package/connectors/connect-customerio/src/api/index.ts +51 -0
  148. package/connectors/connect-customerio/src/cli/index.ts +254 -0
  149. package/connectors/connect-customerio/src/index.ts +103 -0
  150. package/connectors/connect-customerio/src/types/index.ts +237 -0
  151. package/connectors/connect-customerio/src/utils/auth.ts +274 -0
  152. package/connectors/connect-customerio/src/utils/bulk.ts +212 -0
  153. package/connectors/connect-customerio/src/utils/config.ts +326 -0
  154. package/connectors/connect-customerio/src/utils/output.ts +175 -0
  155. package/connectors/connect-customerio/src/utils/settings.ts +114 -0
  156. package/connectors/connect-customerio/src/utils/storage.ts +198 -0
  157. package/connectors/connect-customerio/tsconfig.json +16 -0
  158. package/connectors/connect-giphy/.env.example +11 -0
  159. package/connectors/connect-giphy/CLAUDE.md +272 -0
  160. package/connectors/connect-giphy/README.md +193 -0
  161. package/connectors/connect-giphy/package.json +51 -0
  162. package/connectors/connect-giphy/scripts/release.ts +179 -0
  163. package/connectors/connect-giphy/src/api/client.ts +213 -0
  164. package/connectors/connect-giphy/src/api/example.ts +48 -0
  165. package/connectors/connect-giphy/src/api/index.ts +51 -0
  166. package/connectors/connect-giphy/src/cli/index.ts +254 -0
  167. package/connectors/connect-giphy/src/index.ts +103 -0
  168. package/connectors/connect-giphy/src/types/index.ts +237 -0
  169. package/connectors/connect-giphy/src/utils/auth.ts +274 -0
  170. package/connectors/connect-giphy/src/utils/bulk.ts +212 -0
  171. package/connectors/connect-giphy/src/utils/config.ts +326 -0
  172. package/connectors/connect-giphy/src/utils/output.ts +175 -0
  173. package/connectors/connect-giphy/src/utils/settings.ts +114 -0
  174. package/connectors/connect-giphy/src/utils/storage.ts +198 -0
  175. package/connectors/connect-giphy/tsconfig.json +16 -0
  176. package/connectors/connect-gitlab/.env.example +11 -0
  177. package/connectors/connect-gitlab/CLAUDE.md +165 -0
  178. package/connectors/connect-gitlab/README.md +193 -0
  179. package/connectors/connect-gitlab/package.json +53 -0
  180. package/connectors/connect-gitlab/src/api/client.ts +234 -0
  181. package/connectors/connect-gitlab/src/api/index.ts +858 -0
  182. package/connectors/connect-gitlab/src/cli/index.ts +909 -0
  183. package/connectors/connect-gitlab/src/index.ts +24 -0
  184. package/connectors/connect-gitlab/src/types/index.ts +674 -0
  185. package/connectors/connect-gitlab/src/utils/config.ts +208 -0
  186. package/connectors/connect-gitlab/src/utils/output.ts +119 -0
  187. package/connectors/connect-gitlab/tsconfig.json +16 -0
  188. package/connectors/connect-homeassistant/.env.example +11 -0
  189. package/connectors/connect-homeassistant/CLAUDE.md +272 -0
  190. package/connectors/connect-homeassistant/README.md +193 -0
  191. package/connectors/connect-homeassistant/package.json +51 -0
  192. package/connectors/connect-homeassistant/scripts/release.ts +179 -0
  193. package/connectors/connect-homeassistant/src/api/client.ts +213 -0
  194. package/connectors/connect-homeassistant/src/api/example.ts +48 -0
  195. package/connectors/connect-homeassistant/src/api/index.ts +51 -0
  196. package/connectors/connect-homeassistant/src/cli/index.ts +254 -0
  197. package/connectors/connect-homeassistant/src/index.ts +103 -0
  198. package/connectors/connect-homeassistant/src/types/index.ts +237 -0
  199. package/connectors/connect-homeassistant/src/utils/auth.ts +274 -0
  200. package/connectors/connect-homeassistant/src/utils/bulk.ts +212 -0
  201. package/connectors/connect-homeassistant/src/utils/config.ts +326 -0
  202. package/connectors/connect-homeassistant/src/utils/output.ts +175 -0
  203. package/connectors/connect-homeassistant/src/utils/settings.ts +114 -0
  204. package/connectors/connect-homeassistant/src/utils/storage.ts +198 -0
  205. package/connectors/connect-homeassistant/tsconfig.json +16 -0
  206. package/connectors/connect-imgur/.env.example +11 -0
  207. package/connectors/connect-imgur/CLAUDE.md +272 -0
  208. package/connectors/connect-imgur/README.md +193 -0
  209. package/connectors/connect-imgur/package.json +51 -0
  210. package/connectors/connect-imgur/scripts/release.ts +179 -0
  211. package/connectors/connect-imgur/src/api/client.ts +213 -0
  212. package/connectors/connect-imgur/src/api/example.ts +48 -0
  213. package/connectors/connect-imgur/src/api/index.ts +51 -0
  214. package/connectors/connect-imgur/src/cli/index.ts +254 -0
  215. package/connectors/connect-imgur/src/index.ts +103 -0
  216. package/connectors/connect-imgur/src/types/index.ts +237 -0
  217. package/connectors/connect-imgur/src/utils/auth.ts +274 -0
  218. package/connectors/connect-imgur/src/utils/bulk.ts +212 -0
  219. package/connectors/connect-imgur/src/utils/config.ts +326 -0
  220. package/connectors/connect-imgur/src/utils/output.ts +175 -0
  221. package/connectors/connect-imgur/src/utils/settings.ts +114 -0
  222. package/connectors/connect-imgur/src/utils/storage.ts +198 -0
  223. package/connectors/connect-imgur/tsconfig.json +16 -0
  224. package/connectors/connect-klaviyo/.env.example +11 -0
  225. package/connectors/connect-klaviyo/CLAUDE.md +272 -0
  226. package/connectors/connect-klaviyo/README.md +193 -0
  227. package/connectors/connect-klaviyo/package.json +51 -0
  228. package/connectors/connect-klaviyo/scripts/release.ts +179 -0
  229. package/connectors/connect-klaviyo/src/api/client.ts +213 -0
  230. package/connectors/connect-klaviyo/src/api/example.ts +48 -0
  231. package/connectors/connect-klaviyo/src/api/index.ts +51 -0
  232. package/connectors/connect-klaviyo/src/cli/index.ts +254 -0
  233. package/connectors/connect-klaviyo/src/index.ts +103 -0
  234. package/connectors/connect-klaviyo/src/types/index.ts +237 -0
  235. package/connectors/connect-klaviyo/src/utils/auth.ts +274 -0
  236. package/connectors/connect-klaviyo/src/utils/bulk.ts +212 -0
  237. package/connectors/connect-klaviyo/src/utils/config.ts +326 -0
  238. package/connectors/connect-klaviyo/src/utils/output.ts +175 -0
  239. package/connectors/connect-klaviyo/src/utils/settings.ts +114 -0
  240. package/connectors/connect-klaviyo/src/utils/storage.ts +198 -0
  241. package/connectors/connect-klaviyo/tsconfig.json +16 -0
  242. package/connectors/connect-launchdarkly/.env.example +11 -0
  243. package/connectors/connect-launchdarkly/CLAUDE.md +272 -0
  244. package/connectors/connect-launchdarkly/README.md +193 -0
  245. package/connectors/connect-launchdarkly/package.json +52 -0
  246. package/connectors/connect-launchdarkly/scripts/release.ts +179 -0
  247. package/connectors/connect-launchdarkly/src/api/client.ts +213 -0
  248. package/connectors/connect-launchdarkly/src/api/example.ts +48 -0
  249. package/connectors/connect-launchdarkly/src/api/index.ts +51 -0
  250. package/connectors/connect-launchdarkly/src/cli/index.ts +254 -0
  251. package/connectors/connect-launchdarkly/src/index.ts +103 -0
  252. package/connectors/connect-launchdarkly/src/types/index.ts +237 -0
  253. package/connectors/connect-launchdarkly/src/utils/auth.ts +274 -0
  254. package/connectors/connect-launchdarkly/src/utils/bulk.ts +212 -0
  255. package/connectors/connect-launchdarkly/src/utils/config.ts +326 -0
  256. package/connectors/connect-launchdarkly/src/utils/output.ts +175 -0
  257. package/connectors/connect-launchdarkly/src/utils/settings.ts +114 -0
  258. package/connectors/connect-launchdarkly/src/utils/storage.ts +198 -0
  259. package/connectors/connect-launchdarkly/tsconfig.json +16 -0
  260. package/connectors/connect-mastodon/.env.example +11 -0
  261. package/connectors/connect-mastodon/CLAUDE.md +272 -0
  262. package/connectors/connect-mastodon/README.md +193 -0
  263. package/connectors/connect-mastodon/package.json +51 -0
  264. package/connectors/connect-mastodon/scripts/release.ts +179 -0
  265. package/connectors/connect-mastodon/src/api/client.ts +213 -0
  266. package/connectors/connect-mastodon/src/api/example.ts +48 -0
  267. package/connectors/connect-mastodon/src/api/index.ts +51 -0
  268. package/connectors/connect-mastodon/src/cli/index.ts +254 -0
  269. package/connectors/connect-mastodon/src/index.ts +103 -0
  270. package/connectors/connect-mastodon/src/types/index.ts +237 -0
  271. package/connectors/connect-mastodon/src/utils/auth.ts +274 -0
  272. package/connectors/connect-mastodon/src/utils/bulk.ts +212 -0
  273. package/connectors/connect-mastodon/src/utils/config.ts +326 -0
  274. package/connectors/connect-mastodon/src/utils/output.ts +175 -0
  275. package/connectors/connect-mastodon/src/utils/settings.ts +114 -0
  276. package/connectors/connect-mastodon/src/utils/storage.ts +198 -0
  277. package/connectors/connect-mastodon/tsconfig.json +16 -0
  278. package/connectors/connect-medium/.env.example +11 -0
  279. package/connectors/connect-medium/CLAUDE.md +272 -0
  280. package/connectors/connect-medium/README.md +193 -0
  281. package/connectors/connect-medium/package.json +51 -0
  282. package/connectors/connect-medium/scripts/release.ts +179 -0
  283. package/connectors/connect-medium/src/api/client.ts +213 -0
  284. package/connectors/connect-medium/src/api/example.ts +48 -0
  285. package/connectors/connect-medium/src/api/index.ts +51 -0
  286. package/connectors/connect-medium/src/cli/index.ts +254 -0
  287. package/connectors/connect-medium/src/index.ts +103 -0
  288. package/connectors/connect-medium/src/types/index.ts +237 -0
  289. package/connectors/connect-medium/src/utils/auth.ts +274 -0
  290. package/connectors/connect-medium/src/utils/bulk.ts +212 -0
  291. package/connectors/connect-medium/src/utils/config.ts +326 -0
  292. package/connectors/connect-medium/src/utils/output.ts +175 -0
  293. package/connectors/connect-medium/src/utils/settings.ts +114 -0
  294. package/connectors/connect-medium/src/utils/storage.ts +198 -0
  295. package/connectors/connect-medium/tsconfig.json +16 -0
  296. package/connectors/connect-okta/.env.example +11 -0
  297. package/connectors/connect-okta/CLAUDE.md +272 -0
  298. package/connectors/connect-okta/README.md +193 -0
  299. package/connectors/connect-okta/package.json +51 -0
  300. package/connectors/connect-okta/scripts/release.ts +179 -0
  301. package/connectors/connect-okta/src/api/client.ts +213 -0
  302. package/connectors/connect-okta/src/api/example.ts +48 -0
  303. package/connectors/connect-okta/src/api/index.ts +51 -0
  304. package/connectors/connect-okta/src/cli/index.ts +254 -0
  305. package/connectors/connect-okta/src/index.ts +103 -0
  306. package/connectors/connect-okta/src/types/index.ts +237 -0
  307. package/connectors/connect-okta/src/utils/auth.ts +274 -0
  308. package/connectors/connect-okta/src/utils/bulk.ts +212 -0
  309. package/connectors/connect-okta/src/utils/config.ts +326 -0
  310. package/connectors/connect-okta/src/utils/output.ts +175 -0
  311. package/connectors/connect-okta/src/utils/settings.ts +114 -0
  312. package/connectors/connect-okta/src/utils/storage.ts +198 -0
  313. package/connectors/connect-okta/tsconfig.json +16 -0
  314. package/connectors/connect-pagerduty/.env.example +11 -0
  315. package/connectors/connect-pagerduty/CLAUDE.md +272 -0
  316. package/connectors/connect-pagerduty/README.md +193 -0
  317. package/connectors/connect-pagerduty/package.json +53 -0
  318. package/connectors/connect-pagerduty/scripts/release.ts +179 -0
  319. package/connectors/connect-pagerduty/src/api/client.ts +213 -0
  320. package/connectors/connect-pagerduty/src/api/example.ts +48 -0
  321. package/connectors/connect-pagerduty/src/api/index.ts +51 -0
  322. package/connectors/connect-pagerduty/src/cli/index.ts +254 -0
  323. package/connectors/connect-pagerduty/src/index.ts +103 -0
  324. package/connectors/connect-pagerduty/src/types/index.ts +237 -0
  325. package/connectors/connect-pagerduty/src/utils/auth.ts +274 -0
  326. package/connectors/connect-pagerduty/src/utils/bulk.ts +212 -0
  327. package/connectors/connect-pagerduty/src/utils/config.ts +326 -0
  328. package/connectors/connect-pagerduty/src/utils/output.ts +175 -0
  329. package/connectors/connect-pagerduty/src/utils/settings.ts +114 -0
  330. package/connectors/connect-pagerduty/src/utils/storage.ts +198 -0
  331. package/connectors/connect-pagerduty/tsconfig.json +16 -0
  332. package/connectors/connect-plaid/.env.example +11 -0
  333. package/connectors/connect-plaid/CLAUDE.md +128 -0
  334. package/connectors/connect-plaid/README.md +193 -0
  335. package/connectors/connect-plaid/package.json +51 -0
  336. package/connectors/connect-plaid/src/api/client.ts +142 -0
  337. package/connectors/connect-plaid/src/api/index.ts +303 -0
  338. package/connectors/connect-plaid/src/cli/index.ts +564 -0
  339. package/connectors/connect-plaid/src/index.ts +23 -0
  340. package/connectors/connect-plaid/src/types/index.ts +348 -0
  341. package/connectors/connect-plaid/src/utils/config.ts +125 -0
  342. package/connectors/connect-plaid/src/utils/output.ts +119 -0
  343. package/connectors/connect-plaid/tsconfig.json +16 -0
  344. package/connectors/connect-producthunt/.env.example +11 -0
  345. package/connectors/connect-producthunt/CLAUDE.md +272 -0
  346. package/connectors/connect-producthunt/README.md +193 -0
  347. package/connectors/connect-producthunt/package.json +51 -0
  348. package/connectors/connect-producthunt/scripts/release.ts +179 -0
  349. package/connectors/connect-producthunt/src/api/client.ts +213 -0
  350. package/connectors/connect-producthunt/src/api/example.ts +48 -0
  351. package/connectors/connect-producthunt/src/api/index.ts +51 -0
  352. package/connectors/connect-producthunt/src/cli/index.ts +254 -0
  353. package/connectors/connect-producthunt/src/index.ts +103 -0
  354. package/connectors/connect-producthunt/src/types/index.ts +237 -0
  355. package/connectors/connect-producthunt/src/utils/auth.ts +274 -0
  356. package/connectors/connect-producthunt/src/utils/bulk.ts +212 -0
  357. package/connectors/connect-producthunt/src/utils/config.ts +326 -0
  358. package/connectors/connect-producthunt/src/utils/output.ts +175 -0
  359. package/connectors/connect-producthunt/src/utils/settings.ts +114 -0
  360. package/connectors/connect-producthunt/src/utils/storage.ts +198 -0
  361. package/connectors/connect-producthunt/tsconfig.json +16 -0
  362. package/connectors/connect-spotify/.env.example +11 -0
  363. package/connectors/connect-spotify/CLAUDE.md +272 -0
  364. package/connectors/connect-spotify/README.md +193 -0
  365. package/connectors/connect-spotify/package.json +51 -0
  366. package/connectors/connect-spotify/scripts/release.ts +179 -0
  367. package/connectors/connect-spotify/src/api/client.ts +213 -0
  368. package/connectors/connect-spotify/src/api/example.ts +48 -0
  369. package/connectors/connect-spotify/src/api/index.ts +51 -0
  370. package/connectors/connect-spotify/src/cli/index.ts +254 -0
  371. package/connectors/connect-spotify/src/index.ts +103 -0
  372. package/connectors/connect-spotify/src/types/index.ts +237 -0
  373. package/connectors/connect-spotify/src/utils/auth.ts +274 -0
  374. package/connectors/connect-spotify/src/utils/bulk.ts +212 -0
  375. package/connectors/connect-spotify/src/utils/config.ts +326 -0
  376. package/connectors/connect-spotify/src/utils/output.ts +175 -0
  377. package/connectors/connect-spotify/src/utils/settings.ts +114 -0
  378. package/connectors/connect-spotify/src/utils/storage.ts +198 -0
  379. package/connectors/connect-spotify/tsconfig.json +16 -0
  380. package/connectors/connect-uptimerobot/.env.example +11 -0
  381. package/connectors/connect-uptimerobot/CLAUDE.md +272 -0
  382. package/connectors/connect-uptimerobot/README.md +193 -0
  383. package/connectors/connect-uptimerobot/package.json +52 -0
  384. package/connectors/connect-uptimerobot/scripts/release.ts +179 -0
  385. package/connectors/connect-uptimerobot/src/api/client.ts +213 -0
  386. package/connectors/connect-uptimerobot/src/api/example.ts +48 -0
  387. package/connectors/connect-uptimerobot/src/api/index.ts +51 -0
  388. package/connectors/connect-uptimerobot/src/cli/index.ts +254 -0
  389. package/connectors/connect-uptimerobot/src/index.ts +103 -0
  390. package/connectors/connect-uptimerobot/src/types/index.ts +237 -0
  391. package/connectors/connect-uptimerobot/src/utils/auth.ts +274 -0
  392. package/connectors/connect-uptimerobot/src/utils/bulk.ts +212 -0
  393. package/connectors/connect-uptimerobot/src/utils/config.ts +326 -0
  394. package/connectors/connect-uptimerobot/src/utils/output.ts +175 -0
  395. package/connectors/connect-uptimerobot/src/utils/settings.ts +114 -0
  396. package/connectors/connect-uptimerobot/src/utils/storage.ts +198 -0
  397. package/connectors/connect-uptimerobot/tsconfig.json +16 -0
  398. package/connectors/connect-wise/.env.example +11 -0
  399. package/connectors/connect-wise/CLAUDE.md +128 -0
  400. package/connectors/connect-wise/README.md +193 -0
  401. package/connectors/connect-wise/package.json +52 -0
  402. package/connectors/connect-wise/src/api/client.ts +151 -0
  403. package/connectors/connect-wise/src/api/index.ts +279 -0
  404. package/connectors/connect-wise/src/cli/index.ts +577 -0
  405. package/connectors/connect-wise/src/index.ts +21 -0
  406. package/connectors/connect-wise/src/types/index.ts +353 -0
  407. package/connectors/connect-wise/src/utils/config.ts +209 -0
  408. package/connectors/connect-wise/src/utils/output.ts +119 -0
  409. package/connectors/connect-wise/tsconfig.json +16 -0
  410. package/dist/index.js +161 -0
  411. package/package.json +1 -1
@@ -0,0 +1,909 @@
1
+ #!/usr/bin/env bun
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import { GitLab } from '../api';
5
+ import {
6
+ getAccessToken,
7
+ setAccessToken,
8
+ getBaseUrl,
9
+ setBaseUrl,
10
+ clearConfig,
11
+ getConfigDir,
12
+ setProfileOverride,
13
+ getCurrentProfile,
14
+ setCurrentProfile,
15
+ listProfiles,
16
+ createProfile,
17
+ deleteProfile,
18
+ profileExists,
19
+ loadProfile,
20
+ } from '../utils/config';
21
+ import type { OutputFormat } from '../utils/output';
22
+ import { success, error, info, print } from '../utils/output';
23
+
24
+ const CONNECTOR_NAME = 'connect-gitlab';
25
+ const VERSION = '0.0.1';
26
+
27
+ const program = new Command();
28
+
29
+ program
30
+ .name(CONNECTOR_NAME)
31
+ .description('GitLab connector - Manage projects, issues, merge requests, pipelines, and more')
32
+ .version(VERSION)
33
+ .option('-t, --token <token>', 'Access token (overrides config)')
34
+ .option('-u, --url <url>', 'GitLab URL (overrides config)')
35
+ .option('-f, --format <format>', 'Output format (json, pretty)', 'pretty')
36
+ .option('-p, --profile <profile>', 'Use a specific profile')
37
+ .hook('preAction', (thisCommand) => {
38
+ const opts = thisCommand.opts();
39
+ if (opts.profile) {
40
+ if (!profileExists(opts.profile)) {
41
+ error(`Profile "${opts.profile}" does not exist. Create it with "${CONNECTOR_NAME} profile create ${opts.profile}"`);
42
+ process.exit(1);
43
+ }
44
+ setProfileOverride(opts.profile);
45
+ }
46
+ if (opts.token) {
47
+ process.env.GITLAB_ACCESS_TOKEN = opts.token;
48
+ }
49
+ if (opts.url) {
50
+ process.env.GITLAB_URL = opts.url;
51
+ }
52
+ });
53
+
54
+ function getFormat(cmd: Command): OutputFormat {
55
+ const parent = cmd.parent;
56
+ return (parent?.opts().format || 'pretty') as OutputFormat;
57
+ }
58
+
59
+ function getClient(): GitLab {
60
+ const accessToken = getAccessToken();
61
+ const baseUrl = getBaseUrl();
62
+
63
+ if (!accessToken) {
64
+ error(`No access token configured. Run "${CONNECTOR_NAME} config set-token <token>" or set GITLAB_ACCESS_TOKEN environment variable.`);
65
+ process.exit(1);
66
+ }
67
+ return new GitLab({ accessToken, baseUrl });
68
+ }
69
+
70
+ // ============================================
71
+ // Profile Commands
72
+ // ============================================
73
+ const profileCmd = program
74
+ .command('profile')
75
+ .description('Manage configuration profiles');
76
+
77
+ profileCmd
78
+ .command('list')
79
+ .description('List all profiles')
80
+ .action(() => {
81
+ const profiles = listProfiles();
82
+ const current = getCurrentProfile();
83
+
84
+ if (profiles.length === 0) {
85
+ info('No profiles found. Use "profile create <name>" to create one.');
86
+ return;
87
+ }
88
+
89
+ success(`Profiles:`);
90
+ profiles.forEach(p => {
91
+ const isActive = p === current ? chalk.green(' (active)') : '';
92
+ console.log(` ${p}${isActive}`);
93
+ });
94
+ });
95
+
96
+ profileCmd
97
+ .command('use <name>')
98
+ .description('Switch to a profile')
99
+ .action((name: string) => {
100
+ if (!profileExists(name)) {
101
+ error(`Profile "${name}" does not exist. Create it with "profile create ${name}"`);
102
+ process.exit(1);
103
+ }
104
+ setCurrentProfile(name);
105
+ success(`Switched to profile: ${name}`);
106
+ });
107
+
108
+ profileCmd
109
+ .command('create <name>')
110
+ .description('Create a new profile')
111
+ .option('--token <token>', 'Access token')
112
+ .option('--url <url>', 'GitLab URL')
113
+ .option('--use', 'Switch to this profile after creation')
114
+ .action((name: string, opts) => {
115
+ if (profileExists(name)) {
116
+ error(`Profile "${name}" already exists`);
117
+ process.exit(1);
118
+ }
119
+
120
+ createProfile(name, {
121
+ accessToken: opts.token,
122
+ baseUrl: opts.url,
123
+ });
124
+ success(`Profile "${name}" created`);
125
+
126
+ if (opts.use) {
127
+ setCurrentProfile(name);
128
+ info(`Switched to profile: ${name}`);
129
+ }
130
+ });
131
+
132
+ profileCmd
133
+ .command('delete <name>')
134
+ .description('Delete a profile')
135
+ .action((name: string) => {
136
+ if (name === 'default') {
137
+ error('Cannot delete the default profile');
138
+ process.exit(1);
139
+ }
140
+ if (deleteProfile(name)) {
141
+ success(`Profile "${name}" deleted`);
142
+ } else {
143
+ error(`Profile "${name}" not found`);
144
+ process.exit(1);
145
+ }
146
+ });
147
+
148
+ profileCmd
149
+ .command('show [name]')
150
+ .description('Show profile configuration')
151
+ .action((name?: string) => {
152
+ const profileName = name || getCurrentProfile();
153
+ const config = loadProfile(profileName);
154
+ const active = getCurrentProfile();
155
+
156
+ console.log(chalk.bold(`Profile: ${profileName}${profileName === active ? chalk.green(' (active)') : ''}`));
157
+ info(`Access Token: ${config.accessToken ? `${config.accessToken.substring(0, 8)}...` : chalk.gray('not set')}`);
158
+ info(`URL: ${config.baseUrl || chalk.gray('gitlab.com (default)')}`);
159
+ });
160
+
161
+ // ============================================
162
+ // Config Commands
163
+ // ============================================
164
+ const configCmd = program
165
+ .command('config')
166
+ .description('Manage CLI configuration');
167
+
168
+ configCmd
169
+ .command('set-token <token>')
170
+ .description('Set access token')
171
+ .action((token: string) => {
172
+ setAccessToken(token);
173
+ success(`Access token saved to profile: ${getCurrentProfile()}`);
174
+ });
175
+
176
+ configCmd
177
+ .command('set-url <url>')
178
+ .description('Set GitLab URL (for self-hosted)')
179
+ .action((url: string) => {
180
+ setBaseUrl(url);
181
+ success(`URL saved to profile: ${getCurrentProfile()}`);
182
+ });
183
+
184
+ configCmd
185
+ .command('show')
186
+ .description('Show current configuration')
187
+ .action(() => {
188
+ const profileName = getCurrentProfile();
189
+ const token = getAccessToken();
190
+ const url = getBaseUrl();
191
+
192
+ console.log(chalk.bold(`Active Profile: ${profileName}`));
193
+ info(`Config directory: ${getConfigDir()}`);
194
+ info(`Access Token: ${token ? `${token.substring(0, 8)}...` : chalk.gray('not set')}`);
195
+ info(`URL: ${url || chalk.gray('gitlab.com (default)')}`);
196
+ });
197
+
198
+ configCmd
199
+ .command('clear')
200
+ .description('Clear configuration')
201
+ .action(() => {
202
+ clearConfig();
203
+ success(`Configuration cleared for profile: ${getCurrentProfile()}`);
204
+ });
205
+
206
+ // ============================================
207
+ // User Commands
208
+ // ============================================
209
+ program
210
+ .command('me')
211
+ .description('Get current user info')
212
+ .action(async function(this: Command) {
213
+ try {
214
+ const client = getClient();
215
+ const result = await client.getCurrentUser();
216
+ print(result, getFormat(this));
217
+ } catch (err) {
218
+ error(String(err));
219
+ process.exit(1);
220
+ }
221
+ });
222
+
223
+ // ============================================
224
+ // Projects Commands
225
+ // ============================================
226
+ const projectsCmd = program
227
+ .command('projects')
228
+ .description('Manage projects');
229
+
230
+ projectsCmd
231
+ .command('list')
232
+ .description('List projects')
233
+ .option('--owned', 'Only owned projects')
234
+ .option('--membership', 'Only membership projects')
235
+ .option('--starred', 'Only starred projects')
236
+ .option('--search <query>', 'Search query')
237
+ .option('--visibility <visibility>', 'Visibility (public, internal, private)')
238
+ .option('--per-page <count>', 'Results per page', '20')
239
+ .option('--page <page>', 'Page number', '1')
240
+ .action(async function(this: Command, opts) {
241
+ try {
242
+ const client = getClient();
243
+ const result = await client.listProjects({
244
+ owned: opts.owned,
245
+ membership: opts.membership,
246
+ starred: opts.starred,
247
+ search: opts.search,
248
+ visibility: opts.visibility,
249
+ per_page: parseInt(opts.perPage),
250
+ page: parseInt(opts.page),
251
+ });
252
+ print(result, getFormat(this));
253
+ } catch (err) {
254
+ error(String(err));
255
+ process.exit(1);
256
+ }
257
+ });
258
+
259
+ projectsCmd
260
+ .command('get <projectId>')
261
+ .description('Get a project')
262
+ .action(async function(this: Command, projectId: string) {
263
+ try {
264
+ const client = getClient();
265
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
266
+ const result = await client.getProject(id);
267
+ print(result, getFormat(this));
268
+ } catch (err) {
269
+ error(String(err));
270
+ process.exit(1);
271
+ }
272
+ });
273
+
274
+ projectsCmd
275
+ .command('create')
276
+ .description('Create a project')
277
+ .requiredOption('-n, --name <name>', 'Project name')
278
+ .option('--path <path>', 'Project path')
279
+ .option('--description <description>', 'Project description')
280
+ .option('--visibility <visibility>', 'Visibility (public, internal, private)', 'private')
281
+ .option('--initialize-readme', 'Initialize with README')
282
+ .action(async function(this: Command, opts) {
283
+ try {
284
+ const client = getClient();
285
+ const result = await client.createProject({
286
+ name: opts.name,
287
+ path: opts.path,
288
+ description: opts.description,
289
+ visibility: opts.visibility,
290
+ initialize_with_readme: opts.initializeReadme,
291
+ });
292
+ print(result, getFormat(this));
293
+ success(`Project created: ${result.web_url}`);
294
+ } catch (err) {
295
+ error(String(err));
296
+ process.exit(1);
297
+ }
298
+ });
299
+
300
+ projectsCmd
301
+ .command('delete <projectId>')
302
+ .description('Delete a project')
303
+ .action(async function(this: Command, projectId: string) {
304
+ try {
305
+ const client = getClient();
306
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
307
+ await client.deleteProject(id);
308
+ success(`Project ${projectId} deleted`);
309
+ } catch (err) {
310
+ error(String(err));
311
+ process.exit(1);
312
+ }
313
+ });
314
+
315
+ projectsCmd
316
+ .command('fork <projectId>')
317
+ .description('Fork a project')
318
+ .option('--namespace <namespace>', 'Target namespace')
319
+ .option('--name <name>', 'New project name')
320
+ .action(async function(this: Command, projectId: string, opts) {
321
+ try {
322
+ const client = getClient();
323
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
324
+ const result = await client.forkProject(id, {
325
+ namespace_path: opts.namespace,
326
+ name: opts.name,
327
+ });
328
+ print(result, getFormat(this));
329
+ success(`Project forked: ${result.web_url}`);
330
+ } catch (err) {
331
+ error(String(err));
332
+ process.exit(1);
333
+ }
334
+ });
335
+
336
+ // ============================================
337
+ // Issues Commands
338
+ // ============================================
339
+ const issuesCmd = program
340
+ .command('issues')
341
+ .description('Manage issues');
342
+
343
+ issuesCmd
344
+ .command('list <projectId>')
345
+ .description('List project issues')
346
+ .option('--state <state>', 'State (opened, closed, all)', 'opened')
347
+ .option('--labels <labels>', 'Filter by labels')
348
+ .option('--search <query>', 'Search query')
349
+ .option('--per-page <count>', 'Results per page', '20')
350
+ .option('--page <page>', 'Page number', '1')
351
+ .action(async function(this: Command, projectId: string, opts) {
352
+ try {
353
+ const client = getClient();
354
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
355
+ const result = await client.listIssues(id, {
356
+ state: opts.state,
357
+ labels: opts.labels,
358
+ search: opts.search,
359
+ per_page: parseInt(opts.perPage),
360
+ page: parseInt(opts.page),
361
+ });
362
+ print(result, getFormat(this));
363
+ } catch (err) {
364
+ error(String(err));
365
+ process.exit(1);
366
+ }
367
+ });
368
+
369
+ issuesCmd
370
+ .command('get <projectId> <issueIid>')
371
+ .description('Get an issue')
372
+ .action(async function(this: Command, projectId: string, issueIid: string) {
373
+ try {
374
+ const client = getClient();
375
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
376
+ const result = await client.getIssue(id, parseInt(issueIid));
377
+ print(result, getFormat(this));
378
+ } catch (err) {
379
+ error(String(err));
380
+ process.exit(1);
381
+ }
382
+ });
383
+
384
+ issuesCmd
385
+ .command('create <projectId>')
386
+ .description('Create an issue')
387
+ .requiredOption('-t, --title <title>', 'Issue title')
388
+ .option('-d, --description <description>', 'Issue description')
389
+ .option('--labels <labels>', 'Comma-separated labels')
390
+ .option('--assignee-ids <ids>', 'Comma-separated assignee IDs')
391
+ .action(async function(this: Command, projectId: string, opts) {
392
+ try {
393
+ const client = getClient();
394
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
395
+ const result = await client.createIssue(id, {
396
+ title: opts.title,
397
+ description: opts.description,
398
+ labels: opts.labels,
399
+ assignee_ids: opts.assigneeIds?.split(',').map((i: string) => parseInt(i)),
400
+ });
401
+ print(result, getFormat(this));
402
+ success(`Issue created: ${result.web_url}`);
403
+ } catch (err) {
404
+ error(String(err));
405
+ process.exit(1);
406
+ }
407
+ });
408
+
409
+ issuesCmd
410
+ .command('close <projectId> <issueIid>')
411
+ .description('Close an issue')
412
+ .action(async function(this: Command, projectId: string, issueIid: string) {
413
+ try {
414
+ const client = getClient();
415
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
416
+ await client.updateIssue(id, parseInt(issueIid), { state_event: 'close' });
417
+ success(`Issue #${issueIid} closed`);
418
+ } catch (err) {
419
+ error(String(err));
420
+ process.exit(1);
421
+ }
422
+ });
423
+
424
+ issuesCmd
425
+ .command('reopen <projectId> <issueIid>')
426
+ .description('Reopen an issue')
427
+ .action(async function(this: Command, projectId: string, issueIid: string) {
428
+ try {
429
+ const client = getClient();
430
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
431
+ await client.updateIssue(id, parseInt(issueIid), { state_event: 'reopen' });
432
+ success(`Issue #${issueIid} reopened`);
433
+ } catch (err) {
434
+ error(String(err));
435
+ process.exit(1);
436
+ }
437
+ });
438
+
439
+ // ============================================
440
+ // Merge Requests Commands
441
+ // ============================================
442
+ const mrCmd = program
443
+ .command('mr')
444
+ .description('Manage merge requests');
445
+
446
+ mrCmd
447
+ .command('list <projectId>')
448
+ .description('List merge requests')
449
+ .option('--state <state>', 'State (opened, closed, merged, all)', 'opened')
450
+ .option('--source-branch <branch>', 'Source branch')
451
+ .option('--target-branch <branch>', 'Target branch')
452
+ .option('--search <query>', 'Search query')
453
+ .option('--per-page <count>', 'Results per page', '20')
454
+ .option('--page <page>', 'Page number', '1')
455
+ .action(async function(this: Command, projectId: string, opts) {
456
+ try {
457
+ const client = getClient();
458
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
459
+ const result = await client.listMergeRequests(id, {
460
+ state: opts.state,
461
+ source_branch: opts.sourceBranch,
462
+ target_branch: opts.targetBranch,
463
+ search: opts.search,
464
+ per_page: parseInt(opts.perPage),
465
+ page: parseInt(opts.page),
466
+ });
467
+ print(result, getFormat(this));
468
+ } catch (err) {
469
+ error(String(err));
470
+ process.exit(1);
471
+ }
472
+ });
473
+
474
+ mrCmd
475
+ .command('get <projectId> <mrIid>')
476
+ .description('Get a merge request')
477
+ .action(async function(this: Command, projectId: string, mrIid: string) {
478
+ try {
479
+ const client = getClient();
480
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
481
+ const result = await client.getMergeRequest(id, parseInt(mrIid));
482
+ print(result, getFormat(this));
483
+ } catch (err) {
484
+ error(String(err));
485
+ process.exit(1);
486
+ }
487
+ });
488
+
489
+ mrCmd
490
+ .command('create <projectId>')
491
+ .description('Create a merge request')
492
+ .requiredOption('-s, --source-branch <branch>', 'Source branch')
493
+ .requiredOption('-t, --target-branch <branch>', 'Target branch')
494
+ .requiredOption('--title <title>', 'MR title')
495
+ .option('-d, --description <description>', 'MR description')
496
+ .option('--remove-source-branch', 'Remove source branch on merge')
497
+ .option('--squash', 'Squash commits on merge')
498
+ .action(async function(this: Command, projectId: string, opts) {
499
+ try {
500
+ const client = getClient();
501
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
502
+ const result = await client.createMergeRequest(id, {
503
+ source_branch: opts.sourceBranch,
504
+ target_branch: opts.targetBranch,
505
+ title: opts.title,
506
+ description: opts.description,
507
+ remove_source_branch: opts.removeSourceBranch,
508
+ squash: opts.squash,
509
+ });
510
+ print(result, getFormat(this));
511
+ success(`Merge request created: ${result.web_url}`);
512
+ } catch (err) {
513
+ error(String(err));
514
+ process.exit(1);
515
+ }
516
+ });
517
+
518
+ mrCmd
519
+ .command('merge <projectId> <mrIid>')
520
+ .description('Merge a merge request')
521
+ .option('--squash', 'Squash commits')
522
+ .option('--remove-source-branch', 'Remove source branch')
523
+ .option('--when-pipeline-succeeds', 'Merge when pipeline succeeds')
524
+ .action(async function(this: Command, projectId: string, mrIid: string, opts) {
525
+ try {
526
+ const client = getClient();
527
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
528
+ const result = await client.acceptMergeRequest(id, parseInt(mrIid), {
529
+ squash: opts.squash,
530
+ should_remove_source_branch: opts.removeSourceBranch,
531
+ merge_when_pipeline_succeeds: opts.whenPipelineSucceeds,
532
+ });
533
+ print(result, getFormat(this));
534
+ success(`Merge request !${mrIid} merged`);
535
+ } catch (err) {
536
+ error(String(err));
537
+ process.exit(1);
538
+ }
539
+ });
540
+
541
+ // ============================================
542
+ // Pipelines Commands
543
+ // ============================================
544
+ const pipelinesCmd = program
545
+ .command('pipelines')
546
+ .description('Manage pipelines');
547
+
548
+ pipelinesCmd
549
+ .command('list <projectId>')
550
+ .description('List pipelines')
551
+ .option('--status <status>', 'Status filter')
552
+ .option('--ref <ref>', 'Branch/tag ref')
553
+ .option('--per-page <count>', 'Results per page', '20')
554
+ .option('--page <page>', 'Page number', '1')
555
+ .action(async function(this: Command, projectId: string, opts) {
556
+ try {
557
+ const client = getClient();
558
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
559
+ const result = await client.listPipelines(id, {
560
+ status: opts.status,
561
+ ref: opts.ref,
562
+ per_page: parseInt(opts.perPage),
563
+ page: parseInt(opts.page),
564
+ });
565
+ print(result, getFormat(this));
566
+ } catch (err) {
567
+ error(String(err));
568
+ process.exit(1);
569
+ }
570
+ });
571
+
572
+ pipelinesCmd
573
+ .command('get <projectId> <pipelineId>')
574
+ .description('Get a pipeline')
575
+ .action(async function(this: Command, projectId: string, pipelineId: string) {
576
+ try {
577
+ const client = getClient();
578
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
579
+ const result = await client.getPipeline(id, parseInt(pipelineId));
580
+ print(result, getFormat(this));
581
+ } catch (err) {
582
+ error(String(err));
583
+ process.exit(1);
584
+ }
585
+ });
586
+
587
+ pipelinesCmd
588
+ .command('create <projectId>')
589
+ .description('Create/trigger a pipeline')
590
+ .requiredOption('-r, --ref <ref>', 'Branch or tag to run pipeline on')
591
+ .action(async function(this: Command, projectId: string, opts) {
592
+ try {
593
+ const client = getClient();
594
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
595
+ const result = await client.createPipeline(id, opts.ref);
596
+ print(result, getFormat(this));
597
+ success(`Pipeline #${result.id} created`);
598
+ } catch (err) {
599
+ error(String(err));
600
+ process.exit(1);
601
+ }
602
+ });
603
+
604
+ pipelinesCmd
605
+ .command('retry <projectId> <pipelineId>')
606
+ .description('Retry a pipeline')
607
+ .action(async function(this: Command, projectId: string, pipelineId: string) {
608
+ try {
609
+ const client = getClient();
610
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
611
+ const result = await client.retryPipeline(id, parseInt(pipelineId));
612
+ print(result, getFormat(this));
613
+ success(`Pipeline #${pipelineId} retried`);
614
+ } catch (err) {
615
+ error(String(err));
616
+ process.exit(1);
617
+ }
618
+ });
619
+
620
+ pipelinesCmd
621
+ .command('cancel <projectId> <pipelineId>')
622
+ .description('Cancel a pipeline')
623
+ .action(async function(this: Command, projectId: string, pipelineId: string) {
624
+ try {
625
+ const client = getClient();
626
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
627
+ const result = await client.cancelPipeline(id, parseInt(pipelineId));
628
+ print(result, getFormat(this));
629
+ success(`Pipeline #${pipelineId} cancelled`);
630
+ } catch (err) {
631
+ error(String(err));
632
+ process.exit(1);
633
+ }
634
+ });
635
+
636
+ // ============================================
637
+ // Jobs Commands
638
+ // ============================================
639
+ const jobsCmd = program
640
+ .command('jobs')
641
+ .description('Manage jobs');
642
+
643
+ jobsCmd
644
+ .command('list <projectId> <pipelineId>')
645
+ .description('List pipeline jobs')
646
+ .option('--per-page <count>', 'Results per page', '20')
647
+ .option('--page <page>', 'Page number', '1')
648
+ .action(async function(this: Command, projectId: string, pipelineId: string, opts) {
649
+ try {
650
+ const client = getClient();
651
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
652
+ const result = await client.listPipelineJobs(id, parseInt(pipelineId), {
653
+ per_page: parseInt(opts.perPage),
654
+ page: parseInt(opts.page),
655
+ });
656
+ print(result, getFormat(this));
657
+ } catch (err) {
658
+ error(String(err));
659
+ process.exit(1);
660
+ }
661
+ });
662
+
663
+ jobsCmd
664
+ .command('get <projectId> <jobId>')
665
+ .description('Get a job')
666
+ .action(async function(this: Command, projectId: string, jobId: string) {
667
+ try {
668
+ const client = getClient();
669
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
670
+ const result = await client.getJob(id, parseInt(jobId));
671
+ print(result, getFormat(this));
672
+ } catch (err) {
673
+ error(String(err));
674
+ process.exit(1);
675
+ }
676
+ });
677
+
678
+ jobsCmd
679
+ .command('retry <projectId> <jobId>')
680
+ .description('Retry a job')
681
+ .action(async function(this: Command, projectId: string, jobId: string) {
682
+ try {
683
+ const client = getClient();
684
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
685
+ await client.retryJob(id, parseInt(jobId));
686
+ success(`Job ${jobId} retried`);
687
+ } catch (err) {
688
+ error(String(err));
689
+ process.exit(1);
690
+ }
691
+ });
692
+
693
+ jobsCmd
694
+ .command('cancel <projectId> <jobId>')
695
+ .description('Cancel a job')
696
+ .action(async function(this: Command, projectId: string, jobId: string) {
697
+ try {
698
+ const client = getClient();
699
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
700
+ await client.cancelJob(id, parseInt(jobId));
701
+ success(`Job ${jobId} cancelled`);
702
+ } catch (err) {
703
+ error(String(err));
704
+ process.exit(1);
705
+ }
706
+ });
707
+
708
+ jobsCmd
709
+ .command('play <projectId> <jobId>')
710
+ .description('Play a manual job')
711
+ .action(async function(this: Command, projectId: string, jobId: string) {
712
+ try {
713
+ const client = getClient();
714
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
715
+ await client.playJob(id, parseInt(jobId));
716
+ success(`Job ${jobId} started`);
717
+ } catch (err) {
718
+ error(String(err));
719
+ process.exit(1);
720
+ }
721
+ });
722
+
723
+ // ============================================
724
+ // Branches Commands
725
+ // ============================================
726
+ const branchesCmd = program
727
+ .command('branches')
728
+ .description('Manage branches');
729
+
730
+ branchesCmd
731
+ .command('list <projectId>')
732
+ .description('List branches')
733
+ .option('--search <query>', 'Search query')
734
+ .option('--per-page <count>', 'Results per page', '20')
735
+ .option('--page <page>', 'Page number', '1')
736
+ .action(async function(this: Command, projectId: string, opts) {
737
+ try {
738
+ const client = getClient();
739
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
740
+ const result = await client.listBranches(id, {
741
+ search: opts.search,
742
+ per_page: parseInt(opts.perPage),
743
+ page: parseInt(opts.page),
744
+ });
745
+ print(result, getFormat(this));
746
+ } catch (err) {
747
+ error(String(err));
748
+ process.exit(1);
749
+ }
750
+ });
751
+
752
+ branchesCmd
753
+ .command('get <projectId> <branch>')
754
+ .description('Get a branch')
755
+ .action(async function(this: Command, projectId: string, branch: string) {
756
+ try {
757
+ const client = getClient();
758
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
759
+ const result = await client.getBranch(id, branch);
760
+ print(result, getFormat(this));
761
+ } catch (err) {
762
+ error(String(err));
763
+ process.exit(1);
764
+ }
765
+ });
766
+
767
+ branchesCmd
768
+ .command('create <projectId>')
769
+ .description('Create a branch')
770
+ .requiredOption('-n, --name <name>', 'Branch name')
771
+ .requiredOption('-r, --ref <ref>', 'Source branch/commit')
772
+ .action(async function(this: Command, projectId: string, opts) {
773
+ try {
774
+ const client = getClient();
775
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
776
+ const result = await client.createBranch(id, opts.name, opts.ref);
777
+ print(result, getFormat(this));
778
+ success(`Branch ${opts.name} created`);
779
+ } catch (err) {
780
+ error(String(err));
781
+ process.exit(1);
782
+ }
783
+ });
784
+
785
+ branchesCmd
786
+ .command('delete <projectId> <branch>')
787
+ .description('Delete a branch')
788
+ .action(async function(this: Command, projectId: string, branch: string) {
789
+ try {
790
+ const client = getClient();
791
+ const id = projectId.includes('/') ? projectId : parseInt(projectId);
792
+ await client.deleteBranch(id, branch);
793
+ success(`Branch ${branch} deleted`);
794
+ } catch (err) {
795
+ error(String(err));
796
+ process.exit(1);
797
+ }
798
+ });
799
+
800
+ // ============================================
801
+ // Groups Commands
802
+ // ============================================
803
+ const groupsCmd = program
804
+ .command('groups')
805
+ .description('Manage groups');
806
+
807
+ groupsCmd
808
+ .command('list')
809
+ .description('List groups')
810
+ .option('--owned', 'Only owned groups')
811
+ .option('--search <query>', 'Search query')
812
+ .option('--per-page <count>', 'Results per page', '20')
813
+ .option('--page <page>', 'Page number', '1')
814
+ .action(async function(this: Command, opts) {
815
+ try {
816
+ const client = getClient();
817
+ const result = await client.listGroups({
818
+ owned: opts.owned,
819
+ search: opts.search,
820
+ per_page: parseInt(opts.perPage),
821
+ page: parseInt(opts.page),
822
+ });
823
+ print(result, getFormat(this));
824
+ } catch (err) {
825
+ error(String(err));
826
+ process.exit(1);
827
+ }
828
+ });
829
+
830
+ groupsCmd
831
+ .command('get <groupId>')
832
+ .description('Get a group')
833
+ .action(async function(this: Command, groupId: string) {
834
+ try {
835
+ const client = getClient();
836
+ const id = groupId.includes('/') ? groupId : parseInt(groupId);
837
+ const result = await client.getGroup(id);
838
+ print(result, getFormat(this));
839
+ } catch (err) {
840
+ error(String(err));
841
+ process.exit(1);
842
+ }
843
+ });
844
+
845
+ groupsCmd
846
+ .command('projects <groupId>')
847
+ .description('List group projects')
848
+ .option('--per-page <count>', 'Results per page', '20')
849
+ .option('--page <page>', 'Page number', '1')
850
+ .action(async function(this: Command, groupId: string, opts) {
851
+ try {
852
+ const client = getClient();
853
+ const id = groupId.includes('/') ? groupId : parseInt(groupId);
854
+ const result = await client.listGroupProjects(id, {
855
+ per_page: parseInt(opts.perPage),
856
+ page: parseInt(opts.page),
857
+ });
858
+ print(result, getFormat(this));
859
+ } catch (err) {
860
+ error(String(err));
861
+ process.exit(1);
862
+ }
863
+ });
864
+
865
+ // ============================================
866
+ // Runners Commands
867
+ // ============================================
868
+ const runnersCmd = program
869
+ .command('runners')
870
+ .description('Manage runners');
871
+
872
+ runnersCmd
873
+ .command('list')
874
+ .description('List runners')
875
+ .option('--status <status>', 'Status (online, offline)')
876
+ .option('--type <type>', 'Type (instance_type, group_type, project_type)')
877
+ .option('--per-page <count>', 'Results per page', '20')
878
+ .option('--page <page>', 'Page number', '1')
879
+ .action(async function(this: Command, opts) {
880
+ try {
881
+ const client = getClient();
882
+ const result = await client.listRunners({
883
+ status: opts.status,
884
+ type: opts.type,
885
+ per_page: parseInt(opts.perPage),
886
+ page: parseInt(opts.page),
887
+ });
888
+ print(result, getFormat(this));
889
+ } catch (err) {
890
+ error(String(err));
891
+ process.exit(1);
892
+ }
893
+ });
894
+
895
+ runnersCmd
896
+ .command('get <runnerId>')
897
+ .description('Get a runner')
898
+ .action(async function(this: Command, runnerId: string) {
899
+ try {
900
+ const client = getClient();
901
+ const result = await client.getRunner(parseInt(runnerId));
902
+ print(result, getFormat(this));
903
+ } catch (err) {
904
+ error(String(err));
905
+ process.exit(1);
906
+ }
907
+ });
908
+
909
+ program.parse();