@hasna/connectors 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (411) hide show
  1. package/bin/index.js +181 -6
  2. package/bin/mcp.js +162 -1
  3. package/bin/serve.js +180 -5
  4. package/connectors/connect-activecampaign/.env.example +11 -0
  5. package/connectors/connect-activecampaign/CLAUDE.md +68 -0
  6. package/connectors/connect-activecampaign/README.md +193 -0
  7. package/connectors/connect-activecampaign/package.json +53 -0
  8. package/connectors/connect-activecampaign/scripts/release.ts +179 -0
  9. package/connectors/connect-activecampaign/src/api/accounts.ts +44 -0
  10. package/connectors/connect-activecampaign/src/api/automations.ts +32 -0
  11. package/connectors/connect-activecampaign/src/api/campaigns.ts +30 -0
  12. package/connectors/connect-activecampaign/src/api/client.ts +183 -0
  13. package/connectors/connect-activecampaign/src/api/contacts.ts +64 -0
  14. package/connectors/connect-activecampaign/src/api/deals.ts +58 -0
  15. package/connectors/connect-activecampaign/src/api/index.ts +70 -0
  16. package/connectors/connect-activecampaign/src/api/lists.ts +30 -0
  17. package/connectors/connect-activecampaign/src/api/notes.ts +22 -0
  18. package/connectors/connect-activecampaign/src/api/tags.ts +34 -0
  19. package/connectors/connect-activecampaign/src/api/webhooks.ts +29 -0
  20. package/connectors/connect-activecampaign/src/cli/index.ts +1027 -0
  21. package/connectors/connect-activecampaign/src/index.ts +114 -0
  22. package/connectors/connect-activecampaign/src/types/index.ts +589 -0
  23. package/connectors/connect-activecampaign/src/utils/auth.ts +274 -0
  24. package/connectors/connect-activecampaign/src/utils/bulk.ts +212 -0
  25. package/connectors/connect-activecampaign/src/utils/config.ts +325 -0
  26. package/connectors/connect-activecampaign/src/utils/output.ts +175 -0
  27. package/connectors/connect-activecampaign/src/utils/settings.ts +114 -0
  28. package/connectors/connect-activecampaign/src/utils/storage.ts +198 -0
  29. package/connectors/connect-activecampaign/tsconfig.json +16 -0
  30. package/connectors/connect-adobe/.env.example +11 -0
  31. package/connectors/connect-adobe/CLAUDE.md +68 -0
  32. package/connectors/connect-adobe/README.md +193 -0
  33. package/connectors/connect-adobe/package.json +53 -0
  34. package/connectors/connect-adobe/scripts/release.ts +179 -0
  35. package/connectors/connect-adobe/src/api/assets.ts +31 -0
  36. package/connectors/connect-adobe/src/api/client.ts +276 -0
  37. package/connectors/connect-adobe/src/api/index.ts +48 -0
  38. package/connectors/connect-adobe/src/api/jobs.ts +44 -0
  39. package/connectors/connect-adobe/src/api/operations.ts +202 -0
  40. package/connectors/connect-adobe/src/cli/index.ts +544 -0
  41. package/connectors/connect-adobe/src/index.ts +103 -0
  42. package/connectors/connect-adobe/src/types/index.ts +320 -0
  43. package/connectors/connect-adobe/src/utils/auth.ts +274 -0
  44. package/connectors/connect-adobe/src/utils/bulk.ts +212 -0
  45. package/connectors/connect-adobe/src/utils/config.ts +326 -0
  46. package/connectors/connect-adobe/src/utils/output.ts +175 -0
  47. package/connectors/connect-adobe/src/utils/settings.ts +114 -0
  48. package/connectors/connect-adobe/src/utils/storage.ts +198 -0
  49. package/connectors/connect-adobe/tsconfig.json +16 -0
  50. package/connectors/connect-auth0/.env.example +11 -0
  51. package/connectors/connect-auth0/CLAUDE.md +272 -0
  52. package/connectors/connect-auth0/README.md +193 -0
  53. package/connectors/connect-auth0/package.json +53 -0
  54. package/connectors/connect-auth0/scripts/release.ts +179 -0
  55. package/connectors/connect-auth0/src/api/client.ts +213 -0
  56. package/connectors/connect-auth0/src/api/example.ts +48 -0
  57. package/connectors/connect-auth0/src/api/index.ts +51 -0
  58. package/connectors/connect-auth0/src/cli/index.ts +254 -0
  59. package/connectors/connect-auth0/src/index.ts +103 -0
  60. package/connectors/connect-auth0/src/types/index.ts +237 -0
  61. package/connectors/connect-auth0/src/utils/auth.ts +274 -0
  62. package/connectors/connect-auth0/src/utils/bulk.ts +212 -0
  63. package/connectors/connect-auth0/src/utils/config.ts +326 -0
  64. package/connectors/connect-auth0/src/utils/output.ts +175 -0
  65. package/connectors/connect-auth0/src/utils/settings.ts +114 -0
  66. package/connectors/connect-auth0/src/utils/storage.ts +198 -0
  67. package/connectors/connect-auth0/tsconfig.json +16 -0
  68. package/connectors/connect-bamboohr/.env.example +11 -0
  69. package/connectors/connect-bamboohr/CLAUDE.md +272 -0
  70. package/connectors/connect-bamboohr/README.md +193 -0
  71. package/connectors/connect-bamboohr/package.json +51 -0
  72. package/connectors/connect-bamboohr/scripts/release.ts +179 -0
  73. package/connectors/connect-bamboohr/src/api/client.ts +213 -0
  74. package/connectors/connect-bamboohr/src/api/example.ts +48 -0
  75. package/connectors/connect-bamboohr/src/api/index.ts +51 -0
  76. package/connectors/connect-bamboohr/src/cli/index.ts +254 -0
  77. package/connectors/connect-bamboohr/src/index.ts +103 -0
  78. package/connectors/connect-bamboohr/src/types/index.ts +237 -0
  79. package/connectors/connect-bamboohr/src/utils/auth.ts +274 -0
  80. package/connectors/connect-bamboohr/src/utils/bulk.ts +212 -0
  81. package/connectors/connect-bamboohr/src/utils/config.ts +326 -0
  82. package/connectors/connect-bamboohr/src/utils/output.ts +175 -0
  83. package/connectors/connect-bamboohr/src/utils/settings.ts +114 -0
  84. package/connectors/connect-bamboohr/src/utils/storage.ts +198 -0
  85. package/connectors/connect-bamboohr/tsconfig.json +16 -0
  86. package/connectors/connect-bannerbear/.env.example +11 -0
  87. package/connectors/connect-bannerbear/CLAUDE.md +272 -0
  88. package/connectors/connect-bannerbear/README.md +193 -0
  89. package/connectors/connect-bannerbear/package.json +51 -0
  90. package/connectors/connect-bannerbear/scripts/release.ts +179 -0
  91. package/connectors/connect-bannerbear/src/api/client.ts +213 -0
  92. package/connectors/connect-bannerbear/src/api/example.ts +48 -0
  93. package/connectors/connect-bannerbear/src/api/index.ts +51 -0
  94. package/connectors/connect-bannerbear/src/cli/index.ts +254 -0
  95. package/connectors/connect-bannerbear/src/index.ts +103 -0
  96. package/connectors/connect-bannerbear/src/types/index.ts +237 -0
  97. package/connectors/connect-bannerbear/src/utils/auth.ts +274 -0
  98. package/connectors/connect-bannerbear/src/utils/bulk.ts +212 -0
  99. package/connectors/connect-bannerbear/src/utils/config.ts +326 -0
  100. package/connectors/connect-bannerbear/src/utils/output.ts +175 -0
  101. package/connectors/connect-bannerbear/src/utils/settings.ts +114 -0
  102. package/connectors/connect-bannerbear/src/utils/storage.ts +198 -0
  103. package/connectors/connect-bannerbear/tsconfig.json +16 -0
  104. package/connectors/connect-brevo/.env.example +11 -0
  105. package/connectors/connect-brevo/CLAUDE.md +272 -0
  106. package/connectors/connect-brevo/README.md +193 -0
  107. package/connectors/connect-brevo/package.json +51 -0
  108. package/connectors/connect-brevo/scripts/release.ts +179 -0
  109. package/connectors/connect-brevo/src/api/client.ts +213 -0
  110. package/connectors/connect-brevo/src/api/example.ts +48 -0
  111. package/connectors/connect-brevo/src/api/index.ts +51 -0
  112. package/connectors/connect-brevo/src/cli/index.ts +254 -0
  113. package/connectors/connect-brevo/src/index.ts +103 -0
  114. package/connectors/connect-brevo/src/types/index.ts +237 -0
  115. package/connectors/connect-brevo/src/utils/auth.ts +274 -0
  116. package/connectors/connect-brevo/src/utils/bulk.ts +212 -0
  117. package/connectors/connect-brevo/src/utils/config.ts +326 -0
  118. package/connectors/connect-brevo/src/utils/output.ts +175 -0
  119. package/connectors/connect-brevo/src/utils/settings.ts +114 -0
  120. package/connectors/connect-brevo/src/utils/storage.ts +198 -0
  121. package/connectors/connect-brevo/tsconfig.json +16 -0
  122. package/connectors/connect-coingecko/.env.example +11 -0
  123. package/connectors/connect-coingecko/CLAUDE.md +272 -0
  124. package/connectors/connect-coingecko/README.md +193 -0
  125. package/connectors/connect-coingecko/package.json +51 -0
  126. package/connectors/connect-coingecko/scripts/release.ts +179 -0
  127. package/connectors/connect-coingecko/src/api/client.ts +213 -0
  128. package/connectors/connect-coingecko/src/api/example.ts +48 -0
  129. package/connectors/connect-coingecko/src/api/index.ts +51 -0
  130. package/connectors/connect-coingecko/src/cli/index.ts +254 -0
  131. package/connectors/connect-coingecko/src/index.ts +103 -0
  132. package/connectors/connect-coingecko/src/types/index.ts +237 -0
  133. package/connectors/connect-coingecko/src/utils/auth.ts +274 -0
  134. package/connectors/connect-coingecko/src/utils/bulk.ts +212 -0
  135. package/connectors/connect-coingecko/src/utils/config.ts +326 -0
  136. package/connectors/connect-coingecko/src/utils/output.ts +175 -0
  137. package/connectors/connect-coingecko/src/utils/settings.ts +114 -0
  138. package/connectors/connect-coingecko/src/utils/storage.ts +198 -0
  139. package/connectors/connect-coingecko/tsconfig.json +16 -0
  140. package/connectors/connect-customerio/.env.example +11 -0
  141. package/connectors/connect-customerio/CLAUDE.md +272 -0
  142. package/connectors/connect-customerio/README.md +193 -0
  143. package/connectors/connect-customerio/package.json +51 -0
  144. package/connectors/connect-customerio/scripts/release.ts +179 -0
  145. package/connectors/connect-customerio/src/api/client.ts +213 -0
  146. package/connectors/connect-customerio/src/api/example.ts +48 -0
  147. package/connectors/connect-customerio/src/api/index.ts +51 -0
  148. package/connectors/connect-customerio/src/cli/index.ts +254 -0
  149. package/connectors/connect-customerio/src/index.ts +103 -0
  150. package/connectors/connect-customerio/src/types/index.ts +237 -0
  151. package/connectors/connect-customerio/src/utils/auth.ts +274 -0
  152. package/connectors/connect-customerio/src/utils/bulk.ts +212 -0
  153. package/connectors/connect-customerio/src/utils/config.ts +326 -0
  154. package/connectors/connect-customerio/src/utils/output.ts +175 -0
  155. package/connectors/connect-customerio/src/utils/settings.ts +114 -0
  156. package/connectors/connect-customerio/src/utils/storage.ts +198 -0
  157. package/connectors/connect-customerio/tsconfig.json +16 -0
  158. package/connectors/connect-giphy/.env.example +11 -0
  159. package/connectors/connect-giphy/CLAUDE.md +272 -0
  160. package/connectors/connect-giphy/README.md +193 -0
  161. package/connectors/connect-giphy/package.json +51 -0
  162. package/connectors/connect-giphy/scripts/release.ts +179 -0
  163. package/connectors/connect-giphy/src/api/client.ts +213 -0
  164. package/connectors/connect-giphy/src/api/example.ts +48 -0
  165. package/connectors/connect-giphy/src/api/index.ts +51 -0
  166. package/connectors/connect-giphy/src/cli/index.ts +254 -0
  167. package/connectors/connect-giphy/src/index.ts +103 -0
  168. package/connectors/connect-giphy/src/types/index.ts +237 -0
  169. package/connectors/connect-giphy/src/utils/auth.ts +274 -0
  170. package/connectors/connect-giphy/src/utils/bulk.ts +212 -0
  171. package/connectors/connect-giphy/src/utils/config.ts +326 -0
  172. package/connectors/connect-giphy/src/utils/output.ts +175 -0
  173. package/connectors/connect-giphy/src/utils/settings.ts +114 -0
  174. package/connectors/connect-giphy/src/utils/storage.ts +198 -0
  175. package/connectors/connect-giphy/tsconfig.json +16 -0
  176. package/connectors/connect-gitlab/.env.example +11 -0
  177. package/connectors/connect-gitlab/CLAUDE.md +165 -0
  178. package/connectors/connect-gitlab/README.md +193 -0
  179. package/connectors/connect-gitlab/package.json +53 -0
  180. package/connectors/connect-gitlab/src/api/client.ts +234 -0
  181. package/connectors/connect-gitlab/src/api/index.ts +858 -0
  182. package/connectors/connect-gitlab/src/cli/index.ts +909 -0
  183. package/connectors/connect-gitlab/src/index.ts +24 -0
  184. package/connectors/connect-gitlab/src/types/index.ts +674 -0
  185. package/connectors/connect-gitlab/src/utils/config.ts +208 -0
  186. package/connectors/connect-gitlab/src/utils/output.ts +119 -0
  187. package/connectors/connect-gitlab/tsconfig.json +16 -0
  188. package/connectors/connect-homeassistant/.env.example +11 -0
  189. package/connectors/connect-homeassistant/CLAUDE.md +272 -0
  190. package/connectors/connect-homeassistant/README.md +193 -0
  191. package/connectors/connect-homeassistant/package.json +51 -0
  192. package/connectors/connect-homeassistant/scripts/release.ts +179 -0
  193. package/connectors/connect-homeassistant/src/api/client.ts +213 -0
  194. package/connectors/connect-homeassistant/src/api/example.ts +48 -0
  195. package/connectors/connect-homeassistant/src/api/index.ts +51 -0
  196. package/connectors/connect-homeassistant/src/cli/index.ts +254 -0
  197. package/connectors/connect-homeassistant/src/index.ts +103 -0
  198. package/connectors/connect-homeassistant/src/types/index.ts +237 -0
  199. package/connectors/connect-homeassistant/src/utils/auth.ts +274 -0
  200. package/connectors/connect-homeassistant/src/utils/bulk.ts +212 -0
  201. package/connectors/connect-homeassistant/src/utils/config.ts +326 -0
  202. package/connectors/connect-homeassistant/src/utils/output.ts +175 -0
  203. package/connectors/connect-homeassistant/src/utils/settings.ts +114 -0
  204. package/connectors/connect-homeassistant/src/utils/storage.ts +198 -0
  205. package/connectors/connect-homeassistant/tsconfig.json +16 -0
  206. package/connectors/connect-imgur/.env.example +11 -0
  207. package/connectors/connect-imgur/CLAUDE.md +272 -0
  208. package/connectors/connect-imgur/README.md +193 -0
  209. package/connectors/connect-imgur/package.json +51 -0
  210. package/connectors/connect-imgur/scripts/release.ts +179 -0
  211. package/connectors/connect-imgur/src/api/client.ts +213 -0
  212. package/connectors/connect-imgur/src/api/example.ts +48 -0
  213. package/connectors/connect-imgur/src/api/index.ts +51 -0
  214. package/connectors/connect-imgur/src/cli/index.ts +254 -0
  215. package/connectors/connect-imgur/src/index.ts +103 -0
  216. package/connectors/connect-imgur/src/types/index.ts +237 -0
  217. package/connectors/connect-imgur/src/utils/auth.ts +274 -0
  218. package/connectors/connect-imgur/src/utils/bulk.ts +212 -0
  219. package/connectors/connect-imgur/src/utils/config.ts +326 -0
  220. package/connectors/connect-imgur/src/utils/output.ts +175 -0
  221. package/connectors/connect-imgur/src/utils/settings.ts +114 -0
  222. package/connectors/connect-imgur/src/utils/storage.ts +198 -0
  223. package/connectors/connect-imgur/tsconfig.json +16 -0
  224. package/connectors/connect-klaviyo/.env.example +11 -0
  225. package/connectors/connect-klaviyo/CLAUDE.md +272 -0
  226. package/connectors/connect-klaviyo/README.md +193 -0
  227. package/connectors/connect-klaviyo/package.json +51 -0
  228. package/connectors/connect-klaviyo/scripts/release.ts +179 -0
  229. package/connectors/connect-klaviyo/src/api/client.ts +213 -0
  230. package/connectors/connect-klaviyo/src/api/example.ts +48 -0
  231. package/connectors/connect-klaviyo/src/api/index.ts +51 -0
  232. package/connectors/connect-klaviyo/src/cli/index.ts +254 -0
  233. package/connectors/connect-klaviyo/src/index.ts +103 -0
  234. package/connectors/connect-klaviyo/src/types/index.ts +237 -0
  235. package/connectors/connect-klaviyo/src/utils/auth.ts +274 -0
  236. package/connectors/connect-klaviyo/src/utils/bulk.ts +212 -0
  237. package/connectors/connect-klaviyo/src/utils/config.ts +326 -0
  238. package/connectors/connect-klaviyo/src/utils/output.ts +175 -0
  239. package/connectors/connect-klaviyo/src/utils/settings.ts +114 -0
  240. package/connectors/connect-klaviyo/src/utils/storage.ts +198 -0
  241. package/connectors/connect-klaviyo/tsconfig.json +16 -0
  242. package/connectors/connect-launchdarkly/.env.example +11 -0
  243. package/connectors/connect-launchdarkly/CLAUDE.md +272 -0
  244. package/connectors/connect-launchdarkly/README.md +193 -0
  245. package/connectors/connect-launchdarkly/package.json +52 -0
  246. package/connectors/connect-launchdarkly/scripts/release.ts +179 -0
  247. package/connectors/connect-launchdarkly/src/api/client.ts +213 -0
  248. package/connectors/connect-launchdarkly/src/api/example.ts +48 -0
  249. package/connectors/connect-launchdarkly/src/api/index.ts +51 -0
  250. package/connectors/connect-launchdarkly/src/cli/index.ts +254 -0
  251. package/connectors/connect-launchdarkly/src/index.ts +103 -0
  252. package/connectors/connect-launchdarkly/src/types/index.ts +237 -0
  253. package/connectors/connect-launchdarkly/src/utils/auth.ts +274 -0
  254. package/connectors/connect-launchdarkly/src/utils/bulk.ts +212 -0
  255. package/connectors/connect-launchdarkly/src/utils/config.ts +326 -0
  256. package/connectors/connect-launchdarkly/src/utils/output.ts +175 -0
  257. package/connectors/connect-launchdarkly/src/utils/settings.ts +114 -0
  258. package/connectors/connect-launchdarkly/src/utils/storage.ts +198 -0
  259. package/connectors/connect-launchdarkly/tsconfig.json +16 -0
  260. package/connectors/connect-mastodon/.env.example +11 -0
  261. package/connectors/connect-mastodon/CLAUDE.md +272 -0
  262. package/connectors/connect-mastodon/README.md +193 -0
  263. package/connectors/connect-mastodon/package.json +51 -0
  264. package/connectors/connect-mastodon/scripts/release.ts +179 -0
  265. package/connectors/connect-mastodon/src/api/client.ts +213 -0
  266. package/connectors/connect-mastodon/src/api/example.ts +48 -0
  267. package/connectors/connect-mastodon/src/api/index.ts +51 -0
  268. package/connectors/connect-mastodon/src/cli/index.ts +254 -0
  269. package/connectors/connect-mastodon/src/index.ts +103 -0
  270. package/connectors/connect-mastodon/src/types/index.ts +237 -0
  271. package/connectors/connect-mastodon/src/utils/auth.ts +274 -0
  272. package/connectors/connect-mastodon/src/utils/bulk.ts +212 -0
  273. package/connectors/connect-mastodon/src/utils/config.ts +326 -0
  274. package/connectors/connect-mastodon/src/utils/output.ts +175 -0
  275. package/connectors/connect-mastodon/src/utils/settings.ts +114 -0
  276. package/connectors/connect-mastodon/src/utils/storage.ts +198 -0
  277. package/connectors/connect-mastodon/tsconfig.json +16 -0
  278. package/connectors/connect-medium/.env.example +11 -0
  279. package/connectors/connect-medium/CLAUDE.md +272 -0
  280. package/connectors/connect-medium/README.md +193 -0
  281. package/connectors/connect-medium/package.json +51 -0
  282. package/connectors/connect-medium/scripts/release.ts +179 -0
  283. package/connectors/connect-medium/src/api/client.ts +213 -0
  284. package/connectors/connect-medium/src/api/example.ts +48 -0
  285. package/connectors/connect-medium/src/api/index.ts +51 -0
  286. package/connectors/connect-medium/src/cli/index.ts +254 -0
  287. package/connectors/connect-medium/src/index.ts +103 -0
  288. package/connectors/connect-medium/src/types/index.ts +237 -0
  289. package/connectors/connect-medium/src/utils/auth.ts +274 -0
  290. package/connectors/connect-medium/src/utils/bulk.ts +212 -0
  291. package/connectors/connect-medium/src/utils/config.ts +326 -0
  292. package/connectors/connect-medium/src/utils/output.ts +175 -0
  293. package/connectors/connect-medium/src/utils/settings.ts +114 -0
  294. package/connectors/connect-medium/src/utils/storage.ts +198 -0
  295. package/connectors/connect-medium/tsconfig.json +16 -0
  296. package/connectors/connect-okta/.env.example +11 -0
  297. package/connectors/connect-okta/CLAUDE.md +272 -0
  298. package/connectors/connect-okta/README.md +193 -0
  299. package/connectors/connect-okta/package.json +51 -0
  300. package/connectors/connect-okta/scripts/release.ts +179 -0
  301. package/connectors/connect-okta/src/api/client.ts +213 -0
  302. package/connectors/connect-okta/src/api/example.ts +48 -0
  303. package/connectors/connect-okta/src/api/index.ts +51 -0
  304. package/connectors/connect-okta/src/cli/index.ts +254 -0
  305. package/connectors/connect-okta/src/index.ts +103 -0
  306. package/connectors/connect-okta/src/types/index.ts +237 -0
  307. package/connectors/connect-okta/src/utils/auth.ts +274 -0
  308. package/connectors/connect-okta/src/utils/bulk.ts +212 -0
  309. package/connectors/connect-okta/src/utils/config.ts +326 -0
  310. package/connectors/connect-okta/src/utils/output.ts +175 -0
  311. package/connectors/connect-okta/src/utils/settings.ts +114 -0
  312. package/connectors/connect-okta/src/utils/storage.ts +198 -0
  313. package/connectors/connect-okta/tsconfig.json +16 -0
  314. package/connectors/connect-pagerduty/.env.example +11 -0
  315. package/connectors/connect-pagerduty/CLAUDE.md +272 -0
  316. package/connectors/connect-pagerduty/README.md +193 -0
  317. package/connectors/connect-pagerduty/package.json +53 -0
  318. package/connectors/connect-pagerduty/scripts/release.ts +179 -0
  319. package/connectors/connect-pagerduty/src/api/client.ts +213 -0
  320. package/connectors/connect-pagerduty/src/api/example.ts +48 -0
  321. package/connectors/connect-pagerduty/src/api/index.ts +51 -0
  322. package/connectors/connect-pagerduty/src/cli/index.ts +254 -0
  323. package/connectors/connect-pagerduty/src/index.ts +103 -0
  324. package/connectors/connect-pagerduty/src/types/index.ts +237 -0
  325. package/connectors/connect-pagerduty/src/utils/auth.ts +274 -0
  326. package/connectors/connect-pagerduty/src/utils/bulk.ts +212 -0
  327. package/connectors/connect-pagerduty/src/utils/config.ts +326 -0
  328. package/connectors/connect-pagerduty/src/utils/output.ts +175 -0
  329. package/connectors/connect-pagerduty/src/utils/settings.ts +114 -0
  330. package/connectors/connect-pagerduty/src/utils/storage.ts +198 -0
  331. package/connectors/connect-pagerduty/tsconfig.json +16 -0
  332. package/connectors/connect-plaid/.env.example +11 -0
  333. package/connectors/connect-plaid/CLAUDE.md +128 -0
  334. package/connectors/connect-plaid/README.md +193 -0
  335. package/connectors/connect-plaid/package.json +51 -0
  336. package/connectors/connect-plaid/src/api/client.ts +142 -0
  337. package/connectors/connect-plaid/src/api/index.ts +303 -0
  338. package/connectors/connect-plaid/src/cli/index.ts +564 -0
  339. package/connectors/connect-plaid/src/index.ts +23 -0
  340. package/connectors/connect-plaid/src/types/index.ts +348 -0
  341. package/connectors/connect-plaid/src/utils/config.ts +125 -0
  342. package/connectors/connect-plaid/src/utils/output.ts +119 -0
  343. package/connectors/connect-plaid/tsconfig.json +16 -0
  344. package/connectors/connect-producthunt/.env.example +11 -0
  345. package/connectors/connect-producthunt/CLAUDE.md +272 -0
  346. package/connectors/connect-producthunt/README.md +193 -0
  347. package/connectors/connect-producthunt/package.json +51 -0
  348. package/connectors/connect-producthunt/scripts/release.ts +179 -0
  349. package/connectors/connect-producthunt/src/api/client.ts +213 -0
  350. package/connectors/connect-producthunt/src/api/example.ts +48 -0
  351. package/connectors/connect-producthunt/src/api/index.ts +51 -0
  352. package/connectors/connect-producthunt/src/cli/index.ts +254 -0
  353. package/connectors/connect-producthunt/src/index.ts +103 -0
  354. package/connectors/connect-producthunt/src/types/index.ts +237 -0
  355. package/connectors/connect-producthunt/src/utils/auth.ts +274 -0
  356. package/connectors/connect-producthunt/src/utils/bulk.ts +212 -0
  357. package/connectors/connect-producthunt/src/utils/config.ts +326 -0
  358. package/connectors/connect-producthunt/src/utils/output.ts +175 -0
  359. package/connectors/connect-producthunt/src/utils/settings.ts +114 -0
  360. package/connectors/connect-producthunt/src/utils/storage.ts +198 -0
  361. package/connectors/connect-producthunt/tsconfig.json +16 -0
  362. package/connectors/connect-spotify/.env.example +11 -0
  363. package/connectors/connect-spotify/CLAUDE.md +272 -0
  364. package/connectors/connect-spotify/README.md +193 -0
  365. package/connectors/connect-spotify/package.json +51 -0
  366. package/connectors/connect-spotify/scripts/release.ts +179 -0
  367. package/connectors/connect-spotify/src/api/client.ts +213 -0
  368. package/connectors/connect-spotify/src/api/example.ts +48 -0
  369. package/connectors/connect-spotify/src/api/index.ts +51 -0
  370. package/connectors/connect-spotify/src/cli/index.ts +254 -0
  371. package/connectors/connect-spotify/src/index.ts +103 -0
  372. package/connectors/connect-spotify/src/types/index.ts +237 -0
  373. package/connectors/connect-spotify/src/utils/auth.ts +274 -0
  374. package/connectors/connect-spotify/src/utils/bulk.ts +212 -0
  375. package/connectors/connect-spotify/src/utils/config.ts +326 -0
  376. package/connectors/connect-spotify/src/utils/output.ts +175 -0
  377. package/connectors/connect-spotify/src/utils/settings.ts +114 -0
  378. package/connectors/connect-spotify/src/utils/storage.ts +198 -0
  379. package/connectors/connect-spotify/tsconfig.json +16 -0
  380. package/connectors/connect-uptimerobot/.env.example +11 -0
  381. package/connectors/connect-uptimerobot/CLAUDE.md +272 -0
  382. package/connectors/connect-uptimerobot/README.md +193 -0
  383. package/connectors/connect-uptimerobot/package.json +52 -0
  384. package/connectors/connect-uptimerobot/scripts/release.ts +179 -0
  385. package/connectors/connect-uptimerobot/src/api/client.ts +213 -0
  386. package/connectors/connect-uptimerobot/src/api/example.ts +48 -0
  387. package/connectors/connect-uptimerobot/src/api/index.ts +51 -0
  388. package/connectors/connect-uptimerobot/src/cli/index.ts +254 -0
  389. package/connectors/connect-uptimerobot/src/index.ts +103 -0
  390. package/connectors/connect-uptimerobot/src/types/index.ts +237 -0
  391. package/connectors/connect-uptimerobot/src/utils/auth.ts +274 -0
  392. package/connectors/connect-uptimerobot/src/utils/bulk.ts +212 -0
  393. package/connectors/connect-uptimerobot/src/utils/config.ts +326 -0
  394. package/connectors/connect-uptimerobot/src/utils/output.ts +175 -0
  395. package/connectors/connect-uptimerobot/src/utils/settings.ts +114 -0
  396. package/connectors/connect-uptimerobot/src/utils/storage.ts +198 -0
  397. package/connectors/connect-uptimerobot/tsconfig.json +16 -0
  398. package/connectors/connect-wise/.env.example +11 -0
  399. package/connectors/connect-wise/CLAUDE.md +128 -0
  400. package/connectors/connect-wise/README.md +193 -0
  401. package/connectors/connect-wise/package.json +52 -0
  402. package/connectors/connect-wise/src/api/client.ts +151 -0
  403. package/connectors/connect-wise/src/api/index.ts +279 -0
  404. package/connectors/connect-wise/src/cli/index.ts +577 -0
  405. package/connectors/connect-wise/src/index.ts +21 -0
  406. package/connectors/connect-wise/src/types/index.ts +353 -0
  407. package/connectors/connect-wise/src/utils/config.ts +209 -0
  408. package/connectors/connect-wise/src/utils/output.ts +119 -0
  409. package/connectors/connect-wise/tsconfig.json +16 -0
  410. package/dist/index.js +161 -0
  411. package/package.json +1 -1
