veryfront 0.0.49 → 0.0.51

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 (493) 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 -215
  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 -4
  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/status/route.ts +3 -3
  25. package/dist/integrations/_base/files/app/api/integrations/token-storage/route.ts +26 -0
  26. package/dist/integrations/_base/files/app/components/ServiceConnections.tsx +2 -1
  27. package/dist/integrations/_base/files/app/setup/page.tsx +869 -55
  28. package/dist/integrations/_base/files/lib/token-store-examples.ts +435 -0
  29. package/dist/integrations/_base/files/lib/token-store.ts +273 -23
  30. package/dist/integrations/airtable/connector.json +99 -0
  31. package/dist/integrations/airtable/files/ai/tools/create-record.ts +25 -0
  32. package/dist/integrations/airtable/files/ai/tools/get-base.ts +34 -0
  33. package/dist/integrations/airtable/files/ai/tools/get-record.ts +23 -0
  34. package/dist/integrations/airtable/files/ai/tools/list-bases.ts +19 -0
  35. package/dist/integrations/airtable/files/ai/tools/list-records.ts +47 -0
  36. package/dist/integrations/airtable/files/app/api/auth/airtable/callback/route.ts +11 -0
  37. package/dist/integrations/airtable/files/app/api/auth/airtable/route.ts +9 -0
  38. package/dist/integrations/airtable/files/lib/airtable-client.ts +244 -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/aws/connector.json +72 -0
  59. package/dist/integrations/aws/files/_env.example +10 -0
  60. package/dist/integrations/aws/files/ai/tools/get-s3-object.ts +62 -0
  61. package/dist/integrations/aws/files/ai/tools/list-ec2-instances.ts +56 -0
  62. package/dist/integrations/aws/files/ai/tools/list-lambda-functions.ts +57 -0
  63. package/dist/integrations/aws/files/ai/tools/list-s3-buckets.ts +44 -0
  64. package/dist/integrations/aws/files/ai/tools/list-s3-objects.ts +58 -0
  65. package/dist/integrations/aws/files/lib/aws-client.ts +255 -0
  66. package/dist/integrations/bitbucket/connector.json +85 -0
  67. package/dist/integrations/bitbucket/files/_env.example +9 -0
  68. package/dist/integrations/bitbucket/files/ai/tools/create-pull-request.ts +83 -0
  69. package/dist/integrations/bitbucket/files/ai/tools/list-issues.ts +112 -0
  70. package/dist/integrations/bitbucket/files/ai/tools/list-pull-requests.ts +91 -0
  71. package/dist/integrations/bitbucket/files/ai/tools/list-repositories.ts +78 -0
  72. package/dist/integrations/bitbucket/files/app/api/auth/bitbucket/callback/route.ts +11 -0
  73. package/dist/integrations/bitbucket/files/app/api/auth/bitbucket/route.ts +9 -0
  74. package/dist/integrations/bitbucket/files/lib/bitbucket-client.ts +316 -0
  75. package/dist/integrations/box/connector.json +85 -0
  76. package/dist/integrations/box/files/_env.example +4 -0
  77. package/dist/integrations/box/files/ai/tools/create-folder.ts +28 -0
  78. package/dist/integrations/box/files/ai/tools/get-file.ts +29 -0
  79. package/dist/integrations/box/files/ai/tools/list-files.ts +33 -0
  80. package/dist/integrations/box/files/ai/tools/search-files.ts +35 -0
  81. package/dist/integrations/box/files/ai/tools/upload-file.ts +32 -0
  82. package/dist/integrations/box/files/app/api/auth/box/callback/route.ts +11 -0
  83. package/dist/integrations/box/files/app/api/auth/box/route.ts +7 -0
  84. package/dist/integrations/box/files/lib/box-client.ts +280 -0
  85. package/dist/integrations/calendar/files/app/api/auth/calendar/callback/route.ts +7 -110
  86. package/dist/integrations/calendar/files/app/api/auth/calendar/route.ts +5 -25
  87. package/dist/integrations/clickup/connector.json +85 -0
  88. package/dist/integrations/clickup/files/_env.example +4 -0
  89. package/dist/integrations/clickup/files/ai/tools/create-task.ts +64 -0
  90. package/dist/integrations/clickup/files/ai/tools/get-task.ts +59 -0
  91. package/dist/integrations/clickup/files/ai/tools/list-lists.ts +109 -0
  92. package/dist/integrations/clickup/files/ai/tools/list-tasks.ts +95 -0
  93. package/dist/integrations/clickup/files/ai/tools/update-task.ts +85 -0
  94. package/dist/integrations/clickup/files/app/api/auth/clickup/callback/route.ts +11 -0
  95. package/dist/integrations/clickup/files/app/api/auth/clickup/route.ts +7 -0
  96. package/dist/integrations/clickup/files/lib/clickup-client.ts +439 -0
  97. package/dist/integrations/confluence/README.md +246 -0
  98. package/dist/integrations/confluence/connector.json +104 -0
  99. package/dist/integrations/confluence/files/_env.example +4 -0
  100. package/dist/integrations/confluence/files/ai/tools/create-page.ts +43 -0
  101. package/dist/integrations/confluence/files/ai/tools/get-page.ts +30 -0
  102. package/dist/integrations/confluence/files/ai/tools/list-spaces.ts +31 -0
  103. package/dist/integrations/confluence/files/ai/tools/search-content.ts +38 -0
  104. package/dist/integrations/confluence/files/ai/tools/update-page.ts +45 -0
  105. package/dist/integrations/confluence/files/app/api/auth/confluence/callback/route.ts +11 -0
  106. package/dist/integrations/confluence/files/app/api/auth/confluence/route.ts +9 -0
  107. package/dist/integrations/confluence/files/lib/confluence-client.ts +281 -0
  108. package/dist/integrations/discord/connector.json +100 -0
  109. package/dist/integrations/discord/files/_env.example +12 -0
  110. package/dist/integrations/discord/files/ai/tools/get-messages.ts +55 -0
  111. package/dist/integrations/discord/files/ai/tools/get-user.ts +32 -0
  112. package/dist/integrations/discord/files/ai/tools/list-channels.ts +32 -0
  113. package/dist/integrations/discord/files/ai/tools/list-guilds.ts +24 -0
  114. package/dist/integrations/discord/files/ai/tools/send-message.ts +33 -0
  115. package/dist/integrations/discord/files/app/api/auth/discord/callback/route.ts +11 -0
  116. package/dist/integrations/discord/files/app/api/auth/discord/route.ts +9 -0
  117. package/dist/integrations/discord/files/lib/discord-client.ts +273 -0
  118. package/dist/integrations/docs-google/connector.json +101 -0
  119. package/dist/integrations/docs-google/files/_env.example +8 -0
  120. package/dist/integrations/docs-google/files/ai/tools/create-document.ts +46 -0
  121. package/dist/integrations/docs-google/files/ai/tools/get-document.ts +46 -0
  122. package/dist/integrations/docs-google/files/ai/tools/list-documents.ts +42 -0
  123. package/dist/integrations/docs-google/files/ai/tools/search-documents.ts +38 -0
  124. package/dist/integrations/docs-google/files/ai/tools/update-document.ts +131 -0
  125. package/dist/integrations/docs-google/files/app/api/auth/docs-google/callback/route.ts +11 -0
  126. package/dist/integrations/docs-google/files/app/api/auth/docs-google/route.ts +9 -0
  127. package/dist/integrations/docs-google/files/lib/docs-client.ts +582 -0
  128. package/dist/integrations/drive/connector.json +134 -0
  129. package/dist/integrations/drive/files/_env.example +9 -0
  130. package/dist/integrations/drive/files/ai/tools/create-folder.ts +47 -0
  131. package/dist/integrations/drive/files/ai/tools/get-file.ts +55 -0
  132. package/dist/integrations/drive/files/ai/tools/list-files.ts +78 -0
  133. package/dist/integrations/drive/files/ai/tools/search-files.ts +79 -0
  134. package/dist/integrations/drive/files/ai/tools/upload-file.ts +59 -0
  135. package/dist/integrations/drive/files/app/api/auth/drive/callback/route.ts +11 -0
  136. package/dist/integrations/drive/files/app/api/auth/drive/route.ts +9 -0
  137. package/dist/integrations/drive/files/lib/drive-client.ts +359 -0
  138. package/dist/integrations/dropbox/connector.json +107 -0
  139. package/dist/integrations/dropbox/files/_env.example +24 -0
  140. package/dist/integrations/dropbox/files/ai/tools/get-account.ts +58 -0
  141. package/dist/integrations/dropbox/files/ai/tools/get-file.ts +61 -0
  142. package/dist/integrations/dropbox/files/ai/tools/list-files.ts +56 -0
  143. package/dist/integrations/dropbox/files/ai/tools/search-files.ts +70 -0
  144. package/dist/integrations/dropbox/files/ai/tools/upload-file.ts +48 -0
  145. package/dist/integrations/dropbox/files/app/api/auth/dropbox/callback/route.ts +11 -0
  146. package/dist/integrations/dropbox/files/app/api/auth/dropbox/route.ts +9 -0
  147. package/dist/integrations/dropbox/files/lib/dropbox-client.ts +397 -0
  148. package/dist/integrations/figma/INTEGRATION_SUMMARY.md +436 -0
  149. package/dist/integrations/figma/README.md +287 -0
  150. package/dist/integrations/figma/connector.json +100 -0
  151. package/dist/integrations/figma/files/_env.example +5 -0
  152. package/dist/integrations/figma/files/ai/tools/get-comments.ts +72 -0
  153. package/dist/integrations/figma/files/ai/tools/get-file.ts +54 -0
  154. package/dist/integrations/figma/files/ai/tools/list-files.ts +39 -0
  155. package/dist/integrations/figma/files/ai/tools/list-projects.ts +69 -0
  156. package/dist/integrations/figma/files/ai/tools/post-comment.ts +54 -0
  157. package/dist/integrations/figma/files/app/api/auth/figma/callback/route.ts +11 -0
  158. package/dist/integrations/figma/files/app/api/auth/figma/route.ts +9 -0
  159. package/dist/integrations/figma/files/lib/figma-client.ts +355 -0
  160. package/dist/integrations/figma/files/lib/types.ts +503 -0
  161. package/dist/integrations/freshdesk/connector.json +85 -0
  162. package/dist/integrations/freshdesk/files/_env.example +4 -0
  163. package/dist/integrations/freshdesk/files/ai/tools/create-ticket.ts +60 -0
  164. package/dist/integrations/freshdesk/files/ai/tools/get-ticket.ts +46 -0
  165. package/dist/integrations/freshdesk/files/ai/tools/list-contacts.ts +37 -0
  166. package/dist/integrations/freshdesk/files/ai/tools/list-tickets.ts +59 -0
  167. package/dist/integrations/freshdesk/files/ai/tools/update-ticket.ts +61 -0
  168. package/dist/integrations/freshdesk/files/app/api/auth/freshdesk/callback/route.ts +11 -0
  169. package/dist/integrations/freshdesk/files/app/api/auth/freshdesk/route.ts +7 -0
  170. package/dist/integrations/freshdesk/files/lib/freshdesk-client.ts +178 -0
  171. package/dist/integrations/github/files/app/api/auth/github/callback/route.ts +6 -127
  172. package/dist/integrations/github/files/app/api/auth/github/route.ts +4 -24
  173. package/dist/integrations/gitlab/connector.json +100 -0
  174. package/dist/integrations/gitlab/files/_env.example +7 -0
  175. package/dist/integrations/gitlab/files/ai/tools/create-issue.ts +49 -0
  176. package/dist/integrations/gitlab/files/ai/tools/get-issue.ts +56 -0
  177. package/dist/integrations/gitlab/files/ai/tools/list-merge-requests.ts +75 -0
  178. package/dist/integrations/gitlab/files/ai/tools/list-projects.ts +51 -0
  179. package/dist/integrations/gitlab/files/ai/tools/search-issues.ts +67 -0
  180. package/dist/integrations/gitlab/files/app/api/auth/gitlab/callback/route.ts +11 -0
  181. package/dist/integrations/gitlab/files/app/api/auth/gitlab/route.ts +9 -0
  182. package/dist/integrations/gitlab/files/lib/gitlab-client.ts +366 -0
  183. package/dist/integrations/gmail/files/app/api/auth/gmail/callback/route.ts +7 -108
  184. package/dist/integrations/gmail/files/app/api/auth/gmail/route.ts +5 -23
  185. package/dist/integrations/gmail/files/lib/gmail-client.ts +16 -55
  186. package/dist/integrations/hubspot/connector.json +98 -0
  187. package/dist/integrations/hubspot/files/_env.example +5 -0
  188. package/dist/integrations/hubspot/files/ai/tools/create-contact.ts +41 -0
  189. package/dist/integrations/hubspot/files/ai/tools/create-deal.ts +41 -0
  190. package/dist/integrations/hubspot/files/ai/tools/get-contact.ts +39 -0
  191. package/dist/integrations/hubspot/files/ai/tools/list-contacts.ts +43 -0
  192. package/dist/integrations/hubspot/files/ai/tools/list-deals.ts +41 -0
  193. package/dist/integrations/hubspot/files/app/api/auth/hubspot/callback/route.ts +11 -0
  194. package/dist/integrations/hubspot/files/app/api/auth/hubspot/route.ts +9 -0
  195. package/dist/integrations/hubspot/files/lib/hubspot-client.ts +393 -0
  196. package/dist/integrations/intercom/connector.json +85 -0
  197. package/dist/integrations/intercom/files/_env.example +4 -0
  198. package/dist/integrations/intercom/files/ai/tools/get-contact.ts +35 -0
  199. package/dist/integrations/intercom/files/ai/tools/get-conversation.ts +55 -0
  200. package/dist/integrations/intercom/files/ai/tools/list-contacts.ts +35 -0
  201. package/dist/integrations/intercom/files/ai/tools/list-conversations.ts +49 -0
  202. package/dist/integrations/intercom/files/ai/tools/send-message.ts +34 -0
  203. package/dist/integrations/intercom/files/app/api/auth/intercom/callback/route.ts +11 -0
  204. package/dist/integrations/intercom/files/app/api/auth/intercom/route.ts +7 -0
  205. package/dist/integrations/intercom/files/lib/intercom-client.ts +308 -0
  206. package/dist/integrations/jira/connector.json +109 -0
  207. package/dist/integrations/jira/files/ai/tools/create-issue.ts +47 -0
  208. package/dist/integrations/jira/files/ai/tools/get-issue.ts +57 -0
  209. package/dist/integrations/jira/files/ai/tools/list-projects.ts +30 -0
  210. package/dist/integrations/jira/files/ai/tools/search-issues.ts +49 -0
  211. package/dist/integrations/jira/files/ai/tools/update-issue.ts +81 -0
  212. package/dist/integrations/jira/files/app/api/auth/jira/callback/route.ts +11 -0
  213. package/dist/integrations/jira/files/app/api/auth/jira/route.ts +9 -0
  214. package/dist/integrations/jira/files/lib/jira-client.ts +338 -0
  215. package/dist/integrations/linear/connector.json +100 -0
  216. package/dist/integrations/linear/files/_env.example +6 -0
  217. package/dist/integrations/linear/files/ai/tools/create-issue.ts +71 -0
  218. package/dist/integrations/linear/files/ai/tools/get-issue.ts +55 -0
  219. package/dist/integrations/linear/files/ai/tools/list-projects.ts +43 -0
  220. package/dist/integrations/linear/files/ai/tools/search-issues.ts +54 -0
  221. package/dist/integrations/linear/files/ai/tools/update-issue.ts +71 -0
  222. package/dist/integrations/linear/files/app/api/auth/linear/callback/route.ts +11 -0
  223. package/dist/integrations/linear/files/app/api/auth/linear/route.ts +9 -0
  224. package/dist/integrations/linear/files/lib/linear-client.ts +464 -0
  225. package/dist/integrations/mailchimp/connector.json +85 -0
  226. package/dist/integrations/mailchimp/files/_env.example +4 -0
  227. package/dist/integrations/mailchimp/files/ai/tools/get-campaign.ts +45 -0
  228. package/dist/integrations/mailchimp/files/ai/tools/get-list.ts +51 -0
  229. package/dist/integrations/mailchimp/files/ai/tools/list-campaigns.ts +46 -0
  230. package/dist/integrations/mailchimp/files/ai/tools/list-lists.ts +46 -0
  231. package/dist/integrations/mailchimp/files/ai/tools/list-members.ts +58 -0
  232. package/dist/integrations/mailchimp/files/app/api/auth/mailchimp/callback/route.ts +11 -0
  233. package/dist/integrations/mailchimp/files/app/api/auth/mailchimp/route.ts +7 -0
  234. package/dist/integrations/mailchimp/files/lib/mailchimp-client.ts +267 -0
  235. package/dist/integrations/mixpanel/connector.json +96 -0
  236. package/dist/integrations/mixpanel/files/_env.example +11 -0
  237. package/dist/integrations/mixpanel/files/ai/tools/get-funnel.ts +46 -0
  238. package/dist/integrations/mixpanel/files/ai/tools/get-retention.ts +64 -0
  239. package/dist/integrations/mixpanel/files/ai/tools/list-cohorts.ts +46 -0
  240. package/dist/integrations/mixpanel/files/ai/tools/query-events.ts +43 -0
  241. package/dist/integrations/mixpanel/files/ai/tools/track-event.ts +41 -0
  242. package/dist/integrations/mixpanel/files/lib/mixpanel-client.ts +319 -0
  243. package/dist/integrations/monday/connector.json +85 -0
  244. package/dist/integrations/monday/files/_env.example +4 -0
  245. package/dist/integrations/monday/files/ai/tools/create-item.ts +36 -0
  246. package/dist/integrations/monday/files/ai/tools/get-item.ts +31 -0
  247. package/dist/integrations/monday/files/ai/tools/list-boards.ts +29 -0
  248. package/dist/integrations/monday/files/ai/tools/list-items.ts +36 -0
  249. package/dist/integrations/monday/files/ai/tools/update-item.ts +36 -0
  250. package/dist/integrations/monday/files/app/api/auth/monday/callback/route.ts +11 -0
  251. package/dist/integrations/monday/files/app/api/auth/monday/route.ts +7 -0
  252. package/dist/integrations/monday/files/lib/monday-client.ts +329 -0
  253. package/dist/integrations/neon/connector.json +89 -0
  254. package/dist/integrations/neon/files/_env.example +6 -0
  255. package/dist/integrations/neon/files/ai/tools/describe-table.ts +38 -0
  256. package/dist/integrations/neon/files/ai/tools/list-branches.ts +35 -0
  257. package/dist/integrations/neon/files/ai/tools/list-projects.ts +31 -0
  258. package/dist/integrations/neon/files/ai/tools/list-tables.ts +49 -0
  259. package/dist/integrations/neon/files/ai/tools/query-database.ts +33 -0
  260. package/dist/integrations/neon/files/app/api/auth/neon/route.ts +51 -0
  261. package/dist/integrations/neon/files/lib/neon-client.ts +294 -0
  262. package/dist/integrations/notion/connector.json +87 -0
  263. package/dist/integrations/notion/files/_env.example +6 -0
  264. package/dist/integrations/notion/files/ai/tools/create-page.ts +32 -0
  265. package/dist/integrations/notion/files/ai/tools/query-database.ts +44 -0
  266. package/dist/integrations/notion/files/ai/tools/read-page.ts +34 -0
  267. package/dist/integrations/notion/files/ai/tools/search-notion.ts +51 -0
  268. package/dist/integrations/notion/files/app/api/auth/notion/callback/route.ts +11 -0
  269. package/dist/integrations/notion/files/app/api/auth/notion/route.ts +9 -0
  270. package/dist/integrations/notion/files/lib/notion-client.ts +218 -0
  271. package/dist/integrations/onedrive/connector.json +100 -0
  272. package/dist/integrations/onedrive/files/_env.example +23 -0
  273. package/dist/integrations/onedrive/files/ai/tools/download-file.ts +38 -0
  274. package/dist/integrations/onedrive/files/ai/tools/list-files.ts +63 -0
  275. package/dist/integrations/onedrive/files/ai/tools/search-files.ts +59 -0
  276. package/dist/integrations/onedrive/files/ai/tools/upload-file.ts +43 -0
  277. package/dist/integrations/onedrive/files/app/api/auth/onedrive/callback/route.ts +11 -0
  278. package/dist/integrations/onedrive/files/app/api/auth/onedrive/route.ts +9 -0
  279. package/dist/integrations/onedrive/files/lib/onedrive-client.ts +314 -0
  280. package/dist/integrations/outlook/README.md +308 -0
  281. package/dist/integrations/outlook/connector.json +98 -0
  282. package/dist/integrations/outlook/files/_env.example +8 -0
  283. package/dist/integrations/outlook/files/ai/tools/get-email.ts +47 -0
  284. package/dist/integrations/outlook/files/ai/tools/list-emails.ts +46 -0
  285. package/dist/integrations/outlook/files/ai/tools/list-folders.ts +22 -0
  286. package/dist/integrations/outlook/files/ai/tools/search-emails.ts +41 -0
  287. package/dist/integrations/outlook/files/ai/tools/send-email.ts +41 -0
  288. package/dist/integrations/outlook/files/app/api/auth/outlook/callback/route.ts +11 -0
  289. package/dist/integrations/outlook/files/app/api/auth/outlook/route.ts +9 -0
  290. package/dist/integrations/outlook/files/lib/outlook-client.ts +204 -0
  291. package/dist/integrations/pipedrive/connector.json +85 -0
  292. package/dist/integrations/pipedrive/files/_env.example +4 -0
  293. package/dist/integrations/pipedrive/files/ai/tools/create-deal.ts +44 -0
  294. package/dist/integrations/pipedrive/files/ai/tools/get-deal.ts +34 -0
  295. package/dist/integrations/pipedrive/files/ai/tools/list-deals.ts +40 -0
  296. package/dist/integrations/pipedrive/files/ai/tools/list-persons.ts +33 -0
  297. package/dist/integrations/pipedrive/files/ai/tools/update-deal.ts +46 -0
  298. package/dist/integrations/pipedrive/files/app/api/auth/pipedrive/callback/route.ts +11 -0
  299. package/dist/integrations/pipedrive/files/app/api/auth/pipedrive/route.ts +7 -0
  300. package/dist/integrations/pipedrive/files/lib/pipedrive-client.ts +259 -0
  301. package/dist/integrations/posthog/connector.json +84 -0
  302. package/dist/integrations/posthog/files/_env.example +6 -0
  303. package/dist/integrations/posthog/files/ai/tools/capture-event.ts +37 -0
  304. package/dist/integrations/posthog/files/ai/tools/get-trends.ts +44 -0
  305. package/dist/integrations/posthog/files/ai/tools/list-feature-flags.ts +38 -0
  306. package/dist/integrations/posthog/files/ai/tools/list-persons.ts +32 -0
  307. package/dist/integrations/posthog/files/lib/posthog-client.ts +286 -0
  308. package/dist/integrations/quickbooks/connector.json +85 -0
  309. package/dist/integrations/quickbooks/files/_env.example +4 -0
  310. package/dist/integrations/quickbooks/files/ai/tools/create-invoice.ts +48 -0
  311. package/dist/integrations/quickbooks/files/ai/tools/get-customer.ts +36 -0
  312. package/dist/integrations/quickbooks/files/ai/tools/get-invoice.ts +46 -0
  313. package/dist/integrations/quickbooks/files/ai/tools/list-customers.ts +37 -0
  314. package/dist/integrations/quickbooks/files/ai/tools/list-invoices.ts +40 -0
  315. package/dist/integrations/quickbooks/files/app/api/auth/quickbooks/callback/route.ts +11 -0
  316. package/dist/integrations/quickbooks/files/app/api/auth/quickbooks/route.ts +7 -0
  317. package/dist/integrations/quickbooks/files/lib/quickbooks-client.ts +252 -0
  318. package/dist/integrations/salesforce/connector.json +104 -0
  319. package/dist/integrations/salesforce/files/ai/tools/create-lead.ts +101 -0
  320. package/dist/integrations/salesforce/files/ai/tools/get-account.ts +53 -0
  321. package/dist/integrations/salesforce/files/ai/tools/list-accounts.ts +50 -0
  322. package/dist/integrations/salesforce/files/ai/tools/list-contacts.ts +54 -0
  323. package/dist/integrations/salesforce/files/ai/tools/list-opportunities.ts +55 -0
  324. package/dist/integrations/salesforce/files/app/api/auth/salesforce/callback/route.ts +11 -0
  325. package/dist/integrations/salesforce/files/app/api/auth/salesforce/route.ts +9 -0
  326. package/dist/integrations/salesforce/files/lib/salesforce-client.ts +539 -0
  327. package/dist/integrations/sentry/connector.json +84 -0
  328. package/dist/integrations/sentry/files/_env.example +6 -0
  329. package/dist/integrations/sentry/files/ai/tools/get-issue.ts +66 -0
  330. package/dist/integrations/sentry/files/ai/tools/list-issues.ts +57 -0
  331. package/dist/integrations/sentry/files/ai/tools/list-projects.ts +32 -0
  332. package/dist/integrations/sentry/files/ai/tools/resolve-issue.ts +28 -0
  333. package/dist/integrations/sentry/files/lib/sentry-client.ts +268 -0
  334. package/dist/integrations/servicenow/connector.json +66 -0
  335. package/dist/integrations/servicenow/files/_env.example +5 -0
  336. package/dist/integrations/servicenow/files/ai/tools/create-incident.ts +58 -0
  337. package/dist/integrations/servicenow/files/ai/tools/get-incident.ts +59 -0
  338. package/dist/integrations/servicenow/files/ai/tools/list-incidents.ts +72 -0
  339. package/dist/integrations/servicenow/files/ai/tools/search-knowledge.ts +48 -0
  340. package/dist/integrations/servicenow/files/ai/tools/update-incident.ts +60 -0
  341. package/dist/integrations/servicenow/files/app/api/auth/servicenow/callback/route.ts +89 -0
  342. package/dist/integrations/servicenow/files/app/api/auth/servicenow/route.ts +42 -0
  343. package/dist/integrations/servicenow/files/lib/servicenow-client.ts +239 -0
  344. package/dist/integrations/sharepoint/connector.json +99 -0
  345. package/dist/integrations/sharepoint/files/ai/tools/get-file.ts +93 -0
  346. package/dist/integrations/sharepoint/files/ai/tools/get-site.ts +51 -0
  347. package/dist/integrations/sharepoint/files/ai/tools/list-files.ts +63 -0
  348. package/dist/integrations/sharepoint/files/ai/tools/list-sites.ts +28 -0
  349. package/dist/integrations/sharepoint/files/ai/tools/upload-file.ts +72 -0
  350. package/dist/integrations/sharepoint/files/app/api/auth/sharepoint/callback/route.ts +11 -0
  351. package/dist/integrations/sharepoint/files/app/api/auth/sharepoint/route.ts +9 -0
  352. package/dist/integrations/sharepoint/files/lib/sharepoint-client.ts +420 -0
  353. package/dist/integrations/sheets/README.md +331 -0
  354. package/dist/integrations/sheets/connector.json +99 -0
  355. package/dist/integrations/sheets/files/_env.example +8 -0
  356. package/dist/integrations/sheets/files/ai/tools/create-spreadsheet.ts +85 -0
  357. package/dist/integrations/sheets/files/ai/tools/get-spreadsheet.ts +39 -0
  358. package/dist/integrations/sheets/files/ai/tools/list-spreadsheets.ts +41 -0
  359. package/dist/integrations/sheets/files/ai/tools/read-range.ts +35 -0
  360. package/dist/integrations/sheets/files/ai/tools/write-range.ts +51 -0
  361. package/dist/integrations/sheets/files/app/api/auth/sheets/callback/route.ts +11 -0
  362. package/dist/integrations/sheets/files/app/api/auth/sheets/route.ts +9 -0
  363. package/dist/integrations/sheets/files/lib/sheets-client.ts +425 -0
  364. package/dist/integrations/shopify/connector.json +99 -0
  365. package/dist/integrations/shopify/files/_env.example +5 -0
  366. package/dist/integrations/shopify/files/ai/tools/get-order.ts +49 -0
  367. package/dist/integrations/shopify/files/ai/tools/get-product.ts +39 -0
  368. package/dist/integrations/shopify/files/ai/tools/list-customers.ts +40 -0
  369. package/dist/integrations/shopify/files/ai/tools/list-orders.ts +52 -0
  370. package/dist/integrations/shopify/files/ai/tools/list-products.ts +39 -0
  371. package/dist/integrations/shopify/files/app/api/auth/shopify/callback/route.ts +11 -0
  372. package/dist/integrations/shopify/files/app/api/auth/shopify/route.ts +7 -0
  373. package/dist/integrations/shopify/files/lib/shopify-client.ts +198 -0
  374. package/dist/integrations/slack/files/app/api/auth/slack/callback/route.ts +6 -127
  375. package/dist/integrations/slack/files/app/api/auth/slack/route.ts +4 -24
  376. package/dist/integrations/snowflake/connector.json +151 -0
  377. package/dist/integrations/snowflake/files/_env.example +16 -0
  378. package/dist/integrations/snowflake/files/ai/tools/describe-table.ts +57 -0
  379. package/dist/integrations/snowflake/files/ai/tools/list-databases.ts +34 -0
  380. package/dist/integrations/snowflake/files/ai/tools/list-schemas.ts +40 -0
  381. package/dist/integrations/snowflake/files/ai/tools/list-tables.ts +49 -0
  382. package/dist/integrations/snowflake/files/ai/tools/run-query.ts +119 -0
  383. package/dist/integrations/snowflake/files/lib/snowflake-client.ts +389 -0
  384. package/dist/integrations/stripe/connector.json +97 -0
  385. package/dist/integrations/stripe/files/_env.example +6 -0
  386. package/dist/integrations/stripe/files/ai/tools/get-balance.ts +28 -0
  387. package/dist/integrations/stripe/files/ai/tools/get-customer.ts +26 -0
  388. package/dist/integrations/stripe/files/ai/tools/list-customers.ts +42 -0
  389. package/dist/integrations/stripe/files/ai/tools/list-payments.ts +45 -0
  390. package/dist/integrations/stripe/files/ai/tools/list-subscriptions.ts +67 -0
  391. package/dist/integrations/stripe/files/app/api/auth/stripe/route.ts +71 -0
  392. package/dist/integrations/stripe/files/lib/stripe-client.ts +376 -0
  393. package/dist/integrations/supabase/connector.json +101 -0
  394. package/dist/integrations/supabase/files/_env.example +6 -0
  395. package/dist/integrations/supabase/files/ai/tools/delete-row.ts +77 -0
  396. package/dist/integrations/supabase/files/ai/tools/insert-row.ts +35 -0
  397. package/dist/integrations/supabase/files/ai/tools/list-tables.ts +60 -0
  398. package/dist/integrations/supabase/files/ai/tools/query-table.ts +48 -0
  399. package/dist/integrations/supabase/files/ai/tools/update-row.ts +64 -0
  400. package/dist/integrations/supabase/files/app/api/auth/supabase/route.ts +91 -0
  401. package/dist/integrations/supabase/files/lib/supabase-client.ts +296 -0
  402. package/dist/integrations/teams/README.md +256 -0
  403. package/dist/integrations/teams/connector.json +99 -0
  404. package/dist/integrations/teams/files/ai/tools/get-messages.ts +55 -0
  405. package/dist/integrations/teams/files/ai/tools/list-channels.ts +28 -0
  406. package/dist/integrations/teams/files/ai/tools/list-chats.ts +41 -0
  407. package/dist/integrations/teams/files/ai/tools/list-teams.ts +27 -0
  408. package/dist/integrations/teams/files/ai/tools/send-message.ts +61 -0
  409. package/dist/integrations/teams/files/app/api/auth/teams/callback/route.ts +11 -0
  410. package/dist/integrations/teams/files/app/api/auth/teams/route.ts +9 -0
  411. package/dist/integrations/teams/files/lib/teams-client.ts +345 -0
  412. package/dist/integrations/trello/connector.json +85 -0
  413. package/dist/integrations/trello/files/_env.example +4 -0
  414. package/dist/integrations/trello/files/ai/tools/create-card.ts +54 -0
  415. package/dist/integrations/trello/files/ai/tools/get-card.ts +33 -0
  416. package/dist/integrations/trello/files/ai/tools/list-boards.ts +29 -0
  417. package/dist/integrations/trello/files/ai/tools/list-cards.ts +52 -0
  418. package/dist/integrations/trello/files/ai/tools/update-card.ts +65 -0
  419. package/dist/integrations/trello/files/app/api/auth/trello/callback/route.ts +11 -0
  420. package/dist/integrations/trello/files/app/api/auth/trello/route.ts +7 -0
  421. package/dist/integrations/trello/files/lib/trello-client.ts +202 -0
  422. package/dist/integrations/twilio/connector.json +146 -0
  423. package/dist/integrations/twilio/files/_env.example +14 -0
  424. package/dist/integrations/twilio/files/ai/tools/get-message.ts +58 -0
  425. package/dist/integrations/twilio/files/ai/tools/list-calls.ts +129 -0
  426. package/dist/integrations/twilio/files/ai/tools/list-messages.ts +97 -0
  427. package/dist/integrations/twilio/files/ai/tools/send-sms.ts +75 -0
  428. package/dist/integrations/twilio/files/ai/tools/send-whatsapp.ts +81 -0
  429. package/dist/integrations/twilio/files/lib/twilio-client.ts +375 -0
  430. package/dist/integrations/twitter/connector.json +87 -0
  431. package/dist/integrations/twitter/files/_env.example +6 -0
  432. package/dist/integrations/twitter/files/ai/tools/get-timeline.ts +59 -0
  433. package/dist/integrations/twitter/files/ai/tools/post-tweet.ts +49 -0
  434. package/dist/integrations/twitter/files/ai/tools/search-tweets.ts +71 -0
  435. package/dist/integrations/twitter/files/app/api/auth/twitter/callback/route.ts +11 -0
  436. package/dist/integrations/twitter/files/app/api/auth/twitter/route.ts +9 -0
  437. package/dist/integrations/twitter/files/lib/twitter-client.ts +236 -0
  438. package/dist/integrations/webex/connector.json +85 -0
  439. package/dist/integrations/webex/files/_env.example +4 -0
  440. package/dist/integrations/webex/files/ai/tools/create-meeting.ts +69 -0
  441. package/dist/integrations/webex/files/ai/tools/get-meeting.ts +31 -0
  442. package/dist/integrations/webex/files/ai/tools/list-meetings.ts +44 -0
  443. package/dist/integrations/webex/files/ai/tools/list-rooms.ts +35 -0
  444. package/dist/integrations/webex/files/ai/tools/send-message.ts +51 -0
  445. package/dist/integrations/webex/files/app/api/auth/webex/callback/route.ts +11 -0
  446. package/dist/integrations/webex/files/app/api/auth/webex/route.ts +7 -0
  447. package/dist/integrations/webex/files/lib/webex-client.ts +279 -0
  448. package/dist/integrations/xero/connector.json +85 -0
  449. package/dist/integrations/xero/files/_env.example +4 -0
  450. package/dist/integrations/xero/files/ai/tools/create-invoice.ts +65 -0
  451. package/dist/integrations/xero/files/ai/tools/get-contact.ts +40 -0
  452. package/dist/integrations/xero/files/ai/tools/get-invoice.ts +44 -0
  453. package/dist/integrations/xero/files/ai/tools/list-contacts.ts +54 -0
  454. package/dist/integrations/xero/files/ai/tools/list-invoices.ts +54 -0
  455. package/dist/integrations/xero/files/app/api/auth/xero/callback/route.ts +11 -0
  456. package/dist/integrations/xero/files/app/api/auth/xero/route.ts +7 -0
  457. package/dist/integrations/xero/files/lib/xero-client.ts +292 -0
  458. package/dist/integrations/zendesk/connector.json +61 -0
  459. package/dist/integrations/zendesk/files/_env.example +5 -0
  460. package/dist/integrations/zendesk/files/ai/tools/create-ticket.ts +82 -0
  461. package/dist/integrations/zendesk/files/ai/tools/get-ticket.ts +53 -0
  462. package/dist/integrations/zendesk/files/ai/tools/list-tickets.ts +60 -0
  463. package/dist/integrations/zendesk/files/ai/tools/search-tickets.ts +56 -0
  464. package/dist/integrations/zendesk/files/app/api/auth/zendesk/callback/route.ts +91 -0
  465. package/dist/integrations/zendesk/files/app/api/auth/zendesk/route.ts +41 -0
  466. package/dist/integrations/zendesk/files/lib/zendesk-client.ts +265 -0
  467. package/dist/integrations/zoom/connector.json +85 -0
  468. package/dist/integrations/zoom/files/_env.example +4 -0
  469. package/dist/integrations/zoom/files/ai/tools/create-meeting.ts +106 -0
  470. package/dist/integrations/zoom/files/ai/tools/delete-meeting.ts +32 -0
  471. package/dist/integrations/zoom/files/ai/tools/get-meeting.ts +44 -0
  472. package/dist/integrations/zoom/files/ai/tools/list-meetings.ts +47 -0
  473. package/dist/integrations/zoom/files/ai/tools/update-meeting.ts +111 -0
  474. package/dist/integrations/zoom/files/app/api/auth/zoom/callback/route.ts +11 -0
  475. package/dist/integrations/zoom/files/app/api/auth/zoom/route.ts +7 -0
  476. package/dist/integrations/zoom/files/lib/zoom-client.ts +228 -0
  477. package/dist/oauth/handlers.js +554 -0
  478. package/dist/oauth/handlers.js.map +7 -0
  479. package/dist/oauth/index.js +1157 -0
  480. package/dist/oauth/index.js.map +7 -0
  481. package/dist/oauth/providers.js +927 -0
  482. package/dist/oauth/providers.js.map +7 -0
  483. package/dist/oauth/token-store.js +82 -0
  484. package/dist/oauth/token-store.js.map +7 -0
  485. package/package.json +25 -1
  486. package/dist/integrations/calendar/files/lib/token-store.ts +0 -113
  487. package/dist/integrations/github/files/lib/token-store.ts +0 -113
  488. package/dist/integrations/gmail/files/lib/oauth.ts +0 -145
  489. package/dist/integrations/gmail/files/lib/token-store.ts +0 -113
  490. package/dist/integrations/slack/files/lib/oauth.ts +0 -145
  491. package/dist/integrations/slack/files/lib/token-store.ts +0 -113
  492. /package/dist/integrations/{calendar → docs-google}/files/lib/oauth.ts +0 -0
  493. /package/dist/integrations/{github → drive}/files/lib/oauth.ts +0 -0
