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 { getAnthropicAdminClient } from '../../lib/anthropic-admin-client';
4
+
5
+ /**
6
+ * Tool for listing API keys in the Anthropic organization
7
+ */
8
+ export const listAPIKeys = tool({
9
+ name: 'list_api_keys',
10
+ description:
11
+ 'List all API keys for the organization or a specific workspace. Returns key metadata including name, status, type, and usage information. The actual key values are not returned for security reasons.',
12
+ parameters: z.object({
13
+ workspaceId: z
14
+ .string()
15
+ .optional()
16
+ .describe(
17
+ 'Optional workspace ID to filter API keys by workspace. If not provided, lists all organization API keys'
18
+ ),
19
+ }),
20
+ execute: async ({ workspaceId }) => {
21
+ try {
22
+ const client = getAnthropicAdminClient();
23
+ const result = await client.listAPIKeys(workspaceId);
24
+
25
+ // Group keys by status and type for summary
26
+ const activeKeys = result.api_keys.filter(key => key.status === 'active');
27
+ const revokedKeys = result.api_keys.filter(
28
+ key => key.status === 'revoked'
29
+ );
30
+
31
+ const keysByType = result.api_keys.reduce(
32
+ (acc, key) => {
33
+ acc[key.key_type] = (acc[key.key_type] || 0) + 1;
34
+ return acc;
35
+ },
36
+ {} as Record<string, number>
37
+ );
38
+
39
+ return {
40
+ success: true,
41
+ api_keys: result.api_keys,
42
+ summary: {
43
+ total: result.api_keys.length,
44
+ active: activeKeys.length,
45
+ revoked: revokedKeys.length,
46
+ by_type: keysByType,
47
+ workspace_id: workspaceId,
48
+ },
49
+ message: workspaceId
50
+ ? `Found ${result.api_keys.length} API key(s) for workspace ${workspaceId}`
51
+ : `Found ${result.api_keys.length} API key(s) in the organization`,
52
+ };
53
+ } catch (error) {
54
+ return {
55
+ success: false,
56
+ error:
57
+ error instanceof Error ? error.message : 'Failed to list API keys',
58
+ api_keys: [],
59
+ };
60
+ }
61
+ },
62
+ });
63
+
64
+ export default listAPIKeys;
@@ -0,0 +1,65 @@
1
+ import { tool } from 'veryfront/ai';
2
+ import { z } from 'zod';
3
+ import { getAnthropicAdminClient } from '../../lib/anthropic-admin-client';
4
+
5
+ /**
6
+ * Tool for listing members in the Anthropic organization
7
+ */
8
+ export const listMembers = tool({
9
+ name: 'list_members',
10
+ description:
11
+ 'List all members in the Anthropic organization. Returns member details including email, role, status, and activity information.',
12
+ parameters: z.object({}),
13
+ execute: async () => {
14
+ try {
15
+ const client = getAnthropicAdminClient();
16
+ const result = await client.listMembers();
17
+
18
+ // Group members by role and status for summary
19
+ const membersByRole = result.members.reduce(
20
+ (acc, member) => {
21
+ acc[member.role] = (acc[member.role] || 0) + 1;
22
+ return acc;
23
+ },
24
+ {} as Record<string, number>
25
+ );
26
+
27
+ const membersByStatus = result.members.reduce(
28
+ (acc, member) => {
29
+ acc[member.status] = (acc[member.status] || 0) + 1;
30
+ return acc;
31
+ },
32
+ {} as Record<string, number>
33
+ );
34
+
35
+ const activeMembers = result.members.filter(
36
+ member => member.status === 'active'
37
+ );
38
+ const pendingMembers = result.members.filter(
39
+ member => member.status === 'pending'
40
+ );
41
+
42
+ return {
43
+ success: true,
44
+ members: result.members,
45
+ summary: {
46
+ total: result.members.length,
47
+ active: activeMembers.length,
48
+ pending: pendingMembers.length,
49
+ by_role: membersByRole,
50
+ by_status: membersByStatus,
51
+ },
52
+ message: `Found ${result.members.length} member(s) in the organization`,
53
+ };
54
+ } catch (error) {
55
+ return {
56
+ success: false,
57
+ error:
58
+ error instanceof Error ? error.message : 'Failed to list members',
59
+ members: [],
60
+ };
61
+ }
62
+ },
63
+ });
64
+
65
+ export default listMembers;
@@ -0,0 +1,35 @@
1
+ import { tool } from 'veryfront/ai';
2
+ import { z } from 'zod';
3
+ import { getAnthropicAdminClient } from '../../lib/anthropic-admin-client';
4
+
5
+ /**
6
+ * Tool for listing all workspaces in the Anthropic organization
7
+ */
8
+ export const listWorkspaces = tool({
9
+ name: 'list_workspaces',
10
+ description:
11
+ 'List all workspaces in the Anthropic organization. Workspaces allow you to organize API keys, usage, and permissions for different teams or projects.',
12
+ parameters: z.object({}),
13
+ execute: async () => {
14
+ try {
15
+ const client = getAnthropicAdminClient();
16
+ const result = await client.listWorkspaces();
17
+
18
+ return {
19
+ success: true,
20
+ workspaces: result.workspaces,
21
+ count: result.workspaces.length,
22
+ message: `Found ${result.workspaces.length} workspace(s)`,
23
+ };
24
+ } catch (error) {
25
+ return {
26
+ success: false,
27
+ error:
28
+ error instanceof Error ? error.message : 'Failed to list workspaces',
29
+ workspaces: [],
30
+ };
31
+ }
32
+ },
33
+ });
34
+
35
+ export default listWorkspaces;
@@ -0,0 +1,264 @@
1
+ /**
2
+ * Anthropic Admin API Client
3
+ *
4
+ * Provides methods to interact with the Anthropic Admin API for organization management.
5
+ * Requires an admin API key with appropriate permissions.
6
+ *
7
+ * @see https://docs.anthropic.com/en/api/admin-api
8
+ */
9
+
10
+ const ANTHROPIC_ADMIN_API_BASE_URL = 'https://api.anthropic.com/v1/admin';
11
+
12
+ export interface AnthropicWorkspace {
13
+ id: string;
14
+ name: string;
15
+ display_name: string;
16
+ created_at: string;
17
+ }
18
+
19
+ export interface AnthropicUsageRecord {
20
+ workspace_id: string;
21
+ date: string;
22
+ model: string;
23
+ input_tokens: number;
24
+ output_tokens: number;
25
+ cache_creation_tokens?: number;
26
+ cache_read_tokens?: number;
27
+ total_cost_usd: number;
28
+ }
29
+
30
+ export interface AnthropicAPIKey {
31
+ id: string;
32
+ name: string;
33
+ workspace_id?: string;
34
+ created_at: string;
35
+ last_used_at?: string;
36
+ status: 'active' | 'revoked';
37
+ key_type: 'admin' | 'workspace' | 'service';
38
+ }
39
+
40
+ export interface AnthropicMember {
41
+ id: string;
42
+ email: string;
43
+ role: 'owner' | 'admin' | 'member' | 'developer';
44
+ status: 'active' | 'pending' | 'inactive';
45
+ created_at: string;
46
+ last_active_at?: string;
47
+ }
48
+
49
+ export interface AnthropicOrganization {
50
+ id: string;
51
+ name: string;
52
+ display_name: string;
53
+ created_at: string;
54
+ settings: {
55
+ default_model?: string;
56
+ rate_limit_tier?: string;
57
+ billing_email?: string;
58
+ };
59
+ }
60
+
61
+ export interface AnthropicUsageOptions {
62
+ startDate: string;
63
+ endDate: string;
64
+ workspaceId?: string;
65
+ model?: string;
66
+ granularity?: 'day' | 'hour';
67
+ }
68
+
69
+ export class AnthropicAdminError extends Error {
70
+ constructor(
71
+ message: string,
72
+ public statusCode?: number,
73
+ public response?: unknown
74
+ ) {
75
+ super(message);
76
+ this.name = 'AnthropicAdminError';
77
+ }
78
+ }
79
+
80
+ /**
81
+ * Client for interacting with the Anthropic Admin API
82
+ */
83
+ export class AnthropicAdminClient {
84
+ private apiKey: string;
85
+ private baseUrl: string;
86
+
87
+ constructor(apiKey?: string, baseUrl?: string) {
88
+ this.apiKey = apiKey || process.env.ANTHROPIC_ADMIN_API_KEY || '';
89
+ this.baseUrl = baseUrl || ANTHROPIC_ADMIN_API_BASE_URL;
90
+
91
+ if (!this.apiKey) {
92
+ throw new AnthropicAdminError(
93
+ 'ANTHROPIC_ADMIN_API_KEY is required. Please set it in your environment variables.'
94
+ );
95
+ }
96
+
97
+ if (!this.apiKey.startsWith('sk-ant-')) {
98
+ throw new AnthropicAdminError(
99
+ 'Invalid Anthropic API key format. Admin keys should start with "sk-ant-"'
100
+ );
101
+ }
102
+ }
103
+
104
+ private async request<T>(
105
+ endpoint: string,
106
+ options: RequestInit = {}
107
+ ): Promise<T> {
108
+ const url = `${this.baseUrl}${endpoint}`;
109
+
110
+ const response = await fetch(url, {
111
+ ...options,
112
+ headers: {
113
+ 'x-api-key': this.apiKey,
114
+ 'anthropic-version': '2023-06-01',
115
+ 'Content-Type': 'application/json',
116
+ ...options.headers,
117
+ },
118
+ });
119
+
120
+ if (!response.ok) {
121
+ const errorData = await response.json().catch(() => ({}));
122
+ throw new AnthropicAdminError(
123
+ errorData.error?.message || `API request failed: ${response.statusText}`,
124
+ response.status,
125
+ errorData
126
+ );
127
+ }
128
+
129
+ return response.json();
130
+ }
131
+
132
+ /**
133
+ * List all workspaces in the organization
134
+ */
135
+ async listWorkspaces(): Promise<{ workspaces: AnthropicWorkspace[] }> {
136
+ return this.request<{ workspaces: AnthropicWorkspace[] }>('/workspaces');
137
+ }
138
+
139
+ /**
140
+ * Get details for a specific workspace
141
+ */
142
+ async getWorkspace(workspaceId: string): Promise<AnthropicWorkspace> {
143
+ if (!workspaceId) {
144
+ throw new AnthropicAdminError('workspaceId is required');
145
+ }
146
+ return this.request<AnthropicWorkspace>(`/workspaces/${workspaceId}`);
147
+ }
148
+
149
+ /**
150
+ * Get API usage statistics for a date range
151
+ *
152
+ * @param options - Usage query options
153
+ * @returns Usage records grouped by date, workspace, and model
154
+ */
155
+ async getUsage(options: AnthropicUsageOptions): Promise<{
156
+ usage: AnthropicUsageRecord[];
157
+ total_cost_usd: number;
158
+ }> {
159
+ const { startDate, endDate, workspaceId, model, granularity = 'day' } = options;
160
+
161
+ if (!startDate || !endDate) {
162
+ throw new AnthropicAdminError('startDate and endDate are required');
163
+ }
164
+
165
+ // Validate date format (YYYY-MM-DD)
166
+ const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
167
+ if (!dateRegex.test(startDate) || !dateRegex.test(endDate)) {
168
+ throw new AnthropicAdminError(
169
+ 'Dates must be in YYYY-MM-DD format'
170
+ );
171
+ }
172
+
173
+ const params = new URLSearchParams({
174
+ start_date: startDate,
175
+ end_date: endDate,
176
+ granularity,
177
+ });
178
+
179
+ if (workspaceId) {
180
+ params.append('workspace_id', workspaceId);
181
+ }
182
+
183
+ if (model) {
184
+ params.append('model', model);
185
+ }
186
+
187
+ return this.request<{
188
+ usage: AnthropicUsageRecord[];
189
+ total_cost_usd: number;
190
+ }>(`/usage?${params.toString()}`);
191
+ }
192
+
193
+ /**
194
+ * List API keys for the organization or a specific workspace
195
+ */
196
+ async listAPIKeys(workspaceId?: string): Promise<{ api_keys: AnthropicAPIKey[] }> {
197
+ const endpoint = workspaceId
198
+ ? `/workspaces/${workspaceId}/api-keys`
199
+ : '/api-keys';
200
+
201
+ return this.request<{ api_keys: AnthropicAPIKey[] }>(endpoint);
202
+ }
203
+
204
+ /**
205
+ * List all members in the organization
206
+ */
207
+ async listMembers(): Promise<{ members: AnthropicMember[] }> {
208
+ return this.request<{ members: AnthropicMember[] }>('/members');
209
+ }
210
+
211
+ /**
212
+ * Get organization details and settings
213
+ */
214
+ async getOrganization(): Promise<AnthropicOrganization> {
215
+ return this.request<AnthropicOrganization>('/organization');
216
+ }
217
+
218
+ /**
219
+ * Create a new API key (admin functionality)
220
+ */
221
+ async createAPIKey(data: {
222
+ name: string;
223
+ workspace_id?: string;
224
+ key_type?: 'workspace' | 'service';
225
+ }): Promise<{ api_key: AnthropicAPIKey & { key: string } }> {
226
+ return this.request<{ api_key: AnthropicAPIKey & { key: string } }>(
227
+ '/api-keys',
228
+ {
229
+ method: 'POST',
230
+ body: JSON.stringify(data),
231
+ }
232
+ );
233
+ }
234
+
235
+ /**
236
+ * Revoke an API key
237
+ */
238
+ async revokeAPIKey(keyId: string): Promise<{ success: boolean }> {
239
+ if (!keyId) {
240
+ throw new AnthropicAdminError('keyId is required');
241
+ }
242
+
243
+ return this.request<{ success: boolean }>(
244
+ `/api-keys/${keyId}/revoke`,
245
+ {
246
+ method: 'POST',
247
+ }
248
+ );
249
+ }
250
+ }
251
+
252
+ /**
253
+ * Get a singleton instance of the Anthropic Admin client
254
+ */
255
+ let client: AnthropicAdminClient | null = null;
256
+
257
+ export function getAnthropicAdminClient(): AnthropicAdminClient {
258
+ if (!client) {
259
+ client = new AnthropicAdminClient();
260
+ }
261
+ return client;
262
+ }
263
+
264
+ export default AnthropicAdminClient;
@@ -0,0 +1,85 @@
1
+ {
2
+ "name": "asana",
3
+ "displayName": "Asana",
4
+ "icon": "asana.svg",
5
+ "description": "Manage tasks, projects, and teams in Asana",
6
+ "auth": {
7
+ "type": "oauth2",
8
+ "provider": "asana",
9
+ "authorizationUrl": "https://app.asana.com/-/oauth_authorize",
10
+ "tokenUrl": "https://app.asana.com/-/oauth_token",
11
+ "scopes": ["default"],
12
+ "callbackPath": "/api/auth/asana/callback",
13
+ "requiredApis": [
14
+ {
15
+ "name": "Asana Developer Console",
16
+ "enableUrl": "https://app.asana.com/0/developer-console"
17
+ }
18
+ ]
19
+ },
20
+ "envVars": [
21
+ {
22
+ "name": "ASANA_CLIENT_ID",
23
+ "description": "Asana OAuth Client ID",
24
+ "required": true,
25
+ "sensitive": false,
26
+ "docsUrl": "https://developers.asana.com/docs/oauth"
27
+ },
28
+ {
29
+ "name": "ASANA_CLIENT_SECRET",
30
+ "description": "Asana OAuth Client Secret",
31
+ "required": true,
32
+ "sensitive": true,
33
+ "docsUrl": "https://developers.asana.com/docs/oauth"
34
+ }
35
+ ],
36
+ "tools": [
37
+ {
38
+ "id": "list-tasks",
39
+ "name": "List Tasks",
40
+ "description": "List tasks in a project or assigned to a user",
41
+ "requiresWrite": false
42
+ },
43
+ {
44
+ "id": "get-task",
45
+ "name": "Get Task",
46
+ "description": "Get details of a specific task",
47
+ "requiresWrite": false
48
+ },
49
+ {
50
+ "id": "create-task",
51
+ "name": "Create Task",
52
+ "description": "Create a new task in a project",
53
+ "requiresWrite": true
54
+ },
55
+ {
56
+ "id": "update-task",
57
+ "name": "Update Task",
58
+ "description": "Update an existing task",
59
+ "requiresWrite": true
60
+ },
61
+ {
62
+ "id": "list-projects",
63
+ "name": "List Projects",
64
+ "description": "List all projects in the workspace",
65
+ "requiresWrite": false
66
+ }
67
+ ],
68
+ "prompts": [
69
+ {
70
+ "id": "my-tasks",
71
+ "title": "Show my tasks",
72
+ "prompt": "List all tasks assigned to me in Asana with their due dates and priorities.",
73
+ "category": "productivity",
74
+ "icon": "list"
75
+ },
76
+ {
77
+ "id": "create-task",
78
+ "title": "Create a task",
79
+ "prompt": "Create a new task with a title, description, due date, and assignee.",
80
+ "category": "productivity",
81
+ "icon": "plus"
82
+ }
83
+ ],
84
+ "suggestedWith": ["slack", "notion", "calendar"]
85
+ }
@@ -0,0 +1,4 @@
1
+ # Asana OAuth Configuration
2
+ # Get your credentials from https://app.asana.com/0/developer-console
3
+ ASANA_CLIENT_ID=your-client-id
4
+ ASANA_CLIENT_SECRET=your-client-secret
@@ -0,0 +1,34 @@
1
+ import { tool } from "veryfront/ai";
2
+ import { z } from "zod";
3
+ import { createTask } from "../../lib/asana-client.ts";
4
+
5
+ export default tool({
6
+ id: "create-task",
7
+ description: "Create a new task in an Asana project.",
8
+ inputSchema: z.object({
9
+ projectGid: z.string().describe("The GID of the project to create the task in"),
10
+ name: z.string().describe("The name/title of the task"),
11
+ notes: z.string().optional().describe("Description or notes for the task"),
12
+ dueOn: z.string().optional().describe("Due date in YYYY-MM-DD format"),
13
+ assigneeGid: z.string().optional().describe("GID of the user to assign the task to"),
14
+ }),
15
+ async execute({ projectGid, name, notes, dueOn, assigneeGid }) {
16
+ const task = await createTask({
17
+ projectGid,
18
+ name,
19
+ notes,
20
+ dueOn,
21
+ assigneeGid,
22
+ });
23
+
24
+ return {
25
+ success: true,
26
+ task: {
27
+ gid: task.gid,
28
+ name: task.name,
29
+ dueOn: task.due_on,
30
+ assignee: task.assignee?.name,
31
+ },
32
+ };
33
+ },
34
+ });
@@ -0,0 +1,26 @@
1
+ import { tool } from "veryfront/ai";
2
+ import { z } from "zod";
3
+ import { getTask } from "../../lib/asana-client.ts";
4
+
5
+ export default tool({
6
+ id: "get-task",
7
+ description: "Get details of a specific Asana task by its GID.",
8
+ inputSchema: z.object({
9
+ taskGid: z.string().describe("The GID of the task to retrieve"),
10
+ }),
11
+ async execute({ taskGid }) {
12
+ const task = await getTask(taskGid);
13
+
14
+ return {
15
+ gid: task.gid,
16
+ name: task.name,
17
+ notes: task.notes,
18
+ completed: task.completed,
19
+ dueOn: task.due_on,
20
+ assignee: task.assignee?.name,
21
+ projects: task.projects.map((p) => ({ gid: p.gid, name: p.name })),
22
+ createdAt: task.created_at,
23
+ modifiedAt: task.modified_at,
24
+ };
25
+ },
26
+ });
@@ -0,0 +1,26 @@
1
+ import { tool } from "veryfront/ai";
2
+ import { z } from "zod";
3
+ import { listProjects, listWorkspaces } from "../../lib/asana-client.ts";
4
+
5
+ export default tool({
6
+ id: "list-projects",
7
+ description: "List all projects in the Asana workspace.",
8
+ inputSchema: z.object({
9
+ limit: z.number().min(1).max(50).default(20).describe("Maximum number of projects to return"),
10
+ }),
11
+ async execute({ limit }) {
12
+ const workspaces = await listWorkspaces();
13
+ if (workspaces.length === 0) {
14
+ return { projects: [], message: "No workspaces found" };
15
+ }
16
+
17
+ const projects = await listProjects(workspaces[0].gid);
18
+
19
+ return projects.slice(0, limit).map((project) => ({
20
+ gid: project.gid,
21
+ name: project.name,
22
+ notes: project.notes,
23
+ createdAt: project.created_at,
24
+ }));
25
+ },
26
+ });
@@ -0,0 +1,50 @@
1
+ import { tool } from "veryfront/ai";
2
+ import { z } from "zod";
3
+ import { getMe, listTasks, listWorkspaces } from "../../lib/asana-client.ts";
4
+
5
+ export default tool({
6
+ id: "list-tasks",
7
+ description:
8
+ "List tasks from Asana. Can filter by project or get tasks assigned to the current user.",
9
+ inputSchema: z.object({
10
+ projectGid: z.string().optional().describe("Project GID to list tasks from"),
11
+ assignedToMe: z.boolean().default(false).describe("List tasks assigned to the current user"),
12
+ includeCompleted: z.boolean().default(false).describe("Include completed tasks"),
13
+ limit: z.number().min(1).max(50).default(20).describe("Maximum number of tasks to return"),
14
+ }),
15
+ async execute({ projectGid, assignedToMe, includeCompleted, limit }) {
16
+ let tasks;
17
+
18
+ if (assignedToMe) {
19
+ const me = await getMe();
20
+ const workspaces = await listWorkspaces();
21
+ if (workspaces.length === 0) {
22
+ return { tasks: [], message: "No workspaces found" };
23
+ }
24
+ tasks = await listTasks({
25
+ assigneeGid: me.gid,
26
+ workspaceGid: workspaces[0].gid,
27
+ completedSince: includeCompleted ? undefined : "now",
28
+ });
29
+ } else if (projectGid) {
30
+ tasks = await listTasks({
31
+ projectGid,
32
+ completedSince: includeCompleted ? undefined : "now",
33
+ });
34
+ } else {
35
+ return {
36
+ tasks: [],
37
+ message: "Please specify either a projectGid or set assignedToMe to true",
38
+ };
39
+ }
40
+
41
+ return tasks.slice(0, limit).map((task) => ({
42
+ gid: task.gid,
43
+ name: task.name,
44
+ completed: task.completed,
45
+ dueOn: task.due_on,
46
+ assignee: task.assignee?.name,
47
+ projects: task.projects.map((p) => p.name),
48
+ }));
49
+ },
50
+ });
@@ -0,0 +1,36 @@
1
+ import { tool } from "veryfront/ai";
2
+ import { z } from "zod";
3
+ import { updateTask } from "../../lib/asana-client.ts";
4
+
5
+ export default tool({
6
+ id: "update-task",
7
+ description: "Update an existing Asana task.",
8
+ inputSchema: z.object({
9
+ taskGid: z.string().describe("The GID of the task to update"),
10
+ name: z.string().optional().describe("New name/title for the task"),
11
+ notes: z.string().optional().describe("New description or notes"),
12
+ completed: z.boolean().optional().describe("Mark the task as completed or not"),
13
+ dueOn: z.string().optional().describe("New due date in YYYY-MM-DD format"),
14
+ assigneeGid: z.string().optional().describe("GID of the user to reassign the task to"),
15
+ }),
16
+ async execute({ taskGid, name, notes, completed, dueOn, assigneeGid }) {
17
+ const task = await updateTask(taskGid, {
18
+ name,
19
+ notes,
20
+ completed,
21
+ dueOn,
22
+ assigneeGid,
23
+ });
24
+
25
+ return {
26
+ success: true,
27
+ task: {
28
+ gid: task.gid,
29
+ name: task.name,
30
+ completed: task.completed,
31
+ dueOn: task.due_on,
32
+ assignee: task.assignee?.name,
33
+ },
34
+ };
35
+ },
36
+ });