@@ -0,0 +1,564 @@
1
+ #!/usr/bin/env bun
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import { Plaid } from '../api';
5
+ import {
6
+ getClientId,
7
+ setClientId,
8
+ getSecret,
9
+ setSecret,
10
+ getBaseUrl,
11
+ setBaseUrl,
12
+ clearConfig,
13
+ getConfigDir,
14
+ setProfileOverride,
15
+ getCurrentProfile,
16
+ setCurrentProfile,
17
+ listProfiles,
18
+ createProfile,
19
+ deleteProfile,
20
+ profileExists,
21
+ loadProfile,
22
+ } from '../utils/config';
23
+ import type { OutputFormat } from '../utils/output';
24
+ import { success, error, info, print } from '../utils/output';
25
+
26
+ const CONNECTOR_NAME = 'connect-plaid';
27
+ const VERSION = '0.0.1';
28
+
29
+ const program = new Command();
30
+
31
+ program
32
+ .name(CONNECTOR_NAME)
33
+ .description('Plaid connector CLI - Financial data for banking and transactions')
34
+ .version(VERSION)
35
+ .option('--client-id <id>', 'Client ID (overrides config)')
36
+ .option('--secret <secret>', 'Secret (overrides config)')
37
+ .option('-f, --format <format>', 'Output format (json, pretty)', 'pretty')
38
+ .option('-p, --profile <profile>', 'Use a specific profile')
39
+ .hook('preAction', (thisCommand) => {
40
+ const opts = thisCommand.opts();
41
+ if (opts.profile) {
42
+ if (!profileExists(opts.profile)) {
43
+ error(`Profile "${opts.profile}" does not exist. Create it with "${CONNECTOR_NAME} profile create ${opts.profile}"`);
44
+ process.exit(1);
45
+ }
46
+ setProfileOverride(opts.profile);
47
+ }
48
+ if (opts.clientId) {
49
+ process.env.PLAID_CLIENT_ID = opts.clientId;
50
+ }
51
+ if (opts.secret) {
52
+ process.env.PLAID_SECRET = opts.secret;
53
+ }
54
+ });
55
+
56
+ function getFormat(cmd: Command): OutputFormat {
57
+ const parent = cmd.parent;
58
+ return (parent?.opts().format || 'pretty') as OutputFormat;
59
+ }
60
+
61
+ function getClient(): Plaid {
62
+ const clientId = getClientId();
63
+ const secret = getSecret();
64
+ const baseUrl = getBaseUrl();
65
+
66
+ if (!clientId) {
67
+ error(`No client ID configured. Run "${CONNECTOR_NAME} config set-client-id <id>" or set PLAID_CLIENT_ID.`);
68
+ process.exit(1);
69
+ }
70
+ if (!secret) {
71
+ error(`No secret configured. Run "${CONNECTOR_NAME} config set-secret <secret>" or set PLAID_SECRET.`);
72
+ process.exit(1);
73
+ }
74
+ return new Plaid({ clientId, secret, baseUrl });
75
+ }
76
+
77
+ // ============================================
78
+ // Profile Commands
79
+ // ============================================
80
+ const profileCmd = program
81
+ .command('profile')
82
+ .description('Manage configuration profiles');
83
+
84
+ profileCmd
85
+ .command('list')
86
+ .description('List all profiles')
87
+ .action(() => {
88
+ const profiles = listProfiles();
89
+ const current = getCurrentProfile();
90
+ if (profiles.length === 0) {
91
+ info('No profiles found. Use "profile create <name>" to create one.');
92
+ return;
93
+ }
94
+ success(`Profiles:`);
95
+ profiles.forEach(p => {
96
+ const isActive = p === current ? chalk.green(' (active)') : '';
97
+ console.log(` ${p}${isActive}`);
98
+ });
99
+ });
100
+
101
+ profileCmd
102
+ .command('use <name>')
103
+ .description('Switch to a profile')
104
+ .action((name: string) => {
105
+ if (!profileExists(name)) {
106
+ error(`Profile "${name}" does not exist. Create it with "profile create ${name}"`);
107
+ process.exit(1);
108
+ }
109
+ setCurrentProfile(name);
110
+ success(`Switched to profile: ${name}`);
111
+ });
112
+
113
+ profileCmd
114
+ .command('create <name>')
115
+ .description('Create a new profile')
116
+ .option('--client-id <id>', 'Client ID')
117
+ .option('--secret <secret>', 'Secret')
118
+ .option('--sandbox', 'Use sandbox environment (default)')
119
+ .option('--development', 'Use development environment')
120
+ .option('--production', 'Use production environment')
121
+ .option('--use', 'Switch to this profile after creation')
122
+ .action((name: string, opts) => {
123
+ if (profileExists(name)) {
124
+ error(`Profile "${name}" already exists`);
125
+ process.exit(1);
126
+ }
127
+ let baseUrl: string | undefined;
128
+ if (opts.production) baseUrl = 'https://production.plaid.com';
129
+ else if (opts.development) baseUrl = 'https://development.plaid.com';
130
+
131
+ createProfile(name, {
132
+ clientId: opts.clientId,
133
+ secret: opts.secret,
134
+ baseUrl,
135
+ });
136
+ success(`Profile "${name}" created`);
137
+ if (opts.use) {
138
+ setCurrentProfile(name);
139
+ info(`Switched to profile: ${name}`);
140
+ }
141
+ });
142
+
143
+ profileCmd
144
+ .command('delete <name>')
145
+ .description('Delete a profile')
146
+ .action((name: string) => {
147
+ if (name === 'default') {
148
+ error('Cannot delete the default profile');
149
+ process.exit(1);
150
+ }
151
+ if (deleteProfile(name)) {
152
+ success(`Profile "${name}" deleted`);
153
+ } else {
154
+ error(`Profile "${name}" not found`);
155
+ process.exit(1);
156
+ }
157
+ });
158
+
159
+ profileCmd
160
+ .command('show [name]')
161
+ .description('Show profile configuration')
162
+ .action((name?: string) => {
163
+ const profileName = name || getCurrentProfile();
164
+ const config = loadProfile(profileName);
165
+ const active = getCurrentProfile();
166
+ console.log(chalk.bold(`Profile: ${profileName}${profileName === active ? chalk.green(' (active)') : ''}`));
167
+ info(`Client ID: ${config.clientId ? `${config.clientId.substring(0, 8)}...` : chalk.gray('not set')}`);
168
+ info(`Secret: ${config.secret ? '********' : chalk.gray('not set')}`);
169
+ const env = config.baseUrl?.includes('production') ? 'Production'
170
+ : config.baseUrl?.includes('development') ? 'Development' : 'Sandbox';
171
+ info(`Environment: ${env}`);
172
+ });
173
+
174
+ // ============================================
175
+ // Config Commands
176
+ // ============================================
177
+ const configCmd = program
178
+ .command('config')
179
+ .description('Manage CLI configuration (for active profile)');
180
+
181
+ configCmd
182
+ .command('set-client-id <clientId>')
183
+ .description('Set client ID')
184
+ .action((clientId: string) => {
185
+ setClientId(clientId);
186
+ success(`Client ID saved to profile: ${getCurrentProfile()}`);
187
+ });
188
+
189
+ configCmd
190
+ .command('set-secret <secret>')
191
+ .description('Set secret')
192
+ .action((secret: string) => {
193
+ setSecret(secret);
194
+ success(`Secret saved to profile: ${getCurrentProfile()}`);
195
+ });
196
+
197
+ configCmd
198
+ .command('set-environment <env>')
199
+ .description('Set environment (sandbox, development, or production)')
200
+ .action((env: string) => {
201
+ if (!['sandbox', 'development', 'production'].includes(env)) {
202
+ error('Environment must be "sandbox", "development", or "production"');
203
+ process.exit(1);
204
+ }
205
+ const baseUrl = env === 'production' ? 'https://production.plaid.com'
206
+ : env === 'development' ? 'https://development.plaid.com'
207
+ : 'https://sandbox.plaid.com';
208
+ setBaseUrl(baseUrl);
209
+ success(`Environment set to ${env} for profile: ${getCurrentProfile()}`);
210
+ });
211
+
212
+ configCmd
213
+ .command('show')
214
+ .description('Show current configuration')
215
+ .action(() => {
216
+ const profileName = getCurrentProfile();
217
+ const clientId = getClientId();
218
+ const baseUrl = getBaseUrl();
219
+ console.log(chalk.bold(`Active Profile: ${profileName}`));
220
+ info(`Config directory: ${getConfigDir()}`);
221
+ info(`Client ID: ${clientId ? `${clientId.substring(0, 8)}...` : chalk.gray('not set')}`);
222
+ info(`Secret: ${getSecret() ? '********' : chalk.gray('not set')}`);
223
+ const env = baseUrl?.includes('production') ? 'Production'
224
+ : baseUrl?.includes('development') ? 'Development' : 'Sandbox';
225
+ info(`Environment: ${env}`);
226
+ });
227
+
228
+ configCmd
229
+ .command('clear')
230
+ .description('Clear configuration for active profile')
231
+ .action(() => {
232
+ clearConfig();
233
+ success(`Configuration cleared for profile: ${getCurrentProfile()}`);
234
+ });
235
+
236
+ // ============================================
237
+ // Item Commands
238
+ // ============================================
239
+ const itemCmd = program
240
+ .command('item')
241
+ .description('Item management commands');
242
+
243
+ itemCmd
244
+ .command('get <accessToken>')
245
+ .description('Get item details')
246
+ .action(async (accessToken: string) => {
247
+ try {
248
+ const client = getClient();
249
+ const result = await client.getItem(accessToken);
250
+ const format = getFormat(itemCmd);
251
+ if (format === 'json') {
252
+ print(result, format);
253
+ } else {
254
+ const item = result.item;
255
+ console.log(chalk.bold(`Item: ${item.item_id}`));
256
+ if (item.institution_id) info(`Institution: ${item.institution_id}`);
257
+ info(`Available Products: ${item.available_products.join(', ')}`);
258
+ info(`Billed Products: ${item.billed_products.join(', ')}`);
259
+ info(`Update Type: ${item.update_type}`);
260
+ }
261
+ } catch (err) {
262
+ error(String(err));
263
+ process.exit(1);
264
+ }
265
+ });
266
+
267
+ itemCmd
268
+ .command('remove <accessToken>')
269
+ .description('Remove an item')
270
+ .action(async (accessToken: string) => {
271
+ try {
272
+ const client = getClient();
273
+ await client.removeItem(accessToken);
274
+ success('Item removed successfully');
275
+ } catch (err) {
276
+ error(String(err));
277
+ process.exit(1);
278
+ }
279
+ });
280
+
281
+ // ============================================
282
+ // Account Commands
283
+ // ============================================
284
+ const accountCmd = program
285
+ .command('account')
286
+ .description('Account commands');
287
+
288
+ accountCmd
289
+ .command('list <accessToken>')
290
+ .description('List accounts')
291
+ .action(async (accessToken: string) => {
292
+ try {
293
+ const client = getClient();
294
+ const result = await client.getAccounts(accessToken);
295
+ const format = getFormat(accountCmd);
296
+ if (format === 'json') {
297
+ print(result, format);
298
+ } else {
299
+ success(`Accounts (${result.accounts.length}):`);
300
+ result.accounts.forEach(acc => {
301
+ console.log(` ${acc.name} [${acc.type}${acc.subtype ? `: ${acc.subtype}` : ''}]`);
302
+ console.log(` ID: ${acc.account_id}`);
303
+ if (acc.mask) console.log(` Mask: ****${acc.mask}`);
304
+ if (acc.balances.current !== undefined) {
305
+ console.log(` Balance: ${acc.balances.current} ${acc.balances.iso_currency_code || ''}`);
306
+ }
307
+ });
308
+ }
309
+ } catch (err) {
310
+ error(String(err));
311
+ process.exit(1);
312
+ }
313
+ });
314
+
315
+ // ============================================
316
+ // Balance Commands
317
+ // ============================================
318
+ const balanceCmd = program
319
+ .command('balance')
320
+ .description('Balance commands');
321
+
322
+ balanceCmd
323
+ .command('get <accessToken>')
324
+ .description('Get real-time balance')
325
+ .action(async (accessToken: string) => {
326
+ try {
327
+ const client = getClient();
328
+ const result = await client.getBalance(accessToken);
329
+ const format = getFormat(balanceCmd);
330
+ if (format === 'json') {
331
+ print(result, format);
332
+ } else {
333
+ success(`Balances (${result.accounts.length} accounts):`);
334
+ result.accounts.forEach(acc => {
335
+ console.log(` ${acc.name}`);
336
+ info(` Current: ${acc.balances.current ?? 'N/A'} ${acc.balances.iso_currency_code || ''}`);
337
+ info(` Available: ${acc.balances.available ?? 'N/A'} ${acc.balances.iso_currency_code || ''}`);
338
+ if (acc.balances.limit !== undefined) {
339
+ info(` Limit: ${acc.balances.limit} ${acc.balances.iso_currency_code || ''}`);
340
+ }
341
+ });
342
+ }
343
+ } catch (err) {
344
+ error(String(err));
345
+ process.exit(1);
346
+ }
347
+ });
348
+
349
+ // ============================================
350
+ // Transaction Commands
351
+ // ============================================
352
+ const transactionCmd = program
353
+ .command('transaction')
354
+ .description('Transaction commands');
355
+
356
+ transactionCmd
357
+ .command('list <accessToken>')
358
+ .description('List transactions')
359
+ .requiredOption('--start <date>', 'Start date (YYYY-MM-DD)')
360
+ .requiredOption('--end <date>', 'End date (YYYY-MM-DD)')
361
+ .option('-n, --count <count>', 'Number of transactions', '100')
362
+ .option('--offset <offset>', 'Offset for pagination', '0')
363
+ .action(async (accessToken: string, opts) => {
364
+ try {
365
+ const client = getClient();
366
+ const result = await client.getTransactions(accessToken, opts.start, opts.end, {
367
+ count: parseInt(opts.count),
368
+ offset: parseInt(opts.offset),
369
+ });
370
+ const format = getFormat(transactionCmd);
371
+ if (format === 'json') {
372
+ print(result, format);
373
+ } else {
374
+ success(`Transactions (${result.transactions.length} of ${result.total_transactions}):`);
375
+ result.transactions.slice(0, 20).forEach(tx => {
376
+ const amount = tx.amount > 0 ? chalk.red(`-${tx.amount}`) : chalk.green(`+${Math.abs(tx.amount)}`);
377
+ console.log(` ${tx.date} ${amount} ${tx.iso_currency_code || ''}`);
378
+ console.log(` ${tx.name}${tx.merchant_name ? ` (${tx.merchant_name})` : ''}`);
379
+ if (tx.category) console.log(` ${chalk.gray(tx.category.join(' > '))}`);
380
+ });
381
+ if (result.transactions.length > 20) {
382
+ info(` ... and ${result.transactions.length - 20} more`);
383
+ }
384
+ }
385
+ } catch (err) {
386
+ error(String(err));
387
+ process.exit(1);
388
+ }
389
+ });
390
+
391
+ transactionCmd
392
+ .command('sync <accessToken>')
393
+ .description('Sync transactions incrementally')
394
+ .option('--cursor <cursor>', 'Cursor for pagination')
395
+ .option('-n, --count <count>', 'Number of transactions', '100')
396
+ .action(async (accessToken: string, opts) => {
397
+ try {
398
+ const client = getClient();
399
+ const result = await client.syncTransactions(accessToken, {
400
+ cursor: opts.cursor,
401
+ count: parseInt(opts.count),
402
+ });
403
+ const format = getFormat(transactionCmd);
404
+ if (format === 'json') {
405
+ print(result, format);
406
+ } else {
407
+ success(`Transaction Sync:`);
408
+ info(`Added: ${result.added.length}`);
409
+ info(`Modified: ${result.modified.length}`);
410
+ info(`Removed: ${result.removed.length}`);
411
+ info(`Has More: ${result.has_more ? 'Yes' : 'No'}`);
412
+ info(`Next Cursor: ${result.next_cursor.substring(0, 20)}...`);
413
+ }
414
+ } catch (err) {
415
+ error(String(err));
416
+ process.exit(1);
417
+ }
418
+ });
419
+
420
+ // ============================================
421
+ // Auth Commands
422
+ // ============================================
423
+ const authCmd = program
424
+ .command('auth')
425
+ .description('Auth commands (bank routing numbers)');
426
+
427
+ authCmd
428
+ .command('get <accessToken>')
429
+ .description('Get bank account and routing numbers')
430
+ .action(async (accessToken: string) => {
431
+ try {
432
+ const client = getClient();
433
+ const result = await client.getAuth(accessToken);
434
+ const format = getFormat(authCmd);
435
+ if (format === 'json') {
436
+ print(result, format);
437
+ } else {
438
+ success(`Auth Numbers:`);
439
+ if (result.numbers.ach && result.numbers.ach.length > 0) {
440
+ console.log(chalk.bold('\nACH Numbers:'));
441
+ result.numbers.ach.forEach(num => {
442
+ console.log(` Account: ${num.account}`);
443
+ console.log(` Routing: ${num.routing}`);
444
+ if (num.wire_routing) console.log(` Wire Routing: ${num.wire_routing}`);
445
+ });
446
+ }
447
+ if (result.numbers.eft && result.numbers.eft.length > 0) {
448
+ console.log(chalk.bold('\nEFT Numbers:'));
449
+ result.numbers.eft.forEach(num => {
450
+ console.log(` Account: ${num.account}`);
451
+ console.log(` Institution: ${num.institution}`);
452
+ console.log(` Branch: ${num.branch}`);
453
+ });
454
+ }
455
+ }
456
+ } catch (err) {
457
+ error(String(err));
458
+ process.exit(1);
459
+ }
460
+ });
461
+
462
+ // ============================================
463
+ // Institution Commands
464
+ // ============================================
465
+ const institutionCmd = program
466
+ .command('institution')
467
+ .description('Institution commands');
468
+
469
+ institutionCmd
470
+ .command('search <query>')
471
+ .description('Search institutions by name')
472
+ .option('--country <codes>', 'Country codes (comma-separated)', 'US')
473
+ .action(async (query: string, opts) => {
474
+ try {
475
+ const client = getClient();
476
+ const countryCodes = opts.country.split(',');
477
+ const result = await client.searchInstitutions(query, countryCodes);
478
+ const format = getFormat(institutionCmd);
479
+ if (format === 'json') {
480
+ print(result, format);
481
+ } else {
482
+ success(`Institutions (${result.institutions.length}):`);
483
+ result.institutions.forEach(inst => {
484
+ console.log(` ${inst.name}`);
485
+ console.log(` ID: ${inst.institution_id}`);
486
+ console.log(` Products: ${inst.products.join(', ')}`);
487
+ console.log(` OAuth: ${inst.oauth ? 'Yes' : 'No'}`);
488
+ });
489
+ }
490
+ } catch (err) {
491
+ error(String(err));
492
+ process.exit(1);
493
+ }
494
+ });
495
+
496
+ institutionCmd
497
+ .command('get <institutionId>')
498
+ .description('Get institution by ID')
499
+ .option('--country <codes>', 'Country codes (comma-separated)', 'US')
500
+ .action(async (institutionId: string, opts) => {
501
+ try {
502
+ const client = getClient();
503
+ const countryCodes = opts.country.split(',');
504
+ const result = await client.getInstitutionById(institutionId, countryCodes, {
505
+ include_optional_metadata: true,
506
+ });
507
+ const format = getFormat(institutionCmd);
508
+ if (format === 'json') {
509
+ print(result, format);
510
+ } else {
511
+ const inst = result.institution;
512
+ console.log(chalk.bold(`Institution: ${inst.name}`));
513
+ info(`ID: ${inst.institution_id}`);
514
+ info(`Products: ${inst.products.join(', ')}`);
515
+ info(`Countries: ${inst.country_codes.join(', ')}`);
516
+ info(`OAuth: ${inst.oauth ? 'Yes' : 'No'}`);
517
+ if (inst.url) info(`URL: ${inst.url}`);
518
+ }
519
+ } catch (err) {
520
+ error(String(err));
521
+ process.exit(1);
522
+ }
523
+ });
524
+
525
+ // ============================================
526
+ // Sandbox Commands
527
+ // ============================================
528
+ const sandboxCmd = program
529
+ .command('sandbox')
530
+ .description('Sandbox testing commands');
531
+
532
+ sandboxCmd
533
+ .command('create-token')
534
+ .description('Create a test public token')
535
+ .requiredOption('-i, --institution <id>', 'Institution ID')
536
+ .option('--products <products>', 'Products (comma-separated)', 'transactions')
537
+ .action(async (opts) => {
538
+ try {
539
+ const client = getClient();
540
+ const products = opts.products.split(',');
541
+ const result = await client.sandboxPublicTokenCreate(opts.institution, products);
542
+ success(`Public token created: ${result.public_token}`);
543
+ } catch (err) {
544
+ error(String(err));
545
+ process.exit(1);
546
+ }
547
+ });
548
+
549
+ sandboxCmd
550
+ .command('exchange-token <publicToken>')
551
+ .description('Exchange public token for access token')
552
+ .action(async (publicToken: string) => {
553
+ try {
554
+ const client = getClient();
555
+ const result = await client.exchangePublicToken(publicToken);
556
+ success(`Access token: ${result.access_token}`);
557
+ info(`Item ID: ${result.item_id}`);
558
+ } catch (err) {
559
+ error(String(err));
560
+ process.exit(1);
561
+ }
562
+ });
563
+
564
+ program.parse();
@@ -0,0 +1,23 @@
1
+ // Plaid Connector
2
+ // TypeScript wrapper for Plaid financial data API
3
+
4
+ export { Plaid } from './api';
5
+ export * from './types';
6
+ export { PlaidClient } from './api';
7
+
8
+ export {
9
+ getClientId,
10
+ setClientId,
11
+ getSecret,
12
+ setSecret,
13
+ getBaseUrl,
14
+ setBaseUrl,
15
+ getCurrentProfile,
16
+ setCurrentProfile,
17
+ listProfiles,
18
+ createProfile,
19
+ deleteProfile,
20
+ loadProfile,
21
+ saveProfile,
22
+ clearConfig,
23
+ } from './utils/config';