@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,1666 @@
1
+ #!/usr/bin/env bun
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import open from 'open';
5
+ import { Notion } from '../api';
6
+ import {
7
+ getClientId,
8
+ getClientSecret,
9
+ setCredentials,
10
+ setApiKey,
11
+ getApiKey,
12
+ clearConfig,
13
+ isAuthenticated,
14
+ loadTokens,
15
+ saveTokens,
16
+ getConfigDir,
17
+ setProfileOverride,
18
+ getCurrentProfile,
19
+ setCurrentProfile,
20
+ listProfiles,
21
+ createProfile,
22
+ deleteProfile,
23
+ profileExists,
24
+ getWorkspaceName,
25
+ getWorkspaceId,
26
+ } from '../utils/config';
27
+ import {
28
+ getAuthUrl,
29
+ startCallbackServer,
30
+ } from '../utils/auth';
31
+ import type { OutputFormat } from '../utils/output';
32
+ import { success, error, info, print, warn } from '../utils/output';
33
+ import type { RichText } from '../types';
34
+
35
+ const program = new Command();
36
+
37
+ program
38
+ .name('connect-notion')
39
+ .description('Notion API connector CLI - Manage Notion pages, databases, and blocks')
40
+ .version('0.1.0')
41
+ .option('-f, --format <format>', 'Output format (json, table, pretty)', 'pretty')
42
+ .option('-p, --profile <profile>', 'Use a specific profile')
43
+ .hook('preAction', (thisCommand) => {
44
+ // Set profile override before any command runs
45
+ const opts = thisCommand.opts();
46
+ if (opts.profile) {
47
+ if (!profileExists(opts.profile)) {
48
+ error(`Profile "${opts.profile}" does not exist. Create it with "connect-notion profiles create ${opts.profile}"`);
49
+ process.exit(1);
50
+ }
51
+ setProfileOverride(opts.profile);
52
+ }
53
+ });
54
+
55
+ // Helper to get output format
56
+ function getFormat(cmd: Command): OutputFormat {
57
+ const parent = cmd.parent;
58
+ return (parent?.opts().format || 'pretty') as OutputFormat;
59
+ }
60
+
61
+ // Helper to check authentication
62
+ function requireAuth(): Notion {
63
+ if (!isAuthenticated()) {
64
+ error('Not authenticated. Run "connect-notion auth login" or "connect-notion config set-key <api-key>" first.');
65
+ process.exit(1);
66
+ }
67
+ return Notion.create();
68
+ }
69
+
70
+ // Helper to extract title from rich text
71
+ function extractTitle(richText: RichText[]): string {
72
+ return richText.map(rt => rt.plain_text).join('');
73
+ }
74
+
75
+ // ============================================
76
+ // Auth Commands
77
+ // ============================================
78
+ const authCmd = program
79
+ .command('auth')
80
+ .description('Authentication commands');
81
+
82
+ authCmd
83
+ .command('login')
84
+ .description('Login to Notion via OAuth2 (opens browser)')
85
+ .action(async () => {
86
+ const clientId = getClientId();
87
+ const clientSecret = getClientSecret();
88
+
89
+ if (!clientId || !clientSecret) {
90
+ error('OAuth credentials not configured.');
91
+ info('Run "connect-notion config set-credentials <client-id> <client-secret>" first.');
92
+ info('Or set NOTION_CLIENT_ID and NOTION_CLIENT_SECRET environment variables.');
93
+ info('');
94
+ info('Alternatively, use an internal integration token:');
95
+ info(' connect-notion config set-key <your-integration-token>');
96
+ process.exit(1);
97
+ }
98
+
99
+ info('Starting OAuth2 authentication flow...');
100
+ info('A browser window will open for you to authorize the application.');
101
+
102
+ // Start callback server first
103
+ const serverPromise = startCallbackServer();
104
+
105
+ // Open browser to auth URL
106
+ const authUrl = getAuthUrl();
107
+ await open(authUrl);
108
+
109
+ info('Waiting for authentication...');
110
+
111
+ const result = await serverPromise;
112
+
113
+ if (result.success && result.tokens) {
114
+ success('Successfully authenticated!');
115
+ info(`Workspace: ${result.tokens.workspaceName || 'Unknown'}`);
116
+ info(`Workspace ID: ${result.tokens.workspaceId || 'Unknown'}`);
117
+
118
+ // Create profile from workspace name if available
119
+ if (result.tokens.workspaceName) {
120
+ const profileSlug = result.tokens.workspaceName.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
121
+ if (profileSlug && !profileExists(profileSlug)) {
122
+ try {
123
+ createProfile(profileSlug);
124
+ setCurrentProfile(profileSlug);
125
+ setProfileOverride(profileSlug);
126
+ saveTokens(result.tokens);
127
+ info(`Created and switched to profile: ${profileSlug}`);
128
+ } catch {
129
+ // Profile creation failed, continue with default
130
+ }
131
+ }
132
+ }
133
+ } else {
134
+ error(`Authentication failed: ${result.error}`);
135
+ process.exit(1);
136
+ }
137
+ });
138
+
139
+ authCmd
140
+ .command('status')
141
+ .description('Check authentication status')
142
+ .action(async () => {
143
+ if (isAuthenticated()) {
144
+ const tokens = loadTokens();
145
+ const apiKey = getApiKey();
146
+
147
+ success('Authenticated');
148
+
149
+ if (tokens?.accessToken) {
150
+ info('Auth method: OAuth2');
151
+ if (tokens.workspaceName) {
152
+ info(`Workspace: ${tokens.workspaceName}`);
153
+ }
154
+ if (tokens.workspaceId) {
155
+ info(`Workspace ID: ${tokens.workspaceId}`);
156
+ }
157
+ if (tokens.botId) {
158
+ info(`Bot ID: ${tokens.botId}`);
159
+ }
160
+ } else if (apiKey) {
161
+ info('Auth method: Internal Integration Token');
162
+ info(`Token: ${apiKey.substring(0, 10)}...${apiKey.substring(apiKey.length - 4)}`);
163
+ }
164
+ } else {
165
+ warn('Not authenticated');
166
+ info('Run "connect-notion auth login" or "connect-notion config set-key <api-key>" to authenticate.');
167
+ }
168
+ });
169
+
170
+ authCmd
171
+ .command('logout')
172
+ .description('Clear stored authentication tokens')
173
+ .action(() => {
174
+ clearConfig();
175
+ success('Logged out successfully');
176
+ });
177
+
178
+ // ============================================
179
+ // Config Commands
180
+ // ============================================
181
+ const configCmd = program
182
+ .command('config')
183
+ .description('Manage CLI configuration');
184
+
185
+ configCmd
186
+ .command('set-credentials <clientId> <clientSecret>')
187
+ .description('Set OAuth2 client credentials')
188
+ .action((clientId: string, clientSecret: string) => {
189
+ setCredentials(clientId, clientSecret);
190
+ success('OAuth credentials saved successfully');
191
+ info(`Config stored in: ${getConfigDir()}`);
192
+ });
193
+
194
+ configCmd
195
+ .command('set-key <apiKey>')
196
+ .description('Set Notion internal integration token (API key)')
197
+ .action((apiKey: string) => {
198
+ setApiKey(apiKey);
199
+ success('API key saved successfully');
200
+ info(`Config stored in: ${getConfigDir()}`);
201
+ });
202
+
203
+ configCmd
204
+ .command('show')
205
+ .description('Show current configuration')
206
+ .action(() => {
207
+ const clientId = getClientId();
208
+ const clientSecret = getClientSecret();
209
+ const tokens = loadTokens();
210
+ const apiKey = getApiKey();
211
+
212
+ info(`Config directory: ${getConfigDir()}`);
213
+ info(`Client ID: ${clientId ? `${clientId.substring(0, 20)}...` : chalk.gray('not set')}`);
214
+ info(`Client Secret: ${clientSecret ? '********' : chalk.gray('not set')}`);
215
+ info(`API Key: ${apiKey ? `${apiKey.substring(0, 10)}...` : chalk.gray('not set')}`);
216
+ info(`Authenticated: ${isAuthenticated() ? chalk.green('Yes') : chalk.red('No')}`);
217
+ if (tokens?.workspaceName) {
218
+ info(`Workspace: ${tokens.workspaceName}`);
219
+ }
220
+ if (tokens?.workspaceId) {
221
+ info(`Workspace ID: ${tokens.workspaceId}`);
222
+ }
223
+ });
224
+
225
+ configCmd
226
+ .command('clear')
227
+ .description('Clear all configuration and tokens')
228
+ .action(() => {
229
+ clearConfig();
230
+ success('Configuration cleared');
231
+ });
232
+
233
+ // ============================================
234
+ // Me Command (current user info)
235
+ // ============================================
236
+ program
237
+ .command('me')
238
+ .description('Get information about the authenticated bot/user')
239
+ .action(async () => {
240
+ try {
241
+ const notion = requireAuth();
242
+ const user = await notion.users.me();
243
+ print(user, getFormat(program));
244
+ } catch (err) {
245
+ error(String(err));
246
+ process.exit(1);
247
+ }
248
+ });
249
+
250
+ // ============================================
251
+ // Profiles Management Commands
252
+ // ============================================
253
+ const profilesCmd = program
254
+ .command('profiles')
255
+ .description('Manage multiple Notion profiles');
256
+
257
+ profilesCmd
258
+ .command('list')
259
+ .description('List all profiles')
260
+ .action(() => {
261
+ try {
262
+ const profiles = listProfiles();
263
+ const current = getCurrentProfile();
264
+
265
+ if (profiles.length === 0) {
266
+ info('No profiles found');
267
+ return;
268
+ }
269
+
270
+ success(`${profiles.length} profile(s):`);
271
+ for (const p of profiles) {
272
+ if (p === current) {
273
+ info(` ${chalk.green('>')} ${p} ${chalk.gray('(current)')}`);
274
+ } else {
275
+ info(` ${p}`);
276
+ }
277
+ }
278
+ } catch (err) {
279
+ error(String(err));
280
+ process.exit(1);
281
+ }
282
+ });
283
+
284
+ profilesCmd
285
+ .command('current')
286
+ .description('Show current profile')
287
+ .action(() => {
288
+ const current = getCurrentProfile();
289
+ info(`Current profile: ${chalk.green(current)}`);
290
+ info(`Config directory: ${getConfigDir()}`);
291
+ });
292
+
293
+ profilesCmd
294
+ .command('create <name>')
295
+ .description('Create a new profile')
296
+ .action((name: string) => {
297
+ try {
298
+ createProfile(name);
299
+ success(`Profile "${name}" created`);
300
+ info(`Switch to it with: connect-notion profiles switch ${name}`);
301
+ } catch (err) {
302
+ error(String(err));
303
+ process.exit(1);
304
+ }
305
+ });
306
+
307
+ profilesCmd
308
+ .command('switch <name>')
309
+ .alias('use')
310
+ .description('Switch to a different profile')
311
+ .action((name: string) => {
312
+ try {
313
+ setCurrentProfile(name);
314
+ success(`Switched to profile "${name}"`);
315
+ info(`Config directory: ${getConfigDir()}`);
316
+
317
+ if (isAuthenticated()) {
318
+ const workspace = getWorkspaceName();
319
+ if (workspace) {
320
+ info(`Workspace: ${workspace}`);
321
+ }
322
+ } else {
323
+ warn('Profile not authenticated. Run "connect-notion auth login" or "connect-notion config set-key"');
324
+ }
325
+ } catch (err) {
326
+ error(String(err));
327
+ process.exit(1);
328
+ }
329
+ });
330
+
331
+ profilesCmd
332
+ .command('delete <name>')
333
+ .description('Delete a profile')
334
+ .action((name: string) => {
335
+ try {
336
+ deleteProfile(name);
337
+ success(`Profile "${name}" deleted`);
338
+ } catch (err) {
339
+ error(String(err));
340
+ process.exit(1);
341
+ }
342
+ });
343
+
344
+ // ============================================
345
+ // Databases Commands
346
+ // ============================================
347
+ const databasesCmd = program
348
+ .command('databases')
349
+ .description('Database management commands');
350
+
351
+ databasesCmd
352
+ .command('list')
353
+ .description('List all databases')
354
+ .option('-n, --max <number>', 'Maximum databases to return', '100')
355
+ .action(async (opts) => {
356
+ try {
357
+ const notion = requireAuth();
358
+ const result = await notion.databases.list(undefined, parseInt(opts.max));
359
+
360
+ if (!result.results || result.results.length === 0) {
361
+ info('No databases found');
362
+ return;
363
+ }
364
+
365
+ success(`Found ${result.results.length} databases:`);
366
+
367
+ const databases = result.results.map(db => ({
368
+ id: db.id,
369
+ title: extractTitle(db.title),
370
+ url: db.url,
371
+ archived: db.archived,
372
+ lastEdited: db.last_edited_time,
373
+ }));
374
+
375
+ print(databases, getFormat(databasesCmd));
376
+ } catch (err) {
377
+ error(String(err));
378
+ process.exit(1);
379
+ }
380
+ });
381
+
382
+ databasesCmd
383
+ .command('get <databaseId>')
384
+ .description('Get a database by ID')
385
+ .action(async (databaseId: string) => {
386
+ try {
387
+ const notion = requireAuth();
388
+ const database = await notion.databases.get(databaseId);
389
+ print(database, getFormat(databasesCmd));
390
+ } catch (err) {
391
+ error(String(err));
392
+ process.exit(1);
393
+ }
394
+ });
395
+
396
+ databasesCmd
397
+ .command('query <databaseId>')
398
+ .description('Query a database')
399
+ .option('-n, --max <number>', 'Maximum results to return', '100')
400
+ .option('--filter <json>', 'Filter as JSON string')
401
+ .action(async (databaseId: string, opts) => {
402
+ try {
403
+ const notion = requireAuth();
404
+ const options: Record<string, unknown> = {
405
+ page_size: parseInt(opts.max),
406
+ };
407
+
408
+ if (opts.filter) {
409
+ options.filter = JSON.parse(opts.filter);
410
+ }
411
+
412
+ const result = await notion.databases.query(databaseId, options);
413
+
414
+ if (!result.results || result.results.length === 0) {
415
+ info('No pages found in database');
416
+ return;
417
+ }
418
+
419
+ success(`Found ${result.results.length} pages:`);
420
+
421
+ const pages = result.results.map(page => ({
422
+ id: page.id,
423
+ url: page.url,
424
+ archived: page.archived,
425
+ lastEdited: page.last_edited_time,
426
+ }));
427
+
428
+ print(pages, getFormat(databasesCmd));
429
+ } catch (err) {
430
+ error(String(err));
431
+ process.exit(1);
432
+ }
433
+ });
434
+
435
+ databasesCmd
436
+ .command('create <parentPageId> <title>')
437
+ .description('Create a new database')
438
+ .action(async (parentPageId: string, title: string) => {
439
+ try {
440
+ const notion = requireAuth();
441
+ const database = await notion.databases.createSimple(parentPageId, title, {});
442
+ success(`Database "${title}" created!`);
443
+ info(`ID: ${database.id}`);
444
+ info(`URL: ${database.url}`);
445
+ } catch (err) {
446
+ error(String(err));
447
+ process.exit(1);
448
+ }
449
+ });
450
+
451
+ // ============================================
452
+ // Database Property Commands
453
+ // ============================================
454
+ const propsCmd = databasesCmd
455
+ .command('props')
456
+ .alias('properties')
457
+ .description('Manage database properties (columns)');
458
+
459
+ propsCmd
460
+ .command('list <databaseId>')
461
+ .description('List all properties in a database')
462
+ .action(async (databaseId: string) => {
463
+ try {
464
+ const notion = requireAuth();
465
+ const properties = await notion.databases.getProperties(databaseId);
466
+
467
+ success(`Properties in database:\n`);
468
+
469
+ const propList = Object.entries(properties).map(([name, config]) => {
470
+ let extra = '';
471
+ const propType = config.type;
472
+
473
+ // Show options for select/status/multi_select
474
+ if (propType === 'select' && (config as any).select?.options) {
475
+ const options = (config as any).select.options.map((o: any) => o.name);
476
+ if (options.length > 0) {
477
+ extra = ` [${options.join(', ')}]`;
478
+ }
479
+ } else if (propType === 'multi_select' && (config as any).multi_select?.options) {
480
+ const options = (config as any).multi_select.options.map((o: any) => o.name);
481
+ if (options.length > 0) {
482
+ extra = ` [${options.join(', ')}]`;
483
+ }
484
+ } else if (propType === 'status' && (config as any).status?.options) {
485
+ const options = (config as any).status.options.map((o: any) => o.name);
486
+ if (options.length > 0) {
487
+ extra = ` [${options.join(', ')}]`;
488
+ }
489
+ } else if (propType === 'formula' && (config as any).formula?.expression) {
490
+ extra = ` = ${(config as any).formula.expression}`;
491
+ } else if (propType === 'relation' && (config as any).relation?.database_id) {
492
+ extra = ` → ${(config as any).relation.database_id.substring(0, 8)}...`;
493
+ } else if (propType === 'rollup') {
494
+ const rollup = (config as any).rollup;
495
+ if (rollup) {
496
+ extra = ` (${rollup.function})`;
497
+ }
498
+ } else if (propType === 'number' && (config as any).number?.format) {
499
+ extra = ` (${(config as any).number.format})`;
500
+ }
501
+
502
+ return {
503
+ name,
504
+ type: propType,
505
+ id: config.id,
506
+ details: extra.trim(),
507
+ };
508
+ });
509
+
510
+ print(propList, getFormat(databasesCmd));
511
+ } catch (err) {
512
+ error(String(err));
513
+ process.exit(1);
514
+ }
515
+ });
516
+
517
+ propsCmd
518
+ .command('add <databaseId> <propertyName> <type>')
519
+ .description('Add a new property (column) to a database')
520
+ .option('-o, --options <options>', 'Comma-separated options for select/multi_select/status')
521
+ .option('--format <format>', 'Number format (number, percent, dollar, euro, etc.)')
522
+ .option('--formula <expression>', 'Formula expression')
523
+ .option('--relation <databaseId>', 'Related database ID for relation property')
524
+ .option('--rollup-relation <property>', 'Relation property name for rollup')
525
+ .option('--rollup-property <property>', 'Property to rollup from related database')
526
+ .option('--rollup-function <function>', 'Rollup function (count, sum, average, etc.)')
527
+ .action(async (databaseId: string, propertyName: string, type: string, opts) => {
528
+ try {
529
+ const notion = requireAuth();
530
+ const { DatabasesApi } = await import('../api/databases');
531
+
532
+ // Build property config based on type
533
+ let propertyConfig: Record<string, unknown>;
534
+
535
+ switch (type) {
536
+ case 'title':
537
+ propertyConfig = { title: {} };
538
+ break;
539
+ case 'rich_text':
540
+ case 'text':
541
+ propertyConfig = { rich_text: {} };
542
+ break;
543
+ case 'number':
544
+ propertyConfig = { number: { format: opts.format || 'number' } };
545
+ break;
546
+ case 'select':
547
+ propertyConfig = { select: {} };
548
+ if (opts.options) {
549
+ const options = opts.options.split(',').map((o: string) => ({ name: o.trim() }));
550
+ propertyConfig.select = { options };
551
+ }
552
+ break;
553
+ case 'multi_select':
554
+ propertyConfig = { multi_select: {} };
555
+ if (opts.options) {
556
+ const options = opts.options.split(',').map((o: string) => ({ name: o.trim() }));
557
+ propertyConfig.multi_select = { options };
558
+ }
559
+ break;
560
+ case 'status':
561
+ propertyConfig = { status: {} };
562
+ if (opts.options) {
563
+ const options = opts.options.split(',').map((o: string) => ({ name: o.trim() }));
564
+ propertyConfig.status = { options };
565
+ }
566
+ break;
567
+ case 'date':
568
+ propertyConfig = { date: {} };
569
+ break;
570
+ case 'people':
571
+ propertyConfig = { people: {} };
572
+ break;
573
+ case 'files':
574
+ propertyConfig = { files: {} };
575
+ break;
576
+ case 'checkbox':
577
+ propertyConfig = { checkbox: {} };
578
+ break;
579
+ case 'url':
580
+ propertyConfig = { url: {} };
581
+ break;
582
+ case 'email':
583
+ propertyConfig = { email: {} };
584
+ break;
585
+ case 'phone_number':
586
+ case 'phone':
587
+ propertyConfig = { phone_number: {} };
588
+ break;
589
+ case 'formula':
590
+ if (!opts.formula) {
591
+ error('Formula expression required. Use --formula <expression>');
592
+ process.exit(1);
593
+ }
594
+ propertyConfig = { formula: { expression: opts.formula } };
595
+ break;
596
+ case 'relation':
597
+ if (!opts.relation) {
598
+ error('Related database ID required. Use --relation <databaseId>');
599
+ process.exit(1);
600
+ }
601
+ propertyConfig = {
602
+ relation: {
603
+ database_id: opts.relation,
604
+ type: 'single_property',
605
+ single_property: {},
606
+ },
607
+ };
608
+ break;
609
+ case 'rollup':
610
+ if (!opts.rollupRelation || !opts.rollupProperty || !opts.rollupFunction) {
611
+ error('Rollup requires --rollup-relation, --rollup-property, and --rollup-function');
612
+ process.exit(1);
613
+ }
614
+ propertyConfig = {
615
+ rollup: {
616
+ relation_property_name: opts.rollupRelation,
617
+ rollup_property_name: opts.rollupProperty,
618
+ function: opts.rollupFunction,
619
+ },
620
+ };
621
+ break;
622
+ case 'created_time':
623
+ propertyConfig = { created_time: {} };
624
+ break;
625
+ case 'created_by':
626
+ propertyConfig = { created_by: {} };
627
+ break;
628
+ case 'last_edited_time':
629
+ propertyConfig = { last_edited_time: {} };
630
+ break;
631
+ case 'last_edited_by':
632
+ propertyConfig = { last_edited_by: {} };
633
+ break;
634
+ default:
635
+ error(`Unknown property type: ${type}`);
636
+ info('Valid types: title, rich_text, number, select, multi_select, status, date, people, files, checkbox, url, email, phone_number, formula, relation, rollup, created_time, created_by, last_edited_time, last_edited_by');
637
+ process.exit(1);
638
+ }
639
+
640
+ await notion.databases.addProperty(databaseId, propertyName, propertyConfig);
641
+ success(`Property "${propertyName}" (${type}) added to database`);
642
+ } catch (err) {
643
+ error(String(err));
644
+ process.exit(1);
645
+ }
646
+ });
647
+
648
+ propsCmd
649
+ .command('rename <databaseId> <oldName> <newName>')
650
+ .description('Rename a property (column) in a database')
651
+ .action(async (databaseId: string, oldName: string, newName: string) => {
652
+ try {
653
+ const notion = requireAuth();
654
+ await notion.databases.renameProperty(databaseId, oldName, newName);
655
+ success(`Property renamed from "${oldName}" to "${newName}"`);
656
+ } catch (err) {
657
+ error(String(err));
658
+ process.exit(1);
659
+ }
660
+ });
661
+
662
+ propsCmd
663
+ .command('delete <databaseId> <propertyName>')
664
+ .description('Delete a property (column) from a database')
665
+ .action(async (databaseId: string, propertyName: string) => {
666
+ try {
667
+ const notion = requireAuth();
668
+ await notion.databases.deleteProperty(databaseId, propertyName);
669
+ success(`Property "${propertyName}" deleted from database`);
670
+ } catch (err) {
671
+ error(String(err));
672
+ process.exit(1);
673
+ }
674
+ });
675
+
676
+ propsCmd
677
+ .command('add-option <databaseId> <propertyName> <optionName>')
678
+ .description('Add an option to a select/multi_select property')
679
+ .option('-c, --color <color>', 'Option color (default, gray, brown, orange, yellow, green, blue, purple, pink, red)')
680
+ .action(async (databaseId: string, propertyName: string, optionName: string, opts) => {
681
+ try {
682
+ const notion = requireAuth();
683
+ await notion.databases.addSelectOption(databaseId, propertyName, optionName, opts.color);
684
+ success(`Option "${optionName}" added to property "${propertyName}"`);
685
+ } catch (err) {
686
+ error(String(err));
687
+ process.exit(1);
688
+ }
689
+ });
690
+
691
+ propsCmd
692
+ .command('add-formula <databaseId> <propertyName> <expression>')
693
+ .description('Add a formula property to a database')
694
+ .action(async (databaseId: string, propertyName: string, expression: string) => {
695
+ try {
696
+ const notion = requireAuth();
697
+ await notion.databases.addFormulaProperty(databaseId, propertyName, expression);
698
+ success(`Formula property "${propertyName}" added`);
699
+ info(`Expression: ${expression}`);
700
+ } catch (err) {
701
+ error(String(err));
702
+ process.exit(1);
703
+ }
704
+ });
705
+
706
+ propsCmd
707
+ .command('add-relation <databaseId> <propertyName> <relatedDatabaseId>')
708
+ .description('Add a relation property linking to another database')
709
+ .option('--single', 'Create a single-property relation (no synced property in related database)')
710
+ .option('--synced-name <name>', 'Name of the synced property in the related database')
711
+ .action(async (databaseId: string, propertyName: string, relatedDatabaseId: string, opts) => {
712
+ try {
713
+ const notion = requireAuth();
714
+ await notion.databases.addRelationProperty(databaseId, propertyName, relatedDatabaseId, {
715
+ singleProperty: opts.single,
716
+ syncedPropertyName: opts.syncedName,
717
+ });
718
+ success(`Relation property "${propertyName}" added`);
719
+ info(`Related database: ${relatedDatabaseId}`);
720
+ } catch (err) {
721
+ error(String(err));
722
+ process.exit(1);
723
+ }
724
+ });
725
+
726
+ propsCmd
727
+ .command('add-rollup <databaseId> <propertyName>')
728
+ .description('Add a rollup property based on a relation')
729
+ .requiredOption('--relation <property>', 'Name of the relation property')
730
+ .requiredOption('--property <property>', 'Name of the property to rollup from related database')
731
+ .requiredOption('--function <function>', 'Rollup function (count, sum, average, min, max, etc.)')
732
+ .action(async (databaseId: string, propertyName: string, opts) => {
733
+ try {
734
+ const notion = requireAuth();
735
+ await notion.databases.addRollupProperty(
736
+ databaseId,
737
+ propertyName,
738
+ opts.relation,
739
+ opts.property,
740
+ opts.function
741
+ );
742
+ success(`Rollup property "${propertyName}" added`);
743
+ info(`Relation: ${opts.relation} → ${opts.property} (${opts.function})`);
744
+ } catch (err) {
745
+ error(String(err));
746
+ process.exit(1);
747
+ }
748
+ });
749
+
750
+ // ============================================
751
+ // Pages Commands
752
+ // ============================================
753
+ const pagesCmd = program
754
+ .command('pages')
755
+ .description('Page management commands');
756
+
757
+ pagesCmd
758
+ .command('list')
759
+ .description('List all pages')
760
+ .option('-n, --max <number>', 'Maximum pages to return', '100')
761
+ .action(async (opts) => {
762
+ try {
763
+ const notion = requireAuth();
764
+ const result = await notion.pages.list(undefined, parseInt(opts.max));
765
+
766
+ if (!result.results || result.results.length === 0) {
767
+ info('No pages found');
768
+ return;
769
+ }
770
+
771
+ success(`Found ${result.results.length} pages:`);
772
+
773
+ const pages = result.results.map(page => ({
774
+ id: page.id,
775
+ url: page.url,
776
+ archived: page.archived,
777
+ lastEdited: page.last_edited_time,
778
+ }));
779
+
780
+ print(pages, getFormat(pagesCmd));
781
+ } catch (err) {
782
+ error(String(err));
783
+ process.exit(1);
784
+ }
785
+ });
786
+
787
+ pagesCmd
788
+ .command('get <pageId>')
789
+ .description('Get a page by ID')
790
+ .action(async (pageId: string) => {
791
+ try {
792
+ const notion = requireAuth();
793
+ const page = await notion.pages.get(pageId);
794
+ print(page, getFormat(pagesCmd));
795
+ } catch (err) {
796
+ error(String(err));
797
+ process.exit(1);
798
+ }
799
+ });
800
+
801
+ pagesCmd
802
+ .command('create <parentPageId> <title>')
803
+ .description('Create a new page')
804
+ .option('-c, --content <content>', 'Page content (plain text)')
805
+ .action(async (parentPageId: string, title: string, opts) => {
806
+ try {
807
+ const notion = requireAuth();
808
+ const page = await notion.pages.createSimple(parentPageId, title, opts.content);
809
+ success(`Page "${title}" created!`);
810
+ info(`ID: ${page.id}`);
811
+ info(`URL: ${page.url}`);
812
+ } catch (err) {
813
+ error(String(err));
814
+ process.exit(1);
815
+ }
816
+ });
817
+
818
+ pagesCmd
819
+ .command('update <pageId>')
820
+ .description('Update a page')
821
+ .option('--title <title>', 'New title')
822
+ .option('--icon <emoji>', 'Icon emoji')
823
+ .option('--cover <url>', 'Cover image URL')
824
+ .option('--archive', 'Archive the page')
825
+ .option('--unarchive', 'Unarchive the page')
826
+ .action(async (pageId: string, opts) => {
827
+ try {
828
+ const notion = requireAuth();
829
+
830
+ if (opts.title) {
831
+ await notion.pages.updateTitle(pageId, opts.title);
832
+ success(`Title updated to "${opts.title}"`);
833
+ }
834
+
835
+ if (opts.icon) {
836
+ await notion.pages.setIcon(pageId, opts.icon);
837
+ success(`Icon set to ${opts.icon}`);
838
+ }
839
+
840
+ if (opts.cover) {
841
+ await notion.pages.setCover(pageId, opts.cover);
842
+ success('Cover image updated');
843
+ }
844
+
845
+ if (opts.archive) {
846
+ await notion.pages.archive(pageId);
847
+ success('Page archived');
848
+ }
849
+
850
+ if (opts.unarchive) {
851
+ await notion.pages.unarchive(pageId);
852
+ success('Page unarchived');
853
+ }
854
+
855
+ if (!opts.title && !opts.icon && !opts.cover && !opts.archive && !opts.unarchive) {
856
+ info('No updates specified. Use --title, --icon, --cover, --archive, or --unarchive');
857
+ }
858
+ } catch (err) {
859
+ error(String(err));
860
+ process.exit(1);
861
+ }
862
+ });
863
+
864
+ pagesCmd
865
+ .command('set-property <pageId> <propertyName> <value>')
866
+ .description('Set a property value on a page (auto-detects type from database schema)')
867
+ .option('-t, --type <type>', 'Property type (select, multi_select, status, checkbox, number, url, email, phone, text, date)')
868
+ .action(async (pageId: string, propertyName: string, value: string, opts) => {
869
+ try {
870
+ const notion = requireAuth();
871
+
872
+ // If type is specified, use it directly
873
+ if (opts.type) {
874
+ let result;
875
+ switch (opts.type) {
876
+ case 'select':
877
+ result = await notion.pages.setSelect(pageId, propertyName, value);
878
+ break;
879
+ case 'multi_select':
880
+ result = await notion.pages.setMultiSelect(pageId, propertyName, value.split(',').map(v => v.trim()));
881
+ break;
882
+ case 'status':
883
+ result = await notion.pages.setStatus(pageId, propertyName, value);
884
+ break;
885
+ case 'checkbox':
886
+ result = await notion.pages.setCheckbox(pageId, propertyName, value.toLowerCase() === 'true');
887
+ break;
888
+ case 'number':
889
+ result = await notion.pages.setNumber(pageId, propertyName, parseFloat(value));
890
+ break;
891
+ case 'url':
892
+ result = await notion.pages.setUrl(pageId, propertyName, value);
893
+ break;
894
+ case 'email':
895
+ result = await notion.pages.setEmail(pageId, propertyName, value);
896
+ break;
897
+ case 'phone':
898
+ result = await notion.pages.setPhone(pageId, propertyName, value);
899
+ break;
900
+ case 'text':
901
+ result = await notion.pages.setRichText(pageId, propertyName, value);
902
+ break;
903
+ case 'date':
904
+ result = await notion.pages.setDate(pageId, propertyName, value);
905
+ break;
906
+ default:
907
+ error(`Unknown property type: ${opts.type}`);
908
+ info('Valid types: select, multi_select, status, checkbox, number, url, email, phone, text, date');
909
+ process.exit(1);
910
+ }
911
+ success(`Property "${propertyName}" set to "${value}"`);
912
+ return;
913
+ }
914
+
915
+ // Auto-detect type from page's current property
916
+ const page = await notion.pages.get(pageId);
917
+ const property = page.properties[propertyName];
918
+
919
+ if (!property) {
920
+ error(`Property "${propertyName}" not found on page`);
921
+ info('Available properties: ' + Object.keys(page.properties).join(', '));
922
+ process.exit(1);
923
+ }
924
+
925
+ let result;
926
+ switch (property.type) {
927
+ case 'select':
928
+ result = await notion.pages.setSelect(pageId, propertyName, value);
929
+ break;
930
+ case 'multi_select':
931
+ result = await notion.pages.setMultiSelect(pageId, propertyName, value.split(',').map(v => v.trim()));
932
+ break;
933
+ case 'status':
934
+ result = await notion.pages.setStatus(pageId, propertyName, value);
935
+ break;
936
+ case 'checkbox':
937
+ result = await notion.pages.setCheckbox(pageId, propertyName, value.toLowerCase() === 'true');
938
+ break;
939
+ case 'number':
940
+ result = await notion.pages.setNumber(pageId, propertyName, parseFloat(value));
941
+ break;
942
+ case 'url':
943
+ result = await notion.pages.setUrl(pageId, propertyName, value);
944
+ break;
945
+ case 'email':
946
+ result = await notion.pages.setEmail(pageId, propertyName, value);
947
+ break;
948
+ case 'phone_number':
949
+ result = await notion.pages.setPhone(pageId, propertyName, value);
950
+ break;
951
+ case 'rich_text':
952
+ result = await notion.pages.setRichText(pageId, propertyName, value);
953
+ break;
954
+ case 'date':
955
+ result = await notion.pages.setDate(pageId, propertyName, value);
956
+ break;
957
+ default:
958
+ error(`Property type "${property.type}" is not supported for direct updates`);
959
+ info('Supported types: select, multi_select, status, checkbox, number, url, email, phone_number, rich_text, date');
960
+ process.exit(1);
961
+ }
962
+
963
+ success(`Property "${propertyName}" set to "${value}"`);
964
+ } catch (err) {
965
+ error(String(err));
966
+ process.exit(1);
967
+ }
968
+ });
969
+
970
+ pagesCmd
971
+ .command('delete <pageId>')
972
+ .description('Delete (archive) a page')
973
+ .action(async (pageId: string) => {
974
+ try {
975
+ const notion = requireAuth();
976
+ await notion.pages.delete(pageId);
977
+ success(`Page ${pageId} deleted (archived)`);
978
+ } catch (err) {
979
+ error(String(err));
980
+ process.exit(1);
981
+ }
982
+ });
983
+
984
+ // ============================================
985
+ // Blocks Commands
986
+ // ============================================
987
+ const blocksCmd = program
988
+ .command('blocks')
989
+ .description('Block management commands');
990
+
991
+ blocksCmd
992
+ .command('list <blockId>')
993
+ .description('List children of a block or page')
994
+ .option('-n, --max <number>', 'Maximum blocks to return', '100')
995
+ .action(async (blockId: string, opts) => {
996
+ try {
997
+ const notion = requireAuth();
998
+ const result = await notion.blocks.list(blockId, undefined, parseInt(opts.max));
999
+
1000
+ if (!result.results || result.results.length === 0) {
1001
+ info('No blocks found');
1002
+ return;
1003
+ }
1004
+
1005
+ success(`Found ${result.results.length} blocks:`);
1006
+
1007
+ const blocks = result.results.map(block => ({
1008
+ id: block.id,
1009
+ type: block.type,
1010
+ hasChildren: block.has_children,
1011
+ archived: block.archived,
1012
+ }));
1013
+
1014
+ print(blocks, getFormat(blocksCmd));
1015
+ } catch (err) {
1016
+ error(String(err));
1017
+ process.exit(1);
1018
+ }
1019
+ });
1020
+
1021
+ blocksCmd
1022
+ .command('get <blockId>')
1023
+ .description('Get a block by ID')
1024
+ .action(async (blockId: string) => {
1025
+ try {
1026
+ const notion = requireAuth();
1027
+ const block = await notion.blocks.get(blockId);
1028
+ print(block, getFormat(blocksCmd));
1029
+ } catch (err) {
1030
+ error(String(err));
1031
+ process.exit(1);
1032
+ }
1033
+ });
1034
+
1035
+ blocksCmd
1036
+ .command('children <blockId>')
1037
+ .description('Get all children of a block (handles pagination)')
1038
+ .action(async (blockId: string) => {
1039
+ try {
1040
+ const notion = requireAuth();
1041
+ const blocks = await notion.blocks.getAllChildren(blockId);
1042
+
1043
+ if (blocks.length === 0) {
1044
+ info('No blocks found');
1045
+ return;
1046
+ }
1047
+
1048
+ success(`Found ${blocks.length} blocks:`);
1049
+ print(blocks, getFormat(blocksCmd));
1050
+ } catch (err) {
1051
+ error(String(err));
1052
+ process.exit(1);
1053
+ }
1054
+ });
1055
+
1056
+ blocksCmd
1057
+ .command('create <parentBlockId> <type> <content>')
1058
+ .description('Create a block (types: paragraph, heading_1, heading_2, heading_3, bulleted_list_item, numbered_list_item, to_do, quote, code, callout, divider, bookmark)')
1059
+ .option('--language <lang>', 'Language for code blocks', 'plain text')
1060
+ .option('--checked', 'Checked state for to-do blocks')
1061
+ .action(async (parentBlockId: string, type: string, content: string, opts) => {
1062
+ try {
1063
+ const notion = requireAuth();
1064
+ let block;
1065
+
1066
+ switch (type) {
1067
+ case 'paragraph':
1068
+ block = await notion.blocks.appendParagraph(parentBlockId, content);
1069
+ break;
1070
+ case 'heading_1':
1071
+ block = await notion.blocks.appendHeading(parentBlockId, 1, content);
1072
+ break;
1073
+ case 'heading_2':
1074
+ block = await notion.blocks.appendHeading(parentBlockId, 2, content);
1075
+ break;
1076
+ case 'heading_3':
1077
+ block = await notion.blocks.appendHeading(parentBlockId, 3, content);
1078
+ break;
1079
+ case 'bulleted_list_item':
1080
+ block = await notion.blocks.appendBulletedListItem(parentBlockId, content);
1081
+ break;
1082
+ case 'numbered_list_item':
1083
+ block = await notion.blocks.appendNumberedListItem(parentBlockId, content);
1084
+ break;
1085
+ case 'to_do':
1086
+ block = await notion.blocks.appendToDo(parentBlockId, content, opts.checked || false);
1087
+ break;
1088
+ case 'quote':
1089
+ block = await notion.blocks.appendQuote(parentBlockId, content);
1090
+ break;
1091
+ case 'code':
1092
+ block = await notion.blocks.appendCode(parentBlockId, content, opts.language);
1093
+ break;
1094
+ case 'callout':
1095
+ block = await notion.blocks.appendCallout(parentBlockId, content);
1096
+ break;
1097
+ case 'divider':
1098
+ block = await notion.blocks.appendDivider(parentBlockId);
1099
+ break;
1100
+ case 'bookmark':
1101
+ block = await notion.blocks.appendBookmark(parentBlockId, content);
1102
+ break;
1103
+ default:
1104
+ error(`Unknown block type: ${type}`);
1105
+ process.exit(1);
1106
+ }
1107
+
1108
+ success(`Block created!`);
1109
+ info(`ID: ${block.id}`);
1110
+ info(`Type: ${block.type}`);
1111
+ } catch (err) {
1112
+ error(String(err));
1113
+ process.exit(1);
1114
+ }
1115
+ });
1116
+
1117
+ blocksCmd
1118
+ .command('update <blockId> <content>')
1119
+ .description('Update a paragraph block content')
1120
+ .action(async (blockId: string, content: string) => {
1121
+ try {
1122
+ const notion = requireAuth();
1123
+ await notion.blocks.updateParagraph(blockId, content);
1124
+ success(`Block ${blockId} updated`);
1125
+ } catch (err) {
1126
+ error(String(err));
1127
+ process.exit(1);
1128
+ }
1129
+ });
1130
+
1131
+ blocksCmd
1132
+ .command('delete <blockId>')
1133
+ .description('Delete a block')
1134
+ .action(async (blockId: string) => {
1135
+ try {
1136
+ const notion = requireAuth();
1137
+ await notion.blocks.delete(blockId);
1138
+ success(`Block ${blockId} deleted`);
1139
+ } catch (err) {
1140
+ error(String(err));
1141
+ process.exit(1);
1142
+ }
1143
+ });
1144
+
1145
+ // ============================================
1146
+ // Users Commands
1147
+ // ============================================
1148
+ const usersCmd = program
1149
+ .command('users')
1150
+ .description('User management commands');
1151
+
1152
+ usersCmd
1153
+ .command('list')
1154
+ .description('List all users')
1155
+ .option('-n, --max <number>', 'Maximum users to return', '100')
1156
+ .action(async (opts) => {
1157
+ try {
1158
+ const notion = requireAuth();
1159
+ const result = await notion.users.list(undefined, parseInt(opts.max));
1160
+
1161
+ if (!result.results || result.results.length === 0) {
1162
+ info('No users found');
1163
+ return;
1164
+ }
1165
+
1166
+ success(`Found ${result.results.length} users:`);
1167
+
1168
+ const users = result.results.map(user => ({
1169
+ id: user.id,
1170
+ name: user.name,
1171
+ type: user.type,
1172
+ email: user.person?.email || '-',
1173
+ }));
1174
+
1175
+ print(users, getFormat(usersCmd));
1176
+ } catch (err) {
1177
+ error(String(err));
1178
+ process.exit(1);
1179
+ }
1180
+ });
1181
+
1182
+ usersCmd
1183
+ .command('get <userId>')
1184
+ .description('Get a user by ID')
1185
+ .action(async (userId: string) => {
1186
+ try {
1187
+ const notion = requireAuth();
1188
+ const user = await notion.users.get(userId);
1189
+ print(user, getFormat(usersCmd));
1190
+ } catch (err) {
1191
+ error(String(err));
1192
+ process.exit(1);
1193
+ }
1194
+ });
1195
+
1196
+ usersCmd
1197
+ .command('me')
1198
+ .description('Get the authenticated bot user')
1199
+ .action(async () => {
1200
+ try {
1201
+ const notion = requireAuth();
1202
+ const user = await notion.users.me();
1203
+ print(user, getFormat(usersCmd));
1204
+ } catch (err) {
1205
+ error(String(err));
1206
+ process.exit(1);
1207
+ }
1208
+ });
1209
+
1210
+ // ============================================
1211
+ // Search Command
1212
+ // ============================================
1213
+ program
1214
+ .command('search <query>')
1215
+ .description('Search pages and databases')
1216
+ .option('-n, --max <number>', 'Maximum results to return', '100')
1217
+ .option('--pages', 'Search only pages')
1218
+ .option('--databases', 'Search only databases')
1219
+ .action(async (query: string, opts) => {
1220
+ try {
1221
+ const notion = requireAuth();
1222
+ let result;
1223
+
1224
+ if (opts.pages) {
1225
+ result = await notion.search.pages(query, undefined, parseInt(opts.max));
1226
+ } else if (opts.databases) {
1227
+ result = await notion.search.databases(query, undefined, parseInt(opts.max));
1228
+ } else {
1229
+ result = await notion.search.query(query, undefined, parseInt(opts.max));
1230
+ }
1231
+
1232
+ if (!result.results || result.results.length === 0) {
1233
+ info(`No results found for "${query}"`);
1234
+ return;
1235
+ }
1236
+
1237
+ success(`Found ${result.results.length} results:`);
1238
+
1239
+ const results = result.results.map(item => {
1240
+ const isPage = item.object === 'page';
1241
+ return {
1242
+ id: item.id,
1243
+ type: item.object,
1244
+ url: item.url,
1245
+ title: isPage ? '-' : extractTitle((item as any).title || []),
1246
+ lastEdited: item.last_edited_time,
1247
+ };
1248
+ });
1249
+
1250
+ print(results, getFormat(program));
1251
+ } catch (err) {
1252
+ error(String(err));
1253
+ process.exit(1);
1254
+ }
1255
+ });
1256
+
1257
+ // ============================================
1258
+ // Comments Commands
1259
+ // ============================================
1260
+ const commentsCmd = program
1261
+ .command('comments')
1262
+ .description('Comment management commands');
1263
+
1264
+ commentsCmd
1265
+ .command('list <blockId>')
1266
+ .description('List comments on a block or page')
1267
+ .option('-n, --max <number>', 'Maximum comments to return', '100')
1268
+ .action(async (blockId: string, opts) => {
1269
+ try {
1270
+ const notion = requireAuth();
1271
+ const result = await notion.comments.list(blockId, undefined, parseInt(opts.max));
1272
+
1273
+ if (!result.results || result.results.length === 0) {
1274
+ info('No comments found');
1275
+ return;
1276
+ }
1277
+
1278
+ success(`Found ${result.results.length} comments:`);
1279
+
1280
+ const comments = result.results.map(comment => ({
1281
+ id: comment.id,
1282
+ discussionId: comment.discussion_id,
1283
+ text: notion.comments.getPlainText(comment),
1284
+ createdTime: comment.created_time,
1285
+ createdBy: comment.created_by.name || comment.created_by.id,
1286
+ }));
1287
+
1288
+ print(comments, getFormat(commentsCmd));
1289
+ } catch (err) {
1290
+ error(String(err));
1291
+ process.exit(1);
1292
+ }
1293
+ });
1294
+
1295
+ commentsCmd
1296
+ .command('create <pageId> <text>')
1297
+ .description('Create a comment on a page')
1298
+ .action(async (pageId: string, text: string) => {
1299
+ try {
1300
+ const notion = requireAuth();
1301
+ const comment = await notion.comments.createSimple(pageId, text);
1302
+ success('Comment created!');
1303
+ info(`ID: ${comment.id}`);
1304
+ info(`Discussion ID: ${comment.discussion_id}`);
1305
+ } catch (err) {
1306
+ error(String(err));
1307
+ process.exit(1);
1308
+ }
1309
+ });
1310
+
1311
+ // ============================================
1312
+ // Export Commands
1313
+ // ============================================
1314
+ const exportCmd = program
1315
+ .command('export')
1316
+ .description('Export Notion content to Markdown');
1317
+
1318
+ exportCmd
1319
+ .command('page <pageId>')
1320
+ .description('Export a page to Markdown')
1321
+ .option('-o, --output <dir>', 'Output directory')
1322
+ .option('-m, --metadata', 'Include frontmatter metadata')
1323
+ .option('-c, --children', 'Include child pages')
1324
+ .option('-r, --recursive', 'Recursively export all nested pages')
1325
+ .action(async (pageId: string, opts) => {
1326
+ try {
1327
+ const notion = requireAuth();
1328
+ info(`Exporting page ${pageId}...`);
1329
+
1330
+ const result = await notion.export.exportPage(pageId, {
1331
+ outputDir: opts.output,
1332
+ includeMetadata: opts.metadata,
1333
+ includeChildPages: opts.children,
1334
+ recursive: opts.recursive,
1335
+ });
1336
+
1337
+ success(`Exported: ${result.title}`);
1338
+ info(`File: ${result.filePath}`);
1339
+
1340
+ if (result.childPages && result.childPages.length > 0) {
1341
+ info(`Child pages exported: ${result.childPages.length}`);
1342
+ for (const child of result.childPages) {
1343
+ info(` - ${child.title}: ${child.filePath}`);
1344
+ }
1345
+ }
1346
+ } catch (err) {
1347
+ error(String(err));
1348
+ process.exit(1);
1349
+ }
1350
+ });
1351
+
1352
+ exportCmd
1353
+ .command('database <databaseId>')
1354
+ .description('Export all pages in a database to Markdown')
1355
+ .option('-o, --output <dir>', 'Output directory')
1356
+ .option('-m, --metadata', 'Include frontmatter metadata')
1357
+ .option('-c, --children', 'Include child pages')
1358
+ .option('-r, --recursive', 'Recursively export all nested pages')
1359
+ .action(async (databaseId: string, opts) => {
1360
+ try {
1361
+ const notion = requireAuth();
1362
+ info(`Exporting database ${databaseId}...`);
1363
+
1364
+ const results = await notion.export.exportDatabase(databaseId, {
1365
+ outputDir: opts.output,
1366
+ includeMetadata: opts.metadata,
1367
+ includeChildPages: opts.children,
1368
+ recursive: opts.recursive,
1369
+ });
1370
+
1371
+ success(`Exported ${results.length} pages from database`);
1372
+ for (const result of results) {
1373
+ info(` - ${result.title}: ${result.filePath}`);
1374
+ }
1375
+ } catch (err) {
1376
+ error(String(err));
1377
+ process.exit(1);
1378
+ }
1379
+ });
1380
+
1381
+ exportCmd
1382
+ .command('workspace')
1383
+ .description('Export entire workspace to Markdown')
1384
+ .option('-o, --output <dir>', 'Output directory')
1385
+ .option('-m, --metadata', 'Include frontmatter metadata')
1386
+ .action(async (opts) => {
1387
+ try {
1388
+ const notion = requireAuth();
1389
+ info('Exporting workspace...');
1390
+ info('This may take a while for large workspaces.');
1391
+
1392
+ const results = await notion.export.exportWorkspace({
1393
+ outputDir: opts.output,
1394
+ includeMetadata: opts.metadata,
1395
+ recursive: true,
1396
+ });
1397
+
1398
+ success(`Exported ${results.length} top-level pages`);
1399
+ let totalPages = results.length;
1400
+ const countChildren = (items: typeof results): number => {
1401
+ let count = 0;
1402
+ for (const item of items) {
1403
+ if (item.childPages) {
1404
+ count += item.childPages.length;
1405
+ count += countChildren(item.childPages);
1406
+ }
1407
+ }
1408
+ return count;
1409
+ };
1410
+ totalPages += countChildren(results);
1411
+ info(`Total pages exported: ${totalPages}`);
1412
+ } catch (err) {
1413
+ error(String(err));
1414
+ process.exit(1);
1415
+ }
1416
+ });
1417
+
1418
+ // ============================================
1419
+ // Bulk Operations Commands
1420
+ // ============================================
1421
+ import { FilterParser } from '../api/bulk';
1422
+
1423
+ const bulkCmd = program
1424
+ .command('bulk')
1425
+ .description('Bulk operations on pages');
1426
+
1427
+ bulkCmd
1428
+ .command('update')
1429
+ .description('Bulk update properties on multiple pages')
1430
+ .option('-d, --database <id>', 'Database ID to query pages from')
1431
+ .option('-w, --where <filter>', 'Filter condition (e.g., "Type=App", "Status!=Done")')
1432
+ .option('-i, --ids <ids>', 'Comma-separated page IDs to update')
1433
+ .option('-s, --set <update>', 'Property update (e.g., "Type=Platform"). Can be used multiple times', (val, prev: string[]) => [...prev, val], [] as string[])
1434
+ .option('-c, --concurrency <n>', 'Max concurrent API calls', '3')
1435
+ .option('--dry-run', 'Preview changes without applying')
1436
+ .option('-y, --yes', 'Skip confirmation prompt')
1437
+ .action(async (opts) => {
1438
+ try {
1439
+ const notion = requireAuth();
1440
+
1441
+ // Validate inputs
1442
+ if (!opts.database && !opts.ids) {
1443
+ error('Either --database or --ids must be specified');
1444
+ process.exit(1);
1445
+ }
1446
+
1447
+ if (!opts.set || opts.set.length === 0) {
1448
+ error('At least one --set option is required');
1449
+ info('Example: --set "Type=Platform" --set "Status=In progress"');
1450
+ process.exit(1);
1451
+ }
1452
+
1453
+ // Parse updates
1454
+ const updates = opts.set.map((s: string) => FilterParser.parseUpdate(s));
1455
+
1456
+ // Get page IDs if specified
1457
+ const pageIds = opts.ids ? opts.ids.split(',').map((id: string) => id.trim()) : undefined;
1458
+
1459
+ // Preview first
1460
+ info('Fetching pages...');
1461
+ const preview = await notion.bulk.preview({
1462
+ databaseId: opts.database,
1463
+ where: opts.where,
1464
+ pageIds,
1465
+ updates,
1466
+ });
1467
+
1468
+ if (preview.pages.length === 0) {
1469
+ warn('No pages match the filter criteria');
1470
+ return;
1471
+ }
1472
+
1473
+ // Show preview
1474
+ info(`\nFound ${chalk.bold(preview.pages.length)} pages to update:\n`);
1475
+
1476
+ // Show first 10 pages
1477
+ const displayPages = preview.pages.slice(0, 10);
1478
+ for (const page of displayPages) {
1479
+ const title = page.title || page.id;
1480
+ const currentVals = Object.entries(page.currentValues)
1481
+ .map(([k, v]) => `${k}: ${chalk.yellow(String(v))}`)
1482
+ .join(', ');
1483
+ info(` ${chalk.cyan(title)}`);
1484
+ if (currentVals) {
1485
+ info(` Current: ${currentVals}`);
1486
+ }
1487
+ }
1488
+
1489
+ if (preview.pages.length > 10) {
1490
+ info(` ... and ${preview.pages.length - 10} more pages`);
1491
+ }
1492
+
1493
+ info(`\nUpdates to apply:`);
1494
+ for (const update of updates) {
1495
+ info(` ${update.property} → ${chalk.green(update.value)}`);
1496
+ }
1497
+
1498
+ if (opts.dryRun) {
1499
+ warn('\n[DRY RUN] No changes will be made');
1500
+ return;
1501
+ }
1502
+
1503
+ // Confirm unless --yes
1504
+ if (!opts.yes) {
1505
+ info(`\n${chalk.yellow('This will update')} ${chalk.bold(preview.pages.length)} ${chalk.yellow('pages.')}`);
1506
+ info('Use --yes to skip this confirmation, or --dry-run to preview.\n');
1507
+
1508
+ // Simple confirmation - wait for user
1509
+ const readline = await import('readline');
1510
+ const rl = readline.createInterface({
1511
+ input: process.stdin,
1512
+ output: process.stdout,
1513
+ });
1514
+
1515
+ const answer = await new Promise<string>((resolve) => {
1516
+ rl.question('Proceed? [y/N] ', resolve);
1517
+ });
1518
+ rl.close();
1519
+
1520
+ if (answer.toLowerCase() !== 'y' && answer.toLowerCase() !== 'yes') {
1521
+ info('Cancelled');
1522
+ return;
1523
+ }
1524
+ }
1525
+
1526
+ // Execute bulk update
1527
+ info('\nUpdating pages...');
1528
+
1529
+ let lastProgressLog = 0;
1530
+ const result = await notion.bulk.update({
1531
+ databaseId: opts.database,
1532
+ where: opts.where,
1533
+ pageIds,
1534
+ updates,
1535
+ concurrency: parseInt(opts.concurrency),
1536
+ dryRun: false,
1537
+ onProgress: (current, total) => {
1538
+ // Log progress every 10% or every 5 items
1539
+ const percent = Math.floor((current / total) * 100);
1540
+ if (percent >= lastProgressLog + 10 || current === total) {
1541
+ info(` Progress: ${current}/${total} (${percent}%)`);
1542
+ lastProgressLog = percent;
1543
+ }
1544
+ },
1545
+ onError: (err, page) => {
1546
+ warn(` Failed to update ${page.id}: ${err.message}`);
1547
+ },
1548
+ });
1549
+
1550
+ // Summary
1551
+ info('');
1552
+ success(`Bulk update complete!`);
1553
+ info(` Total: ${result.total}`);
1554
+ info(` Success: ${chalk.green(result.success)}`);
1555
+ if (result.failed > 0) {
1556
+ info(` Failed: ${chalk.red(result.failed)}`);
1557
+ }
1558
+
1559
+ if (result.errors.length > 0 && result.errors.length <= 5) {
1560
+ warn('\nErrors:');
1561
+ for (const err of result.errors) {
1562
+ warn(` ${err.pageId}: ${err.error}`);
1563
+ }
1564
+ }
1565
+ } catch (err) {
1566
+ error(String(err));
1567
+ process.exit(1);
1568
+ }
1569
+ });
1570
+
1571
+ bulkCmd
1572
+ .command('preview')
1573
+ .description('Preview pages that would be affected by a bulk update')
1574
+ .option('-d, --database <id>', 'Database ID to query pages from')
1575
+ .option('-w, --where <filter>', 'Filter condition (e.g., "Type=App")')
1576
+ .option('-i, --ids <ids>', 'Comma-separated page IDs')
1577
+ .option('-p, --property <name>', 'Show specific property values. Can be used multiple times', (val, prev: string[]) => [...prev, val], [] as string[])
1578
+ .action(async (opts) => {
1579
+ try {
1580
+ const notion = requireAuth();
1581
+
1582
+ if (!opts.database && !opts.ids) {
1583
+ error('Either --database or --ids must be specified');
1584
+ process.exit(1);
1585
+ }
1586
+
1587
+ const pageIds = opts.ids ? opts.ids.split(',').map((id: string) => id.trim()) : undefined;
1588
+
1589
+ // Create dummy updates to show property values
1590
+ const updates = (opts.property || []).map((p: string) => ({ property: p, value: '' }));
1591
+
1592
+ info('Fetching pages...');
1593
+ const preview = await notion.bulk.preview({
1594
+ databaseId: opts.database,
1595
+ where: opts.where,
1596
+ pageIds,
1597
+ updates,
1598
+ });
1599
+
1600
+ if (preview.pages.length === 0) {
1601
+ warn('No pages match the filter criteria');
1602
+ return;
1603
+ }
1604
+
1605
+ success(`Found ${preview.pages.length} pages:\n`);
1606
+
1607
+ for (const page of preview.pages) {
1608
+ const title = page.title || page.id;
1609
+ info(`${chalk.cyan(title)} (${chalk.gray(page.id)})`);
1610
+
1611
+ if (Object.keys(page.currentValues).length > 0) {
1612
+ for (const [key, value] of Object.entries(page.currentValues)) {
1613
+ info(` ${key}: ${chalk.yellow(String(value))}`);
1614
+ }
1615
+ }
1616
+ }
1617
+ } catch (err) {
1618
+ error(String(err));
1619
+ process.exit(1);
1620
+ }
1621
+ });
1622
+
1623
+ bulkCmd
1624
+ .command('schema <databaseId>')
1625
+ .description('Show database schema (property names and types)')
1626
+ .action(async (databaseId: string) => {
1627
+ try {
1628
+ const notion = requireAuth();
1629
+ const db = await notion.bulk.getSchema(databaseId);
1630
+
1631
+ const title = db.title.map(t => t.plain_text).join('');
1632
+ success(`Database: ${title}\n`);
1633
+
1634
+ info('Properties:');
1635
+ for (const [name, config] of Object.entries(db.properties)) {
1636
+ const type = config.type;
1637
+ let extra = '';
1638
+
1639
+ // Show options for select/status
1640
+ if (type === 'select' && config.select) {
1641
+ const options = (config.select as { options: Array<{ name: string }> }).options;
1642
+ if (options && options.length > 0) {
1643
+ extra = ` [${options.map(o => o.name).join(', ')}]`;
1644
+ }
1645
+ } else if (type === 'status' && config.status) {
1646
+ const options = (config.status as { options: Array<{ name: string }> }).options;
1647
+ if (options && options.length > 0) {
1648
+ extra = ` [${options.map(o => o.name).join(', ')}]`;
1649
+ }
1650
+ } else if (type === 'multi_select' && config.multi_select) {
1651
+ const options = (config.multi_select as { options: Array<{ name: string }> }).options;
1652
+ if (options && options.length > 0) {
1653
+ extra = ` [${options.map(o => o.name).join(', ')}]`;
1654
+ }
1655
+ }
1656
+
1657
+ info(` ${chalk.cyan(name)}: ${chalk.yellow(type)}${chalk.gray(extra)}`);
1658
+ }
1659
+ } catch (err) {
1660
+ error(String(err));
1661
+ process.exit(1);
1662
+ }
1663
+ });
1664
+
1665
+ // Parse and execute
1666
+ program.parse();