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.
- 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 -215
- 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 -4
- package/dist/index.js.map +2 -2
- package/dist/integrations/_base/files/SETUP.md +667 -98
- package/dist/integrations/_base/files/app/api/integrations/status/route.ts +3 -3
- package/dist/integrations/_base/files/app/api/integrations/token-storage/route.ts +26 -0
- package/dist/integrations/_base/files/app/components/ServiceConnections.tsx +2 -1
- package/dist/integrations/_base/files/app/setup/page.tsx +869 -55
- 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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/calendar/files/lib/token-store.ts +0 -113
- package/dist/integrations/github/files/lib/token-store.ts +0 -113
- package/dist/integrations/gmail/files/lib/oauth.ts +0 -145
- package/dist/integrations/gmail/files/lib/token-store.ts +0 -113
- package/dist/integrations/slack/files/lib/oauth.ts +0 -145
- package/dist/integrations/slack/files/lib/token-store.ts +0 -113
- /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,314 @@
|
|
|
1
|
+
import { getAccessToken } from "./token-store.ts";
|
|
2
|
+
|
|
3
|
+
const GRAPH_API_URL = "https://graph.microsoft.com/v1.0";
|
|
4
|
+
|
|
5
|
+
// OneDrive API Types (Microsoft Graph API)
|
|
6
|
+
export interface DriveItem {
|
|
7
|
+
id: string;
|
|
8
|
+
name: string;
|
|
9
|
+
size?: number;
|
|
10
|
+
createdDateTime: string;
|
|
11
|
+
lastModifiedDateTime: string;
|
|
12
|
+
webUrl: string;
|
|
13
|
+
parentReference?: {
|
|
14
|
+
driveId: string;
|
|
15
|
+
id: string;
|
|
16
|
+
path: string;
|
|
17
|
+
};
|
|
18
|
+
file?: {
|
|
19
|
+
mimeType: string;
|
|
20
|
+
hashes?: {
|
|
21
|
+
quickXorHash?: string;
|
|
22
|
+
sha1Hash?: string;
|
|
23
|
+
sha256Hash?: string;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
folder?: {
|
|
27
|
+
childCount: number;
|
|
28
|
+
};
|
|
29
|
+
"@microsoft.graph.downloadUrl"?: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface FileMetadata {
|
|
33
|
+
id: string;
|
|
34
|
+
name: string;
|
|
35
|
+
size: number;
|
|
36
|
+
mimeType: string;
|
|
37
|
+
createdDateTime: string;
|
|
38
|
+
lastModifiedDateTime: string;
|
|
39
|
+
webUrl: string;
|
|
40
|
+
downloadUrl?: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface FolderMetadata {
|
|
44
|
+
id: string;
|
|
45
|
+
name: string;
|
|
46
|
+
childCount: number;
|
|
47
|
+
createdDateTime: string;
|
|
48
|
+
lastModifiedDateTime: string;
|
|
49
|
+
webUrl: string;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface ListFilesResult {
|
|
53
|
+
value: DriveItem[];
|
|
54
|
+
"@odata.nextLink"?: string;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface SearchResult {
|
|
58
|
+
value: DriveItem[];
|
|
59
|
+
"@odata.nextLink"?: string;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Helper function for OneDrive API calls
|
|
63
|
+
async function onedriveFetch<T>(
|
|
64
|
+
endpoint: string,
|
|
65
|
+
options: RequestInit = {},
|
|
66
|
+
): Promise<T> {
|
|
67
|
+
const token = await getAccessToken();
|
|
68
|
+
if (!token) {
|
|
69
|
+
throw new Error("Not authenticated with OneDrive. Please connect your account.");
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const url = endpoint.startsWith("http") ? endpoint : `${GRAPH_API_URL}${endpoint}`;
|
|
73
|
+
|
|
74
|
+
const response = await fetch(url, {
|
|
75
|
+
...options,
|
|
76
|
+
headers: {
|
|
77
|
+
Authorization: `Bearer ${token}`,
|
|
78
|
+
"Content-Type": "application/json",
|
|
79
|
+
...options.headers,
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
if (!response.ok) {
|
|
84
|
+
const error = await response.json().catch(() => ({}));
|
|
85
|
+
throw new Error(
|
|
86
|
+
`OneDrive API error: ${response.status} ${error.error?.message || response.statusText}`,
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return response.json();
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// File and Folder Operations
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* List files in a folder
|
|
97
|
+
* @param folderId Folder ID or path (use "root" for root folder)
|
|
98
|
+
*/
|
|
99
|
+
export function listFiles(
|
|
100
|
+
folderId: string = "root",
|
|
101
|
+
options?: {
|
|
102
|
+
orderBy?: string;
|
|
103
|
+
top?: number;
|
|
104
|
+
select?: string[];
|
|
105
|
+
},
|
|
106
|
+
): Promise<ListFilesResult> {
|
|
107
|
+
const params = new URLSearchParams();
|
|
108
|
+
|
|
109
|
+
if (options?.orderBy) {
|
|
110
|
+
params.set("$orderby", options.orderBy);
|
|
111
|
+
}
|
|
112
|
+
if (options?.top) {
|
|
113
|
+
params.set("$top", options.top.toString());
|
|
114
|
+
}
|
|
115
|
+
if (options?.select) {
|
|
116
|
+
params.set("$select", options.select.join(","));
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const queryString = params.toString();
|
|
120
|
+
const endpoint = `/me/drive/items/${folderId}/children${queryString ? `?${queryString}` : ""}`;
|
|
121
|
+
|
|
122
|
+
return onedriveFetch<ListFilesResult>(endpoint);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Get file or folder metadata
|
|
127
|
+
*/
|
|
128
|
+
export function getFile(itemId: string): Promise<DriveItem> {
|
|
129
|
+
return onedriveFetch<DriveItem>(`/me/drive/items/${itemId}`);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Download file content
|
|
134
|
+
*/
|
|
135
|
+
export async function downloadFile(itemId: string): Promise<{
|
|
136
|
+
content: string;
|
|
137
|
+
metadata: FileMetadata;
|
|
138
|
+
}> {
|
|
139
|
+
const item = await getFile(itemId);
|
|
140
|
+
|
|
141
|
+
if (!item.file) {
|
|
142
|
+
throw new Error("Item is not a file");
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const downloadUrl = item["@microsoft.graph.downloadUrl"];
|
|
146
|
+
if (!downloadUrl) {
|
|
147
|
+
throw new Error("Download URL not available");
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const response = await fetch(downloadUrl);
|
|
151
|
+
if (!response.ok) {
|
|
152
|
+
throw new Error(`Failed to download file: ${response.statusText}`);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const content = await response.text();
|
|
156
|
+
|
|
157
|
+
const metadata: FileMetadata = {
|
|
158
|
+
id: item.id,
|
|
159
|
+
name: item.name,
|
|
160
|
+
size: item.size || 0,
|
|
161
|
+
mimeType: item.file.mimeType,
|
|
162
|
+
createdDateTime: item.createdDateTime,
|
|
163
|
+
lastModifiedDateTime: item.lastModifiedDateTime,
|
|
164
|
+
webUrl: item.webUrl,
|
|
165
|
+
downloadUrl,
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
return { content, metadata };
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Upload file
|
|
173
|
+
* For files smaller than 4MB, use simple upload
|
|
174
|
+
*/
|
|
175
|
+
export async function uploadFile(
|
|
176
|
+
fileName: string,
|
|
177
|
+
content: string,
|
|
178
|
+
parentFolderId: string = "root",
|
|
179
|
+
): Promise<DriveItem> {
|
|
180
|
+
const token = await getAccessToken();
|
|
181
|
+
if (!token) {
|
|
182
|
+
throw new Error("Not authenticated with OneDrive. Please connect your account.");
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const endpoint = `${GRAPH_API_URL}/me/drive/items/${parentFolderId}:/${fileName}:/content`;
|
|
186
|
+
|
|
187
|
+
const response = await fetch(endpoint, {
|
|
188
|
+
method: "PUT",
|
|
189
|
+
headers: {
|
|
190
|
+
Authorization: `Bearer ${token}`,
|
|
191
|
+
"Content-Type": "application/octet-stream",
|
|
192
|
+
},
|
|
193
|
+
body: content,
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
if (!response.ok) {
|
|
197
|
+
const error = await response.json().catch(() => ({}));
|
|
198
|
+
throw new Error(
|
|
199
|
+
`Failed to upload file: ${error.error?.message || response.statusText}`,
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return response.json();
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Create folder
|
|
208
|
+
*/
|
|
209
|
+
export function createFolder(
|
|
210
|
+
folderName: string,
|
|
211
|
+
parentFolderId: string = "root",
|
|
212
|
+
): Promise<DriveItem> {
|
|
213
|
+
return onedriveFetch<DriveItem>(`/me/drive/items/${parentFolderId}/children`, {
|
|
214
|
+
method: "POST",
|
|
215
|
+
body: JSON.stringify({
|
|
216
|
+
name: folderName,
|
|
217
|
+
folder: {},
|
|
218
|
+
"@microsoft.graph.conflictBehavior": "rename",
|
|
219
|
+
}),
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Search files
|
|
225
|
+
*/
|
|
226
|
+
export function searchFiles(
|
|
227
|
+
query: string,
|
|
228
|
+
options?: {
|
|
229
|
+
top?: number;
|
|
230
|
+
},
|
|
231
|
+
): Promise<SearchResult> {
|
|
232
|
+
const params = new URLSearchParams({
|
|
233
|
+
q: query,
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
if (options?.top) {
|
|
237
|
+
params.set("$top", options.top.toString());
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
return onedriveFetch<SearchResult>(
|
|
241
|
+
`/me/drive/root/search(q='${encodeURIComponent(query)}')?${params.toString()}`,
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Delete file or folder
|
|
247
|
+
*/
|
|
248
|
+
export async function deleteFile(itemId: string): Promise<void> {
|
|
249
|
+
const token = await getAccessToken();
|
|
250
|
+
if (!token) {
|
|
251
|
+
throw new Error("Not authenticated with OneDrive. Please connect your account.");
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
const response = await fetch(`${GRAPH_API_URL}/me/drive/items/${itemId}`, {
|
|
255
|
+
method: "DELETE",
|
|
256
|
+
headers: {
|
|
257
|
+
Authorization: `Bearer ${token}`,
|
|
258
|
+
},
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
if (!response.ok) {
|
|
262
|
+
const error = await response.json().catch(() => ({}));
|
|
263
|
+
throw new Error(
|
|
264
|
+
`Failed to delete item: ${error.error?.message || response.statusText}`,
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Move file or folder
|
|
271
|
+
*/
|
|
272
|
+
export function moveFile(
|
|
273
|
+
itemId: string,
|
|
274
|
+
newParentId: string,
|
|
275
|
+
newName?: string,
|
|
276
|
+
): Promise<DriveItem> {
|
|
277
|
+
const body: Record<string, unknown> = {
|
|
278
|
+
parentReference: {
|
|
279
|
+
id: newParentId,
|
|
280
|
+
},
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
if (newName) {
|
|
284
|
+
body.name = newName;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
return onedriveFetch<DriveItem>(`/me/drive/items/${itemId}`, {
|
|
288
|
+
method: "PATCH",
|
|
289
|
+
body: JSON.stringify(body),
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
// Helper Functions
|
|
294
|
+
|
|
295
|
+
export function formatFileSize(bytes: number): string {
|
|
296
|
+
const units = ["B", "KB", "MB", "GB", "TB"];
|
|
297
|
+
let size = bytes;
|
|
298
|
+
let unitIndex = 0;
|
|
299
|
+
|
|
300
|
+
while (size >= 1024 && unitIndex < units.length - 1) {
|
|
301
|
+
size /= 1024;
|
|
302
|
+
unitIndex++;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
return `${size.toFixed(2)} ${units[unitIndex]}`;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
export function isFile(item: DriveItem): boolean {
|
|
309
|
+
return item.file !== undefined;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
export function isFolder(item: DriveItem): boolean {
|
|
313
|
+
return item.folder !== undefined;
|
|
314
|
+
}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
# Microsoft Outlook Integration for Veryfront
|
|
2
|
+
|
|
3
|
+
Complete Microsoft Outlook integration following the veryfront integration pattern.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- OAuth 2.0 authentication with Microsoft Graph API
|
|
8
|
+
- Read, send, and manage Outlook emails
|
|
9
|
+
- Search emails across all folders
|
|
10
|
+
- List and organize mail folders
|
|
11
|
+
- Full TypeScript type safety
|
|
12
|
+
|
|
13
|
+
## Setup Instructions
|
|
14
|
+
|
|
15
|
+
### 1. Create Azure App Registration
|
|
16
|
+
|
|
17
|
+
1. Go to [Azure Portal - App Registrations](https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade)
|
|
18
|
+
2. Click "New registration"
|
|
19
|
+
3. Enter application details:
|
|
20
|
+
- Name: Your app name (e.g., "Veryfront Outlook Integration")
|
|
21
|
+
- Supported account types: "Accounts in any organizational directory and personal Microsoft accounts"
|
|
22
|
+
- Redirect URI: `http://localhost:3000/api/auth/outlook/callback` (adjust for your domain)
|
|
23
|
+
4. Click "Register"
|
|
24
|
+
|
|
25
|
+
### 2. Configure App Credentials
|
|
26
|
+
|
|
27
|
+
1. Note the "Application (client) ID" - this is your `MICROSOFT_CLIENT_ID`
|
|
28
|
+
2. Go to "Certificates & secrets"
|
|
29
|
+
3. Click "New client secret"
|
|
30
|
+
4. Add a description and expiration period
|
|
31
|
+
5. Copy the secret value - this is your `MICROSOFT_CLIENT_SECRET`
|
|
32
|
+
|
|
33
|
+
### 3. Set API Permissions
|
|
34
|
+
|
|
35
|
+
1. Go to "API permissions"
|
|
36
|
+
2. Click "Add a permission" → "Microsoft Graph" → "Delegated permissions"
|
|
37
|
+
3. Add these permissions:
|
|
38
|
+
- `Mail.Read` - Read user mail
|
|
39
|
+
- `Mail.Send` - Send mail as a user
|
|
40
|
+
- `Mail.ReadWrite` - Read and write access to user mail
|
|
41
|
+
- `offline_access` - Maintain access to data you have given it access to
|
|
42
|
+
4. Click "Grant admin consent" (if available)
|
|
43
|
+
|
|
44
|
+
### 4. Add Environment Variables
|
|
45
|
+
|
|
46
|
+
Add to your `.env` file:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
MICROSOFT_CLIENT_ID=your_client_id_here
|
|
50
|
+
MICROSOFT_CLIENT_SECRET=your_client_secret_here
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## File Structure
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
outlook/
|
|
57
|
+
├── connector.json # Integration configuration
|
|
58
|
+
├── files/
|
|
59
|
+
│ ├── _env.example # Example environment variables
|
|
60
|
+
│ ├── lib/
|
|
61
|
+
│ │ ├── oauth.ts # OAuth flow utilities
|
|
62
|
+
│ │ ├── outlook-client.ts # Microsoft Graph API client
|
|
63
|
+
│ │ └── token-store.ts # Token storage (in-memory)
|
|
64
|
+
│ ├── app/api/auth/outlook/
|
|
65
|
+
│ │ ├── route.ts # OAuth initiation
|
|
66
|
+
│ │ └── callback/route.ts # OAuth callback handler
|
|
67
|
+
│ └── ai/tools/
|
|
68
|
+
│ ├── list-emails.ts # List recent emails
|
|
69
|
+
│ ├── get-email.ts # Get email details
|
|
70
|
+
│ ├── send-email.ts # Send email
|
|
71
|
+
│ ├── search-emails.ts # Search emails
|
|
72
|
+
│ └── list-folders.ts # List mail folders
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## API Client (`outlook-client.ts`)
|
|
76
|
+
|
|
77
|
+
### Functions
|
|
78
|
+
|
|
79
|
+
#### `listEmails(options?)`
|
|
80
|
+
List emails from inbox or specific folder.
|
|
81
|
+
- `folderId?: string` - Folder ID (default: inbox)
|
|
82
|
+
- `top?: number` - Max results
|
|
83
|
+
- `skip?: number` - Pagination offset
|
|
84
|
+
- `filter?: string` - OData filter
|
|
85
|
+
- `orderBy?: string` - Sort order
|
|
86
|
+
|
|
87
|
+
#### `getEmail(messageId: string)`
|
|
88
|
+
Get detailed email information including full body.
|
|
89
|
+
|
|
90
|
+
#### `sendEmail(options: SendEmailOptions)`
|
|
91
|
+
Send a new email message.
|
|
92
|
+
- `to: string[]` - Recipients
|
|
93
|
+
- `subject: string` - Subject line
|
|
94
|
+
- `body: string` - Email body
|
|
95
|
+
- `cc?: string[]` - CC recipients
|
|
96
|
+
- `bcc?: string[]` - BCC recipients
|
|
97
|
+
- `importance?: 'low' | 'normal' | 'high'`
|
|
98
|
+
- `bodyType?: 'text' | 'html'`
|
|
99
|
+
|
|
100
|
+
#### `searchEmails(options)`
|
|
101
|
+
Search emails by query string.
|
|
102
|
+
- `query: string` - Search query
|
|
103
|
+
- `top?: number` - Max results
|
|
104
|
+
- `skip?: number` - Pagination offset
|
|
105
|
+
|
|
106
|
+
#### `listFolders()`
|
|
107
|
+
List all mail folders in the mailbox.
|
|
108
|
+
|
|
109
|
+
#### Helper Functions
|
|
110
|
+
- `markAsRead(messageId: string)`
|
|
111
|
+
- `markAsUnread(messageId: string)`
|
|
112
|
+
- `deleteEmail(messageId: string)`
|
|
113
|
+
- `moveEmail(messageId: string, destinationFolderId: string)`
|
|
114
|
+
- `formatEmail(message: OutlookMessage)` - Format for display
|
|
115
|
+
|
|
116
|
+
## AI Tools
|
|
117
|
+
|
|
118
|
+
### 1. `list-emails`
|
|
119
|
+
List recent emails from inbox or folder.
|
|
120
|
+
|
|
121
|
+
**Parameters:**
|
|
122
|
+
- `folderId?: string` - Folder ID
|
|
123
|
+
- `limit?: number` (1-50, default: 10) - Max emails
|
|
124
|
+
- `unreadOnly?: boolean` - Only unread emails
|
|
125
|
+
- `orderBy?: string` - Sort order
|
|
126
|
+
|
|
127
|
+
**Example:**
|
|
128
|
+
```typescript
|
|
129
|
+
{
|
|
130
|
+
folderId: "inbox",
|
|
131
|
+
limit: 20,
|
|
132
|
+
unreadOnly: true,
|
|
133
|
+
orderBy: "receivedDateTime desc"
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### 2. `get-email`
|
|
138
|
+
Get detailed email information.
|
|
139
|
+
|
|
140
|
+
**Parameters:**
|
|
141
|
+
- `messageId: string` - Email ID
|
|
142
|
+
- `includeBody?: boolean` (default: true) - Include full body
|
|
143
|
+
|
|
144
|
+
**Example:**
|
|
145
|
+
```typescript
|
|
146
|
+
{
|
|
147
|
+
messageId: "AAMkAGI2TG93AAA=",
|
|
148
|
+
includeBody: true
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### 3. `send-email`
|
|
153
|
+
Send a new email message.
|
|
154
|
+
|
|
155
|
+
**Parameters:**
|
|
156
|
+
- `to: string[]` - Recipient emails
|
|
157
|
+
- `subject: string` - Subject line
|
|
158
|
+
- `body: string` - Email body
|
|
159
|
+
- `cc?: string[]` - CC emails
|
|
160
|
+
- `bcc?: string[]` - BCC emails
|
|
161
|
+
- `importance?: 'low' | 'normal' | 'high'`
|
|
162
|
+
- `bodyType?: 'text' | 'html'`
|
|
163
|
+
|
|
164
|
+
**Example:**
|
|
165
|
+
```typescript
|
|
166
|
+
{
|
|
167
|
+
to: ["user@example.com"],
|
|
168
|
+
subject: "Meeting Follow-up",
|
|
169
|
+
body: "Thank you for attending...",
|
|
170
|
+
cc: ["manager@example.com"],
|
|
171
|
+
importance: "high",
|
|
172
|
+
bodyType: "text"
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### 4. `search-emails`
|
|
177
|
+
Search emails across all fields.
|
|
178
|
+
|
|
179
|
+
**Parameters:**
|
|
180
|
+
- `query: string` - Search query
|
|
181
|
+
- `limit?: number` (1-50, default: 10) - Max results
|
|
182
|
+
|
|
183
|
+
**Example:**
|
|
184
|
+
```typescript
|
|
185
|
+
{
|
|
186
|
+
query: "quarterly report",
|
|
187
|
+
limit: 15
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### 5. `list-folders`
|
|
192
|
+
List all mail folders.
|
|
193
|
+
|
|
194
|
+
**Parameters:** None
|
|
195
|
+
|
|
196
|
+
**Returns:** Array of folders with counts and metadata.
|
|
197
|
+
|
|
198
|
+
## OAuth Configuration
|
|
199
|
+
|
|
200
|
+
### Authorization URL
|
|
201
|
+
```
|
|
202
|
+
https://login.microsoftonline.com/common/oauth2/v2.0/authorize
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Token URL
|
|
206
|
+
```
|
|
207
|
+
https://login.microsoftonline.com/common/oauth2/v2.0/token
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Scopes
|
|
211
|
+
- `Mail.Read` - Read user mail
|
|
212
|
+
- `Mail.Send` - Send mail
|
|
213
|
+
- `Mail.ReadWrite` - Full mail access
|
|
214
|
+
- `offline_access` - Refresh token
|
|
215
|
+
|
|
216
|
+
### Token Authentication
|
|
217
|
+
Uses `body` method (credentials sent in request body as form parameters).
|
|
218
|
+
|
|
219
|
+
## Usage Flow
|
|
220
|
+
|
|
221
|
+
1. User navigates to `/api/auth/outlook`
|
|
222
|
+
2. Redirected to Microsoft login
|
|
223
|
+
3. User authorizes application
|
|
224
|
+
4. Microsoft redirects to `/api/auth/outlook/callback` with code
|
|
225
|
+
5. Code exchanged for access token
|
|
226
|
+
6. Token stored (in-memory by default)
|
|
227
|
+
7. AI tools can now access Outlook data
|
|
228
|
+
|
|
229
|
+
## Production Considerations
|
|
230
|
+
|
|
231
|
+
### Token Storage
|
|
232
|
+
The default `token-store.ts` uses in-memory storage. For production:
|
|
233
|
+
|
|
234
|
+
1. Replace with database-backed storage
|
|
235
|
+
2. Implement token encryption
|
|
236
|
+
3. Support multiple users with session management
|
|
237
|
+
4. Implement token refresh logic
|
|
238
|
+
|
|
239
|
+
### Token Refresh
|
|
240
|
+
Access tokens expire after ~1 hour. Implement refresh logic:
|
|
241
|
+
|
|
242
|
+
```typescript
|
|
243
|
+
import { refreshAccessToken } from './oauth'
|
|
244
|
+
import { getRefreshToken, setTokens } from './token-store'
|
|
245
|
+
|
|
246
|
+
async function ensureValidToken() {
|
|
247
|
+
const refreshToken = getRefreshToken()
|
|
248
|
+
if (refreshToken) {
|
|
249
|
+
const tokens = await refreshAccessToken(refreshToken)
|
|
250
|
+
setTokens({
|
|
251
|
+
accessToken: tokens.access_token,
|
|
252
|
+
refreshToken: tokens.refresh_token,
|
|
253
|
+
expiresAt: Date.now() + tokens.expires_in * 1000,
|
|
254
|
+
})
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### Security
|
|
260
|
+
- Store secrets in environment variables
|
|
261
|
+
- Use HTTPS in production
|
|
262
|
+
- Implement CSRF protection (state parameter)
|
|
263
|
+
- Validate redirect URIs
|
|
264
|
+
- Rate limit API calls
|
|
265
|
+
|
|
266
|
+
## Microsoft Graph API Resources
|
|
267
|
+
|
|
268
|
+
- [Microsoft Graph Documentation](https://docs.microsoft.com/graph/)
|
|
269
|
+
- [Mail API Reference](https://docs.microsoft.com/graph/api/resources/mail-api-overview)
|
|
270
|
+
- [Authentication Guide](https://docs.microsoft.com/graph/auth/)
|
|
271
|
+
- [OAuth 2.0 Flow](https://docs.microsoft.com/azure/active-directory/develop/v2-oauth2-auth-code-flow)
|
|
272
|
+
|
|
273
|
+
## Troubleshooting
|
|
274
|
+
|
|
275
|
+
### Common Issues
|
|
276
|
+
|
|
277
|
+
**"Not authenticated" error**
|
|
278
|
+
- Verify OAuth flow completed successfully
|
|
279
|
+
- Check token storage is working
|
|
280
|
+
- Ensure tokens haven't expired
|
|
281
|
+
|
|
282
|
+
**"Insufficient permissions" error**
|
|
283
|
+
- Verify all required scopes are requested
|
|
284
|
+
- Check admin consent was granted
|
|
285
|
+
- Ensure API permissions are enabled in Azure
|
|
286
|
+
|
|
287
|
+
**"Invalid client" error**
|
|
288
|
+
- Verify `MICROSOFT_CLIENT_ID` is correct
|
|
289
|
+
- Check `MICROSOFT_CLIENT_SECRET` is valid
|
|
290
|
+
- Ensure redirect URI matches Azure configuration
|
|
291
|
+
|
|
292
|
+
## Testing
|
|
293
|
+
|
|
294
|
+
To test the integration:
|
|
295
|
+
|
|
296
|
+
1. Start your development server
|
|
297
|
+
2. Navigate to `/api/auth/outlook`
|
|
298
|
+
3. Complete Microsoft OAuth flow
|
|
299
|
+
4. Test AI tools via chat interface
|
|
300
|
+
|
|
301
|
+
Example prompts:
|
|
302
|
+
- "List my recent emails"
|
|
303
|
+
- "Search for emails about project alpha"
|
|
304
|
+
- "Send an email to john@example.com"
|
|
305
|
+
|
|
306
|
+
## License
|
|
307
|
+
|
|
308
|
+
Part of the Veryfront framework.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "outlook",
|
|
3
|
+
"displayName": "Microsoft Outlook",
|
|
4
|
+
"icon": "outlook.svg",
|
|
5
|
+
"description": "Read, send, and manage Outlook emails",
|
|
6
|
+
"auth": {
|
|
7
|
+
"type": "oauth2",
|
|
8
|
+
"provider": "microsoft",
|
|
9
|
+
"authorizationUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
|
|
10
|
+
"tokenUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/token",
|
|
11
|
+
"scopes": [
|
|
12
|
+
"Mail.Read",
|
|
13
|
+
"Mail.Send",
|
|
14
|
+
"Mail.ReadWrite",
|
|
15
|
+
"offline_access"
|
|
16
|
+
],
|
|
17
|
+
"callbackPath": "/api/auth/outlook/callback",
|
|
18
|
+
"tokenAuthMethod": "body",
|
|
19
|
+
"requiredApis": [
|
|
20
|
+
{
|
|
21
|
+
"name": "Microsoft Graph API",
|
|
22
|
+
"enableUrl": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade"
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
"envVars": [
|
|
27
|
+
{
|
|
28
|
+
"name": "MICROSOFT_CLIENT_ID",
|
|
29
|
+
"description": "Microsoft Azure App Client ID (Application ID)",
|
|
30
|
+
"required": true,
|
|
31
|
+
"sensitive": false,
|
|
32
|
+
"docsUrl": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "MICROSOFT_CLIENT_SECRET",
|
|
36
|
+
"description": "Microsoft Azure App Client Secret",
|
|
37
|
+
"required": true,
|
|
38
|
+
"sensitive": true,
|
|
39
|
+
"docsUrl": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade"
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"tools": [
|
|
43
|
+
{
|
|
44
|
+
"id": "list-emails",
|
|
45
|
+
"name": "List Emails",
|
|
46
|
+
"description": "List recent emails from inbox or a specific folder",
|
|
47
|
+
"requiresWrite": false
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"id": "get-email",
|
|
51
|
+
"name": "Get Email",
|
|
52
|
+
"description": "Get detailed information about a specific email",
|
|
53
|
+
"requiresWrite": false
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"id": "send-email",
|
|
57
|
+
"name": "Send Email",
|
|
58
|
+
"description": "Send a new email message",
|
|
59
|
+
"requiresWrite": true
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"id": "search-emails",
|
|
63
|
+
"name": "Search Emails",
|
|
64
|
+
"description": "Search emails by query, subject, sender, or date",
|
|
65
|
+
"requiresWrite": false
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"id": "list-folders",
|
|
69
|
+
"name": "List Folders",
|
|
70
|
+
"description": "List all mail folders in the mailbox",
|
|
71
|
+
"requiresWrite": false
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
"prompts": [
|
|
75
|
+
{
|
|
76
|
+
"id": "check-emails",
|
|
77
|
+
"title": "Check my emails",
|
|
78
|
+
"prompt": "List my recent unread emails and summarize the most important ones.",
|
|
79
|
+
"category": "productivity",
|
|
80
|
+
"icon": "mail"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"id": "search-emails",
|
|
84
|
+
"title": "Search my emails",
|
|
85
|
+
"prompt": "Search my emails for specific topics, senders, or date ranges.",
|
|
86
|
+
"category": "productivity",
|
|
87
|
+
"icon": "search"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "draft-email",
|
|
91
|
+
"title": "Draft an email",
|
|
92
|
+
"prompt": "Help me draft a professional email with proper formatting and tone.",
|
|
93
|
+
"category": "productivity",
|
|
94
|
+
"icon": "compose"
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
"suggestedWith": ["teams", "calendar", "gmail"]
|
|
98
|
+
}
|