@hasna/connectors 0.0.1

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 (1269) hide show
  1. package/README.md +304 -0
  2. package/bin/index.js +5281 -0
  3. package/connectors/connect-anthropic/.env.example +4 -0
  4. package/connectors/connect-anthropic/.npmrc.example +2 -0
  5. package/connectors/connect-anthropic/AGENTS.md +97 -0
  6. package/connectors/connect-anthropic/CLAUDE.md +97 -0
  7. package/connectors/connect-anthropic/GEMINI.md +97 -0
  8. package/connectors/connect-anthropic/README.md +106 -0
  9. package/connectors/connect-anthropic/package.json +60 -0
  10. package/connectors/connect-anthropic/src/api/client.ts +122 -0
  11. package/connectors/connect-anthropic/src/api/index.ts +51 -0
  12. package/connectors/connect-anthropic/src/api/messages.ts +109 -0
  13. package/connectors/connect-anthropic/src/cli/index.ts +336 -0
  14. package/connectors/connect-anthropic/src/index.ts +24 -0
  15. package/connectors/connect-anthropic/src/types/index.ts +198 -0
  16. package/connectors/connect-anthropic/src/utils/config.ts +208 -0
  17. package/connectors/connect-anthropic/src/utils/output.ts +119 -0
  18. package/connectors/connect-anthropic/tsconfig.json +16 -0
  19. package/connectors/connect-aws/.env.example +11 -0
  20. package/connectors/connect-aws/.npmrc.example +2 -0
  21. package/connectors/connect-aws/AGENTS.md +145 -0
  22. package/connectors/connect-aws/CLAUDE.md +145 -0
  23. package/connectors/connect-aws/GEMINI.md +145 -0
  24. package/connectors/connect-aws/README.md +131 -0
  25. package/connectors/connect-aws/package.json +51 -0
  26. package/connectors/connect-aws/src/api/client.ts +349 -0
  27. package/connectors/connect-aws/src/api/dynamodb.ts +542 -0
  28. package/connectors/connect-aws/src/api/index.ts +71 -0
  29. package/connectors/connect-aws/src/api/lambda.ts +326 -0
  30. package/connectors/connect-aws/src/api/s3.ts +305 -0
  31. package/connectors/connect-aws/src/cli/index.ts +614 -0
  32. package/connectors/connect-aws/src/index.ts +28 -0
  33. package/connectors/connect-aws/src/types/index.ts +276 -0
  34. package/connectors/connect-aws/src/utils/config.ts +230 -0
  35. package/connectors/connect-aws/src/utils/output.ts +119 -0
  36. package/connectors/connect-aws/tsconfig.json +16 -0
  37. package/connectors/connect-brandsight/.env.example +8 -0
  38. package/connectors/connect-brandsight/.npmrc.example +2 -0
  39. package/connectors/connect-brandsight/AGENTS.md +128 -0
  40. package/connectors/connect-brandsight/CLAUDE.md +128 -0
  41. package/connectors/connect-brandsight/GEMINI.md +128 -0
  42. package/connectors/connect-brandsight/README.md +129 -0
  43. package/connectors/connect-brandsight/package.json +56 -0
  44. package/connectors/connect-brandsight/src/api/client.ts +171 -0
  45. package/connectors/connect-brandsight/src/api/domains.ts +387 -0
  46. package/connectors/connect-brandsight/src/api/example.ts +59 -0
  47. package/connectors/connect-brandsight/src/api/index.ts +50 -0
  48. package/connectors/connect-brandsight/src/cli/index.ts +775 -0
  49. package/connectors/connect-brandsight/src/index.ts +11 -0
  50. package/connectors/connect-brandsight/src/types/index.ts +197 -0
  51. package/connectors/connect-brandsight/src/utils/config.ts +244 -0
  52. package/connectors/connect-brandsight/src/utils/contacts.ts +204 -0
  53. package/connectors/connect-brandsight/src/utils/output.ts +119 -0
  54. package/connectors/connect-brandsight/tsconfig.json +29 -0
  55. package/connectors/connect-browseruse/.env.example +7 -0
  56. package/connectors/connect-browseruse/.npmrc.example +2 -0
  57. package/connectors/connect-browseruse/AGENTS.md +172 -0
  58. package/connectors/connect-browseruse/CLAUDE.md +172 -0
  59. package/connectors/connect-browseruse/GEMINI.md +172 -0
  60. package/connectors/connect-browseruse/README.md +153 -0
  61. package/connectors/connect-browseruse/package.json +52 -0
  62. package/connectors/connect-browseruse/src/api/billing.ts +32 -0
  63. package/connectors/connect-browseruse/src/api/browsers.ts +50 -0
  64. package/connectors/connect-browseruse/src/api/client.ts +168 -0
  65. package/connectors/connect-browseruse/src/api/files.ts +70 -0
  66. package/connectors/connect-browseruse/src/api/index.ts +95 -0
  67. package/connectors/connect-browseruse/src/api/profiles.ts +59 -0
  68. package/connectors/connect-browseruse/src/api/sessions.ts +88 -0
  69. package/connectors/connect-browseruse/src/api/skills.ts +194 -0
  70. package/connectors/connect-browseruse/src/api/tasks.ts +127 -0
  71. package/connectors/connect-browseruse/src/cli/index.ts +888 -0
  72. package/connectors/connect-browseruse/src/index.ts +35 -0
  73. package/connectors/connect-browseruse/src/types/index.ts +312 -0
  74. package/connectors/connect-browseruse/src/utils/config.ts +212 -0
  75. package/connectors/connect-browseruse/src/utils/output.ts +119 -0
  76. package/connectors/connect-browseruse/tsconfig.json +16 -0
  77. package/connectors/connect-cloudflare/.env.example +10 -0
  78. package/connectors/connect-cloudflare/.npmrc.example +2 -0
  79. package/connectors/connect-cloudflare/AGENTS.md +84 -0
  80. package/connectors/connect-cloudflare/CLAUDE.md +84 -0
  81. package/connectors/connect-cloudflare/GEMINI.md +84 -0
  82. package/connectors/connect-cloudflare/README.md +94 -0
  83. package/connectors/connect-cloudflare/package.json +59 -0
  84. package/connectors/connect-cloudflare/scripts/init.sh +62 -0
  85. package/connectors/connect-cloudflare/src/api/accounts.ts +352 -0
  86. package/connectors/connect-cloudflare/src/api/analytics.ts +638 -0
  87. package/connectors/connect-cloudflare/src/api/bulk.ts +1104 -0
  88. package/connectors/connect-cloudflare/src/api/cache.ts +192 -0
  89. package/connectors/connect-cloudflare/src/api/client.ts +201 -0
  90. package/connectors/connect-cloudflare/src/api/dns.ts +109 -0
  91. package/connectors/connect-cloudflare/src/api/firewall.ts +405 -0
  92. package/connectors/connect-cloudflare/src/api/index.ts +150 -0
  93. package/connectors/connect-cloudflare/src/api/kv.ts +171 -0
  94. package/connectors/connect-cloudflare/src/api/pages.ts +241 -0
  95. package/connectors/connect-cloudflare/src/api/r2.ts +270 -0
  96. package/connectors/connect-cloudflare/src/api/ssl.ts +416 -0
  97. package/connectors/connect-cloudflare/src/api/workers.ts +235 -0
  98. package/connectors/connect-cloudflare/src/api/zones.ts +121 -0
  99. package/connectors/connect-cloudflare/src/cli/index.ts +1644 -0
  100. package/connectors/connect-cloudflare/src/index.ts +21 -0
  101. package/connectors/connect-cloudflare/src/types/index.ts +754 -0
  102. package/connectors/connect-cloudflare/src/utils/config.ts +365 -0
  103. package/connectors/connect-cloudflare/src/utils/output.ts +119 -0
  104. package/connectors/connect-cloudflare/tsconfig.json +29 -0
  105. package/connectors/connect-discord/.env.example +9 -0
  106. package/connectors/connect-discord/.npmrc.example +2 -0
  107. package/connectors/connect-discord/AGENTS.md +187 -0
  108. package/connectors/connect-discord/CLAUDE.md +187 -0
  109. package/connectors/connect-discord/GEMINI.md +187 -0
  110. package/connectors/connect-discord/README.md +158 -0
  111. package/connectors/connect-discord/package.json +55 -0
  112. package/connectors/connect-discord/src/api/channels.ts +451 -0
  113. package/connectors/connect-discord/src/api/client.ts +147 -0
  114. package/connectors/connect-discord/src/api/commands.ts +212 -0
  115. package/connectors/connect-discord/src/api/gateway.ts +27 -0
  116. package/connectors/connect-discord/src/api/guilds.ts +434 -0
  117. package/connectors/connect-discord/src/api/index.ts +82 -0
  118. package/connectors/connect-discord/src/api/invites.ts +27 -0
  119. package/connectors/connect-discord/src/api/users.ts +66 -0
  120. package/connectors/connect-discord/src/api/webhooks.ts +188 -0
  121. package/connectors/connect-discord/src/cli/index.ts +788 -0
  122. package/connectors/connect-discord/src/index.ts +35 -0
  123. package/connectors/connect-discord/src/types/index.ts +545 -0
  124. package/connectors/connect-discord/src/utils/config.ts +219 -0
  125. package/connectors/connect-discord/src/utils/output.ts +119 -0
  126. package/connectors/connect-discord/tsconfig.json +16 -0
  127. package/connectors/connect-docker/.env.example +11 -0
  128. package/connectors/connect-docker/.npmrc.example +2 -0
  129. package/connectors/connect-docker/AGENTS.md +112 -0
  130. package/connectors/connect-docker/CLAUDE.md +112 -0
  131. package/connectors/connect-docker/GEMINI.md +112 -0
  132. package/connectors/connect-docker/README.md +97 -0
  133. package/connectors/connect-docker/package.json +57 -0
  134. package/connectors/connect-docker/src/api/client.ts +181 -0
  135. package/connectors/connect-docker/src/api/example.ts +79 -0
  136. package/connectors/connect-docker/src/api/index.ts +63 -0
  137. package/connectors/connect-docker/src/cli/index.ts +318 -0
  138. package/connectors/connect-docker/src/index.ts +30 -0
  139. package/connectors/connect-docker/src/types/index.ts +172 -0
  140. package/connectors/connect-docker/src/utils/config.ts +238 -0
  141. package/connectors/connect-docker/src/utils/output.ts +119 -0
  142. package/connectors/connect-docker/tsconfig.json +16 -0
  143. package/connectors/connect-e2b/.env.example +7 -0
  144. package/connectors/connect-e2b/.npmrc.example +2 -0
  145. package/connectors/connect-e2b/AGENTS.md +126 -0
  146. package/connectors/connect-e2b/CLAUDE.md +126 -0
  147. package/connectors/connect-e2b/GEMINI.md +126 -0
  148. package/connectors/connect-e2b/README.md +135 -0
  149. package/connectors/connect-e2b/package.json +51 -0
  150. package/connectors/connect-e2b/src/api/client.ts +150 -0
  151. package/connectors/connect-e2b/src/api/code.ts +188 -0
  152. package/connectors/connect-e2b/src/api/filesystem.ts +168 -0
  153. package/connectors/connect-e2b/src/api/index.ts +131 -0
  154. package/connectors/connect-e2b/src/api/sandbox.ts +91 -0
  155. package/connectors/connect-e2b/src/cli/index.ts +481 -0
  156. package/connectors/connect-e2b/src/index.ts +28 -0
  157. package/connectors/connect-e2b/src/types/index.ts +136 -0
  158. package/connectors/connect-e2b/src/utils/config.ts +231 -0
  159. package/connectors/connect-e2b/src/utils/output.ts +119 -0
  160. package/connectors/connect-e2b/tsconfig.json +16 -0
  161. package/connectors/connect-elevenlabs/.env.example +15 -0
  162. package/connectors/connect-elevenlabs/.npmrc.example +2 -0
  163. package/connectors/connect-elevenlabs/AGENTS.md +80 -0
  164. package/connectors/connect-elevenlabs/CLAUDE.md +80 -0
  165. package/connectors/connect-elevenlabs/GEMINI.md +80 -0
  166. package/connectors/connect-elevenlabs/README.md +98 -0
  167. package/connectors/connect-elevenlabs/package.json +57 -0
  168. package/connectors/connect-elevenlabs/src/api/client.ts +175 -0
  169. package/connectors/connect-elevenlabs/src/api/history.ts +103 -0
  170. package/connectors/connect-elevenlabs/src/api/index.ts +101 -0
  171. package/connectors/connect-elevenlabs/src/api/models.ts +49 -0
  172. package/connectors/connect-elevenlabs/src/api/sound-effects.ts +62 -0
  173. package/connectors/connect-elevenlabs/src/api/sts.ts +109 -0
  174. package/connectors/connect-elevenlabs/src/api/stt.ts +93 -0
  175. package/connectors/connect-elevenlabs/src/api/tts.ts +175 -0
  176. package/connectors/connect-elevenlabs/src/api/user.ts +43 -0
  177. package/connectors/connect-elevenlabs/src/api/voices.ts +169 -0
  178. package/connectors/connect-elevenlabs/src/cli/index.ts +739 -0
  179. package/connectors/connect-elevenlabs/src/index.ts +40 -0
  180. package/connectors/connect-elevenlabs/src/types/index.ts +432 -0
  181. package/connectors/connect-elevenlabs/src/utils/config.ts +242 -0
  182. package/connectors/connect-elevenlabs/src/utils/output.ts +119 -0
  183. package/connectors/connect-elevenlabs/tsconfig.json +16 -0
  184. package/connectors/connect-exa/.npmrc.example +2 -0
  185. package/connectors/connect-exa/AGENTS.md +76 -0
  186. package/connectors/connect-exa/CLAUDE.md +76 -0
  187. package/connectors/connect-exa/GEMINI.md +76 -0
  188. package/connectors/connect-exa/README.md +94 -0
  189. package/connectors/connect-exa/package.json +59 -0
  190. package/connectors/connect-exa/src/api/answer.ts +150 -0
  191. package/connectors/connect-exa/src/api/client.ts +171 -0
  192. package/connectors/connect-exa/src/api/contents.ts +150 -0
  193. package/connectors/connect-exa/src/api/context.ts +84 -0
  194. package/connectors/connect-exa/src/api/index.ts +77 -0
  195. package/connectors/connect-exa/src/api/research.ts +154 -0
  196. package/connectors/connect-exa/src/api/search.ts +153 -0
  197. package/connectors/connect-exa/src/api/similar.ts +138 -0
  198. package/connectors/connect-exa/src/api/team.ts +165 -0
  199. package/connectors/connect-exa/src/api/websets.ts +228 -0
  200. package/connectors/connect-exa/src/cli/index.ts +813 -0
  201. package/connectors/connect-exa/src/index.ts +32 -0
  202. package/connectors/connect-exa/src/types/index.ts +410 -0
  203. package/connectors/connect-exa/src/utils/config.ts +336 -0
  204. package/connectors/connect-exa/src/utils/output.ts +119 -0
  205. package/connectors/connect-exa/tsconfig.json +21 -0
  206. package/connectors/connect-figma/.npmrc.example +2 -0
  207. package/connectors/connect-figma/AGENTS.md +185 -0
  208. package/connectors/connect-figma/CLAUDE.md +185 -0
  209. package/connectors/connect-figma/GEMINI.md +185 -0
  210. package/connectors/connect-figma/README.md +164 -0
  211. package/connectors/connect-figma/package.json +50 -0
  212. package/connectors/connect-figma/src/api/client.ts +111 -0
  213. package/connectors/connect-figma/src/api/comments.ts +114 -0
  214. package/connectors/connect-figma/src/api/components.ts +82 -0
  215. package/connectors/connect-figma/src/api/devresources.ts +78 -0
  216. package/connectors/connect-figma/src/api/files.ts +132 -0
  217. package/connectors/connect-figma/src/api/index.ts +86 -0
  218. package/connectors/connect-figma/src/api/projects.ts +36 -0
  219. package/connectors/connect-figma/src/api/styles.ts +46 -0
  220. package/connectors/connect-figma/src/api/teams.ts +17 -0
  221. package/connectors/connect-figma/src/api/users.ts +16 -0
  222. package/connectors/connect-figma/src/api/variables.ts +73 -0
  223. package/connectors/connect-figma/src/api/webhooks.ts +97 -0
  224. package/connectors/connect-figma/src/cli/index.ts +960 -0
  225. package/connectors/connect-figma/src/index.ts +34 -0
  226. package/connectors/connect-figma/src/types/index.ts +593 -0
  227. package/connectors/connect-figma/src/utils/config.ts +197 -0
  228. package/connectors/connect-figma/src/utils/output.ts +119 -0
  229. package/connectors/connect-figma/tsconfig.json +16 -0
  230. package/connectors/connect-firecrawl/.env.example +7 -0
  231. package/connectors/connect-firecrawl/.npmrc.example +2 -0
  232. package/connectors/connect-firecrawl/AGENTS.md +104 -0
  233. package/connectors/connect-firecrawl/CLAUDE.md +104 -0
  234. package/connectors/connect-firecrawl/GEMINI.md +104 -0
  235. package/connectors/connect-firecrawl/README.md +95 -0
  236. package/connectors/connect-firecrawl/package.json +51 -0
  237. package/connectors/connect-firecrawl/src/api/client.ts +123 -0
  238. package/connectors/connect-firecrawl/src/api/crawl.ts +93 -0
  239. package/connectors/connect-firecrawl/src/api/index.ts +61 -0
  240. package/connectors/connect-firecrawl/src/api/map.ts +51 -0
  241. package/connectors/connect-firecrawl/src/api/scrape.ts +71 -0
  242. package/connectors/connect-firecrawl/src/api/search.ts +61 -0
  243. package/connectors/connect-firecrawl/src/cli/index.ts +432 -0
  244. package/connectors/connect-firecrawl/src/index.ts +24 -0
  245. package/connectors/connect-firecrawl/src/types/index.ts +216 -0
  246. package/connectors/connect-firecrawl/src/utils/config.ts +208 -0
  247. package/connectors/connect-firecrawl/src/utils/output.ts +119 -0
  248. package/connectors/connect-firecrawl/tsconfig.json +16 -0
  249. package/connectors/connect-github/.env.example +11 -0
  250. package/connectors/connect-github/.npmrc.example +2 -0
  251. package/connectors/connect-github/AGENTS.md +150 -0
  252. package/connectors/connect-github/CLAUDE.md +150 -0
  253. package/connectors/connect-github/GEMINI.md +150 -0
  254. package/connectors/connect-github/README.md +126 -0
  255. package/connectors/connect-github/package.json +49 -0
  256. package/connectors/connect-github/src/api/client.ts +137 -0
  257. package/connectors/connect-github/src/api/index.ts +62 -0
  258. package/connectors/connect-github/src/api/issues.ts +186 -0
  259. package/connectors/connect-github/src/api/pulls.ts +284 -0
  260. package/connectors/connect-github/src/api/repos.ts +155 -0
  261. package/connectors/connect-github/src/api/users.ts +139 -0
  262. package/connectors/connect-github/src/cli/index.ts +732 -0
  263. package/connectors/connect-github/src/index.ts +24 -0
  264. package/connectors/connect-github/src/types/index.ts +497 -0
  265. package/connectors/connect-github/src/utils/config.ts +208 -0
  266. package/connectors/connect-github/src/utils/output.ts +119 -0
  267. package/connectors/connect-github/tsconfig.json +16 -0
  268. package/connectors/connect-gmail/.env.example +8 -0
  269. package/connectors/connect-gmail/.npmrc.example +2 -0
  270. package/connectors/connect-gmail/AGENTS.md +79 -0
  271. package/connectors/connect-gmail/CLAUDE.md +79 -0
  272. package/connectors/connect-gmail/GEMINI.md +79 -0
  273. package/connectors/connect-gmail/README.md +97 -0
  274. package/connectors/connect-gmail/package.json +58 -0
  275. package/connectors/connect-gmail/src/api/attachments.ts +141 -0
  276. package/connectors/connect-gmail/src/api/bulk.ts +661 -0
  277. package/connectors/connect-gmail/src/api/client.ts +131 -0
  278. package/connectors/connect-gmail/src/api/drafts.ts +198 -0
  279. package/connectors/connect-gmail/src/api/export.ts +312 -0
  280. package/connectors/connect-gmail/src/api/filters.ts +127 -0
  281. package/connectors/connect-gmail/src/api/index.ts +63 -0
  282. package/connectors/connect-gmail/src/api/labels.ts +123 -0
  283. package/connectors/connect-gmail/src/api/messages.ts +527 -0
  284. package/connectors/connect-gmail/src/api/profile.ts +72 -0
  285. package/connectors/connect-gmail/src/api/threads.ts +85 -0
  286. package/connectors/connect-gmail/src/cli/index.ts +2143 -0
  287. package/connectors/connect-gmail/src/index.ts +30 -0
  288. package/connectors/connect-gmail/src/types/index.ts +202 -0
  289. package/connectors/connect-gmail/src/utils/auth.ts +247 -0
  290. package/connectors/connect-gmail/src/utils/config.ts +466 -0
  291. package/connectors/connect-gmail/src/utils/contacts.ts +147 -0
  292. package/connectors/connect-gmail/src/utils/markdown.ts +110 -0
  293. package/connectors/connect-gmail/src/utils/output.ts +119 -0
  294. package/connectors/connect-gmail/src/utils/settings.ts +87 -0
  295. package/connectors/connect-gmail/tsconfig.json +16 -0
  296. package/connectors/connect-google/.env.example +10 -0
  297. package/connectors/connect-google/.npmrc.example +2 -0
  298. package/connectors/connect-google/AGENTS.md +76 -0
  299. package/connectors/connect-google/CLAUDE.md +76 -0
  300. package/connectors/connect-google/GEMINI.md +76 -0
  301. package/connectors/connect-google/README.md +94 -0
  302. package/connectors/connect-google/package.json +60 -0
  303. package/connectors/connect-google/src/api/calendar.ts +339 -0
  304. package/connectors/connect-google/src/api/client.ts +201 -0
  305. package/connectors/connect-google/src/api/docs.ts +372 -0
  306. package/connectors/connect-google/src/api/drive.ts +370 -0
  307. package/connectors/connect-google/src/api/gmail.ts +338 -0
  308. package/connectors/connect-google/src/api/index.ts +66 -0
  309. package/connectors/connect-google/src/api/sheets.ts +343 -0
  310. package/connectors/connect-google/src/cli/index.ts +1232 -0
  311. package/connectors/connect-google/src/index.ts +27 -0
  312. package/connectors/connect-google/src/types/index.ts +1893 -0
  313. package/connectors/connect-google/src/utils/config.ts +248 -0
  314. package/connectors/connect-google/src/utils/output.ts +119 -0
  315. package/connectors/connect-google/tsconfig.json +21 -0
  316. package/connectors/connect-googlecalendar/.npmrc.example +2 -0
  317. package/connectors/connect-googlecalendar/AGENTS.md +117 -0
  318. package/connectors/connect-googlecalendar/CLAUDE.md +117 -0
  319. package/connectors/connect-googlecalendar/GEMINI.md +117 -0
  320. package/connectors/connect-googlecalendar/README.md +97 -0
  321. package/connectors/connect-googlecalendar/package.json +57 -0
  322. package/connectors/connect-googlecalendar/src/api/calendars.ts +106 -0
  323. package/connectors/connect-googlecalendar/src/api/client.ts +266 -0
  324. package/connectors/connect-googlecalendar/src/api/events.ts +266 -0
  325. package/connectors/connect-googlecalendar/src/api/index.ts +96 -0
  326. package/connectors/connect-googlecalendar/src/cli/index.ts +819 -0
  327. package/connectors/connect-googlecalendar/src/index.ts +30 -0
  328. package/connectors/connect-googlecalendar/src/types/index.ts +347 -0
  329. package/connectors/connect-googlecalendar/src/utils/config.ts +251 -0
  330. package/connectors/connect-googlecalendar/src/utils/output.ts +119 -0
  331. package/connectors/connect-googlecalendar/tsconfig.json +16 -0
  332. package/connectors/connect-googlecloud/.env.example +11 -0
  333. package/connectors/connect-googlecloud/.npmrc.example +2 -0
  334. package/connectors/connect-googlecloud/AGENTS.md +110 -0
  335. package/connectors/connect-googlecloud/CLAUDE.md +110 -0
  336. package/connectors/connect-googlecloud/GEMINI.md +110 -0
  337. package/connectors/connect-googlecloud/README.md +96 -0
  338. package/connectors/connect-googlecloud/package.json +56 -0
  339. package/connectors/connect-googlecloud/src/api/client.ts +208 -0
  340. package/connectors/connect-googlecloud/src/api/index.ts +53 -0
  341. package/connectors/connect-googlecloud/src/api/projects.ts +75 -0
  342. package/connectors/connect-googlecloud/src/cli/index.ts +305 -0
  343. package/connectors/connect-googlecloud/src/index.ts +28 -0
  344. package/connectors/connect-googlecloud/src/types/index.ts +100 -0
  345. package/connectors/connect-googlecloud/src/utils/config.ts +232 -0
  346. package/connectors/connect-googlecloud/src/utils/output.ts +119 -0
  347. package/connectors/connect-googlecloud/tsconfig.json +16 -0
  348. package/connectors/connect-googlecontacts/.npmrc.example +2 -0
  349. package/connectors/connect-googlecontacts/AGENTS.md +181 -0
  350. package/connectors/connect-googlecontacts/CLAUDE.md +181 -0
  351. package/connectors/connect-googlecontacts/GEMINI.md +181 -0
  352. package/connectors/connect-googlecontacts/README.md +117 -0
  353. package/connectors/connect-googlecontacts/package.json +56 -0
  354. package/connectors/connect-googlecontacts/src/api/client.ts +306 -0
  355. package/connectors/connect-googlecontacts/src/api/contacts.ts +236 -0
  356. package/connectors/connect-googlecontacts/src/api/index.ts +99 -0
  357. package/connectors/connect-googlecontacts/src/cli/index.ts +654 -0
  358. package/connectors/connect-googlecontacts/src/index.ts +34 -0
  359. package/connectors/connect-googlecontacts/src/types/index.ts +254 -0
  360. package/connectors/connect-googlecontacts/src/utils/config.ts +337 -0
  361. package/connectors/connect-googlecontacts/src/utils/output.ts +119 -0
  362. package/connectors/connect-googlecontacts/tsconfig.json +16 -0
  363. package/connectors/connect-googledocs/.env.example +11 -0
  364. package/connectors/connect-googledocs/.npmrc.example +2 -0
  365. package/connectors/connect-googledocs/AGENTS.md +130 -0
  366. package/connectors/connect-googledocs/CLAUDE.md +130 -0
  367. package/connectors/connect-googledocs/GEMINI.md +130 -0
  368. package/connectors/connect-googledocs/README.md +112 -0
  369. package/connectors/connect-googledocs/package.json +50 -0
  370. package/connectors/connect-googledocs/src/api/client.ts +159 -0
  371. package/connectors/connect-googledocs/src/api/content.ts +219 -0
  372. package/connectors/connect-googledocs/src/api/documents.ts +52 -0
  373. package/connectors/connect-googledocs/src/api/index.ts +65 -0
  374. package/connectors/connect-googledocs/src/api/styles.ts +386 -0
  375. package/connectors/connect-googledocs/src/cli/index.ts +364 -0
  376. package/connectors/connect-googledocs/src/index.ts +24 -0
  377. package/connectors/connect-googledocs/src/types/index.ts +767 -0
  378. package/connectors/connect-googledocs/src/utils/config.ts +208 -0
  379. package/connectors/connect-googledocs/src/utils/output.ts +119 -0
  380. package/connectors/connect-googledocs/tsconfig.json +16 -0
  381. package/connectors/connect-googledrive/.npmrc.example +2 -0
  382. package/connectors/connect-googledrive/AGENTS.md +76 -0
  383. package/connectors/connect-googledrive/CLAUDE.md +76 -0
  384. package/connectors/connect-googledrive/GEMINI.md +76 -0
  385. package/connectors/connect-googledrive/README.md +94 -0
  386. package/connectors/connect-googledrive/package.json +55 -0
  387. package/connectors/connect-googledrive/src/api/client.ts +216 -0
  388. package/connectors/connect-googledrive/src/api/drives.ts +186 -0
  389. package/connectors/connect-googledrive/src/api/files.ts +305 -0
  390. package/connectors/connect-googledrive/src/api/folders.ts +133 -0
  391. package/connectors/connect-googledrive/src/api/index.ts +47 -0
  392. package/connectors/connect-googledrive/src/api/storage.ts +48 -0
  393. package/connectors/connect-googledrive/src/api/trash.ts +47 -0
  394. package/connectors/connect-googledrive/src/cli/index.ts +933 -0
  395. package/connectors/connect-googledrive/src/index.ts +30 -0
  396. package/connectors/connect-googledrive/src/types/index.ts +378 -0
  397. package/connectors/connect-googledrive/src/utils/auth.ts +207 -0
  398. package/connectors/connect-googledrive/src/utils/config.ts +440 -0
  399. package/connectors/connect-googledrive/src/utils/output.ts +135 -0
  400. package/connectors/connect-googledrive/tsconfig.json +25 -0
  401. package/connectors/connect-googlegemini/.env.example +7 -0
  402. package/connectors/connect-googlegemini/.npmrc.example +2 -0
  403. package/connectors/connect-googlegemini/AGENTS.md +184 -0
  404. package/connectors/connect-googlegemini/CLAUDE.md +184 -0
  405. package/connectors/connect-googlegemini/GEMINI.md +184 -0
  406. package/connectors/connect-googlegemini/README.md +143 -0
  407. package/connectors/connect-googlegemini/package.json +55 -0
  408. package/connectors/connect-googlegemini/src/api/client.ts +219 -0
  409. package/connectors/connect-googlegemini/src/api/embeddings.ts +142 -0
  410. package/connectors/connect-googlegemini/src/api/files.ts +152 -0
  411. package/connectors/connect-googlegemini/src/api/generate.ts +187 -0
  412. package/connectors/connect-googlegemini/src/api/images.ts +216 -0
  413. package/connectors/connect-googlegemini/src/api/index.ts +103 -0
  414. package/connectors/connect-googlegemini/src/api/models.ts +102 -0
  415. package/connectors/connect-googlegemini/src/api/speech.ts +195 -0
  416. package/connectors/connect-googlegemini/src/api/video.ts +224 -0
  417. package/connectors/connect-googlegemini/src/cli/index.ts +702 -0
  418. package/connectors/connect-googlegemini/src/index.ts +34 -0
  419. package/connectors/connect-googlegemini/src/types/index.ts +324 -0
  420. package/connectors/connect-googlegemini/src/utils/config.ts +139 -0
  421. package/connectors/connect-googlegemini/src/utils/output.ts +169 -0
  422. package/connectors/connect-googlegemini/tsconfig.json +15 -0
  423. package/connectors/connect-googlemaps/.npmrc.example +2 -0
  424. package/connectors/connect-googlemaps/AGENTS.md +143 -0
  425. package/connectors/connect-googlemaps/CLAUDE.md +143 -0
  426. package/connectors/connect-googlemaps/GEMINI.md +143 -0
  427. package/connectors/connect-googlemaps/README.md +152 -0
  428. package/connectors/connect-googlemaps/package.json +29 -0
  429. package/connectors/connect-googlemaps/src/api/index.ts +315 -0
  430. package/connectors/connect-googlemaps/src/cli/index.ts +423 -0
  431. package/connectors/connect-googlemaps/src/index.ts +3 -0
  432. package/connectors/connect-googlemaps/src/types/index.ts +268 -0
  433. package/connectors/connect-googlemaps/src/utils/config.ts +59 -0
  434. package/connectors/connect-googlemaps/src/utils/output.ts +178 -0
  435. package/connectors/connect-googlemaps/tsconfig.json +17 -0
  436. package/connectors/connect-googlesheets/.env.example +15 -0
  437. package/connectors/connect-googlesheets/.npmrc.example +2 -0
  438. package/connectors/connect-googlesheets/AGENTS.md +144 -0
  439. package/connectors/connect-googlesheets/CLAUDE.md +144 -0
  440. package/connectors/connect-googlesheets/GEMINI.md +144 -0
  441. package/connectors/connect-googlesheets/README.md +124 -0
  442. package/connectors/connect-googlesheets/package.json +51 -0
  443. package/connectors/connect-googlesheets/src/api/client.ts +230 -0
  444. package/connectors/connect-googlesheets/src/api/index.ts +113 -0
  445. package/connectors/connect-googlesheets/src/api/sheets.ts +249 -0
  446. package/connectors/connect-googlesheets/src/api/spreadsheets.ts +150 -0
  447. package/connectors/connect-googlesheets/src/api/values.ts +209 -0
  448. package/connectors/connect-googlesheets/src/cli/index.ts +544 -0
  449. package/connectors/connect-googlesheets/src/index.ts +32 -0
  450. package/connectors/connect-googlesheets/src/types/index.ts +764 -0
  451. package/connectors/connect-googlesheets/src/utils/config.ts +289 -0
  452. package/connectors/connect-googlesheets/src/utils/output.ts +119 -0
  453. package/connectors/connect-googlesheets/tsconfig.json +16 -0
  454. package/connectors/connect-googletasks/.env.example +6 -0
  455. package/connectors/connect-googletasks/.npmrc.example +2 -0
  456. package/connectors/connect-googletasks/AGENTS.md +122 -0
  457. package/connectors/connect-googletasks/CLAUDE.md +122 -0
  458. package/connectors/connect-googletasks/GEMINI.md +122 -0
  459. package/connectors/connect-googletasks/README.md +131 -0
  460. package/connectors/connect-googletasks/package.json +50 -0
  461. package/connectors/connect-googletasks/src/api/index.ts +321 -0
  462. package/connectors/connect-googletasks/src/cli/index.ts +542 -0
  463. package/connectors/connect-googletasks/src/index.ts +42 -0
  464. package/connectors/connect-googletasks/src/types/index.ts +167 -0
  465. package/connectors/connect-googletasks/src/utils/config.ts +287 -0
  466. package/connectors/connect-googletasks/src/utils/output.ts +145 -0
  467. package/connectors/connect-googletasks/tsconfig.json +16 -0
  468. package/connectors/connect-hedra/.env.example +7 -0
  469. package/connectors/connect-hedra/.npmrc.example +2 -0
  470. package/connectors/connect-hedra/AGENTS.md +101 -0
  471. package/connectors/connect-hedra/CLAUDE.md +101 -0
  472. package/connectors/connect-hedra/GEMINI.md +101 -0
  473. package/connectors/connect-hedra/README.md +95 -0
  474. package/connectors/connect-hedra/package.json +57 -0
  475. package/connectors/connect-hedra/src/api/characters.ts +44 -0
  476. package/connectors/connect-hedra/src/api/client.ts +136 -0
  477. package/connectors/connect-hedra/src/api/index.ts +57 -0
  478. package/connectors/connect-hedra/src/api/projects.ts +44 -0
  479. package/connectors/connect-hedra/src/api/voices.ts +23 -0
  480. package/connectors/connect-hedra/src/cli/index.ts +314 -0
  481. package/connectors/connect-hedra/src/index.ts +24 -0
  482. package/connectors/connect-hedra/src/types/index.ts +103 -0
  483. package/connectors/connect-hedra/src/utils/config.ts +211 -0
  484. package/connectors/connect-hedra/src/utils/output.ts +119 -0
  485. package/connectors/connect-hedra/tsconfig.json +16 -0
  486. package/connectors/connect-heygen/.env.example +11 -0
  487. package/connectors/connect-heygen/.npmrc.example +2 -0
  488. package/connectors/connect-heygen/AGENTS.md +102 -0
  489. package/connectors/connect-heygen/CLAUDE.md +102 -0
  490. package/connectors/connect-heygen/GEMINI.md +102 -0
  491. package/connectors/connect-heygen/README.md +96 -0
  492. package/connectors/connect-heygen/package.json +57 -0
  493. package/connectors/connect-heygen/src/api/client.ts +134 -0
  494. package/connectors/connect-heygen/src/api/example.ts +48 -0
  495. package/connectors/connect-heygen/src/api/index.ts +49 -0
  496. package/connectors/connect-heygen/src/cli/index.ts +242 -0
  497. package/connectors/connect-heygen/src/index.ts +24 -0
  498. package/connectors/connect-heygen/src/types/index.ts +69 -0
  499. package/connectors/connect-heygen/src/utils/config.ts +209 -0
  500. package/connectors/connect-heygen/src/utils/output.ts +119 -0
  501. package/connectors/connect-heygen/tsconfig.json +16 -0
  502. package/connectors/connect-huggingface/.env.example +10 -0
  503. package/connectors/connect-huggingface/.npmrc.example +2 -0
  504. package/connectors/connect-huggingface/AGENTS.md +113 -0
  505. package/connectors/connect-huggingface/CLAUDE.md +113 -0
  506. package/connectors/connect-huggingface/GEMINI.md +113 -0
  507. package/connectors/connect-huggingface/README.md +97 -0
  508. package/connectors/connect-huggingface/package.json +57 -0
  509. package/connectors/connect-huggingface/src/api/client.ts +136 -0
  510. package/connectors/connect-huggingface/src/api/example.ts +48 -0
  511. package/connectors/connect-huggingface/src/api/index.ts +49 -0
  512. package/connectors/connect-huggingface/src/cli/index.ts +243 -0
  513. package/connectors/connect-huggingface/src/index.ts +24 -0
  514. package/connectors/connect-huggingface/src/types/index.ts +69 -0
  515. package/connectors/connect-huggingface/src/utils/config.ts +211 -0
  516. package/connectors/connect-huggingface/src/utils/output.ts +119 -0
  517. package/connectors/connect-huggingface/tsconfig.json +16 -0
  518. package/connectors/connect-icons8/.env.example +7 -0
  519. package/connectors/connect-icons8/.npmrc.example +2 -0
  520. package/connectors/connect-icons8/AGENTS.md +101 -0
  521. package/connectors/connect-icons8/CLAUDE.md +101 -0
  522. package/connectors/connect-icons8/GEMINI.md +101 -0
  523. package/connectors/connect-icons8/README.md +95 -0
  524. package/connectors/connect-icons8/package.json +55 -0
  525. package/connectors/connect-icons8/src/api/client.ts +137 -0
  526. package/connectors/connect-icons8/src/api/example.ts +64 -0
  527. package/connectors/connect-icons8/src/api/index.ts +48 -0
  528. package/connectors/connect-icons8/src/cli/index.ts +286 -0
  529. package/connectors/connect-icons8/src/index.ts +24 -0
  530. package/connectors/connect-icons8/src/types/index.ts +114 -0
  531. package/connectors/connect-icons8/src/utils/config.ts +211 -0
  532. package/connectors/connect-icons8/src/utils/output.ts +119 -0
  533. package/connectors/connect-icons8/tsconfig.json +16 -0
  534. package/connectors/connect-maropost/.env.example +13 -0
  535. package/connectors/connect-maropost/.npmrc.example +2 -0
  536. package/connectors/connect-maropost/AGENTS.md +110 -0
  537. package/connectors/connect-maropost/CLAUDE.md +110 -0
  538. package/connectors/connect-maropost/GEMINI.md +110 -0
  539. package/connectors/connect-maropost/README.md +96 -0
  540. package/connectors/connect-maropost/package.json +51 -0
  541. package/connectors/connect-maropost/src/api/campaigns.ts +129 -0
  542. package/connectors/connect-maropost/src/api/client.ts +162 -0
  543. package/connectors/connect-maropost/src/api/contacts.ts +128 -0
  544. package/connectors/connect-maropost/src/api/index.ts +91 -0
  545. package/connectors/connect-maropost/src/api/journeys.ts +60 -0
  546. package/connectors/connect-maropost/src/api/lists.ts +80 -0
  547. package/connectors/connect-maropost/src/api/reports.ts +123 -0
  548. package/connectors/connect-maropost/src/api/transactional.ts +109 -0
  549. package/connectors/connect-maropost/src/cli/index.ts +958 -0
  550. package/connectors/connect-maropost/src/index.ts +33 -0
  551. package/connectors/connect-maropost/src/types/index.ts +340 -0
  552. package/connectors/connect-maropost/src/utils/config.ts +213 -0
  553. package/connectors/connect-maropost/src/utils/output.ts +119 -0
  554. package/connectors/connect-maropost/tsconfig.json +16 -0
  555. package/connectors/connect-mercury/.env.example +5 -0
  556. package/connectors/connect-mercury/.npmrc.example +2 -0
  557. package/connectors/connect-mercury/AGENTS.md +137 -0
  558. package/connectors/connect-mercury/CLAUDE.md +137 -0
  559. package/connectors/connect-mercury/GEMINI.md +137 -0
  560. package/connectors/connect-mercury/README.md +146 -0
  561. package/connectors/connect-mercury/package.json +60 -0
  562. package/connectors/connect-mercury/src/api/accounts.ts +79 -0
  563. package/connectors/connect-mercury/src/api/attachments.ts +24 -0
  564. package/connectors/connect-mercury/src/api/categories.ts +40 -0
  565. package/connectors/connect-mercury/src/api/client.ts +134 -0
  566. package/connectors/connect-mercury/src/api/credit.ts +38 -0
  567. package/connectors/connect-mercury/src/api/customers.ts +53 -0
  568. package/connectors/connect-mercury/src/api/events.ts +63 -0
  569. package/connectors/connect-mercury/src/api/index.ts +97 -0
  570. package/connectors/connect-mercury/src/api/invoices.ts +102 -0
  571. package/connectors/connect-mercury/src/api/organization.ts +88 -0
  572. package/connectors/connect-mercury/src/api/recipients.ts +84 -0
  573. package/connectors/connect-mercury/src/api/transactions.ts +128 -0
  574. package/connectors/connect-mercury/src/api/transfers.ts +96 -0
  575. package/connectors/connect-mercury/src/api/treasury.ts +82 -0
  576. package/connectors/connect-mercury/src/api/webhooks.ts +90 -0
  577. package/connectors/connect-mercury/src/cli/index.ts +1263 -0
  578. package/connectors/connect-mercury/src/index.ts +33 -0
  579. package/connectors/connect-mercury/src/types/index.ts +505 -0
  580. package/connectors/connect-mercury/src/utils/config.ts +393 -0
  581. package/connectors/connect-mercury/src/utils/output.ts +119 -0
  582. package/connectors/connect-mercury/tsconfig.json +16 -0
  583. package/connectors/connect-meta/.npmrc.example +2 -0
  584. package/connectors/connect-meta/AGENTS.md +76 -0
  585. package/connectors/connect-meta/CLAUDE.md +76 -0
  586. package/connectors/connect-meta/GEMINI.md +76 -0
  587. package/connectors/connect-meta/README.md +94 -0
  588. package/connectors/connect-meta/package.json +61 -0
  589. package/connectors/connect-meta/src/api/accounts.ts +120 -0
  590. package/connectors/connect-meta/src/api/ads.ts +274 -0
  591. package/connectors/connect-meta/src/api/adsets.ts +263 -0
  592. package/connectors/connect-meta/src/api/audiences.ts +392 -0
  593. package/connectors/connect-meta/src/api/business.ts +495 -0
  594. package/connectors/connect-meta/src/api/campaigns.ts +191 -0
  595. package/connectors/connect-meta/src/api/catalogs.ts +500 -0
  596. package/connectors/connect-meta/src/api/client.ts +154 -0
  597. package/connectors/connect-meta/src/api/creatives.ts +357 -0
  598. package/connectors/connect-meta/src/api/index.ts +100 -0
  599. package/connectors/connect-meta/src/api/insights.ts +357 -0
  600. package/connectors/connect-meta/src/api/instagram.ts +449 -0
  601. package/connectors/connect-meta/src/api/pages.ts +330 -0
  602. package/connectors/connect-meta/src/api/pixels.ts +408 -0
  603. package/connectors/connect-meta/src/cli/index.ts +1585 -0
  604. package/connectors/connect-meta/src/index.ts +44 -0
  605. package/connectors/connect-meta/src/types/index.ts +1523 -0
  606. package/connectors/connect-meta/src/utils/config.ts +458 -0
  607. package/connectors/connect-meta/src/utils/output.ts +152 -0
  608. package/connectors/connect-meta/tsconfig.json +18 -0
  609. package/connectors/connect-midjourney/.env.example +13 -0
  610. package/connectors/connect-midjourney/.npmrc.example +2 -0
  611. package/connectors/connect-midjourney/AGENTS.md +104 -0
  612. package/connectors/connect-midjourney/CLAUDE.md +104 -0
  613. package/connectors/connect-midjourney/GEMINI.md +104 -0
  614. package/connectors/connect-midjourney/README.md +96 -0
  615. package/connectors/connect-midjourney/package.json +57 -0
  616. package/connectors/connect-midjourney/src/api/client.ts +143 -0
  617. package/connectors/connect-midjourney/src/api/imagine.ts +84 -0
  618. package/connectors/connect-midjourney/src/api/index.ts +50 -0
  619. package/connectors/connect-midjourney/src/cli/index.ts +343 -0
  620. package/connectors/connect-midjourney/src/index.ts +24 -0
  621. package/connectors/connect-midjourney/src/types/index.ts +98 -0
  622. package/connectors/connect-midjourney/src/utils/config.ts +219 -0
  623. package/connectors/connect-midjourney/src/utils/output.ts +119 -0
  624. package/connectors/connect-midjourney/tsconfig.json +16 -0
  625. package/connectors/connect-mistral/.env.example +4 -0
  626. package/connectors/connect-mistral/.npmrc.example +2 -0
  627. package/connectors/connect-mistral/AGENTS.md +100 -0
  628. package/connectors/connect-mistral/CLAUDE.md +100 -0
  629. package/connectors/connect-mistral/GEMINI.md +100 -0
  630. package/connectors/connect-mistral/README.md +109 -0
  631. package/connectors/connect-mistral/package.json +60 -0
  632. package/connectors/connect-mistral/src/api/chat.ts +113 -0
  633. package/connectors/connect-mistral/src/api/client.ts +122 -0
  634. package/connectors/connect-mistral/src/api/embeddings.ts +52 -0
  635. package/connectors/connect-mistral/src/api/index.ts +62 -0
  636. package/connectors/connect-mistral/src/cli/index.ts +371 -0
  637. package/connectors/connect-mistral/src/index.ts +24 -0
  638. package/connectors/connect-mistral/src/types/index.ts +183 -0
  639. package/connectors/connect-mistral/src/utils/config.ts +208 -0
  640. package/connectors/connect-mistral/src/utils/output.ts +119 -0
  641. package/connectors/connect-mistral/tsconfig.json +16 -0
  642. package/connectors/connect-mixpanel/.env.example +8 -0
  643. package/connectors/connect-mixpanel/.npmrc.example +2 -0
  644. package/connectors/connect-mixpanel/AGENTS.md +178 -0
  645. package/connectors/connect-mixpanel/CLAUDE.md +178 -0
  646. package/connectors/connect-mixpanel/GEMINI.md +178 -0
  647. package/connectors/connect-mixpanel/README.md +149 -0
  648. package/connectors/connect-mixpanel/package.json +54 -0
  649. package/connectors/connect-mixpanel/src/api/client.ts +352 -0
  650. package/connectors/connect-mixpanel/src/api/engage.ts +209 -0
  651. package/connectors/connect-mixpanel/src/api/export.ts +122 -0
  652. package/connectors/connect-mixpanel/src/api/funnels.ts +136 -0
  653. package/connectors/connect-mixpanel/src/api/index.ts +97 -0
  654. package/connectors/connect-mixpanel/src/api/insights.ts +198 -0
  655. package/connectors/connect-mixpanel/src/api/retention.ts +139 -0
  656. package/connectors/connect-mixpanel/src/api/track.ts +69 -0
  657. package/connectors/connect-mixpanel/src/cli/index.ts +678 -0
  658. package/connectors/connect-mixpanel/src/index.ts +32 -0
  659. package/connectors/connect-mixpanel/src/types/index.ts +262 -0
  660. package/connectors/connect-mixpanel/src/utils/config.ts +255 -0
  661. package/connectors/connect-mixpanel/src/utils/output.ts +119 -0
  662. package/connectors/connect-mixpanel/tsconfig.json +16 -0
  663. package/connectors/connect-notion/.env.example +10 -0
  664. package/connectors/connect-notion/.npmrc.example +2 -0
  665. package/connectors/connect-notion/AGENTS.md +75 -0
  666. package/connectors/connect-notion/CLAUDE.md +211 -0
  667. package/connectors/connect-notion/GEMINI.md +54 -0
  668. package/connectors/connect-notion/README.md +244 -0
  669. package/connectors/connect-notion/package.json +56 -0
  670. package/connectors/connect-notion/src/api/blocks.ts +463 -0
  671. package/connectors/connect-notion/src/api/bulk.ts +614 -0
  672. package/connectors/connect-notion/src/api/client.ts +127 -0
  673. package/connectors/connect-notion/src/api/comments.ts +142 -0
  674. package/connectors/connect-notion/src/api/databases.ts +652 -0
  675. package/connectors/connect-notion/src/api/export.ts +487 -0
  676. package/connectors/connect-notion/src/api/index.ts +72 -0
  677. package/connectors/connect-notion/src/api/pages.ts +465 -0
  678. package/connectors/connect-notion/src/api/search.ts +202 -0
  679. package/connectors/connect-notion/src/api/users.ts +99 -0
  680. package/connectors/connect-notion/src/cli/index.ts +1666 -0
  681. package/connectors/connect-notion/src/index.ts +16 -0
  682. package/connectors/connect-notion/src/types/index.ts +723 -0
  683. package/connectors/connect-notion/src/utils/auth.ts +186 -0
  684. package/connectors/connect-notion/src/utils/config.ts +434 -0
  685. package/connectors/connect-notion/src/utils/output.ts +119 -0
  686. package/connectors/connect-notion/tsconfig.json +29 -0
  687. package/connectors/connect-openai/.env.example +4 -0
  688. package/connectors/connect-openai/.npmrc.example +2 -0
  689. package/connectors/connect-openai/AGENTS.md +77 -0
  690. package/connectors/connect-openai/CLAUDE.md +77 -0
  691. package/connectors/connect-openai/GEMINI.md +77 -0
  692. package/connectors/connect-openai/README.md +95 -0
  693. package/connectors/connect-openai/package.json +61 -0
  694. package/connectors/connect-openai/src/api/chat.ts +134 -0
  695. package/connectors/connect-openai/src/api/client.ts +128 -0
  696. package/connectors/connect-openai/src/api/embeddings.ts +57 -0
  697. package/connectors/connect-openai/src/api/images.ts +75 -0
  698. package/connectors/connect-openai/src/api/index.ts +67 -0
  699. package/connectors/connect-openai/src/cli/index.ts +459 -0
  700. package/connectors/connect-openai/src/index.ts +26 -0
  701. package/connectors/connect-openai/src/types/index.ts +241 -0
  702. package/connectors/connect-openai/src/utils/config.ts +219 -0
  703. package/connectors/connect-openai/src/utils/output.ts +119 -0
  704. package/connectors/connect-openai/tsconfig.json +16 -0
  705. package/connectors/connect-openweathermap/.env.example +2 -0
  706. package/connectors/connect-openweathermap/.npmrc.example +2 -0
  707. package/connectors/connect-openweathermap/AGENTS.md +106 -0
  708. package/connectors/connect-openweathermap/CLAUDE.md +106 -0
  709. package/connectors/connect-openweathermap/GEMINI.md +106 -0
  710. package/connectors/connect-openweathermap/README.md +115 -0
  711. package/connectors/connect-openweathermap/package.json +52 -0
  712. package/connectors/connect-openweathermap/src/api/client.ts +76 -0
  713. package/connectors/connect-openweathermap/src/api/index.ts +24 -0
  714. package/connectors/connect-openweathermap/src/api/weather.ts +108 -0
  715. package/connectors/connect-openweathermap/src/cli/index.ts +470 -0
  716. package/connectors/connect-openweathermap/src/index.ts +33 -0
  717. package/connectors/connect-openweathermap/src/types/index.ts +275 -0
  718. package/connectors/connect-openweathermap/src/utils/config.ts +82 -0
  719. package/connectors/connect-openweathermap/src/utils/output.ts +106 -0
  720. package/connectors/connect-openweathermap/tsconfig.json +16 -0
  721. package/connectors/connect-pandadoc/.env.example +13 -0
  722. package/connectors/connect-pandadoc/.npmrc.example +2 -0
  723. package/connectors/connect-pandadoc/AGENTS.md +76 -0
  724. package/connectors/connect-pandadoc/CLAUDE.md +76 -0
  725. package/connectors/connect-pandadoc/GEMINI.md +76 -0
  726. package/connectors/connect-pandadoc/README.md +94 -0
  727. package/connectors/connect-pandadoc/package.json +57 -0
  728. package/connectors/connect-pandadoc/src/api/catalogs.ts +58 -0
  729. package/connectors/connect-pandadoc/src/api/client.ts +169 -0
  730. package/connectors/connect-pandadoc/src/api/contacts.ts +58 -0
  731. package/connectors/connect-pandadoc/src/api/content-library.ts +57 -0
  732. package/connectors/connect-pandadoc/src/api/documents.ts +263 -0
  733. package/connectors/connect-pandadoc/src/api/folders.ts +58 -0
  734. package/connectors/connect-pandadoc/src/api/forms.ts +37 -0
  735. package/connectors/connect-pandadoc/src/api/index.ts +83 -0
  736. package/connectors/connect-pandadoc/src/api/members.ts +42 -0
  737. package/connectors/connect-pandadoc/src/api/templates.ts +61 -0
  738. package/connectors/connect-pandadoc/src/api/webhooks.ts +81 -0
  739. package/connectors/connect-pandadoc/src/cli/index.ts +1212 -0
  740. package/connectors/connect-pandadoc/src/index.ts +39 -0
  741. package/connectors/connect-pandadoc/src/types/index.ts +454 -0
  742. package/connectors/connect-pandadoc/src/utils/config.ts +259 -0
  743. package/connectors/connect-pandadoc/src/utils/output.ts +119 -0
  744. package/connectors/connect-pandadoc/tsconfig.json +16 -0
  745. package/connectors/connect-quo/.env.example +7 -0
  746. package/connectors/connect-quo/.npmrc.example +2 -0
  747. package/connectors/connect-quo/AGENTS.md +76 -0
  748. package/connectors/connect-quo/CLAUDE.md +76 -0
  749. package/connectors/connect-quo/GEMINI.md +76 -0
  750. package/connectors/connect-quo/README.md +94 -0
  751. package/connectors/connect-quo/package.json +58 -0
  752. package/connectors/connect-quo/src/api/calls.ts +64 -0
  753. package/connectors/connect-quo/src/api/client.ts +133 -0
  754. package/connectors/connect-quo/src/api/contacts.ts +57 -0
  755. package/connectors/connect-quo/src/api/conversations.ts +45 -0
  756. package/connectors/connect-quo/src/api/custom-fields.ts +17 -0
  757. package/connectors/connect-quo/src/api/index.ts +76 -0
  758. package/connectors/connect-quo/src/api/messages.ts +50 -0
  759. package/connectors/connect-quo/src/api/phone-numbers.ts +24 -0
  760. package/connectors/connect-quo/src/api/users.ts +24 -0
  761. package/connectors/connect-quo/src/api/webhooks.ts +121 -0
  762. package/connectors/connect-quo/src/cli/index.ts +713 -0
  763. package/connectors/connect-quo/src/index.ts +32 -0
  764. package/connectors/connect-quo/src/types/index.ts +361 -0
  765. package/connectors/connect-quo/src/utils/config.ts +242 -0
  766. package/connectors/connect-quo/src/utils/output.ts +119 -0
  767. package/connectors/connect-quo/tsconfig.json +16 -0
  768. package/connectors/connect-reddit/.npmrc.example +2 -0
  769. package/connectors/connect-reddit/AGENTS.md +176 -0
  770. package/connectors/connect-reddit/CLAUDE.md +176 -0
  771. package/connectors/connect-reddit/GEMINI.md +176 -0
  772. package/connectors/connect-reddit/README.md +160 -0
  773. package/connectors/connect-reddit/package.json +50 -0
  774. package/connectors/connect-reddit/src/api/client.ts +299 -0
  775. package/connectors/connect-reddit/src/api/comments.ts +268 -0
  776. package/connectors/connect-reddit/src/api/index.ts +113 -0
  777. package/connectors/connect-reddit/src/api/posts.ts +298 -0
  778. package/connectors/connect-reddit/src/api/search.ts +235 -0
  779. package/connectors/connect-reddit/src/api/subreddits.ts +279 -0
  780. package/connectors/connect-reddit/src/api/users.ts +403 -0
  781. package/connectors/connect-reddit/src/cli/index.ts +766 -0
  782. package/connectors/connect-reddit/src/index.ts +36 -0
  783. package/connectors/connect-reddit/src/types/index.ts +295 -0
  784. package/connectors/connect-reddit/src/utils/config.ts +281 -0
  785. package/connectors/connect-reddit/src/utils/output.ts +138 -0
  786. package/connectors/connect-reddit/tsconfig.json +16 -0
  787. package/connectors/connect-reducto/.npmrc.example +2 -0
  788. package/connectors/connect-reducto/AGENTS.md +136 -0
  789. package/connectors/connect-reducto/CLAUDE.md +136 -0
  790. package/connectors/connect-reducto/GEMINI.md +136 -0
  791. package/connectors/connect-reducto/README.md +145 -0
  792. package/connectors/connect-reducto/package.json +48 -0
  793. package/connectors/connect-reducto/src/api/index.ts +362 -0
  794. package/connectors/connect-reducto/src/cli/index.ts +582 -0
  795. package/connectors/connect-reducto/src/index.ts +48 -0
  796. package/connectors/connect-reducto/src/types/index.ts +204 -0
  797. package/connectors/connect-reducto/src/utils/config.ts +144 -0
  798. package/connectors/connect-reducto/src/utils/output.ts +256 -0
  799. package/connectors/connect-reducto/tsconfig.json +18 -0
  800. package/connectors/connect-resend/.npmrc.example +2 -0
  801. package/connectors/connect-resend/AGENTS.md +76 -0
  802. package/connectors/connect-resend/CLAUDE.md +76 -0
  803. package/connectors/connect-resend/GEMINI.md +76 -0
  804. package/connectors/connect-resend/README.md +94 -0
  805. package/connectors/connect-resend/package.json +58 -0
  806. package/connectors/connect-resend/src/api/api-keys.ts +41 -0
  807. package/connectors/connect-resend/src/api/audiences.ts +46 -0
  808. package/connectors/connect-resend/src/api/broadcasts.ts +65 -0
  809. package/connectors/connect-resend/src/api/client.ts +132 -0
  810. package/connectors/connect-resend/src/api/contacts.ts +64 -0
  811. package/connectors/connect-resend/src/api/domains.ts +64 -0
  812. package/connectors/connect-resend/src/api/emails.ts +66 -0
  813. package/connectors/connect-resend/src/api/index.ts +77 -0
  814. package/connectors/connect-resend/src/api/templates.ts +65 -0
  815. package/connectors/connect-resend/src/api/webhooks.ts +55 -0
  816. package/connectors/connect-resend/src/cli/index.ts +1029 -0
  817. package/connectors/connect-resend/src/index.ts +32 -0
  818. package/connectors/connect-resend/src/types/index.ts +327 -0
  819. package/connectors/connect-resend/src/utils/config.ts +228 -0
  820. package/connectors/connect-resend/src/utils/output.ts +119 -0
  821. package/connectors/connect-resend/tsconfig.json +21 -0
  822. package/connectors/connect-revolut/.npmrc.example +2 -0
  823. package/connectors/connect-revolut/AGENTS.md +162 -0
  824. package/connectors/connect-revolut/CLAUDE.md +162 -0
  825. package/connectors/connect-revolut/GEMINI.md +162 -0
  826. package/connectors/connect-revolut/README.md +145 -0
  827. package/connectors/connect-revolut/package.json +54 -0
  828. package/connectors/connect-revolut/src/api/accounts.ts +46 -0
  829. package/connectors/connect-revolut/src/api/cards.ts +87 -0
  830. package/connectors/connect-revolut/src/api/client.ts +128 -0
  831. package/connectors/connect-revolut/src/api/counterparties.ts +64 -0
  832. package/connectors/connect-revolut/src/api/exchange.ts +87 -0
  833. package/connectors/connect-revolut/src/api/index.ts +85 -0
  834. package/connectors/connect-revolut/src/api/payments.ts +64 -0
  835. package/connectors/connect-revolut/src/api/transactions.ts +62 -0
  836. package/connectors/connect-revolut/src/cli/index.ts +674 -0
  837. package/connectors/connect-revolut/src/index.ts +32 -0
  838. package/connectors/connect-revolut/src/types/index.ts +306 -0
  839. package/connectors/connect-revolut/src/utils/config.ts +212 -0
  840. package/connectors/connect-revolut/src/utils/output.ts +77 -0
  841. package/connectors/connect-revolut/tsconfig.json +16 -0
  842. package/connectors/connect-sedo/.env.example +7 -0
  843. package/connectors/connect-sedo/.npmrc.example +2 -0
  844. package/connectors/connect-sedo/AGENTS.md +111 -0
  845. package/connectors/connect-sedo/CLAUDE.md +111 -0
  846. package/connectors/connect-sedo/GEMINI.md +111 -0
  847. package/connectors/connect-sedo/README.md +112 -0
  848. package/connectors/connect-sedo/package.json +54 -0
  849. package/connectors/connect-sedo/src/api/client.ts +139 -0
  850. package/connectors/connect-sedo/src/api/domains.ts +246 -0
  851. package/connectors/connect-sedo/src/api/index.ts +30 -0
  852. package/connectors/connect-sedo/src/cli/index.ts +490 -0
  853. package/connectors/connect-sedo/src/index.ts +18 -0
  854. package/connectors/connect-sedo/src/types/index.ts +104 -0
  855. package/connectors/connect-sedo/src/utils/config.ts +234 -0
  856. package/connectors/connect-sedo/src/utils/output.ts +62 -0
  857. package/connectors/connect-sedo/tsconfig.json +29 -0
  858. package/connectors/connect-sentry/.env.example +10 -0
  859. package/connectors/connect-sentry/.npmrc.example +2 -0
  860. package/connectors/connect-sentry/AGENTS.md +102 -0
  861. package/connectors/connect-sentry/CLAUDE.md +102 -0
  862. package/connectors/connect-sentry/GEMINI.md +102 -0
  863. package/connectors/connect-sentry/README.md +96 -0
  864. package/connectors/connect-sentry/package.json +55 -0
  865. package/connectors/connect-sentry/src/api/client.ts +136 -0
  866. package/connectors/connect-sentry/src/api/example.ts +48 -0
  867. package/connectors/connect-sentry/src/api/index.ts +49 -0
  868. package/connectors/connect-sentry/src/cli/index.ts +242 -0
  869. package/connectors/connect-sentry/src/index.ts +24 -0
  870. package/connectors/connect-sentry/src/types/index.ts +69 -0
  871. package/connectors/connect-sentry/src/utils/config.ts +210 -0
  872. package/connectors/connect-sentry/src/utils/output.ts +119 -0
  873. package/connectors/connect-sentry/tsconfig.json +16 -0
  874. package/connectors/connect-shadcn/.env.example +5 -0
  875. package/connectors/connect-shadcn/.npmrc.example +2 -0
  876. package/connectors/connect-shadcn/AGENTS.md +104 -0
  877. package/connectors/connect-shadcn/CLAUDE.md +104 -0
  878. package/connectors/connect-shadcn/GEMINI.md +104 -0
  879. package/connectors/connect-shadcn/README.md +94 -0
  880. package/connectors/connect-shadcn/package.json +55 -0
  881. package/connectors/connect-shadcn/src/api/client.ts +91 -0
  882. package/connectors/connect-shadcn/src/api/components.ts +146 -0
  883. package/connectors/connect-shadcn/src/api/index.ts +50 -0
  884. package/connectors/connect-shadcn/src/cli/index.ts +320 -0
  885. package/connectors/connect-shadcn/src/index.ts +22 -0
  886. package/connectors/connect-shadcn/src/types/index.ts +89 -0
  887. package/connectors/connect-shadcn/src/utils/config.ts +208 -0
  888. package/connectors/connect-shadcn/src/utils/output.ts +119 -0
  889. package/connectors/connect-shadcn/tsconfig.json +16 -0
  890. package/connectors/connect-shopify/.npmrc.example +2 -0
  891. package/connectors/connect-shopify/AGENTS.md +170 -0
  892. package/connectors/connect-shopify/CLAUDE.md +170 -0
  893. package/connectors/connect-shopify/GEMINI.md +170 -0
  894. package/connectors/connect-shopify/README.md +153 -0
  895. package/connectors/connect-shopify/package.json +29 -0
  896. package/connectors/connect-shopify/src/api/client.ts +163 -0
  897. package/connectors/connect-shopify/src/api/collections.ts +322 -0
  898. package/connectors/connect-shopify/src/api/customers.ts +239 -0
  899. package/connectors/connect-shopify/src/api/index.ts +89 -0
  900. package/connectors/connect-shopify/src/api/inventory.ts +236 -0
  901. package/connectors/connect-shopify/src/api/orders.ts +367 -0
  902. package/connectors/connect-shopify/src/api/products.ts +252 -0
  903. package/connectors/connect-shopify/src/api/shop.ts +50 -0
  904. package/connectors/connect-shopify/src/cli/index.ts +870 -0
  905. package/connectors/connect-shopify/src/index.ts +35 -0
  906. package/connectors/connect-shopify/src/types/index.ts +262 -0
  907. package/connectors/connect-shopify/src/utils/config.ts +240 -0
  908. package/connectors/connect-shopify/src/utils/output.ts +119 -0
  909. package/connectors/connect-shopify/tsconfig.json +17 -0
  910. package/connectors/connect-snap/.npmrc.example +2 -0
  911. package/connectors/connect-snap/AGENTS.md +76 -0
  912. package/connectors/connect-snap/CLAUDE.md +76 -0
  913. package/connectors/connect-snap/GEMINI.md +76 -0
  914. package/connectors/connect-snap/README.md +94 -0
  915. package/connectors/connect-snap/package.json +62 -0
  916. package/connectors/connect-snap/src/api/accounts.ts +81 -0
  917. package/connectors/connect-snap/src/api/ads.ts +102 -0
  918. package/connectors/connect-snap/src/api/adsquads.ts +130 -0
  919. package/connectors/connect-snap/src/api/audiences.ts +208 -0
  920. package/connectors/connect-snap/src/api/campaigns.ts +92 -0
  921. package/connectors/connect-snap/src/api/catalogs.ts +313 -0
  922. package/connectors/connect-snap/src/api/client.ts +324 -0
  923. package/connectors/connect-snap/src/api/conversions.ts +403 -0
  924. package/connectors/connect-snap/src/api/creatives.ts +232 -0
  925. package/connectors/connect-snap/src/api/index.ts +124 -0
  926. package/connectors/connect-snap/src/api/leads.ts +299 -0
  927. package/connectors/connect-snap/src/api/media.ts +246 -0
  928. package/connectors/connect-snap/src/api/organizations.ts +30 -0
  929. package/connectors/connect-snap/src/api/pixels.ts +215 -0
  930. package/connectors/connect-snap/src/api/stats.ts +305 -0
  931. package/connectors/connect-snap/src/api/targeting.ts +255 -0
  932. package/connectors/connect-snap/src/cli/index.ts +1810 -0
  933. package/connectors/connect-snap/src/index.ts +52 -0
  934. package/connectors/connect-snap/src/types/index.ts +1226 -0
  935. package/connectors/connect-snap/src/utils/config.ts +509 -0
  936. package/connectors/connect-snap/src/utils/output.ts +139 -0
  937. package/connectors/connect-snap/tsconfig.json +16 -0
  938. package/connectors/connect-stabilityai/.npmrc.example +2 -0
  939. package/connectors/connect-stabilityai/AGENTS.md +76 -0
  940. package/connectors/connect-stabilityai/CLAUDE.md +76 -0
  941. package/connectors/connect-stabilityai/GEMINI.md +76 -0
  942. package/connectors/connect-stabilityai/README.md +94 -0
  943. package/connectors/connect-stabilityai/package.json +63 -0
  944. package/connectors/connect-stabilityai/src/api/3d.ts +99 -0
  945. package/connectors/connect-stabilityai/src/api/client.ts +238 -0
  946. package/connectors/connect-stabilityai/src/api/edit.ts +130 -0
  947. package/connectors/connect-stabilityai/src/api/engines.ts +41 -0
  948. package/connectors/connect-stabilityai/src/api/image-to-image.ts +150 -0
  949. package/connectors/connect-stabilityai/src/api/index.ts +81 -0
  950. package/connectors/connect-stabilityai/src/api/inpaint.ts +153 -0
  951. package/connectors/connect-stabilityai/src/api/outpaint.ts +117 -0
  952. package/connectors/connect-stabilityai/src/api/text-to-image.ts +181 -0
  953. package/connectors/connect-stabilityai/src/api/upscale.ts +113 -0
  954. package/connectors/connect-stabilityai/src/api/user.ts +24 -0
  955. package/connectors/connect-stabilityai/src/cli/index.ts +859 -0
  956. package/connectors/connect-stabilityai/src/index.ts +37 -0
  957. package/connectors/connect-stabilityai/src/types/index.ts +315 -0
  958. package/connectors/connect-stabilityai/src/utils/config.ts +340 -0
  959. package/connectors/connect-stabilityai/src/utils/output.ts +119 -0
  960. package/connectors/connect-stabilityai/tsconfig.json +21 -0
  961. package/connectors/connect-stripe/.env.example +10 -0
  962. package/connectors/connect-stripe/.npmrc.example +2 -0
  963. package/connectors/connect-stripe/AGENTS.md +204 -0
  964. package/connectors/connect-stripe/CLAUDE.md +204 -0
  965. package/connectors/connect-stripe/GEMINI.md +204 -0
  966. package/connectors/connect-stripe/README.md +181 -0
  967. package/connectors/connect-stripe/package.json +55 -0
  968. package/connectors/connect-stripe/src/api/balance.ts +28 -0
  969. package/connectors/connect-stripe/src/api/billing-portal.ts +64 -0
  970. package/connectors/connect-stripe/src/api/charges.ts +65 -0
  971. package/connectors/connect-stripe/src/api/checkout-sessions.ts +55 -0
  972. package/connectors/connect-stripe/src/api/client.ts +190 -0
  973. package/connectors/connect-stripe/src/api/coupons.ts +52 -0
  974. package/connectors/connect-stripe/src/api/customers.ts +65 -0
  975. package/connectors/connect-stripe/src/api/events.ts +28 -0
  976. package/connectors/connect-stripe/src/api/index.ts +118 -0
  977. package/connectors/connect-stripe/src/api/invoice-items.ts +52 -0
  978. package/connectors/connect-stripe/src/api/invoices.ts +102 -0
  979. package/connectors/connect-stripe/src/api/payment-intents.ts +81 -0
  980. package/connectors/connect-stripe/src/api/payment-links.ts +57 -0
  981. package/connectors/connect-stripe/src/api/payment-methods.ts +59 -0
  982. package/connectors/connect-stripe/src/api/prices.ts +57 -0
  983. package/connectors/connect-stripe/src/api/products.ts +65 -0
  984. package/connectors/connect-stripe/src/api/promotion-codes.ts +44 -0
  985. package/connectors/connect-stripe/src/api/subscription-items.ts +53 -0
  986. package/connectors/connect-stripe/src/api/subscriptions.ts +73 -0
  987. package/connectors/connect-stripe/src/api/webhooks.ts +52 -0
  988. package/connectors/connect-stripe/src/cli/index.ts +1995 -0
  989. package/connectors/connect-stripe/src/index.ts +44 -0
  990. package/connectors/connect-stripe/src/types/index.ts +2147 -0
  991. package/connectors/connect-stripe/src/utils/config.ts +220 -0
  992. package/connectors/connect-stripe/src/utils/output.ts +119 -0
  993. package/connectors/connect-stripe/tsconfig.json +16 -0
  994. package/connectors/connect-stripeatlas/.env.example +11 -0
  995. package/connectors/connect-stripeatlas/.npmrc.example +2 -0
  996. package/connectors/connect-stripeatlas/AGENTS.md +102 -0
  997. package/connectors/connect-stripeatlas/CLAUDE.md +102 -0
  998. package/connectors/connect-stripeatlas/GEMINI.md +102 -0
  999. package/connectors/connect-stripeatlas/README.md +95 -0
  1000. package/connectors/connect-stripeatlas/package.json +57 -0
  1001. package/connectors/connect-stripeatlas/src/api/client.ts +77 -0
  1002. package/connectors/connect-stripeatlas/src/api/example.ts +60 -0
  1003. package/connectors/connect-stripeatlas/src/api/index.ts +65 -0
  1004. package/connectors/connect-stripeatlas/src/cli/index.ts +270 -0
  1005. package/connectors/connect-stripeatlas/src/index.ts +29 -0
  1006. package/connectors/connect-stripeatlas/src/types/index.ts +93 -0
  1007. package/connectors/connect-stripeatlas/src/utils/config.ts +228 -0
  1008. package/connectors/connect-stripeatlas/src/utils/output.ts +119 -0
  1009. package/connectors/connect-stripeatlas/tsconfig.json +16 -0
  1010. package/connectors/connect-substack/.env.example +4 -0
  1011. package/connectors/connect-substack/.npmrc.example +2 -0
  1012. package/connectors/connect-substack/AGENTS.md +168 -0
  1013. package/connectors/connect-substack/CLAUDE.md +168 -0
  1014. package/connectors/connect-substack/GEMINI.md +168 -0
  1015. package/connectors/connect-substack/README.md +146 -0
  1016. package/connectors/connect-substack/package.json +51 -0
  1017. package/connectors/connect-substack/src/api/client.ts +147 -0
  1018. package/connectors/connect-substack/src/api/comments.ts +68 -0
  1019. package/connectors/connect-substack/src/api/index.ts +77 -0
  1020. package/connectors/connect-substack/src/api/posts.ts +135 -0
  1021. package/connectors/connect-substack/src/api/publication.ts +126 -0
  1022. package/connectors/connect-substack/src/api/stats.ts +113 -0
  1023. package/connectors/connect-substack/src/api/subscribers.ts +97 -0
  1024. package/connectors/connect-substack/src/cli/index.ts +531 -0
  1025. package/connectors/connect-substack/src/index.ts +31 -0
  1026. package/connectors/connect-substack/src/types/index.ts +257 -0
  1027. package/connectors/connect-substack/src/utils/config.ts +208 -0
  1028. package/connectors/connect-substack/src/utils/output.ts +143 -0
  1029. package/connectors/connect-substack/tsconfig.json +16 -0
  1030. package/connectors/connect-tiktok/.npmrc.example +2 -0
  1031. package/connectors/connect-tiktok/AGENTS.md +76 -0
  1032. package/connectors/connect-tiktok/CLAUDE.md +76 -0
  1033. package/connectors/connect-tiktok/GEMINI.md +76 -0
  1034. package/connectors/connect-tiktok/README.md +94 -0
  1035. package/connectors/connect-tiktok/package.json +60 -0
  1036. package/connectors/connect-tiktok/src/api/adgroups.ts +144 -0
  1037. package/connectors/connect-tiktok/src/api/ads.ts +160 -0
  1038. package/connectors/connect-tiktok/src/api/advertisers.ts +104 -0
  1039. package/connectors/connect-tiktok/src/api/audiences.ts +246 -0
  1040. package/connectors/connect-tiktok/src/api/business.ts +273 -0
  1041. package/connectors/connect-tiktok/src/api/campaigns.ts +116 -0
  1042. package/connectors/connect-tiktok/src/api/catalogs.ts +326 -0
  1043. package/connectors/connect-tiktok/src/api/client.ts +137 -0
  1044. package/connectors/connect-tiktok/src/api/creatives.ts +293 -0
  1045. package/connectors/connect-tiktok/src/api/events.ts +314 -0
  1046. package/connectors/connect-tiktok/src/api/identity.ts +255 -0
  1047. package/connectors/connect-tiktok/src/api/index.ts +105 -0
  1048. package/connectors/connect-tiktok/src/api/pixels.ts +188 -0
  1049. package/connectors/connect-tiktok/src/api/reports.ts +290 -0
  1050. package/connectors/connect-tiktok/src/api/targeting.ts +326 -0
  1051. package/connectors/connect-tiktok/src/cli/index.ts +1329 -0
  1052. package/connectors/connect-tiktok/src/index.ts +39 -0
  1053. package/connectors/connect-tiktok/src/types/index.ts +1052 -0
  1054. package/connectors/connect-tiktok/src/utils/config.ts +419 -0
  1055. package/connectors/connect-tiktok/src/utils/output.ts +136 -0
  1056. package/connectors/connect-tiktok/tsconfig.json +16 -0
  1057. package/connectors/connect-tinker/.env.example +8 -0
  1058. package/connectors/connect-tinker/.npmrc.example +2 -0
  1059. package/connectors/connect-tinker/AGENTS.md +189 -0
  1060. package/connectors/connect-tinker/CLAUDE.md +189 -0
  1061. package/connectors/connect-tinker/GEMINI.md +189 -0
  1062. package/connectors/connect-tinker/README.md +157 -0
  1063. package/connectors/connect-tinker/package.json +55 -0
  1064. package/connectors/connect-tinker/src/api/client.ts +146 -0
  1065. package/connectors/connect-tinker/src/api/index.ts +100 -0
  1066. package/connectors/connect-tinker/src/api/sampling.ts +163 -0
  1067. package/connectors/connect-tinker/src/api/state.ts +147 -0
  1068. package/connectors/connect-tinker/src/api/training.ts +152 -0
  1069. package/connectors/connect-tinker/src/cli/index.ts +775 -0
  1070. package/connectors/connect-tinker/src/index.ts +28 -0
  1071. package/connectors/connect-tinker/src/types/index.ts +287 -0
  1072. package/connectors/connect-tinker/src/utils/config.ts +230 -0
  1073. package/connectors/connect-tinker/src/utils/output.ts +139 -0
  1074. package/connectors/connect-tinker/tsconfig.json +16 -0
  1075. package/connectors/connect-twilio/.npmrc.example +2 -0
  1076. package/connectors/connect-twilio/AGENTS.md +76 -0
  1077. package/connectors/connect-twilio/CLAUDE.md +76 -0
  1078. package/connectors/connect-twilio/GEMINI.md +76 -0
  1079. package/connectors/connect-twilio/README.md +94 -0
  1080. package/connectors/connect-twilio/package.json +72 -0
  1081. package/connectors/connect-twilio/src/api/accounts.ts +352 -0
  1082. package/connectors/connect-twilio/src/api/calls.ts +120 -0
  1083. package/connectors/connect-twilio/src/api/client.ts +181 -0
  1084. package/connectors/connect-twilio/src/api/conversations.ts +313 -0
  1085. package/connectors/connect-twilio/src/api/index.ts +91 -0
  1086. package/connectors/connect-twilio/src/api/lookup.ts +271 -0
  1087. package/connectors/connect-twilio/src/api/messages.ts +107 -0
  1088. package/connectors/connect-twilio/src/api/numbers.ts +152 -0
  1089. package/connectors/connect-twilio/src/api/verify.ts +213 -0
  1090. package/connectors/connect-twilio/src/api/video.ts +305 -0
  1091. package/connectors/connect-twilio/src/cli/index.ts +1093 -0
  1092. package/connectors/connect-twilio/src/index.ts +34 -0
  1093. package/connectors/connect-twilio/src/types/index.ts +983 -0
  1094. package/connectors/connect-twilio/src/utils/config.ts +424 -0
  1095. package/connectors/connect-twilio/src/utils/output.ts +119 -0
  1096. package/connectors/connect-twilio/tsconfig.json +16 -0
  1097. package/connectors/connect-uspto/.env.example +13 -0
  1098. package/connectors/connect-uspto/.npmrc.example +2 -0
  1099. package/connectors/connect-uspto/AGENTS.md +80 -0
  1100. package/connectors/connect-uspto/CLAUDE.md +80 -0
  1101. package/connectors/connect-uspto/GEMINI.md +80 -0
  1102. package/connectors/connect-uspto/README.md +98 -0
  1103. package/connectors/connect-uspto/package.json +54 -0
  1104. package/connectors/connect-uspto/src/api/browser.ts +335 -0
  1105. package/connectors/connect-uspto/src/api/client.ts +186 -0
  1106. package/connectors/connect-uspto/src/api/index.ts +104 -0
  1107. package/connectors/connect-uspto/src/api/patents.ts +290 -0
  1108. package/connectors/connect-uspto/src/api/ptab.ts +150 -0
  1109. package/connectors/connect-uspto/src/api/trademarks.ts +302 -0
  1110. package/connectors/connect-uspto/src/cli/index.ts +713 -0
  1111. package/connectors/connect-uspto/src/index.ts +26 -0
  1112. package/connectors/connect-uspto/src/types/index.ts +302 -0
  1113. package/connectors/connect-uspto/src/utils/config.ts +235 -0
  1114. package/connectors/connect-uspto/src/utils/output.ts +119 -0
  1115. package/connectors/connect-uspto/tsconfig.json +16 -0
  1116. package/connectors/connect-webflow/.npmrc.example +2 -0
  1117. package/connectors/connect-webflow/AGENTS.md +193 -0
  1118. package/connectors/connect-webflow/CLAUDE.md +193 -0
  1119. package/connectors/connect-webflow/GEMINI.md +193 -0
  1120. package/connectors/connect-webflow/README.md +173 -0
  1121. package/connectors/connect-webflow/package.json +29 -0
  1122. package/connectors/connect-webflow/src/api/assets.ts +89 -0
  1123. package/connectors/connect-webflow/src/api/client.ts +121 -0
  1124. package/connectors/connect-webflow/src/api/collections.ts +46 -0
  1125. package/connectors/connect-webflow/src/api/forms.ts +75 -0
  1126. package/connectors/connect-webflow/src/api/index.ts +93 -0
  1127. package/connectors/connect-webflow/src/api/items.ts +141 -0
  1128. package/connectors/connect-webflow/src/api/orders.ts +89 -0
  1129. package/connectors/connect-webflow/src/api/pages.ts +76 -0
  1130. package/connectors/connect-webflow/src/api/products.ts +160 -0
  1131. package/connectors/connect-webflow/src/api/sites.ts +41 -0
  1132. package/connectors/connect-webflow/src/api/users.ts +81 -0
  1133. package/connectors/connect-webflow/src/cli/index.ts +1048 -0
  1134. package/connectors/connect-webflow/src/index.ts +35 -0
  1135. package/connectors/connect-webflow/src/types/index.ts +488 -0
  1136. package/connectors/connect-webflow/src/utils/config.ts +208 -0
  1137. package/connectors/connect-webflow/src/utils/output.ts +119 -0
  1138. package/connectors/connect-webflow/tsconfig.json +17 -0
  1139. package/connectors/connect-wix/.npmrc.example +2 -0
  1140. package/connectors/connect-wix/AGENTS.md +181 -0
  1141. package/connectors/connect-wix/CLAUDE.md +181 -0
  1142. package/connectors/connect-wix/GEMINI.md +181 -0
  1143. package/connectors/connect-wix/README.md +163 -0
  1144. package/connectors/connect-wix/package.json +29 -0
  1145. package/connectors/connect-wix/src/api/bookings.ts +575 -0
  1146. package/connectors/connect-wix/src/api/client.ts +147 -0
  1147. package/connectors/connect-wix/src/api/contacts.ts +308 -0
  1148. package/connectors/connect-wix/src/api/index.ts +90 -0
  1149. package/connectors/connect-wix/src/api/inventory.ts +195 -0
  1150. package/connectors/connect-wix/src/api/members.ts +172 -0
  1151. package/connectors/connect-wix/src/api/orders.ts +415 -0
  1152. package/connectors/connect-wix/src/api/products.ts +453 -0
  1153. package/connectors/connect-wix/src/api/sites.ts +77 -0
  1154. package/connectors/connect-wix/src/cli/index.ts +1009 -0
  1155. package/connectors/connect-wix/src/index.ts +35 -0
  1156. package/connectors/connect-wix/src/types/index.ts +786 -0
  1157. package/connectors/connect-wix/src/utils/config.ts +219 -0
  1158. package/connectors/connect-wix/src/utils/output.ts +119 -0
  1159. package/connectors/connect-wix/tsconfig.json +17 -0
  1160. package/connectors/connect-x/.env.example +11 -0
  1161. package/connectors/connect-x/.npmrc.example +2 -0
  1162. package/connectors/connect-x/AGENTS.md +84 -0
  1163. package/connectors/connect-x/CLAUDE.md +84 -0
  1164. package/connectors/connect-x/GEMINI.md +84 -0
  1165. package/connectors/connect-x/README.md +102 -0
  1166. package/connectors/connect-x/package.json +59 -0
  1167. package/connectors/connect-x/src/api/client.ts +392 -0
  1168. package/connectors/connect-x/src/api/index.ts +171 -0
  1169. package/connectors/connect-x/src/api/media.ts +323 -0
  1170. package/connectors/connect-x/src/api/oauth.ts +408 -0
  1171. package/connectors/connect-x/src/api/oauth1.ts +351 -0
  1172. package/connectors/connect-x/src/api/tweets.ts +339 -0
  1173. package/connectors/connect-x/src/api/users.ts +259 -0
  1174. package/connectors/connect-x/src/cli/index.ts +1205 -0
  1175. package/connectors/connect-x/src/index.ts +92 -0
  1176. package/connectors/connect-x/src/types/index.ts +230 -0
  1177. package/connectors/connect-x/src/utils/config.ts +496 -0
  1178. package/connectors/connect-x/src/utils/output.ts +119 -0
  1179. package/connectors/connect-x/tsconfig.json +16 -0
  1180. package/connectors/connect-xads/.env.example +11 -0
  1181. package/connectors/connect-xads/.npmrc.example +2 -0
  1182. package/connectors/connect-xads/AGENTS.md +183 -0
  1183. package/connectors/connect-xads/CLAUDE.md +183 -0
  1184. package/connectors/connect-xads/GEMINI.md +183 -0
  1185. package/connectors/connect-xads/README.md +161 -0
  1186. package/connectors/connect-xads/package.json +52 -0
  1187. package/connectors/connect-xads/src/api/accounts.ts +70 -0
  1188. package/connectors/connect-xads/src/api/analytics.ts +165 -0
  1189. package/connectors/connect-xads/src/api/audiences.ts +143 -0
  1190. package/connectors/connect-xads/src/api/campaigns.ts +113 -0
  1191. package/connectors/connect-xads/src/api/client.ts +315 -0
  1192. package/connectors/connect-xads/src/api/index.ts +91 -0
  1193. package/connectors/connect-xads/src/api/line-items.ts +126 -0
  1194. package/connectors/connect-xads/src/api/media.ts +96 -0
  1195. package/connectors/connect-xads/src/api/promoted-tweets.ts +97 -0
  1196. package/connectors/connect-xads/src/api/targeting.ts +165 -0
  1197. package/connectors/connect-xads/src/cli/index.ts +1036 -0
  1198. package/connectors/connect-xads/src/index.ts +41 -0
  1199. package/connectors/connect-xads/src/types/index.ts +474 -0
  1200. package/connectors/connect-xads/src/utils/config.ts +176 -0
  1201. package/connectors/connect-xads/src/utils/output.ts +177 -0
  1202. package/connectors/connect-xads/tsconfig.json +15 -0
  1203. package/connectors/connect-xai/.env.example +4 -0
  1204. package/connectors/connect-xai/.npmrc.example +2 -0
  1205. package/connectors/connect-xai/AGENTS.md +97 -0
  1206. package/connectors/connect-xai/CLAUDE.md +97 -0
  1207. package/connectors/connect-xai/GEMINI.md +97 -0
  1208. package/connectors/connect-xai/README.md +106 -0
  1209. package/connectors/connect-xai/package.json +60 -0
  1210. package/connectors/connect-xai/src/api/chat.ts +114 -0
  1211. package/connectors/connect-xai/src/api/client.ts +122 -0
  1212. package/connectors/connect-xai/src/api/index.ts +58 -0
  1213. package/connectors/connect-xai/src/cli/index.ts +330 -0
  1214. package/connectors/connect-xai/src/index.ts +24 -0
  1215. package/connectors/connect-xai/src/types/index.ts +172 -0
  1216. package/connectors/connect-xai/src/utils/config.ts +208 -0
  1217. package/connectors/connect-xai/src/utils/output.ts +119 -0
  1218. package/connectors/connect-xai/tsconfig.json +16 -0
  1219. package/connectors/connect-youtube/.npmrc.example +2 -0
  1220. package/connectors/connect-youtube/AGENTS.md +76 -0
  1221. package/connectors/connect-youtube/CLAUDE.md +76 -0
  1222. package/connectors/connect-youtube/GEMINI.md +76 -0
  1223. package/connectors/connect-youtube/README.md +94 -0
  1224. package/connectors/connect-youtube/package.json +61 -0
  1225. package/connectors/connect-youtube/src/api/analytics.ts +364 -0
  1226. package/connectors/connect-youtube/src/api/captions.ts +196 -0
  1227. package/connectors/connect-youtube/src/api/categories.ts +107 -0
  1228. package/connectors/connect-youtube/src/api/channels.ts +149 -0
  1229. package/connectors/connect-youtube/src/api/client.ts +278 -0
  1230. package/connectors/connect-youtube/src/api/commentThreads.ts +215 -0
  1231. package/connectors/connect-youtube/src/api/comments.ts +179 -0
  1232. package/connectors/connect-youtube/src/api/index.ts +113 -0
  1233. package/connectors/connect-youtube/src/api/live.ts +480 -0
  1234. package/connectors/connect-youtube/src/api/members.ts +119 -0
  1235. package/connectors/connect-youtube/src/api/playlistItems.ts +184 -0
  1236. package/connectors/connect-youtube/src/api/playlists.ts +174 -0
  1237. package/connectors/connect-youtube/src/api/search.ts +222 -0
  1238. package/connectors/connect-youtube/src/api/subscriptions.ts +164 -0
  1239. package/connectors/connect-youtube/src/api/thumbnails.ts +73 -0
  1240. package/connectors/connect-youtube/src/api/videos.ts +217 -0
  1241. package/connectors/connect-youtube/src/api/watermarks.ts +110 -0
  1242. package/connectors/connect-youtube/src/cli/index.ts +1768 -0
  1243. package/connectors/connect-youtube/src/index.ts +41 -0
  1244. package/connectors/connect-youtube/src/types/index.ts +1207 -0
  1245. package/connectors/connect-youtube/src/utils/auth.ts +236 -0
  1246. package/connectors/connect-youtube/src/utils/config.ts +529 -0
  1247. package/connectors/connect-youtube/src/utils/output.ts +157 -0
  1248. package/connectors/connect-youtube/tsconfig.json +16 -0
  1249. package/connectors/connect-zoom/.npmrc.example +2 -0
  1250. package/connectors/connect-zoom/AGENTS.md +164 -0
  1251. package/connectors/connect-zoom/CLAUDE.md +164 -0
  1252. package/connectors/connect-zoom/GEMINI.md +164 -0
  1253. package/connectors/connect-zoom/README.md +145 -0
  1254. package/connectors/connect-zoom/package.json +51 -0
  1255. package/connectors/connect-zoom/src/api/client.ts +177 -0
  1256. package/connectors/connect-zoom/src/api/index.ts +81 -0
  1257. package/connectors/connect-zoom/src/api/meetings.ts +126 -0
  1258. package/connectors/connect-zoom/src/api/recordings.ts +129 -0
  1259. package/connectors/connect-zoom/src/api/reports.ts +178 -0
  1260. package/connectors/connect-zoom/src/api/users.ts +52 -0
  1261. package/connectors/connect-zoom/src/api/webinars.ts +115 -0
  1262. package/connectors/connect-zoom/src/cli/index.ts +735 -0
  1263. package/connectors/connect-zoom/src/index.ts +26 -0
  1264. package/connectors/connect-zoom/src/types/index.ts +311 -0
  1265. package/connectors/connect-zoom/src/utils/config.ts +241 -0
  1266. package/connectors/connect-zoom/src/utils/output.ts +119 -0
  1267. package/connectors/connect-zoom/tsconfig.json +16 -0
  1268. package/dist/index.js +580 -0
  1269. package/package.json +68 -0
