veryfront 0.0.49 → 0.0.50

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 (536) hide show
  1. package/dist/ai/components.js +260 -56
  2. package/dist/ai/components.js.map +4 -4
  3. package/dist/ai/index.d.ts +1 -0
  4. package/dist/ai/index.js +12 -4
  5. package/dist/ai/index.js.map +2 -2
  6. package/dist/ai/primitives.js +55 -10
  7. package/dist/ai/primitives.js.map +3 -3
  8. package/dist/ai/react.js +140 -1
  9. package/dist/ai/react.js.map +3 -3
  10. package/dist/ai/workflow-react.js +458 -0
  11. package/dist/ai/workflow-react.js.map +7 -0
  12. package/dist/ai/workflow.js +5422 -0
  13. package/dist/ai/workflow.js.map +7 -0
  14. package/dist/cli.js +957 -221
  15. package/dist/components.js +12 -4
  16. package/dist/components.js.map +2 -2
  17. package/dist/config.js +12 -4
  18. package/dist/config.js.map +2 -2
  19. package/dist/data.js +12 -4
  20. package/dist/data.js.map +2 -2
  21. package/dist/index.js +12 -6
  22. package/dist/index.js.map +2 -2
  23. package/dist/integrations/_base/files/SETUP.md +667 -98
  24. package/dist/integrations/_base/files/app/api/integrations/token-storage/route.ts +14 -0
  25. package/dist/integrations/_base/files/app/components/ServiceConnections.tsx +2 -1
  26. package/dist/integrations/_base/files/app/setup/page.tsx +858 -54
  27. package/dist/integrations/_base/files/lib/token-store-examples.ts +435 -0
  28. package/dist/integrations/_base/files/lib/token-store.ts +273 -23
  29. package/dist/integrations/airtable/connector.json +99 -0
  30. package/dist/integrations/airtable/files/ai/tools/create-record.ts +25 -0
  31. package/dist/integrations/airtable/files/ai/tools/get-base.ts +34 -0
  32. package/dist/integrations/airtable/files/ai/tools/get-record.ts +23 -0
  33. package/dist/integrations/airtable/files/ai/tools/list-bases.ts +19 -0
  34. package/dist/integrations/airtable/files/ai/tools/list-records.ts +47 -0
  35. package/dist/integrations/airtable/files/app/api/auth/airtable/callback/route.ts +11 -0
  36. package/dist/integrations/airtable/files/app/api/auth/airtable/route.ts +9 -0
  37. package/dist/integrations/airtable/files/lib/airtable-client.ts +244 -0
  38. package/dist/integrations/airtable/files/lib/token-store.ts +5 -0
  39. package/dist/integrations/anthropic/README.md +181 -0
  40. package/dist/integrations/anthropic/connector.json +88 -0
  41. package/dist/integrations/anthropic/files/_env.example +4 -0
  42. package/dist/integrations/anthropic/files/ai/tools/get-organization.ts +36 -0
  43. package/dist/integrations/anthropic/files/ai/tools/get-usage.ts +100 -0
  44. package/dist/integrations/anthropic/files/ai/tools/list-api-keys.ts +64 -0
  45. package/dist/integrations/anthropic/files/ai/tools/list-members.ts +65 -0
  46. package/dist/integrations/anthropic/files/ai/tools/list-workspaces.ts +35 -0
  47. package/dist/integrations/anthropic/files/lib/anthropic-admin-client.ts +264 -0
  48. package/dist/integrations/asana/connector.json +85 -0
  49. package/dist/integrations/asana/files/_env.example +4 -0
  50. package/dist/integrations/asana/files/ai/tools/create-task.ts +34 -0
  51. package/dist/integrations/asana/files/ai/tools/get-task.ts +26 -0
  52. package/dist/integrations/asana/files/ai/tools/list-projects.ts +26 -0
  53. package/dist/integrations/asana/files/ai/tools/list-tasks.ts +50 -0
  54. package/dist/integrations/asana/files/ai/tools/update-task.ts +36 -0
  55. package/dist/integrations/asana/files/app/api/auth/asana/callback/route.ts +11 -0
  56. package/dist/integrations/asana/files/app/api/auth/asana/route.ts +7 -0
  57. package/dist/integrations/asana/files/lib/asana-client.ts +162 -0
  58. package/dist/integrations/asana/files/lib/token-store.ts +11 -0
  59. package/dist/integrations/aws/connector.json +72 -0
  60. package/dist/integrations/aws/files/_env.example +10 -0
  61. package/dist/integrations/aws/files/ai/tools/get-s3-object.ts +62 -0
  62. package/dist/integrations/aws/files/ai/tools/list-ec2-instances.ts +56 -0
  63. package/dist/integrations/aws/files/ai/tools/list-lambda-functions.ts +57 -0
  64. package/dist/integrations/aws/files/ai/tools/list-s3-buckets.ts +44 -0
  65. package/dist/integrations/aws/files/ai/tools/list-s3-objects.ts +58 -0
  66. package/dist/integrations/aws/files/lib/aws-client.ts +255 -0
  67. package/dist/integrations/bitbucket/connector.json +85 -0
  68. package/dist/integrations/bitbucket/files/_env.example +9 -0
  69. package/dist/integrations/bitbucket/files/ai/tools/create-pull-request.ts +83 -0
  70. package/dist/integrations/bitbucket/files/ai/tools/list-issues.ts +112 -0
  71. package/dist/integrations/bitbucket/files/ai/tools/list-pull-requests.ts +91 -0
  72. package/dist/integrations/bitbucket/files/ai/tools/list-repositories.ts +78 -0
  73. package/dist/integrations/bitbucket/files/app/api/auth/bitbucket/callback/route.ts +11 -0
  74. package/dist/integrations/bitbucket/files/app/api/auth/bitbucket/route.ts +9 -0
  75. package/dist/integrations/bitbucket/files/lib/bitbucket-client.ts +316 -0
  76. package/dist/integrations/bitbucket/files/lib/token-store.ts +5 -0
  77. package/dist/integrations/box/connector.json +85 -0
  78. package/dist/integrations/box/files/_env.example +4 -0
  79. package/dist/integrations/box/files/ai/tools/create-folder.ts +28 -0
  80. package/dist/integrations/box/files/ai/tools/get-file.ts +29 -0
  81. package/dist/integrations/box/files/ai/tools/list-files.ts +33 -0
  82. package/dist/integrations/box/files/ai/tools/search-files.ts +35 -0
  83. package/dist/integrations/box/files/ai/tools/upload-file.ts +32 -0
  84. package/dist/integrations/box/files/app/api/auth/box/callback/route.ts +11 -0
  85. package/dist/integrations/box/files/app/api/auth/box/route.ts +7 -0
  86. package/dist/integrations/box/files/lib/box-client.ts +280 -0
  87. package/dist/integrations/box/files/lib/token-store.ts +11 -0
  88. package/dist/integrations/calendar/files/app/api/auth/calendar/callback/route.ts +7 -110
  89. package/dist/integrations/calendar/files/app/api/auth/calendar/route.ts +5 -25
  90. package/dist/integrations/calendar/files/lib/token-store.ts +2 -110
  91. package/dist/integrations/clickup/connector.json +85 -0
  92. package/dist/integrations/clickup/files/_env.example +4 -0
  93. package/dist/integrations/clickup/files/ai/tools/create-task.ts +64 -0
  94. package/dist/integrations/clickup/files/ai/tools/get-task.ts +59 -0
  95. package/dist/integrations/clickup/files/ai/tools/list-lists.ts +109 -0
  96. package/dist/integrations/clickup/files/ai/tools/list-tasks.ts +95 -0
  97. package/dist/integrations/clickup/files/ai/tools/update-task.ts +85 -0
  98. package/dist/integrations/clickup/files/app/api/auth/clickup/callback/route.ts +11 -0
  99. package/dist/integrations/clickup/files/app/api/auth/clickup/route.ts +7 -0
  100. package/dist/integrations/clickup/files/lib/clickup-client.ts +439 -0
  101. package/dist/integrations/clickup/files/lib/token-store.ts +11 -0
  102. package/dist/integrations/confluence/README.md +246 -0
  103. package/dist/integrations/confluence/connector.json +104 -0
  104. package/dist/integrations/confluence/files/_env.example +4 -0
  105. package/dist/integrations/confluence/files/ai/tools/create-page.ts +43 -0
  106. package/dist/integrations/confluence/files/ai/tools/get-page.ts +30 -0
  107. package/dist/integrations/confluence/files/ai/tools/list-spaces.ts +31 -0
  108. package/dist/integrations/confluence/files/ai/tools/search-content.ts +38 -0
  109. package/dist/integrations/confluence/files/ai/tools/update-page.ts +45 -0
  110. package/dist/integrations/confluence/files/app/api/auth/confluence/callback/route.ts +11 -0
  111. package/dist/integrations/confluence/files/app/api/auth/confluence/route.ts +9 -0
  112. package/dist/integrations/confluence/files/lib/confluence-client.ts +281 -0
  113. package/dist/integrations/confluence/files/lib/token-store.ts +5 -0
  114. package/dist/integrations/discord/connector.json +100 -0
  115. package/dist/integrations/discord/files/_env.example +12 -0
  116. package/dist/integrations/discord/files/ai/tools/get-messages.ts +55 -0
  117. package/dist/integrations/discord/files/ai/tools/get-user.ts +32 -0
  118. package/dist/integrations/discord/files/ai/tools/list-channels.ts +32 -0
  119. package/dist/integrations/discord/files/ai/tools/list-guilds.ts +24 -0
  120. package/dist/integrations/discord/files/ai/tools/send-message.ts +33 -0
  121. package/dist/integrations/discord/files/app/api/auth/discord/callback/route.ts +11 -0
  122. package/dist/integrations/discord/files/app/api/auth/discord/route.ts +9 -0
  123. package/dist/integrations/discord/files/lib/discord-client.ts +273 -0
  124. package/dist/integrations/discord/files/lib/token-store.ts +5 -0
  125. package/dist/integrations/docs-google/connector.json +101 -0
  126. package/dist/integrations/docs-google/files/_env.example +8 -0
  127. package/dist/integrations/docs-google/files/ai/tools/create-document.ts +46 -0
  128. package/dist/integrations/docs-google/files/ai/tools/get-document.ts +46 -0
  129. package/dist/integrations/docs-google/files/ai/tools/list-documents.ts +42 -0
  130. package/dist/integrations/docs-google/files/ai/tools/search-documents.ts +38 -0
  131. package/dist/integrations/docs-google/files/ai/tools/update-document.ts +131 -0
  132. package/dist/integrations/docs-google/files/app/api/auth/docs-google/callback/route.ts +11 -0
  133. package/dist/integrations/docs-google/files/app/api/auth/docs-google/route.ts +9 -0
  134. package/dist/integrations/docs-google/files/lib/docs-client.ts +582 -0
  135. package/dist/integrations/docs-google/files/lib/token-store.ts +5 -0
  136. package/dist/integrations/drive/connector.json +134 -0
  137. package/dist/integrations/drive/files/_env.example +9 -0
  138. package/dist/integrations/drive/files/ai/tools/create-folder.ts +47 -0
  139. package/dist/integrations/drive/files/ai/tools/get-file.ts +55 -0
  140. package/dist/integrations/drive/files/ai/tools/list-files.ts +78 -0
  141. package/dist/integrations/drive/files/ai/tools/search-files.ts +79 -0
  142. package/dist/integrations/drive/files/ai/tools/upload-file.ts +59 -0
  143. package/dist/integrations/drive/files/app/api/auth/drive/callback/route.ts +11 -0
  144. package/dist/integrations/drive/files/app/api/auth/drive/route.ts +9 -0
  145. package/dist/integrations/drive/files/lib/drive-client.ts +359 -0
  146. package/dist/integrations/drive/files/lib/token-store.ts +113 -0
  147. package/dist/integrations/dropbox/connector.json +107 -0
  148. package/dist/integrations/dropbox/files/_env.example +24 -0
  149. package/dist/integrations/dropbox/files/ai/tools/get-account.ts +58 -0
  150. package/dist/integrations/dropbox/files/ai/tools/get-file.ts +61 -0
  151. package/dist/integrations/dropbox/files/ai/tools/list-files.ts +56 -0
  152. package/dist/integrations/dropbox/files/ai/tools/search-files.ts +70 -0
  153. package/dist/integrations/dropbox/files/ai/tools/upload-file.ts +48 -0
  154. package/dist/integrations/dropbox/files/app/api/auth/dropbox/callback/route.ts +11 -0
  155. package/dist/integrations/dropbox/files/app/api/auth/dropbox/route.ts +9 -0
  156. package/dist/integrations/dropbox/files/lib/dropbox-client.ts +397 -0
  157. package/dist/integrations/dropbox/files/lib/token-store.ts +5 -0
  158. package/dist/integrations/figma/INTEGRATION_SUMMARY.md +436 -0
  159. package/dist/integrations/figma/README.md +287 -0
  160. package/dist/integrations/figma/connector.json +100 -0
  161. package/dist/integrations/figma/files/_env.example +5 -0
  162. package/dist/integrations/figma/files/ai/tools/get-comments.ts +72 -0
  163. package/dist/integrations/figma/files/ai/tools/get-file.ts +54 -0
  164. package/dist/integrations/figma/files/ai/tools/list-files.ts +39 -0
  165. package/dist/integrations/figma/files/ai/tools/list-projects.ts +69 -0
  166. package/dist/integrations/figma/files/ai/tools/post-comment.ts +54 -0
  167. package/dist/integrations/figma/files/app/api/auth/figma/callback/route.ts +11 -0
  168. package/dist/integrations/figma/files/app/api/auth/figma/route.ts +9 -0
  169. package/dist/integrations/figma/files/lib/figma-client.ts +355 -0
  170. package/dist/integrations/figma/files/lib/token-store.ts +5 -0
  171. package/dist/integrations/figma/files/lib/types.ts +503 -0
  172. package/dist/integrations/freshdesk/connector.json +85 -0
  173. package/dist/integrations/freshdesk/files/_env.example +4 -0
  174. package/dist/integrations/freshdesk/files/ai/tools/create-ticket.ts +60 -0
  175. package/dist/integrations/freshdesk/files/ai/tools/get-ticket.ts +46 -0
  176. package/dist/integrations/freshdesk/files/ai/tools/list-contacts.ts +37 -0
  177. package/dist/integrations/freshdesk/files/ai/tools/list-tickets.ts +59 -0
  178. package/dist/integrations/freshdesk/files/ai/tools/update-ticket.ts +61 -0
  179. package/dist/integrations/freshdesk/files/app/api/auth/freshdesk/callback/route.ts +11 -0
  180. package/dist/integrations/freshdesk/files/app/api/auth/freshdesk/route.ts +7 -0
  181. package/dist/integrations/freshdesk/files/lib/freshdesk-client.ts +178 -0
  182. package/dist/integrations/freshdesk/files/lib/token-store.ts +11 -0
  183. package/dist/integrations/github/files/app/api/auth/github/callback/route.ts +6 -127
  184. package/dist/integrations/github/files/app/api/auth/github/route.ts +4 -24
  185. package/dist/integrations/github/files/lib/token-store.ts +2 -110
  186. package/dist/integrations/gitlab/connector.json +100 -0
  187. package/dist/integrations/gitlab/files/_env.example +7 -0
  188. package/dist/integrations/gitlab/files/ai/tools/create-issue.ts +49 -0
  189. package/dist/integrations/gitlab/files/ai/tools/get-issue.ts +56 -0
  190. package/dist/integrations/gitlab/files/ai/tools/list-merge-requests.ts +75 -0
  191. package/dist/integrations/gitlab/files/ai/tools/list-projects.ts +51 -0
  192. package/dist/integrations/gitlab/files/ai/tools/search-issues.ts +67 -0
  193. package/dist/integrations/gitlab/files/app/api/auth/gitlab/callback/route.ts +11 -0
  194. package/dist/integrations/gitlab/files/app/api/auth/gitlab/route.ts +9 -0
  195. package/dist/integrations/gitlab/files/lib/gitlab-client.ts +366 -0
  196. package/dist/integrations/gitlab/files/lib/token-store.ts +5 -0
  197. package/dist/integrations/gmail/files/app/api/auth/gmail/callback/route.ts +7 -108
  198. package/dist/integrations/gmail/files/app/api/auth/gmail/route.ts +5 -23
  199. package/dist/integrations/gmail/files/lib/gmail-client.ts +16 -55
  200. package/dist/integrations/gmail/files/lib/token-store.ts +4 -109
  201. package/dist/integrations/hubspot/connector.json +98 -0
  202. package/dist/integrations/hubspot/files/_env.example +5 -0
  203. package/dist/integrations/hubspot/files/ai/tools/create-contact.ts +41 -0
  204. package/dist/integrations/hubspot/files/ai/tools/create-deal.ts +41 -0
  205. package/dist/integrations/hubspot/files/ai/tools/get-contact.ts +39 -0
  206. package/dist/integrations/hubspot/files/ai/tools/list-contacts.ts +43 -0
  207. package/dist/integrations/hubspot/files/ai/tools/list-deals.ts +41 -0
  208. package/dist/integrations/hubspot/files/app/api/auth/hubspot/callback/route.ts +11 -0
  209. package/dist/integrations/hubspot/files/app/api/auth/hubspot/route.ts +9 -0
  210. package/dist/integrations/hubspot/files/lib/hubspot-client.ts +393 -0
  211. package/dist/integrations/hubspot/files/lib/token-store.ts +5 -0
  212. package/dist/integrations/intercom/connector.json +85 -0
  213. package/dist/integrations/intercom/files/_env.example +4 -0
  214. package/dist/integrations/intercom/files/ai/tools/get-contact.ts +35 -0
  215. package/dist/integrations/intercom/files/ai/tools/get-conversation.ts +55 -0
  216. package/dist/integrations/intercom/files/ai/tools/list-contacts.ts +35 -0
  217. package/dist/integrations/intercom/files/ai/tools/list-conversations.ts +49 -0
  218. package/dist/integrations/intercom/files/ai/tools/send-message.ts +34 -0
  219. package/dist/integrations/intercom/files/app/api/auth/intercom/callback/route.ts +11 -0
  220. package/dist/integrations/intercom/files/app/api/auth/intercom/route.ts +7 -0
  221. package/dist/integrations/intercom/files/lib/intercom-client.ts +308 -0
  222. package/dist/integrations/intercom/files/lib/token-store.ts +11 -0
  223. package/dist/integrations/jira/connector.json +109 -0
  224. package/dist/integrations/jira/files/ai/tools/create-issue.ts +47 -0
  225. package/dist/integrations/jira/files/ai/tools/get-issue.ts +57 -0
  226. package/dist/integrations/jira/files/ai/tools/list-projects.ts +30 -0
  227. package/dist/integrations/jira/files/ai/tools/search-issues.ts +49 -0
  228. package/dist/integrations/jira/files/ai/tools/update-issue.ts +81 -0
  229. package/dist/integrations/jira/files/app/api/auth/jira/callback/route.ts +11 -0
  230. package/dist/integrations/jira/files/app/api/auth/jira/route.ts +9 -0
  231. package/dist/integrations/jira/files/lib/jira-client.ts +338 -0
  232. package/dist/integrations/jira/files/lib/token-store.ts +5 -0
  233. package/dist/integrations/linear/connector.json +100 -0
  234. package/dist/integrations/linear/files/_env.example +6 -0
  235. package/dist/integrations/linear/files/ai/tools/create-issue.ts +71 -0
  236. package/dist/integrations/linear/files/ai/tools/get-issue.ts +55 -0
  237. package/dist/integrations/linear/files/ai/tools/list-projects.ts +43 -0
  238. package/dist/integrations/linear/files/ai/tools/search-issues.ts +54 -0
  239. package/dist/integrations/linear/files/ai/tools/update-issue.ts +71 -0
  240. package/dist/integrations/linear/files/app/api/auth/linear/callback/route.ts +11 -0
  241. package/dist/integrations/linear/files/app/api/auth/linear/route.ts +9 -0
  242. package/dist/integrations/linear/files/lib/linear-client.ts +464 -0
  243. package/dist/integrations/linear/files/lib/token-store.ts +5 -0
  244. package/dist/integrations/mailchimp/connector.json +85 -0
  245. package/dist/integrations/mailchimp/files/_env.example +4 -0
  246. package/dist/integrations/mailchimp/files/ai/tools/get-campaign.ts +45 -0
  247. package/dist/integrations/mailchimp/files/ai/tools/get-list.ts +51 -0
  248. package/dist/integrations/mailchimp/files/ai/tools/list-campaigns.ts +46 -0
  249. package/dist/integrations/mailchimp/files/ai/tools/list-lists.ts +46 -0
  250. package/dist/integrations/mailchimp/files/ai/tools/list-members.ts +58 -0
  251. package/dist/integrations/mailchimp/files/app/api/auth/mailchimp/callback/route.ts +11 -0
  252. package/dist/integrations/mailchimp/files/app/api/auth/mailchimp/route.ts +7 -0
  253. package/dist/integrations/mailchimp/files/lib/mailchimp-client.ts +267 -0
  254. package/dist/integrations/mailchimp/files/lib/token-store.ts +11 -0
  255. package/dist/integrations/mixpanel/connector.json +96 -0
  256. package/dist/integrations/mixpanel/files/_env.example +11 -0
  257. package/dist/integrations/mixpanel/files/ai/tools/get-funnel.ts +46 -0
  258. package/dist/integrations/mixpanel/files/ai/tools/get-retention.ts +64 -0
  259. package/dist/integrations/mixpanel/files/ai/tools/list-cohorts.ts +46 -0
  260. package/dist/integrations/mixpanel/files/ai/tools/query-events.ts +43 -0
  261. package/dist/integrations/mixpanel/files/ai/tools/track-event.ts +41 -0
  262. package/dist/integrations/mixpanel/files/lib/mixpanel-client.ts +319 -0
  263. package/dist/integrations/mixpanel/files/lib/token-store.ts +43 -0
  264. package/dist/integrations/monday/connector.json +85 -0
  265. package/dist/integrations/monday/files/_env.example +4 -0
  266. package/dist/integrations/monday/files/ai/tools/create-item.ts +36 -0
  267. package/dist/integrations/monday/files/ai/tools/get-item.ts +31 -0
  268. package/dist/integrations/monday/files/ai/tools/list-boards.ts +29 -0
  269. package/dist/integrations/monday/files/ai/tools/list-items.ts +36 -0
  270. package/dist/integrations/monday/files/ai/tools/update-item.ts +36 -0
  271. package/dist/integrations/monday/files/app/api/auth/monday/callback/route.ts +11 -0
  272. package/dist/integrations/monday/files/app/api/auth/monday/route.ts +7 -0
  273. package/dist/integrations/monday/files/lib/monday-client.ts +329 -0
  274. package/dist/integrations/monday/files/lib/token-store.ts +11 -0
  275. package/dist/integrations/neon/connector.json +89 -0
  276. package/dist/integrations/neon/files/_env.example +6 -0
  277. package/dist/integrations/neon/files/ai/tools/describe-table.ts +38 -0
  278. package/dist/integrations/neon/files/ai/tools/list-branches.ts +35 -0
  279. package/dist/integrations/neon/files/ai/tools/list-projects.ts +31 -0
  280. package/dist/integrations/neon/files/ai/tools/list-tables.ts +49 -0
  281. package/dist/integrations/neon/files/ai/tools/query-database.ts +33 -0
  282. package/dist/integrations/neon/files/app/api/auth/neon/route.ts +51 -0
  283. package/dist/integrations/neon/files/lib/neon-client.ts +294 -0
  284. package/dist/integrations/neon/files/lib/token-store.ts +29 -0
  285. package/dist/integrations/notion/connector.json +87 -0
  286. package/dist/integrations/notion/files/_env.example +6 -0
  287. package/dist/integrations/notion/files/ai/tools/create-page.ts +32 -0
  288. package/dist/integrations/notion/files/ai/tools/query-database.ts +44 -0
  289. package/dist/integrations/notion/files/ai/tools/read-page.ts +34 -0
  290. package/dist/integrations/notion/files/ai/tools/search-notion.ts +51 -0
  291. package/dist/integrations/notion/files/app/api/auth/notion/callback/route.ts +11 -0
  292. package/dist/integrations/notion/files/app/api/auth/notion/route.ts +9 -0
  293. package/dist/integrations/notion/files/lib/notion-client.ts +218 -0
  294. package/dist/integrations/notion/files/lib/token-store.ts +5 -0
  295. package/dist/integrations/onedrive/connector.json +100 -0
  296. package/dist/integrations/onedrive/files/_env.example +23 -0
  297. package/dist/integrations/onedrive/files/ai/tools/download-file.ts +38 -0
  298. package/dist/integrations/onedrive/files/ai/tools/list-files.ts +63 -0
  299. package/dist/integrations/onedrive/files/ai/tools/search-files.ts +59 -0
  300. package/dist/integrations/onedrive/files/ai/tools/upload-file.ts +43 -0
  301. package/dist/integrations/onedrive/files/app/api/auth/onedrive/callback/route.ts +11 -0
  302. package/dist/integrations/onedrive/files/app/api/auth/onedrive/route.ts +9 -0
  303. package/dist/integrations/onedrive/files/lib/onedrive-client.ts +314 -0
  304. package/dist/integrations/onedrive/files/lib/token-store.ts +5 -0
  305. package/dist/integrations/outlook/README.md +308 -0
  306. package/dist/integrations/outlook/connector.json +98 -0
  307. package/dist/integrations/outlook/files/_env.example +8 -0
  308. package/dist/integrations/outlook/files/ai/tools/get-email.ts +47 -0
  309. package/dist/integrations/outlook/files/ai/tools/list-emails.ts +46 -0
  310. package/dist/integrations/outlook/files/ai/tools/list-folders.ts +22 -0
  311. package/dist/integrations/outlook/files/ai/tools/search-emails.ts +41 -0
  312. package/dist/integrations/outlook/files/ai/tools/send-email.ts +41 -0
  313. package/dist/integrations/outlook/files/app/api/auth/outlook/callback/route.ts +11 -0
  314. package/dist/integrations/outlook/files/app/api/auth/outlook/route.ts +9 -0
  315. package/dist/integrations/outlook/files/lib/outlook-client.ts +204 -0
  316. package/dist/integrations/outlook/files/lib/token-store.ts +5 -0
  317. package/dist/integrations/pipedrive/connector.json +85 -0
  318. package/dist/integrations/pipedrive/files/_env.example +4 -0
  319. package/dist/integrations/pipedrive/files/ai/tools/create-deal.ts +44 -0
  320. package/dist/integrations/pipedrive/files/ai/tools/get-deal.ts +34 -0
  321. package/dist/integrations/pipedrive/files/ai/tools/list-deals.ts +40 -0
  322. package/dist/integrations/pipedrive/files/ai/tools/list-persons.ts +33 -0
  323. package/dist/integrations/pipedrive/files/ai/tools/update-deal.ts +46 -0
  324. package/dist/integrations/pipedrive/files/app/api/auth/pipedrive/callback/route.ts +11 -0
  325. package/dist/integrations/pipedrive/files/app/api/auth/pipedrive/route.ts +7 -0
  326. package/dist/integrations/pipedrive/files/lib/pipedrive-client.ts +259 -0
  327. package/dist/integrations/pipedrive/files/lib/token-store.ts +11 -0
  328. package/dist/integrations/posthog/connector.json +84 -0
  329. package/dist/integrations/posthog/files/_env.example +6 -0
  330. package/dist/integrations/posthog/files/ai/tools/capture-event.ts +37 -0
  331. package/dist/integrations/posthog/files/ai/tools/get-trends.ts +44 -0
  332. package/dist/integrations/posthog/files/ai/tools/list-feature-flags.ts +38 -0
  333. package/dist/integrations/posthog/files/ai/tools/list-persons.ts +32 -0
  334. package/dist/integrations/posthog/files/lib/posthog-client.ts +286 -0
  335. package/dist/integrations/posthog/files/lib/token-store.ts +21 -0
  336. package/dist/integrations/quickbooks/connector.json +85 -0
  337. package/dist/integrations/quickbooks/files/_env.example +4 -0
  338. package/dist/integrations/quickbooks/files/ai/tools/create-invoice.ts +48 -0
  339. package/dist/integrations/quickbooks/files/ai/tools/get-customer.ts +36 -0
  340. package/dist/integrations/quickbooks/files/ai/tools/get-invoice.ts +46 -0
  341. package/dist/integrations/quickbooks/files/ai/tools/list-customers.ts +37 -0
  342. package/dist/integrations/quickbooks/files/ai/tools/list-invoices.ts +40 -0
  343. package/dist/integrations/quickbooks/files/app/api/auth/quickbooks/callback/route.ts +11 -0
  344. package/dist/integrations/quickbooks/files/app/api/auth/quickbooks/route.ts +7 -0
  345. package/dist/integrations/quickbooks/files/lib/quickbooks-client.ts +252 -0
  346. package/dist/integrations/quickbooks/files/lib/token-store.ts +11 -0
  347. package/dist/integrations/salesforce/connector.json +104 -0
  348. package/dist/integrations/salesforce/files/ai/tools/create-lead.ts +101 -0
  349. package/dist/integrations/salesforce/files/ai/tools/get-account.ts +53 -0
  350. package/dist/integrations/salesforce/files/ai/tools/list-accounts.ts +50 -0
  351. package/dist/integrations/salesforce/files/ai/tools/list-contacts.ts +54 -0
  352. package/dist/integrations/salesforce/files/ai/tools/list-opportunities.ts +55 -0
  353. package/dist/integrations/salesforce/files/app/api/auth/salesforce/callback/route.ts +11 -0
  354. package/dist/integrations/salesforce/files/app/api/auth/salesforce/route.ts +9 -0
  355. package/dist/integrations/salesforce/files/lib/salesforce-client.ts +539 -0
  356. package/dist/integrations/salesforce/files/lib/token-store.ts +5 -0
  357. package/dist/integrations/sentry/connector.json +84 -0
  358. package/dist/integrations/sentry/files/_env.example +6 -0
  359. package/dist/integrations/sentry/files/ai/tools/get-issue.ts +66 -0
  360. package/dist/integrations/sentry/files/ai/tools/list-issues.ts +57 -0
  361. package/dist/integrations/sentry/files/ai/tools/list-projects.ts +32 -0
  362. package/dist/integrations/sentry/files/ai/tools/resolve-issue.ts +28 -0
  363. package/dist/integrations/sentry/files/lib/sentry-client.ts +268 -0
  364. package/dist/integrations/sentry/files/lib/token-store.ts +29 -0
  365. package/dist/integrations/servicenow/connector.json +66 -0
  366. package/dist/integrations/servicenow/files/_env.example +5 -0
  367. package/dist/integrations/servicenow/files/ai/tools/create-incident.ts +58 -0
  368. package/dist/integrations/servicenow/files/ai/tools/get-incident.ts +59 -0
  369. package/dist/integrations/servicenow/files/ai/tools/list-incidents.ts +72 -0
  370. package/dist/integrations/servicenow/files/ai/tools/search-knowledge.ts +48 -0
  371. package/dist/integrations/servicenow/files/ai/tools/update-incident.ts +60 -0
  372. package/dist/integrations/servicenow/files/app/api/auth/servicenow/callback/route.ts +89 -0
  373. package/dist/integrations/servicenow/files/app/api/auth/servicenow/route.ts +42 -0
  374. package/dist/integrations/servicenow/files/lib/servicenow-client.ts +239 -0
  375. package/dist/integrations/servicenow/files/lib/token-store.ts +42 -0
  376. package/dist/integrations/sharepoint/connector.json +99 -0
  377. package/dist/integrations/sharepoint/files/ai/tools/get-file.ts +93 -0
  378. package/dist/integrations/sharepoint/files/ai/tools/get-site.ts +51 -0
  379. package/dist/integrations/sharepoint/files/ai/tools/list-files.ts +63 -0
  380. package/dist/integrations/sharepoint/files/ai/tools/list-sites.ts +28 -0
  381. package/dist/integrations/sharepoint/files/ai/tools/upload-file.ts +72 -0
  382. package/dist/integrations/sharepoint/files/app/api/auth/sharepoint/callback/route.ts +11 -0
  383. package/dist/integrations/sharepoint/files/app/api/auth/sharepoint/route.ts +9 -0
  384. package/dist/integrations/sharepoint/files/lib/sharepoint-client.ts +420 -0
  385. package/dist/integrations/sharepoint/files/lib/token-store.ts +5 -0
  386. package/dist/integrations/sheets/README.md +331 -0
  387. package/dist/integrations/sheets/connector.json +99 -0
  388. package/dist/integrations/sheets/files/_env.example +8 -0
  389. package/dist/integrations/sheets/files/ai/tools/create-spreadsheet.ts +85 -0
  390. package/dist/integrations/sheets/files/ai/tools/get-spreadsheet.ts +39 -0
  391. package/dist/integrations/sheets/files/ai/tools/list-spreadsheets.ts +41 -0
  392. package/dist/integrations/sheets/files/ai/tools/read-range.ts +35 -0
  393. package/dist/integrations/sheets/files/ai/tools/write-range.ts +51 -0
  394. package/dist/integrations/sheets/files/app/api/auth/sheets/callback/route.ts +11 -0
  395. package/dist/integrations/sheets/files/app/api/auth/sheets/route.ts +9 -0
  396. package/dist/integrations/sheets/files/lib/sheets-client.ts +425 -0
  397. package/dist/integrations/sheets/files/lib/token-store.ts +5 -0
  398. package/dist/integrations/shopify/connector.json +99 -0
  399. package/dist/integrations/shopify/files/_env.example +5 -0
  400. package/dist/integrations/shopify/files/ai/tools/get-order.ts +49 -0
  401. package/dist/integrations/shopify/files/ai/tools/get-product.ts +39 -0
  402. package/dist/integrations/shopify/files/ai/tools/list-customers.ts +40 -0
  403. package/dist/integrations/shopify/files/ai/tools/list-orders.ts +52 -0
  404. package/dist/integrations/shopify/files/ai/tools/list-products.ts +39 -0
  405. package/dist/integrations/shopify/files/app/api/auth/shopify/callback/route.ts +11 -0
  406. package/dist/integrations/shopify/files/app/api/auth/shopify/route.ts +7 -0
  407. package/dist/integrations/shopify/files/lib/shopify-client.ts +198 -0
  408. package/dist/integrations/shopify/files/lib/token-store.ts +11 -0
  409. package/dist/integrations/slack/files/app/api/auth/slack/callback/route.ts +6 -127
  410. package/dist/integrations/slack/files/app/api/auth/slack/route.ts +4 -24
  411. package/dist/integrations/slack/files/lib/token-store.ts +2 -110
  412. package/dist/integrations/snowflake/connector.json +151 -0
  413. package/dist/integrations/snowflake/files/_env.example +16 -0
  414. package/dist/integrations/snowflake/files/ai/tools/describe-table.ts +57 -0
  415. package/dist/integrations/snowflake/files/ai/tools/list-databases.ts +34 -0
  416. package/dist/integrations/snowflake/files/ai/tools/list-schemas.ts +40 -0
  417. package/dist/integrations/snowflake/files/ai/tools/list-tables.ts +49 -0
  418. package/dist/integrations/snowflake/files/ai/tools/run-query.ts +119 -0
  419. package/dist/integrations/snowflake/files/lib/snowflake-client.ts +389 -0
  420. package/dist/integrations/snowflake/files/lib/token-store.ts +77 -0
  421. package/dist/integrations/stripe/connector.json +97 -0
  422. package/dist/integrations/stripe/files/_env.example +6 -0
  423. package/dist/integrations/stripe/files/ai/tools/get-balance.ts +28 -0
  424. package/dist/integrations/stripe/files/ai/tools/get-customer.ts +26 -0
  425. package/dist/integrations/stripe/files/ai/tools/list-customers.ts +42 -0
  426. package/dist/integrations/stripe/files/ai/tools/list-payments.ts +45 -0
  427. package/dist/integrations/stripe/files/ai/tools/list-subscriptions.ts +67 -0
  428. package/dist/integrations/stripe/files/app/api/auth/stripe/route.ts +71 -0
  429. package/dist/integrations/stripe/files/lib/stripe-client.ts +376 -0
  430. package/dist/integrations/stripe/files/lib/token-store.ts +21 -0
  431. package/dist/integrations/supabase/connector.json +101 -0
  432. package/dist/integrations/supabase/files/_env.example +6 -0
  433. package/dist/integrations/supabase/files/ai/tools/delete-row.ts +77 -0
  434. package/dist/integrations/supabase/files/ai/tools/insert-row.ts +35 -0
  435. package/dist/integrations/supabase/files/ai/tools/list-tables.ts +60 -0
  436. package/dist/integrations/supabase/files/ai/tools/query-table.ts +48 -0
  437. package/dist/integrations/supabase/files/ai/tools/update-row.ts +64 -0
  438. package/dist/integrations/supabase/files/app/api/auth/supabase/route.ts +91 -0
  439. package/dist/integrations/supabase/files/lib/supabase-client.ts +296 -0
  440. package/dist/integrations/supabase/files/lib/token-store.ts +47 -0
  441. package/dist/integrations/teams/README.md +256 -0
  442. package/dist/integrations/teams/connector.json +99 -0
  443. package/dist/integrations/teams/files/ai/tools/get-messages.ts +55 -0
  444. package/dist/integrations/teams/files/ai/tools/list-channels.ts +28 -0
  445. package/dist/integrations/teams/files/ai/tools/list-chats.ts +41 -0
  446. package/dist/integrations/teams/files/ai/tools/list-teams.ts +27 -0
  447. package/dist/integrations/teams/files/ai/tools/send-message.ts +61 -0
  448. package/dist/integrations/teams/files/app/api/auth/teams/callback/route.ts +11 -0
  449. package/dist/integrations/teams/files/app/api/auth/teams/route.ts +9 -0
  450. package/dist/integrations/teams/files/lib/teams-client.ts +345 -0
  451. package/dist/integrations/teams/files/lib/token-store.ts +5 -0
  452. package/dist/integrations/trello/connector.json +85 -0
  453. package/dist/integrations/trello/files/_env.example +4 -0
  454. package/dist/integrations/trello/files/ai/tools/create-card.ts +54 -0
  455. package/dist/integrations/trello/files/ai/tools/get-card.ts +33 -0
  456. package/dist/integrations/trello/files/ai/tools/list-boards.ts +29 -0
  457. package/dist/integrations/trello/files/ai/tools/list-cards.ts +52 -0
  458. package/dist/integrations/trello/files/ai/tools/update-card.ts +65 -0
  459. package/dist/integrations/trello/files/app/api/auth/trello/callback/route.ts +11 -0
  460. package/dist/integrations/trello/files/app/api/auth/trello/route.ts +7 -0
  461. package/dist/integrations/trello/files/lib/token-store.ts +11 -0
  462. package/dist/integrations/trello/files/lib/trello-client.ts +202 -0
  463. package/dist/integrations/twilio/connector.json +146 -0
  464. package/dist/integrations/twilio/files/_env.example +14 -0
  465. package/dist/integrations/twilio/files/ai/tools/get-message.ts +58 -0
  466. package/dist/integrations/twilio/files/ai/tools/list-calls.ts +129 -0
  467. package/dist/integrations/twilio/files/ai/tools/list-messages.ts +97 -0
  468. package/dist/integrations/twilio/files/ai/tools/send-sms.ts +75 -0
  469. package/dist/integrations/twilio/files/ai/tools/send-whatsapp.ts +81 -0
  470. package/dist/integrations/twilio/files/lib/token-store.ts +60 -0
  471. package/dist/integrations/twilio/files/lib/twilio-client.ts +375 -0
  472. package/dist/integrations/twitter/connector.json +87 -0
  473. package/dist/integrations/twitter/files/_env.example +6 -0
  474. package/dist/integrations/twitter/files/ai/tools/get-timeline.ts +59 -0
  475. package/dist/integrations/twitter/files/ai/tools/post-tweet.ts +49 -0
  476. package/dist/integrations/twitter/files/ai/tools/search-tweets.ts +71 -0
  477. package/dist/integrations/twitter/files/app/api/auth/twitter/callback/route.ts +11 -0
  478. package/dist/integrations/twitter/files/app/api/auth/twitter/route.ts +9 -0
  479. package/dist/integrations/twitter/files/lib/token-store.ts +5 -0
  480. package/dist/integrations/twitter/files/lib/twitter-client.ts +236 -0
  481. package/dist/integrations/webex/connector.json +85 -0
  482. package/dist/integrations/webex/files/_env.example +4 -0
  483. package/dist/integrations/webex/files/ai/tools/create-meeting.ts +69 -0
  484. package/dist/integrations/webex/files/ai/tools/get-meeting.ts +31 -0
  485. package/dist/integrations/webex/files/ai/tools/list-meetings.ts +44 -0
  486. package/dist/integrations/webex/files/ai/tools/list-rooms.ts +35 -0
  487. package/dist/integrations/webex/files/ai/tools/send-message.ts +51 -0
  488. package/dist/integrations/webex/files/app/api/auth/webex/callback/route.ts +11 -0
  489. package/dist/integrations/webex/files/app/api/auth/webex/route.ts +7 -0
  490. package/dist/integrations/webex/files/lib/token-store.ts +11 -0
  491. package/dist/integrations/webex/files/lib/webex-client.ts +279 -0
  492. package/dist/integrations/xero/connector.json +85 -0
  493. package/dist/integrations/xero/files/_env.example +4 -0
  494. package/dist/integrations/xero/files/ai/tools/create-invoice.ts +65 -0
  495. package/dist/integrations/xero/files/ai/tools/get-contact.ts +40 -0
  496. package/dist/integrations/xero/files/ai/tools/get-invoice.ts +44 -0
  497. package/dist/integrations/xero/files/ai/tools/list-contacts.ts +54 -0
  498. package/dist/integrations/xero/files/ai/tools/list-invoices.ts +54 -0
  499. package/dist/integrations/xero/files/app/api/auth/xero/callback/route.ts +11 -0
  500. package/dist/integrations/xero/files/app/api/auth/xero/route.ts +7 -0
  501. package/dist/integrations/xero/files/lib/token-store.ts +11 -0
  502. package/dist/integrations/xero/files/lib/xero-client.ts +292 -0
  503. package/dist/integrations/zendesk/connector.json +61 -0
  504. package/dist/integrations/zendesk/files/_env.example +5 -0
  505. package/dist/integrations/zendesk/files/ai/tools/create-ticket.ts +82 -0
  506. package/dist/integrations/zendesk/files/ai/tools/get-ticket.ts +53 -0
  507. package/dist/integrations/zendesk/files/ai/tools/list-tickets.ts +60 -0
  508. package/dist/integrations/zendesk/files/ai/tools/search-tickets.ts +56 -0
  509. package/dist/integrations/zendesk/files/app/api/auth/zendesk/callback/route.ts +91 -0
  510. package/dist/integrations/zendesk/files/app/api/auth/zendesk/route.ts +41 -0
  511. package/dist/integrations/zendesk/files/lib/token-store.ts +47 -0
  512. package/dist/integrations/zendesk/files/lib/zendesk-client.ts +265 -0
  513. package/dist/integrations/zoom/connector.json +85 -0
  514. package/dist/integrations/zoom/files/_env.example +4 -0
  515. package/dist/integrations/zoom/files/ai/tools/create-meeting.ts +106 -0
  516. package/dist/integrations/zoom/files/ai/tools/delete-meeting.ts +32 -0
  517. package/dist/integrations/zoom/files/ai/tools/get-meeting.ts +44 -0
  518. package/dist/integrations/zoom/files/ai/tools/list-meetings.ts +47 -0
  519. package/dist/integrations/zoom/files/ai/tools/update-meeting.ts +111 -0
  520. package/dist/integrations/zoom/files/app/api/auth/zoom/callback/route.ts +11 -0
  521. package/dist/integrations/zoom/files/app/api/auth/zoom/route.ts +7 -0
  522. package/dist/integrations/zoom/files/lib/token-store.ts +11 -0
  523. package/dist/integrations/zoom/files/lib/zoom-client.ts +228 -0
  524. package/dist/oauth/handlers.js +554 -0
  525. package/dist/oauth/handlers.js.map +7 -0
  526. package/dist/oauth/index.js +1157 -0
  527. package/dist/oauth/index.js.map +7 -0
  528. package/dist/oauth/providers.js +927 -0
  529. package/dist/oauth/providers.js.map +7 -0
  530. package/dist/oauth/token-store.js +82 -0
  531. package/dist/oauth/token-store.js.map +7 -0
  532. package/package.json +25 -1
  533. package/dist/integrations/gmail/files/lib/oauth.ts +0 -145
  534. package/dist/integrations/slack/files/lib/oauth.ts +0 -145
  535. /package/dist/integrations/{calendar → docs-google}/files/lib/oauth.ts +0 -0
  536. /package/dist/integrations/{github → drive}/files/lib/oauth.ts +0 -0
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { useEffect, useState } from "react";
3
+ import { useEffect, useMemo, useState } from "react";
4
4
 
