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,331 @@
|
|
|
1
|
+
# Google Sheets Integration for Veryfront
|
|
2
|
+
|
|
3
|
+
A complete Google Sheets integration following the Notion integration pattern. Provides AI tools for reading, writing, and managing Google Sheets spreadsheets.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **OAuth 2.0 Authentication** - Secure Google OAuth flow with token refresh
|
|
8
|
+
- **Read Operations** - List spreadsheets, read metadata, and fetch cell data
|
|
9
|
+
- **Write Operations** - Create spreadsheets, write data, and update ranges
|
|
10
|
+
- **Type-Safe Client** - Fully typed TypeScript API client
|
|
11
|
+
- **AI Tools** - Five AI tools for spreadsheet operations
|
|
12
|
+
|
|
13
|
+
## Directory Structure
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
sheets/
|
|
17
|
+
├── connector.json # Integration metadata and configuration
|
|
18
|
+
└── files/
|
|
19
|
+
├── _env.example # Environment variables template
|
|
20
|
+
├── lib/
|
|
21
|
+
│ ├── oauth.ts # OAuth 2.0 helpers
|
|
22
|
+
│ ├── token-store.ts # Token storage (in-memory for dev)
|
|
23
|
+
│ └── sheets-client.ts # Google Sheets API client
|
|
24
|
+
├── app/api/auth/sheets/
|
|
25
|
+
│ ├── route.ts # OAuth initiation endpoint
|
|
26
|
+
│ └── callback/route.ts # OAuth callback handler
|
|
27
|
+
└── ai/tools/
|
|
28
|
+
├── list-spreadsheets.ts # List recent spreadsheets
|
|
29
|
+
├── get-spreadsheet.ts # Get spreadsheet metadata
|
|
30
|
+
├── read-range.ts # Read cell data from range
|
|
31
|
+
├── write-range.ts # Write data to range
|
|
32
|
+
└── create-spreadsheet.ts # Create new spreadsheet
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Setup Instructions
|
|
36
|
+
|
|
37
|
+
### 1. Create Google OAuth Credentials
|
|
38
|
+
|
|
39
|
+
1. Go to [Google Cloud Console](https://console.cloud.google.com/apis/credentials)
|
|
40
|
+
2. Create a new OAuth 2.0 Client ID (or use existing)
|
|
41
|
+
3. Add authorized redirect URI: `http://localhost:3000/api/auth/sheets/callback`
|
|
42
|
+
4. Copy Client ID and Client Secret
|
|
43
|
+
|
|
44
|
+
### 2. Enable Required APIs
|
|
45
|
+
|
|
46
|
+
Enable these APIs in your Google Cloud project:
|
|
47
|
+
- [Google Sheets API](https://console.cloud.google.com/apis/library/sheets.googleapis.com)
|
|
48
|
+
- [Google Drive API](https://console.cloud.google.com/apis/library/drive.googleapis.com)
|
|
49
|
+
|
|
50
|
+
### 3. Configure Environment Variables
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
GOOGLE_CLIENT_ID=your_client_id_here
|
|
54
|
+
GOOGLE_CLIENT_SECRET=your_client_secret_here
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 4. OAuth Scopes
|
|
58
|
+
|
|
59
|
+
The integration requests these scopes:
|
|
60
|
+
- `https://www.googleapis.com/auth/spreadsheets` - Full access to spreadsheets
|
|
61
|
+
- `https://www.googleapis.com/auth/drive.readonly` - Read-only access to Drive (for listing)
|
|
62
|
+
|
|
63
|
+
## API Client Usage
|
|
64
|
+
|
|
65
|
+
### Create Client
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
import { createSheetsClient } from "./lib/sheets-client.ts";
|
|
69
|
+
|
|
70
|
+
const client = createSheetsClient("user-id");
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### List Spreadsheets
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
const spreadsheets = await client.listSpreadsheets({
|
|
77
|
+
maxResults: 20,
|
|
78
|
+
orderBy: "modifiedTime",
|
|
79
|
+
});
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Get Spreadsheet Metadata
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
const spreadsheet = await client.getSpreadsheet("spreadsheet-id");
|
|
86
|
+
console.log(spreadsheet.properties.title);
|
|
87
|
+
console.log(spreadsheet.sheets); // All sheet tabs
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Read Data
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
// Read specific range
|
|
94
|
+
const data = await client.readRange("spreadsheet-id", "Sheet1!A1:D10");
|
|
95
|
+
console.log(data.values); // 2D array of cell values
|
|
96
|
+
|
|
97
|
+
// Read entire sheet
|
|
98
|
+
const allData = await client.readRange("spreadsheet-id", "Sheet1");
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Write Data
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
await client.writeRange({
|
|
105
|
+
spreadsheetId: "spreadsheet-id",
|
|
106
|
+
range: "Sheet1!A1",
|
|
107
|
+
values: [
|
|
108
|
+
["Name", "Age", "City"],
|
|
109
|
+
["John", 30, "New York"],
|
|
110
|
+
["Jane", 25, "Boston"],
|
|
111
|
+
],
|
|
112
|
+
valueInputOption: "USER_ENTERED", // Parses formulas, numbers, dates
|
|
113
|
+
});
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Create Spreadsheet
|
|
117
|
+
|
|
118
|
+
```typescript
|
|
119
|
+
const newSpreadsheet = await client.createSpreadsheet({
|
|
120
|
+
title: "My New Spreadsheet",
|
|
121
|
+
sheets: [
|
|
122
|
+
{ title: "Data", rowCount: 1000, columnCount: 26 },
|
|
123
|
+
{ title: "Summary", rowCount: 100, columnCount: 10 },
|
|
124
|
+
],
|
|
125
|
+
});
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## AI Tools
|
|
129
|
+
|
|
130
|
+
### 1. list-spreadsheets
|
|
131
|
+
|
|
132
|
+
List recent Google Sheets from Drive.
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
{
|
|
136
|
+
maxResults: 20,
|
|
137
|
+
orderBy: "modifiedTime" // or "createdTime", "name"
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### 2. get-spreadsheet
|
|
142
|
+
|
|
143
|
+
Get spreadsheet metadata including all sheets and properties.
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
{
|
|
147
|
+
spreadsheetId: "abc123..."
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### 3. read-range
|
|
152
|
+
|
|
153
|
+
Read cell data from a range using A1 notation.
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
{
|
|
157
|
+
spreadsheetId: "abc123...",
|
|
158
|
+
range: "Sheet1!A1:D10" // or "A1:B", or just "Sheet1"
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### 4. write-range
|
|
163
|
+
|
|
164
|
+
Write data to a spreadsheet range.
|
|
165
|
+
|
|
166
|
+
```typescript
|
|
167
|
+
{
|
|
168
|
+
spreadsheetId: "abc123...",
|
|
169
|
+
range: "Sheet1!A1",
|
|
170
|
+
values: [["Header1", "Header2"], ["Value1", "Value2"]],
|
|
171
|
+
valueInputOption: "USER_ENTERED" // or "RAW"
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### 5. create-spreadsheet
|
|
176
|
+
|
|
177
|
+
Create a new spreadsheet with optional initial data.
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
{
|
|
181
|
+
title: "My Spreadsheet",
|
|
182
|
+
sheets: [{ title: "Sheet1", rowCount: 1000, columnCount: 26 }],
|
|
183
|
+
initialData: {
|
|
184
|
+
sheetTitle: "Sheet1",
|
|
185
|
+
range: "A1",
|
|
186
|
+
values: [["Name", "Value"], ["Item1", 100]]
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Suggested Prompts
|
|
192
|
+
|
|
193
|
+
The integration includes three AI prompts:
|
|
194
|
+
|
|
195
|
+
1. **Analyze spreadsheet data** - Read and analyze data with insights and statistics
|
|
196
|
+
2. **Create a report spreadsheet** - Generate formatted spreadsheets with calculations
|
|
197
|
+
3. **Update a tracker** - Update tracking spreadsheets with new data
|
|
198
|
+
|
|
199
|
+
## Integration with Other Services
|
|
200
|
+
|
|
201
|
+
This integration works well with:
|
|
202
|
+
- **Gmail** - Export email data to sheets
|
|
203
|
+
- **Calendar** - Create event trackers
|
|
204
|
+
- **Notion** - Sync data between Notion and Sheets
|
|
205
|
+
|
|
206
|
+
## Advanced Features
|
|
207
|
+
|
|
208
|
+
### Token Management
|
|
209
|
+
|
|
210
|
+
The integration includes automatic token refresh:
|
|
211
|
+
- Tokens expire after 1 hour
|
|
212
|
+
- Refresh tokens are used automatically
|
|
213
|
+
- Failed refreshes trigger re-authentication
|
|
214
|
+
|
|
215
|
+
### Batch Operations
|
|
216
|
+
|
|
217
|
+
```typescript
|
|
218
|
+
// Read multiple ranges at once
|
|
219
|
+
const ranges = await client.readRanges("spreadsheet-id", [
|
|
220
|
+
"Sheet1!A1:B10",
|
|
221
|
+
"Sheet2!C1:D10",
|
|
222
|
+
]);
|
|
223
|
+
|
|
224
|
+
// Append data to a sheet
|
|
225
|
+
await client.appendRange("spreadsheet-id", "Sheet1!A1", [
|
|
226
|
+
["New Row 1", "Value 1"],
|
|
227
|
+
["New Row 2", "Value 2"],
|
|
228
|
+
]);
|
|
229
|
+
|
|
230
|
+
// Clear a range
|
|
231
|
+
await client.clearRange("spreadsheet-id", "Sheet1!A1:Z100");
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### Sheet Management
|
|
235
|
+
|
|
236
|
+
```typescript
|
|
237
|
+
// Add a new sheet
|
|
238
|
+
await client.addSheet("spreadsheet-id", "New Sheet", {
|
|
239
|
+
rowCount: 500,
|
|
240
|
+
columnCount: 20,
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
// Delete a sheet
|
|
244
|
+
await client.deleteSheet("spreadsheet-id", sheetId);
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## Production Considerations
|
|
248
|
+
|
|
249
|
+
### Token Storage
|
|
250
|
+
|
|
251
|
+
The default implementation uses in-memory storage. For production:
|
|
252
|
+
|
|
253
|
+
```typescript
|
|
254
|
+
import { createTokenStore } from "./lib/token-store.ts";
|
|
255
|
+
|
|
256
|
+
const tokenStore = createTokenStore({
|
|
257
|
+
get: async (key) => await db.get(key),
|
|
258
|
+
set: async (key, value) => await db.set(key, value),
|
|
259
|
+
delete: async (key) => await db.delete(key),
|
|
260
|
+
});
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### User Authentication
|
|
264
|
+
|
|
265
|
+
Replace `DEFAULT_USER_ID` with actual user session management:
|
|
266
|
+
|
|
267
|
+
```typescript
|
|
268
|
+
// Get user from session
|
|
269
|
+
const userId = await getSessionUserId(request);
|
|
270
|
+
const client = createSheetsClient(userId);
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Error Handling
|
|
274
|
+
|
|
275
|
+
The client throws descriptive errors:
|
|
276
|
+
- `"Google Sheets not connected"` - User needs to authenticate
|
|
277
|
+
- `"Sheets API error: 404"` - Spreadsheet not found
|
|
278
|
+
- `"Token refresh failed"` - Re-authentication required
|
|
279
|
+
|
|
280
|
+
## Type Definitions
|
|
281
|
+
|
|
282
|
+
### Spreadsheet
|
|
283
|
+
|
|
284
|
+
```typescript
|
|
285
|
+
interface Spreadsheet {
|
|
286
|
+
spreadsheetId: string;
|
|
287
|
+
properties: {
|
|
288
|
+
title: string;
|
|
289
|
+
locale: string;
|
|
290
|
+
timeZone: string;
|
|
291
|
+
};
|
|
292
|
+
sheets: Sheet[];
|
|
293
|
+
spreadsheetUrl: string;
|
|
294
|
+
}
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### Sheet
|
|
298
|
+
|
|
299
|
+
```typescript
|
|
300
|
+
interface Sheet {
|
|
301
|
+
properties: {
|
|
302
|
+
sheetId: number;
|
|
303
|
+
title: string;
|
|
304
|
+
index: number;
|
|
305
|
+
sheetType: "GRID" | "OBJECT";
|
|
306
|
+
gridProperties?: {
|
|
307
|
+
rowCount: number;
|
|
308
|
+
columnCount: number;
|
|
309
|
+
};
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### CellData
|
|
315
|
+
|
|
316
|
+
```typescript
|
|
317
|
+
interface CellData {
|
|
318
|
+
values: unknown[][];
|
|
319
|
+
range: string;
|
|
320
|
+
}
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
## API Documentation
|
|
324
|
+
|
|
325
|
+
- [Google Sheets API v4](https://developers.google.com/sheets/api/reference/rest)
|
|
326
|
+
- [Google OAuth 2.0](https://developers.google.com/identity/protocols/oauth2)
|
|
327
|
+
- [A1 Notation](https://developers.google.com/sheets/api/guides/concepts#cell)
|
|
328
|
+
|
|
329
|
+
## License
|
|
330
|
+
|
|
331
|
+
Part of the Veryfront framework.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "sheets",
|
|
3
|
+
"displayName": "Google Sheets",
|
|
4
|
+
"icon": "sheets.svg",
|
|
5
|
+
"description": "Read, write, and manage Google Sheets spreadsheets",
|
|
6
|
+
"auth": {
|
|
7
|
+
"type": "oauth2",
|
|
8
|
+
"provider": "google",
|
|
9
|
+
"authorizationUrl": "https://accounts.google.com/o/oauth2/v2/auth",
|
|
10
|
+
"tokenUrl": "https://oauth2.googleapis.com/token",
|
|
11
|
+
"scopes": [
|
|
12
|
+
"https://www.googleapis.com/auth/spreadsheets",
|
|
13
|
+
"https://www.googleapis.com/auth/drive.readonly"
|
|
14
|
+
],
|
|
15
|
+
"callbackPath": "/api/auth/sheets/callback",
|
|
16
|
+
"requiredApis": [
|
|
17
|
+
{
|
|
18
|
+
"name": "Google Sheets API",
|
|
19
|
+
"enableUrl": "https://console.cloud.google.com/apis/library/sheets.googleapis.com"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "Google Drive API",
|
|
23
|
+
"enableUrl": "https://console.cloud.google.com/apis/library/drive.googleapis.com"
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
"envVars": [
|
|
28
|
+
{
|
|
29
|
+
"name": "GOOGLE_CLIENT_ID",
|
|
30
|
+
"description": "Google OAuth Client ID",
|
|
31
|
+
"required": true,
|
|
32
|
+
"sensitive": false,
|
|
33
|
+
"docsUrl": "https://console.cloud.google.com/apis/credentials"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "GOOGLE_CLIENT_SECRET",
|
|
37
|
+
"description": "Google OAuth Client Secret",
|
|
38
|
+
"required": true,
|
|
39
|
+
"sensitive": true,
|
|
40
|
+
"docsUrl": "https://console.cloud.google.com/apis/credentials"
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"tools": [
|
|
44
|
+
{
|
|
45
|
+
"id": "list-spreadsheets",
|
|
46
|
+
"name": "List Spreadsheets",
|
|
47
|
+
"description": "List recent Google Sheets spreadsheets from Drive",
|
|
48
|
+
"requiresWrite": false
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"id": "get-spreadsheet",
|
|
52
|
+
"name": "Get Spreadsheet",
|
|
53
|
+
"description": "Get spreadsheet metadata including sheet names and properties",
|
|
54
|
+
"requiresWrite": false
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": "read-range",
|
|
58
|
+
"name": "Read Range",
|
|
59
|
+
"description": "Read cell data from a spreadsheet range",
|
|
60
|
+
"requiresWrite": false
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "write-range",
|
|
64
|
+
"name": "Write Range",
|
|
65
|
+
"description": "Write data to a spreadsheet range",
|
|
66
|
+
"requiresWrite": true
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"id": "create-spreadsheet",
|
|
70
|
+
"name": "Create Spreadsheet",
|
|
71
|
+
"description": "Create a new spreadsheet with optional initial data",
|
|
72
|
+
"requiresWrite": true
|
|
73
|
+
}
|
|
74
|
+
],
|
|
75
|
+
"prompts": [
|
|
76
|
+
{
|
|
77
|
+
"id": "analyze-data",
|
|
78
|
+
"title": "Analyze spreadsheet data",
|
|
79
|
+
"prompt": "Read and analyze data from a Google Sheets spreadsheet. Provide insights, trends, and statistics.",
|
|
80
|
+
"category": "productivity",
|
|
81
|
+
"icon": "chart"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"id": "create-report",
|
|
85
|
+
"title": "Create a report spreadsheet",
|
|
86
|
+
"prompt": "Create a new Google Sheets spreadsheet with formatted data, headers, and calculations.",
|
|
87
|
+
"category": "productivity",
|
|
88
|
+
"icon": "plus"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"id": "update-tracker",
|
|
92
|
+
"title": "Update a tracker",
|
|
93
|
+
"prompt": "Update a tracking spreadsheet with new data. Add rows, update values, or calculate totals.",
|
|
94
|
+
"category": "productivity",
|
|
95
|
+
"icon": "edit"
|
|
96
|
+
}
|
|
97
|
+
],
|
|
98
|
+
"suggestedWith": ["gmail", "calendar", "notion"]
|
|
99
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Google Sheets Integration
|
|
2
|
+
# Create OAuth credentials at https://console.cloud.google.com/apis/credentials
|
|
3
|
+
# Make sure to enable:
|
|
4
|
+
# - Google Sheets API: https://console.cloud.google.com/apis/library/sheets.googleapis.com
|
|
5
|
+
# - Google Drive API: https://console.cloud.google.com/apis/library/drive.googleapis.com
|
|
6
|
+
|
|
7
|
+
GOOGLE_CLIENT_ID=your_client_id_here
|
|
8
|
+
GOOGLE_CLIENT_SECRET=your_client_secret_here
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { tool } from "veryfront/ai";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { createSheetsClient } from "../../lib/sheets-client.ts";
|
|
4
|
+
|
|
5
|
+
// Default user ID for demo/dev purposes
|
|
6
|
+
// In production, get from authenticated session
|
|
7
|
+
const DEFAULT_USER_ID = "demo-user";
|
|
8
|
+
|
|
9
|
+
export default tool({
|
|
10
|
+
id: "create-spreadsheet",
|
|
11
|
+
description:
|
|
12
|
+
"Create a new Google Sheets spreadsheet with optional sheet configurations. Returns the new spreadsheet ID and URL.",
|
|
13
|
+
inputSchema: z.object({
|
|
14
|
+
title: z
|
|
15
|
+
.string()
|
|
16
|
+
.describe("Title of the new spreadsheet"),
|
|
17
|
+
sheets: z
|
|
18
|
+
.array(
|
|
19
|
+
z.object({
|
|
20
|
+
title: z.string().describe("Name of the sheet/tab"),
|
|
21
|
+
rowCount: z
|
|
22
|
+
.number()
|
|
23
|
+
.min(1)
|
|
24
|
+
.max(10000)
|
|
25
|
+
.optional()
|
|
26
|
+
.describe("Number of rows (default: 1000)"),
|
|
27
|
+
columnCount: z
|
|
28
|
+
.number()
|
|
29
|
+
.min(1)
|
|
30
|
+
.max(26)
|
|
31
|
+
.optional()
|
|
32
|
+
.describe("Number of columns (default: 26)"),
|
|
33
|
+
}),
|
|
34
|
+
)
|
|
35
|
+
.optional()
|
|
36
|
+
.describe(
|
|
37
|
+
"Optional array of sheet configurations. If not provided, a single default sheet is created.",
|
|
38
|
+
),
|
|
39
|
+
initialData: z
|
|
40
|
+
.object({
|
|
41
|
+
sheetTitle: z.string().describe("Name of the sheet to write data to"),
|
|
42
|
+
range: z
|
|
43
|
+
.string()
|
|
44
|
+
.describe("Range in A1 notation (e.g., 'A1', 'A1:D10')"),
|
|
45
|
+
values: z
|
|
46
|
+
.array(z.array(z.any()))
|
|
47
|
+
.describe(
|
|
48
|
+
"2D array of values to write. Example: [['Name', 'Age'], ['John', 30]]",
|
|
49
|
+
),
|
|
50
|
+
})
|
|
51
|
+
.optional()
|
|
52
|
+
.describe("Optional initial data to populate the spreadsheet"),
|
|
53
|
+
}),
|
|
54
|
+
async execute({ title, sheets, initialData }) {
|
|
55
|
+
const client = createSheetsClient(DEFAULT_USER_ID);
|
|
56
|
+
|
|
57
|
+
// Create the spreadsheet
|
|
58
|
+
const spreadsheet = await client.createSpreadsheet({
|
|
59
|
+
title,
|
|
60
|
+
sheets,
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
// Write initial data if provided
|
|
64
|
+
if (initialData) {
|
|
65
|
+
const range = `${initialData.sheetTitle}!${initialData.range}`;
|
|
66
|
+
await client.writeRange({
|
|
67
|
+
spreadsheetId: spreadsheet.spreadsheetId,
|
|
68
|
+
range,
|
|
69
|
+
values: initialData.values,
|
|
70
|
+
valueInputOption: "USER_ENTERED",
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return {
|
|
75
|
+
id: spreadsheet.spreadsheetId,
|
|
76
|
+
title: spreadsheet.properties.title,
|
|
77
|
+
url: spreadsheet.spreadsheetUrl,
|
|
78
|
+
sheets: spreadsheet.sheets.map((sheet) => ({
|
|
79
|
+
id: sheet.properties.sheetId,
|
|
80
|
+
title: sheet.properties.title,
|
|
81
|
+
index: sheet.properties.index,
|
|
82
|
+
})),
|
|
83
|
+
};
|
|
84
|
+
},
|
|
85
|
+
});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { tool } from "veryfront/ai";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { createSheetsClient } from "../../lib/sheets-client.ts";
|
|
4
|
+
|
|
5
|
+
// Default user ID for demo/dev purposes
|
|
6
|
+
// In production, get from authenticated session
|
|
7
|
+
const DEFAULT_USER_ID = "demo-user";
|
|
8
|
+
|
|
9
|
+
export default tool({
|
|
10
|
+
id: "get-spreadsheet",
|
|
11
|
+
description:
|
|
12
|
+
"Get metadata about a Google Sheets spreadsheet including all sheet names, properties, and structure. Use this to discover available sheets and their dimensions.",
|
|
13
|
+
inputSchema: z.object({
|
|
14
|
+
spreadsheetId: z
|
|
15
|
+
.string()
|
|
16
|
+
.describe("The ID of the spreadsheet (from URL or list-spreadsheets)"),
|
|
17
|
+
}),
|
|
18
|
+
async execute({ spreadsheetId }) {
|
|
19
|
+
const client = createSheetsClient(DEFAULT_USER_ID);
|
|
20
|
+
|
|
21
|
+
const spreadsheet = await client.getSpreadsheet(spreadsheetId);
|
|
22
|
+
|
|
23
|
+
return {
|
|
24
|
+
id: spreadsheet.spreadsheetId,
|
|
25
|
+
title: spreadsheet.properties.title,
|
|
26
|
+
url: spreadsheet.spreadsheetUrl,
|
|
27
|
+
locale: spreadsheet.properties.locale,
|
|
28
|
+
timeZone: spreadsheet.properties.timeZone,
|
|
29
|
+
sheets: spreadsheet.sheets.map((sheet) => ({
|
|
30
|
+
id: sheet.properties.sheetId,
|
|
31
|
+
title: sheet.properties.title,
|
|
32
|
+
index: sheet.properties.index,
|
|
33
|
+
type: sheet.properties.sheetType,
|
|
34
|
+
rowCount: sheet.properties.gridProperties?.rowCount,
|
|
35
|
+
columnCount: sheet.properties.gridProperties?.columnCount,
|
|
36
|
+
})),
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
});
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { tool } from "veryfront/ai";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { createSheetsClient } from "../../lib/sheets-client.ts";
|
|
4
|
+
|
|
5
|
+
// Default user ID for demo/dev purposes
|
|
6
|
+
// In production, get from authenticated session
|
|
7
|
+
const DEFAULT_USER_ID = "demo-user";
|
|
8
|
+
|
|
9
|
+
export default tool({
|
|
10
|
+
id: "list-spreadsheets",
|
|
11
|
+
description:
|
|
12
|
+
"List recent Google Sheets spreadsheets from Google Drive. Returns spreadsheet names, IDs, and metadata.",
|
|
13
|
+
inputSchema: z.object({
|
|
14
|
+
maxResults: z
|
|
15
|
+
.number()
|
|
16
|
+
.min(1)
|
|
17
|
+
.max(100)
|
|
18
|
+
.default(20)
|
|
19
|
+
.describe("Maximum number of spreadsheets to return"),
|
|
20
|
+
orderBy: z
|
|
21
|
+
.enum(["createdTime", "modifiedTime", "name"])
|
|
22
|
+
.default("modifiedTime")
|
|
23
|
+
.describe("Sort order for results"),
|
|
24
|
+
}),
|
|
25
|
+
async execute({ maxResults, orderBy }) {
|
|
26
|
+
const client = createSheetsClient(DEFAULT_USER_ID);
|
|
27
|
+
|
|
28
|
+
const spreadsheets = await client.listSpreadsheets({
|
|
29
|
+
maxResults,
|
|
30
|
+
orderBy,
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
return spreadsheets.map((sheet) => ({
|
|
34
|
+
id: sheet.id,
|
|
35
|
+
name: sheet.name,
|
|
36
|
+
url: sheet.webViewLink,
|
|
37
|
+
createdTime: sheet.createdTime,
|
|
38
|
+
modifiedTime: sheet.modifiedTime,
|
|
39
|
+
}));
|
|
40
|
+
},
|
|
41
|
+
});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { tool } from "veryfront/ai";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { createSheetsClient } from "../../lib/sheets-client.ts";
|
|
4
|
+
|
|
5
|
+
// Default user ID for demo/dev purposes
|
|
6
|
+
// In production, get from authenticated session
|
|
7
|
+
const DEFAULT_USER_ID = "demo-user";
|
|
8
|
+
|
|
9
|
+
export default tool({
|
|
10
|
+
id: "read-range",
|
|
11
|
+
description:
|
|
12
|
+
"Read cell data from a Google Sheets range. Returns a 2D array of values. Use A1 notation (e.g., 'Sheet1!A1:D10', 'A1:B', or just 'Sheet1' for entire sheet).",
|
|
13
|
+
inputSchema: z.object({
|
|
14
|
+
spreadsheetId: z
|
|
15
|
+
.string()
|
|
16
|
+
.describe("The ID of the spreadsheet"),
|
|
17
|
+
range: z
|
|
18
|
+
.string()
|
|
19
|
+
.describe(
|
|
20
|
+
"Range in A1 notation (e.g., 'Sheet1!A1:D10', 'A1:B5', or 'Sheet1' for entire sheet)",
|
|
21
|
+
),
|
|
22
|
+
}),
|
|
23
|
+
async execute({ spreadsheetId, range }) {
|
|
24
|
+
const client = createSheetsClient(DEFAULT_USER_ID);
|
|
25
|
+
|
|
26
|
+
const result = await client.readRange(spreadsheetId, range);
|
|
27
|
+
|
|
28
|
+
return {
|
|
29
|
+
range: result.range,
|
|
30
|
+
values: result.values,
|
|
31
|
+
rowCount: result.values.length,
|
|
32
|
+
columnCount: result.values[0]?.length || 0,
|
|
33
|
+
};
|
|
34
|
+
},
|
|
35
|
+
});
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { tool } from "veryfront/ai";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { createSheetsClient } from "../../lib/sheets-client.ts";
|
|
4
|
+
|
|
5
|
+
// Default user ID for demo/dev purposes
|
|
6
|
+
// In production, get from authenticated session
|
|
7
|
+
const DEFAULT_USER_ID = "demo-user";
|
|
8
|
+
|
|
9
|
+
export default tool({
|
|
10
|
+
id: "write-range",
|
|
11
|
+
description:
|
|
12
|
+
"Write data to a Google Sheets range. Overwrites existing content in the specified range. Provide data as a 2D array where each inner array is a row.",
|
|
13
|
+
inputSchema: z.object({
|
|
14
|
+
spreadsheetId: z
|
|
15
|
+
.string()
|
|
16
|
+
.describe("The ID of the spreadsheet"),
|
|
17
|
+
range: z
|
|
18
|
+
.string()
|
|
19
|
+
.describe(
|
|
20
|
+
"Range in A1 notation where to write data (e.g., 'Sheet1!A1', 'Sheet1!A1:D5')",
|
|
21
|
+
),
|
|
22
|
+
values: z
|
|
23
|
+
.array(z.array(z.any()))
|
|
24
|
+
.describe(
|
|
25
|
+
"2D array of values to write. Each inner array represents a row. Example: [['Name', 'Age'], ['John', 30], ['Jane', 25]]",
|
|
26
|
+
),
|
|
27
|
+
valueInputOption: z
|
|
28
|
+
.enum(["RAW", "USER_ENTERED"])
|
|
29
|
+
.default("USER_ENTERED")
|
|
30
|
+
.describe(
|
|
31
|
+
"RAW: Values are stored as-is. USER_ENTERED: Values are parsed as if typed by user (formulas, numbers, dates)",
|
|
32
|
+
),
|
|
33
|
+
}),
|
|
34
|
+
async execute({ spreadsheetId, range, values, valueInputOption }) {
|
|
35
|
+
const client = createSheetsClient(DEFAULT_USER_ID);
|
|
36
|
+
|
|
37
|
+
const result = await client.writeRange({
|
|
38
|
+
spreadsheetId,
|
|
39
|
+
range,
|
|
40
|
+
values,
|
|
41
|
+
valueInputOption,
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
return {
|
|
45
|
+
updatedRange: result.updatedRange,
|
|
46
|
+
updatedRows: result.updatedRows,
|
|
47
|
+
updatedColumns: result.updatedColumns,
|
|
48
|
+
updatedCells: result.updatedCells,
|
|
49
|
+
};
|
|
50
|
+
},
|
|
51
|
+
});
|