@@ -0,0 +1,1205 @@
1
+ #!/usr/bin/env bun
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import { X } from '../api';
5
+ import {
6
+ getApiKey,
7
+ setApiKey,
8
+ getApiSecret,
9
+ setApiSecret,
10
+ getBearerToken,
11
+ clearConfig,
12
+ getConfigDir,
13
+ setProfileOverride,
14
+ getCurrentProfile,
15
+ setCurrentProfile,
16
+ listProfiles,
17
+ createProfile,
18
+ deleteProfile,
19
+ profileExists,
20
+ loadProfile,
21
+ getClientId,
22
+ setClientId,
23
+ getClientSecret,
24
+ setClientSecret,
25
+ getAccessToken,
26
+ getRefreshToken,
27
+ getTokenExpiresAt,
28
+ getUserId,
29
+ getUsername,
30
+ saveOAuth2Tokens,
31
+ saveOAuth1Tokens,
32
+ clearUserTokens,
33
+ hasUserAuth,
34
+ hasOAuth2Auth,
35
+ hasOAuth1Auth,
36
+ getOAuth1AccessToken,
37
+ getOAuth1AccessTokenSecret,
38
+ } from '../utils/config';
39
+ import {
40
+ generatePKCE,
41
+ buildAuthorizationUrl,
42
+ exchangeCodeForTokens,
43
+ refreshAccessToken as refreshOAuth2Token,
44
+ revokeToken,
45
+ startCallbackServer,
46
+ getAuthenticatedUser,
47
+ DEFAULT_SCOPES,
48
+ OAUTH2_SCOPES,
49
+ type OAuth2Scope,
50
+ } from '../api/oauth';
51
+ import {
52
+ getRequestToken,
53
+ buildOAuth1AuthorizationUrl,
54
+ getAccessToken as getOAuth1AccessTokenFromX,
55
+ } from '../api/oauth1';
56
+ import type { OutputFormat } from '../utils/output';
57
+ import { success, error, info, print, warn } from '../utils/output';
58
+
59
+ const CONNECTOR_NAME = 'connect-x';
60
+ const VERSION = '0.0.14';
61
+
62
+ const program = new Command();
63
+
64
+ program
65
+ .name(CONNECTOR_NAME)
66
+ .description('X (Twitter) API v2 connector CLI - Tweets, users, and search')
67
+ .version(VERSION)
68
+ .option('-k, --api-key <key>', 'API key (overrides config)')
69
+ .option('-s, --api-secret <secret>', 'API secret (overrides config)')
70
+ .option('-f, --format <format>', 'Output format (json, pretty)', 'pretty')
71
+ .option('-p, --profile <profile>', 'Use a specific profile')
72
+ .hook('preAction', (thisCommand) => {
73
+ const opts = thisCommand.opts();
74
+ // Set profile override before any command runs
75
+ if (opts.profile) {
76
+ if (!profileExists(opts.profile)) {
77
+ error(`Profile "${opts.profile}" does not exist. Create it with "${CONNECTOR_NAME} profile create ${opts.profile}"`);
78
+ process.exit(1);
79
+ }
80
+ setProfileOverride(opts.profile);
81
+ }
82
+ // Set API key/secret from flags if provided
83
+ if (opts.apiKey) {
84
+ process.env.X_API_KEY = opts.apiKey;
85
+ }
86
+ if (opts.apiSecret) {
87
+ process.env.X_API_SECRET = opts.apiSecret;
88
+ }
89
+ });
90
+
91
+ // Helper to get output format
92
+ function getFormat(cmd: Command): OutputFormat {
93
+ const parent = cmd.parent;
94
+ return (parent?.opts().format || 'pretty') as OutputFormat;
95
+ }
96
+
97
+ // Helper to get authenticated client
98
+ function getClient(): X {
99
+ const apiKey = getApiKey();
100
+ const apiSecret = getApiSecret();
101
+ const bearerToken = getBearerToken();
102
+ const clientId = getClientId();
103
+ const clientSecret = getClientSecret();
104
+ const accessToken = getAccessToken();
105
+ const refreshToken = getRefreshToken();
106
+ const tokenExpiresAt = getTokenExpiresAt();
107
+ const oauth1AccessToken = getOAuth1AccessToken();
108
+ const oauth1AccessTokenSecret = getOAuth1AccessTokenSecret();
109
+
110
+ if (!apiKey || !apiSecret) {
111
+ error(`No API credentials configured. Run "${CONNECTOR_NAME} config set-key <key>" and "${CONNECTOR_NAME} config set-secret <secret>" or set X_API_KEY and X_API_SECRET environment variables.`);
112
+ process.exit(1);
113
+ }
114
+
115
+ const client = new X({
116
+ apiKey,
117
+ apiSecret,
118
+ bearerToken,
119
+ clientId,
120
+ clientSecret,
121
+ accessToken,
122
+ refreshToken,
123
+ tokenExpiresAt,
124
+ oauth1AccessToken,
125
+ oauth1AccessTokenSecret,
126
+ });
127
+
128
+ // Set up token refresh callback to persist refreshed tokens
129
+ client.setTokenRefreshCallback((tokens) => {
130
+ saveOAuth2Tokens({
131
+ accessToken: tokens.accessToken,
132
+ refreshToken: tokens.refreshToken,
133
+ expiresAt: tokens.expiresAt,
134
+ });
135
+ });
136
+
137
+ return client;
138
+ }
139
+
140
+ // ============================================
141
+ // Profile Commands
142
+ // ============================================
143
+ const profileCmd = program
144
+ .command('profile')
145
+ .description('Manage configuration profiles');
146
+
147
+ profileCmd
148
+ .command('list')
149
+ .description('List all profiles')
150
+ .action(() => {
151
+ const profiles = listProfiles();
152
+ const current = getCurrentProfile();
153
+
154
+ if (profiles.length === 0) {
155
+ info('No profiles found. Use "profile create <name>" to create one.');
156
+ return;
157
+ }
158
+
159
+ success(`Profiles:`);
160
+ profiles.forEach(p => {
161
+ const isActive = p === current ? chalk.green(' (active)') : '';
162
+ console.log(` ${p}${isActive}`);
163
+ });
164
+ });
165
+
166
+ profileCmd
167
+ .command('use <name>')
168
+ .description('Switch to a profile')
169
+ .action((name: string) => {
170
+ if (!profileExists(name)) {
171
+ error(`Profile "${name}" does not exist. Create it with "profile create ${name}"`);
172
+ process.exit(1);
173
+ }
174
+ setCurrentProfile(name);
175
+ success(`Switched to profile: ${name}`);
176
+ });
177
+
178
+ profileCmd
179
+ .command('create <name>')
180
+ .description('Create a new profile')
181
+ .option('--api-key <key>', 'API key')
182
+ .option('--api-secret <secret>', 'API secret')
183
+ .option('--use', 'Switch to this profile after creation')
184
+ .action((name: string, opts) => {
185
+ if (profileExists(name)) {
186
+ error(`Profile "${name}" already exists`);
187
+ process.exit(1);
188
+ }
189
+
190
+ createProfile(name, {});
191
+ success(`Profile "${name}" created`);
192
+ info('Note: App credentials are shared across all profiles. Use "config" commands to set them.');
193
+
194
+ if (opts.use) {
195
+ setCurrentProfile(name);
196
+ info(`Switched to profile: ${name}`);
197
+ }
198
+ });
199
+
200
+ profileCmd
201
+ .command('delete <name>')
202
+ .description('Delete a profile')
203
+ .action((name: string) => {
204
+ if (name === 'default') {
205
+ error('Cannot delete the default profile');
206
+ process.exit(1);
207
+ }
208
+ if (deleteProfile(name)) {
209
+ success(`Profile "${name}" deleted`);
210
+ } else {
211
+ error(`Profile "${name}" not found`);
212
+ process.exit(1);
213
+ }
214
+ });
215
+
216
+ profileCmd
217
+ .command('show [name]')
218
+ .description('Show profile configuration')
219
+ .action((name?: string) => {
220
+ const profileName = name || getCurrentProfile();
221
+ const config = loadProfile(profileName);
222
+ const active = getCurrentProfile();
223
+ // Get shared credentials (stored at base level, not in profile)
224
+ const apiKey = getApiKey();
225
+ const apiSecret = getApiSecret();
226
+
227
+ console.log(chalk.bold(`Profile: ${profileName}${profileName === active ? chalk.green(' (active)') : ''}`));
228
+ info(`API Key: ${apiKey ? `${apiKey.substring(0, 8)}...` : chalk.gray('not set (shared)')}`);
229
+ info(`API Secret: ${apiSecret ? `${apiSecret.substring(0, 8)}...` : chalk.gray('not set (shared)')}`);
230
+ });
231
+
232
+ // ============================================
233
+ // Config Commands
234
+ // ============================================
235
+ const configCmd = program
236
+ .command('config')
237
+ .description('Manage CLI configuration (for active profile)');
238
+
239
+ configCmd
240
+ .command('set-key <apiKey>')
241
+ .description('Set API key')
242
+ .action((apiKey: string) => {
243
+ setApiKey(apiKey);
244
+ success(`API key saved to profile: ${getCurrentProfile()}`);
245
+ });
246
+
247
+ configCmd
248
+ .command('set-secret <apiSecret>')
249
+ .description('Set API secret')
250
+ .action((apiSecret: string) => {
251
+ setApiSecret(apiSecret);
252
+ success(`API secret saved to profile: ${getCurrentProfile()}`);
253
+ });
254
+
255
+ configCmd
256
+ .command('show')
257
+ .description('Show current configuration')
258
+ .action(() => {
259
+ const profileName = getCurrentProfile();
260
+ const apiKey = getApiKey();
261
+ const apiSecret = getApiSecret();
262
+
263
+ console.log(chalk.bold(`Active Profile: ${profileName}`));
264
+ info(`Config directory: ${getConfigDir()}`);
265
+ info(`API Key: ${apiKey ? `${apiKey.substring(0, 8)}...` : chalk.gray('not set')}`);
266
+ info(`API Secret: ${apiSecret ? `${apiSecret.substring(0, 8)}...` : chalk.gray('not set')}`);
267
+ });
268
+
269
+ configCmd
270
+ .command('clear')
271
+ .description('Clear configuration for active profile')
272
+ .action(() => {
273
+ clearConfig();
274
+ success(`Configuration cleared for profile: ${getCurrentProfile()}`);
275
+ });
276
+
277
+ // ============================================
278
+ // Tweets Commands
279
+ // ============================================
280
+ const tweetsCmd = program
281
+ .command('tweets')
282
+ .alias('tweet')
283
+ .description('Tweet operations');
284
+
285
+ tweetsCmd
286
+ .command('get <id>')
287
+ .description('Get a tweet by ID')
288
+ .action(async (id: string) => {
289
+ try {
290
+ const client = getClient();
291
+ const result = await client.tweets.get(id);
292
+ print(result, getFormat(tweetsCmd));
293
+ } catch (err) {
294
+ error(String(err));
295
+ process.exit(1);
296
+ }
297
+ });
298
+
299
+ tweetsCmd
300
+ .command('search <query>')
301
+ .description('Search recent tweets')
302
+ .option('-n, --max <number>', 'Maximum results (10-100)', '10')
303
+ .option('--sort <order>', 'Sort order (recency, relevancy)', 'recency')
304
+ .action(async (query: string, opts) => {
305
+ try {
306
+ const client = getClient();
307
+ const result = await client.tweets.searchRecent({
308
+ query,
309
+ maxResults: Math.min(100, Math.max(10, parseInt(opts.max))),
310
+ sortOrder: opts.sort as 'recency' | 'relevancy',
311
+ });
312
+ print(result, getFormat(tweetsCmd));
313
+ } catch (err) {
314
+ error(String(err));
315
+ process.exit(1);
316
+ }
317
+ });
318
+
319
+ tweetsCmd
320
+ .command('count <query>')
321
+ .description('Get tweet counts for a query (recent)')
322
+ .option('--start-time <iso8601>', 'Start time (ISO 8601 format)')
323
+ .option('--end-time <iso8601>', 'End time (ISO 8601 format)')
324
+ .option('--granularity <unit>', 'Time bucket granularity (minute, hour, day)', 'hour')
325
+ .action(async (query: string, opts) => {
326
+ try {
327
+ const client = getClient();
328
+ const result = await client.tweets.countRecent(query, {
329
+ startTime: opts.startTime,
330
+ endTime: opts.endTime,
331
+ granularity: opts.granularity as 'minute' | 'hour' | 'day',
332
+ });
333
+ print(result, getFormat(tweetsCmd));
334
+ } catch (err) {
335
+ error(String(err));
336
+ process.exit(1);
337
+ }
338
+ });
339
+
340
+ tweetsCmd
341
+ .command('timeline <userId>')
342
+ .description('Get a user\'s timeline')
343
+ .option('-n, --max <number>', 'Maximum results', '10')
344
+ .option('--no-replies', 'Exclude replies')
345
+ .option('--no-retweets', 'Exclude retweets')
346
+ .action(async (userId: string, opts) => {
347
+ try {
348
+ const client = getClient();
349
+ const result = await client.tweets.getUserTimeline(userId, {
350
+ maxResults: parseInt(opts.max),
351
+ excludeReplies: !opts.replies,
352
+ excludeRetweets: !opts.retweets,
353
+ });
354
+ print(result, getFormat(tweetsCmd));
355
+ } catch (err) {
356
+ error(String(err));
357
+ process.exit(1);
358
+ }
359
+ });
360
+
361
+ tweetsCmd
362
+ .command('mentions <userId>')
363
+ .description('Get mentions of a user')
364
+ .option('-n, --max <number>', 'Maximum results', '10')
365
+ .action(async (userId: string, opts) => {
366
+ try {
367
+ const client = getClient();
368
+ const result = await client.tweets.getUserMentions(userId, {
369
+ maxResults: parseInt(opts.max),
370
+ });
371
+ print(result, getFormat(tweetsCmd));
372
+ } catch (err) {
373
+ error(String(err));
374
+ process.exit(1);
375
+ }
376
+ });
377
+
378
+ tweetsCmd
379
+ .command('likes <tweetId>')
380
+ .description('Get users who liked a tweet')
381
+ .option('-n, --max <number>', 'Maximum results', '100')
382
+ .action(async (tweetId: string, opts) => {
383
+ try {
384
+ const client = getClient();
385
+ const result = await client.tweets.getLikingUsers(tweetId, {
386
+ maxResults: parseInt(opts.max),
387
+ });
388
+ print(result, getFormat(tweetsCmd));
389
+ } catch (err) {
390
+ error(String(err));
391
+ process.exit(1);
392
+ }
393
+ });
394
+
395
+ tweetsCmd
396
+ .command('retweets <tweetId>')
397
+ .description('Get users who retweeted a tweet')
398
+ .option('-n, --max <number>', 'Maximum results', '100')
399
+ .action(async (tweetId: string, opts) => {
400
+ try {
401
+ const client = getClient();
402
+ const result = await client.tweets.getRetweetedBy(tweetId, {
403
+ maxResults: parseInt(opts.max),
404
+ });
405
+ print(result, getFormat(tweetsCmd));
406
+ } catch (err) {
407
+ error(String(err));
408
+ process.exit(1);
409
+ }
410
+ });
411
+
412
+ tweetsCmd
413
+ .command('quotes <tweetId>')
414
+ .description('Get quote tweets of a tweet')
415
+ .option('-n, --max <number>', 'Maximum results', '10')
416
+ .action(async (tweetId: string, opts) => {
417
+ try {
418
+ const client = getClient();
419
+ const result = await client.tweets.getQuoteTweets(tweetId, {
420
+ maxResults: parseInt(opts.max),
421
+ });
422
+ print(result, getFormat(tweetsCmd));
423
+ } catch (err) {
424
+ error(String(err));
425
+ process.exit(1);
426
+ }
427
+ });
428
+
429
+ // ============================================
430
+ // Users Commands
431
+ // ============================================
432
+ const usersCmd = program
433
+ .command('users')
434
+ .alias('user')
435
+ .description('User operations');
436
+
437
+ usersCmd
438
+ .command('get <identifier>')
439
+ .description('Get a user by ID or username')
440
+ .option('--by-id', 'Look up by ID instead of username')
441
+ .action(async (identifier: string, opts) => {
442
+ try {
443
+ const client = getClient();
444
+ const result = opts.byId
445
+ ? await client.users.getById(identifier)
446
+ : await client.users.getByUsername(identifier);
447
+ print(result, getFormat(usersCmd));
448
+ } catch (err) {
449
+ error(String(err));
450
+ process.exit(1);
451
+ }
452
+ });
453
+
454
+ usersCmd
455
+ .command('followers <userId>')
456
+ .description('Get a user\'s followers')
457
+ .option('-n, --max <number>', 'Maximum results', '100')
458
+ .action(async (userId: string, opts) => {
459
+ try {
460
+ const client = getClient();
461
+ const result = await client.users.getFollowers(userId, {
462
+ maxResults: parseInt(opts.max),
463
+ });
464
+ print(result, getFormat(usersCmd));
465
+ } catch (err) {
466
+ error(String(err));
467
+ process.exit(1);
468
+ }
469
+ });
470
+
471
+ usersCmd
472
+ .command('following <userId>')
473
+ .description('Get users that a user follows')
474
+ .option('-n, --max <number>', 'Maximum results', '100')
475
+ .action(async (userId: string, opts) => {
476
+ try {
477
+ const client = getClient();
478
+ const result = await client.users.getFollowing(userId, {
479
+ maxResults: parseInt(opts.max),
480
+ });
481
+ print(result, getFormat(usersCmd));
482
+ } catch (err) {
483
+ error(String(err));
484
+ process.exit(1);
485
+ }
486
+ });
487
+
488
+ usersCmd
489
+ .command('liked <userId>')
490
+ .description('Get tweets liked by a user')
491
+ .option('-n, --max <number>', 'Maximum results', '10')
492
+ .action(async (userId: string, opts) => {
493
+ try {
494
+ const client = getClient();
495
+ const result = await client.users.getLikedTweets(userId, {
496
+ maxResults: parseInt(opts.max),
497
+ });
498
+ print(result, getFormat(usersCmd));
499
+ } catch (err) {
500
+ error(String(err));
501
+ process.exit(1);
502
+ }
503
+ });
504
+
505
+ usersCmd
506
+ .command('lists <userId>')
507
+ .description('Get lists owned by a user')
508
+ .option('-n, --max <number>', 'Maximum results', '100')
509
+ .action(async (userId: string, opts) => {
510
+ try {
511
+ const client = getClient();
512
+ const result = await client.users.getOwnedLists(userId, {
513
+ maxResults: parseInt(opts.max),
514
+ });
515
+ print(result, getFormat(usersCmd));
516
+ } catch (err) {
517
+ error(String(err));
518
+ process.exit(1);
519
+ }
520
+ });
521
+
522
+ // ============================================
523
+ // Auth Commands
524
+ // ============================================
525
+ const authCmd = program
526
+ .command('auth')
527
+ .description('Authenticate with X (OAuth 2.0 browser login)');
528
+
529
+ authCmd
530
+ .command('status')
531
+ .description('Show current authentication status')
532
+ .action(() => {
533
+ const profileName = getCurrentProfile();
534
+ console.log(chalk.bold(`Profile: ${profileName}\n`));
535
+
536
+ // App credentials
537
+ const apiKey = getApiKey();
538
+ const apiSecret = getApiSecret();
539
+ const clientId = getClientId();
540
+
541
+ console.log(chalk.bold('App Credentials:'));
542
+ info(` API Key: ${apiKey ? chalk.green(`${apiKey.substring(0, 8)}...`) : chalk.gray('not set')}`);
543
+ info(` API Secret: ${apiSecret ? chalk.green('configured') : chalk.gray('not set')}`);
544
+ info(` Client ID: ${clientId ? chalk.green(`${clientId.substring(0, 8)}...`) : chalk.gray('not set')}`);
545
+
546
+ // OAuth 2.0 status
547
+ console.log(chalk.bold('\nOAuth 2.0 (User Context):'));
548
+ if (hasOAuth2Auth()) {
549
+ const username = getUsername();
550
+ const userId = getUserId();
551
+ const expiresAt = getTokenExpiresAt();
552
+ const isExpired = expiresAt ? Date.now() > expiresAt : false;
553
+
554
+ info(` Status: ${isExpired ? chalk.yellow('expired') : chalk.green('authenticated')}`);
555
+ if (username) info(` User: @${username} (${userId})`);
556
+ if (expiresAt) {
557
+ const expiresIn = Math.round((expiresAt - Date.now()) / 1000 / 60);
558
+ info(` Expires: ${isExpired ? chalk.red('expired') : chalk.green(`in ${expiresIn} minutes`)}`);
559
+ }
560
+ info(` Refresh token: ${getRefreshToken() ? chalk.green('available') : chalk.yellow('not available')}`);
561
+ } else {
562
+ info(` Status: ${chalk.gray('not authenticated')}`);
563
+ info(` Run: ${chalk.cyan(`${CONNECTOR_NAME} auth login`)} to authenticate`);
564
+ }
565
+
566
+ // OAuth 1.0a status
567
+ console.log(chalk.bold('\nOAuth 1.0a (Media Upload):'));
568
+ if (hasOAuth1Auth()) {
569
+ info(` Status: ${chalk.green('authenticated')}`);
570
+ info(` Media upload: ${chalk.green('available')}`);
571
+ } else {
572
+ info(` Status: ${chalk.gray('not authenticated')}`);
573
+ info(` Run: ${chalk.cyan(`${CONNECTOR_NAME} auth login --oauth1`)} to enable media upload`);
574
+ }
575
+ });
576
+
577
+ authCmd
578
+ .command('login')
579
+ .description('Authenticate with X (opens browser)')
580
+ .option('--oauth1', 'Use OAuth 1.0a (for media upload)')
581
+ .option('--port <port>', 'Local callback server port', '5930')
582
+ .option('--scopes <scopes>', 'OAuth 2.0 scopes (comma-separated)')
583
+ .action(async (opts) => {
584
+ const clientId = getClientId();
585
+ const clientSecret = getClientSecret();
586
+ const apiKey = getApiKey();
587
+ const apiSecret = getApiSecret();
588
+
589
+ if (opts.oauth1) {
590
+ // OAuth 1.0a flow (PIN-based for desktop apps)
591
+ if (!apiKey || !apiSecret) {
592
+ error('API Key and Secret required for OAuth 1.0a. Run:');
593
+ info(` ${CONNECTOR_NAME} config set-key <api_key>`);
594
+ info(` ${CONNECTOR_NAME} config set-secret <api_secret>`);
595
+ process.exit(1);
596
+ }
597
+
598
+ info('Starting OAuth 1.0a authentication (PIN-based)...');
599
+
600
+ try {
601
+ // Step 1: Get request token with 'oob' callback for PIN-based flow
602
+ info('Getting request token...');
603
+ const requestToken = await getRequestToken(
604
+ { consumerKey: apiKey, consumerSecret: apiSecret },
605
+ 'oob'
606
+ );
607
+
608
+ // Step 2: Open browser for authorization
609
+ const authUrl = buildOAuth1AuthorizationUrl(requestToken.oauthToken);
610
+ info('Opening browser for authorization...');
611
+ console.log(chalk.cyan(`\nAuthorize the app and enter the PIN shown.\n`));
612
+ console.log(chalk.cyan(`URL: ${authUrl}\n`));
613
+
614
+ // Open browser
615
+ const open = await import('open').then(m => m.default).catch(() => null);
616
+ if (open) {
617
+ await open(authUrl);
618
+ }
619
+
620
+ // Step 3: Get PIN from user
621
+ const readline = await import('readline');
622
+ const rl = readline.createInterface({
623
+ input: process.stdin,
624
+ output: process.stdout,
625
+ });
626
+
627
+ const pin = await new Promise<string>((resolve) => {
628
+ rl.question(chalk.bold('Enter PIN: '), (answer) => {
629
+ rl.close();
630
+ resolve(answer.trim());
631
+ });
632
+ });
633
+
634
+ if (!pin) {
635
+ error('No PIN entered');
636
+ process.exit(1);
637
+ }
638
+
639
+ // Step 4: Exchange for access token
640
+ info('Exchanging for access token...');
641
+ const tokens = await getOAuth1AccessTokenFromX(
642
+ { consumerKey: apiKey, consumerSecret: apiSecret },
643
+ requestToken.oauthToken,
644
+ requestToken.oauthTokenSecret,
645
+ pin
646
+ );
647
+
648
+ // Create profile with username
649
+ const profileName = tokens.screenName || 'default';
650
+ if (tokens.screenName && !profileExists(profileName)) {
651
+ // App credentials are now shared at base level, profile only stores tokens
652
+ createProfile(profileName, {});
653
+ info(`Created profile: ${profileName}`);
654
+ }
655
+
656
+ // Switch to the profile
657
+ if (tokens.screenName) {
658
+ setCurrentProfile(profileName);
659
+ info(`Switched to profile: ${profileName}`);
660
+ }
661
+
662
+ // Save tokens
663
+ saveOAuth1Tokens(tokens);
664
+
665
+ success(`\nAuthenticated as @${tokens.screenName || 'unknown'} (OAuth 1.0a)`);
666
+ info('You can now post tweets, like, retweet, and upload media.');
667
+ } catch (err) {
668
+ error(`OAuth 1.0a login failed: ${err}`);
669
+ process.exit(1);
670
+ }
671
+ } else {
672
+ // OAuth 2.0 PKCE flow
673
+ if (!clientId) {
674
+ error('Client ID required for OAuth 2.0. Run:');
675
+ info(` ${CONNECTOR_NAME} auth set-client-id <client_id>`);
676
+ info(` ${CONNECTOR_NAME} auth set-client-secret <client_secret> (optional)`);
677
+ process.exit(1);
678
+ }
679
+
680
+ info('Starting OAuth 2.0 authentication...');
681
+
682
+ try {
683
+ const port = parseInt(opts.port);
684
+ const redirectUri = `http://localhost:${port}/callback`;
685
+
686
+ // Parse scopes
687
+ let scopes: OAuth2Scope[] = DEFAULT_SCOPES;
688
+ if (opts.scopes) {
689
+ scopes = opts.scopes.split(',').map((s: string) => s.trim()) as OAuth2Scope[];
690
+ }
691
+
692
+ // Generate PKCE
693
+ const pkce = generatePKCE();
694
+
695
+ // Build authorization URL
696
+ const authUrl = buildAuthorizationUrl(
697
+ { clientId, clientSecret, redirectUri, scopes },
698
+ pkce
699
+ );
700
+
701
+ info('Opening browser for authorization...');
702
+ console.log(chalk.cyan(`\nIf browser doesn't open, visit:\n${authUrl}\n`));
703
+
704
+ // Open browser
705
+ const open = await import('open').then(m => m.default).catch(() => null);
706
+ if (open) {
707
+ await open(authUrl);
708
+ }
709
+
710
+ // Start callback server
711
+ info('Waiting for authorization...');
712
+ const { code } = await startCallbackServer(port, pkce.state);
713
+
714
+ // Exchange code for tokens
715
+ info('Exchanging authorization code for tokens...');
716
+ const tokens = await exchangeCodeForTokens(
717
+ { clientId, clientSecret, redirectUri },
718
+ code,
719
+ pkce.codeVerifier
720
+ );
721
+
722
+ // Get user info
723
+ info('Getting user info...');
724
+ const user = await getAuthenticatedUser(tokens.accessToken);
725
+
726
+ // Create profile with username if it doesn't exist
727
+ const profileName = user.username;
728
+ if (!profileExists(profileName)) {
729
+ // App credentials are now shared at base level, profile only stores tokens
730
+ createProfile(profileName, {});
731
+ info(`Created profile: ${profileName}`);
732
+ }
733
+
734
+ // Switch to the new profile
735
+ setCurrentProfile(profileName);
736
+ info(`Switched to profile: ${profileName}`);
737
+
738
+ // Save tokens to the new profile
739
+ saveOAuth2Tokens({
740
+ accessToken: tokens.accessToken,
741
+ refreshToken: tokens.refreshToken,
742
+ expiresAt: tokens.expiresAt,
743
+ scopes: tokens.scope.split(' '),
744
+ userId: user.id,
745
+ username: user.username,
746
+ });
747
+
748
+ success(`\nAuthenticated as @${user.username} (${user.name})`);
749
+ info(`User ID: ${user.id}`);
750
+ info(`Token expires in ${Math.round(tokens.expiresIn / 60)} minutes`);
751
+ if (tokens.refreshToken) {
752
+ info('Refresh token saved for automatic renewal');
753
+ }
754
+ } catch (err) {
755
+ error(`OAuth 2.0 login failed: ${err}`);
756
+ process.exit(1);
757
+ }
758
+ }
759
+ });
760
+
761
+ authCmd
762
+ .command('logout')
763
+ .description('Revoke tokens and clear authentication')
764
+ .option('--keep-app-credentials', 'Keep API key/secret, only clear user tokens')
765
+ .action(async (opts) => {
766
+ const clientId = getClientId();
767
+ const clientSecret = getClientSecret();
768
+ const accessToken = getAccessToken();
769
+ const refreshToken = getRefreshToken();
770
+
771
+ // Try to revoke tokens if we have them
772
+ if (accessToken && clientId) {
773
+ try {
774
+ info('Revoking access token...');
775
+ await revokeToken(
776
+ { clientId, clientSecret, redirectUri: '' },
777
+ accessToken,
778
+ 'access_token'
779
+ );
780
+ } catch {
781
+ warn('Could not revoke access token (may already be expired)');
782
+ }
783
+ }
784
+
785
+ if (refreshToken && clientId) {
786
+ try {
787
+ info('Revoking refresh token...');
788
+ await revokeToken(
789
+ { clientId, clientSecret, redirectUri: '' },
790
+ refreshToken,
791
+ 'refresh_token'
792
+ );
793
+ } catch {
794
+ warn('Could not revoke refresh token');
795
+ }
796
+ }
797
+
798
+ // Clear stored tokens
799
+ if (opts.keepAppCredentials) {
800
+ clearUserTokens();
801
+ success('User tokens cleared (app credentials preserved)');
802
+ } else {
803
+ clearConfig();
804
+ success('All authentication cleared');
805
+ }
806
+ });
807
+
808
+ authCmd
809
+ .command('refresh')
810
+ .description('Manually refresh the OAuth 2.0 access token')
811
+ .action(async () => {
812
+ const clientId = getClientId();
813
+ const clientSecret = getClientSecret();
814
+ const refreshToken = getRefreshToken();
815
+
816
+ if (!clientId) {
817
+ error('Client ID not configured');
818
+ process.exit(1);
819
+ }
820
+
821
+ if (!refreshToken) {
822
+ error('No refresh token available. Run "auth login" first.');
823
+ process.exit(1);
824
+ }
825
+
826
+ try {
827
+ info('Refreshing access token...');
828
+ const tokens = await refreshOAuth2Token(
829
+ { clientId, clientSecret, redirectUri: '' },
830
+ refreshToken
831
+ );
832
+
833
+ saveOAuth2Tokens({
834
+ accessToken: tokens.accessToken,
835
+ refreshToken: tokens.refreshToken,
836
+ expiresAt: tokens.expiresAt,
837
+ });
838
+
839
+ success('Token refreshed successfully');
840
+ info(`New token expires in ${Math.round(tokens.expiresIn / 60)} minutes`);
841
+ } catch (err) {
842
+ error(`Token refresh failed: ${err}`);
843
+ process.exit(1);
844
+ }
845
+ });
846
+
847
+ authCmd
848
+ .command('set-client-id <clientId>')
849
+ .description('Set OAuth 2.0 Client ID')
850
+ .action((clientId: string) => {
851
+ setClientId(clientId);
852
+ success(`Client ID saved to profile: ${getCurrentProfile()}`);
853
+ });
854
+
855
+ authCmd
856
+ .command('set-client-secret <clientSecret>')
857
+ .description('Set OAuth 2.0 Client Secret (optional for public clients)')
858
+ .action((clientSecret: string) => {
859
+ setClientSecret(clientSecret);
860
+ success(`Client Secret saved to profile: ${getCurrentProfile()}`);
861
+ });
862
+
863
+ authCmd
864
+ .command('scopes')
865
+ .description('List available OAuth 2.0 scopes')
866
+ .action(() => {
867
+ console.log(chalk.bold('Available OAuth 2.0 Scopes:\n'));
868
+
869
+ const categories = {
870
+ 'Read': ['tweet.read', 'users.read', 'follows.read', 'list.read', 'space.read', 'mute.read', 'like.read', 'block.read', 'bookmark.read'],
871
+ 'Write': ['tweet.write', 'follows.write', 'list.write', 'mute.write', 'like.write', 'block.write', 'bookmark.write'],
872
+ 'Direct Messages': ['dm.read', 'dm.write'],
873
+ 'Other': ['offline.access'],
874
+ };
875
+
876
+ for (const [category, scopes] of Object.entries(categories)) {
877
+ console.log(chalk.bold.underline(category));
878
+ for (const scope of scopes) {
879
+ const desc = OAUTH2_SCOPES[scope as OAuth2Scope];
880
+ const isDefault = DEFAULT_SCOPES.includes(scope as OAuth2Scope);
881
+ console.log(` ${chalk.cyan(scope.padEnd(20))} ${desc}${isDefault ? chalk.green(' (default)') : ''}`);
882
+ }
883
+ console.log();
884
+ }
885
+ });
886
+
887
+ // ============================================
888
+ // Tweet Commands (Write Operations)
889
+ // ============================================
890
+ tweetsCmd
891
+ .command('post <text>')
892
+ .description('Post a new tweet (requires auth)')
893
+ .option('--media <paths>', 'Media file paths (comma-separated)')
894
+ .option('--reply-to <tweetId>', 'Reply to a tweet')
895
+ .option('--quote <tweetId>', 'Quote a tweet')
896
+ .action(async (text: string, opts) => {
897
+ try {
898
+ const client = getClient();
899
+
900
+ if (!hasUserAuth()) {
901
+ error('Authentication required. Run "auth login" or "auth login --oauth1" first.');
902
+ process.exit(1);
903
+ }
904
+
905
+ let mediaIds: string[] | undefined;
906
+
907
+ // Upload media if provided
908
+ if (opts.media && client.hasMediaUpload()) {
909
+ const paths = opts.media.split(',').map((p: string) => p.trim());
910
+ mediaIds = [];
911
+
912
+ for (const filePath of paths) {
913
+ info(`Uploading ${filePath}...`);
914
+ const result = await client.media!.uploadFile(filePath);
915
+ mediaIds.push(result.media_id_string);
916
+ success(`Uploaded: ${result.media_id_string}`);
917
+ }
918
+ } else if (opts.media) {
919
+ warn('Media upload requires OAuth 1.0a. Run "auth login --oauth1" to enable.');
920
+ }
921
+
922
+ info('Posting tweet...');
923
+ const result = await client.tweets.create({
924
+ text,
925
+ mediaIds,
926
+ replyToTweetId: opts.replyTo,
927
+ quoteTweetId: opts.quote,
928
+ });
929
+
930
+ success(`Tweet posted: https://twitter.com/i/status/${result.data.id}`);
931
+ print(result, getFormat(tweetsCmd));
932
+ } catch (err) {
933
+ error(String(err));
934
+ process.exit(1);
935
+ }
936
+ });
937
+
938
+ tweetsCmd
939
+ .command('delete <tweetId>')
940
+ .description('Delete a tweet (requires auth)')
941
+ .action(async (tweetId: string) => {
942
+ try {
943
+ const client = getClient();
944
+
945
+ if (!hasUserAuth()) {
946
+ error('Authentication required. Run "auth login" or "auth login --oauth1" first.');
947
+ process.exit(1);
948
+ }
949
+
950
+ const result = await client.tweets.delete(tweetId);
951
+ if (result.data.deleted) {
952
+ success(`Tweet ${tweetId} deleted`);
953
+ } else {
954
+ error('Failed to delete tweet');
955
+ }
956
+ } catch (err) {
957
+ error(String(err));
958
+ process.exit(1);
959
+ }
960
+ });
961
+
962
+ tweetsCmd
963
+ .command('like <tweetId>')
964
+ .description('Like a tweet (requires auth)')
965
+ .action(async (tweetId: string) => {
966
+ try {
967
+ const client = getClient();
968
+ const userId = getUserId();
969
+
970
+ if (!hasOAuth2Auth() || !userId) {
971
+ error('Authentication required. Run "auth login" first.');
972
+ process.exit(1);
973
+ }
974
+
975
+ const result = await client.tweets.like(userId, tweetId);
976
+ if (result.data.liked) {
977
+ success(`Liked tweet ${tweetId}`);
978
+ }
979
+ } catch (err) {
980
+ error(String(err));
981
+ process.exit(1);
982
+ }
983
+ });
984
+
985
+ tweetsCmd
986
+ .command('unlike <tweetId>')
987
+ .description('Unlike a tweet (requires auth)')
988
+ .action(async (tweetId: string) => {
989
+ try {
990
+ const client = getClient();
991
+ const userId = getUserId();
992
+
993
+ if (!hasOAuth2Auth() || !userId) {
994
+ error('Authentication required. Run "auth login" first.');
995
+ process.exit(1);
996
+ }
997
+
998
+ const result = await client.tweets.unlike(userId, tweetId);
999
+ success(`Unliked tweet ${tweetId}`);
1000
+ } catch (err) {
1001
+ error(String(err));
1002
+ process.exit(1);
1003
+ }
1004
+ });
1005
+
1006
+ tweetsCmd
1007
+ .command('retweet <tweetId>')
1008
+ .description('Retweet a tweet (requires auth)')
1009
+ .action(async (tweetId: string) => {
1010
+ try {
1011
+ const client = getClient();
1012
+ const userId = getUserId();
1013
+
1014
+ if (!hasOAuth2Auth() || !userId) {
1015
+ error('Authentication required. Run "auth login" first.');
1016
+ process.exit(1);
1017
+ }
1018
+
1019
+ const result = await client.tweets.retweet(userId, tweetId);
1020
+ if (result.data.retweeted) {
1021
+ success(`Retweeted ${tweetId}`);
1022
+ }
1023
+ } catch (err) {
1024
+ error(String(err));
1025
+ process.exit(1);
1026
+ }
1027
+ });
1028
+
1029
+ tweetsCmd
1030
+ .command('bookmarks')
1031
+ .description('Get your bookmarked tweets (requires auth)')
1032
+ .option('-n, --max <number>', 'Maximum results', '10')
1033
+ .option('--page-token <token>', 'Pagination token')
1034
+ .action(async (opts) => {
1035
+ try {
1036
+ const client = getClient();
1037
+ const userId = getUserId();
1038
+
1039
+ if (!hasOAuth2Auth() || !userId) {
1040
+ error('Authentication required. Run "auth login" first.');
1041
+ process.exit(1);
1042
+ }
1043
+
1044
+ const result = await client.tweets.getBookmarks(userId, {
1045
+ maxResults: parseInt(opts.max),
1046
+ paginationToken: opts.pageToken,
1047
+ });
1048
+
1049
+ print(result, getFormat(tweetsCmd));
1050
+
1051
+ if (result.meta?.next_token) {
1052
+ info(`More results available. Use --page-token ${result.meta.next_token}`);
1053
+ }
1054
+ } catch (err) {
1055
+ error(String(err));
1056
+ process.exit(1);
1057
+ }
1058
+ });
1059
+
1060
+ tweetsCmd
1061
+ .command('bookmark <tweetId>')
1062
+ .description('Bookmark a tweet (requires auth)')
1063
+ .action(async (tweetId: string) => {
1064
+ try {
1065
+ const client = getClient();
1066
+ const userId = getUserId();
1067
+
1068
+ if (!hasOAuth2Auth() || !userId) {
1069
+ error('Authentication required. Run "auth login" first.');
1070
+ process.exit(1);
1071
+ }
1072
+
1073
+ const result = await client.tweets.bookmark(userId, tweetId);
1074
+ if (result.data.bookmarked) {
1075
+ success(`Bookmarked tweet ${tweetId}`);
1076
+ }
1077
+ } catch (err) {
1078
+ error(String(err));
1079
+ process.exit(1);
1080
+ }
1081
+ });
1082
+
1083
+ tweetsCmd
1084
+ .command('unbookmark <tweetId>')
1085
+ .description('Remove a bookmark (requires auth)')
1086
+ .action(async (tweetId: string) => {
1087
+ try {
1088
+ const client = getClient();
1089
+ const userId = getUserId();
1090
+
1091
+ if (!hasOAuth2Auth() || !userId) {
1092
+ error('Authentication required. Run "auth login" first.');
1093
+ process.exit(1);
1094
+ }
1095
+
1096
+ const result = await client.tweets.removeBookmark(userId, tweetId);
1097
+ success(`Removed bookmark from tweet ${tweetId}`);
1098
+ } catch (err) {
1099
+ error(String(err));
1100
+ process.exit(1);
1101
+ }
1102
+ });
1103
+
1104
+ // ============================================
1105
+ // User Commands (Write Operations)
1106
+ // ============================================
1107
+ usersCmd
1108
+ .command('me')
1109
+ .description('Get the authenticated user info')
1110
+ .action(async () => {
1111
+ try {
1112
+ const client = getClient();
1113
+
1114
+ if (!hasUserAuth()) {
1115
+ error('Authentication required. Run "auth login" first.');
1116
+ process.exit(1);
1117
+ }
1118
+
1119
+ const result = await client.users.me();
1120
+ print(result, getFormat(usersCmd));
1121
+ } catch (err) {
1122
+ error(String(err));
1123
+ process.exit(1);
1124
+ }
1125
+ });
1126
+
1127
+ usersCmd
1128
+ .command('follow <username>')
1129
+ .description('Follow a user (requires auth)')
1130
+ .action(async (username: string) => {
1131
+ try {
1132
+ const client = getClient();
1133
+ const userId = getUserId();
1134
+
1135
+ if (!hasOAuth2Auth() || !userId) {
1136
+ error('Authentication required. Run "auth login" first.');
1137
+ process.exit(1);
1138
+ }
1139
+
1140
+ // Get target user ID
1141
+ const targetUser = await client.users.getByUsername(username);
1142
+ const targetUserId = targetUser.data.id;
1143
+
1144
+ const result = await client.users.follow(userId, targetUserId);
1145
+ if (result.data.following) {
1146
+ success(`Now following @${username}`);
1147
+ } else if (result.data.pending_follow) {
1148
+ info(`Follow request sent to @${username} (pending approval)`);
1149
+ }
1150
+ } catch (err) {
1151
+ error(String(err));
1152
+ process.exit(1);
1153
+ }
1154
+ });
1155
+
1156
+ usersCmd
1157
+ .command('unfollow <username>')
1158
+ .description('Unfollow a user (requires auth)')
1159
+ .action(async (username: string) => {
1160
+ try {
1161
+ const client = getClient();
1162
+ const userId = getUserId();
1163
+
1164
+ if (!hasOAuth2Auth() || !userId) {
1165
+ error('Authentication required. Run "auth login" first.');
1166
+ process.exit(1);
1167
+ }
1168
+
1169
+ // Get target user ID
1170
+ const targetUser = await client.users.getByUsername(username);
1171
+ const targetUserId = targetUser.data.id;
1172
+
1173
+ await client.users.unfollow(userId, targetUserId);
1174
+ success(`Unfollowed @${username}`);
1175
+ } catch (err) {
1176
+ error(String(err));
1177
+ process.exit(1);
1178
+ }
1179
+ });
1180
+
1181
+ // ============================================
1182
+ // Search Command (shortcut)
1183
+ // ============================================
1184
+ program
1185
+ .command('search <query>')
1186
+ .description('Search recent tweets (shortcut for "tweets search")')
1187
+ .option('-n, --max <number>', 'Maximum results (10-100)', '10')
1188
+ .option('--sort <order>', 'Sort order (recency, relevancy)', 'recency')
1189
+ .action(async (query: string, opts) => {
1190
+ try {
1191
+ const client = getClient();
1192
+ const result = await client.tweets.searchRecent({
1193
+ query,
1194
+ maxResults: Math.min(100, Math.max(10, parseInt(opts.max))),
1195
+ sortOrder: opts.sort as 'recency' | 'relevancy',
1196
+ });
1197
+ print(result, getFormat(program));
1198
+ } catch (err) {
1199
+ error(String(err));
1200
+ process.exit(1);
1201
+ }
1202
+ });
1203
+
1204
+ // Parse and execute
1205
+ program.parse();