5
5
  interface Integration {
6
6
  id: string;
@@ -19,72 +19,686 @@ interface SetupStep {
19
19
  link?: string;
20
20
  }
21
21
 
22
- const OAUTH_SETUP_GUIDES: Record<string, { title: string; steps: string[]; link: string }> = {
22
+ interface SetupGuide {
23
+ title: string;
24
+ steps: string[];
25
+ link: string;
26
+ envVars: string[];
27
+ category: string;
28
+ }
29
+
30
+ interface TokenStorageStatus {
31
+ mode: "memory" | "database" | "kv" | "redis" | "custom";
32
+ encrypted: boolean;
33
+ }
34
+
35
+ // Categories for organizing integrations
36
+ const CATEGORIES = [
37
+ { id: "google", name: "Google Services", icon: "google" },
38
+ { id: "microsoft", name: "Microsoft Services", icon: "microsoft" },
39
+ { id: "atlassian", name: "Atlassian", icon: "atlassian" },
40
+ { id: "communication", name: "Communication", icon: "chat" },
41
+ { id: "development", name: "Development", icon: "code" },
42
+ { id: "productivity", name: "Productivity", icon: "tasks" },
43
+ { id: "storage", name: "Storage", icon: "folder" },
44
+ { id: "infrastructure", name: "Infrastructure", icon: "server" },
45
+ { id: "sales", name: "Sales & CRM", icon: "users" },
46
+ { id: "support", name: "Support", icon: "headset" },
47
+ { id: "finance", name: "Finance", icon: "dollar" },
48
+ { id: "marketing", name: "Marketing", icon: "megaphone" },
49
+ { id: "design", name: "Design", icon: "palette" },
50
+ { id: "ai", name: "AI Providers", icon: "brain" },
51
+ ] as const;
52
+
53
+ const OAUTH_SETUP_GUIDES: Record<string, SetupGuide> = {
54
+ // Google Services
23
55
  gmail: {
24
- title: "Google OAuth Setup (Gmail & Calendar)",
56
+ title: "Google OAuth Setup (Gmail)",
57
+ category: "google",
25
58
  steps: [
26
59
  "Go to Google Cloud Console",
27
60
  "Create a new project or select existing one",
28
- "Enable Gmail API and Calendar API",
61
+ "Enable Gmail API in APIs & Services > Library",
62
+ "Go to APIs & Services > Credentials",
29
63
  "Create OAuth 2.0 credentials (Web application)",
30
64
  "Add redirect URI: http://localhost:3000/api/auth/gmail/callback",
31
65
  "Copy Client ID and Secret to your .env file",
32
66
  ],
33
67
  link: "https://console.cloud.google.com/apis/credentials",
68
+ envVars: ["GOOGLE_CLIENT_ID", "GOOGLE_CLIENT_SECRET"],
34
69
  },
35
70
  calendar: {
36
71
  title: "Google Calendar Setup",
72
+ category: "google",
37
73
  steps: [
38
- "Uses same credentials as Gmail",
39
- "Make sure Calendar API is enabled",
74
+ "Uses same Google OAuth credentials as Gmail",
75
+ "Enable Calendar API in Google Cloud Console",
40
76
  "Add redirect URI: http://localhost:3000/api/auth/calendar/callback",
41
77
  ],
42
- link: "https://console.cloud.google.com/apis/credentials",
78
+ link: "https://console.cloud.google.com/apis/library/calendar-json.googleapis.com",
79
+ envVars: ["GOOGLE_CLIENT_ID", "GOOGLE_CLIENT_SECRET"],
80
+ },
81
+ drive: {
82
+ title: "Google Drive Setup",
83
+ category: "google",
84
+ steps: [
85
+ "Uses same Google OAuth credentials",
86
+ "Enable Drive API in Google Cloud Console",
87
+ "Add redirect URI: http://localhost:3000/api/auth/drive/callback",
88
+ ],
89
+ link: "https://console.cloud.google.com/apis/library/drive.googleapis.com",
90
+ envVars: ["GOOGLE_CLIENT_ID", "GOOGLE_CLIENT_SECRET"],
91
+ },
92
+ sheets: {
93
+ title: "Google Sheets Setup",
94
+ category: "google",
95
+ steps: [
96
+ "Uses same Google OAuth credentials",
97
+ "Enable Sheets API in Google Cloud Console",
98
+ "Add redirect URI: http://localhost:3000/api/auth/sheets/callback",
99
+ ],
100
+ link: "https://console.cloud.google.com/apis/library/sheets.googleapis.com",
101
+ envVars: ["GOOGLE_CLIENT_ID", "GOOGLE_CLIENT_SECRET"],
102
+ },
103
+ "docs-google": {
104
+ title: "Google Docs Setup",
105
+ category: "google",
106
+ steps: [
107
+ "Uses same Google OAuth credentials",
108
+ "Enable Docs API in Google Cloud Console",
109
+ "Add redirect URI: http://localhost:3000/api/auth/docs-google/callback",
110
+ ],
111
+ link: "https://console.cloud.google.com/apis/library/docs.googleapis.com",
112
+ envVars: ["GOOGLE_CLIENT_ID", "GOOGLE_CLIENT_SECRET"],
113
+ },
114
+
115
+ // Microsoft Services
116
+ outlook: {
117
+ title: "Microsoft Outlook Setup",
118
+ category: "microsoft",
119
+ steps: [
120
+ "Go to Azure Portal > Azure Active Directory",
121
+ "Click App registrations > New registration",
122
+ "Set redirect URI: http://localhost:3000/api/auth/outlook/callback",
123
+ "Go to API permissions > Add Microsoft Graph permissions",
124
+ "Add: Mail.Read, Mail.Send, Mail.ReadWrite",
125
+ "Go to Certificates & secrets > New client secret",
126
+ "Copy Application ID and Secret to .env",
127
+ ],
128
+ link: "https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade",
129
+ envVars: ["MICROSOFT_CLIENT_ID", "MICROSOFT_CLIENT_SECRET"],
130
+ },
131
+ teams: {
132
+ title: "Microsoft Teams Setup",
133
+ category: "microsoft",
134
+ steps: [
135
+ "Uses same Microsoft OAuth credentials as Outlook",
136
+ "Add Teams permissions: Chat.Read, Chat.ReadWrite, Channel.ReadBasic.All",
137
+ "Add redirect URI: http://localhost:3000/api/auth/teams/callback",
138
+ ],
139
+ link: "https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade",
140
+ envVars: ["MICROSOFT_CLIENT_ID", "MICROSOFT_CLIENT_SECRET"],
141
+ },
142
+ onedrive: {
143
+ title: "Microsoft OneDrive Setup",
144
+ category: "microsoft",
145
+ steps: [
146
+ "Uses same Microsoft OAuth credentials",
147
+ "Add permissions: Files.Read, Files.ReadWrite",
148
+ "Add redirect URI: http://localhost:3000/api/auth/onedrive/callback",
149
+ ],
150
+ link: "https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade",
151
+ envVars: ["MICROSOFT_CLIENT_ID", "MICROSOFT_CLIENT_SECRET"],
43
152
  },
153
+ sharepoint: {
154
+ title: "Microsoft SharePoint Setup",
155
+ category: "microsoft",
156
+ steps: [
157
+ "Uses same Microsoft OAuth credentials",
158
+ "Add permissions: Sites.Read.All, Sites.ReadWrite.All",
159
+ "Add redirect URI: http://localhost:3000/api/auth/sharepoint/callback",
160
+ ],
161
+ link: "https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade",
162
+ envVars: ["MICROSOFT_CLIENT_ID", "MICROSOFT_CLIENT_SECRET"],
163
+ },
164
+
165
+ // Atlassian Services
166
+ jira: {
167
+ title: "Atlassian Jira Setup",
168
+ category: "atlassian",
169
+ steps: [
170
+ "Go to Atlassian Developer Console",
171
+ "Click Create > OAuth 2.0 integration",
172
+ "Add Jira API scopes: read:jira-work, write:jira-work",
173
+ "Set callback URL: http://localhost:3000/api/auth/jira/callback",
174
+ "Copy Client ID and Secret to .env",
175
+ ],
176
+ link: "https://developer.atlassian.com/console/myapps/",
177
+ envVars: ["ATLASSIAN_CLIENT_ID", "ATLASSIAN_CLIENT_SECRET"],
178
+ },
179
+ confluence: {
180
+ title: "Atlassian Confluence Setup",
181
+ category: "atlassian",
182
+ steps: [
183
+ "Uses same Atlassian OAuth credentials as Jira",
184
+ "Add Confluence scopes: read:confluence-content.all, write:confluence-content",
185
+ "Add callback URL: http://localhost:3000/api/auth/confluence/callback",
186
+ ],
187
+ link: "https://developer.atlassian.com/console/myapps/",
188
+ envVars: ["ATLASSIAN_CLIENT_ID", "ATLASSIAN_CLIENT_SECRET"],
189
+ },
190
+ bitbucket: {
191
+ title: "Atlassian Bitbucket Setup",
192
+ category: "atlassian",
193
+ steps: [
194
+ "Go to Bitbucket Settings > OAuth consumers",
195
+ "Click Add consumer",
196
+ "Set callback URL: http://localhost:3000/api/auth/bitbucket/callback",
197
+ "Add permissions: repository:read, repository:write",
198
+ "Copy Key and Secret to .env",
199
+ ],
200
+ link: "https://bitbucket.org/account/settings/app-passwords/",
201
+ envVars: ["BITBUCKET_CLIENT_ID", "BITBUCKET_CLIENT_SECRET"],
202
+ },
203
+
204
+ // Communication
44
205
  slack: {
45
206
  title: "Slack App Setup",
207
+ category: "communication",
46
208
  steps: [
47
209
  "Go to Slack API Apps page",
48
- "Create New App > From scratch",
49
- "Add OAuth Scopes: channels:read, chat:write, users:read",
50
- "Install to Workspace",
51
- "Copy Client ID and Secret to your .env file",
210
+ "Click Create New App > From scratch",
211
+ "Go to OAuth & Permissions",
212
+ "Add scopes: channels:read, chat:write, users:read, channels:history",
52
213
  "Add redirect URL: http://localhost:3000/api/auth/slack/callback",
214
+ "Install to Workspace",
215
+ "Copy Client ID and Secret to .env",
53
216
  ],
54
217
  link: "https://api.slack.com/apps",
218
+ envVars: ["SLACK_CLIENT_ID", "SLACK_CLIENT_SECRET"],
219
+ },
220
+ discord: {
221
+ title: "Discord App Setup",
222
+ category: "communication",
223
+ steps: [
224
+ "Go to Discord Developer Portal",
225
+ "Click New Application",
226
+ "Go to OAuth2 section",
227
+ "Add redirect: http://localhost:3000/api/auth/discord/callback",
228
+ "Copy Client ID and Secret to .env",
229
+ "Add bot permissions as needed",
230
+ ],
231
+ link: "https://discord.com/developers/applications",
232
+ envVars: ["DISCORD_CLIENT_ID", "DISCORD_CLIENT_SECRET"],
55
233
  },
234
+ zoom: {
235
+ title: "Zoom App Setup",
236
+ category: "communication",
237
+ steps: [
238
+ "Go to Zoom App Marketplace",
239
+ "Click Develop > Build App",
240
+ "Choose OAuth app type",
241
+ "Add redirect URL: http://localhost:3000/api/auth/zoom/callback",
242
+ "Add scopes: meeting:read, meeting:write, user:read",
243
+ "Copy Client ID and Secret to .env",
244
+ ],
245
+ link: "https://marketplace.zoom.us/develop/create",
246
+ envVars: ["ZOOM_CLIENT_ID", "ZOOM_CLIENT_SECRET"],
247
+ },
248
+ webex: {
249
+ title: "Webex Integration Setup",
250
+ category: "communication",
251
+ steps: [
252
+ "Go to Webex Developer Portal",
253
+ "Create a new integration",
254
+ "Add redirect URI: http://localhost:3000/api/auth/webex/callback",
255
+ "Select required scopes",
256
+ "Copy Client ID and Secret to .env",
257
+ ],
258
+ link: "https://developer.webex.com/my-apps",
259
+ envVars: ["WEBEX_CLIENT_ID", "WEBEX_CLIENT_SECRET"],
260
+ },
261
+ twilio: {
262
+ title: "Twilio Setup",
263
+ category: "communication",
264
+ steps: [
265
+ "Go to Twilio Console",
266
+ "Copy Account SID and Auth Token",
267
+ "Get a phone number for SMS",
268
+ "Add credentials to .env",
269
+ ],
270
+ link: "https://console.twilio.com/",
271
+ envVars: ["TWILIO_ACCOUNT_SID", "TWILIO_AUTH_TOKEN", "TWILIO_PHONE_NUMBER"],
272
+ },
273
+
274
+ // Development
56
275
  github: {
57
276
  title: "GitHub OAuth App Setup",
277
+ category: "development",
58
278
  steps: [
59
279
  "Go to GitHub Developer Settings",
60
- "Click 'New OAuth App'",
61
- "Set Homepage URL to http://localhost:3000",
62
- "Set callback URL to http://localhost:3000/api/auth/github/callback",
63
- "Copy Client ID and Secret to your .env file",
280
+ "Click OAuth Apps > New OAuth App",
281
+ "Set Homepage URL: http://localhost:3000",
282
+ "Set callback URL: http://localhost:3000/api/auth/github/callback",
283
+ "Copy Client ID and Secret to .env",
64
284
  ],
65
285
  link: "https://github.com/settings/developers",
286
+ envVars: ["GITHUB_CLIENT_ID", "GITHUB_CLIENT_SECRET"],
66
287
  },
67
- jira: {
68
- title: "Atlassian (Jira) Setup",
288
+ gitlab: {
289
+ title: "GitLab OAuth Setup",
290
+ category: "development",
69
291
  steps: [
70
- "Go to Atlassian Developer Console",
71
- "Create OAuth 2.0 integration",
72
- "Add Jira API scopes",
73
- "Set callback URL: http://localhost:3000/api/auth/jira/callback",
74
- "Copy Client ID and Secret to your .env file",
292
+ "Go to GitLab User Settings > Applications",
293
+ "Create new application",
294
+ "Add redirect URI: http://localhost:3000/api/auth/gitlab/callback",
295
+ "Select scopes: api, read_user, read_repository",
296
+ "Copy Application ID and Secret to .env",
75
297
  ],
76
- link: "https://developer.atlassian.com/console/myapps/",
298
+ link: "https://gitlab.com/-/profile/applications",
299
+ envVars: ["GITLAB_CLIENT_ID", "GITLAB_CLIENT_SECRET"],
77
300
  },
301
+ sentry: {
302
+ title: "Sentry Setup",
303
+ category: "development",
304
+ steps: [
305
+ "Go to Sentry Settings > Developer Settings",
306
+ "Create new integration",
307
+ "Add redirect URL: http://localhost:3000/api/auth/sentry/callback",
308
+ "Copy Client ID and Secret to .env",
309
+ ],
310
+ link: "https://sentry.io/settings/developer-settings/",
311
+ envVars: ["SENTRY_CLIENT_ID", "SENTRY_CLIENT_SECRET"],
312
+ },
313
+ posthog: {
314
+ title: "PostHog Setup",
315
+ category: "development",
316
+ steps: [
317
+ "Go to PostHog Project Settings",
318
+ "Copy your Project API Key",
319
+ "Add to .env file",
320
+ ],
321
+ link: "https://app.posthog.com/project/settings",
322
+ envVars: ["POSTHOG_API_KEY", "POSTHOG_HOST"],
323
+ },
324
+ mixpanel: {
325
+ title: "Mixpanel Setup",
326
+ category: "development",
327
+ steps: [
328
+ "Go to Mixpanel Project Settings",
329
+ "Copy your Project Token",
330
+ "For API access, create a Service Account",
331
+ "Add credentials to .env",
332
+ ],
333
+ link: "https://mixpanel.com/settings/project",
334
+ envVars: ["MIXPANEL_TOKEN", "MIXPANEL_API_SECRET"],
335
+ },
336
+
337
+ // Productivity
78
338
  notion: {
79
339
  title: "Notion Integration Setup",
340
+ category: "productivity",
80
341
  steps: [
81
342
  "Go to Notion Integrations page",
82
- "Create new integration",
343
+ "Click New integration",
344
+ "Name your integration and select workspace",
83
345
  "Copy the Internal Integration Token",
84
- "Add token to your .env file",
85
- "Share desired pages with your integration",
346
+ "Share desired pages/databases with your integration",
347
+ "Add token to .env",
86
348
  ],
87
349
  link: "https://www.notion.so/my-integrations",
350
+ envVars: ["NOTION_API_KEY"],
351
+ },
352
+ linear: {
353
+ title: "Linear OAuth Setup",
354
+ category: "productivity",
355
+ steps: [
356
+ "Go to Linear Settings > API",
357
+ "Create new OAuth application",
358
+ "Add redirect URI: http://localhost:3000/api/auth/linear/callback",
359
+ "Copy Client ID and Secret to .env",
360
+ ],
361
+ link: "https://linear.app/settings/api",
362
+ envVars: ["LINEAR_CLIENT_ID", "LINEAR_CLIENT_SECRET"],
363
+ },
364
+ asana: {
365
+ title: "Asana OAuth Setup",
366
+ category: "productivity",
367
+ steps: [
368
+ "Go to Asana Developer Console",
369
+ "Create new app",
370
+ "Add redirect URI: http://localhost:3000/api/auth/asana/callback",
371
+ "Copy Client ID and Secret to .env",
372
+ ],
373
+ link: "https://app.asana.com/0/developer-console",
374
+ envVars: ["ASANA_CLIENT_ID", "ASANA_CLIENT_SECRET"],
375
+ },
376
+ trello: {
377
+ title: "Trello Power-Up Setup",
378
+ category: "productivity",
379
+ steps: [
380
+ "Go to Trello Power-Ups Admin",
381
+ "Create new Power-Up",
382
+ "Add redirect URI: http://localhost:3000/api/auth/trello/callback",
383
+ "Copy API Key and Secret to .env",
384
+ ],
385
+ link: "https://trello.com/power-ups/admin",
386
+ envVars: ["TRELLO_API_KEY", "TRELLO_API_SECRET"],
387
+ },
388
+ monday: {
389
+ title: "Monday.com App Setup",
390
+ category: "productivity",
391
+ steps: [
392
+ "Go to monday.com Developers",
393
+ "Create new app",
394
+ "Add OAuth redirect: http://localhost:3000/api/auth/monday/callback",
395
+ "Copy Client ID and Secret to .env",
396
+ ],
397
+ link: "https://monday.com/developers/apps",
398
+ envVars: ["MONDAY_CLIENT_ID", "MONDAY_CLIENT_SECRET"],
399
+ },
400
+ clickup: {
401
+ title: "ClickUp OAuth Setup",
402
+ category: "productivity",
403
+ steps: [
404
+ "Go to ClickUp Settings > Apps",
405
+ "Create new app",
406
+ "Add redirect URI: http://localhost:3000/api/auth/clickup/callback",
407
+ "Copy Client ID and Secret to .env",
408
+ ],
409
+ link: "https://app.clickup.com/settings/apps",
410
+ envVars: ["CLICKUP_CLIENT_ID", "CLICKUP_CLIENT_SECRET"],
411
+ },
412
+
413
+ // Storage
414
+ dropbox: {
415
+ title: "Dropbox App Setup",
416
+ category: "storage",
417
+ steps: [
418
+ "Go to Dropbox App Console",
419
+ "Create new app",
420
+ "Choose Scoped access and Full Dropbox",
421
+ "Add redirect URI: http://localhost:3000/api/auth/dropbox/callback",
422
+ "Copy App Key and Secret to .env",
423
+ ],
424
+ link: "https://www.dropbox.com/developers/apps",
425
+ envVars: ["DROPBOX_CLIENT_ID", "DROPBOX_CLIENT_SECRET"],
426
+ },
427
+ box: {
428
+ title: "Box App Setup",
429
+ category: "storage",
430
+ steps: [
431
+ "Go to Box Developer Console",
432
+ "Create new app with OAuth 2.0",
433
+ "Add redirect URI: http://localhost:3000/api/auth/box/callback",
434
+ "Copy Client ID and Secret to .env",
435
+ ],
436
+ link: "https://app.box.com/developers/console",
437
+ envVars: ["BOX_CLIENT_ID", "BOX_CLIENT_SECRET"],
438
+ },
439
+ airtable: {
440
+ title: "Airtable OAuth Setup",
441
+ category: "storage",
442
+ steps: [
443
+ "Go to Airtable Developer Hub",
444
+ "Create new OAuth integration",
445
+ "Add redirect URI: http://localhost:3000/api/auth/airtable/callback",
446
+ "Select required scopes",
447
+ "Copy Client ID and Secret to .env",
448
+ ],
449
+ link: "https://airtable.com/create/oauth",
450
+ envVars: ["AIRTABLE_CLIENT_ID", "AIRTABLE_CLIENT_SECRET"],
451
+ },
452
+
453
+ // Infrastructure
454
+ supabase: {
455
+ title: "Supabase Setup",
456
+ category: "infrastructure",
457
+ steps: [
458
+ "Go to Supabase Dashboard",
459
+ "Create new project or select existing",
460
+ "Go to Settings > API",
461
+ "Copy Project URL and anon/service_role keys",
462
+ "Add to .env file",
463
+ ],
464
+ link: "https://supabase.com/dashboard",
465
+ envVars: ["SUPABASE_URL", "SUPABASE_ANON_KEY", "SUPABASE_SERVICE_ROLE_KEY"],
466
+ },
467
+ neon: {
468
+ title: "Neon Database Setup",
469
+ category: "infrastructure",
470
+ steps: [
471
+ "Go to Neon Console",
472
+ "Create new project",
473
+ "Copy connection string from Dashboard",
474
+ "Add to .env file",
475
+ ],
476
+ link: "https://console.neon.tech/",
477
+ envVars: ["DATABASE_URL"],
478
+ },
479
+ snowflake: {
480
+ title: "Snowflake Setup",
481
+ category: "infrastructure",
482
+ steps: [
483
+ "Go to Snowflake Console",
484
+ "Create a service account or use existing credentials",
485
+ "Note your account identifier, warehouse, database",
486
+ "Add credentials to .env",
487
+ ],
488
+ link: "https://app.snowflake.com/",
489
+ envVars: ["SNOWFLAKE_ACCOUNT", "SNOWFLAKE_USER", "SNOWFLAKE_PASSWORD", "SNOWFLAKE_WAREHOUSE"],
490
+ },
491
+ aws: {
492
+ title: "AWS Setup",
493
+ category: "infrastructure",
494
+ steps: [
495
+ "Go to AWS IAM Console",
496
+ "Create new IAM user with programmatic access",
497
+ "Attach required policies (S3, Lambda, DynamoDB)",
498
+ "Copy Access Key ID and Secret",
499
+ "Add to .env file",
500
+ ],
501
+ link: "https://console.aws.amazon.com/iam/",
502
+ envVars: ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_REGION"],
503
+ },
504
+
505
+ // Sales & CRM
506
+ salesforce: {
507
+ title: "Salesforce Connected App Setup",
508
+ category: "sales",
509
+ steps: [
510
+ "Go to Salesforce Setup > App Manager",
511
+ "Create new Connected App",
512
+ "Enable OAuth Settings",
513
+ "Add callback URL: http://localhost:3000/api/auth/salesforce/callback",
514
+ "Select OAuth scopes: api, refresh_token",
515
+ "Copy Consumer Key and Secret to .env",
516
+ ],
517
+ link: "https://login.salesforce.com/",
518
+ envVars: ["SALESFORCE_CLIENT_ID", "SALESFORCE_CLIENT_SECRET"],
519
+ },
520
+ hubspot: {
521
+ title: "HubSpot App Setup",
522
+ category: "sales",
523
+ steps: [
524
+ "Go to HubSpot Developer Portal",
525
+ "Create new app",
526
+ "Add redirect URI: http://localhost:3000/api/auth/hubspot/callback",
527
+ "Select required scopes",
528
+ "Copy Client ID and Secret to .env",
529
+ ],
530
+ link: "https://developers.hubspot.com/",
531
+ envVars: ["HUBSPOT_CLIENT_ID", "HUBSPOT_CLIENT_SECRET"],
532
+ },
533
+ pipedrive: {
534
+ title: "Pipedrive OAuth Setup",
535
+ category: "sales",
536
+ steps: [
537
+ "Go to Pipedrive Developer Hub",
538
+ "Create new app",
539
+ "Add redirect URI: http://localhost:3000/api/auth/pipedrive/callback",
540
+ "Copy Client ID and Secret to .env",
541
+ ],
542
+ link: "https://developers.pipedrive.com/",
543
+ envVars: ["PIPEDRIVE_CLIENT_ID", "PIPEDRIVE_CLIENT_SECRET"],
544
+ },
545
+
546
+ // Support
547
+ zendesk: {
548
+ title: "Zendesk OAuth Setup",
549
+ category: "support",
550
+ steps: [
551
+ "Go to Zendesk Admin > API > OAuth Clients",
552
+ "Add new OAuth client",
553
+ "Set redirect URI: http://localhost:3000/api/auth/zendesk/callback",
554
+ "Copy Client ID and Secret to .env",
555
+ "Add your Zendesk subdomain",
556
+ ],
557
+ link: "https://support.zendesk.com/hc/en-us/articles/4408845965210",
558
+ envVars: ["ZENDESK_CLIENT_ID", "ZENDESK_CLIENT_SECRET", "ZENDESK_SUBDOMAIN"],
559
+ },
560
+ intercom: {
561
+ title: "Intercom OAuth Setup",
562
+ category: "support",
563
+ steps: [
564
+ "Go to Intercom Developer Hub",
565
+ "Create new app",
566
+ "Add redirect URI: http://localhost:3000/api/auth/intercom/callback",
567
+ "Copy Client ID and Secret to .env",
568
+ ],
569
+ link: "https://developers.intercom.com/",
570
+ envVars: ["INTERCOM_CLIENT_ID", "INTERCOM_CLIENT_SECRET"],
571
+ },
572
+ freshdesk: {
573
+ title: "Freshdesk OAuth Setup",
574
+ category: "support",
575
+ steps: [
576
+ "Go to Freshdesk Admin > Apps > Custom Apps",
577
+ "Create new OAuth application",
578
+ "Add redirect URI: http://localhost:3000/api/auth/freshdesk/callback",
579
+ "Copy Client ID and Secret to .env",
580
+ ],
581
+ link: "https://developers.freshdesk.com/",
582
+ envVars: ["FRESHDESK_CLIENT_ID", "FRESHDESK_CLIENT_SECRET", "FRESHDESK_DOMAIN"],
583
+ },
584
+ servicenow: {
585
+ title: "ServiceNow OAuth Setup",
586
+ category: "support",
587
+ steps: [
588
+ "Go to ServiceNow System OAuth > Application Registry",
589
+ "Create OAuth API endpoint for external clients",
590
+ "Add redirect URL: http://localhost:3000/api/auth/servicenow/callback",
591
+ "Copy Client ID and Secret to .env",
592
+ ],
593
+ link: "https://docs.servicenow.com/",
594
+ envVars: ["SERVICENOW_CLIENT_ID", "SERVICENOW_CLIENT_SECRET", "SERVICENOW_INSTANCE"],
595
+ },
596
+
597
+ // Finance
598
+ stripe: {
599
+ title: "Stripe Setup",
600
+ category: "finance",
601
+ steps: [
602
+ "Go to Stripe Dashboard",
603
+ "Go to Developers > API keys",
604
+ "Copy Publishable and Secret keys",
605
+ "For Connect, set up OAuth in Connect settings",
606
+ "Add to .env file",
607
+ ],
608
+ link: "https://dashboard.stripe.com/apikeys",
609
+ envVars: ["STRIPE_SECRET_KEY", "STRIPE_PUBLISHABLE_KEY"],
610
+ },
611
+ quickbooks: {
612
+ title: "QuickBooks OAuth Setup",
613
+ category: "finance",
614
+ steps: [
615
+ "Go to Intuit Developer Portal",
616
+ "Create new app",
617
+ "Add redirect URI: http://localhost:3000/api/auth/quickbooks/callback",
618
+ "Select Accounting scope",
619
+ "Copy Client ID and Secret to .env",
620
+ ],
621
+ link: "https://developer.intuit.com/app/developer/dashboard",
622
+ envVars: ["QUICKBOOKS_CLIENT_ID", "QUICKBOOKS_CLIENT_SECRET"],
623
+ },
624
+ xero: {
625
+ title: "Xero OAuth Setup",
626
+ category: "finance",
627
+ steps: [
628
+ "Go to Xero Developer Portal",
629
+ "Create new app",
630
+ "Add redirect URI: http://localhost:3000/api/auth/xero/callback",
631
+ "Select required scopes",
632
+ "Copy Client ID and Secret to .env",
633
+ ],
634
+ link: "https://developer.xero.com/app/manage",
635
+ envVars: ["XERO_CLIENT_ID", "XERO_CLIENT_SECRET"],
636
+ },
637
+
638
+ // Marketing
639
+ mailchimp: {
640
+ title: "Mailchimp OAuth Setup",
641
+ category: "marketing",
642
+ steps: [
643
+ "Go to Mailchimp Developer Portal",
644
+ "Register new app",
645
+ "Add redirect URI: http://localhost:3000/api/auth/mailchimp/callback",
646
+ "Copy Client ID and Secret to .env",
647
+ ],
648
+ link: "https://admin.mailchimp.com/account/oauth2/",
649
+ envVars: ["MAILCHIMP_CLIENT_ID", "MAILCHIMP_CLIENT_SECRET"],
650
+ },
651
+ shopify: {
652
+ title: "Shopify App Setup",
653
+ category: "marketing",
654
+ steps: [
655
+ "Go to Shopify Partners Dashboard",
656
+ "Create new app",
657
+ "Add redirect URI: http://localhost:3000/api/auth/shopify/callback",
658
+ "Copy API Key and Secret to .env",
659
+ ],
660
+ link: "https://partners.shopify.com/",
661
+ envVars: ["SHOPIFY_API_KEY", "SHOPIFY_API_SECRET"],
662
+ },
663
+ twitter: {
664
+ title: "Twitter/X OAuth Setup",
665
+ category: "marketing",
666
+ steps: [
667
+ "Go to Twitter Developer Portal",
668
+ "Create new project and app",
669
+ "Enable OAuth 2.0",
670
+ "Add redirect URI: http://localhost:3000/api/auth/twitter/callback",
671
+ "Copy Client ID and Secret to .env",
672
+ ],
673
+ link: "https://developer.twitter.com/en/portal/dashboard",
674
+ envVars: ["TWITTER_CLIENT_ID", "TWITTER_CLIENT_SECRET"],
675
+ },
676
+
677
+ // Design
678
+ figma: {
679
+ title: "Figma OAuth Setup",
680
+ category: "design",
681
+ steps: [
682
+ "Go to Figma Developer Settings",
683
+ "Create new app",
684
+ "Add redirect URI: http://localhost:3000/api/auth/figma/callback",
685
+ "Copy Client ID and Secret to .env",
686
+ ],
687
+ link: "https://www.figma.com/developers/apps",
688
+ envVars: ["FIGMA_CLIENT_ID", "FIGMA_CLIENT_SECRET"],
689
+ },
690
+
691
+ // AI
692
+ anthropic: {
693
+ title: "Anthropic API Setup",
694
+ category: "ai",
695
+ steps: [
696
+ "Go to Anthropic Console",
697
+ "Create new API key",
698
+ "Copy API key to .env",
699
+ ],
700
+ link: "https://console.anthropic.com/",
701
+ envVars: ["ANTHROPIC_API_KEY"],
88
702
  },
89
703
  };
90
704
 
@@ -93,9 +707,13 @@ export default function SetupPage() {
93
707
  const [loading, setLoading] = useState(true);
94
708
  const [expandedGuide, setExpandedGuide] = useState<string | null>(null);
95
709
  const [envChecked, setEnvChecked] = useState(false);
710
+ const [searchQuery, setSearchQuery] = useState("");
711
+ const [selectedCategory, setSelectedCategory] = useState<string | null>(null);
712
+ const [tokenStorage, setTokenStorage] = useState<TokenStorageStatus | null>(null);
96
713
 
97
714
  useEffect(() => {
98
715
  fetchStatus();
716
+ fetchTokenStorage();
99
717
  }, []);
100
718
 
101
719
  async function fetchStatus() {
@@ -110,6 +728,45 @@ export default function SetupPage() {
110
728
  }
111
729
  }
112
730
 
731
+ async function fetchTokenStorage() {
732
+ try {
733
+ const res = await fetch("/api/integrations/token-storage");
734
+ const data = await res.json();
735
+ setTokenStorage(data);
736
+ } catch {
737
+ // Token storage endpoint may not exist yet
738
+ setTokenStorage({ mode: "memory", encrypted: false });
739
+ }
740
+ }
741
+
742
+ // Filter integrations based on search and category
743
+ const filteredIntegrations = useMemo(() => {
744
+ return integrations.filter((integration) => {
745
+ const guide = OAUTH_SETUP_GUIDES[integration.id];
746
+ const matchesSearch =
747
+ searchQuery === "" ||
748
+ integration.name.toLowerCase().includes(searchQuery.toLowerCase()) ||
749
+ integration.id.toLowerCase().includes(searchQuery.toLowerCase());
750
+ const matchesCategory =
751
+ selectedCategory === null || (guide && guide.category === selectedCategory);
752
+ return matchesSearch && matchesCategory;
753
+ });
754
+ }, [integrations, searchQuery, selectedCategory]);
755
+
756
+ // Group integrations by category for display
757
+ const groupedIntegrations = useMemo(() => {
758
+ const groups: Record<string, Integration[]> = {};
759
+ for (const integration of filteredIntegrations) {
760
+ const guide = OAUTH_SETUP_GUIDES[integration.id];
761
+ const category = guide?.category || "other";
762
+ if (!groups[category]) {
763
+ groups[category] = [];
764
+ }
765
+ groups[category].push(integration);
766
+ }
767
+ return groups;
768
+ }, [filteredIntegrations]);
769
+
113
770
  const connectedCount = integrations.filter((i) => i.connected).length;
114
771
  const totalCount = integrations.length;
115
772
  const progress = totalCount > 0 ? (connectedCount / totalCount) * 100 : 0;
@@ -167,6 +824,76 @@ export default function SetupPage() {
167
824
  </div>
168
825
  </div>
169
826
 
827
+ {/* Token Storage Status */}
828
+ {tokenStorage && (
829
+ <div className={`rounded-2xl p-6 shadow-sm border mb-8 ${
830
+ tokenStorage.mode === "memory"
831
+ ? "bg-amber-50 dark:bg-amber-900/20 border-amber-200 dark:border-amber-800"
832
+ : "bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800"
833
+ }`}>
834
+ <div className="flex items-start gap-4">
835
+ <div className={`w-10 h-10 rounded-full flex items-center justify-center ${
836
+ tokenStorage.mode === "memory"
837
+ ? "bg-amber-100 dark:bg-amber-900"
838
+ : "bg-green-100 dark:bg-green-900"
839
+ }`}>
840
+ {tokenStorage.mode === "memory" ? (
841
+ <svg className="w-5 h-5 text-amber-600 dark:text-amber-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
842
+ <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
843
+ </svg>
844
+ ) : (
845
+ <svg className="w-5 h-5 text-green-600 dark:text-green-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
846
+ <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" />
847
+ </svg>
848
+ )}
849
+ </div>
850
+ <div className="flex-1">
851
+ <h3 className={`font-semibold ${
852
+ tokenStorage.mode === "memory"
853
+ ? "text-amber-800 dark:text-amber-200"
854
+ : "text-green-800 dark:text-green-200"
855
+ }`}>
856
+ Token Storage: {tokenStorage.mode === "memory" ? "Development Mode" : `${tokenStorage.mode.charAt(0).toUpperCase() + tokenStorage.mode.slice(1)} Storage`}
857
+ </h3>
858
+ <p className={`text-sm mt-1 ${
859
+ tokenStorage.mode === "memory"
860
+ ? "text-amber-700 dark:text-amber-300"
861
+ : "text-green-700 dark:text-green-300"
862
+ }`}>
863
+ {tokenStorage.mode === "memory" ? (
864
+ <>Tokens are stored in memory and will be lost on restart. Set <code className="px-1 py-0.5 bg-amber-100 dark:bg-amber-900 rounded text-xs">DATABASE_URL</code>, <code className="px-1 py-0.5 bg-amber-100 dark:bg-amber-900 rounded text-xs">KV_REST_API_URL</code>, or <code className="px-1 py-0.5 bg-amber-100 dark:bg-amber-900 rounded text-xs">REDIS_URL</code> for production.</>
865
+ ) : (
866
+ <>Tokens are persisted to {tokenStorage.mode} storage.</>
867
+ )}
868
+ </p>
869
+ <div className="mt-2 flex items-center gap-4 text-sm">
870
+ <span className={`inline-flex items-center gap-1.5 ${
871
+ tokenStorage.encrypted
872
+ ? "text-green-600 dark:text-green-400"
873
+ : "text-amber-600 dark:text-amber-400"
874
+ }`}>
875
+ {tokenStorage.encrypted ? (
876
+ <>
877
+ <svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
878
+ <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z" />
879
+ </svg>
880
+ Encryption enabled
881
+ </>
882
+ ) : (
883
+ <>
884
+ <svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
885
+ <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z" />
886
+ </svg>
887
+ Set <code className="px-1 py-0.5 bg-amber-100 dark:bg-amber-900 rounded text-xs">TOKEN_ENCRYPTION_KEY</code> for encryption
888
+ </>
889
+ )}
890
+ </span>
891
+ </div>
892
+ </div>
893
+ </div>
894
+ </div>
895
+ )}
896
+
170
897
  {/* Setup Steps */}
171
898
  <div className="bg-white dark:bg-neutral-800 rounded-2xl shadow-sm border border-neutral-200 dark:border-neutral-700 mb-8 overflow-hidden">
172
899
  <div className="p-6 border-b border-neutral-200 dark:border-neutral-700">
@@ -227,13 +954,71 @@ export default function SetupPage() {
227
954
  <p className="text-sm text-neutral-600 dark:text-neutral-400 mt-1">
228
955
  Click on a service to see setup instructions or connect
229
956
  </p>
957
+
958
+ {/* Search Input */}
959
+ <div className="mt-4">
960
+ <input
961
+ type="text"
962
+ placeholder="Search services..."
963
+ value={searchQuery}
964
+ onChange={(e) => setSearchQuery(e.target.value)}
965
+ className="w-full px-4 py-2 bg-neutral-100 dark:bg-neutral-900 border border-neutral-200 dark:border-neutral-700 rounded-xl text-neutral-900 dark:text-white placeholder-neutral-500 focus:outline-none focus:ring-2 focus:ring-blue-500"
966
+ />
967
+ </div>
968
+
969
+ {/* Category Filter Pills */}
970
+ <div className="mt-4 flex flex-wrap gap-2">
971
+ <button
972
+ type="button"
973
+ onClick={() => setSelectedCategory(null)}
974
+ className={`px-3 py-1.5 text-sm font-medium rounded-lg transition-colors ${
975
+ selectedCategory === null
976
+ ? "bg-neutral-900 dark:bg-white text-white dark:text-neutral-900"
977
+ : "bg-neutral-100 dark:bg-neutral-700 text-neutral-600 dark:text-neutral-300 hover:bg-neutral-200 dark:hover:bg-neutral-600"
978
+ }`}
979
+ >
980
+ All
981
+ </button>
982
+ {CATEGORIES.map((category) => (
983
+ <button
984
+ key={category.id}
985
+ type="button"
986
+ onClick={() =>
987
+ setSelectedCategory(selectedCategory === category.id ? null : category.id)}
988
+ className={`px-3 py-1.5 text-sm font-medium rounded-lg transition-colors ${
989
+ selectedCategory === category.id
990
+ ? "bg-neutral-900 dark:bg-white text-white dark:text-neutral-900"
991
+ : "bg-neutral-100 dark:bg-neutral-700 text-neutral-600 dark:text-neutral-300 hover:bg-neutral-200 dark:hover:bg-neutral-600"
992
+ }`}
993
+ >
994
+ {category.name}
995
+ </button>
996
+ ))}
997
+ </div>
230
998
  </div>
231
999
 
232
1000
  {loading
233
1001
  ? <div className="p-12 text-center text-neutral-500">Loading...</div>
234
- : (
235
- <div className="divide-y divide-neutral-200 dark:divide-neutral-700">
236
- {integrations.map((integration) => (
1002
+ : filteredIntegrations.length === 0
1003
+ ? (
1004
+ <div className="p-12 text-center text-neutral-500">
1005
+ No services found matching your search
1006
+ </div>
1007
+ )
1008
+ : (
1009
+ <div>
1010
+ {CATEGORIES.filter((cat) => groupedIntegrations[cat.id]?.length > 0).map(
1011
+ (category) => (
1012
+ <div key={category.id}>
1013
+ {/* Category Header */}
1014
+ <div className="px-6 py-3 bg-neutral-50 dark:bg-neutral-900 border-b border-neutral-200 dark:border-neutral-700">
1015
+ <h3 className="text-sm font-semibold text-neutral-500 dark:text-neutral-400 uppercase tracking-wider">
1016
+ {category.name}
1017
+ </h3>
1018
+ </div>
1019
+ {/* Services in this category */}
1020
+ <div className="divide-y divide-neutral-200 dark:divide-neutral-700">
1021
+ {groupedIntegrations[category.id]?.map((integration) => (
237
1022
  <div key={integration.id}>
238
1023
  <div className="p-6 flex items-center justify-between">
239
1024
  <div className="flex items-center gap-4">
@@ -256,16 +1041,18 @@ export default function SetupPage() {
256
1041
  </div>
257
1042
  </div>
258
1043
  <div className="flex items-center gap-3">
259
- <button
260
- type="button"
261
- onClick={() =>
262
- setExpandedGuide(
263
- expandedGuide === integration.id ? null : integration.id,
264
- )}
265
- className="px-4 py-2 text-sm font-medium text-neutral-600 dark:text-neutral-400 hover:text-neutral-900 dark:hover:text-white"
266
- >
267
- {expandedGuide === integration.id ? "Hide Guide" : "Setup Guide"}
268
- </button>
1044
+ {OAUTH_SETUP_GUIDES[integration.id] && (
1045
+ <button
1046
+ type="button"
1047
+ onClick={() =>
1048
+ setExpandedGuide(
1049
+ expandedGuide === integration.id ? null : integration.id,
1050
+ )}
1051
+ className="px-4 py-2 text-sm font-medium text-neutral-600 dark:text-neutral-400 hover:text-neutral-900 dark:hover:text-white"
1052
+ >
1053
+ {expandedGuide === integration.id ? "Hide Guide" : "Setup Guide"}
1054
+ </button>
1055
+ )}
269
1056
  {integration.connected
270
1057
  ? (
271
1058
  <span className="inline-flex items-center gap-1.5 px-4 py-2 bg-green-50 dark:bg-green-900/20 text-green-700 dark:text-green-400 rounded-xl text-sm font-medium">
@@ -294,7 +1081,7 @@ export default function SetupPage() {
294
1081
  <h4 className="font-semibold text-neutral-900 dark:text-white mb-4">
295
1082
  {guide.title}
296
1083
  </h4>
297
- <ol className="space-y-3">
1084
+ <ol className="space-y-3 mb-6">
298
1085
  {guide.steps.map((step, i) => (
299
1086
  <li key={i} className="flex items-start gap-3">
300
1087
  <span className="w-6 h-6 bg-neutral-200 dark:bg-neutral-700 rounded-full flex items-center justify-center text-sm font-medium text-neutral-600 dark:text-neutral-400 flex-shrink-0">
@@ -306,11 +1093,22 @@ export default function SetupPage() {
306
1093
  </li>
307
1094
  ))}
308
1095
  </ol>
1096
+
1097
+ {/* Environment Variables */}
1098
+ <div className="mb-4 p-4 bg-neutral-100 dark:bg-neutral-800 rounded-lg">
1099
+ <h5 className="text-sm font-semibold text-neutral-700 dark:text-neutral-300 mb-2">
1100
+ Required Environment Variables:
1101
+ </h5>
1102
+ <pre className="text-sm text-neutral-600 dark:text-neutral-400 font-mono whitespace-pre-wrap">
1103
+ {guide.envVars.map((v) => `${v}=your_value`).join("\n")}
1104
+ </pre>
1105
+ </div>
1106
+
309
1107
  <a
310
1108
  href={guide.link}
311
1109
  target="_blank"
312
1110
  rel="noopener noreferrer"
313
- className="mt-4 inline-flex items-center gap-2 text-blue-600 dark:text-blue-400 text-sm font-medium hover:underline"
1111
+ className="inline-flex items-center gap-2 text-blue-600 dark:text-blue-400 text-sm font-medium hover:underline"
314
1112
  >
315
1113
  Open Developer Console
316
1114
  <svg
@@ -332,9 +1130,13 @@ export default function SetupPage() {
332
1130
  );
333
1131
  })()}
334
1132
  </div>
335
- ))}
336
- </div>
337
- )}
1133
+ ))}
1134
+ </div>
1135
+ </div>
1136
+ ),
1137
+ )}
1138
+ </div>
1139
+ )}
338
1140
  </div>
339
1141
 
340
1142
  {/* All Connected Message */}
@@ -446,16 +1248,18 @@ function ServiceIcon({ name }: { name: string }) {
446
1248
  <path d="M4.459 4.208c.746.606 1.026.56 2.428.466l13.215-.793c.28 0 .047-.28-.046-.326L17.86 1.968c-.42-.326-.98-.7-2.055-.607L3.01 2.295c-.466.046-.56.28-.374.466l1.823 1.447zm.793 3.08v13.904c0 .747.373 1.027 1.214.98l14.523-.84c.84-.046.933-.56.933-1.167V6.354c0-.606-.233-.933-.746-.886l-15.177.887c-.56.046-.747.326-.747.933zm14.337.745c.093.42 0 .84-.42.888l-.7.14v10.264c-.608.327-1.168.514-1.635.514-.746 0-.933-.234-1.495-.933l-4.577-7.186v6.952L12.21 19s0 .84-1.168.84l-3.222.186c-.093-.186 0-.653.327-.746l.84-.233V9.854L7.822 9.76c-.094-.42.14-1.026.793-1.073l3.456-.233 4.764 7.279v-6.44l-1.215-.14c-.093-.514.28-.886.747-.933l3.222-.186zM1.936 1.035l13.31-.98c1.634-.14 2.055-.047 3.082.7l4.249 2.986c.7.513.933.653.933 1.213v16.378c0 1.026-.373 1.634-1.68 1.726l-15.458.934c-.98.047-1.448-.093-1.962-.747l-3.129-4.06c-.56-.747-.793-1.306-.793-1.96V2.667c0-.839.374-1.54 1.448-1.632z" />
447
1249
  </svg>
448
1250
  ),
1251
+ // Default icon for services without specific icons
1252
+ default: (
1253
+ <svg className="w-6 h-6 text-neutral-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1254
+ <path
1255
+ strokeLinecap="round"
1256
+ strokeLinejoin="round"
1257
+ strokeWidth={2}
1258
+ d="M13 10V3L4 14h7v7l9-11h-7z"
1259
+ />
1260
+ </svg>
1261
+ ),
449
1262
  };
450
1263
 
451
- return iconMap[name] || (
452
- <svg className="w-6 h-6 text-neutral-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
453
- <path
454
- strokeLinecap="round"
455
- strokeLinejoin="round"
456
- strokeWidth={2}
457
- d="M13 10V3L4 14h7v7l9-11h-7z"
458
- />
459
- </svg>
460
- );
1264
+ return iconMap[name] || iconMap.default;
461
1265
  }