@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,858 @@
1
+ import type {
2
+ GitLabConfig,
3
+ User,
4
+ Project,
5
+ ProjectCreateParams,
6
+ Issue,
7
+ IssueCreateParams,
8
+ MergeRequest,
9
+ MergeRequestCreateParams,
10
+ Pipeline,
11
+ Job,
12
+ Branch,
13
+ Commit,
14
+ Milestone,
15
+ Group,
16
+ Runner,
17
+ Deployment,
18
+ Environment,
19
+ Snippet,
20
+ Tag,
21
+ } from '../types';
22
+ import { GitLabClient } from './client';
23
+
24
+ /**
25
+ * GitLab API wrapper
26
+ */
27
+ export class GitLab {
28
+ private readonly client: GitLabClient;
29
+
30
+ constructor(config: GitLabConfig) {
31
+ this.client = new GitLabClient(config);
32
+ }
33
+
34
+ /**
35
+ * Create a client from environment variables
36
+ */
37
+ static fromEnv(): GitLab {
38
+ const accessToken = process.env.GITLAB_ACCESS_TOKEN || process.env.GITLAB_TOKEN;
39
+ const baseUrl = process.env.GITLAB_URL;
40
+
41
+ if (!accessToken) {
42
+ throw new Error('GITLAB_ACCESS_TOKEN or GITLAB_TOKEN environment variable is required');
43
+ }
44
+ return new GitLab({ accessToken, baseUrl });
45
+ }
46
+
47
+ /**
48
+ * Get a preview of the access token (for debugging)
49
+ */
50
+ getAccessTokenPreview(): string {
51
+ return this.client.getAccessTokenPreview();
52
+ }
53
+
54
+ /**
55
+ * Get the underlying client for direct API access
56
+ */
57
+ getClient(): GitLabClient {
58
+ return this.client;
59
+ }
60
+
61
+ // ============================================
62
+ // Users API
63
+ // ============================================
64
+
65
+ /**
66
+ * Get current authenticated user
67
+ */
68
+ async getCurrentUser(): Promise<User> {
69
+ return this.client.get<User>('/user');
70
+ }
71
+
72
+ /**
73
+ * List users (admin only for full list)
74
+ */
75
+ async listUsers(params?: {
76
+ username?: string;
77
+ search?: string;
78
+ active?: boolean;
79
+ blocked?: boolean;
80
+ external?: boolean;
81
+ per_page?: number;
82
+ page?: number;
83
+ }): Promise<User[]> {
84
+ return this.client.get<User[]>('/users', params);
85
+ }
86
+
87
+ /**
88
+ * Get a user by ID
89
+ */
90
+ async getUser(userId: number): Promise<User> {
91
+ return this.client.get<User>(`/users/${userId}`);
92
+ }
93
+
94
+ // ============================================
95
+ // Projects API
96
+ // ============================================
97
+
98
+ /**
99
+ * List projects
100
+ */
101
+ async listProjects(params?: {
102
+ archived?: boolean;
103
+ visibility?: 'public' | 'internal' | 'private';
104
+ order_by?: 'id' | 'name' | 'path' | 'created_at' | 'updated_at' | 'last_activity_at';
105
+ sort?: 'asc' | 'desc';
106
+ search?: string;
107
+ simple?: boolean;
108
+ owned?: boolean;
109
+ membership?: boolean;
110
+ starred?: boolean;
111
+ with_issues_enabled?: boolean;
112
+ with_merge_requests_enabled?: boolean;
113
+ min_access_level?: number;
114
+ per_page?: number;
115
+ page?: number;
116
+ }): Promise<Project[]> {
117
+ return this.client.get<Project[]>('/projects', params);
118
+ }
119
+
120
+ /**
121
+ * Get a project by ID or path
122
+ */
123
+ async getProject(projectId: number | string): Promise<Project> {
124
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
125
+ return this.client.get<Project>(`/projects/${id}`);
126
+ }
127
+
128
+ /**
129
+ * Create a project
130
+ */
131
+ async createProject(params: ProjectCreateParams): Promise<Project> {
132
+ return this.client.post<Project>('/projects', params);
133
+ }
134
+
135
+ /**
136
+ * Update a project
137
+ */
138
+ async updateProject(projectId: number | string, params: Partial<ProjectCreateParams>): Promise<Project> {
139
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
140
+ return this.client.put<Project>(`/projects/${id}`, params);
141
+ }
142
+
143
+ /**
144
+ * Delete a project
145
+ */
146
+ async deleteProject(projectId: number | string): Promise<void> {
147
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
148
+ await this.client.delete(`/projects/${id}`);
149
+ }
150
+
151
+ /**
152
+ * Star a project
153
+ */
154
+ async starProject(projectId: number | string): Promise<Project> {
155
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
156
+ return this.client.post<Project>(`/projects/${id}/star`);
157
+ }
158
+
159
+ /**
160
+ * Unstar a project
161
+ */
162
+ async unstarProject(projectId: number | string): Promise<Project> {
163
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
164
+ return this.client.post<Project>(`/projects/${id}/unstar`);
165
+ }
166
+
167
+ /**
168
+ * Fork a project
169
+ */
170
+ async forkProject(projectId: number | string, params?: {
171
+ namespace_id?: number;
172
+ namespace_path?: string;
173
+ name?: string;
174
+ path?: string;
175
+ description?: string;
176
+ visibility?: 'public' | 'internal' | 'private';
177
+ }): Promise<Project> {
178
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
179
+ return this.client.post<Project>(`/projects/${id}/fork`, params);
180
+ }
181
+
182
+ // ============================================
183
+ // Issues API
184
+ // ============================================
185
+
186
+ /**
187
+ * List project issues
188
+ */
189
+ async listIssues(projectId: number | string, params?: {
190
+ iids?: number[];
191
+ state?: 'opened' | 'closed' | 'all';
192
+ labels?: string;
193
+ milestone?: string;
194
+ scope?: 'created_by_me' | 'assigned_to_me' | 'all';
195
+ author_id?: number;
196
+ assignee_id?: number;
197
+ search?: string;
198
+ created_after?: string;
199
+ created_before?: string;
200
+ updated_after?: string;
201
+ updated_before?: string;
202
+ order_by?: 'created_at' | 'updated_at' | 'priority' | 'due_date' | 'relative_position' | 'label_priority' | 'milestone_due' | 'popularity' | 'weight';
203
+ sort?: 'asc' | 'desc';
204
+ per_page?: number;
205
+ page?: number;
206
+ }): Promise<Issue[]> {
207
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
208
+ return this.client.get<Issue[]>(`/projects/${id}/issues`, params);
209
+ }
210
+
211
+ /**
212
+ * Get a single issue
213
+ */
214
+ async getIssue(projectId: number | string, issueIid: number): Promise<Issue> {
215
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
216
+ return this.client.get<Issue>(`/projects/${id}/issues/${issueIid}`);
217
+ }
218
+
219
+ /**
220
+ * Create an issue
221
+ */
222
+ async createIssue(projectId: number | string, params: IssueCreateParams): Promise<Issue> {
223
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
224
+ return this.client.post<Issue>(`/projects/${id}/issues`, params);
225
+ }
226
+
227
+ /**
228
+ * Update an issue
229
+ */
230
+ async updateIssue(projectId: number | string, issueIid: number, params: Partial<IssueCreateParams> & { state_event?: 'close' | 'reopen' }): Promise<Issue> {
231
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
232
+ return this.client.put<Issue>(`/projects/${id}/issues/${issueIid}`, params);
233
+ }
234
+
235
+ /**
236
+ * Delete an issue
237
+ */
238
+ async deleteIssue(projectId: number | string, issueIid: number): Promise<void> {
239
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
240
+ await this.client.delete(`/projects/${id}/issues/${issueIid}`);
241
+ }
242
+
243
+ // ============================================
244
+ // Merge Requests API
245
+ // ============================================
246
+
247
+ /**
248
+ * List project merge requests
249
+ */
250
+ async listMergeRequests(projectId: number | string, params?: {
251
+ iids?: number[];
252
+ state?: 'opened' | 'closed' | 'merged' | 'locked' | 'all';
253
+ order_by?: 'created_at' | 'updated_at';
254
+ sort?: 'asc' | 'desc';
255
+ milestone?: string;
256
+ labels?: string;
257
+ with_labels_details?: boolean;
258
+ with_merge_status_recheck?: boolean;
259
+ created_after?: string;
260
+ created_before?: string;
261
+ updated_after?: string;
262
+ updated_before?: string;
263
+ scope?: 'created_by_me' | 'assigned_to_me' | 'all';
264
+ author_id?: number;
265
+ assignee_id?: number;
266
+ reviewer_id?: number;
267
+ source_branch?: string;
268
+ target_branch?: string;
269
+ search?: string;
270
+ wip?: 'yes' | 'no';
271
+ per_page?: number;
272
+ page?: number;
273
+ }): Promise<MergeRequest[]> {
274
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
275
+ return this.client.get<MergeRequest[]>(`/projects/${id}/merge_requests`, params);
276
+ }
277
+
278
+ /**
279
+ * Get a single merge request
280
+ */
281
+ async getMergeRequest(projectId: number | string, mrIid: number): Promise<MergeRequest> {
282
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
283
+ return this.client.get<MergeRequest>(`/projects/${id}/merge_requests/${mrIid}`);
284
+ }
285
+
286
+ /**
287
+ * Create a merge request
288
+ */
289
+ async createMergeRequest(projectId: number | string, params: MergeRequestCreateParams): Promise<MergeRequest> {
290
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
291
+ return this.client.post<MergeRequest>(`/projects/${id}/merge_requests`, params);
292
+ }
293
+
294
+ /**
295
+ * Update a merge request
296
+ */
297
+ async updateMergeRequest(projectId: number | string, mrIid: number, params: Partial<MergeRequestCreateParams> & { state_event?: 'close' | 'reopen' }): Promise<MergeRequest> {
298
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
299
+ return this.client.put<MergeRequest>(`/projects/${id}/merge_requests/${mrIid}`, params);
300
+ }
301
+
302
+ /**
303
+ * Accept/merge a merge request
304
+ */
305
+ async acceptMergeRequest(projectId: number | string, mrIid: number, params?: {
306
+ merge_commit_message?: string;
307
+ squash_commit_message?: string;
308
+ squash?: boolean;
309
+ should_remove_source_branch?: boolean;
310
+ merge_when_pipeline_succeeds?: boolean;
311
+ sha?: string;
312
+ }): Promise<MergeRequest> {
313
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
314
+ return this.client.put<MergeRequest>(`/projects/${id}/merge_requests/${mrIid}/merge`, params);
315
+ }
316
+
317
+ /**
318
+ * Delete a merge request
319
+ */
320
+ async deleteMergeRequest(projectId: number | string, mrIid: number): Promise<void> {
321
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
322
+ await this.client.delete(`/projects/${id}/merge_requests/${mrIid}`);
323
+ }
324
+
325
+ // ============================================
326
+ // Pipelines API
327
+ // ============================================
328
+
329
+ /**
330
+ * List project pipelines
331
+ */
332
+ async listPipelines(projectId: number | string, params?: {
333
+ scope?: 'running' | 'pending' | 'finished' | 'branches' | 'tags';
334
+ status?: 'created' | 'waiting_for_resource' | 'preparing' | 'pending' | 'running' | 'success' | 'failed' | 'canceled' | 'skipped' | 'manual' | 'scheduled';
335
+ ref?: string;
336
+ sha?: string;
337
+ yaml_errors?: boolean;
338
+ username?: string;
339
+ updated_after?: string;
340
+ updated_before?: string;
341
+ order_by?: 'id' | 'status' | 'ref' | 'updated_at' | 'user_id';
342
+ sort?: 'asc' | 'desc';
343
+ per_page?: number;
344
+ page?: number;
345
+ }): Promise<Pipeline[]> {
346
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
347
+ return this.client.get<Pipeline[]>(`/projects/${id}/pipelines`, params);
348
+ }
349
+
350
+ /**
351
+ * Get a single pipeline
352
+ */
353
+ async getPipeline(projectId: number | string, pipelineId: number): Promise<Pipeline> {
354
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
355
+ return this.client.get<Pipeline>(`/projects/${id}/pipelines/${pipelineId}`);
356
+ }
357
+
358
+ /**
359
+ * Create a pipeline
360
+ */
361
+ async createPipeline(projectId: number | string, ref: string, variables?: Array<{ key: string; value: string; variable_type?: 'env_var' | 'file' }>): Promise<Pipeline> {
362
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
363
+ return this.client.post<Pipeline>(`/projects/${id}/pipeline`, { ref, variables });
364
+ }
365
+
366
+ /**
367
+ * Retry a pipeline
368
+ */
369
+ async retryPipeline(projectId: number | string, pipelineId: number): Promise<Pipeline> {
370
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
371
+ return this.client.post<Pipeline>(`/projects/${id}/pipelines/${pipelineId}/retry`);
372
+ }
373
+
374
+ /**
375
+ * Cancel a pipeline
376
+ */
377
+ async cancelPipeline(projectId: number | string, pipelineId: number): Promise<Pipeline> {
378
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
379
+ return this.client.post<Pipeline>(`/projects/${id}/pipelines/${pipelineId}/cancel`);
380
+ }
381
+
382
+ /**
383
+ * Delete a pipeline
384
+ */
385
+ async deletePipeline(projectId: number | string, pipelineId: number): Promise<void> {
386
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
387
+ await this.client.delete(`/projects/${id}/pipelines/${pipelineId}`);
388
+ }
389
+
390
+ // ============================================
391
+ // Jobs API
392
+ // ============================================
393
+
394
+ /**
395
+ * List pipeline jobs
396
+ */
397
+ async listPipelineJobs(projectId: number | string, pipelineId: number, params?: {
398
+ scope?: 'created' | 'pending' | 'running' | 'failed' | 'success' | 'canceled' | 'skipped' | 'manual'[];
399
+ include_retried?: boolean;
400
+ per_page?: number;
401
+ page?: number;
402
+ }): Promise<Job[]> {
403
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
404
+ return this.client.get<Job[]>(`/projects/${id}/pipelines/${pipelineId}/jobs`, params);
405
+ }
406
+
407
+ /**
408
+ * Get a single job
409
+ */
410
+ async getJob(projectId: number | string, jobId: number): Promise<Job> {
411
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
412
+ return this.client.get<Job>(`/projects/${id}/jobs/${jobId}`);
413
+ }
414
+
415
+ /**
416
+ * Retry a job
417
+ */
418
+ async retryJob(projectId: number | string, jobId: number): Promise<Job> {
419
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
420
+ return this.client.post<Job>(`/projects/${id}/jobs/${jobId}/retry`);
421
+ }
422
+
423
+ /**
424
+ * Cancel a job
425
+ */
426
+ async cancelJob(projectId: number | string, jobId: number): Promise<Job> {
427
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
428
+ return this.client.post<Job>(`/projects/${id}/jobs/${jobId}/cancel`);
429
+ }
430
+
431
+ /**
432
+ * Play a manual job
433
+ */
434
+ async playJob(projectId: number | string, jobId: number): Promise<Job> {
435
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
436
+ return this.client.post<Job>(`/projects/${id}/jobs/${jobId}/play`);
437
+ }
438
+
439
+ /**
440
+ * Get job log
441
+ */
442
+ async getJobLog(projectId: number | string, jobId: number): Promise<string> {
443
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
444
+ return this.client.get<string>(`/projects/${id}/jobs/${jobId}/trace`);
445
+ }
446
+
447
+ // ============================================
448
+ // Branches API
449
+ // ============================================
450
+
451
+ /**
452
+ * List project branches
453
+ */
454
+ async listBranches(projectId: number | string, params?: {
455
+ search?: string;
456
+ regex?: string;
457
+ per_page?: number;
458
+ page?: number;
459
+ }): Promise<Branch[]> {
460
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
461
+ return this.client.get<Branch[]>(`/projects/${id}/repository/branches`, params);
462
+ }
463
+
464
+ /**
465
+ * Get a single branch
466
+ */
467
+ async getBranch(projectId: number | string, branchName: string): Promise<Branch> {
468
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
469
+ return this.client.get<Branch>(`/projects/${id}/repository/branches/${encodeURIComponent(branchName)}`);
470
+ }
471
+
472
+ /**
473
+ * Create a branch
474
+ */
475
+ async createBranch(projectId: number | string, branch: string, ref: string): Promise<Branch> {
476
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
477
+ return this.client.post<Branch>(`/projects/${id}/repository/branches`, { branch, ref });
478
+ }
479
+
480
+ /**
481
+ * Delete a branch
482
+ */
483
+ async deleteBranch(projectId: number | string, branchName: string): Promise<void> {
484
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
485
+ await this.client.delete(`/projects/${id}/repository/branches/${encodeURIComponent(branchName)}`);
486
+ }
487
+
488
+ // ============================================
489
+ // Commits API
490
+ // ============================================
491
+
492
+ /**
493
+ * List project commits
494
+ */
495
+ async listCommits(projectId: number | string, params?: {
496
+ ref_name?: string;
497
+ since?: string;
498
+ until?: string;
499
+ path?: string;
500
+ all?: boolean;
501
+ with_stats?: boolean;
502
+ first_parent?: boolean;
503
+ order?: 'default' | 'topo';
504
+ per_page?: number;
505
+ page?: number;
506
+ }): Promise<Commit[]> {
507
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
508
+ return this.client.get<Commit[]>(`/projects/${id}/repository/commits`, params);
509
+ }
510
+
511
+ /**
512
+ * Get a single commit
513
+ */
514
+ async getCommit(projectId: number | string, sha: string): Promise<Commit> {
515
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
516
+ return this.client.get<Commit>(`/projects/${id}/repository/commits/${sha}`);
517
+ }
518
+
519
+ // ============================================
520
+ // Milestones API
521
+ // ============================================
522
+
523
+ /**
524
+ * List project milestones
525
+ */
526
+ async listMilestones(projectId: number | string, params?: {
527
+ iids?: number[];
528
+ state?: 'active' | 'closed';
529
+ title?: string;
530
+ search?: string;
531
+ include_parent_milestones?: boolean;
532
+ per_page?: number;
533
+ page?: number;
534
+ }): Promise<Milestone[]> {
535
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
536
+ return this.client.get<Milestone[]>(`/projects/${id}/milestones`, params);
537
+ }
538
+
539
+ /**
540
+ * Get a single milestone
541
+ */
542
+ async getMilestone(projectId: number | string, milestoneId: number): Promise<Milestone> {
543
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
544
+ return this.client.get<Milestone>(`/projects/${id}/milestones/${milestoneId}`);
545
+ }
546
+
547
+ /**
548
+ * Create a milestone
549
+ */
550
+ async createMilestone(projectId: number | string, params: {
551
+ title: string;
552
+ description?: string;
553
+ due_date?: string;
554
+ start_date?: string;
555
+ }): Promise<Milestone> {
556
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
557
+ return this.client.post<Milestone>(`/projects/${id}/milestones`, params);
558
+ }
559
+
560
+ /**
561
+ * Update a milestone
562
+ */
563
+ async updateMilestone(projectId: number | string, milestoneId: number, params: {
564
+ title?: string;
565
+ description?: string;
566
+ due_date?: string;
567
+ start_date?: string;
568
+ state_event?: 'close' | 'activate';
569
+ }): Promise<Milestone> {
570
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
571
+ return this.client.put<Milestone>(`/projects/${id}/milestones/${milestoneId}`, params);
572
+ }
573
+
574
+ /**
575
+ * Delete a milestone
576
+ */
577
+ async deleteMilestone(projectId: number | string, milestoneId: number): Promise<void> {
578
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
579
+ await this.client.delete(`/projects/${id}/milestones/${milestoneId}`);
580
+ }
581
+
582
+ // ============================================
583
+ // Groups API
584
+ // ============================================
585
+
586
+ /**
587
+ * List groups
588
+ */
589
+ async listGroups(params?: {
590
+ skip_groups?: number[];
591
+ all_available?: boolean;
592
+ search?: string;
593
+ order_by?: 'name' | 'path' | 'id';
594
+ sort?: 'asc' | 'desc';
595
+ statistics?: boolean;
596
+ with_custom_attributes?: boolean;
597
+ owned?: boolean;
598
+ min_access_level?: number;
599
+ top_level_only?: boolean;
600
+ per_page?: number;
601
+ page?: number;
602
+ }): Promise<Group[]> {
603
+ return this.client.get<Group[]>('/groups', params);
604
+ }
605
+
606
+ /**
607
+ * Get a group by ID or path
608
+ */
609
+ async getGroup(groupId: number | string): Promise<Group> {
610
+ const id = typeof groupId === 'string' ? encodeURIComponent(groupId) : groupId;
611
+ return this.client.get<Group>(`/groups/${id}`);
612
+ }
613
+
614
+ /**
615
+ * List group projects
616
+ */
617
+ async listGroupProjects(groupId: number | string, params?: {
618
+ archived?: boolean;
619
+ visibility?: 'public' | 'internal' | 'private';
620
+ order_by?: 'id' | 'name' | 'path' | 'created_at' | 'updated_at' | 'last_activity_at';
621
+ sort?: 'asc' | 'desc';
622
+ search?: string;
623
+ simple?: boolean;
624
+ owned?: boolean;
625
+ starred?: boolean;
626
+ with_issues_enabled?: boolean;
627
+ with_merge_requests_enabled?: boolean;
628
+ with_shared?: boolean;
629
+ include_subgroups?: boolean;
630
+ min_access_level?: number;
631
+ per_page?: number;
632
+ page?: number;
633
+ }): Promise<Project[]> {
634
+ const id = typeof groupId === 'string' ? encodeURIComponent(groupId) : groupId;
635
+ return this.client.get<Project[]>(`/groups/${id}/projects`, params);
636
+ }
637
+
638
+ // ============================================
639
+ // Runners API
640
+ // ============================================
641
+
642
+ /**
643
+ * List runners
644
+ */
645
+ async listRunners(params?: {
646
+ scope?: 'active' | 'paused' | 'online' | 'offline';
647
+ type?: 'instance_type' | 'group_type' | 'project_type';
648
+ status?: 'online' | 'offline' | 'stale' | 'never_contacted';
649
+ paused?: boolean;
650
+ tag_list?: string[];
651
+ per_page?: number;
652
+ page?: number;
653
+ }): Promise<Runner[]> {
654
+ return this.client.get<Runner[]>('/runners', params);
655
+ }
656
+
657
+ /**
658
+ * Get a runner
659
+ */
660
+ async getRunner(runnerId: number): Promise<Runner> {
661
+ return this.client.get<Runner>(`/runners/${runnerId}`);
662
+ }
663
+
664
+ /**
665
+ * List project runners
666
+ */
667
+ async listProjectRunners(projectId: number | string, params?: {
668
+ scope?: 'active' | 'paused' | 'online' | 'offline';
669
+ type?: 'instance_type' | 'group_type' | 'project_type';
670
+ status?: 'online' | 'offline' | 'stale' | 'never_contacted';
671
+ paused?: boolean;
672
+ tag_list?: string[];
673
+ per_page?: number;
674
+ page?: number;
675
+ }): Promise<Runner[]> {
676
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
677
+ return this.client.get<Runner[]>(`/projects/${id}/runners`, params);
678
+ }
679
+
680
+ // ============================================
681
+ // Deployments API
682
+ // ============================================
683
+
684
+ /**
685
+ * List project deployments
686
+ */
687
+ async listDeployments(projectId: number | string, params?: {
688
+ order_by?: 'id' | 'iid' | 'created_at' | 'updated_at' | 'finished_at' | 'ref';
689
+ sort?: 'asc' | 'desc';
690
+ updated_after?: string;
691
+ updated_before?: string;
692
+ finished_after?: string;
693
+ finished_before?: string;
694
+ environment?: string;
695
+ status?: 'created' | 'running' | 'success' | 'failed' | 'canceled';
696
+ per_page?: number;
697
+ page?: number;
698
+ }): Promise<Deployment[]> {
699
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
700
+ return this.client.get<Deployment[]>(`/projects/${id}/deployments`, params);
701
+ }
702
+
703
+ /**
704
+ * Get a deployment
705
+ */
706
+ async getDeployment(projectId: number | string, deploymentId: number): Promise<Deployment> {
707
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
708
+ return this.client.get<Deployment>(`/projects/${id}/deployments/${deploymentId}`);
709
+ }
710
+
711
+ // ============================================
712
+ // Environments API
713
+ // ============================================
714
+
715
+ /**
716
+ * List project environments
717
+ */
718
+ async listEnvironments(projectId: number | string, params?: {
719
+ name?: string;
720
+ search?: string;
721
+ states?: 'available' | 'stopped';
722
+ per_page?: number;
723
+ page?: number;
724
+ }): Promise<Environment[]> {
725
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
726
+ return this.client.get<Environment[]>(`/projects/${id}/environments`, params);
727
+ }
728
+
729
+ /**
730
+ * Get an environment
731
+ */
732
+ async getEnvironment(projectId: number | string, environmentId: number): Promise<Environment> {
733
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
734
+ return this.client.get<Environment>(`/projects/${id}/environments/${environmentId}`);
735
+ }
736
+
737
+ /**
738
+ * Create an environment
739
+ */
740
+ async createEnvironment(projectId: number | string, params: {
741
+ name: string;
742
+ external_url?: string;
743
+ tier?: 'production' | 'staging' | 'testing' | 'development' | 'other';
744
+ }): Promise<Environment> {
745
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
746
+ return this.client.post<Environment>(`/projects/${id}/environments`, params);
747
+ }
748
+
749
+ /**
750
+ * Stop an environment
751
+ */
752
+ async stopEnvironment(projectId: number | string, environmentId: number): Promise<Environment> {
753
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
754
+ return this.client.post<Environment>(`/projects/${id}/environments/${environmentId}/stop`);
755
+ }
756
+
757
+ /**
758
+ * Delete an environment
759
+ */
760
+ async deleteEnvironment(projectId: number | string, environmentId: number): Promise<void> {
761
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
762
+ await this.client.delete(`/projects/${id}/environments/${environmentId}`);
763
+ }
764
+
765
+ // ============================================
766
+ // Snippets API
767
+ // ============================================
768
+
769
+ /**
770
+ * List project snippets
771
+ */
772
+ async listSnippets(projectId: number | string, params?: {
773
+ per_page?: number;
774
+ page?: number;
775
+ }): Promise<Snippet[]> {
776
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
777
+ return this.client.get<Snippet[]>(`/projects/${id}/snippets`, params);
778
+ }
779
+
780
+ /**
781
+ * Get a snippet
782
+ */
783
+ async getSnippet(projectId: number | string, snippetId: number): Promise<Snippet> {
784
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
785
+ return this.client.get<Snippet>(`/projects/${id}/snippets/${snippetId}`);
786
+ }
787
+
788
+ /**
789
+ * Create a snippet
790
+ */
791
+ async createSnippet(projectId: number | string, params: {
792
+ title: string;
793
+ file_name: string;
794
+ content: string;
795
+ description?: string;
796
+ visibility: 'private' | 'internal' | 'public';
797
+ }): Promise<Snippet> {
798
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
799
+ return this.client.post<Snippet>(`/projects/${id}/snippets`, params);
800
+ }
801
+
802
+ /**
803
+ * Delete a snippet
804
+ */
805
+ async deleteSnippet(projectId: number | string, snippetId: number): Promise<void> {
806
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
807
+ await this.client.delete(`/projects/${id}/snippets/${snippetId}`);
808
+ }
809
+
810
+ // ============================================
811
+ // Tags API
812
+ // ============================================
813
+
814
+ /**
815
+ * List project tags
816
+ */
817
+ async listTags(projectId: number | string, params?: {
818
+ order_by?: 'name' | 'updated';
819
+ sort?: 'asc' | 'desc';
820
+ search?: string;
821
+ per_page?: number;
822
+ page?: number;
823
+ }): Promise<Tag[]> {
824
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
825
+ return this.client.get<Tag[]>(`/projects/${id}/repository/tags`, params);
826
+ }
827
+
828
+ /**
829
+ * Get a single tag
830
+ */
831
+ async getTag(projectId: number | string, tagName: string): Promise<Tag> {
832
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
833
+ return this.client.get<Tag>(`/projects/${id}/repository/tags/${encodeURIComponent(tagName)}`);
834
+ }
835
+
836
+ /**
837
+ * Create a tag
838
+ */
839
+ async createTag(projectId: number | string, params: {
840
+ tag_name: string;
841
+ ref: string;
842
+ message?: string;
843
+ release_description?: string;
844
+ }): Promise<Tag> {
845
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
846
+ return this.client.post<Tag>(`/projects/${id}/repository/tags`, params);
847
+ }
848
+
849
+ /**
850
+ * Delete a tag
851
+ */
852
+ async deleteTag(projectId: number | string, tagName: string): Promise<void> {
853
+ const id = typeof projectId === 'string' ? encodeURIComponent(projectId) : projectId;
854
+ await this.client.delete(`/projects/${id}/repository/tags/${encodeURIComponent(tagName)}`);
855
+ }
856
+ }
857
+
858
+ export { GitLabClient } from './client';