@@ -0,0 +1,314 @@
1
+ import { getAccessToken } from "./token-store.ts";
2
+
3
+ const GRAPH_API_URL = "https://graph.microsoft.com/v1.0";
4
+
5
+ // OneDrive API Types (Microsoft Graph API)
6
+ export interface DriveItem {
7
+ id: string;
8
+ name: string;
9
+ size?: number;
10
+ createdDateTime: string;
11
+ lastModifiedDateTime: string;
12
+ webUrl: string;
13
+ parentReference?: {
14
+ driveId: string;
15
+ id: string;
16
+ path: string;
17
+ };
18
+ file?: {
19
+ mimeType: string;
20
+ hashes?: {
21
+ quickXorHash?: string;
22
+ sha1Hash?: string;
23
+ sha256Hash?: string;
24
+ };
25
+ };
26
+ folder?: {
27
+ childCount: number;
28
+ };
29
+ "@microsoft.graph.downloadUrl"?: string;
30
+ }
31
+
32
+ export interface FileMetadata {
33
+ id: string;
34
+ name: string;
35
+ size: number;
36
+ mimeType: string;
37
+ createdDateTime: string;
38
+ lastModifiedDateTime: string;
39
+ webUrl: string;
40
+ downloadUrl?: string;
41
+ }
42
+
43
+ export interface FolderMetadata {
44
+ id: string;
45
+ name: string;
46
+ childCount: number;
47
+ createdDateTime: string;
48
+ lastModifiedDateTime: string;
49
+ webUrl: string;
50
+ }
51
+
52
+ export interface ListFilesResult {
53
+ value: DriveItem[];
54
+ "@odata.nextLink"?: string;
55
+ }
56
+
57
+ export interface SearchResult {
58
+ value: DriveItem[];
59
+ "@odata.nextLink"?: string;
60
+ }
61
+
62
+ // Helper function for OneDrive API calls
63
+ async function onedriveFetch<T>(
64
+ endpoint: string,
65
+ options: RequestInit = {},
66
+ ): Promise<T> {
67
+ const token = await getAccessToken();
68
+ if (!token) {
69
+ throw new Error("Not authenticated with OneDrive. Please connect your account.");
70
+ }
71
+
72
+ const url = endpoint.startsWith("http") ? endpoint : `${GRAPH_API_URL}${endpoint}`;
73
+
74
+ const response = await fetch(url, {
75
+ ...options,
76
+ headers: {
77
+ Authorization: `Bearer ${token}`,
78
+ "Content-Type": "application/json",
79
+ ...options.headers,
80
+ },
81
+ });
82
+
83
+ if (!response.ok) {
84
+ const error = await response.json().catch(() => ({}));
85
+ throw new Error(
86
+ `OneDrive API error: ${response.status} ${error.error?.message || response.statusText}`,
87
+ );
88
+ }
89
+
90
+ return response.json();
91
+ }
92
+
93
+ // File and Folder Operations
94
+
95
+ /**
96
+ * List files in a folder
97
+ * @param folderId Folder ID or path (use "root" for root folder)
98
+ */
99
+ export function listFiles(
100
+ folderId: string = "root",
101
+ options?: {
102
+ orderBy?: string;
103
+ top?: number;
104
+ select?: string[];
105
+ },
106
+ ): Promise<ListFilesResult> {
107
+ const params = new URLSearchParams();
108
+
109
+ if (options?.orderBy) {
110
+ params.set("$orderby", options.orderBy);
111
+ }
112
+ if (options?.top) {
113
+ params.set("$top", options.top.toString());
114
+ }
115
+ if (options?.select) {
116
+ params.set("$select", options.select.join(","));
117
+ }
118
+
119
+ const queryString = params.toString();
120
+ const endpoint = `/me/drive/items/${folderId}/children${queryString ? `?${queryString}` : ""}`;
121
+
122
+ return onedriveFetch<ListFilesResult>(endpoint);
123
+ }
124
+
125
+ /**
126
+ * Get file or folder metadata
127
+ */
128
+ export function getFile(itemId: string): Promise<DriveItem> {
129
+ return onedriveFetch<DriveItem>(`/me/drive/items/${itemId}`);
130
+ }
131
+
132
+ /**
133
+ * Download file content
134
+ */
135
+ export async function downloadFile(itemId: string): Promise<{
136
+ content: string;
137
+ metadata: FileMetadata;
138
+ }> {
139
+ const item = await getFile(itemId);
140
+
141
+ if (!item.file) {
142
+ throw new Error("Item is not a file");
143
+ }
144
+
145
+ const downloadUrl = item["@microsoft.graph.downloadUrl"];
146
+ if (!downloadUrl) {
147
+ throw new Error("Download URL not available");
148
+ }
149
+
150
+ const response = await fetch(downloadUrl);
151
+ if (!response.ok) {
152
+ throw new Error(`Failed to download file: ${response.statusText}`);
153
+ }
154
+
155
+ const content = await response.text();
156
+
157
+ const metadata: FileMetadata = {
158
+ id: item.id,
159
+ name: item.name,
160
+ size: item.size || 0,
161
+ mimeType: item.file.mimeType,
162
+ createdDateTime: item.createdDateTime,
163
+ lastModifiedDateTime: item.lastModifiedDateTime,
164
+ webUrl: item.webUrl,
165
+ downloadUrl,
166
+ };
167
+
168
+ return { content, metadata };
169
+ }
170
+
171
+ /**
172
+ * Upload file
173
+ * For files smaller than 4MB, use simple upload
174
+ */
175
+ export async function uploadFile(
176
+ fileName: string,
177
+ content: string,
178
+ parentFolderId: string = "root",
179
+ ): Promise<DriveItem> {
180
+ const token = await getAccessToken();
181
+ if (!token) {
182
+ throw new Error("Not authenticated with OneDrive. Please connect your account.");
183
+ }
184
+
185
+ const endpoint = `${GRAPH_API_URL}/me/drive/items/${parentFolderId}:/${fileName}:/content`;
186
+
187
+ const response = await fetch(endpoint, {
188
+ method: "PUT",
189
+ headers: {
190
+ Authorization: `Bearer ${token}`,
191
+ "Content-Type": "application/octet-stream",
192
+ },
193
+ body: content,
194
+ });
195
+
196
+ if (!response.ok) {
197
+ const error = await response.json().catch(() => ({}));
198
+ throw new Error(
199
+ `Failed to upload file: ${error.error?.message || response.statusText}`,
200
+ );
201
+ }
202
+
203
+ return response.json();
204
+ }
205
+
206
+ /**
207
+ * Create folder
208
+ */
209
+ export function createFolder(
210
+ folderName: string,
211
+ parentFolderId: string = "root",
212
+ ): Promise<DriveItem> {
213
+ return onedriveFetch<DriveItem>(`/me/drive/items/${parentFolderId}/children`, {
214
+ method: "POST",
215
+ body: JSON.stringify({
216
+ name: folderName,
217
+ folder: {},
218
+ "@microsoft.graph.conflictBehavior": "rename",
219
+ }),
220
+ });
221
+ }
222
+
223
+ /**
224
+ * Search files
225
+ */
226
+ export function searchFiles(
227
+ query: string,
228
+ options?: {
229
+ top?: number;
230
+ },
231
+ ): Promise<SearchResult> {
232
+ const params = new URLSearchParams({
233
+ q: query,
234
+ });
235
+
236
+ if (options?.top) {
237
+ params.set("$top", options.top.toString());
238
+ }
239
+
240
+ return onedriveFetch<SearchResult>(
241
+ `/me/drive/root/search(q='${encodeURIComponent(query)}')?${params.toString()}`,
242
+ );
243
+ }
244
+
245
+ /**
246
+ * Delete file or folder
247
+ */
248
+ export async function deleteFile(itemId: string): Promise<void> {
249
+ const token = await getAccessToken();
250
+ if (!token) {
251
+ throw new Error("Not authenticated with OneDrive. Please connect your account.");
252
+ }
253
+
254
+ const response = await fetch(`${GRAPH_API_URL}/me/drive/items/${itemId}`, {
255
+ method: "DELETE",
256
+ headers: {
257
+ Authorization: `Bearer ${token}`,
258
+ },
259
+ });
260
+
261
+ if (!response.ok) {
262
+ const error = await response.json().catch(() => ({}));
263
+ throw new Error(
264
+ `Failed to delete item: ${error.error?.message || response.statusText}`,
265
+ );
266
+ }
267
+ }
268
+
269
+ /**
270
+ * Move file or folder
271
+ */
272
+ export function moveFile(
273
+ itemId: string,
274
+ newParentId: string,
275
+ newName?: string,
276
+ ): Promise<DriveItem> {
277
+ const body: Record<string, unknown> = {
278
+ parentReference: {
279
+ id: newParentId,
280
+ },
281
+ };
282
+
283
+ if (newName) {
284
+ body.name = newName;
285
+ }
286
+
287
+ return onedriveFetch<DriveItem>(`/me/drive/items/${itemId}`, {
288
+ method: "PATCH",
289
+ body: JSON.stringify(body),
290
+ });
291
+ }
292
+
293
+ // Helper Functions
294
+
295
+ export function formatFileSize(bytes: number): string {
296
+ const units = ["B", "KB", "MB", "GB", "TB"];
297
+ let size = bytes;
298
+ let unitIndex = 0;
299
+
300
+ while (size >= 1024 && unitIndex < units.length - 1) {
301
+ size /= 1024;
302
+ unitIndex++;
303
+ }
304
+
305
+ return `${size.toFixed(2)} ${units[unitIndex]}`;
306
+ }
307
+
308
+ export function isFile(item: DriveItem): boolean {
309
+ return item.file !== undefined;
310
+ }
311
+
312
+ export function isFolder(item: DriveItem): boolean {
313
+ return item.folder !== undefined;
314
+ }
@@ -0,0 +1,308 @@
1
+ # Microsoft Outlook Integration for Veryfront
2
+
3
+ Complete Microsoft Outlook integration following the veryfront integration pattern.
4
+
5
+ ## Features
6
+
7
+ - OAuth 2.0 authentication with Microsoft Graph API
8
+ - Read, send, and manage Outlook emails
9
+ - Search emails across all folders
10
+ - List and organize mail folders
11
+ - Full TypeScript type safety
12
+
13
+ ## Setup Instructions
14
+
15
+ ### 1. Create Azure App Registration
16
+
17
+ 1. Go to [Azure Portal - App Registrations](https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade)
18
+ 2. Click "New registration"
19
+ 3. Enter application details:
20
+ - Name: Your app name (e.g., "Veryfront Outlook Integration")
21
+ - Supported account types: "Accounts in any organizational directory and personal Microsoft accounts"
22
+ - Redirect URI: `http://localhost:3000/api/auth/outlook/callback` (adjust for your domain)
23
+ 4. Click "Register"
24
+
25
+ ### 2. Configure App Credentials
26
+
27
+ 1. Note the "Application (client) ID" - this is your `MICROSOFT_CLIENT_ID`
28
+ 2. Go to "Certificates & secrets"
29
+ 3. Click "New client secret"
30
+ 4. Add a description and expiration period
31
+ 5. Copy the secret value - this is your `MICROSOFT_CLIENT_SECRET`
32
+
33
+ ### 3. Set API Permissions
34
+
35
+ 1. Go to "API permissions"
36
+ 2. Click "Add a permission" → "Microsoft Graph" → "Delegated permissions"
37
+ 3. Add these permissions:
38
+ - `Mail.Read` - Read user mail
39
+ - `Mail.Send` - Send mail as a user
40
+ - `Mail.ReadWrite` - Read and write access to user mail
41
+ - `offline_access` - Maintain access to data you have given it access to
42
+ 4. Click "Grant admin consent" (if available)
43
+
44
+ ### 4. Add Environment Variables
45
+
46
+ Add to your `.env` file:
47
+
48
+ ```bash
49
+ MICROSOFT_CLIENT_ID=your_client_id_here
50
+ MICROSOFT_CLIENT_SECRET=your_client_secret_here
51
+ ```
52
+
53
+ ## File Structure
54
+
55
+ ```
56
+ outlook/
57
+ ├── connector.json # Integration configuration
58
+ ├── files/
59
+ │ ├── _env.example # Example environment variables
60
+ │ ├── lib/
61
+ │ │ ├── oauth.ts # OAuth flow utilities
62
+ │ │ ├── outlook-client.ts # Microsoft Graph API client
63
+ │ │ └── token-store.ts # Token storage (in-memory)
64
+ │ ├── app/api/auth/outlook/
65
+ │ │ ├── route.ts # OAuth initiation
66
+ │ │ └── callback/route.ts # OAuth callback handler
67
+ │ └── ai/tools/
68
+ │ ├── list-emails.ts # List recent emails
69
+ │ ├── get-email.ts # Get email details
70
+ │ ├── send-email.ts # Send email
71
+ │ ├── search-emails.ts # Search emails
72
+ │ └── list-folders.ts # List mail folders
73
+ ```
74
+
75
+ ## API Client (`outlook-client.ts`)
76
+
77
+ ### Functions
78
+
79
+ #### `listEmails(options?)`
80
+ List emails from inbox or specific folder.
81
+ - `folderId?: string` - Folder ID (default: inbox)
82
+ - `top?: number` - Max results
83
+ - `skip?: number` - Pagination offset
84
+ - `filter?: string` - OData filter
85
+ - `orderBy?: string` - Sort order
86
+
87
+ #### `getEmail(messageId: string)`
88
+ Get detailed email information including full body.
89
+
90
+ #### `sendEmail(options: SendEmailOptions)`
91
+ Send a new email message.
92
+ - `to: string[]` - Recipients
93
+ - `subject: string` - Subject line
94
+ - `body: string` - Email body
95
+ - `cc?: string[]` - CC recipients
96
+ - `bcc?: string[]` - BCC recipients
97
+ - `importance?: 'low' | 'normal' | 'high'`
98
+ - `bodyType?: 'text' | 'html'`
99
+
100
+ #### `searchEmails(options)`
101
+ Search emails by query string.
102
+ - `query: string` - Search query
103
+ - `top?: number` - Max results
104
+ - `skip?: number` - Pagination offset
105
+
106
+ #### `listFolders()`
107
+ List all mail folders in the mailbox.
108
+
109
+ #### Helper Functions
110
+ - `markAsRead(messageId: string)`
111
+ - `markAsUnread(messageId: string)`
112
+ - `deleteEmail(messageId: string)`
113
+ - `moveEmail(messageId: string, destinationFolderId: string)`
114
+ - `formatEmail(message: OutlookMessage)` - Format for display
115
+
116
+ ## AI Tools
117
+
118
+ ### 1. `list-emails`
119
+ List recent emails from inbox or folder.
120
+
121
+ **Parameters:**
122
+ - `folderId?: string` - Folder ID
123
+ - `limit?: number` (1-50, default: 10) - Max emails
124
+ - `unreadOnly?: boolean` - Only unread emails
125
+ - `orderBy?: string` - Sort order
126
+
127
+ **Example:**
128
+ ```typescript
129
+ {
130
+ folderId: "inbox",
131
+ limit: 20,
132
+ unreadOnly: true,
133
+ orderBy: "receivedDateTime desc"
134
+ }
135
+ ```
136
+
137
+ ### 2. `get-email`
138
+ Get detailed email information.
139
+
140
+ **Parameters:**
141
+ - `messageId: string` - Email ID
142
+ - `includeBody?: boolean` (default: true) - Include full body
143
+
144
+ **Example:**
145
+ ```typescript
146
+ {
147
+ messageId: "AAMkAGI2TG93AAA=",
148
+ includeBody: true
149
+ }
150
+ ```
151
+
152
+ ### 3. `send-email`
153
+ Send a new email message.
154
+
155
+ **Parameters:**
156
+ - `to: string[]` - Recipient emails
157
+ - `subject: string` - Subject line
158
+ - `body: string` - Email body
159
+ - `cc?: string[]` - CC emails
160
+ - `bcc?: string[]` - BCC emails
161
+ - `importance?: 'low' | 'normal' | 'high'`
162
+ - `bodyType?: 'text' | 'html'`
163
+
164
+ **Example:**
165
+ ```typescript
166
+ {
167
+ to: ["user@example.com"],
168
+ subject: "Meeting Follow-up",
169
+ body: "Thank you for attending...",
170
+ cc: ["manager@example.com"],
171
+ importance: "high",
172
+ bodyType: "text"
173
+ }
174
+ ```
175
+
176
+ ### 4. `search-emails`
177
+ Search emails across all fields.
178
+
179
+ **Parameters:**
180
+ - `query: string` - Search query
181
+ - `limit?: number` (1-50, default: 10) - Max results
182
+
183
+ **Example:**
184
+ ```typescript
185
+ {
186
+ query: "quarterly report",
187
+ limit: 15
188
+ }
189
+ ```
190
+
191
+ ### 5. `list-folders`
192
+ List all mail folders.
193
+
194
+ **Parameters:** None
195
+
196
+ **Returns:** Array of folders with counts and metadata.
197
+
198
+ ## OAuth Configuration
199
+
200
+ ### Authorization URL
201
+ ```
202
+ https://login.microsoftonline.com/common/oauth2/v2.0/authorize
203
+ ```
204
+
205
+ ### Token URL
206
+ ```
207
+ https://login.microsoftonline.com/common/oauth2/v2.0/token
208
+ ```
209
+
210
+ ### Scopes
211
+ - `Mail.Read` - Read user mail
212
+ - `Mail.Send` - Send mail
213
+ - `Mail.ReadWrite` - Full mail access
214
+ - `offline_access` - Refresh token
215
+
216
+ ### Token Authentication
217
+ Uses `body` method (credentials sent in request body as form parameters).
218
+
219
+ ## Usage Flow
220
+
221
+ 1. User navigates to `/api/auth/outlook`
222
+ 2. Redirected to Microsoft login
223
+ 3. User authorizes application
224
+ 4. Microsoft redirects to `/api/auth/outlook/callback` with code
225
+ 5. Code exchanged for access token
226
+ 6. Token stored (in-memory by default)
227
+ 7. AI tools can now access Outlook data
228
+
229
+ ## Production Considerations
230
+
231
+ ### Token Storage
232
+ The default `token-store.ts` uses in-memory storage. For production:
233
+
234
+ 1. Replace with database-backed storage
235
+ 2. Implement token encryption
236
+ 3. Support multiple users with session management
237
+ 4. Implement token refresh logic
238
+
239
+ ### Token Refresh
240
+ Access tokens expire after ~1 hour. Implement refresh logic:
241
+
242
+ ```typescript
243
+ import { refreshAccessToken } from './oauth'
244
+ import { getRefreshToken, setTokens } from './token-store'
245
+
246
+ async function ensureValidToken() {
247
+ const refreshToken = getRefreshToken()
248
+ if (refreshToken) {
249
+ const tokens = await refreshAccessToken(refreshToken)
250
+ setTokens({
251
+ accessToken: tokens.access_token,
252
+ refreshToken: tokens.refresh_token,
253
+ expiresAt: Date.now() + tokens.expires_in * 1000,
254
+ })
255
+ }
256
+ }
257
+ ```
258
+
259
+ ### Security
260
+ - Store secrets in environment variables
261
+ - Use HTTPS in production
262
+ - Implement CSRF protection (state parameter)
263
+ - Validate redirect URIs
264
+ - Rate limit API calls
265
+
266
+ ## Microsoft Graph API Resources
267
+
268
+ - [Microsoft Graph Documentation](https://docs.microsoft.com/graph/)
269
+ - [Mail API Reference](https://docs.microsoft.com/graph/api/resources/mail-api-overview)
270
+ - [Authentication Guide](https://docs.microsoft.com/graph/auth/)
271
+ - [OAuth 2.0 Flow](https://docs.microsoft.com/azure/active-directory/develop/v2-oauth2-auth-code-flow)
272
+
273
+ ## Troubleshooting
274
+
275
+ ### Common Issues
276
+
277
+ **"Not authenticated" error**
278
+ - Verify OAuth flow completed successfully
279
+ - Check token storage is working
280
+ - Ensure tokens haven't expired
281
+
282
+ **"Insufficient permissions" error**
283
+ - Verify all required scopes are requested
284
+ - Check admin consent was granted
285
+ - Ensure API permissions are enabled in Azure
286
+
287
+ **"Invalid client" error**
288
+ - Verify `MICROSOFT_CLIENT_ID` is correct
289
+ - Check `MICROSOFT_CLIENT_SECRET` is valid
290
+ - Ensure redirect URI matches Azure configuration
291
+
292
+ ## Testing
293
+
294
+ To test the integration:
295
+
296
+ 1. Start your development server
297
+ 2. Navigate to `/api/auth/outlook`
298
+ 3. Complete Microsoft OAuth flow
299
+ 4. Test AI tools via chat interface
300
+
301
+ Example prompts:
302
+ - "List my recent emails"
303
+ - "Search for emails about project alpha"
304
+ - "Send an email to john@example.com"
305
+
306
+ ## License
307
+
308
+ Part of the Veryfront framework.
@@ -0,0 +1,98 @@
1
+ {
2
+ "name": "outlook",
3
+ "displayName": "Microsoft Outlook",
4
+ "icon": "outlook.svg",
5
+ "description": "Read, send, and manage Outlook emails",
6
+ "auth": {
7
+ "type": "oauth2",
8
+ "provider": "microsoft",
9
+ "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
10
+ "tokenUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/token",
11
+ "scopes": [
12
+ "Mail.Read",
13
+ "Mail.Send",
14
+ "Mail.ReadWrite",
15
+ "offline_access"
16
+ ],
17
+ "callbackPath": "/api/auth/outlook/callback",
18
+ "tokenAuthMethod": "body",
19
+ "requiredApis": [
20
+ {
21
+ "name": "Microsoft Graph API",
22
+ "enableUrl": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade"
23
+ }
24
+ ]
25
+ },
26
+ "envVars": [
27
+ {
28
+ "name": "MICROSOFT_CLIENT_ID",
29
+ "description": "Microsoft Azure App Client ID (Application ID)",
30
+ "required": true,
31
+ "sensitive": false,
32
+ "docsUrl": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade"
33
+ },
34
+ {
35
+ "name": "MICROSOFT_CLIENT_SECRET",
36
+ "description": "Microsoft Azure App Client Secret",
37
+ "required": true,
38
+ "sensitive": true,
39
+ "docsUrl": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade"
40
+ }
41
+ ],
42
+ "tools": [
43
+ {
44
+ "id": "list-emails",
45
+ "name": "List Emails",
46
+ "description": "List recent emails from inbox or a specific folder",
47
+ "requiresWrite": false
48
+ },
49
+ {
50
+ "id": "get-email",
51
+ "name": "Get Email",
52
+ "description": "Get detailed information about a specific email",
53
+ "requiresWrite": false
54
+ },
55
+ {
56
+ "id": "send-email",
57
+ "name": "Send Email",
58
+ "description": "Send a new email message",
59
+ "requiresWrite": true
60
+ },
61
+ {
62
+ "id": "search-emails",
63
+ "name": "Search Emails",
64
+ "description": "Search emails by query, subject, sender, or date",
65
+ "requiresWrite": false
66
+ },
67
+ {
68
+ "id": "list-folders",
69
+ "name": "List Folders",
70
+ "description": "List all mail folders in the mailbox",
71
+ "requiresWrite": false
72
+ }
73
+ ],
74
+ "prompts": [
75
+ {
76
+ "id": "check-emails",
77
+ "title": "Check my emails",
78
+ "prompt": "List my recent unread emails and summarize the most important ones.",
79
+ "category": "productivity",
80
+ "icon": "mail"
81
+ },
82
+ {
83
+ "id": "search-emails",
84
+ "title": "Search my emails",
85
+ "prompt": "Search my emails for specific topics, senders, or date ranges.",
86
+ "category": "productivity",
87
+ "icon": "search"
88
+ },
89
+ {
90
+ "id": "draft-email",
91
+ "title": "Draft an email",
92
+ "prompt": "Help me draft a professional email with proper formatting and tone.",
93
+ "category": "productivity",
94
+ "icon": "compose"
95
+ }
96
+ ],
97
+ "suggestedWith": ["teams", "calendar", "gmail"]
98
+ }