@hasna/connectors 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (390) hide show
  1. package/bin/index.js +189 -2
  2. package/bin/mcp.js +176 -1
  3. package/bin/serve.js +175 -0
  4. package/connectors/connect-airtable/.env.example +11 -0
  5. package/connectors/connect-airtable/CLAUDE.md +121 -0
  6. package/connectors/connect-airtable/README.md +193 -0
  7. package/connectors/connect-airtable/package.json +50 -0
  8. package/connectors/connect-airtable/src/api/client.ts +139 -0
  9. package/connectors/connect-airtable/src/api/index.ts +405 -0
  10. package/connectors/connect-airtable/src/cli/index.ts +637 -0
  11. package/connectors/connect-airtable/src/index.ts +20 -0
  12. package/connectors/connect-airtable/src/types/index.ts +349 -0
  13. package/connectors/connect-airtable/src/utils/config.ts +197 -0
  14. package/connectors/connect-airtable/tsconfig.json +16 -0
  15. package/connectors/connect-amplitude/.env.example +11 -0
  16. package/connectors/connect-amplitude/CLAUDE.md +121 -0
  17. package/connectors/connect-amplitude/README.md +193 -0
  18. package/connectors/connect-amplitude/package.json +51 -0
  19. package/connectors/connect-amplitude/src/api/client.ts +144 -0
  20. package/connectors/connect-amplitude/src/api/index.ts +215 -0
  21. package/connectors/connect-amplitude/src/cli/index.ts +532 -0
  22. package/connectors/connect-amplitude/src/index.ts +22 -0
  23. package/connectors/connect-amplitude/src/types/index.ts +329 -0
  24. package/connectors/connect-amplitude/src/utils/config.ts +208 -0
  25. package/connectors/connect-amplitude/tsconfig.json +16 -0
  26. package/connectors/connect-calendly/.env.example +11 -0
  27. package/connectors/connect-calendly/CLAUDE.md +272 -0
  28. package/connectors/connect-calendly/README.md +193 -0
  29. package/connectors/connect-calendly/package.json +51 -0
  30. package/connectors/connect-calendly/scripts/release.ts +179 -0
  31. package/connectors/connect-calendly/src/api/client.ts +213 -0
  32. package/connectors/connect-calendly/src/api/example.ts +48 -0
  33. package/connectors/connect-calendly/src/api/index.ts +51 -0
  34. package/connectors/connect-calendly/src/cli/index.ts +254 -0
  35. package/connectors/connect-calendly/src/index.ts +103 -0
  36. package/connectors/connect-calendly/src/types/index.ts +237 -0
  37. package/connectors/connect-calendly/src/utils/auth.ts +274 -0
  38. package/connectors/connect-calendly/src/utils/bulk.ts +212 -0
  39. package/connectors/connect-calendly/src/utils/config.ts +326 -0
  40. package/connectors/connect-calendly/src/utils/output.ts +175 -0
  41. package/connectors/connect-calendly/src/utils/settings.ts +114 -0
  42. package/connectors/connect-calendly/src/utils/storage.ts +198 -0
  43. package/connectors/connect-calendly/tsconfig.json +16 -0
  44. package/connectors/connect-convertkit/.env.example +11 -0
  45. package/connectors/connect-convertkit/CLAUDE.md +272 -0
  46. package/connectors/connect-convertkit/README.md +193 -0
  47. package/connectors/connect-convertkit/package.json +51 -0
  48. package/connectors/connect-convertkit/scripts/release.ts +179 -0
  49. package/connectors/connect-convertkit/src/api/client.ts +213 -0
  50. package/connectors/connect-convertkit/src/api/example.ts +48 -0
  51. package/connectors/connect-convertkit/src/api/index.ts +51 -0
  52. package/connectors/connect-convertkit/src/cli/index.ts +254 -0
  53. package/connectors/connect-convertkit/src/index.ts +103 -0
  54. package/connectors/connect-convertkit/src/types/index.ts +237 -0
  55. package/connectors/connect-convertkit/src/utils/auth.ts +274 -0
  56. package/connectors/connect-convertkit/src/utils/bulk.ts +212 -0
  57. package/connectors/connect-convertkit/src/utils/config.ts +326 -0
  58. package/connectors/connect-convertkit/src/utils/output.ts +175 -0
  59. package/connectors/connect-convertkit/src/utils/settings.ts +114 -0
  60. package/connectors/connect-convertkit/src/utils/storage.ts +198 -0
  61. package/connectors/connect-convertkit/tsconfig.json +16 -0
  62. package/connectors/connect-crisp/.env.example +11 -0
  63. package/connectors/connect-crisp/CLAUDE.md +272 -0
  64. package/connectors/connect-crisp/README.md +193 -0
  65. package/connectors/connect-crisp/package.json +51 -0
  66. package/connectors/connect-crisp/scripts/release.ts +179 -0
  67. package/connectors/connect-crisp/src/api/client.ts +213 -0
  68. package/connectors/connect-crisp/src/api/example.ts +48 -0
  69. package/connectors/connect-crisp/src/api/index.ts +51 -0
  70. package/connectors/connect-crisp/src/cli/index.ts +254 -0
  71. package/connectors/connect-crisp/src/index.ts +103 -0
  72. package/connectors/connect-crisp/src/types/index.ts +237 -0
  73. package/connectors/connect-crisp/src/utils/auth.ts +274 -0
  74. package/connectors/connect-crisp/src/utils/bulk.ts +212 -0
  75. package/connectors/connect-crisp/src/utils/config.ts +326 -0
  76. package/connectors/connect-crisp/src/utils/output.ts +175 -0
  77. package/connectors/connect-crisp/src/utils/settings.ts +114 -0
  78. package/connectors/connect-crisp/src/utils/storage.ts +198 -0
  79. package/connectors/connect-crisp/tsconfig.json +16 -0
  80. package/connectors/connect-docusign/.env.example +11 -0
  81. package/connectors/connect-docusign/CLAUDE.md +128 -0
  82. package/connectors/connect-docusign/README.md +193 -0
  83. package/connectors/connect-docusign/package.json +52 -0
  84. package/connectors/connect-docusign/src/api/client.ts +133 -0
  85. package/connectors/connect-docusign/src/api/index.ts +178 -0
  86. package/connectors/connect-docusign/src/cli/index.ts +381 -0
  87. package/connectors/connect-docusign/src/index.ts +23 -0
  88. package/connectors/connect-docusign/src/types/index.ts +208 -0
  89. package/connectors/connect-docusign/src/utils/config.ts +125 -0
  90. package/connectors/connect-docusign/src/utils/output.ts +119 -0
  91. package/connectors/connect-docusign/tsconfig.json +16 -0
  92. package/connectors/connect-drift/.env.example +11 -0
  93. package/connectors/connect-drift/CLAUDE.md +272 -0
  94. package/connectors/connect-drift/README.md +193 -0
  95. package/connectors/connect-drift/package.json +51 -0
  96. package/connectors/connect-drift/scripts/release.ts +179 -0
  97. package/connectors/connect-drift/src/api/client.ts +213 -0
  98. package/connectors/connect-drift/src/api/example.ts +48 -0
  99. package/connectors/connect-drift/src/api/index.ts +51 -0
  100. package/connectors/connect-drift/src/cli/index.ts +254 -0
  101. package/connectors/connect-drift/src/index.ts +103 -0
  102. package/connectors/connect-drift/src/types/index.ts +237 -0
  103. package/connectors/connect-drift/src/utils/auth.ts +274 -0
  104. package/connectors/connect-drift/src/utils/bulk.ts +212 -0
  105. package/connectors/connect-drift/src/utils/config.ts +326 -0
  106. package/connectors/connect-drift/src/utils/output.ts +175 -0
  107. package/connectors/connect-drift/src/utils/settings.ts +114 -0
  108. package/connectors/connect-drift/src/utils/storage.ts +198 -0
  109. package/connectors/connect-drift/tsconfig.json +16 -0
  110. package/connectors/connect-freshdesk/.env.example +11 -0
  111. package/connectors/connect-freshdesk/CLAUDE.md +272 -0
  112. package/connectors/connect-freshdesk/README.md +193 -0
  113. package/connectors/connect-freshdesk/package.json +51 -0
  114. package/connectors/connect-freshdesk/scripts/release.ts +179 -0
  115. package/connectors/connect-freshdesk/src/api/client.ts +213 -0
  116. package/connectors/connect-freshdesk/src/api/example.ts +48 -0
  117. package/connectors/connect-freshdesk/src/api/index.ts +51 -0
  118. package/connectors/connect-freshdesk/src/cli/index.ts +254 -0
  119. package/connectors/connect-freshdesk/src/index.ts +103 -0
  120. package/connectors/connect-freshdesk/src/types/index.ts +237 -0
  121. package/connectors/connect-freshdesk/src/utils/auth.ts +274 -0
  122. package/connectors/connect-freshdesk/src/utils/bulk.ts +212 -0
  123. package/connectors/connect-freshdesk/src/utils/config.ts +326 -0
  124. package/connectors/connect-freshdesk/src/utils/output.ts +175 -0
  125. package/connectors/connect-freshdesk/src/utils/settings.ts +114 -0
  126. package/connectors/connect-freshdesk/src/utils/storage.ts +198 -0
  127. package/connectors/connect-freshdesk/tsconfig.json +16 -0
  128. package/connectors/connect-gumroad/.env.example +11 -0
  129. package/connectors/connect-gumroad/CLAUDE.md +272 -0
  130. package/connectors/connect-gumroad/README.md +193 -0
  131. package/connectors/connect-gumroad/package.json +51 -0
  132. package/connectors/connect-gumroad/scripts/release.ts +179 -0
  133. package/connectors/connect-gumroad/src/api/client.ts +213 -0
  134. package/connectors/connect-gumroad/src/api/example.ts +48 -0
  135. package/connectors/connect-gumroad/src/api/index.ts +51 -0
  136. package/connectors/connect-gumroad/src/cli/index.ts +254 -0
  137. package/connectors/connect-gumroad/src/index.ts +103 -0
  138. package/connectors/connect-gumroad/src/types/index.ts +237 -0
  139. package/connectors/connect-gumroad/src/utils/auth.ts +274 -0
  140. package/connectors/connect-gumroad/src/utils/bulk.ts +212 -0
  141. package/connectors/connect-gumroad/src/utils/config.ts +326 -0
  142. package/connectors/connect-gumroad/src/utils/output.ts +175 -0
  143. package/connectors/connect-gumroad/src/utils/settings.ts +114 -0
  144. package/connectors/connect-gumroad/src/utils/storage.ts +198 -0
  145. package/connectors/connect-gumroad/tsconfig.json +16 -0
  146. package/connectors/connect-hubspot/.env.example +11 -0
  147. package/connectors/connect-hubspot/CLAUDE.md +128 -0
  148. package/connectors/connect-hubspot/README.md +193 -0
  149. package/connectors/connect-hubspot/package.json +52 -0
  150. package/connectors/connect-hubspot/src/api/client.ts +136 -0
  151. package/connectors/connect-hubspot/src/api/index.ts +379 -0
  152. package/connectors/connect-hubspot/src/cli/index.ts +589 -0
  153. package/connectors/connect-hubspot/src/index.ts +21 -0
  154. package/connectors/connect-hubspot/src/types/index.ts +285 -0
  155. package/connectors/connect-hubspot/src/utils/config.ts +205 -0
  156. package/connectors/connect-hubspot/src/utils/output.ts +119 -0
  157. package/connectors/connect-hubspot/tsconfig.json +16 -0
  158. package/connectors/connect-intercom/.env.example +11 -0
  159. package/connectors/connect-intercom/CLAUDE.md +131 -0
  160. package/connectors/connect-intercom/README.md +193 -0
  161. package/connectors/connect-intercom/package.json +52 -0
  162. package/connectors/connect-intercom/src/api/client.ts +132 -0
  163. package/connectors/connect-intercom/src/api/index.ts +366 -0
  164. package/connectors/connect-intercom/src/cli/index.ts +831 -0
  165. package/connectors/connect-intercom/src/index.ts +21 -0
  166. package/connectors/connect-intercom/src/types/index.ts +650 -0
  167. package/connectors/connect-intercom/src/utils/config.ts +157 -0
  168. package/connectors/connect-intercom/src/utils/output.ts +119 -0
  169. package/connectors/connect-intercom/tsconfig.json +16 -0
  170. package/connectors/connect-lemonsqueezy/.env.example +11 -0
  171. package/connectors/connect-lemonsqueezy/CLAUDE.md +128 -0
  172. package/connectors/connect-lemonsqueezy/README.md +193 -0
  173. package/connectors/connect-lemonsqueezy/package.json +52 -0
  174. package/connectors/connect-lemonsqueezy/src/api/client.ts +133 -0
  175. package/connectors/connect-lemonsqueezy/src/api/index.ts +502 -0
  176. package/connectors/connect-lemonsqueezy/src/cli/index.ts +723 -0
  177. package/connectors/connect-lemonsqueezy/src/index.ts +21 -0
  178. package/connectors/connect-lemonsqueezy/src/types/index.ts +353 -0
  179. package/connectors/connect-lemonsqueezy/src/utils/config.ts +205 -0
  180. package/connectors/connect-lemonsqueezy/src/utils/output.ts +119 -0
  181. package/connectors/connect-lemonsqueezy/tsconfig.json +16 -0
  182. package/connectors/connect-linkedin/.env.example +11 -0
  183. package/connectors/connect-linkedin/CLAUDE.md +124 -0
  184. package/connectors/connect-linkedin/README.md +193 -0
  185. package/connectors/connect-linkedin/package.json +52 -0
  186. package/connectors/connect-linkedin/src/api/client.ts +132 -0
  187. package/connectors/connect-linkedin/src/api/index.ts +313 -0
  188. package/connectors/connect-linkedin/src/cli/index.ts +548 -0
  189. package/connectors/connect-linkedin/src/index.ts +21 -0
  190. package/connectors/connect-linkedin/src/types/index.ts +472 -0
  191. package/connectors/connect-linkedin/src/utils/config.ts +157 -0
  192. package/connectors/connect-linkedin/src/utils/output.ts +119 -0
  193. package/connectors/connect-linkedin/tsconfig.json +16 -0
  194. package/connectors/connect-mailchimp/.env.example +11 -0
  195. package/connectors/connect-mailchimp/CLAUDE.md +127 -0
  196. package/connectors/connect-mailchimp/README.md +193 -0
  197. package/connectors/connect-mailchimp/package.json +52 -0
  198. package/connectors/connect-mailchimp/src/api/client.ts +162 -0
  199. package/connectors/connect-mailchimp/src/api/index.ts +580 -0
  200. package/connectors/connect-mailchimp/src/cli/index.ts +822 -0
  201. package/connectors/connect-mailchimp/src/index.ts +23 -0
  202. package/connectors/connect-mailchimp/src/types/index.ts +585 -0
  203. package/connectors/connect-mailchimp/src/utils/config.ts +208 -0
  204. package/connectors/connect-mailchimp/src/utils/output.ts +119 -0
  205. package/connectors/connect-mailchimp/tsconfig.json +16 -0
  206. package/connectors/connect-mongodb/.env.example +11 -0
  207. package/connectors/connect-mongodb/CLAUDE.md +272 -0
  208. package/connectors/connect-mongodb/README.md +193 -0
  209. package/connectors/connect-mongodb/package.json +51 -0
  210. package/connectors/connect-mongodb/scripts/release.ts +179 -0
  211. package/connectors/connect-mongodb/src/api/client.ts +213 -0
  212. package/connectors/connect-mongodb/src/api/example.ts +48 -0
  213. package/connectors/connect-mongodb/src/api/index.ts +51 -0
  214. package/connectors/connect-mongodb/src/cli/index.ts +254 -0
  215. package/connectors/connect-mongodb/src/index.ts +103 -0
  216. package/connectors/connect-mongodb/src/types/index.ts +237 -0
  217. package/connectors/connect-mongodb/src/utils/auth.ts +274 -0
  218. package/connectors/connect-mongodb/src/utils/bulk.ts +212 -0
  219. package/connectors/connect-mongodb/src/utils/config.ts +326 -0
  220. package/connectors/connect-mongodb/src/utils/output.ts +175 -0
  221. package/connectors/connect-mongodb/src/utils/settings.ts +114 -0
  222. package/connectors/connect-mongodb/src/utils/storage.ts +198 -0
  223. package/connectors/connect-mongodb/tsconfig.json +16 -0
  224. package/connectors/connect-netlify/.env.example +11 -0
  225. package/connectors/connect-netlify/CLAUDE.md +170 -0
  226. package/connectors/connect-netlify/README.md +193 -0
  227. package/connectors/connect-netlify/package.json +53 -0
  228. package/connectors/connect-netlify/src/api/client.ts +132 -0
  229. package/connectors/connect-netlify/src/api/index.ts +533 -0
  230. package/connectors/connect-netlify/src/cli/index.ts +985 -0
  231. package/connectors/connect-netlify/src/index.ts +22 -0
  232. package/connectors/connect-netlify/src/types/index.ts +423 -0
  233. package/connectors/connect-netlify/src/utils/config.ts +171 -0
  234. package/connectors/connect-netlify/src/utils/output.ts +119 -0
  235. package/connectors/connect-netlify/tsconfig.json +16 -0
  236. package/connectors/connect-paypal/.env.example +11 -0
  237. package/connectors/connect-paypal/CLAUDE.md +128 -0
  238. package/connectors/connect-paypal/README.md +193 -0
  239. package/connectors/connect-paypal/package.json +51 -0
  240. package/connectors/connect-paypal/src/api/client.ts +182 -0
  241. package/connectors/connect-paypal/src/api/index.ts +235 -0
  242. package/connectors/connect-paypal/src/cli/index.ts +559 -0
  243. package/connectors/connect-paypal/src/index.ts +23 -0
  244. package/connectors/connect-paypal/src/types/index.ts +377 -0
  245. package/connectors/connect-paypal/src/utils/config.ts +125 -0
  246. package/connectors/connect-paypal/src/utils/output.ts +119 -0
  247. package/connectors/connect-paypal/tsconfig.json +16 -0
  248. package/connectors/connect-pinterest/.env.example +11 -0
  249. package/connectors/connect-pinterest/CLAUDE.md +115 -0
  250. package/connectors/connect-pinterest/README.md +193 -0
  251. package/connectors/connect-pinterest/package.json +52 -0
  252. package/connectors/connect-pinterest/src/api/client.ts +125 -0
  253. package/connectors/connect-pinterest/src/api/index.ts +203 -0
  254. package/connectors/connect-pinterest/src/cli/index.ts +653 -0
  255. package/connectors/connect-pinterest/src/index.ts +21 -0
  256. package/connectors/connect-pinterest/src/types/index.ts +268 -0
  257. package/connectors/connect-pinterest/src/utils/config.ts +157 -0
  258. package/connectors/connect-pinterest/src/utils/output.ts +119 -0
  259. package/connectors/connect-pinterest/tsconfig.json +16 -0
  260. package/connectors/connect-posthog/.env.example +11 -0
  261. package/connectors/connect-posthog/CLAUDE.md +272 -0
  262. package/connectors/connect-posthog/README.md +193 -0
  263. package/connectors/connect-posthog/package.json +51 -0
  264. package/connectors/connect-posthog/scripts/release.ts +179 -0
  265. package/connectors/connect-posthog/src/api/client.ts +213 -0
  266. package/connectors/connect-posthog/src/api/example.ts +48 -0
  267. package/connectors/connect-posthog/src/api/index.ts +51 -0
  268. package/connectors/connect-posthog/src/cli/index.ts +254 -0
  269. package/connectors/connect-posthog/src/index.ts +103 -0
  270. package/connectors/connect-posthog/src/types/index.ts +237 -0
  271. package/connectors/connect-posthog/src/utils/auth.ts +274 -0
  272. package/connectors/connect-posthog/src/utils/bulk.ts +212 -0
  273. package/connectors/connect-posthog/src/utils/config.ts +326 -0
  274. package/connectors/connect-posthog/src/utils/output.ts +175 -0
  275. package/connectors/connect-posthog/src/utils/settings.ts +114 -0
  276. package/connectors/connect-posthog/src/utils/storage.ts +198 -0
  277. package/connectors/connect-posthog/tsconfig.json +16 -0
  278. package/connectors/connect-salesforce/.env.example +11 -0
  279. package/connectors/connect-salesforce/CLAUDE.md +128 -0
  280. package/connectors/connect-salesforce/README.md +193 -0
  281. package/connectors/connect-salesforce/package.json +53 -0
  282. package/connectors/connect-salesforce/src/api/client.ts +150 -0
  283. package/connectors/connect-salesforce/src/api/index.ts +367 -0
  284. package/connectors/connect-salesforce/src/cli/index.ts +594 -0
  285. package/connectors/connect-salesforce/src/index.ts +21 -0
  286. package/connectors/connect-salesforce/src/types/index.ts +292 -0
  287. package/connectors/connect-salesforce/src/utils/config.ts +208 -0
  288. package/connectors/connect-salesforce/src/utils/output.ts +119 -0
  289. package/connectors/connect-salesforce/tsconfig.json +16 -0
  290. package/connectors/connect-segment/.env.example +11 -0
  291. package/connectors/connect-segment/CLAUDE.md +272 -0
  292. package/connectors/connect-segment/README.md +193 -0
  293. package/connectors/connect-segment/package.json +51 -0
  294. package/connectors/connect-segment/scripts/release.ts +179 -0
  295. package/connectors/connect-segment/src/api/client.ts +213 -0
  296. package/connectors/connect-segment/src/api/example.ts +48 -0
  297. package/connectors/connect-segment/src/api/index.ts +51 -0
  298. package/connectors/connect-segment/src/cli/index.ts +254 -0
  299. package/connectors/connect-segment/src/index.ts +103 -0
  300. package/connectors/connect-segment/src/types/index.ts +237 -0
  301. package/connectors/connect-segment/src/utils/auth.ts +274 -0
  302. package/connectors/connect-segment/src/utils/bulk.ts +212 -0
  303. package/connectors/connect-segment/src/utils/config.ts +326 -0
  304. package/connectors/connect-segment/src/utils/output.ts +175 -0
  305. package/connectors/connect-segment/src/utils/settings.ts +114 -0
  306. package/connectors/connect-segment/src/utils/storage.ts +198 -0
  307. package/connectors/connect-segment/tsconfig.json +16 -0
  308. package/connectors/connect-sendgrid/.env.example +11 -0
  309. package/connectors/connect-sendgrid/CLAUDE.md +125 -0
  310. package/connectors/connect-sendgrid/README.md +193 -0
  311. package/connectors/connect-sendgrid/package.json +53 -0
  312. package/connectors/connect-sendgrid/src/api/client.ts +137 -0
  313. package/connectors/connect-sendgrid/src/api/index.ts +588 -0
  314. package/connectors/connect-sendgrid/src/cli/index.ts +764 -0
  315. package/connectors/connect-sendgrid/src/index.ts +21 -0
  316. package/connectors/connect-sendgrid/src/types/index.ts +403 -0
  317. package/connectors/connect-sendgrid/src/utils/config.ts +197 -0
  318. package/connectors/connect-sendgrid/src/utils/output.ts +119 -0
  319. package/connectors/connect-sendgrid/tsconfig.json +16 -0
  320. package/connectors/connect-supabase/.env.example +11 -0
  321. package/connectors/connect-supabase/CLAUDE.md +132 -0
  322. package/connectors/connect-supabase/README.md +193 -0
  323. package/connectors/connect-supabase/package.json +52 -0
  324. package/connectors/connect-supabase/src/api/client.ts +231 -0
  325. package/connectors/connect-supabase/src/api/index.ts +439 -0
  326. package/connectors/connect-supabase/src/cli/index.ts +691 -0
  327. package/connectors/connect-supabase/src/index.ts +24 -0
  328. package/connectors/connect-supabase/src/types/index.ts +215 -0
  329. package/connectors/connect-supabase/src/utils/config.ts +219 -0
  330. package/connectors/connect-supabase/tsconfig.json +16 -0
  331. package/connectors/connect-vercel/.env.example +11 -0
  332. package/connectors/connect-vercel/CLAUDE.md +142 -0
  333. package/connectors/connect-vercel/README.md +193 -0
  334. package/connectors/connect-vercel/package.json +52 -0
  335. package/connectors/connect-vercel/src/api/client.ts +139 -0
  336. package/connectors/connect-vercel/src/api/index.ts +384 -0
  337. package/connectors/connect-vercel/src/cli/index.ts +740 -0
  338. package/connectors/connect-vercel/src/index.ts +24 -0
  339. package/connectors/connect-vercel/src/types/index.ts +350 -0
  340. package/connectors/connect-vercel/src/utils/config.ts +182 -0
  341. package/connectors/connect-vercel/src/utils/output.ts +119 -0
  342. package/connectors/connect-vercel/tsconfig.json +16 -0
  343. package/connectors/connect-zendesk/.env.example +10 -0
  344. package/connectors/connect-zendesk/.github/workflows/deploy.yml +51 -0
  345. package/connectors/connect-zendesk/CLAUDE.md +78 -0
  346. package/connectors/connect-zendesk/Makefile +129 -0
  347. package/connectors/connect-zendesk/README.md +295 -0
  348. package/connectors/connect-zendesk/SCAFFOLD.md +178 -0
  349. package/connectors/connect-zendesk/nginx-connector.conf +218 -0
  350. package/connectors/connect-zendesk/nginx.conf +61 -0
  351. package/connectors/connect-zendesk/package.json +71 -0
  352. package/connectors/connect-zendesk/scripts/init.sh +62 -0
  353. package/connectors/connect-zendesk/scripts/publish.ts +210 -0
  354. package/connectors/connect-zendesk/server/index.js +142 -0
  355. package/connectors/connect-zendesk/src/api/automations.ts +95 -0
  356. package/connectors/connect-zendesk/src/api/brands.ts +80 -0
  357. package/connectors/connect-zendesk/src/api/bulk.ts +838 -0
  358. package/connectors/connect-zendesk/src/api/client.test.ts +315 -0
  359. package/connectors/connect-zendesk/src/api/client.ts +173 -0
  360. package/connectors/connect-zendesk/src/api/example.ts +59 -0
  361. package/connectors/connect-zendesk/src/api/groups.ts +60 -0
  362. package/connectors/connect-zendesk/src/api/index.test.ts +111 -0
  363. package/connectors/connect-zendesk/src/api/index.ts +131 -0
  364. package/connectors/connect-zendesk/src/api/macros.ts +124 -0
  365. package/connectors/connect-zendesk/src/api/organizations.ts +85 -0
  366. package/connectors/connect-zendesk/src/api/slas.ts +80 -0
  367. package/connectors/connect-zendesk/src/api/ticket-fields.ts +98 -0
  368. package/connectors/connect-zendesk/src/api/tickets.test.ts +215 -0
  369. package/connectors/connect-zendesk/src/api/tickets.ts +103 -0
  370. package/connectors/connect-zendesk/src/api/triggers.test.ts +204 -0
  371. package/connectors/connect-zendesk/src/api/triggers.ts +125 -0
  372. package/connectors/connect-zendesk/src/api/users.test.ts +180 -0
  373. package/connectors/connect-zendesk/src/api/users.ts +108 -0
  374. package/connectors/connect-zendesk/src/api/views.test.ts +223 -0
  375. package/connectors/connect-zendesk/src/api/views.ts +145 -0
  376. package/connectors/connect-zendesk/src/api/webhooks.test.ts +208 -0
  377. package/connectors/connect-zendesk/src/api/webhooks.ts +118 -0
  378. package/connectors/connect-zendesk/src/cli/index.ts +1478 -0
  379. package/connectors/connect-zendesk/src/index.ts +36 -0
  380. package/connectors/connect-zendesk/src/server/index.ts +204 -0
  381. package/connectors/connect-zendesk/src/types/index.ts +910 -0
  382. package/connectors/connect-zendesk/src/utils/config.test.ts +193 -0
  383. package/connectors/connect-zendesk/src/utils/config.ts +526 -0
  384. package/connectors/connect-zendesk/src/utils/export.ts +338 -0
  385. package/connectors/connect-zendesk/src/utils/logger.ts +105 -0
  386. package/connectors/connect-zendesk/src/utils/output.test.ts +137 -0
  387. package/connectors/connect-zendesk/src/utils/output.ts +119 -0
  388. package/connectors/connect-zendesk/tsconfig.json +31 -0
  389. package/dist/index.js +175 -0
  390. package/package.json +1 -1
