@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,274 @@
1
+ import { createServer } from 'http';
2
+ import type { OAuth2Tokens, OAuth2Config } from '../types';
3
+ import { saveOAuthTokens, loadOAuthTokens, getOAuthConfig } from './config';
4
+
5
+ // ============================================
6
+ // OAuth2 Authentication Utility
7
+ // ============================================
8
+
9
+ // TODO: Replace with your OAuth provider's endpoints
10
+ const DEFAULT_AUTH_URL = 'https://accounts.example.com/oauth2/authorize';
11
+ const DEFAULT_TOKEN_URL = 'https://accounts.example.com/oauth2/token';
12
+
13
+ // TODO: Define your OAuth scopes
14
+ const DEFAULT_SCOPES = ['read', 'write'].join(' ');
15
+
16
+ const REDIRECT_PORT = 8089;
17
+ const REDIRECT_URI = `http://localhost:${REDIRECT_PORT}/callback`;
18
+
19
+ export interface AuthResult {
20
+ success: boolean;
21
+ tokens?: OAuth2Tokens;
22
+ error?: string;
23
+ }
24
+
25
+ export interface AuthUrlOptions {
26
+ authUrl?: string;
27
+ scopes?: string;
28
+ state?: string;
29
+ extraParams?: Record<string, string>;
30
+ }
31
+
32
+ /**
33
+ * Generate the OAuth2 authorization URL
34
+ */
35
+ export function getAuthUrl(options: AuthUrlOptions = {}): string {
36
+ const config = getOAuthConfig();
37
+ if (!config?.clientId) {
38
+ throw new Error('OAuth client ID not configured. Run "config set-credentials" first.');
39
+ }
40
+
41
+ const authUrl = options.authUrl || DEFAULT_AUTH_URL;
42
+ const scopes = options.scopes || DEFAULT_SCOPES;
43
+
44
+ const params = new URLSearchParams({
45
+ client_id: config.clientId,
46
+ redirect_uri: REDIRECT_URI,
47
+ response_type: 'code',
48
+ scope: scopes,
49
+ access_type: 'offline',
50
+ prompt: 'consent', // Force consent to get refresh token
51
+ ...(options.state && { state: options.state }),
52
+ ...options.extraParams,
53
+ });
54
+
55
+ return `${authUrl}?${params.toString()}`;
56
+ }
57
+
58
+ /**
59
+ * Exchange authorization code for tokens
60
+ */
61
+ export async function exchangeCodeForTokens(
62
+ code: string,
63
+ tokenUrl: string = DEFAULT_TOKEN_URL
64
+ ): Promise<OAuth2Tokens> {
65
+ const config = getOAuthConfig();
66
+
67
+ if (!config?.clientId || !config?.clientSecret) {
68
+ throw new Error('OAuth credentials not configured');
69
+ }
70
+
71
+ const response = await fetch(tokenUrl, {
72
+ method: 'POST',
73
+ headers: {
74
+ 'Content-Type': 'application/x-www-form-urlencoded',
75
+ },
76
+ body: new URLSearchParams({
77
+ code,
78
+ client_id: config.clientId,
79
+ client_secret: config.clientSecret,
80
+ redirect_uri: REDIRECT_URI,
81
+ grant_type: 'authorization_code',
82
+ }),
83
+ });
84
+
85
+ if (!response.ok) {
86
+ const error = await response.json().catch(() => ({ error: response.statusText }));
87
+ throw new Error(`Token exchange failed: ${error.error_description || error.error}`);
88
+ }
89
+
90
+ const data = await response.json();
91
+
92
+ const tokens: OAuth2Tokens = {
93
+ accessToken: data.access_token,
94
+ refreshToken: data.refresh_token,
95
+ expiresAt: Date.now() + data.expires_in * 1000,
96
+ tokenType: data.token_type,
97
+ scope: data.scope,
98
+ };
99
+
100
+ return tokens;
101
+ }
102
+
103
+ /**
104
+ * Refresh the access token using the refresh token
105
+ */
106
+ export async function refreshAccessToken(
107
+ tokenUrl: string = DEFAULT_TOKEN_URL
108
+ ): Promise<OAuth2Tokens> {
109
+ const config = getOAuthConfig();
110
+ const currentTokens = loadOAuthTokens();
111
+
112
+ if (!config?.clientId || !config?.clientSecret) {
113
+ throw new Error('OAuth credentials not configured');
114
+ }
115
+
116
+ if (!currentTokens?.refreshToken) {
117
+ throw new Error('No refresh token available. Please login again.');
118
+ }
119
+
120
+ const response = await fetch(tokenUrl, {
121
+ method: 'POST',
122
+ headers: {
123
+ 'Content-Type': 'application/x-www-form-urlencoded',
124
+ },
125
+ body: new URLSearchParams({
126
+ client_id: config.clientId,
127
+ client_secret: config.clientSecret,
128
+ refresh_token: currentTokens.refreshToken,
129
+ grant_type: 'refresh_token',
130
+ }),
131
+ });
132
+
133
+ if (!response.ok) {
134
+ const error = await response.json().catch(() => ({ error: response.statusText }));
135
+ throw new Error(`Token refresh failed: ${error.error_description || error.error}`);
136
+ }
137
+
138
+ const data = await response.json();
139
+
140
+ const tokens: OAuth2Tokens = {
141
+ accessToken: data.access_token,
142
+ refreshToken: data.refresh_token || currentTokens.refreshToken, // Keep original if not returned
143
+ expiresAt: Date.now() + data.expires_in * 1000,
144
+ tokenType: data.token_type,
145
+ scope: data.scope || currentTokens.scope,
146
+ };
147
+
148
+ saveOAuthTokens(tokens);
149
+ return tokens;
150
+ }
151
+
152
+ /**
153
+ * Start a local HTTP server to receive the OAuth callback
154
+ */
155
+ export function startCallbackServer(): Promise<AuthResult> {
156
+ return new Promise((resolve) => {
157
+ const server = createServer(async (req, res) => {
158
+ const url = new URL(req.url || '', `http://localhost:${REDIRECT_PORT}`);
159
+
160
+ if (url.pathname === '/callback') {
161
+ const code = url.searchParams.get('code');
162
+ const error = url.searchParams.get('error');
163
+
164
+ if (error) {
165
+ res.writeHead(200, { 'Content-Type': 'text/html' });
166
+ res.end(`
167
+ <html>
168
+ <body style="font-family: sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0;">
169
+ <div style="text-align: center;">
170
+ <h1 style="color: #dc3545;">Authentication Failed</h1>
171
+ <p>Error: ${error}</p>
172
+ <p>You can close this window.</p>
173
+ </div>
174
+ </body>
175
+ </html>
176
+ `);
177
+ server.close();
178
+ resolve({ success: false, error });
179
+ return;
180
+ }
181
+
182
+ if (code) {
183
+ try {
184
+ const tokens = await exchangeCodeForTokens(code);
185
+ res.writeHead(200, { 'Content-Type': 'text/html' });
186
+ res.end(`
187
+ <html>
188
+ <body style="font-family: sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0;">
189
+ <div style="text-align: center;">
190
+ <h1 style="color: #28a745;">Authentication Successful!</h1>
191
+ <p>You can close this window and return to the terminal.</p>
192
+ </div>
193
+ </body>
194
+ </html>
195
+ `);
196
+ server.close();
197
+ resolve({ success: true, tokens });
198
+ } catch (err) {
199
+ res.writeHead(200, { 'Content-Type': 'text/html' });
200
+ res.end(`
201
+ <html>
202
+ <body style="font-family: sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0;">
203
+ <div style="text-align: center;">
204
+ <h1 style="color: #dc3545;">Authentication Failed</h1>
205
+ <p>Error: ${String(err)}</p>
206
+ <p>You can close this window.</p>
207
+ </div>
208
+ </body>
209
+ </html>
210
+ `);
211
+ server.close();
212
+ resolve({ success: false, error: String(err) });
213
+ }
214
+ }
215
+ }
216
+ });
217
+
218
+ server.listen(REDIRECT_PORT, () => {
219
+ // Server is ready
220
+ });
221
+
222
+ // Timeout after 5 minutes
223
+ setTimeout(() => {
224
+ server.close();
225
+ resolve({ success: false, error: 'Authentication timed out' });
226
+ }, 5 * 60 * 1000);
227
+ });
228
+ }
229
+
230
+ /**
231
+ * Get a valid access token, refreshing if necessary
232
+ * @param tokenUrl - Token endpoint URL for refresh
233
+ * @param bufferMs - Refresh buffer in ms (default: 5 minutes)
234
+ */
235
+ export async function getValidAccessToken(
236
+ tokenUrl: string = DEFAULT_TOKEN_URL,
237
+ bufferMs: number = 5 * 60 * 1000
238
+ ): Promise<string> {
239
+ const tokens = loadOAuthTokens();
240
+
241
+ if (!tokens) {
242
+ throw new Error('Not authenticated. Run "auth login" first.');
243
+ }
244
+
245
+ // Check if token is expired or will expire within buffer time
246
+ if (Date.now() >= tokens.expiresAt - bufferMs) {
247
+ const newTokens = await refreshAccessToken(tokenUrl);
248
+ return newTokens.accessToken;
249
+ }
250
+
251
+ return tokens.accessToken;
252
+ }
253
+
254
+ /**
255
+ * Check if the user is authenticated
256
+ */
257
+ export function isAuthenticated(): boolean {
258
+ const tokens = loadOAuthTokens();
259
+ return !!tokens?.accessToken;
260
+ }
261
+
262
+ /**
263
+ * Get the redirect URI for OAuth configuration
264
+ */
265
+ export function getRedirectUri(): string {
266
+ return REDIRECT_URI;
267
+ }
268
+
269
+ /**
270
+ * Get the redirect port for OAuth callback
271
+ */
272
+ export function getRedirectPort(): number {
273
+ return REDIRECT_PORT;
274
+ }
@@ -0,0 +1,212 @@
1
+ // ============================================
2
+ // Bulk Operations Utility
3
+ // ============================================
4
+
5
+ /**
6
+ * Options for bulk operations
7
+ */
8
+ export interface BulkOperationOptions<T> {
9
+ /** Items to process */
10
+ items: T[];
11
+ /** Maximum concurrent operations (default: 10) */
12
+ concurrency?: number;
13
+ /** Dry run - preview without making changes */
14
+ dryRun?: boolean;
15
+ /** Progress callback */
16
+ onProgress?: (current: number, total: number, item: T) => void;
17
+ /** Error callback (return true to continue, false to stop) */
18
+ onError?: (error: Error, item: T) => boolean | void;
19
+ /** Delay between batches in ms (useful for rate limiting) */
20
+ batchDelay?: number;
21
+ }
22
+
23
+ /**
24
+ * Result of a bulk operation
25
+ */
26
+ export interface BulkOperationResult<T, R = void> {
27
+ /** Total items processed */
28
+ total: number;
29
+ /** Successfully processed count */
30
+ success: number;
31
+ /** Failed count */
32
+ failed: number;
33
+ /** Skipped count (dry run) */
34
+ skipped: number;
35
+ /** List of errors */
36
+ errors: Array<{ item: T; error: string }>;
37
+ /** Successfully processed items with results */
38
+ results: Array<{ item: T; result: R }>;
39
+ }
40
+
41
+ /**
42
+ * Split an array into chunks of a given size
43
+ */
44
+ export function chunkArray<T>(array: T[], size: number): T[][] {
45
+ const chunks: T[][] = [];
46
+ for (let i = 0; i < array.length; i += size) {
47
+ chunks.push(array.slice(i, i + size));
48
+ }
49
+ return chunks;
50
+ }
51
+
52
+ /**
53
+ * Sleep for a given number of milliseconds
54
+ */
55
+ export function sleep(ms: number): Promise<void> {
56
+ return new Promise(resolve => setTimeout(resolve, ms));
57
+ }
58
+
59
+ /**
60
+ * Execute a bulk operation with concurrency control
61
+ *
62
+ * @param options - Bulk operation options
63
+ * @param operation - Async function to execute for each item
64
+ * @returns Result summary
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * const result = await executeBulk(
69
+ * {
70
+ * items: users,
71
+ * concurrency: 5,
72
+ * onProgress: (current, total, user) => {
73
+ * console.log(`Processing ${current}/${total}: ${user.email}`);
74
+ * },
75
+ * },
76
+ * async (user) => {
77
+ * await api.updateUser(user.id, { status: 'active' });
78
+ * }
79
+ * );
80
+ * console.log(`Success: ${result.success}, Failed: ${result.failed}`);
81
+ * ```
82
+ */
83
+ export async function executeBulk<T, R = void>(
84
+ options: BulkOperationOptions<T>,
85
+ operation: (item: T) => Promise<R>
86
+ ): Promise<BulkOperationResult<T, R>> {
87
+ const {
88
+ items,
89
+ concurrency = 10,
90
+ dryRun = false,
91
+ onProgress,
92
+ onError,
93
+ batchDelay = 0,
94
+ } = options;
95
+
96
+ const result: BulkOperationResult<T, R> = {
97
+ total: items.length,
98
+ success: 0,
99
+ failed: 0,
100
+ skipped: 0,
101
+ errors: [],
102
+ results: [],
103
+ };
104
+
105
+ if (items.length === 0) {
106
+ return result;
107
+ }
108
+
109
+ // Process in batches with concurrency control
110
+ const chunks = chunkArray(items, concurrency);
111
+ let shouldStop = false;
112
+
113
+ for (let chunkIndex = 0; chunkIndex < chunks.length && !shouldStop; chunkIndex++) {
114
+ const chunk = chunks[chunkIndex];
115
+
116
+ await Promise.all(
117
+ chunk.map(async (item) => {
118
+ if (shouldStop) return;
119
+
120
+ try {
121
+ if (dryRun) {
122
+ result.skipped++;
123
+ result.results.push({ item, result: undefined as R });
124
+ } else {
125
+ const opResult = await operation(item);
126
+ result.success++;
127
+ result.results.push({ item, result: opResult });
128
+ }
129
+
130
+ if (onProgress) {
131
+ onProgress(result.success + result.failed + result.skipped, result.total, item);
132
+ }
133
+ } catch (err) {
134
+ result.failed++;
135
+ const errorMessage = err instanceof Error ? err.message : String(err);
136
+ result.errors.push({ item, error: errorMessage });
137
+
138
+ if (onError) {
139
+ const shouldContinue = onError(err instanceof Error ? err : new Error(errorMessage), item);
140
+ if (shouldContinue === false) {
141
+ shouldStop = true;
142
+ }
143
+ }
144
+ }
145
+ })
146
+ );
147
+
148
+ // Add delay between batches if specified (for rate limiting)
149
+ if (batchDelay > 0 && chunkIndex < chunks.length - 1) {
150
+ await sleep(batchDelay);
151
+ }
152
+ }
153
+
154
+ return result;
155
+ }
156
+
157
+ /**
158
+ * Execute operations sequentially (one at a time)
159
+ * Useful when operations must be processed in order
160
+ */
161
+ export async function executeSequential<T, R = void>(
162
+ options: Omit<BulkOperationOptions<T>, 'concurrency'>,
163
+ operation: (item: T) => Promise<R>
164
+ ): Promise<BulkOperationResult<T, R>> {
165
+ return executeBulk({ ...options, concurrency: 1 }, operation);
166
+ }
167
+
168
+ /**
169
+ * Create a progress reporter for bulk operations
170
+ */
171
+ export function createProgressReporter(prefix: string = 'Processing') {
172
+ let lastPercent = -1;
173
+
174
+ return (current: number, total: number, _item: unknown): void => {
175
+ const percent = Math.floor((current / total) * 100);
176
+ if (percent !== lastPercent) {
177
+ lastPercent = percent;
178
+ process.stdout.write(`\r${prefix}: ${current}/${total} (${percent}%)`);
179
+ if (current === total) {
180
+ process.stdout.write('\n');
181
+ }
182
+ }
183
+ };
184
+ }
185
+
186
+ /**
187
+ * Format bulk operation result for display
188
+ */
189
+ export function formatBulkResult<T>(result: BulkOperationResult<T, unknown>): string {
190
+ const lines: string[] = [
191
+ `Total: ${result.total}`,
192
+ `Success: ${result.success}`,
193
+ `Failed: ${result.failed}`,
194
+ ];
195
+
196
+ if (result.skipped > 0) {
197
+ lines.push(`Skipped (dry run): ${result.skipped}`);
198
+ }
199
+
200
+ if (result.errors.length > 0) {
201
+ lines.push('');
202
+ lines.push('Errors:');
203
+ for (const { error } of result.errors.slice(0, 10)) {
204
+ lines.push(` - ${error}`);
205
+ }
206
+ if (result.errors.length > 10) {
207
+ lines.push(` ... and ${result.errors.length - 10} more errors`);
208
+ }
209
+ }
210
+
211
+ return lines.join('\n');
212
+ }