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,64 @@
1
+ import { tool } from "veryfront/ai";
2
+ import { z } from "zod";
3
+ import { updateRow, updateRows } from "../../lib/supabase-client.ts";
4
+
5
+ export default tool({
6
+ id: "update-row",
7
+ description: "Update rows in a Supabase table. Can update by ID or by custom filter conditions.",
8
+ inputSchema: z.object({
9
+ tableName: z.string().describe("The name of the table to update"),
10
+ id: z.union([z.string(), z.number()]).optional().describe(
11
+ "The ID of the row to update (if updating a single row by ID)",
12
+ ),
13
+ filter: z.record(z.unknown()).optional().describe(
14
+ 'Filter conditions to match rows to update (e.g., {"status": "pending"})',
15
+ ),
16
+ data: z.record(z.unknown()).describe("The data to update as key-value pairs"),
17
+ }),
18
+ async execute({ tableName, id, filter, data }) {
19
+ try {
20
+ // Validate that either id or filter is provided
21
+ if (!id && !filter) {
22
+ return {
23
+ success: false,
24
+ tableName,
25
+ error: "Either id or filter must be provided",
26
+ message: "You must specify either an id or filter conditions to update rows",
27
+ };
28
+ }
29
+
30
+ // Update by ID (single row)
31
+ if (id) {
32
+ const result = await updateRow(tableName, id, data);
33
+ return {
34
+ success: true,
35
+ tableName,
36
+ rowsUpdated: 1,
37
+ row: result,
38
+ message: `Successfully updated row with id ${id} in ${tableName}`,
39
+ };
40
+ }
41
+
42
+ // Update by filter (multiple rows)
43
+ if (filter) {
44
+ const results = await updateRows(tableName, filter, data);
45
+ return {
46
+ success: true,
47
+ tableName,
48
+ rowsUpdated: results.length,
49
+ rows: results,
50
+ message: `Successfully updated ${results.length} row(s) in ${tableName}`,
51
+ };
52
+ }
53
+ } catch (error) {
54
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
55
+
56
+ return {
57
+ success: false,
58
+ tableName,
59
+ error: errorMessage,
60
+ message: `Failed to update row(s) in ${tableName}: ${errorMessage}`,
61
+ };
62
+ }
63
+ },
64
+ });
@@ -0,0 +1,91 @@
1
+ import { isConfigured, setSupabaseConfig } from "../../../../lib/token-store.ts";
2
+
3
+ /**
4
+ * POST /api/auth/supabase
5
+ * Initialize Supabase configuration with API keys
6
+ */
7
+ export async function POST(request: Request) {
8
+ try {
9
+ const body = await request.json();
10
+ const { url, anonKey, serviceKey } = body;
11
+
12
+ // Validate required fields
13
+ if (!url || !anonKey || !serviceKey) {
14
+ return Response.json(
15
+ { error: "Missing required fields: url, anonKey, serviceKey" },
16
+ { status: 400 },
17
+ );
18
+ }
19
+
20
+ // Validate URL format
21
+ try {
22
+ new URL(url);
23
+ } catch {
24
+ return Response.json(
25
+ { error: "Invalid Supabase URL format" },
26
+ { status: 400 },
27
+ );
28
+ }
29
+
30
+ // Store configuration
31
+ setSupabaseConfig({
32
+ url,
33
+ anonKey,
34
+ serviceKey,
35
+ });
36
+
37
+ return Response.json({
38
+ success: true,
39
+ message: "Supabase configuration saved successfully",
40
+ });
41
+ } catch (error) {
42
+ console.error("Supabase config error:", error);
43
+ return Response.json(
44
+ { error: "Failed to configure Supabase" },
45
+ { status: 500 },
46
+ );
47
+ }
48
+ }
49
+
50
+ /**
51
+ * GET /api/auth/supabase
52
+ * Check if Supabase is configured
53
+ */
54
+ export function GET() {
55
+ try {
56
+ const configured = isConfigured();
57
+
58
+ return Response.json({
59
+ configured,
60
+ message: configured ? "Supabase is configured" : "Supabase is not configured",
61
+ });
62
+ } catch (error) {
63
+ console.error("Supabase status check error:", error);
64
+ return Response.json(
65
+ { error: "Failed to check Supabase status" },
66
+ { status: 500 },
67
+ );
68
+ }
69
+ }
70
+
71
+ /**
72
+ * DELETE /api/auth/supabase
73
+ * Clear Supabase configuration
74
+ */
75
+ export async function DELETE() {
76
+ try {
77
+ const { clearConfig } = await import("../../../../lib/token-store.ts");
78
+ clearConfig();
79
+
80
+ return Response.json({
81
+ success: true,
82
+ message: "Supabase configuration cleared",
83
+ });
84
+ } catch (error) {
85
+ console.error("Supabase clear config error:", error);
86
+ return Response.json(
87
+ { error: "Failed to clear Supabase configuration" },
88
+ { status: 500 },
89
+ );
90
+ }
91
+ }
@@ -0,0 +1,296 @@
1
+ import { getAnonKey, getServiceKey, getSupabaseUrl } from "./token-store.ts";
2
+
3
+ interface SupabaseResponse<T> {
4
+ data: T | null;
5
+ error: {
6
+ message: string;
7
+ details?: string;
8
+ hint?: string;
9
+ code?: string;
10
+ } | null;
11
+ }
12
+
13
+ interface TableInfo {
14
+ table_name: string;
15
+ table_schema: string;
16
+ table_type: string;
17
+ }
18
+
19
+ interface ColumnInfo {
20
+ column_name: string;
21
+ data_type: string;
22
+ is_nullable: string;
23
+ column_default: string | null;
24
+ }
25
+
26
+ interface QueryOptions {
27
+ select?: string;
28
+ filter?: Record<string, unknown>;
29
+ order?: { column: string; ascending?: boolean };
30
+ limit?: number;
31
+ offset?: number;
32
+ }
33
+
34
+ interface SupabaseError extends Error {
35
+ code?: string;
36
+ details?: string;
37
+ hint?: string;
38
+ }
39
+
40
+ async function supabaseFetch<T>(
41
+ endpoint: string,
42
+ options: RequestInit = {},
43
+ useServiceRole = true,
44
+ ): Promise<T> {
45
+ const url = getSupabaseUrl();
46
+ const apiKey = useServiceRole ? getServiceKey() : getAnonKey();
47
+
48
+ const response = await fetch(`${url}/rest/v1${endpoint}`, {
49
+ ...options,
50
+ headers: {
51
+ "apikey": apiKey,
52
+ "Authorization": `Bearer ${apiKey}`,
53
+ "Content-Type": "application/json",
54
+ "Prefer": "return=representation",
55
+ ...options.headers,
56
+ },
57
+ });
58
+
59
+ if (!response.ok) {
60
+ const error = await response.json().catch(() => ({})) as SupabaseError;
61
+ const errorMessage = error.message ||
62
+ `Supabase API error: ${response.status} ${response.statusText}`;
63
+ const err: SupabaseError = new Error(errorMessage);
64
+ err.code = error.code;
65
+ err.details = error.details;
66
+ err.hint = error.hint;
67
+ throw err;
68
+ }
69
+
70
+ // Handle empty responses (like DELETE)
71
+ const text = await response.text();
72
+ return text ? JSON.parse(text) : null;
73
+ }
74
+
75
+ /**
76
+ * List all tables in the public schema
77
+ */
78
+ export async function listTables(): Promise<TableInfo[]> {
79
+ try {
80
+ const tables = await supabaseFetch<TableInfo[]>(
81
+ `/rpc/get_tables`,
82
+ {
83
+ method: "POST",
84
+ body: JSON.stringify({}),
85
+ },
86
+ );
87
+ return tables || [];
88
+ } catch (_error) {
89
+ // Fallback: query information_schema directly
90
+ const query =
91
+ `?select=table_name,table_schema,table_type&table_schema=eq.public&table_type=eq.BASE TABLE`;
92
+ const tables = await supabaseFetch<TableInfo[]>(`/information_schema.tables${query}`);
93
+ return tables || [];
94
+ }
95
+ }
96
+
97
+ /**
98
+ * Get columns for a specific table
99
+ */
100
+ export async function getTableColumns(tableName: string): Promise<ColumnInfo[]> {
101
+ const query =
102
+ `?select=column_name,data_type,is_nullable,column_default&table_name=eq.${tableName}&table_schema=eq.public`;
103
+ const columns = await supabaseFetch<ColumnInfo[]>(`/information_schema.columns${query}`);
104
+ return columns || [];
105
+ }
106
+
107
+ /**
108
+ * Query a table with filters, sorting, and pagination
109
+ */
110
+ export async function queryTable<T = Record<string, unknown>>(
111
+ tableName: string,
112
+ options: QueryOptions = {},
113
+ ): Promise<T[]> {
114
+ const params = new URLSearchParams();
115
+
116
+ // Select columns
117
+ if (options.select) {
118
+ params.append("select", options.select);
119
+ } else {
120
+ params.append("select", "*");
121
+ }
122
+
123
+ // Add filters
124
+ if (options.filter) {
125
+ for (const [key, value] of Object.entries(options.filter)) {
126
+ if (value === null) {
127
+ params.append(key, "is.null");
128
+ } else if (typeof value === "string") {
129
+ params.append(key, `eq.${value}`);
130
+ } else if (typeof value === "number") {
131
+ params.append(key, `eq.${value}`);
132
+ } else if (typeof value === "boolean") {
133
+ params.append(key, `eq.${value}`);
134
+ }
135
+ }
136
+ }
137
+
138
+ // Add ordering
139
+ if (options.order) {
140
+ const direction = options.order.ascending === false ? ".desc" : ".asc";
141
+ params.append("order", `${options.order.column}${direction}`);
142
+ }
143
+
144
+ // Add pagination
145
+ if (options.limit) {
146
+ params.append("limit", options.limit.toString());
147
+ }
148
+ if (options.offset) {
149
+ params.append("offset", options.offset.toString());
150
+ }
151
+
152
+ const queryString = params.toString();
153
+ const results = await supabaseFetch<T[]>(`/${tableName}?${queryString}`);
154
+ return results || [];
155
+ }
156
+
157
+ /**
158
+ * Insert a new row into a table
159
+ */
160
+ export async function insertRow<T = Record<string, unknown>>(
161
+ tableName: string,
162
+ data: Record<string, unknown>,
163
+ ): Promise<T> {
164
+ const result = await supabaseFetch<T[]>(
165
+ `/${tableName}`,
166
+ {
167
+ method: "POST",
168
+ body: JSON.stringify(data),
169
+ },
170
+ );
171
+
172
+ if (!result || result.length === 0) {
173
+ throw new Error("Insert operation did not return data");
174
+ }
175
+
176
+ return result[0];
177
+ }
178
+
179
+ /**
180
+ * Update a row in a table by ID
181
+ */
182
+ export async function updateRow<T = Record<string, unknown>>(
183
+ tableName: string,
184
+ id: string | number,
185
+ data: Record<string, unknown>,
186
+ ): Promise<T> {
187
+ const result = await supabaseFetch<T[]>(
188
+ `/${tableName}?id=eq.${id}`,
189
+ {
190
+ method: "PATCH",
191
+ body: JSON.stringify(data),
192
+ },
193
+ );
194
+
195
+ if (!result || result.length === 0) {
196
+ throw new Error(`No row found with id ${id}`);
197
+ }
198
+
199
+ return result[0];
200
+ }
201
+
202
+ /**
203
+ * Update rows in a table with custom filter
204
+ */
205
+ export async function updateRows<T = Record<string, unknown>>(
206
+ tableName: string,
207
+ filter: Record<string, unknown>,
208
+ data: Record<string, unknown>,
209
+ ): Promise<T[]> {
210
+ const params = new URLSearchParams();
211
+
212
+ for (const [key, value] of Object.entries(filter)) {
213
+ params.append(key, `eq.${value}`);
214
+ }
215
+
216
+ const result = await supabaseFetch<T[]>(
217
+ `/${tableName}?${params.toString()}`,
218
+ {
219
+ method: "PATCH",
220
+ body: JSON.stringify(data),
221
+ },
222
+ );
223
+
224
+ return result || [];
225
+ }
226
+
227
+ /**
228
+ * Delete a row from a table by ID
229
+ */
230
+ export async function deleteRow<T = Record<string, unknown>>(
231
+ tableName: string,
232
+ id: string | number,
233
+ ): Promise<T> {
234
+ const result = await supabaseFetch<T[]>(
235
+ `/${tableName}?id=eq.${id}`,
236
+ {
237
+ method: "DELETE",
238
+ },
239
+ );
240
+
241
+ if (!result || result.length === 0) {
242
+ throw new Error(`No row found with id ${id}`);
243
+ }
244
+
245
+ return result[0];
246
+ }
247
+
248
+ /**
249
+ * Delete rows from a table with custom filter
250
+ */
251
+ export async function deleteRows<T = Record<string, unknown>>(
252
+ tableName: string,
253
+ filter: Record<string, unknown>,
254
+ ): Promise<T[]> {
255
+ const params = new URLSearchParams();
256
+
257
+ for (const [key, value] of Object.entries(filter)) {
258
+ params.append(key, `eq.${value}`);
259
+ }
260
+
261
+ const result = await supabaseFetch<T[]>(
262
+ `/${tableName}?${params.toString()}`,
263
+ {
264
+ method: "DELETE",
265
+ },
266
+ );
267
+
268
+ return result || [];
269
+ }
270
+
271
+ /**
272
+ * Execute a raw SQL query using RPC
273
+ * Note: This requires a stored procedure to be created in your Supabase database
274
+ */
275
+ export function runRawQuery<T = unknown>(
276
+ query: string,
277
+ ): Promise<T> {
278
+ return supabaseFetch<T>(
279
+ "/rpc/execute_sql",
280
+ {
281
+ method: "POST",
282
+ body: JSON.stringify({ query }),
283
+ },
284
+ );
285
+ }
286
+
287
+ /**
288
+ * Get client instance (for use with @supabase/supabase-js if needed)
289
+ */
290
+ export function getClient() {
291
+ return {
292
+ url: getSupabaseUrl(),
293
+ anonKey: getAnonKey(),
294
+ serviceKey: getServiceKey(),
295
+ };
296
+ }
@@ -0,0 +1,256 @@
1
+ # Microsoft Teams Integration for Veryfront
2
+
3
+ This integration enables AI agents to interact with Microsoft Teams, allowing them to read chats, send messages, and manage team channels.
4
+
5
+ ## Features
6
+
7
+ - **List Chats**: Retrieve recent Teams chats with filtering options
8
+ - **Get Messages**: Read messages from specific chats or channels
9
+ - **Send Messages**: Send messages to chats or team channels
10
+ - **List Teams**: Get all teams the user is a member of
11
+ - **List Channels**: List channels within a specific team
12
+
13
+ ## Setup
14
+
15
+ ### 1. Register an Azure Application
16
+
17
+ 1. Go to the [Azure Portal](https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade)
18
+ 2. Click "New registration"
19
+ 3. Enter a name for your application (e.g., "Veryfront Teams Integration")
20
+ 4. Set the redirect URI to: `https://yourdomain.com/api/auth/teams/callback`
21
+ 5. Click "Register"
22
+
23
+ ### 2. Configure API Permissions
24
+
25
+ After registering your app:
26
+
27
+ 1. Go to "API permissions" in the left sidebar
28
+ 2. Click "Add a permission"
29
+ 3. Select "Microsoft Graph"
30
+ 4. Choose "Delegated permissions"
31
+ 5. Add the following permissions:
32
+ - `Chat.Read` - Read user chats
33
+ - `Chat.ReadWrite` - Read and write user chats
34
+ - `ChannelMessage.Send` - Send channel messages
35
+ - `Team.ReadBasic.All` - Read team information
36
+ - `offline_access` - Maintain access to data
37
+ 6. Click "Grant admin consent" if required by your organization
38
+
39
+ ### 3. Create a Client Secret
40
+
41
+ 1. Go to "Certificates & secrets"
42
+ 2. Click "New client secret"
43
+ 3. Add a description and set expiration
44
+ 4. Copy the secret value immediately (it won't be shown again)
45
+
46
+ ### 4. Configure Environment Variables
47
+
48
+ Add the following to your `.env` file:
49
+
50
+ ```bash
51
+ MICROSOFT_CLIENT_ID=your_application_id_here
52
+ MICROSOFT_CLIENT_SECRET=your_client_secret_here
53
+ ```
54
+
55
+ ## Usage
56
+
57
+ ### Authentication
58
+
59
+ Users need to authenticate with Microsoft Teams before using the tools:
60
+
61
+ 1. Navigate to `/api/auth/teams` in your application
62
+ 2. Complete the Microsoft OAuth flow
63
+ 3. You'll be redirected back to your application with access granted
64
+
65
+ ### AI Tools
66
+
67
+ #### list-chats
68
+
69
+ List recent Teams chats:
70
+
71
+ ```typescript
72
+ {
73
+ limit: 20, // Number of chats to return (1-50)
74
+ expandMembers: false // Include member information
75
+ }
76
+ ```
77
+
78
+ Returns chat IDs, names, types, and timestamps.
79
+
80
+ #### get-messages
81
+
82
+ Get messages from a specific chat:
83
+
84
+ ```typescript
85
+ {
86
+ chatId: "19:...", // Chat ID from list-chats
87
+ limit: 20, // Number of messages (1-50)
88
+ includeHtml: false // Include HTML formatted content
89
+ }
90
+ ```
91
+
92
+ Returns message content, sender info, attachments, and reactions.
93
+
94
+ #### send-message
95
+
96
+ Send a message to a chat or channel:
97
+
98
+ **For Chats:**
99
+ ```typescript
100
+ {
101
+ chatId: "19:...",
102
+ content: "Hello from the AI!",
103
+ contentType: "text" // "text" or "html"
104
+ }
105
+ ```
106
+
107
+ **For Channels:**
108
+ ```typescript
109
+ {
110
+ teamId: "team-id",
111
+ channelId: "channel-id",
112
+ content: "Update: Project completed!",
113
+ contentType: "text",
114
+ subject: "Project Update" // Optional
115
+ }
116
+ ```
117
+
118
+ #### list-teams
119
+
120
+ List all teams the user has joined:
121
+
122
+ ```typescript
123
+ {
124
+ limit: 25 // Number of teams (1-50)
125
+ }
126
+ ```
127
+
128
+ Returns team IDs, names, descriptions, and metadata.
129
+
130
+ #### list-channels
131
+
132
+ List channels in a specific team:
133
+
134
+ ```typescript
135
+ {
136
+ teamId: "team-id",
137
+ limit: 25 // Number of channels (1-50)
138
+ }
139
+ ```
140
+
141
+ Returns channel IDs, names, types, and links.
142
+
143
+ ## API Client
144
+
145
+ The Teams client (`teams-client.ts`) provides typed methods for all Microsoft Graph API operations:
146
+
147
+ ```typescript
148
+ import {
149
+ listChats,
150
+ getChatMessages,
151
+ sendChatMessage,
152
+ listTeams,
153
+ listChannels,
154
+ sendChannelMessage,
155
+ getChatDisplayName,
156
+ getPlainTextContent
157
+ } from "./lib/teams-client.ts";
158
+ ```
159
+
160
+ ### Key Methods
161
+
162
+ - `listChats(options)` - List user chats
163
+ - `getChatMessages(chatId, options)` - Get chat messages
164
+ - `sendChatMessage(chatId, content, contentType)` - Send chat message
165
+ - `listTeams(options)` - List joined teams
166
+ - `listChannels(teamId, options)` - List team channels
167
+ - `sendChannelMessage(teamId, channelId, content, contentType, subject)` - Send channel message
168
+ - `getCurrentUser()` - Get current user profile
169
+
170
+ ### Helper Functions
171
+
172
+ - `getChatDisplayName(chat)` - Format chat display name
173
+ - `getPlainTextContent(message)` - Extract plain text from message
174
+
175
+ ## Token Management
176
+
177
+ The integration uses an in-memory token store for development. For production:
178
+
179
+ 1. Replace `token-store.ts` with a database-backed implementation
180
+ 2. Store tokens securely with encryption
181
+ 3. Implement token refresh logic using the `refreshAccessToken()` function in `oauth.ts`
182
+ 4. Handle token expiration gracefully
183
+
184
+ ## Security Considerations
185
+
186
+ - **Scopes**: Only request the minimum required permissions
187
+ - **Token Storage**: Use encrypted database storage in production
188
+ - **Token Refresh**: Implement automatic token refresh before expiration
189
+ - **CSRF Protection**: State parameter is included in OAuth flow
190
+ - **Environment Variables**: Keep client secrets secure and never commit them
191
+
192
+ ## Integration with Other Services
193
+
194
+ This integration works well with:
195
+
196
+ - **Outlook**: Shared Microsoft OAuth credentials
197
+ - **Calendar**: Microsoft Calendar integration
198
+ - **Slack**: Cross-platform messaging
199
+ - **Gmail**: Email and chat integration
200
+
201
+ Set `suggestedWith` in connector.json to recommend related integrations.
202
+
203
+ ## Troubleshooting
204
+
205
+ ### Authentication Fails
206
+
207
+ - Verify client ID and secret are correct
208
+ - Check redirect URI matches Azure app configuration
209
+ - Ensure required API permissions are granted
210
+
211
+ ### Cannot Read Messages
212
+
213
+ - Verify `Chat.Read` permission is granted
214
+ - Check user has access to the chat
215
+ - Ensure token hasn't expired
216
+
217
+ ### Cannot Send Messages
218
+
219
+ - Verify `Chat.ReadWrite` or `ChannelMessage.Send` permissions
220
+ - Check user is a member of the chat/channel
221
+ - Ensure message content is not empty
222
+
223
+ ### Token Expired
224
+
225
+ - Implement token refresh using `refreshAccessToken()` in `oauth.ts`
226
+ - Store refresh tokens securely
227
+ - Handle 401 responses by triggering re-authentication
228
+
229
+ ## API Limits
230
+
231
+ Microsoft Graph API has rate limits:
232
+
233
+ - **Per-app limit**: 2000 requests per second
234
+ - **Per-user limit**: 50 requests per second
235
+ - **Concurrent requests**: 20 per user
236
+
237
+ Implement exponential backoff and retry logic for production use.
238
+
239
+ ## TypeScript Types
240
+
241
+ All API responses are fully typed. Key interfaces:
242
+
243
+ - `TeamsChat` - Chat information
244
+ - `ChatMessage` - Message with content and metadata
245
+ - `Team` - Team information
246
+ - `Channel` - Channel information
247
+ - `ChatMember` - Member information
248
+
249
+ See `teams-client.ts` for complete type definitions.
250
+
251
+ ## Resources
252
+
253
+ - [Microsoft Graph Teams API](https://learn.microsoft.com/en-us/graph/api/resources/teams-api-overview)
254
+ - [Azure App Registration](https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade)
255
+ - [Microsoft Graph Explorer](https://developer.microsoft.com/en-us/graph/graph-explorer)
256
+ - [OAuth 2.0 Authorization](https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow)