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,439 @@
1
+ import { getAccessToken } from "./token-store.ts";
2
+
3
+ const CLICKUP_BASE_URL = "https://api.clickup.com/api/v2";
4
+
5
+ interface ClickUpResponse<T> {
6
+ data?: T;
7
+ }
8
+
9
+ interface ClickUpTask {
10
+ id: string;
11
+ name: string;
12
+ description: string;
13
+ status: {
14
+ status: string;
15
+ color: string;
16
+ type: string;
17
+ };
18
+ date_created: string;
19
+ date_updated: string;
20
+ date_closed: string | null;
21
+ creator: {
22
+ id: number;
23
+ username: string;
24
+ email: string;
25
+ };
26
+ assignees: Array<{
27
+ id: number;
28
+ username: string;
29
+ email: string;
30
+ }>;
31
+ tags: Array<{
32
+ name: string;
33
+ tag_fg: string;
34
+ tag_bg: string;
35
+ }>;
36
+ due_date: string | null;
37
+ start_date: string | null;
38
+ priority: {
39
+ id: string;
40
+ priority: string;
41
+ color: string;
42
+ } | null;
43
+ list: {
44
+ id: string;
45
+ name: string;
46
+ };
47
+ folder: {
48
+ id: string;
49
+ name: string;
50
+ };
51
+ space: {
52
+ id: string;
53
+ name: string;
54
+ };
55
+ }
56
+
57
+ interface ClickUpList {
58
+ id: string;
59
+ name: string;
60
+ orderindex: number;
61
+ content: string;
62
+ status: {
63
+ status: string;
64
+ color: string;
65
+ };
66
+ priority: {
67
+ priority: string;
68
+ color: string;
69
+ } | null;
70
+ assignee: {
71
+ id: number;
72
+ username: string;
73
+ email: string;
74
+ } | null;
75
+ task_count: number;
76
+ due_date: string | null;
77
+ start_date: string | null;
78
+ folder: {
79
+ id: string;
80
+ name: string;
81
+ hidden: boolean;
82
+ access: boolean;
83
+ };
84
+ space: {
85
+ id: string;
86
+ name: string;
87
+ access: boolean;
88
+ };
89
+ archived: boolean;
90
+ }
91
+
92
+ interface ClickUpFolder {
93
+ id: string;
94
+ name: string;
95
+ orderindex: number;
96
+ override_statuses: boolean;
97
+ hidden: boolean;
98
+ space: {
99
+ id: string;
100
+ name: string;
101
+ };
102
+ task_count: string;
103
+ lists: ClickUpList[];
104
+ }
105
+
106
+ interface ClickUpSpace {
107
+ id: string;
108
+ name: string;
109
+ private: boolean;
110
+ statuses: Array<{
111
+ status: string;
112
+ type: string;
113
+ orderindex: number;
114
+ color: string;
115
+ }>;
116
+ multiple_assignees: boolean;
117
+ features: {
118
+ due_dates: {
119
+ enabled: boolean;
120
+ start_date: boolean;
121
+ remap_due_dates: boolean;
122
+ remap_closed_due_date: boolean;
123
+ };
124
+ time_tracking: {
125
+ enabled: boolean;
126
+ };
127
+ tags: {
128
+ enabled: boolean;
129
+ };
130
+ time_estimates: {
131
+ enabled: boolean;
132
+ };
133
+ checklists: {
134
+ enabled: boolean;
135
+ };
136
+ custom_fields: {
137
+ enabled: boolean;
138
+ };
139
+ remap_dependencies: {
140
+ enabled: boolean;
141
+ };
142
+ dependency_warning: {
143
+ enabled: boolean;
144
+ };
145
+ portfolios: {
146
+ enabled: boolean;
147
+ };
148
+ };
149
+ }
150
+
151
+ async function clickupFetch<T>(
152
+ endpoint: string,
153
+ options: RequestInit = {},
154
+ ): Promise<T> {
155
+ const token = await getAccessToken();
156
+ if (!token) {
157
+ throw new Error("Not authenticated with ClickUp. Please connect your account.");
158
+ }
159
+
160
+ const response = await fetch(`${CLICKUP_BASE_URL}${endpoint}`, {
161
+ ...options,
162
+ headers: {
163
+ "Authorization": token,
164
+ "Content-Type": "application/json",
165
+ ...options.headers,
166
+ },
167
+ });
168
+
169
+ if (!response.ok) {
170
+ const error = await response.json().catch(() => ({}));
171
+ throw new Error(
172
+ `ClickUp API error: ${response.status} ${error.err || error.error || response.statusText}`,
173
+ );
174
+ }
175
+
176
+ return response.json();
177
+ }
178
+
179
+ export async function listSpaces(teamId: string): Promise<ClickUpSpace[]> {
180
+ const response = await clickupFetch<{ spaces: ClickUpSpace[] }>(`/team/${teamId}/space`);
181
+ return response.spaces;
182
+ }
183
+
184
+ export async function listFolders(spaceId: string): Promise<ClickUpFolder[]> {
185
+ const response = await clickupFetch<{ folders: ClickUpFolder[] }>(`/space/${spaceId}/folder`);
186
+ return response.folders;
187
+ }
188
+
189
+ export async function listLists(folderId: string): Promise<ClickUpList[]> {
190
+ const response = await clickupFetch<{ lists: ClickUpList[] }>(`/folder/${folderId}/list`);
191
+ return response.lists;
192
+ }
193
+
194
+ export async function listFolderlessLists(spaceId: string): Promise<ClickUpList[]> {
195
+ const response = await clickupFetch<{ lists: ClickUpList[] }>(`/space/${spaceId}/list`);
196
+ return response.lists;
197
+ }
198
+
199
+ export async function listTasks(options: {
200
+ listId?: string;
201
+ spaceId?: string;
202
+ folderId?: string;
203
+ assignees?: number[];
204
+ statuses?: string[];
205
+ includeClosed?: boolean;
206
+ orderBy?: string;
207
+ subtasks?: boolean;
208
+ }): Promise<ClickUpTask[]> {
209
+ const params = new URLSearchParams();
210
+
211
+ if (options.assignees && options.assignees.length > 0) {
212
+ options.assignees.forEach(assignee => params.append("assignees[]", assignee.toString()));
213
+ }
214
+
215
+ if (options.statuses && options.statuses.length > 0) {
216
+ options.statuses.forEach(status => params.append("statuses[]", status));
217
+ }
218
+
219
+ if (options.includeClosed !== undefined) {
220
+ params.set("include_closed", options.includeClosed.toString());
221
+ }
222
+
223
+ if (options.orderBy) {
224
+ params.set("order_by", options.orderBy);
225
+ }
226
+
227
+ if (options.subtasks !== undefined) {
228
+ params.set("subtasks", options.subtasks.toString());
229
+ }
230
+
231
+ let endpoint = "/task";
232
+ if (options.listId) {
233
+ endpoint = `/list/${options.listId}/task`;
234
+ } else if (options.folderId) {
235
+ endpoint = `/folder/${options.folderId}/task`;
236
+ } else if (options.spaceId) {
237
+ endpoint = `/space/${options.spaceId}/task`;
238
+ }
239
+
240
+ const queryString = params.toString();
241
+ const url = queryString ? `${endpoint}?${queryString}` : endpoint;
242
+
243
+ const response = await clickupFetch<{ tasks: ClickUpTask[] }>(url);
244
+ return response.tasks;
245
+ }
246
+
247
+ export async function getTask(taskId: string, options?: {
248
+ customTaskIds?: boolean;
249
+ teamId?: string;
250
+ includeSubtasks?: boolean;
251
+ }): Promise<ClickUpTask> {
252
+ const params = new URLSearchParams();
253
+
254
+ if (options?.customTaskIds) {
255
+ params.set("custom_task_ids", "true");
256
+ if (options.teamId) {
257
+ params.set("team_id", options.teamId);
258
+ }
259
+ }
260
+
261
+ if (options?.includeSubtasks) {
262
+ params.set("include_subtasks", "true");
263
+ }
264
+
265
+ const queryString = params.toString();
266
+ const url = queryString ? `/task/${taskId}?${queryString}` : `/task/${taskId}`;
267
+
268
+ return await clickupFetch<ClickUpTask>(url);
269
+ }
270
+
271
+ export async function createTask(options: {
272
+ listId: string;
273
+ name: string;
274
+ description?: string;
275
+ assignees?: number[];
276
+ tags?: string[];
277
+ status?: string;
278
+ priority?: number;
279
+ dueDate?: number;
280
+ dueDateTime?: boolean;
281
+ timeEstimate?: number;
282
+ startDate?: number;
283
+ startDateTime?: boolean;
284
+ notifyAll?: boolean;
285
+ parent?: string;
286
+ linksTo?: string;
287
+ checkRequired?: boolean;
288
+ customTaskIds?: boolean;
289
+ teamId?: string;
290
+ }): Promise<ClickUpTask> {
291
+ const body: Record<string, unknown> = {
292
+ name: options.name,
293
+ };
294
+
295
+ if (options.description) body.description = options.description;
296
+ if (options.assignees) body.assignees = options.assignees;
297
+ if (options.tags) body.tags = options.tags;
298
+ if (options.status) body.status = options.status;
299
+ if (options.priority !== undefined) body.priority = options.priority;
300
+ if (options.dueDate) {
301
+ body.due_date = options.dueDate;
302
+ if (options.dueDateTime !== undefined) body.due_date_time = options.dueDateTime;
303
+ }
304
+ if (options.timeEstimate) body.time_estimate = options.timeEstimate;
305
+ if (options.startDate) {
306
+ body.start_date = options.startDate;
307
+ if (options.startDateTime !== undefined) body.start_date_time = options.startDateTime;
308
+ }
309
+ if (options.notifyAll !== undefined) body.notify_all = options.notifyAll;
310
+ if (options.parent) body.parent = options.parent;
311
+ if (options.linksTo) body.links_to = options.linksTo;
312
+
313
+ const params = new URLSearchParams();
314
+ if (options.customTaskIds) {
315
+ params.set("custom_task_ids", "true");
316
+ if (options.teamId) {
317
+ params.set("team_id", options.teamId);
318
+ }
319
+ }
320
+
321
+ const queryString = params.toString();
322
+ const url = queryString
323
+ ? `/list/${options.listId}/task?${queryString}`
324
+ : `/list/${options.listId}/task`;
325
+
326
+ return await clickupFetch<ClickUpTask>(url, {
327
+ method: "POST",
328
+ body: JSON.stringify(body),
329
+ });
330
+ }
331
+
332
+ export async function updateTask(
333
+ taskId: string,
334
+ updates: {
335
+ name?: string;
336
+ description?: string;
337
+ status?: string;
338
+ priority?: number | null;
339
+ dueDate?: number | null;
340
+ dueDateTime?: boolean;
341
+ timeEstimate?: number | null;
342
+ startDate?: number | null;
343
+ startDateTime?: boolean;
344
+ assignees?: {
345
+ add?: number[];
346
+ rem?: number[];
347
+ };
348
+ archived?: boolean;
349
+ },
350
+ options?: {
351
+ customTaskIds?: boolean;
352
+ teamId?: string;
353
+ },
354
+ ): Promise<ClickUpTask> {
355
+ const body: Record<string, unknown> = {};
356
+
357
+ if (updates.name !== undefined) body.name = updates.name;
358
+ if (updates.description !== undefined) body.description = updates.description;
359
+ if (updates.status !== undefined) body.status = updates.status;
360
+ if (updates.priority !== undefined) body.priority = updates.priority;
361
+ if (updates.dueDate !== undefined) {
362
+ body.due_date = updates.dueDate;
363
+ if (updates.dueDateTime !== undefined) body.due_date_time = updates.dueDateTime;
364
+ }
365
+ if (updates.timeEstimate !== undefined) body.time_estimate = updates.timeEstimate;
366
+ if (updates.startDate !== undefined) {
367
+ body.start_date = updates.startDate;
368
+ if (updates.startDateTime !== undefined) body.start_date_time = updates.startDateTime;
369
+ }
370
+ if (updates.assignees) body.assignees = updates.assignees;
371
+ if (updates.archived !== undefined) body.archived = updates.archived;
372
+
373
+ const params = new URLSearchParams();
374
+ if (options?.customTaskIds) {
375
+ params.set("custom_task_ids", "true");
376
+ if (options.teamId) {
377
+ params.set("team_id", options.teamId);
378
+ }
379
+ }
380
+
381
+ const queryString = params.toString();
382
+ const url = queryString ? `/task/${taskId}?${queryString}` : `/task/${taskId}`;
383
+
384
+ return await clickupFetch<ClickUpTask>(url, {
385
+ method: "PUT",
386
+ body: JSON.stringify(body),
387
+ });
388
+ }
389
+
390
+ export async function getAuthorizedUser(): Promise<{
391
+ user: {
392
+ id: number;
393
+ username: string;
394
+ email: string;
395
+ color: string;
396
+ profilePicture: string;
397
+ };
398
+ }> {
399
+ return await clickupFetch<{
400
+ user: {
401
+ id: number;
402
+ username: string;
403
+ email: string;
404
+ color: string;
405
+ profilePicture: string;
406
+ };
407
+ }>("/user");
408
+ }
409
+
410
+ export async function getTeams(): Promise<Array<{
411
+ id: string;
412
+ name: string;
413
+ color: string;
414
+ avatar: string | null;
415
+ members: Array<{
416
+ user: {
417
+ id: number;
418
+ username: string;
419
+ email: string;
420
+ };
421
+ }>;
422
+ }>> {
423
+ const response = await clickupFetch<{
424
+ teams: Array<{
425
+ id: string;
426
+ name: string;
427
+ color: string;
428
+ avatar: string | null;
429
+ members: Array<{
430
+ user: {
431
+ id: number;
432
+ username: string;
433
+ email: string;
434
+ };
435
+ }>;
436
+ }>;
437
+ }>("/team");
438
+ return response.teams;
439
+ }
@@ -0,0 +1,246 @@
1
+ # Confluence Integration for Veryfront
2
+
3
+ A complete Confluence integration for Veryfront that enables AI agents to search, read, create, and update documentation in Confluence spaces.
4
+
5
+ ## Features
6
+
7
+ - **OAuth 2.0 Authentication**: Secure authentication using Atlassian's OAuth 2.0 flow
8
+ - **Search Content**: Search for pages and blog posts across Confluence spaces
9
+ - **Read Pages**: Retrieve full page content with metadata
10
+ - **Create Pages**: Create new pages in any accessible space
11
+ - **Update Pages**: Update existing pages with version control
12
+ - **List Spaces**: Discover all accessible Confluence spaces
13
+
14
+ ## Structure
15
+
16
+ ```
17
+ confluence/
18
+ ├── connector.json # Integration metadata and configuration
19
+ ├── files/
20
+ │ ├── _env.example # Environment variables template
21
+ │ ├── lib/
22
+ │ │ ├── confluence-client.ts # Confluence API client
23
+ │ │ ├── oauth.ts # OAuth 2.0 utilities
24
+ │ │ └── token-store.ts # Token management (in-memory)
25
+ │ ├── app/api/auth/confluence/
26
+ │ │ ├── route.ts # OAuth initialization endpoint
27
+ │ │ └── callback/route.ts # OAuth callback handler
28
+ │ └── ai/tools/
29
+ │ ├── search-content.ts # Search tool
30
+ │ ├── get-page.ts # Get page content tool
31
+ │ ├── create-page.ts # Create page tool
32
+ │ ├── update-page.ts # Update page tool
33
+ │ └── list-spaces.ts # List spaces tool
34
+ ```
35
+
36
+ ## Setup
37
+
38
+ ### 1. Create an Atlassian OAuth 2.0 App
39
+
40
+ 1. Go to [Atlassian Developer Console](https://developer.atlassian.com/console/myapps/)
41
+ 2. Click "Create" → "OAuth 2.0 integration"
42
+ 3. Name your app (e.g., "Veryfront Confluence Integration")
43
+ 4. Add the following settings:
44
+ - **Callback URL**: `https://your-domain.com/api/auth/confluence/callback`
45
+ - **Scopes**:
46
+ - `read:confluence-content.all`
47
+ - `write:confluence-content`
48
+ - `offline_access` (for refresh tokens)
49
+
50
+ ### 2. Configure Environment Variables
51
+
52
+ Add the following to your `.env` file:
53
+
54
+ ```bash
55
+ ATLASSIAN_CLIENT_ID=your_client_id_here
56
+ ATLASSIAN_CLIENT_SECRET=your_client_secret_here
57
+ ```
58
+
59
+ ### 3. Install the Integration
60
+
61
+ Use the Veryfront CLI to install:
62
+
63
+ ```bash
64
+ veryfront add integration confluence
65
+ ```
66
+
67
+ ## API Client Usage
68
+
69
+ ### Search Content
70
+
71
+ ```typescript
72
+ import { searchContent } from './lib/confluence-client.ts'
73
+
74
+ const results = await searchContent('API documentation', {
75
+ spaceKey: 'DEV',
76
+ limit: 10
77
+ })
78
+ ```
79
+
80
+ ### Get Page Content
81
+
82
+ ```typescript
83
+ import { getPageContent, extractPlainText } from './lib/confluence-client.ts'
84
+
85
+ const page = await getPageContent('page-id-here')
86
+ const plainText = extractPlainText(page.body?.storage?.value || '')
87
+ ```
88
+
89
+ ### Create Page
90
+
91
+ ```typescript
92
+ import { createPage } from './lib/confluence-client.ts'
93
+
94
+ const newPage = await createPage({
95
+ spaceKey: 'TEAM',
96
+ title: 'Meeting Notes',
97
+ content: '<p>Meeting notes content here</p>',
98
+ parentId: 'optional-parent-page-id'
99
+ })
100
+ ```
101
+
102
+ ### Update Page
103
+
104
+ ```typescript
105
+ import { updatePage, getPage } from './lib/confluence-client.ts'
106
+
107
+ const currentPage = await getPage('page-id')
108
+ const updated = await updatePage('page-id', {
109
+ content: '<p>Updated content</p>',
110
+ version: currentPage.version.number + 1,
111
+ versionMessage: 'Updated via API'
112
+ })
113
+ ```
114
+
115
+ ### List Spaces
116
+
117
+ ```typescript
118
+ import { listSpaces } from './lib/confluence-client.ts'
119
+
120
+ const spaces = await listSpaces({
121
+ type: 'global',
122
+ limit: 25
123
+ })
124
+ ```
125
+
126
+ ## AI Tools
127
+
128
+ ### search-content
129
+
130
+ Search for pages and blog posts in Confluence.
131
+
132
+ **Parameters:**
133
+ - `query` (string): Search query
134
+ - `spaceKey` (string, optional): Limit to specific space
135
+ - `limit` (number, default: 10): Max results
136
+
137
+ ### get-page
138
+
139
+ Get the full content of a Confluence page.
140
+
141
+ **Parameters:**
142
+ - `pageId` (string): The page ID to retrieve
143
+
144
+ ### create-page
145
+
146
+ Create a new page in a Confluence space.
147
+
148
+ **Parameters:**
149
+ - `spaceKey` (string): Space key (e.g., "TEAM")
150
+ - `title` (string): Page title
151
+ - `content` (string): Page content (plain text or HTML)
152
+ - `parentId` (string, optional): Parent page ID
153
+ - `type` (enum, default: "page"): "page" or "blogpost"
154
+
155
+ ### update-page
156
+
157
+ Update an existing Confluence page.
158
+
159
+ **Parameters:**
160
+ - `pageId` (string): Page ID to update
161
+ - `title` (string, optional): New title
162
+ - `content` (string, optional): New content
163
+ - `versionMessage` (string, optional): Version change message
164
+
165
+ ### list-spaces
166
+
167
+ List all accessible Confluence spaces.
168
+
169
+ **Parameters:**
170
+ - `type` (enum, default: "all"): "global", "personal", or "all"
171
+ - `limit` (number, default: 25): Max spaces to return
172
+
173
+ ## Authentication Flow
174
+
175
+ 1. User navigates to `/api/auth/confluence`
176
+ 2. OAuth flow redirects to Atlassian authorization page
177
+ 3. User approves access to their Confluence site
178
+ 4. Atlassian redirects to `/api/auth/confluence/callback`
179
+ 5. Callback exchanges code for access token
180
+ 6. System retrieves accessible Confluence sites (cloud IDs)
181
+ 7. Tokens stored in token store (in-memory by default)
182
+ 8. User redirected to application home page
183
+
184
+ ## Token Storage
185
+
186
+ The default implementation uses an in-memory token store suitable for development. For production:
187
+
188
+ 1. Implement a database-backed token store
189
+ 2. Store tokens per user
190
+ 3. Handle token refresh with `refresh_token`
191
+ 4. Implement proper token expiration checks
192
+
193
+ ## API Details
194
+
195
+ - **Base URL**: `https://api.atlassian.com/ex/confluence/{cloudId}`
196
+ - **API Version**: Confluence Cloud REST API v1
197
+ - **Authentication**: Bearer token
198
+ - **Rate Limits**: Respect Atlassian API rate limits
199
+
200
+ ## Content Format
201
+
202
+ Confluence uses "storage format" (XHTML) for content:
203
+
204
+ - **Plain text**: Automatically converted using `formatAsStorage()`
205
+ - **HTML**: Use Confluence storage format directly
206
+ - **Reading**: Use `extractPlainText()` to convert to plain text
207
+
208
+ ## Suggested Integrations
209
+
210
+ This integration works well with:
211
+ - **Jira**: Link documentation to issues
212
+ - **Slack**: Share documentation in channels
213
+ - **Notion**: Sync documentation between platforms
214
+
215
+ ## Notes
216
+
217
+ - Shares OAuth credentials with Jira integration (`ATLASSIAN_CLIENT_ID` and `ATLASSIAN_CLIENT_SECRET`)
218
+ - Requires OAuth app to have Confluence API access enabled
219
+ - Supports both Confluence Cloud and multi-site access
220
+ - Uses the first accessible site by default (can be extended for multi-site support)
221
+
222
+ ## TypeScript
223
+
224
+ All files are strongly typed with comprehensive TypeScript interfaces:
225
+
226
+ - `ConfluenceSpace`: Space metadata
227
+ - `ConfluencePage`: Page structure and content
228
+ - `ConfluenceSearchResult`: Search result format
229
+ - `AtlassianTokenResponse`: OAuth token response
230
+ - `AtlassianResource`: Accessible site information
231
+
232
+ ## Error Handling
233
+
234
+ All API calls include proper error handling:
235
+ - Authentication errors: "Not authenticated" message
236
+ - API errors: Include status code and error message
237
+ - Token exchange errors: Detailed OAuth error messages
238
+
239
+ ## Security Considerations
240
+
241
+ 1. Store credentials securely (use environment variables)
242
+ 2. Implement CSRF protection (state parameter in OAuth)
243
+ 3. Use HTTPS for all API calls
244
+ 4. Validate all user inputs
245
+ 5. Implement proper token storage in production
246
+ 6. Handle token expiration and refresh