veryfront 0.0.49 → 0.0.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/components.js +260 -56
- package/dist/ai/components.js.map +4 -4
- package/dist/ai/index.d.ts +1 -0
- package/dist/ai/index.js +12 -4
- package/dist/ai/index.js.map +2 -2
- package/dist/ai/primitives.js +55 -10
- package/dist/ai/primitives.js.map +3 -3
- package/dist/ai/react.js +140 -1
- package/dist/ai/react.js.map +3 -3
- package/dist/ai/workflow-react.js +458 -0
- package/dist/ai/workflow-react.js.map +7 -0
- package/dist/ai/workflow.js +5422 -0
- package/dist/ai/workflow.js.map +7 -0
- package/dist/cli.js +957 -221
- package/dist/components.js +12 -4
- package/dist/components.js.map +2 -2
- package/dist/config.js +12 -4
- package/dist/config.js.map +2 -2
- package/dist/data.js +12 -4
- package/dist/data.js.map +2 -2
- package/dist/index.js +12 -6
- package/dist/index.js.map +2 -2
- package/dist/integrations/_base/files/SETUP.md +667 -98
- package/dist/integrations/_base/files/app/api/integrations/token-storage/route.ts +14 -0
- package/dist/integrations/_base/files/app/components/ServiceConnections.tsx +2 -1
- package/dist/integrations/_base/files/app/setup/page.tsx +858 -54
- package/dist/integrations/_base/files/lib/token-store-examples.ts +435 -0
- package/dist/integrations/_base/files/lib/token-store.ts +273 -23
- package/dist/integrations/airtable/connector.json +99 -0
- package/dist/integrations/airtable/files/ai/tools/create-record.ts +25 -0
- package/dist/integrations/airtable/files/ai/tools/get-base.ts +34 -0
- package/dist/integrations/airtable/files/ai/tools/get-record.ts +23 -0
- package/dist/integrations/airtable/files/ai/tools/list-bases.ts +19 -0
- package/dist/integrations/airtable/files/ai/tools/list-records.ts +47 -0
- package/dist/integrations/airtable/files/app/api/auth/airtable/callback/route.ts +11 -0
- package/dist/integrations/airtable/files/app/api/auth/airtable/route.ts +9 -0
- package/dist/integrations/airtable/files/lib/airtable-client.ts +244 -0
- package/dist/integrations/airtable/files/lib/token-store.ts +5 -0
- package/dist/integrations/anthropic/README.md +181 -0
- package/dist/integrations/anthropic/connector.json +88 -0
- package/dist/integrations/anthropic/files/_env.example +4 -0
- package/dist/integrations/anthropic/files/ai/tools/get-organization.ts +36 -0
- package/dist/integrations/anthropic/files/ai/tools/get-usage.ts +100 -0
- package/dist/integrations/anthropic/files/ai/tools/list-api-keys.ts +64 -0
- package/dist/integrations/anthropic/files/ai/tools/list-members.ts +65 -0
- package/dist/integrations/anthropic/files/ai/tools/list-workspaces.ts +35 -0
- package/dist/integrations/anthropic/files/lib/anthropic-admin-client.ts +264 -0
- package/dist/integrations/asana/connector.json +85 -0
- package/dist/integrations/asana/files/_env.example +4 -0
- package/dist/integrations/asana/files/ai/tools/create-task.ts +34 -0
- package/dist/integrations/asana/files/ai/tools/get-task.ts +26 -0
- package/dist/integrations/asana/files/ai/tools/list-projects.ts +26 -0
- package/dist/integrations/asana/files/ai/tools/list-tasks.ts +50 -0
- package/dist/integrations/asana/files/ai/tools/update-task.ts +36 -0
- package/dist/integrations/asana/files/app/api/auth/asana/callback/route.ts +11 -0
- package/dist/integrations/asana/files/app/api/auth/asana/route.ts +7 -0
- package/dist/integrations/asana/files/lib/asana-client.ts +162 -0
- package/dist/integrations/asana/files/lib/token-store.ts +11 -0
- package/dist/integrations/aws/connector.json +72 -0
- package/dist/integrations/aws/files/_env.example +10 -0
- package/dist/integrations/aws/files/ai/tools/get-s3-object.ts +62 -0
- package/dist/integrations/aws/files/ai/tools/list-ec2-instances.ts +56 -0
- package/dist/integrations/aws/files/ai/tools/list-lambda-functions.ts +57 -0
- package/dist/integrations/aws/files/ai/tools/list-s3-buckets.ts +44 -0
- package/dist/integrations/aws/files/ai/tools/list-s3-objects.ts +58 -0
- package/dist/integrations/aws/files/lib/aws-client.ts +255 -0
- package/dist/integrations/bitbucket/connector.json +85 -0
- package/dist/integrations/bitbucket/files/_env.example +9 -0
- package/dist/integrations/bitbucket/files/ai/tools/create-pull-request.ts +83 -0
- package/dist/integrations/bitbucket/files/ai/tools/list-issues.ts +112 -0
- package/dist/integrations/bitbucket/files/ai/tools/list-pull-requests.ts +91 -0
- package/dist/integrations/bitbucket/files/ai/tools/list-repositories.ts +78 -0
- package/dist/integrations/bitbucket/files/app/api/auth/bitbucket/callback/route.ts +11 -0
- package/dist/integrations/bitbucket/files/app/api/auth/bitbucket/route.ts +9 -0
- package/dist/integrations/bitbucket/files/lib/bitbucket-client.ts +316 -0
- package/dist/integrations/bitbucket/files/lib/token-store.ts +5 -0
- package/dist/integrations/box/connector.json +85 -0
- package/dist/integrations/box/files/_env.example +4 -0
- package/dist/integrations/box/files/ai/tools/create-folder.ts +28 -0
- package/dist/integrations/box/files/ai/tools/get-file.ts +29 -0
- package/dist/integrations/box/files/ai/tools/list-files.ts +33 -0
- package/dist/integrations/box/files/ai/tools/search-files.ts +35 -0
- package/dist/integrations/box/files/ai/tools/upload-file.ts +32 -0
- package/dist/integrations/box/files/app/api/auth/box/callback/route.ts +11 -0
- package/dist/integrations/box/files/app/api/auth/box/route.ts +7 -0
- package/dist/integrations/box/files/lib/box-client.ts +280 -0
- package/dist/integrations/box/files/lib/token-store.ts +11 -0
- package/dist/integrations/calendar/files/app/api/auth/calendar/callback/route.ts +7 -110
- package/dist/integrations/calendar/files/app/api/auth/calendar/route.ts +5 -25
- package/dist/integrations/calendar/files/lib/token-store.ts +2 -110
- package/dist/integrations/clickup/connector.json +85 -0
- package/dist/integrations/clickup/files/_env.example +4 -0
- package/dist/integrations/clickup/files/ai/tools/create-task.ts +64 -0
- package/dist/integrations/clickup/files/ai/tools/get-task.ts +59 -0
- package/dist/integrations/clickup/files/ai/tools/list-lists.ts +109 -0
- package/dist/integrations/clickup/files/ai/tools/list-tasks.ts +95 -0
- package/dist/integrations/clickup/files/ai/tools/update-task.ts +85 -0
- package/dist/integrations/clickup/files/app/api/auth/clickup/callback/route.ts +11 -0
- package/dist/integrations/clickup/files/app/api/auth/clickup/route.ts +7 -0
- package/dist/integrations/clickup/files/lib/clickup-client.ts +439 -0
- package/dist/integrations/clickup/files/lib/token-store.ts +11 -0
- package/dist/integrations/confluence/README.md +246 -0
- package/dist/integrations/confluence/connector.json +104 -0
- package/dist/integrations/confluence/files/_env.example +4 -0
- package/dist/integrations/confluence/files/ai/tools/create-page.ts +43 -0
- package/dist/integrations/confluence/files/ai/tools/get-page.ts +30 -0
- package/dist/integrations/confluence/files/ai/tools/list-spaces.ts +31 -0
- package/dist/integrations/confluence/files/ai/tools/search-content.ts +38 -0
- package/dist/integrations/confluence/files/ai/tools/update-page.ts +45 -0
- package/dist/integrations/confluence/files/app/api/auth/confluence/callback/route.ts +11 -0
- package/dist/integrations/confluence/files/app/api/auth/confluence/route.ts +9 -0
- package/dist/integrations/confluence/files/lib/confluence-client.ts +281 -0
- package/dist/integrations/confluence/files/lib/token-store.ts +5 -0
- package/dist/integrations/discord/connector.json +100 -0
- package/dist/integrations/discord/files/_env.example +12 -0
- package/dist/integrations/discord/files/ai/tools/get-messages.ts +55 -0
- package/dist/integrations/discord/files/ai/tools/get-user.ts +32 -0
- package/dist/integrations/discord/files/ai/tools/list-channels.ts +32 -0
- package/dist/integrations/discord/files/ai/tools/list-guilds.ts +24 -0
- package/dist/integrations/discord/files/ai/tools/send-message.ts +33 -0
- package/dist/integrations/discord/files/app/api/auth/discord/callback/route.ts +11 -0
- package/dist/integrations/discord/files/app/api/auth/discord/route.ts +9 -0
- package/dist/integrations/discord/files/lib/discord-client.ts +273 -0
- package/dist/integrations/discord/files/lib/token-store.ts +5 -0
- package/dist/integrations/docs-google/connector.json +101 -0
- package/dist/integrations/docs-google/files/_env.example +8 -0
- package/dist/integrations/docs-google/files/ai/tools/create-document.ts +46 -0
- package/dist/integrations/docs-google/files/ai/tools/get-document.ts +46 -0
- package/dist/integrations/docs-google/files/ai/tools/list-documents.ts +42 -0
- package/dist/integrations/docs-google/files/ai/tools/search-documents.ts +38 -0
- package/dist/integrations/docs-google/files/ai/tools/update-document.ts +131 -0
- package/dist/integrations/docs-google/files/app/api/auth/docs-google/callback/route.ts +11 -0
- package/dist/integrations/docs-google/files/app/api/auth/docs-google/route.ts +9 -0
- package/dist/integrations/docs-google/files/lib/docs-client.ts +582 -0
- package/dist/integrations/docs-google/files/lib/token-store.ts +5 -0
- package/dist/integrations/drive/connector.json +134 -0
- package/dist/integrations/drive/files/_env.example +9 -0
- package/dist/integrations/drive/files/ai/tools/create-folder.ts +47 -0
- package/dist/integrations/drive/files/ai/tools/get-file.ts +55 -0
- package/dist/integrations/drive/files/ai/tools/list-files.ts +78 -0
- package/dist/integrations/drive/files/ai/tools/search-files.ts +79 -0
- package/dist/integrations/drive/files/ai/tools/upload-file.ts +59 -0
- package/dist/integrations/drive/files/app/api/auth/drive/callback/route.ts +11 -0
- package/dist/integrations/drive/files/app/api/auth/drive/route.ts +9 -0
- package/dist/integrations/drive/files/lib/drive-client.ts +359 -0
- package/dist/integrations/drive/files/lib/token-store.ts +113 -0
- package/dist/integrations/dropbox/connector.json +107 -0
- package/dist/integrations/dropbox/files/_env.example +24 -0
- package/dist/integrations/dropbox/files/ai/tools/get-account.ts +58 -0
- package/dist/integrations/dropbox/files/ai/tools/get-file.ts +61 -0
- package/dist/integrations/dropbox/files/ai/tools/list-files.ts +56 -0
- package/dist/integrations/dropbox/files/ai/tools/search-files.ts +70 -0
- package/dist/integrations/dropbox/files/ai/tools/upload-file.ts +48 -0
- package/dist/integrations/dropbox/files/app/api/auth/dropbox/callback/route.ts +11 -0
- package/dist/integrations/dropbox/files/app/api/auth/dropbox/route.ts +9 -0
- package/dist/integrations/dropbox/files/lib/dropbox-client.ts +397 -0
- package/dist/integrations/dropbox/files/lib/token-store.ts +5 -0
- package/dist/integrations/figma/INTEGRATION_SUMMARY.md +436 -0
- package/dist/integrations/figma/README.md +287 -0
- package/dist/integrations/figma/connector.json +100 -0
- package/dist/integrations/figma/files/_env.example +5 -0
- package/dist/integrations/figma/files/ai/tools/get-comments.ts +72 -0
- package/dist/integrations/figma/files/ai/tools/get-file.ts +54 -0
- package/dist/integrations/figma/files/ai/tools/list-files.ts +39 -0
- package/dist/integrations/figma/files/ai/tools/list-projects.ts +69 -0
- package/dist/integrations/figma/files/ai/tools/post-comment.ts +54 -0
- package/dist/integrations/figma/files/app/api/auth/figma/callback/route.ts +11 -0
- package/dist/integrations/figma/files/app/api/auth/figma/route.ts +9 -0
- package/dist/integrations/figma/files/lib/figma-client.ts +355 -0
- package/dist/integrations/figma/files/lib/token-store.ts +5 -0
- package/dist/integrations/figma/files/lib/types.ts +503 -0
- package/dist/integrations/freshdesk/connector.json +85 -0
- package/dist/integrations/freshdesk/files/_env.example +4 -0
- package/dist/integrations/freshdesk/files/ai/tools/create-ticket.ts +60 -0
- package/dist/integrations/freshdesk/files/ai/tools/get-ticket.ts +46 -0
- package/dist/integrations/freshdesk/files/ai/tools/list-contacts.ts +37 -0
- package/dist/integrations/freshdesk/files/ai/tools/list-tickets.ts +59 -0
- package/dist/integrations/freshdesk/files/ai/tools/update-ticket.ts +61 -0
- package/dist/integrations/freshdesk/files/app/api/auth/freshdesk/callback/route.ts +11 -0
- package/dist/integrations/freshdesk/files/app/api/auth/freshdesk/route.ts +7 -0
- package/dist/integrations/freshdesk/files/lib/freshdesk-client.ts +178 -0
- package/dist/integrations/freshdesk/files/lib/token-store.ts +11 -0
- package/dist/integrations/github/files/app/api/auth/github/callback/route.ts +6 -127
- package/dist/integrations/github/files/app/api/auth/github/route.ts +4 -24
- package/dist/integrations/github/files/lib/token-store.ts +2 -110
- package/dist/integrations/gitlab/connector.json +100 -0
- package/dist/integrations/gitlab/files/_env.example +7 -0
- package/dist/integrations/gitlab/files/ai/tools/create-issue.ts +49 -0
- package/dist/integrations/gitlab/files/ai/tools/get-issue.ts +56 -0
- package/dist/integrations/gitlab/files/ai/tools/list-merge-requests.ts +75 -0
- package/dist/integrations/gitlab/files/ai/tools/list-projects.ts +51 -0
- package/dist/integrations/gitlab/files/ai/tools/search-issues.ts +67 -0
- package/dist/integrations/gitlab/files/app/api/auth/gitlab/callback/route.ts +11 -0
- package/dist/integrations/gitlab/files/app/api/auth/gitlab/route.ts +9 -0
- package/dist/integrations/gitlab/files/lib/gitlab-client.ts +366 -0
- package/dist/integrations/gitlab/files/lib/token-store.ts +5 -0
- package/dist/integrations/gmail/files/app/api/auth/gmail/callback/route.ts +7 -108
- package/dist/integrations/gmail/files/app/api/auth/gmail/route.ts +5 -23
- package/dist/integrations/gmail/files/lib/gmail-client.ts +16 -55
- package/dist/integrations/gmail/files/lib/token-store.ts +4 -109
- package/dist/integrations/hubspot/connector.json +98 -0
- package/dist/integrations/hubspot/files/_env.example +5 -0
- package/dist/integrations/hubspot/files/ai/tools/create-contact.ts +41 -0
- package/dist/integrations/hubspot/files/ai/tools/create-deal.ts +41 -0
- package/dist/integrations/hubspot/files/ai/tools/get-contact.ts +39 -0
- package/dist/integrations/hubspot/files/ai/tools/list-contacts.ts +43 -0
- package/dist/integrations/hubspot/files/ai/tools/list-deals.ts +41 -0
- package/dist/integrations/hubspot/files/app/api/auth/hubspot/callback/route.ts +11 -0
- package/dist/integrations/hubspot/files/app/api/auth/hubspot/route.ts +9 -0
- package/dist/integrations/hubspot/files/lib/hubspot-client.ts +393 -0
- package/dist/integrations/hubspot/files/lib/token-store.ts +5 -0
- package/dist/integrations/intercom/connector.json +85 -0
- package/dist/integrations/intercom/files/_env.example +4 -0
- package/dist/integrations/intercom/files/ai/tools/get-contact.ts +35 -0
- package/dist/integrations/intercom/files/ai/tools/get-conversation.ts +55 -0
- package/dist/integrations/intercom/files/ai/tools/list-contacts.ts +35 -0
- package/dist/integrations/intercom/files/ai/tools/list-conversations.ts +49 -0
- package/dist/integrations/intercom/files/ai/tools/send-message.ts +34 -0
- package/dist/integrations/intercom/files/app/api/auth/intercom/callback/route.ts +11 -0
- package/dist/integrations/intercom/files/app/api/auth/intercom/route.ts +7 -0
- package/dist/integrations/intercom/files/lib/intercom-client.ts +308 -0
- package/dist/integrations/intercom/files/lib/token-store.ts +11 -0
- package/dist/integrations/jira/connector.json +109 -0
- package/dist/integrations/jira/files/ai/tools/create-issue.ts +47 -0
- package/dist/integrations/jira/files/ai/tools/get-issue.ts +57 -0
- package/dist/integrations/jira/files/ai/tools/list-projects.ts +30 -0
- package/dist/integrations/jira/files/ai/tools/search-issues.ts +49 -0
- package/dist/integrations/jira/files/ai/tools/update-issue.ts +81 -0
- package/dist/integrations/jira/files/app/api/auth/jira/callback/route.ts +11 -0
- package/dist/integrations/jira/files/app/api/auth/jira/route.ts +9 -0
- package/dist/integrations/jira/files/lib/jira-client.ts +338 -0
- package/dist/integrations/jira/files/lib/token-store.ts +5 -0
- package/dist/integrations/linear/connector.json +100 -0
- package/dist/integrations/linear/files/_env.example +6 -0
- package/dist/integrations/linear/files/ai/tools/create-issue.ts +71 -0
- package/dist/integrations/linear/files/ai/tools/get-issue.ts +55 -0
- package/dist/integrations/linear/files/ai/tools/list-projects.ts +43 -0
- package/dist/integrations/linear/files/ai/tools/search-issues.ts +54 -0
- package/dist/integrations/linear/files/ai/tools/update-issue.ts +71 -0
- package/dist/integrations/linear/files/app/api/auth/linear/callback/route.ts +11 -0
- package/dist/integrations/linear/files/app/api/auth/linear/route.ts +9 -0
- package/dist/integrations/linear/files/lib/linear-client.ts +464 -0
- package/dist/integrations/linear/files/lib/token-store.ts +5 -0
- package/dist/integrations/mailchimp/connector.json +85 -0
- package/dist/integrations/mailchimp/files/_env.example +4 -0
- package/dist/integrations/mailchimp/files/ai/tools/get-campaign.ts +45 -0
- package/dist/integrations/mailchimp/files/ai/tools/get-list.ts +51 -0
- package/dist/integrations/mailchimp/files/ai/tools/list-campaigns.ts +46 -0
- package/dist/integrations/mailchimp/files/ai/tools/list-lists.ts +46 -0
- package/dist/integrations/mailchimp/files/ai/tools/list-members.ts +58 -0
- package/dist/integrations/mailchimp/files/app/api/auth/mailchimp/callback/route.ts +11 -0
- package/dist/integrations/mailchimp/files/app/api/auth/mailchimp/route.ts +7 -0
- package/dist/integrations/mailchimp/files/lib/mailchimp-client.ts +267 -0
- package/dist/integrations/mailchimp/files/lib/token-store.ts +11 -0
- package/dist/integrations/mixpanel/connector.json +96 -0
- package/dist/integrations/mixpanel/files/_env.example +11 -0
- package/dist/integrations/mixpanel/files/ai/tools/get-funnel.ts +46 -0
- package/dist/integrations/mixpanel/files/ai/tools/get-retention.ts +64 -0
- package/dist/integrations/mixpanel/files/ai/tools/list-cohorts.ts +46 -0
- package/dist/integrations/mixpanel/files/ai/tools/query-events.ts +43 -0
- package/dist/integrations/mixpanel/files/ai/tools/track-event.ts +41 -0
- package/dist/integrations/mixpanel/files/lib/mixpanel-client.ts +319 -0
- package/dist/integrations/mixpanel/files/lib/token-store.ts +43 -0
- package/dist/integrations/monday/connector.json +85 -0
- package/dist/integrations/monday/files/_env.example +4 -0
- package/dist/integrations/monday/files/ai/tools/create-item.ts +36 -0
- package/dist/integrations/monday/files/ai/tools/get-item.ts +31 -0
- package/dist/integrations/monday/files/ai/tools/list-boards.ts +29 -0
- package/dist/integrations/monday/files/ai/tools/list-items.ts +36 -0
- package/dist/integrations/monday/files/ai/tools/update-item.ts +36 -0
- package/dist/integrations/monday/files/app/api/auth/monday/callback/route.ts +11 -0
- package/dist/integrations/monday/files/app/api/auth/monday/route.ts +7 -0
- package/dist/integrations/monday/files/lib/monday-client.ts +329 -0
- package/dist/integrations/monday/files/lib/token-store.ts +11 -0
- package/dist/integrations/neon/connector.json +89 -0
- package/dist/integrations/neon/files/_env.example +6 -0
- package/dist/integrations/neon/files/ai/tools/describe-table.ts +38 -0
- package/dist/integrations/neon/files/ai/tools/list-branches.ts +35 -0
- package/dist/integrations/neon/files/ai/tools/list-projects.ts +31 -0
- package/dist/integrations/neon/files/ai/tools/list-tables.ts +49 -0
- package/dist/integrations/neon/files/ai/tools/query-database.ts +33 -0
- package/dist/integrations/neon/files/app/api/auth/neon/route.ts +51 -0
- package/dist/integrations/neon/files/lib/neon-client.ts +294 -0
- package/dist/integrations/neon/files/lib/token-store.ts +29 -0
- package/dist/integrations/notion/connector.json +87 -0
- package/dist/integrations/notion/files/_env.example +6 -0
- package/dist/integrations/notion/files/ai/tools/create-page.ts +32 -0
- package/dist/integrations/notion/files/ai/tools/query-database.ts +44 -0
- package/dist/integrations/notion/files/ai/tools/read-page.ts +34 -0
- package/dist/integrations/notion/files/ai/tools/search-notion.ts +51 -0
- package/dist/integrations/notion/files/app/api/auth/notion/callback/route.ts +11 -0
- package/dist/integrations/notion/files/app/api/auth/notion/route.ts +9 -0
- package/dist/integrations/notion/files/lib/notion-client.ts +218 -0
- package/dist/integrations/notion/files/lib/token-store.ts +5 -0
- package/dist/integrations/onedrive/connector.json +100 -0
- package/dist/integrations/onedrive/files/_env.example +23 -0
- package/dist/integrations/onedrive/files/ai/tools/download-file.ts +38 -0
- package/dist/integrations/onedrive/files/ai/tools/list-files.ts +63 -0
- package/dist/integrations/onedrive/files/ai/tools/search-files.ts +59 -0
- package/dist/integrations/onedrive/files/ai/tools/upload-file.ts +43 -0
- package/dist/integrations/onedrive/files/app/api/auth/onedrive/callback/route.ts +11 -0
- package/dist/integrations/onedrive/files/app/api/auth/onedrive/route.ts +9 -0
- package/dist/integrations/onedrive/files/lib/onedrive-client.ts +314 -0
- package/dist/integrations/onedrive/files/lib/token-store.ts +5 -0
- package/dist/integrations/outlook/README.md +308 -0
- package/dist/integrations/outlook/connector.json +98 -0
- package/dist/integrations/outlook/files/_env.example +8 -0
- package/dist/integrations/outlook/files/ai/tools/get-email.ts +47 -0
- package/dist/integrations/outlook/files/ai/tools/list-emails.ts +46 -0
- package/dist/integrations/outlook/files/ai/tools/list-folders.ts +22 -0
- package/dist/integrations/outlook/files/ai/tools/search-emails.ts +41 -0
- package/dist/integrations/outlook/files/ai/tools/send-email.ts +41 -0
- package/dist/integrations/outlook/files/app/api/auth/outlook/callback/route.ts +11 -0
- package/dist/integrations/outlook/files/app/api/auth/outlook/route.ts +9 -0
- package/dist/integrations/outlook/files/lib/outlook-client.ts +204 -0
- package/dist/integrations/outlook/files/lib/token-store.ts +5 -0
- package/dist/integrations/pipedrive/connector.json +85 -0
- package/dist/integrations/pipedrive/files/_env.example +4 -0
- package/dist/integrations/pipedrive/files/ai/tools/create-deal.ts +44 -0
- package/dist/integrations/pipedrive/files/ai/tools/get-deal.ts +34 -0
- package/dist/integrations/pipedrive/files/ai/tools/list-deals.ts +40 -0
- package/dist/integrations/pipedrive/files/ai/tools/list-persons.ts +33 -0
- package/dist/integrations/pipedrive/files/ai/tools/update-deal.ts +46 -0
- package/dist/integrations/pipedrive/files/app/api/auth/pipedrive/callback/route.ts +11 -0
- package/dist/integrations/pipedrive/files/app/api/auth/pipedrive/route.ts +7 -0
- package/dist/integrations/pipedrive/files/lib/pipedrive-client.ts +259 -0
- package/dist/integrations/pipedrive/files/lib/token-store.ts +11 -0
- package/dist/integrations/posthog/connector.json +84 -0
- package/dist/integrations/posthog/files/_env.example +6 -0
- package/dist/integrations/posthog/files/ai/tools/capture-event.ts +37 -0
- package/dist/integrations/posthog/files/ai/tools/get-trends.ts +44 -0
- package/dist/integrations/posthog/files/ai/tools/list-feature-flags.ts +38 -0
- package/dist/integrations/posthog/files/ai/tools/list-persons.ts +32 -0
- package/dist/integrations/posthog/files/lib/posthog-client.ts +286 -0
- package/dist/integrations/posthog/files/lib/token-store.ts +21 -0
- package/dist/integrations/quickbooks/connector.json +85 -0
- package/dist/integrations/quickbooks/files/_env.example +4 -0
- package/dist/integrations/quickbooks/files/ai/tools/create-invoice.ts +48 -0
- package/dist/integrations/quickbooks/files/ai/tools/get-customer.ts +36 -0
- package/dist/integrations/quickbooks/files/ai/tools/get-invoice.ts +46 -0
- package/dist/integrations/quickbooks/files/ai/tools/list-customers.ts +37 -0
- package/dist/integrations/quickbooks/files/ai/tools/list-invoices.ts +40 -0
- package/dist/integrations/quickbooks/files/app/api/auth/quickbooks/callback/route.ts +11 -0
- package/dist/integrations/quickbooks/files/app/api/auth/quickbooks/route.ts +7 -0
- package/dist/integrations/quickbooks/files/lib/quickbooks-client.ts +252 -0
- package/dist/integrations/quickbooks/files/lib/token-store.ts +11 -0
- package/dist/integrations/salesforce/connector.json +104 -0
- package/dist/integrations/salesforce/files/ai/tools/create-lead.ts +101 -0
- package/dist/integrations/salesforce/files/ai/tools/get-account.ts +53 -0
- package/dist/integrations/salesforce/files/ai/tools/list-accounts.ts +50 -0
- package/dist/integrations/salesforce/files/ai/tools/list-contacts.ts +54 -0
- package/dist/integrations/salesforce/files/ai/tools/list-opportunities.ts +55 -0
- package/dist/integrations/salesforce/files/app/api/auth/salesforce/callback/route.ts +11 -0
- package/dist/integrations/salesforce/files/app/api/auth/salesforce/route.ts +9 -0
- package/dist/integrations/salesforce/files/lib/salesforce-client.ts +539 -0
- package/dist/integrations/salesforce/files/lib/token-store.ts +5 -0
- package/dist/integrations/sentry/connector.json +84 -0
- package/dist/integrations/sentry/files/_env.example +6 -0
- package/dist/integrations/sentry/files/ai/tools/get-issue.ts +66 -0
- package/dist/integrations/sentry/files/ai/tools/list-issues.ts +57 -0
- package/dist/integrations/sentry/files/ai/tools/list-projects.ts +32 -0
- package/dist/integrations/sentry/files/ai/tools/resolve-issue.ts +28 -0
- package/dist/integrations/sentry/files/lib/sentry-client.ts +268 -0
- package/dist/integrations/sentry/files/lib/token-store.ts +29 -0
- package/dist/integrations/servicenow/connector.json +66 -0
- package/dist/integrations/servicenow/files/_env.example +5 -0
- package/dist/integrations/servicenow/files/ai/tools/create-incident.ts +58 -0
- package/dist/integrations/servicenow/files/ai/tools/get-incident.ts +59 -0
- package/dist/integrations/servicenow/files/ai/tools/list-incidents.ts +72 -0
- package/dist/integrations/servicenow/files/ai/tools/search-knowledge.ts +48 -0
- package/dist/integrations/servicenow/files/ai/tools/update-incident.ts +60 -0
- package/dist/integrations/servicenow/files/app/api/auth/servicenow/callback/route.ts +89 -0
- package/dist/integrations/servicenow/files/app/api/auth/servicenow/route.ts +42 -0
- package/dist/integrations/servicenow/files/lib/servicenow-client.ts +239 -0
- package/dist/integrations/servicenow/files/lib/token-store.ts +42 -0
- package/dist/integrations/sharepoint/connector.json +99 -0
- package/dist/integrations/sharepoint/files/ai/tools/get-file.ts +93 -0
- package/dist/integrations/sharepoint/files/ai/tools/get-site.ts +51 -0
- package/dist/integrations/sharepoint/files/ai/tools/list-files.ts +63 -0
- package/dist/integrations/sharepoint/files/ai/tools/list-sites.ts +28 -0
- package/dist/integrations/sharepoint/files/ai/tools/upload-file.ts +72 -0
- package/dist/integrations/sharepoint/files/app/api/auth/sharepoint/callback/route.ts +11 -0
- package/dist/integrations/sharepoint/files/app/api/auth/sharepoint/route.ts +9 -0
- package/dist/integrations/sharepoint/files/lib/sharepoint-client.ts +420 -0
- package/dist/integrations/sharepoint/files/lib/token-store.ts +5 -0
- package/dist/integrations/sheets/README.md +331 -0
- package/dist/integrations/sheets/connector.json +99 -0
- package/dist/integrations/sheets/files/_env.example +8 -0
- package/dist/integrations/sheets/files/ai/tools/create-spreadsheet.ts +85 -0
- package/dist/integrations/sheets/files/ai/tools/get-spreadsheet.ts +39 -0
- package/dist/integrations/sheets/files/ai/tools/list-spreadsheets.ts +41 -0
- package/dist/integrations/sheets/files/ai/tools/read-range.ts +35 -0
- package/dist/integrations/sheets/files/ai/tools/write-range.ts +51 -0
- package/dist/integrations/sheets/files/app/api/auth/sheets/callback/route.ts +11 -0
- package/dist/integrations/sheets/files/app/api/auth/sheets/route.ts +9 -0
- package/dist/integrations/sheets/files/lib/sheets-client.ts +425 -0
- package/dist/integrations/sheets/files/lib/token-store.ts +5 -0
- package/dist/integrations/shopify/connector.json +99 -0
- package/dist/integrations/shopify/files/_env.example +5 -0
- package/dist/integrations/shopify/files/ai/tools/get-order.ts +49 -0
- package/dist/integrations/shopify/files/ai/tools/get-product.ts +39 -0
- package/dist/integrations/shopify/files/ai/tools/list-customers.ts +40 -0
- package/dist/integrations/shopify/files/ai/tools/list-orders.ts +52 -0
- package/dist/integrations/shopify/files/ai/tools/list-products.ts +39 -0
- package/dist/integrations/shopify/files/app/api/auth/shopify/callback/route.ts +11 -0
- package/dist/integrations/shopify/files/app/api/auth/shopify/route.ts +7 -0
- package/dist/integrations/shopify/files/lib/shopify-client.ts +198 -0
- package/dist/integrations/shopify/files/lib/token-store.ts +11 -0
- package/dist/integrations/slack/files/app/api/auth/slack/callback/route.ts +6 -127
- package/dist/integrations/slack/files/app/api/auth/slack/route.ts +4 -24
- package/dist/integrations/slack/files/lib/token-store.ts +2 -110
- package/dist/integrations/snowflake/connector.json +151 -0
- package/dist/integrations/snowflake/files/_env.example +16 -0
- package/dist/integrations/snowflake/files/ai/tools/describe-table.ts +57 -0
- package/dist/integrations/snowflake/files/ai/tools/list-databases.ts +34 -0
- package/dist/integrations/snowflake/files/ai/tools/list-schemas.ts +40 -0
- package/dist/integrations/snowflake/files/ai/tools/list-tables.ts +49 -0
- package/dist/integrations/snowflake/files/ai/tools/run-query.ts +119 -0
- package/dist/integrations/snowflake/files/lib/snowflake-client.ts +389 -0
- package/dist/integrations/snowflake/files/lib/token-store.ts +77 -0
- package/dist/integrations/stripe/connector.json +97 -0
- package/dist/integrations/stripe/files/_env.example +6 -0
- package/dist/integrations/stripe/files/ai/tools/get-balance.ts +28 -0
- package/dist/integrations/stripe/files/ai/tools/get-customer.ts +26 -0
- package/dist/integrations/stripe/files/ai/tools/list-customers.ts +42 -0
- package/dist/integrations/stripe/files/ai/tools/list-payments.ts +45 -0
- package/dist/integrations/stripe/files/ai/tools/list-subscriptions.ts +67 -0
- package/dist/integrations/stripe/files/app/api/auth/stripe/route.ts +71 -0
- package/dist/integrations/stripe/files/lib/stripe-client.ts +376 -0
- package/dist/integrations/stripe/files/lib/token-store.ts +21 -0
- package/dist/integrations/supabase/connector.json +101 -0
- package/dist/integrations/supabase/files/_env.example +6 -0
- package/dist/integrations/supabase/files/ai/tools/delete-row.ts +77 -0
- package/dist/integrations/supabase/files/ai/tools/insert-row.ts +35 -0
- package/dist/integrations/supabase/files/ai/tools/list-tables.ts +60 -0
- package/dist/integrations/supabase/files/ai/tools/query-table.ts +48 -0
- package/dist/integrations/supabase/files/ai/tools/update-row.ts +64 -0
- package/dist/integrations/supabase/files/app/api/auth/supabase/route.ts +91 -0
- package/dist/integrations/supabase/files/lib/supabase-client.ts +296 -0
- package/dist/integrations/supabase/files/lib/token-store.ts +47 -0
- package/dist/integrations/teams/README.md +256 -0
- package/dist/integrations/teams/connector.json +99 -0
- package/dist/integrations/teams/files/ai/tools/get-messages.ts +55 -0
- package/dist/integrations/teams/files/ai/tools/list-channels.ts +28 -0
- package/dist/integrations/teams/files/ai/tools/list-chats.ts +41 -0
- package/dist/integrations/teams/files/ai/tools/list-teams.ts +27 -0
- package/dist/integrations/teams/files/ai/tools/send-message.ts +61 -0
- package/dist/integrations/teams/files/app/api/auth/teams/callback/route.ts +11 -0
- package/dist/integrations/teams/files/app/api/auth/teams/route.ts +9 -0
- package/dist/integrations/teams/files/lib/teams-client.ts +345 -0
- package/dist/integrations/teams/files/lib/token-store.ts +5 -0
- package/dist/integrations/trello/connector.json +85 -0
- package/dist/integrations/trello/files/_env.example +4 -0
- package/dist/integrations/trello/files/ai/tools/create-card.ts +54 -0
- package/dist/integrations/trello/files/ai/tools/get-card.ts +33 -0
- package/dist/integrations/trello/files/ai/tools/list-boards.ts +29 -0
- package/dist/integrations/trello/files/ai/tools/list-cards.ts +52 -0
- package/dist/integrations/trello/files/ai/tools/update-card.ts +65 -0
- package/dist/integrations/trello/files/app/api/auth/trello/callback/route.ts +11 -0
- package/dist/integrations/trello/files/app/api/auth/trello/route.ts +7 -0
- package/dist/integrations/trello/files/lib/token-store.ts +11 -0
- package/dist/integrations/trello/files/lib/trello-client.ts +202 -0
- package/dist/integrations/twilio/connector.json +146 -0
- package/dist/integrations/twilio/files/_env.example +14 -0
- package/dist/integrations/twilio/files/ai/tools/get-message.ts +58 -0
- package/dist/integrations/twilio/files/ai/tools/list-calls.ts +129 -0
- package/dist/integrations/twilio/files/ai/tools/list-messages.ts +97 -0
- package/dist/integrations/twilio/files/ai/tools/send-sms.ts +75 -0
- package/dist/integrations/twilio/files/ai/tools/send-whatsapp.ts +81 -0
- package/dist/integrations/twilio/files/lib/token-store.ts +60 -0
- package/dist/integrations/twilio/files/lib/twilio-client.ts +375 -0
- package/dist/integrations/twitter/connector.json +87 -0
- package/dist/integrations/twitter/files/_env.example +6 -0
- package/dist/integrations/twitter/files/ai/tools/get-timeline.ts +59 -0
- package/dist/integrations/twitter/files/ai/tools/post-tweet.ts +49 -0
- package/dist/integrations/twitter/files/ai/tools/search-tweets.ts +71 -0
- package/dist/integrations/twitter/files/app/api/auth/twitter/callback/route.ts +11 -0
- package/dist/integrations/twitter/files/app/api/auth/twitter/route.ts +9 -0
- package/dist/integrations/twitter/files/lib/token-store.ts +5 -0
- package/dist/integrations/twitter/files/lib/twitter-client.ts +236 -0
- package/dist/integrations/webex/connector.json +85 -0
- package/dist/integrations/webex/files/_env.example +4 -0
- package/dist/integrations/webex/files/ai/tools/create-meeting.ts +69 -0
- package/dist/integrations/webex/files/ai/tools/get-meeting.ts +31 -0
- package/dist/integrations/webex/files/ai/tools/list-meetings.ts +44 -0
- package/dist/integrations/webex/files/ai/tools/list-rooms.ts +35 -0
- package/dist/integrations/webex/files/ai/tools/send-message.ts +51 -0
- package/dist/integrations/webex/files/app/api/auth/webex/callback/route.ts +11 -0
- package/dist/integrations/webex/files/app/api/auth/webex/route.ts +7 -0
- package/dist/integrations/webex/files/lib/token-store.ts +11 -0
- package/dist/integrations/webex/files/lib/webex-client.ts +279 -0
- package/dist/integrations/xero/connector.json +85 -0
- package/dist/integrations/xero/files/_env.example +4 -0
- package/dist/integrations/xero/files/ai/tools/create-invoice.ts +65 -0
- package/dist/integrations/xero/files/ai/tools/get-contact.ts +40 -0
- package/dist/integrations/xero/files/ai/tools/get-invoice.ts +44 -0
- package/dist/integrations/xero/files/ai/tools/list-contacts.ts +54 -0
- package/dist/integrations/xero/files/ai/tools/list-invoices.ts +54 -0
- package/dist/integrations/xero/files/app/api/auth/xero/callback/route.ts +11 -0
- package/dist/integrations/xero/files/app/api/auth/xero/route.ts +7 -0
- package/dist/integrations/xero/files/lib/token-store.ts +11 -0
- package/dist/integrations/xero/files/lib/xero-client.ts +292 -0
- package/dist/integrations/zendesk/connector.json +61 -0
- package/dist/integrations/zendesk/files/_env.example +5 -0
- package/dist/integrations/zendesk/files/ai/tools/create-ticket.ts +82 -0
- package/dist/integrations/zendesk/files/ai/tools/get-ticket.ts +53 -0
- package/dist/integrations/zendesk/files/ai/tools/list-tickets.ts +60 -0
- package/dist/integrations/zendesk/files/ai/tools/search-tickets.ts +56 -0
- package/dist/integrations/zendesk/files/app/api/auth/zendesk/callback/route.ts +91 -0
- package/dist/integrations/zendesk/files/app/api/auth/zendesk/route.ts +41 -0
- package/dist/integrations/zendesk/files/lib/token-store.ts +47 -0
- package/dist/integrations/zendesk/files/lib/zendesk-client.ts +265 -0
- package/dist/integrations/zoom/connector.json +85 -0
- package/dist/integrations/zoom/files/_env.example +4 -0
- package/dist/integrations/zoom/files/ai/tools/create-meeting.ts +106 -0
- package/dist/integrations/zoom/files/ai/tools/delete-meeting.ts +32 -0
- package/dist/integrations/zoom/files/ai/tools/get-meeting.ts +44 -0
- package/dist/integrations/zoom/files/ai/tools/list-meetings.ts +47 -0
- package/dist/integrations/zoom/files/ai/tools/update-meeting.ts +111 -0
- package/dist/integrations/zoom/files/app/api/auth/zoom/callback/route.ts +11 -0
- package/dist/integrations/zoom/files/app/api/auth/zoom/route.ts +7 -0
- package/dist/integrations/zoom/files/lib/token-store.ts +11 -0
- package/dist/integrations/zoom/files/lib/zoom-client.ts +228 -0
- package/dist/oauth/handlers.js +554 -0
- package/dist/oauth/handlers.js.map +7 -0
- package/dist/oauth/index.js +1157 -0
- package/dist/oauth/index.js.map +7 -0
- package/dist/oauth/providers.js +927 -0
- package/dist/oauth/providers.js.map +7 -0
- package/dist/oauth/token-store.js +82 -0
- package/dist/oauth/token-store.js.map +7 -0
- package/package.json +25 -1
- package/dist/integrations/gmail/files/lib/oauth.ts +0 -145
- package/dist/integrations/slack/files/lib/oauth.ts +0 -145
- /package/dist/integrations/{calendar → docs-google}/files/lib/oauth.ts +0 -0
- /package/dist/integrations/{github → drive}/files/lib/oauth.ts +0 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { getAccessToken } from "./token-store.ts";
|
|
2
|
+
|
|
3
|
+
const AIRTABLE_BASE_URL = "https://api.airtable.com/v0";
|
|
4
|
+
|
|
5
|
+
interface AirtableResponse<T> {
|
|
6
|
+
records?: T[];
|
|
7
|
+
offset?: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
interface AirtableBase {
|
|
11
|
+
id: string;
|
|
12
|
+
name: string;
|
|
13
|
+
permissionLevel: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface AirtableBaseSchema {
|
|
17
|
+
tables: Array<{
|
|
18
|
+
id: string;
|
|
19
|
+
name: string;
|
|
20
|
+
primaryFieldId: string;
|
|
21
|
+
fields: Array<{
|
|
22
|
+
id: string;
|
|
23
|
+
name: string;
|
|
24
|
+
type: string;
|
|
25
|
+
options?: Record<string, unknown>;
|
|
26
|
+
}>;
|
|
27
|
+
views: Array<{
|
|
28
|
+
id: string;
|
|
29
|
+
name: string;
|
|
30
|
+
type: string;
|
|
31
|
+
}>;
|
|
32
|
+
}>;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface AirtableRecord {
|
|
36
|
+
id: string;
|
|
37
|
+
createdTime: string;
|
|
38
|
+
fields: Record<string, unknown>;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
interface AirtableField {
|
|
42
|
+
id: string;
|
|
43
|
+
name: string;
|
|
44
|
+
type: string;
|
|
45
|
+
options?: Record<string, unknown>;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async function airtableFetch<T>(
|
|
49
|
+
endpoint: string,
|
|
50
|
+
options: RequestInit = {},
|
|
51
|
+
): Promise<T> {
|
|
52
|
+
const token = getAccessToken();
|
|
53
|
+
if (!token) {
|
|
54
|
+
throw new Error("Not authenticated with Airtable. Please connect your account.");
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const response = await fetch(`${AIRTABLE_BASE_URL}${endpoint}`, {
|
|
58
|
+
...options,
|
|
59
|
+
headers: {
|
|
60
|
+
"Authorization": `Bearer ${token}`,
|
|
61
|
+
"Content-Type": "application/json",
|
|
62
|
+
...options.headers,
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
if (!response.ok) {
|
|
67
|
+
const error = await response.json().catch(() => ({}));
|
|
68
|
+
throw new Error(
|
|
69
|
+
`Airtable API error: ${response.status} ${error.error?.message || response.statusText}`,
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return response.json();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Meta API for listing bases
|
|
77
|
+
async function metaFetch<T>(
|
|
78
|
+
endpoint: string,
|
|
79
|
+
options: RequestInit = {},
|
|
80
|
+
): Promise<T> {
|
|
81
|
+
const token = getAccessToken();
|
|
82
|
+
if (!token) {
|
|
83
|
+
throw new Error("Not authenticated with Airtable. Please connect your account.");
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const response = await fetch(`https://api.airtable.com/v0/meta${endpoint}`, {
|
|
87
|
+
...options,
|
|
88
|
+
headers: {
|
|
89
|
+
"Authorization": `Bearer ${token}`,
|
|
90
|
+
"Content-Type": "application/json",
|
|
91
|
+
...options.headers,
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
if (!response.ok) {
|
|
96
|
+
const error = await response.json().catch(() => ({}));
|
|
97
|
+
throw new Error(
|
|
98
|
+
`Airtable Meta API error: ${response.status} ${error.error?.message || response.statusText}`,
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return response.json();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export async function listBases(): Promise<AirtableBase[]> {
|
|
106
|
+
const response = await metaFetch<{ bases: AirtableBase[] }>("/bases");
|
|
107
|
+
return response.bases || [];
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export async function getBase(baseId: string): Promise<AirtableBaseSchema> {
|
|
111
|
+
const response = await metaFetch<AirtableBaseSchema>(`/bases/${baseId}/tables`);
|
|
112
|
+
return response;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export async function listRecords(
|
|
116
|
+
baseId: string,
|
|
117
|
+
tableIdOrName: string,
|
|
118
|
+
options?: {
|
|
119
|
+
fields?: string[];
|
|
120
|
+
filterByFormula?: string;
|
|
121
|
+
maxRecords?: number;
|
|
122
|
+
pageSize?: number;
|
|
123
|
+
sort?: Array<{ field: string; direction: "asc" | "desc" }>;
|
|
124
|
+
view?: string;
|
|
125
|
+
offset?: string;
|
|
126
|
+
},
|
|
127
|
+
): Promise<{ records: AirtableRecord[]; offset?: string }> {
|
|
128
|
+
const params = new URLSearchParams();
|
|
129
|
+
|
|
130
|
+
if (options?.fields) {
|
|
131
|
+
options.fields.forEach((field) => params.append("fields[]", field));
|
|
132
|
+
}
|
|
133
|
+
if (options?.filterByFormula) {
|
|
134
|
+
params.append("filterByFormula", options.filterByFormula);
|
|
135
|
+
}
|
|
136
|
+
if (options?.maxRecords) {
|
|
137
|
+
params.append("maxRecords", options.maxRecords.toString());
|
|
138
|
+
}
|
|
139
|
+
if (options?.pageSize) {
|
|
140
|
+
params.append("pageSize", options.pageSize.toString());
|
|
141
|
+
}
|
|
142
|
+
if (options?.sort) {
|
|
143
|
+
options.sort.forEach((s, i) => {
|
|
144
|
+
params.append(`sort[${i}][field]`, s.field);
|
|
145
|
+
params.append(`sort[${i}][direction]`, s.direction);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
if (options?.view) {
|
|
149
|
+
params.append("view", options.view);
|
|
150
|
+
}
|
|
151
|
+
if (options?.offset) {
|
|
152
|
+
params.append("offset", options.offset);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const queryString = params.toString();
|
|
156
|
+
const endpoint = `/${baseId}/${encodeURIComponent(tableIdOrName)}${
|
|
157
|
+
queryString ? `?${queryString}` : ""
|
|
158
|
+
}`;
|
|
159
|
+
|
|
160
|
+
const response = await airtableFetch<AirtableResponse<AirtableRecord>>(endpoint);
|
|
161
|
+
|
|
162
|
+
return {
|
|
163
|
+
records: response.records || [],
|
|
164
|
+
offset: response.offset,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export function getRecord(
|
|
169
|
+
baseId: string,
|
|
170
|
+
tableIdOrName: string,
|
|
171
|
+
recordId: string,
|
|
172
|
+
): Promise<AirtableRecord> {
|
|
173
|
+
return airtableFetch<AirtableRecord>(
|
|
174
|
+
`/${baseId}/${encodeURIComponent(tableIdOrName)}/${recordId}`,
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
export function createRecord(
|
|
179
|
+
baseId: string,
|
|
180
|
+
tableIdOrName: string,
|
|
181
|
+
fields: Record<string, unknown>,
|
|
182
|
+
): Promise<AirtableRecord> {
|
|
183
|
+
return airtableFetch<AirtableRecord>(
|
|
184
|
+
`/${baseId}/${encodeURIComponent(tableIdOrName)}`,
|
|
185
|
+
{
|
|
186
|
+
method: "POST",
|
|
187
|
+
body: JSON.stringify({ fields }),
|
|
188
|
+
},
|
|
189
|
+
);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
export async function createRecords(
|
|
193
|
+
baseId: string,
|
|
194
|
+
tableIdOrName: string,
|
|
195
|
+
records: Array<{ fields: Record<string, unknown> }>,
|
|
196
|
+
): Promise<AirtableRecord[]> {
|
|
197
|
+
const response = await airtableFetch<{ records: AirtableRecord[] }>(
|
|
198
|
+
`/${baseId}/${encodeURIComponent(tableIdOrName)}`,
|
|
199
|
+
{
|
|
200
|
+
method: "POST",
|
|
201
|
+
body: JSON.stringify({ records }),
|
|
202
|
+
},
|
|
203
|
+
);
|
|
204
|
+
return response.records;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
export function updateRecord(
|
|
208
|
+
baseId: string,
|
|
209
|
+
tableIdOrName: string,
|
|
210
|
+
recordId: string,
|
|
211
|
+
fields: Record<string, unknown>,
|
|
212
|
+
options?: { destructive?: boolean },
|
|
213
|
+
): Promise<AirtableRecord> {
|
|
214
|
+
return airtableFetch<AirtableRecord>(
|
|
215
|
+
`/${baseId}/${encodeURIComponent(tableIdOrName)}/${recordId}`,
|
|
216
|
+
{
|
|
217
|
+
method: options?.destructive ? "PUT" : "PATCH",
|
|
218
|
+
body: JSON.stringify({ fields }),
|
|
219
|
+
},
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
export function deleteRecord(
|
|
224
|
+
baseId: string,
|
|
225
|
+
tableIdOrName: string,
|
|
226
|
+
recordId: string,
|
|
227
|
+
): Promise<{ id: string; deleted: boolean }> {
|
|
228
|
+
return airtableFetch<{ id: string; deleted: boolean }>(
|
|
229
|
+
`/${baseId}/${encodeURIComponent(tableIdOrName)}/${recordId}`,
|
|
230
|
+
{ method: "DELETE" },
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Helper to format field value for display
|
|
235
|
+
export function formatFieldValue(value: unknown): string {
|
|
236
|
+
if (value === null || value === undefined) return "";
|
|
237
|
+
if (Array.isArray(value)) {
|
|
238
|
+
return value.map((v) => formatFieldValue(v)).join(", ");
|
|
239
|
+
}
|
|
240
|
+
if (typeof value === "object") {
|
|
241
|
+
return JSON.stringify(value);
|
|
242
|
+
}
|
|
243
|
+
return String(value);
|
|
244
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# Anthropic Admin Integration
|
|
2
|
+
|
|
3
|
+
A complete integration with the Anthropic Admin API for organization management, usage tracking, and workspace administration.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
This integration provides AI-powered tools to interact with the Anthropic Admin API, enabling you to:
|
|
8
|
+
|
|
9
|
+
- List and manage workspaces
|
|
10
|
+
- Monitor API usage and costs
|
|
11
|
+
- Manage API keys
|
|
12
|
+
- View organization members
|
|
13
|
+
- Access organization settings
|
|
14
|
+
|
|
15
|
+
## Files Created
|
|
16
|
+
|
|
17
|
+
### Configuration
|
|
18
|
+
- **connector.json** - Integration metadata with setup guide
|
|
19
|
+
- **files/_env.example** - Environment variable template
|
|
20
|
+
|
|
21
|
+
### API Client
|
|
22
|
+
- **files/lib/anthropic-admin-client.ts** - Fully typed TypeScript client for Anthropic Admin API
|
|
23
|
+
- `AnthropicAdminClient` class with methods for all API endpoints
|
|
24
|
+
- Strong TypeScript interfaces for all response types
|
|
25
|
+
- Comprehensive error handling with custom `AnthropicAdminError`
|
|
26
|
+
- Singleton pattern with `getAnthropicAdminClient()`
|
|
27
|
+
|
|
28
|
+
### AI Tools
|
|
29
|
+
All tools use `import { tool } from 'veryfront/ai'` and Zod schemas:
|
|
30
|
+
|
|
31
|
+
- **files/ai/tools/list-workspaces.ts** - List all workspaces in the organization
|
|
32
|
+
- **files/ai/tools/get-usage.ts** - Get API usage statistics with filtering options
|
|
33
|
+
- **files/ai/tools/list-api-keys.ts** - List API keys for organization or workspace
|
|
34
|
+
- **files/ai/tools/list-members.ts** - List organization members with role breakdown
|
|
35
|
+
- **files/ai/tools/get-organization.ts** - Get organization details and settings
|
|
36
|
+
|
|
37
|
+
## Setup
|
|
38
|
+
|
|
39
|
+
1. Get an admin API key from https://console.anthropic.com
|
|
40
|
+
2. Add to your `.env` file:
|
|
41
|
+
```
|
|
42
|
+
ANTHROPIC_ADMIN_API_KEY=sk-ant-admin-your-key-here
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
3. Install the integration via Veryfront CLI (when available)
|
|
46
|
+
|
|
47
|
+
## API Client Features
|
|
48
|
+
|
|
49
|
+
### Strong TypeScript Types
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
interface AnthropicWorkspace {
|
|
53
|
+
id: string;
|
|
54
|
+
name: string;
|
|
55
|
+
display_name: string;
|
|
56
|
+
created_at: string;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
interface AnthropicUsageRecord {
|
|
60
|
+
workspace_id: string;
|
|
61
|
+
date: string;
|
|
62
|
+
model: string;
|
|
63
|
+
input_tokens: number;
|
|
64
|
+
output_tokens: number;
|
|
65
|
+
cache_creation_tokens?: number;
|
|
66
|
+
cache_read_tokens?: number;
|
|
67
|
+
total_cost_usd: number;
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Error Handling
|
|
72
|
+
|
|
73
|
+
Custom `AnthropicAdminError` class with:
|
|
74
|
+
- Error message
|
|
75
|
+
- HTTP status code
|
|
76
|
+
- Raw API response
|
|
77
|
+
|
|
78
|
+
### Usage Examples
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
import { getAnthropicAdminClient } from './lib/anthropic-admin-client';
|
|
82
|
+
|
|
83
|
+
// List workspaces
|
|
84
|
+
const client = getAnthropicAdminClient();
|
|
85
|
+
const { workspaces } = await client.listWorkspaces();
|
|
86
|
+
|
|
87
|
+
// Get usage for date range
|
|
88
|
+
const usage = await client.getUsage({
|
|
89
|
+
startDate: '2025-01-01',
|
|
90
|
+
endDate: '2025-01-31',
|
|
91
|
+
workspaceId: 'ws-123',
|
|
92
|
+
model: 'claude-3-opus-20240229',
|
|
93
|
+
granularity: 'day'
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
// List API keys
|
|
97
|
+
const { api_keys } = await client.listAPIKeys('ws-123');
|
|
98
|
+
|
|
99
|
+
// Get organization details
|
|
100
|
+
const org = await client.getOrganization();
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## AI Tools Features
|
|
104
|
+
|
|
105
|
+
All tools return structured responses with:
|
|
106
|
+
- `success` boolean
|
|
107
|
+
- `message` string description
|
|
108
|
+
- Relevant data fields
|
|
109
|
+
- Error information on failure
|
|
110
|
+
- Summary statistics where applicable
|
|
111
|
+
|
|
112
|
+
### Example Tool Response
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
{
|
|
116
|
+
success: true,
|
|
117
|
+
usage: [...],
|
|
118
|
+
summary: {
|
|
119
|
+
total_cost_usd: 45.67,
|
|
120
|
+
total_input_tokens: 123456,
|
|
121
|
+
total_output_tokens: 78901,
|
|
122
|
+
record_count: 31,
|
|
123
|
+
date_range: {
|
|
124
|
+
start: '2025-01-01',
|
|
125
|
+
end: '2025-01-31'
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
message: "Retrieved 31 usage record(s) totaling $45.67 USD"
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Authentication
|
|
133
|
+
|
|
134
|
+
This integration uses API key authentication. No OAuth flow required.
|
|
135
|
+
|
|
136
|
+
- Admin keys provide full access to organization management
|
|
137
|
+
- Keys should start with `sk-ant-`
|
|
138
|
+
- Store securely and never commit to version control
|
|
139
|
+
|
|
140
|
+
## Security Considerations
|
|
141
|
+
|
|
142
|
+
- Admin API keys have full organization access
|
|
143
|
+
- Consider using workspace-specific keys with limited permissions for production
|
|
144
|
+
- Keys can be revoked at any time via the Anthropic Console
|
|
145
|
+
- The API client validates key format on initialization
|
|
146
|
+
|
|
147
|
+
## Rate Limits
|
|
148
|
+
|
|
149
|
+
All endpoints are subject to Anthropic's rate limits. See https://docs.anthropic.com/en/api/rate-limits
|
|
150
|
+
|
|
151
|
+
## Documentation
|
|
152
|
+
|
|
153
|
+
Official Anthropic Admin API docs: https://docs.anthropic.com/en/api/admin-api
|
|
154
|
+
|
|
155
|
+
## Directory Structure
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
anthropic/
|
|
159
|
+
├── connector.json # Integration metadata
|
|
160
|
+
├── README.md # This file
|
|
161
|
+
└── files/
|
|
162
|
+
├── _env.example # Environment template
|
|
163
|
+
├── lib/
|
|
164
|
+
│ └── anthropic-admin-client.ts # API client
|
|
165
|
+
└── ai/
|
|
166
|
+
└── tools/
|
|
167
|
+
├── list-workspaces.ts # Workspace listing
|
|
168
|
+
├── get-usage.ts # Usage statistics
|
|
169
|
+
├── list-api-keys.ts # API key management
|
|
170
|
+
├── list-members.ts # Member listing
|
|
171
|
+
└── get-organization.ts # Organization details
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## TypeScript Features
|
|
175
|
+
|
|
176
|
+
- Strict type checking throughout
|
|
177
|
+
- Comprehensive interfaces for all API responses
|
|
178
|
+
- Generic request method with type parameters
|
|
179
|
+
- Proper error type guards
|
|
180
|
+
- TSDoc comments for all public methods
|
|
181
|
+
- Utility types for optional parameters
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "anthropic",
|
|
3
|
+
"displayName": "Anthropic",
|
|
4
|
+
"description": "Integrate with Anthropic Admin API to manage workspaces, monitor usage, and access organization data",
|
|
5
|
+
"auth": {
|
|
6
|
+
"type": "api-key",
|
|
7
|
+
"envVars": {
|
|
8
|
+
"ANTHROPIC_ADMIN_API_KEY": {
|
|
9
|
+
"description": "Admin API key for Anthropic organization management",
|
|
10
|
+
"required": true
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"tools": [
|
|
15
|
+
{
|
|
16
|
+
"name": "list-workspaces",
|
|
17
|
+
"description": "List all workspaces in the organization"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "get-usage",
|
|
21
|
+
"description": "Get API usage statistics for a date range"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "list-api-keys",
|
|
25
|
+
"description": "List API keys for a workspace or organization"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "list-members",
|
|
29
|
+
"description": "List all members in the organization"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "get-organization",
|
|
33
|
+
"description": "Get organization details and settings"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"SETUP_GUIDE": {
|
|
37
|
+
"title": "Anthropic Admin API Setup",
|
|
38
|
+
"steps": [
|
|
39
|
+
{
|
|
40
|
+
"step": 1,
|
|
41
|
+
"title": "Access Anthropic Console",
|
|
42
|
+
"description": "Go to https://console.anthropic.com and sign in to your organization account"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"step": 2,
|
|
46
|
+
"title": "Navigate to Organization Settings",
|
|
47
|
+
"description": "Click on your organization name in the top-right corner, then select 'Organization Settings'"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"step": 3,
|
|
51
|
+
"title": "Go to API Keys",
|
|
52
|
+
"description": "In the left sidebar, click on 'API Keys' under the Organization section"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"step": 4,
|
|
56
|
+
"title": "Create Admin API Key",
|
|
57
|
+
"description": "Click 'Create API Key' and select 'Admin' as the key type. Admin keys have full access to organization management features including workspaces, usage data, members, and API key management"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"step": 5,
|
|
61
|
+
"title": "Name Your Key",
|
|
62
|
+
"description": "Give your key a descriptive name (e.g., 'Veryfront Admin Integration') to identify its purpose"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"step": 6,
|
|
66
|
+
"title": "Copy and Secure Your Key",
|
|
67
|
+
"description": "Copy the API key immediately after creation. This is the only time you'll be able to see the full key. Store it securely - you'll need it for the ANTHROPIC_ADMIN_API_KEY environment variable"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"step": 7,
|
|
71
|
+
"title": "Set Environment Variable",
|
|
72
|
+
"description": "Add the API key to your .env file: ANTHROPIC_ADMIN_API_KEY=sk-ant-admin-***"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"step": 8,
|
|
76
|
+
"title": "Verify Access",
|
|
77
|
+
"description": "Test the integration by calling the get-organization tool to confirm your admin key has the correct permissions"
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
"notes": [
|
|
81
|
+
"Admin API keys have full access to organization management features. Keep them secure and never commit them to version control",
|
|
82
|
+
"For production use, consider using workspace-specific keys with limited permissions where appropriate",
|
|
83
|
+
"You can revoke API keys at any time from the Anthropic Console",
|
|
84
|
+
"Rate limits apply to all API endpoints. See https://docs.anthropic.com/en/api/rate-limits for details"
|
|
85
|
+
],
|
|
86
|
+
"documentation": "https://docs.anthropic.com/en/api/admin-api"
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { tool } from 'veryfront/ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getAnthropicAdminClient } from '../../lib/anthropic-admin-client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Tool for retrieving Anthropic organization details
|
|
7
|
+
*/
|
|
8
|
+
export const getOrganization = tool({
|
|
9
|
+
name: 'get_organization',
|
|
10
|
+
description:
|
|
11
|
+
'Get detailed information about the Anthropic organization including name, settings, default configurations, and billing information.',
|
|
12
|
+
parameters: z.object({}),
|
|
13
|
+
execute: async () => {
|
|
14
|
+
try {
|
|
15
|
+
const client = getAnthropicAdminClient();
|
|
16
|
+
const organization = await client.getOrganization();
|
|
17
|
+
|
|
18
|
+
return {
|
|
19
|
+
success: true,
|
|
20
|
+
organization,
|
|
21
|
+
message: `Retrieved organization details for ${organization.display_name}`,
|
|
22
|
+
};
|
|
23
|
+
} catch (error) {
|
|
24
|
+
return {
|
|
25
|
+
success: false,
|
|
26
|
+
error:
|
|
27
|
+
error instanceof Error
|
|
28
|
+
? error.message
|
|
29
|
+
: 'Failed to retrieve organization details',
|
|
30
|
+
organization: null,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
export default getOrganization;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { tool } from 'veryfront/ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getAnthropicAdminClient } from '../../lib/anthropic-admin-client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Tool for retrieving API usage statistics from Anthropic
|
|
7
|
+
*/
|
|
8
|
+
export const getUsage = tool({
|
|
9
|
+
name: 'get_usage',
|
|
10
|
+
description:
|
|
11
|
+
'Get API usage statistics for a specific date range. Returns token usage and costs broken down by date, workspace, and model. Dates must be in YYYY-MM-DD format.',
|
|
12
|
+
parameters: z.object({
|
|
13
|
+
startDate: z
|
|
14
|
+
.string()
|
|
15
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/, 'Date must be in YYYY-MM-DD format')
|
|
16
|
+
.describe('Start date for usage query (YYYY-MM-DD format, e.g., 2025-01-01)'),
|
|
17
|
+
endDate: z
|
|
18
|
+
.string()
|
|
19
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/, 'Date must be in YYYY-MM-DD format')
|
|
20
|
+
.describe('End date for usage query (YYYY-MM-DD format, e.g., 2025-01-31)'),
|
|
21
|
+
workspaceId: z
|
|
22
|
+
.string()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe(
|
|
25
|
+
'Optional workspace ID to filter usage by specific workspace'
|
|
26
|
+
),
|
|
27
|
+
model: z
|
|
28
|
+
.string()
|
|
29
|
+
.optional()
|
|
30
|
+
.describe(
|
|
31
|
+
'Optional model name to filter usage (e.g., claude-3-opus-20240229, claude-3-sonnet-20240229)'
|
|
32
|
+
),
|
|
33
|
+
granularity: z
|
|
34
|
+
.enum(['day', 'hour'])
|
|
35
|
+
.default('day')
|
|
36
|
+
.describe('Time granularity for usage aggregation (day or hour)'),
|
|
37
|
+
}),
|
|
38
|
+
execute: async ({ startDate, endDate, workspaceId, model, granularity }) => {
|
|
39
|
+
try {
|
|
40
|
+
const client = getAnthropicAdminClient();
|
|
41
|
+
const result = await client.getUsage({
|
|
42
|
+
startDate,
|
|
43
|
+
endDate,
|
|
44
|
+
workspaceId,
|
|
45
|
+
model,
|
|
46
|
+
granularity,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
// Calculate summary statistics
|
|
50
|
+
const totalInputTokens = result.usage.reduce(
|
|
51
|
+
(sum, record) => sum + record.input_tokens,
|
|
52
|
+
0
|
|
53
|
+
);
|
|
54
|
+
const totalOutputTokens = result.usage.reduce(
|
|
55
|
+
(sum, record) => sum + record.output_tokens,
|
|
56
|
+
0
|
|
57
|
+
);
|
|
58
|
+
const totalCacheCreationTokens = result.usage.reduce(
|
|
59
|
+
(sum, record) => sum + (record.cache_creation_tokens || 0),
|
|
60
|
+
0
|
|
61
|
+
);
|
|
62
|
+
const totalCacheReadTokens = result.usage.reduce(
|
|
63
|
+
(sum, record) => sum + (record.cache_read_tokens || 0),
|
|
64
|
+
0
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
return {
|
|
68
|
+
success: true,
|
|
69
|
+
usage: result.usage,
|
|
70
|
+
summary: {
|
|
71
|
+
total_cost_usd: result.total_cost_usd,
|
|
72
|
+
total_input_tokens: totalInputTokens,
|
|
73
|
+
total_output_tokens: totalOutputTokens,
|
|
74
|
+
total_cache_creation_tokens: totalCacheCreationTokens,
|
|
75
|
+
total_cache_read_tokens: totalCacheReadTokens,
|
|
76
|
+
record_count: result.usage.length,
|
|
77
|
+
date_range: {
|
|
78
|
+
start: startDate,
|
|
79
|
+
end: endDate,
|
|
80
|
+
},
|
|
81
|
+
filters: {
|
|
82
|
+
workspace_id: workspaceId,
|
|
83
|
+
model,
|
|
84
|
+
granularity,
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
message: `Retrieved ${result.usage.length} usage record(s) totaling $${result.total_cost_usd.toFixed(4)} USD`,
|
|
88
|
+
};
|
|
89
|
+
} catch (error) {
|
|
90
|
+
return {
|
|
91
|
+
success: false,
|
|
92
|
+
error:
|
|
93
|
+
error instanceof Error ? error.message : 'Failed to retrieve usage data',
|
|
94
|
+
usage: [],
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
export default getUsage;
|