@@ -0,0 +1,985 @@
1
+ #!/usr/bin/env bun
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import { Netlify } from '../api';
5
+ import {
6
+ getApiKey,
7
+ setApiKey,
8
+ clearConfig,
9
+ getConfigDir,
10
+ setProfileOverride,
11
+ getCurrentProfile,
12
+ setCurrentProfile,
13
+ listProfiles,
14
+ createProfile,
15
+ deleteProfile,
16
+ profileExists,
17
+ loadProfile,
18
+ } from '../utils/config';
19
+ import type { OutputFormat } from '../utils/output';
20
+ import { success, error, info, print } from '../utils/output';
21
+
22
+ const CONNECTOR_NAME = 'connect-netlify';
23
+ const VERSION = '0.0.1';
24
+
25
+ const program = new Command();
26
+
27
+ program
28
+ .name(CONNECTOR_NAME)
29
+ .description('Netlify connector - Manage sites, deploys, forms, DNS, and functions')
30
+ .version(VERSION)
31
+ .option('-k, --api-key <key>', 'API key (overrides config)')
32
+ .option('-f, --format <format>', 'Output format (json, pretty)', 'pretty')
33
+ .option('-p, --profile <profile>', 'Use a specific profile')
34
+ .hook('preAction', (thisCommand) => {
35
+ const opts = thisCommand.opts();
36
+ if (opts.profile) {
37
+ if (!profileExists(opts.profile)) {
38
+ error(`Profile "${opts.profile}" does not exist. Create it with "${CONNECTOR_NAME} profile create ${opts.profile}"`);
39
+ process.exit(1);
40
+ }
41
+ setProfileOverride(opts.profile);
42
+ }
43
+ if (opts.apiKey) {
44
+ process.env.NETLIFY_AUTH_TOKEN = opts.apiKey;
45
+ }
46
+ });
47
+
48
+ function getFormat(cmd: Command): OutputFormat {
49
+ const parent = cmd.parent;
50
+ return (parent?.opts().format || 'pretty') as OutputFormat;
51
+ }
52
+
53
+ function getClient(): Netlify {
54
+ const apiKey = getApiKey();
55
+ if (!apiKey) {
56
+ error(`No API key configured. Run "${CONNECTOR_NAME} config set-key <key>" or set NETLIFY_AUTH_TOKEN environment variable.`);
57
+ process.exit(1);
58
+ }
59
+ return new Netlify({ apiKey });
60
+ }
61
+
62
+ // ============================================
63
+ // Profile Commands
64
+ // ============================================
65
+ const profileCmd = program
66
+ .command('profile')
67
+ .description('Manage configuration profiles');
68
+
69
+ profileCmd
70
+ .command('list')
71
+ .description('List all profiles')
72
+ .action(() => {
73
+ const profiles = listProfiles();
74
+ const current = getCurrentProfile();
75
+
76
+ if (profiles.length === 0) {
77
+ info('No profiles found. Use "profile create <name>" to create one.');
78
+ return;
79
+ }
80
+
81
+ success(`Profiles:`);
82
+ profiles.forEach(p => {
83
+ const isActive = p === current ? chalk.green(' (active)') : '';
84
+ console.log(` ${p}${isActive}`);
85
+ });
86
+ });
87
+
88
+ profileCmd
89
+ .command('use <name>')
90
+ .description('Switch to a profile')
91
+ .action((name: string) => {
92
+ if (!profileExists(name)) {
93
+ error(`Profile "${name}" does not exist. Create it with "profile create ${name}"`);
94
+ process.exit(1);
95
+ }
96
+ setCurrentProfile(name);
97
+ success(`Switched to profile: ${name}`);
98
+ });
99
+
100
+ profileCmd
101
+ .command('create <name>')
102
+ .description('Create a new profile')
103
+ .option('--api-key <key>', 'API key')
104
+ .option('--use', 'Switch to this profile after creation')
105
+ .action((name: string, opts) => {
106
+ if (profileExists(name)) {
107
+ error(`Profile "${name}" already exists`);
108
+ process.exit(1);
109
+ }
110
+
111
+ createProfile(name, {
112
+ apiKey: opts.apiKey,
113
+ });
114
+ success(`Profile "${name}" created`);
115
+
116
+ if (opts.use) {
117
+ setCurrentProfile(name);
118
+ info(`Switched to profile: ${name}`);
119
+ }
120
+ });
121
+
122
+ profileCmd
123
+ .command('delete <name>')
124
+ .description('Delete a profile')
125
+ .action((name: string) => {
126
+ if (name === 'default') {
127
+ error('Cannot delete the default profile');
128
+ process.exit(1);
129
+ }
130
+ if (deleteProfile(name)) {
131
+ success(`Profile "${name}" deleted`);
132
+ } else {
133
+ error(`Profile "${name}" not found`);
134
+ process.exit(1);
135
+ }
136
+ });
137
+
138
+ profileCmd
139
+ .command('show [name]')
140
+ .description('Show profile configuration')
141
+ .action((name?: string) => {
142
+ const profileName = name || getCurrentProfile();
143
+ const config = loadProfile(profileName);
144
+ const active = getCurrentProfile();
145
+
146
+ console.log(chalk.bold(`Profile: ${profileName}${profileName === active ? chalk.green(' (active)') : ''}`));
147
+ info(`API Key: ${config.apiKey ? `${config.apiKey.substring(0, 8)}...` : chalk.gray('not set')}`);
148
+ });
149
+
150
+ // ============================================
151
+ // Config Commands
152
+ // ============================================
153
+ const configCmd = program
154
+ .command('config')
155
+ .description('Manage CLI configuration');
156
+
157
+ configCmd
158
+ .command('set-key <apiKey>')
159
+ .description('Set API key')
160
+ .action((apiKey: string) => {
161
+ setApiKey(apiKey);
162
+ success(`API key saved to profile: ${getCurrentProfile()}`);
163
+ });
164
+
165
+ configCmd
166
+ .command('show')
167
+ .description('Show current configuration')
168
+ .action(() => {
169
+ const profileName = getCurrentProfile();
170
+ const apiKey = getApiKey();
171
+
172
+ console.log(chalk.bold(`Active Profile: ${profileName}`));
173
+ info(`Config directory: ${getConfigDir()}`);
174
+ info(`API Key: ${apiKey ? `${apiKey.substring(0, 8)}...` : chalk.gray('not set')}`);
175
+ });
176
+
177
+ configCmd
178
+ .command('clear')
179
+ .description('Clear configuration')
180
+ .action(() => {
181
+ clearConfig();
182
+ success(`Configuration cleared for profile: ${getCurrentProfile()}`);
183
+ });
184
+
185
+ // ============================================
186
+ // User Commands
187
+ // ============================================
188
+ program
189
+ .command('user')
190
+ .description('Get current user info')
191
+ .action(async function(this: Command) {
192
+ try {
193
+ const client = getClient();
194
+ const user = await client.getCurrentUser();
195
+ print(user, getFormat(this));
196
+ } catch (err) {
197
+ error(String(err));
198
+ process.exit(1);
199
+ }
200
+ });
201
+
202
+ // ============================================
203
+ // Account Commands
204
+ // ============================================
205
+ const accountCmd = program
206
+ .command('account')
207
+ .description('Account operations');
208
+
209
+ accountCmd
210
+ .command('list')
211
+ .description('List accounts')
212
+ .action(async function(this: Command) {
213
+ try {
214
+ const client = getClient();
215
+ const accounts = await client.listAccounts();
216
+ print(accounts, getFormat(this));
217
+ } catch (err) {
218
+ error(String(err));
219
+ process.exit(1);
220
+ }
221
+ });
222
+
223
+ accountCmd
224
+ .command('get <accountId>')
225
+ .description('Get account details')
226
+ .action(async function(this: Command, accountId: string) {
227
+ try {
228
+ const client = getClient();
229
+ const account = await client.getAccount(accountId);
230
+ print(account, getFormat(this));
231
+ } catch (err) {
232
+ error(String(err));
233
+ process.exit(1);
234
+ }
235
+ });
236
+
237
+ // ============================================
238
+ // Site Commands
239
+ // ============================================
240
+ const siteCmd = program
241
+ .command('site')
242
+ .description('Site operations');
243
+
244
+ siteCmd
245
+ .command('list')
246
+ .description('List sites')
247
+ .option('--filter <filter>', 'Filter sites (all, owner, guest)', 'all')
248
+ .option('--page <page>', 'Page number')
249
+ .option('--per-page <count>', 'Items per page')
250
+ .action(async function(this: Command, opts) {
251
+ try {
252
+ const client = getClient();
253
+ const sites = await client.listSites({
254
+ filter: opts.filter,
255
+ page: opts.page ? parseInt(opts.page) : undefined,
256
+ per_page: opts.perPage ? parseInt(opts.perPage) : undefined,
257
+ });
258
+ print(sites, getFormat(this));
259
+ } catch (err) {
260
+ error(String(err));
261
+ process.exit(1);
262
+ }
263
+ });
264
+
265
+ siteCmd
266
+ .command('get <siteId>')
267
+ .description('Get site details')
268
+ .action(async function(this: Command, siteId: string) {
269
+ try {
270
+ const client = getClient();
271
+ const site = await client.getSite(siteId);
272
+ print(site, getFormat(this));
273
+ } catch (err) {
274
+ error(String(err));
275
+ process.exit(1);
276
+ }
277
+ });
278
+
279
+ siteCmd
280
+ .command('create')
281
+ .description('Create a site')
282
+ .option('-n, --name <name>', 'Site name')
283
+ .option('--domain <domain>', 'Custom domain')
284
+ .option('--account-slug <slug>', 'Account slug')
285
+ .action(async function(this: Command, opts) {
286
+ try {
287
+ const client = getClient();
288
+ const site = await client.createSite({
289
+ name: opts.name,
290
+ custom_domain: opts.domain,
291
+ account_slug: opts.accountSlug,
292
+ });
293
+ success('Site created!');
294
+ print(site, getFormat(this));
295
+ } catch (err) {
296
+ error(String(err));
297
+ process.exit(1);
298
+ }
299
+ });
300
+
301
+ siteCmd
302
+ .command('update <siteId>')
303
+ .description('Update a site')
304
+ .option('-n, --name <name>', 'Site name')
305
+ .option('--domain <domain>', 'Custom domain')
306
+ .action(async function(this: Command, siteId: string, opts) {
307
+ try {
308
+ const client = getClient();
309
+ const site = await client.updateSite(siteId, {
310
+ name: opts.name,
311
+ custom_domain: opts.domain,
312
+ });
313
+ success('Site updated!');
314
+ print(site, getFormat(this));
315
+ } catch (err) {
316
+ error(String(err));
317
+ process.exit(1);
318
+ }
319
+ });
320
+
321
+ siteCmd
322
+ .command('delete <siteId>')
323
+ .description('Delete a site')
324
+ .action(async function(this: Command, siteId: string) {
325
+ try {
326
+ const client = getClient();
327
+ await client.deleteSite(siteId);
328
+ success('Site deleted!');
329
+ } catch (err) {
330
+ error(String(err));
331
+ process.exit(1);
332
+ }
333
+ });
334
+
335
+ // ============================================
336
+ // Deploy Commands
337
+ // ============================================
338
+ const deployCmd = program
339
+ .command('deploy')
340
+ .description('Deploy operations');
341
+
342
+ deployCmd
343
+ .command('list <siteId>')
344
+ .description('List deploys for a site')
345
+ .option('--page <page>', 'Page number')
346
+ .option('--per-page <count>', 'Items per page')
347
+ .option('--state <state>', 'Filter by state')
348
+ .option('--branch <branch>', 'Filter by branch')
349
+ .action(async function(this: Command, siteId: string, opts) {
350
+ try {
351
+ const client = getClient();
352
+ const deploys = await client.listDeploys(siteId, {
353
+ page: opts.page ? parseInt(opts.page) : undefined,
354
+ per_page: opts.perPage ? parseInt(opts.perPage) : undefined,
355
+ state: opts.state,
356
+ branch: opts.branch,
357
+ });
358
+ print(deploys, getFormat(this));
359
+ } catch (err) {
360
+ error(String(err));
361
+ process.exit(1);
362
+ }
363
+ });
364
+
365
+ deployCmd
366
+ .command('get <deployId>')
367
+ .description('Get deploy details')
368
+ .action(async function(this: Command, deployId: string) {
369
+ try {
370
+ const client = getClient();
371
+ const deploy = await client.getDeploy(deployId);
372
+ print(deploy, getFormat(this));
373
+ } catch (err) {
374
+ error(String(err));
375
+ process.exit(1);
376
+ }
377
+ });
378
+
379
+ deployCmd
380
+ .command('create <siteId>')
381
+ .description('Create a deploy')
382
+ .option('--title <title>', 'Deploy title')
383
+ .option('--branch <branch>', 'Branch name')
384
+ .option('--draft', 'Create as draft')
385
+ .action(async function(this: Command, siteId: string, opts) {
386
+ try {
387
+ const client = getClient();
388
+ const deploy = await client.createDeploy(siteId, {
389
+ title: opts.title,
390
+ branch: opts.branch,
391
+ draft: opts.draft,
392
+ });
393
+ success('Deploy created!');
394
+ print(deploy, getFormat(this));
395
+ } catch (err) {
396
+ error(String(err));
397
+ process.exit(1);
398
+ }
399
+ });
400
+
401
+ deployCmd
402
+ .command('lock <deployId>')
403
+ .description('Lock a deploy')
404
+ .action(async function(this: Command, deployId: string) {
405
+ try {
406
+ const client = getClient();
407
+ const deploy = await client.lockDeploy(deployId);
408
+ success('Deploy locked!');
409
+ print(deploy, getFormat(this));
410
+ } catch (err) {
411
+ error(String(err));
412
+ process.exit(1);
413
+ }
414
+ });
415
+
416
+ deployCmd
417
+ .command('unlock <deployId>')
418
+ .description('Unlock a deploy')
419
+ .action(async function(this: Command, deployId: string) {
420
+ try {
421
+ const client = getClient();
422
+ const deploy = await client.unlockDeploy(deployId);
423
+ success('Deploy unlocked!');
424
+ print(deploy, getFormat(this));
425
+ } catch (err) {
426
+ error(String(err));
427
+ process.exit(1);
428
+ }
429
+ });
430
+
431
+ deployCmd
432
+ .command('publish <siteId> <deployId>')
433
+ .description('Publish a deploy (make it production)')
434
+ .action(async function(this: Command, siteId: string, deployId: string) {
435
+ try {
436
+ const client = getClient();
437
+ const deploy = await client.publishDeploy(siteId, deployId);
438
+ success('Deploy published!');
439
+ print(deploy, getFormat(this));
440
+ } catch (err) {
441
+ error(String(err));
442
+ process.exit(1);
443
+ }
444
+ });
445
+
446
+ deployCmd
447
+ .command('cancel <deployId>')
448
+ .description('Cancel a deploy')
449
+ .action(async function(this: Command, deployId: string) {
450
+ try {
451
+ const client = getClient();
452
+ const deploy = await client.cancelDeploy(deployId);
453
+ success('Deploy cancelled!');
454
+ print(deploy, getFormat(this));
455
+ } catch (err) {
456
+ error(String(err));
457
+ process.exit(1);
458
+ }
459
+ });
460
+
461
+ // ============================================
462
+ // Build Commands
463
+ // ============================================
464
+ const buildCmd = program
465
+ .command('build')
466
+ .description('Build operations');
467
+
468
+ buildCmd
469
+ .command('list <siteId>')
470
+ .description('List builds for a site')
471
+ .option('--page <page>', 'Page number')
472
+ .option('--per-page <count>', 'Items per page')
473
+ .action(async function(this: Command, siteId: string, opts) {
474
+ try {
475
+ const client = getClient();
476
+ const builds = await client.listBuilds(siteId, {
477
+ page: opts.page ? parseInt(opts.page) : undefined,
478
+ per_page: opts.perPage ? parseInt(opts.perPage) : undefined,
479
+ });
480
+ print(builds, getFormat(this));
481
+ } catch (err) {
482
+ error(String(err));
483
+ process.exit(1);
484
+ }
485
+ });
486
+
487
+ buildCmd
488
+ .command('get <buildId>')
489
+ .description('Get build details')
490
+ .action(async function(this: Command, buildId: string) {
491
+ try {
492
+ const client = getClient();
493
+ const build = await client.getBuild(buildId);
494
+ print(build, getFormat(this));
495
+ } catch (err) {
496
+ error(String(err));
497
+ process.exit(1);
498
+ }
499
+ });
500
+
501
+ buildCmd
502
+ .command('trigger <siteId>')
503
+ .description('Trigger a new build')
504
+ .option('--clear-cache', 'Clear cache before build')
505
+ .action(async function(this: Command, siteId: string, opts) {
506
+ try {
507
+ const client = getClient();
508
+ const build = await client.triggerBuild(siteId, {
509
+ clear_cache: opts.clearCache,
510
+ });
511
+ success('Build triggered!');
512
+ print(build, getFormat(this));
513
+ } catch (err) {
514
+ error(String(err));
515
+ process.exit(1);
516
+ }
517
+ });
518
+
519
+ // ============================================
520
+ // Form Commands
521
+ // ============================================
522
+ const formCmd = program
523
+ .command('form')
524
+ .description('Form operations');
525
+
526
+ formCmd
527
+ .command('list <siteId>')
528
+ .description('List forms for a site')
529
+ .action(async function(this: Command, siteId: string) {
530
+ try {
531
+ const client = getClient();
532
+ const forms = await client.listForms(siteId);
533
+ print(forms, getFormat(this));
534
+ } catch (err) {
535
+ error(String(err));
536
+ process.exit(1);
537
+ }
538
+ });
539
+
540
+ formCmd
541
+ .command('submissions <formId>')
542
+ .description('List form submissions')
543
+ .option('--page <page>', 'Page number')
544
+ .option('--per-page <count>', 'Items per page')
545
+ .action(async function(this: Command, formId: string, opts) {
546
+ try {
547
+ const client = getClient();
548
+ const submissions = await client.listFormSubmissions(formId, {
549
+ page: opts.page ? parseInt(opts.page) : undefined,
550
+ per_page: opts.perPage ? parseInt(opts.perPage) : undefined,
551
+ });
552
+ print(submissions, getFormat(this));
553
+ } catch (err) {
554
+ error(String(err));
555
+ process.exit(1);
556
+ }
557
+ });
558
+
559
+ formCmd
560
+ .command('delete <siteId> <formId>')
561
+ .description('Delete a form')
562
+ .action(async function(this: Command, siteId: string, formId: string) {
563
+ try {
564
+ const client = getClient();
565
+ await client.deleteForm(siteId, formId);
566
+ success('Form deleted!');
567
+ } catch (err) {
568
+ error(String(err));
569
+ process.exit(1);
570
+ }
571
+ });
572
+
573
+ // ============================================
574
+ // DNS Commands
575
+ // ============================================
576
+ const dnsCmd = program
577
+ .command('dns')
578
+ .description('DNS operations');
579
+
580
+ dnsCmd
581
+ .command('zones')
582
+ .description('List DNS zones')
583
+ .option('--account-slug <slug>', 'Account slug')
584
+ .action(async function(this: Command, opts) {
585
+ try {
586
+ const client = getClient();
587
+ const zones = await client.listDnsZones({
588
+ account_slug: opts.accountSlug,
589
+ });
590
+ print(zones, getFormat(this));
591
+ } catch (err) {
592
+ error(String(err));
593
+ process.exit(1);
594
+ }
595
+ });
596
+
597
+ dnsCmd
598
+ .command('zone <zoneId>')
599
+ .description('Get DNS zone details')
600
+ .action(async function(this: Command, zoneId: string) {
601
+ try {
602
+ const client = getClient();
603
+ const zone = await client.getDnsZone(zoneId);
604
+ print(zone, getFormat(this));
605
+ } catch (err) {
606
+ error(String(err));
607
+ process.exit(1);
608
+ }
609
+ });
610
+
611
+ dnsCmd
612
+ .command('zone-create')
613
+ .description('Create a DNS zone')
614
+ .requiredOption('-n, --name <name>', 'Zone name')
615
+ .option('--account-slug <slug>', 'Account slug')
616
+ .option('--site-id <siteId>', 'Site ID')
617
+ .action(async function(this: Command, opts) {
618
+ try {
619
+ const client = getClient();
620
+ const zone = await client.createDnsZone({
621
+ name: opts.name,
622
+ account_slug: opts.accountSlug,
623
+ site_id: opts.siteId,
624
+ });
625
+ success('DNS zone created!');
626
+ print(zone, getFormat(this));
627
+ } catch (err) {
628
+ error(String(err));
629
+ process.exit(1);
630
+ }
631
+ });
632
+
633
+ dnsCmd
634
+ .command('zone-delete <zoneId>')
635
+ .description('Delete a DNS zone')
636
+ .action(async function(this: Command, zoneId: string) {
637
+ try {
638
+ const client = getClient();
639
+ await client.deleteDnsZone(zoneId);
640
+ success('DNS zone deleted!');
641
+ } catch (err) {
642
+ error(String(err));
643
+ process.exit(1);
644
+ }
645
+ });
646
+
647
+ dnsCmd
648
+ .command('records <zoneId>')
649
+ .description('List DNS records for a zone')
650
+ .action(async function(this: Command, zoneId: string) {
651
+ try {
652
+ const client = getClient();
653
+ const records = await client.listDnsRecords(zoneId);
654
+ print(records, getFormat(this));
655
+ } catch (err) {
656
+ error(String(err));
657
+ process.exit(1);
658
+ }
659
+ });
660
+
661
+ dnsCmd
662
+ .command('record-create <zoneId>')
663
+ .description('Create a DNS record')
664
+ .requiredOption('-t, --type <type>', 'Record type (A, AAAA, CNAME, TXT, MX, etc.)')
665
+ .requiredOption('-h, --hostname <hostname>', 'Hostname')
666
+ .requiredOption('-v, --value <value>', 'Record value')
667
+ .option('--ttl <ttl>', 'TTL in seconds')
668
+ .option('--priority <priority>', 'Priority (for MX records)')
669
+ .action(async function(this: Command, zoneId: string, opts) {
670
+ try {
671
+ const client = getClient();
672
+ const record = await client.createDnsRecord(zoneId, {
673
+ type: opts.type,
674
+ hostname: opts.hostname,
675
+ value: opts.value,
676
+ ttl: opts.ttl ? parseInt(opts.ttl) : undefined,
677
+ priority: opts.priority ? parseInt(opts.priority) : undefined,
678
+ });
679
+ success('DNS record created!');
680
+ print(record, getFormat(this));
681
+ } catch (err) {
682
+ error(String(err));
683
+ process.exit(1);
684
+ }
685
+ });
686
+
687
+ dnsCmd
688
+ .command('record-delete <zoneId> <recordId>')
689
+ .description('Delete a DNS record')
690
+ .action(async function(this: Command, zoneId: string, recordId: string) {
691
+ try {
692
+ const client = getClient();
693
+ await client.deleteDnsRecord(zoneId, recordId);
694
+ success('DNS record deleted!');
695
+ } catch (err) {
696
+ error(String(err));
697
+ process.exit(1);
698
+ }
699
+ });
700
+
701
+ // ============================================
702
+ // Hook Commands
703
+ // ============================================
704
+ const hookCmd = program
705
+ .command('hook')
706
+ .description('Hook operations');
707
+
708
+ hookCmd
709
+ .command('list <siteId>')
710
+ .description('List hooks for a site')
711
+ .action(async function(this: Command, siteId: string) {
712
+ try {
713
+ const client = getClient();
714
+ const hooks = await client.listHooks(siteId);
715
+ print(hooks, getFormat(this));
716
+ } catch (err) {
717
+ error(String(err));
718
+ process.exit(1);
719
+ }
720
+ });
721
+
722
+ hookCmd
723
+ .command('get <hookId>')
724
+ .description('Get hook details')
725
+ .action(async function(this: Command, hookId: string) {
726
+ try {
727
+ const client = getClient();
728
+ const hook = await client.getHook(hookId);
729
+ print(hook, getFormat(this));
730
+ } catch (err) {
731
+ error(String(err));
732
+ process.exit(1);
733
+ }
734
+ });
735
+
736
+ hookCmd
737
+ .command('delete <hookId>')
738
+ .description('Delete a hook')
739
+ .action(async function(this: Command, hookId: string) {
740
+ try {
741
+ const client = getClient();
742
+ await client.deleteHook(hookId);
743
+ success('Hook deleted!');
744
+ } catch (err) {
745
+ error(String(err));
746
+ process.exit(1);
747
+ }
748
+ });
749
+
750
+ hookCmd
751
+ .command('enable <hookId>')
752
+ .description('Enable a hook')
753
+ .action(async function(this: Command, hookId: string) {
754
+ try {
755
+ const client = getClient();
756
+ const hook = await client.enableHook(hookId);
757
+ success('Hook enabled!');
758
+ print(hook, getFormat(this));
759
+ } catch (err) {
760
+ error(String(err));
761
+ process.exit(1);
762
+ }
763
+ });
764
+
765
+ // ============================================
766
+ // Function Commands
767
+ // ============================================
768
+ const functionCmd = program
769
+ .command('function')
770
+ .description('Function operations');
771
+
772
+ functionCmd
773
+ .command('list <siteId>')
774
+ .description('List functions for a site')
775
+ .action(async function(this: Command, siteId: string) {
776
+ try {
777
+ const client = getClient();
778
+ const functions = await client.listFunctions(siteId);
779
+ print(functions, getFormat(this));
780
+ } catch (err) {
781
+ error(String(err));
782
+ process.exit(1);
783
+ }
784
+ });
785
+
786
+ // ============================================
787
+ // Deploy Key Commands
788
+ // ============================================
789
+ const deployKeyCmd = program
790
+ .command('deploy-key')
791
+ .description('Deploy key operations');
792
+
793
+ deployKeyCmd
794
+ .command('list')
795
+ .description('List deploy keys')
796
+ .action(async function(this: Command) {
797
+ try {
798
+ const client = getClient();
799
+ const keys = await client.listDeployKeys();
800
+ print(keys, getFormat(this));
801
+ } catch (err) {
802
+ error(String(err));
803
+ process.exit(1);
804
+ }
805
+ });
806
+
807
+ deployKeyCmd
808
+ .command('get <keyId>')
809
+ .description('Get deploy key details')
810
+ .action(async function(this: Command, keyId: string) {
811
+ try {
812
+ const client = getClient();
813
+ const key = await client.getDeployKey(keyId);
814
+ print(key, getFormat(this));
815
+ } catch (err) {
816
+ error(String(err));
817
+ process.exit(1);
818
+ }
819
+ });
820
+
821
+ deployKeyCmd
822
+ .command('create')
823
+ .description('Create a deploy key')
824
+ .action(async function(this: Command) {
825
+ try {
826
+ const client = getClient();
827
+ const key = await client.createDeployKey();
828
+ success('Deploy key created!');
829
+ print(key, getFormat(this));
830
+ } catch (err) {
831
+ error(String(err));
832
+ process.exit(1);
833
+ }
834
+ });
835
+
836
+ deployKeyCmd
837
+ .command('delete <keyId>')
838
+ .description('Delete a deploy key')
839
+ .action(async function(this: Command, keyId: string) {
840
+ try {
841
+ const client = getClient();
842
+ await client.deleteDeployKey(keyId);
843
+ success('Deploy key deleted!');
844
+ } catch (err) {
845
+ error(String(err));
846
+ process.exit(1);
847
+ }
848
+ });
849
+
850
+ // ============================================
851
+ // Snippet Commands
852
+ // ============================================
853
+ const snippetCmd = program
854
+ .command('snippet')
855
+ .description('Snippet operations');
856
+
857
+ snippetCmd
858
+ .command('list <siteId>')
859
+ .description('List snippets for a site')
860
+ .action(async function(this: Command, siteId: string) {
861
+ try {
862
+ const client = getClient();
863
+ const snippets = await client.listSnippets(siteId);
864
+ print(snippets, getFormat(this));
865
+ } catch (err) {
866
+ error(String(err));
867
+ process.exit(1);
868
+ }
869
+ });
870
+
871
+ snippetCmd
872
+ .command('get <siteId> <snippetId>')
873
+ .description('Get snippet details')
874
+ .action(async function(this: Command, siteId: string, snippetId: string) {
875
+ try {
876
+ const client = getClient();
877
+ const snippet = await client.getSnippet(siteId, parseInt(snippetId));
878
+ print(snippet, getFormat(this));
879
+ } catch (err) {
880
+ error(String(err));
881
+ process.exit(1);
882
+ }
883
+ });
884
+
885
+ snippetCmd
886
+ .command('create <siteId>')
887
+ .description('Create a snippet')
888
+ .requiredOption('-t, --title <title>', 'Snippet title')
889
+ .option('--general <code>', 'General snippet code')
890
+ .option('--general-position <position>', 'Position (head, body)')
891
+ .action(async function(this: Command, siteId: string, opts) {
892
+ try {
893
+ const client = getClient();
894
+ const snippet = await client.createSnippet(siteId, {
895
+ title: opts.title,
896
+ general: opts.general,
897
+ general_position: opts.generalPosition,
898
+ });
899
+ success('Snippet created!');
900
+ print(snippet, getFormat(this));
901
+ } catch (err) {
902
+ error(String(err));
903
+ process.exit(1);
904
+ }
905
+ });
906
+
907
+ snippetCmd
908
+ .command('delete <siteId> <snippetId>')
909
+ .description('Delete a snippet')
910
+ .action(async function(this: Command, siteId: string, snippetId: string) {
911
+ try {
912
+ const client = getClient();
913
+ await client.deleteSnippet(siteId, parseInt(snippetId));
914
+ success('Snippet deleted!');
915
+ } catch (err) {
916
+ error(String(err));
917
+ process.exit(1);
918
+ }
919
+ });
920
+
921
+ // ============================================
922
+ // Split Test Commands
923
+ // ============================================
924
+ const splitTestCmd = program
925
+ .command('split-test')
926
+ .description('Split test operations');
927
+
928
+ splitTestCmd
929
+ .command('list <siteId>')
930
+ .description('List split tests for a site')
931
+ .action(async function(this: Command, siteId: string) {
932
+ try {
933
+ const client = getClient();
934
+ const tests = await client.listSplitTests(siteId);
935
+ print(tests, getFormat(this));
936
+ } catch (err) {
937
+ error(String(err));
938
+ process.exit(1);
939
+ }
940
+ });
941
+
942
+ splitTestCmd
943
+ .command('get <siteId> <splitTestId>')
944
+ .description('Get split test details')
945
+ .action(async function(this: Command, siteId: string, splitTestId: string) {
946
+ try {
947
+ const client = getClient();
948
+ const test = await client.getSplitTest(siteId, splitTestId);
949
+ print(test, getFormat(this));
950
+ } catch (err) {
951
+ error(String(err));
952
+ process.exit(1);
953
+ }
954
+ });
955
+
956
+ splitTestCmd
957
+ .command('enable <siteId> <splitTestId>')
958
+ .description('Enable a split test')
959
+ .action(async function(this: Command, siteId: string, splitTestId: string) {
960
+ try {
961
+ const client = getClient();
962
+ await client.enableSplitTest(siteId, splitTestId);
963
+ success('Split test enabled!');
964
+ } catch (err) {
965
+ error(String(err));
966
+ process.exit(1);
967
+ }
968
+ });
969
+
970
+ splitTestCmd
971
+ .command('disable <siteId> <splitTestId>')
972
+ .description('Disable a split test')
973
+ .action(async function(this: Command, siteId: string, splitTestId: string) {
974
+ try {
975
+ const client = getClient();
976
+ await client.disableSplitTest(siteId, splitTestId);
977
+ success('Split test disabled!');
978
+ } catch (err) {
979
+ error(String(err));
980
+ process.exit(1);
981
+ }
982
+ });
983
+
984
+ // Parse and execute
985
+ program.parse();