@rnsk/toolkits 0.0.5 → 0.0.7
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/README.md +21 -10
- package/dist/core/index.d.ts +1 -1
- package/dist/core/types.d.ts +43 -1
- package/dist/core/validate.d.ts +1 -1
- package/dist/core/validate.js +14 -2
- package/dist/index.d.ts +9 -1
- package/dist/index.js +17 -1
- package/dist/toolkits/aws/icon.d.ts +5 -0
- package/dist/toolkits/aws/icon.js +41 -0
- package/dist/toolkits/aws/manifest.d.ts +3 -0
- package/dist/toolkits/aws/manifest.js +27 -0
- package/dist/toolkits/aws/tools/client.d.ts +13 -0
- package/dist/toolkits/aws/tools/client.js +25 -0
- package/dist/toolkits/aws/tools/cloudwatch/filter-log-events.d.ts +26 -0
- package/dist/toolkits/aws/tools/cloudwatch/filter-log-events.js +45 -0
- package/dist/toolkits/aws/tools/cloudwatch/get-metric-data.d.ts +35 -0
- package/dist/toolkits/aws/tools/cloudwatch/get-metric-data.js +62 -0
- package/dist/toolkits/aws/tools/cloudwatch/list-alarms.d.ts +29 -0
- package/dist/toolkits/aws/tools/cloudwatch/list-alarms.js +46 -0
- package/dist/toolkits/aws/tools/cloudwatch/list-log-groups.d.ts +25 -0
- package/dist/toolkits/aws/tools/cloudwatch/list-log-groups.js +38 -0
- package/dist/toolkits/aws/tools/ec2/get-instance.d.ts +65 -0
- package/dist/toolkits/aws/tools/ec2/get-instance.js +46 -0
- package/dist/toolkits/aws/tools/ec2/list-instances.d.ts +30 -0
- package/dist/toolkits/aws/tools/ec2/list-instances.js +46 -0
- package/dist/toolkits/aws/tools/ec2/start-instance.d.ts +24 -0
- package/dist/toolkits/aws/tools/ec2/start-instance.js +31 -0
- package/dist/toolkits/aws/tools/ec2/stop-instance.d.ts +24 -0
- package/dist/toolkits/aws/tools/ec2/stop-instance.js +31 -0
- package/dist/toolkits/aws/tools/index.d.ts +273 -0
- package/dist/toolkits/aws/tools/index.js +68 -0
- package/dist/toolkits/docker-hub/icon.d.ts +5 -0
- package/dist/toolkits/docker-hub/icon.js +29 -0
- package/dist/toolkits/docker-hub/manifest.d.ts +3 -0
- package/dist/toolkits/docker-hub/manifest.js +32 -0
- package/dist/toolkits/docker-hub/tools/add-org-member.d.ts +29 -0
- package/dist/toolkits/docker-hub/tools/add-org-member.js +39 -0
- package/dist/toolkits/docker-hub/tools/create-organization.d.ts +6 -0
- package/dist/toolkits/docker-hub/tools/create-organization.js +28 -0
- package/dist/toolkits/docker-hub/tools/create-repository.d.ts +9 -0
- package/dist/toolkits/docker-hub/tools/create-repository.js +37 -0
- package/dist/toolkits/docker-hub/tools/create-webhook.d.ts +48 -0
- package/dist/toolkits/docker-hub/tools/create-webhook.js +51 -0
- package/dist/toolkits/docker-hub/tools/delete-image.d.ts +11 -0
- package/dist/toolkits/docker-hub/tools/delete-image.js +46 -0
- package/dist/toolkits/docker-hub/tools/delete-organization.d.ts +23 -0
- package/dist/toolkits/docker-hub/tools/delete-organization.js +29 -0
- package/dist/toolkits/docker-hub/tools/delete-repository.d.ts +21 -0
- package/dist/toolkits/docker-hub/tools/delete-repository.js +29 -0
- package/dist/toolkits/docker-hub/tools/delete-tag.d.ts +25 -0
- package/dist/toolkits/docker-hub/tools/delete-tag.js +29 -0
- package/dist/toolkits/docker-hub/tools/delete-team.d.ts +24 -0
- package/dist/toolkits/docker-hub/tools/delete-team.js +25 -0
- package/dist/toolkits/docker-hub/tools/delete-webhook.d.ts +25 -0
- package/dist/toolkits/docker-hub/tools/delete-webhook.js +31 -0
- package/dist/toolkits/docker-hub/tools/get-image.d.ts +75 -0
- package/dist/toolkits/docker-hub/tools/get-image.js +51 -0
- package/dist/toolkits/docker-hub/tools/get-repository.d.ts +6 -0
- package/dist/toolkits/docker-hub/tools/get-repository.js +25 -0
- package/dist/toolkits/docker-hub/tools/get-tag.d.ts +7 -0
- package/dist/toolkits/docker-hub/tools/get-tag.js +26 -0
- package/dist/toolkits/docker-hub/tools/get-team.d.ts +6 -0
- package/dist/toolkits/docker-hub/tools/get-team.js +25 -0
- package/dist/toolkits/docker-hub/tools/get-webhook.d.ts +26 -0
- package/dist/toolkits/docker-hub/tools/get-webhook.js +26 -0
- package/dist/toolkits/docker-hub/tools/index.d.ts +437 -0
- package/dist/toolkits/docker-hub/tools/index.js +165 -0
- package/dist/toolkits/docker-hub/tools/list-org-access-tokens.d.ts +7 -0
- package/dist/toolkits/docker-hub/tools/list-org-access-tokens.js +26 -0
- package/dist/toolkits/docker-hub/tools/list-org-members.d.ts +7 -0
- package/dist/toolkits/docker-hub/tools/list-org-members.js +26 -0
- package/dist/toolkits/docker-hub/tools/list-organizations.d.ts +6 -0
- package/dist/toolkits/docker-hub/tools/list-organizations.js +25 -0
- package/dist/toolkits/docker-hub/tools/list-repositories.d.ts +10 -0
- package/dist/toolkits/docker-hub/tools/list-repositories.js +35 -0
- package/dist/toolkits/docker-hub/tools/list-team-members.d.ts +9 -0
- package/dist/toolkits/docker-hub/tools/list-team-members.js +32 -0
- package/dist/toolkits/docker-hub/tools/list-teams.d.ts +7 -0
- package/dist/toolkits/docker-hub/tools/list-teams.js +26 -0
- package/dist/toolkits/docker-hub/tools/list-webhooks.d.ts +8 -0
- package/dist/toolkits/docker-hub/tools/list-webhooks.js +38 -0
- package/dist/toolkits/docker-hub/tools/remove-org-member.d.ts +21 -0
- package/dist/toolkits/docker-hub/tools/remove-org-member.js +25 -0
- package/dist/toolkits/docker-hub/tools/remove-team-member.d.ts +25 -0
- package/dist/toolkits/docker-hub/tools/remove-team-member.js +26 -0
- package/dist/toolkits/docker-hub/tools/utils.d.ts +24 -0
- package/dist/toolkits/docker-hub/tools/utils.js +87 -0
- package/dist/toolkits/gcp/icon.d.ts +5 -0
- package/dist/toolkits/gcp/icon.js +5 -0
- package/dist/toolkits/gcp/manifest.d.ts +3 -0
- package/dist/toolkits/gcp/manifest.js +27 -0
- package/dist/toolkits/gcp/tools/client.d.ts +12 -0
- package/dist/toolkits/gcp/tools/client.js +24 -0
- package/dist/toolkits/gcp/tools/compute/get-instance.d.ts +36 -0
- package/dist/toolkits/gcp/tools/compute/get-instance.js +37 -0
- package/dist/toolkits/gcp/tools/compute/list-instances.d.ts +20 -0
- package/dist/toolkits/gcp/tools/compute/list-instances.js +62 -0
- package/dist/toolkits/gcp/tools/compute/start-instance.d.ts +27 -0
- package/dist/toolkits/gcp/tools/compute/start-instance.js +29 -0
- package/dist/toolkits/gcp/tools/compute/stop-instance.d.ts +27 -0
- package/dist/toolkits/gcp/tools/compute/stop-instance.js +29 -0
- package/dist/toolkits/gcp/tools/index.d.ts +162 -0
- package/dist/toolkits/gcp/tools/index.js +52 -0
- package/dist/toolkits/gcp/tools/monitoring/get-metrics.d.ts +26 -0
- package/dist/toolkits/gcp/tools/monitoring/get-metrics.js +53 -0
- package/dist/toolkits/gcp/tools/monitoring/list-metric-descriptors.d.ts +24 -0
- package/dist/toolkits/gcp/tools/monitoring/list-metric-descriptors.js +40 -0
- package/dist/toolkits/github/tools/Git/create-blob.d.ts +1 -1
- package/dist/toolkits/github/tools/Issues/remove-issue-label.d.ts +1 -1
- package/dist/toolkits/github/tools/Repos/star-repo.d.ts +1 -1
- package/dist/toolkits/github/tools/Users/follow-user.d.ts +1 -1
- package/dist/toolkits/github/tools/index.d.ts +4 -4
- package/dist/toolkits/gmail/manifest.js +82 -2
- package/dist/toolkits/gmail/tools/batch-delete-messages.d.ts +26 -0
- package/dist/toolkits/gmail/tools/batch-delete-messages.js +33 -0
- package/dist/toolkits/gmail/tools/batch-modify-messages.d.ts +34 -0
- package/dist/toolkits/gmail/tools/batch-modify-messages.js +39 -0
- package/dist/toolkits/gmail/tools/create-filter.d.ts +24 -0
- package/dist/toolkits/gmail/tools/create-filter.js +35 -0
- package/dist/toolkits/gmail/tools/create-label.d.ts +27 -0
- package/dist/toolkits/gmail/tools/create-label.js +46 -0
- package/dist/toolkits/gmail/tools/delete-filter.d.ts +23 -0
- package/dist/toolkits/gmail/tools/delete-filter.js +31 -0
- package/dist/toolkits/gmail/tools/delete-label.d.ts +23 -0
- package/dist/toolkits/gmail/tools/delete-label.js +31 -0
- package/dist/toolkits/gmail/tools/delete-message.d.ts +23 -0
- package/dist/toolkits/gmail/tools/delete-message.js +31 -0
- package/dist/toolkits/gmail/tools/delete-thread.d.ts +23 -0
- package/dist/toolkits/gmail/tools/delete-thread.js +31 -0
- package/dist/toolkits/gmail/tools/forward-message.d.ts +37 -0
- package/dist/toolkits/gmail/tools/forward-message.js +112 -0
- package/dist/toolkits/gmail/tools/get-attachment.d.ts +40 -0
- package/dist/toolkits/gmail/tools/get-attachment.js +41 -0
- package/dist/toolkits/gmail/tools/get-auto-forwarding.d.ts +22 -0
- package/dist/toolkits/gmail/tools/get-auto-forwarding.js +30 -0
- package/dist/toolkits/gmail/tools/get-contacts.d.ts +8 -0
- package/dist/toolkits/gmail/tools/get-contacts.js +50 -0
- package/dist/toolkits/gmail/tools/get-filter.d.ts +23 -0
- package/dist/toolkits/gmail/tools/get-filter.js +31 -0
- package/dist/toolkits/gmail/tools/index.d.ts +13 -0
- package/dist/toolkits/gmail/tools/index.js +13 -0
- package/dist/toolkits/gmail/tools/utils.d.ts +23 -0
- package/dist/toolkits/gmail/tools/utils.js +51 -0
- package/dist/toolkits/google-forms/icon.d.ts +5 -0
- package/dist/toolkits/google-forms/icon.js +6 -0
- package/dist/toolkits/google-forms/manifest.d.ts +3 -0
- package/dist/toolkits/google-forms/manifest.js +43 -0
- package/dist/toolkits/google-forms/tools/batch-update-form.d.ts +11 -0
- package/dist/toolkits/google-forms/tools/batch-update-form.js +49 -0
- package/dist/toolkits/google-forms/tools/create-form.d.ts +8 -0
- package/dist/toolkits/google-forms/tools/create-form.js +44 -0
- package/dist/toolkits/google-forms/tools/create-watch.d.ts +8 -0
- package/dist/toolkits/google-forms/tools/create-watch.js +48 -0
- package/dist/toolkits/google-forms/tools/delete-watch.d.ts +21 -0
- package/dist/toolkits/google-forms/tools/delete-watch.js +28 -0
- package/dist/toolkits/google-forms/tools/get-form.d.ts +5 -0
- package/dist/toolkits/google-forms/tools/get-form.js +27 -0
- package/dist/toolkits/google-forms/tools/get-response.d.ts +6 -0
- package/dist/toolkits/google-forms/tools/get-response.js +28 -0
- package/dist/toolkits/google-forms/tools/index.d.ts +130 -0
- package/dist/toolkits/google-forms/tools/index.js +85 -0
- package/dist/toolkits/google-forms/tools/list-responses.d.ts +8 -0
- package/dist/toolkits/google-forms/tools/list-responses.js +44 -0
- package/dist/toolkits/google-forms/tools/list-watches.d.ts +5 -0
- package/dist/toolkits/google-forms/tools/list-watches.js +27 -0
- package/dist/toolkits/google-forms/tools/renew-watch.d.ts +6 -0
- package/dist/toolkits/google-forms/tools/renew-watch.js +28 -0
- package/dist/toolkits/google-forms/tools/set-publish-settings.d.ts +8 -0
- package/dist/toolkits/google-forms/tools/set-publish-settings.js +43 -0
- package/dist/toolkits/google-forms/tools/utils.d.ts +15 -0
- package/dist/toolkits/google-forms/tools/utils.js +33 -0
- package/dist/toolkits/google-meet/icon.d.ts +5 -0
- package/dist/toolkits/google-meet/icon.js +153 -0
- package/dist/toolkits/google-meet/manifest.d.ts +3 -0
- package/dist/toolkits/google-meet/manifest.js +44 -0
- package/dist/toolkits/google-meet/tools/create-meet.d.ts +5 -0
- package/dist/toolkits/google-meet/tools/create-meet.js +33 -0
- package/dist/toolkits/google-meet/tools/end-active-conference.d.ts +26 -0
- package/dist/toolkits/google-meet/tools/end-active-conference.js +37 -0
- package/dist/toolkits/google-meet/tools/get-conference-record-by-name.d.ts +5 -0
- package/dist/toolkits/google-meet/tools/get-conference-record-by-name.js +30 -0
- package/dist/toolkits/google-meet/tools/get-meet.d.ts +5 -0
- package/dist/toolkits/google-meet/tools/get-meet.js +30 -0
- package/dist/toolkits/google-meet/tools/get-participant-session.d.ts +5 -0
- package/dist/toolkits/google-meet/tools/get-participant-session.js +29 -0
- package/dist/toolkits/google-meet/tools/get-recordings-by-conference-record-id.d.ts +7 -0
- package/dist/toolkits/google-meet/tools/get-recordings-by-conference-record-id.js +32 -0
- package/dist/toolkits/google-meet/tools/get-transcript-entry.d.ts +5 -0
- package/dist/toolkits/google-meet/tools/get-transcript-entry.js +29 -0
- package/dist/toolkits/google-meet/tools/get-transcript.d.ts +5 -0
- package/dist/toolkits/google-meet/tools/get-transcript.js +29 -0
- package/dist/toolkits/google-meet/tools/get-transcripts-by-conference-record-id.d.ts +7 -0
- package/dist/toolkits/google-meet/tools/get-transcripts-by-conference-record-id.js +32 -0
- package/dist/toolkits/google-meet/tools/index.d.ts +156 -0
- package/dist/toolkits/google-meet/tools/index.js +125 -0
- package/dist/toolkits/google-meet/tools/list-conference-records.d.ts +7 -0
- package/dist/toolkits/google-meet/tools/list-conference-records.js +31 -0
- package/dist/toolkits/google-meet/tools/list-participant-sessions.d.ts +9 -0
- package/dist/toolkits/google-meet/tools/list-participant-sessions.js +34 -0
- package/dist/toolkits/google-meet/tools/list-participants.d.ts +8 -0
- package/dist/toolkits/google-meet/tools/list-participants.js +35 -0
- package/dist/toolkits/google-meet/tools/list-recordings.d.ts +7 -0
- package/dist/toolkits/google-meet/tools/list-recordings.js +34 -0
- package/dist/toolkits/google-meet/tools/list-transcript-entries.d.ts +8 -0
- package/dist/toolkits/google-meet/tools/list-transcript-entries.js +33 -0
- package/dist/toolkits/google-meet/tools/update-space.d.ts +7 -0
- package/dist/toolkits/google-meet/tools/update-space.js +42 -0
- package/dist/toolkits/google-meet/tools/utils.d.ts +14 -0
- package/dist/toolkits/google-meet/tools/utils.js +39 -0
- package/dist/toolkits/google-search-console/icon.d.ts +5 -0
- package/dist/toolkits/google-search-console/icon.js +6 -0
- package/dist/toolkits/google-search-console/manifest.d.ts +3 -0
- package/dist/toolkits/google-search-console/manifest.js +46 -0
- package/dist/toolkits/google-search-console/tools/add-site.d.ts +29 -0
- package/dist/toolkits/google-search-console/tools/add-site.js +27 -0
- package/dist/toolkits/google-search-console/tools/delete-site.d.ts +26 -0
- package/dist/toolkits/google-search-console/tools/delete-site.js +27 -0
- package/dist/toolkits/google-search-console/tools/get-site.d.ts +5 -0
- package/dist/toolkits/google-search-console/tools/get-site.js +27 -0
- package/dist/toolkits/google-search-console/tools/get-sitemap.d.ts +6 -0
- package/dist/toolkits/google-search-console/tools/get-sitemap.js +28 -0
- package/dist/toolkits/google-search-console/tools/index.d.ts +178 -0
- package/dist/toolkits/google-search-console/tools/index.js +77 -0
- package/dist/toolkits/google-search-console/tools/inspect-url.d.ts +7 -0
- package/dist/toolkits/google-search-console/tools/inspect-url.js +41 -0
- package/dist/toolkits/google-search-console/tools/list-sitemaps.d.ts +6 -0
- package/dist/toolkits/google-search-console/tools/list-sitemaps.js +31 -0
- package/dist/toolkits/google-search-console/tools/list-sites.d.ts +4 -0
- package/dist/toolkits/google-search-console/tools/list-sites.js +26 -0
- package/dist/toolkits/google-search-console/tools/search-analytics-query.d.ts +14 -0
- package/dist/toolkits/google-search-console/tools/search-analytics-query.js +73 -0
- package/dist/toolkits/google-search-console/tools/submit-sitemap.d.ts +33 -0
- package/dist/toolkits/google-search-console/tools/submit-sitemap.js +28 -0
- package/dist/toolkits/google-search-console/tools/utils.d.ts +24 -0
- package/dist/toolkits/google-search-console/tools/utils.js +57 -0
- package/dist/toolkits/google-slides/icon.d.ts +5 -0
- package/dist/toolkits/google-slides/icon.js +6 -0
- package/dist/toolkits/google-slides/manifest.d.ts +3 -0
- package/dist/toolkits/google-slides/manifest.js +46 -0
- package/dist/toolkits/google-slides/tools/create-presentation.d.ts +8 -0
- package/dist/toolkits/google-slides/tools/create-presentation.js +42 -0
- package/dist/toolkits/google-slides/tools/create-slides-markdown.d.ts +56 -0
- package/dist/toolkits/google-slides/tools/create-slides-markdown.js +70 -0
- package/dist/toolkits/google-slides/tools/get-page-thumbnail2.d.ts +8 -0
- package/dist/toolkits/google-slides/tools/get-page-thumbnail2.js +41 -0
- package/dist/toolkits/google-slides/tools/index.d.ts +139 -0
- package/dist/toolkits/google-slides/tools/index.js +69 -0
- package/dist/toolkits/google-slides/tools/markdown.d.ts +6 -0
- package/dist/toolkits/google-slides/tools/markdown.js +222 -0
- package/dist/toolkits/google-slides/tools/presentations-batch-update.d.ts +8 -0
- package/dist/toolkits/google-slides/tools/presentations-batch-update.js +58 -0
- package/dist/toolkits/google-slides/tools/presentations-copy-from-template.d.ts +7 -0
- package/dist/toolkits/google-slides/tools/presentations-copy-from-template.js +42 -0
- package/dist/toolkits/google-slides/tools/presentations-get.d.ts +7 -0
- package/dist/toolkits/google-slides/tools/presentations-get.js +58 -0
- package/dist/toolkits/google-slides/tools/presentations-pages-get-thumbnail.d.ts +8 -0
- package/dist/toolkits/google-slides/tools/presentations-pages-get-thumbnail.js +41 -0
- package/dist/toolkits/google-slides/tools/presentations-pages-get.d.ts +6 -0
- package/dist/toolkits/google-slides/tools/presentations-pages-get.js +28 -0
- package/dist/toolkits/google-slides/tools/utils.d.ts +22 -0
- package/dist/toolkits/google-slides/tools/utils.js +51 -0
- package/dist/toolkits/grafana/icon.d.ts +5 -0
- package/dist/toolkits/grafana/icon.js +6 -0
- package/dist/toolkits/grafana/manifest.d.ts +3 -0
- package/dist/toolkits/grafana/manifest.js +31 -0
- package/dist/toolkits/grafana/tools/create-otlp-v1-logs.d.ts +23 -0
- package/dist/toolkits/grafana/tools/create-otlp-v1-logs.js +41 -0
- package/dist/toolkits/grafana/tools/get-distributor-ha-tracker.d.ts +22 -0
- package/dist/toolkits/grafana/tools/get-distributor-ha-tracker.js +33 -0
- package/dist/toolkits/grafana/tools/get-health.d.ts +4 -0
- package/dist/toolkits/grafana/tools/get-health.js +32 -0
- package/dist/toolkits/grafana/tools/get-index-gateway-ring.d.ts +22 -0
- package/dist/toolkits/grafana/tools/get-index-gateway-ring.js +33 -0
- package/dist/toolkits/grafana/tools/get-overrides-exporter-ring.d.ts +22 -0
- package/dist/toolkits/grafana/tools/get-overrides-exporter-ring.js +33 -0
- package/dist/toolkits/grafana/tools/get-ruler-ring.d.ts +22 -0
- package/dist/toolkits/grafana/tools/get-ruler-ring.js +33 -0
- package/dist/toolkits/grafana/tools/get-status.d.ts +22 -0
- package/dist/toolkits/grafana/tools/get-status.js +35 -0
- package/dist/toolkits/grafana/tools/get-store-gateway-tenants.d.ts +25 -0
- package/dist/toolkits/grafana/tools/get-store-gateway-tenants.js +33 -0
- package/dist/toolkits/grafana/tools/index.d.ts +183 -0
- package/dist/toolkits/grafana/tools/index.js +93 -0
- package/dist/toolkits/grafana/tools/post-acs.d.ts +16 -0
- package/dist/toolkits/grafana/tools/post-acs.js +44 -0
- package/dist/toolkits/grafana/tools/query-public-dashboard.d.ts +29 -0
- package/dist/toolkits/grafana/tools/query-public-dashboard.js +70 -0
- package/dist/toolkits/grafana/tools/retrieve-jwks.d.ts +4 -0
- package/dist/toolkits/grafana/tools/retrieve-jwks.js +32 -0
- package/dist/toolkits/grafana/tools/utils.d.ts +21 -0
- package/dist/toolkits/grafana/tools/utils.js +48 -0
- package/package.json +7 -1
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const batchModifyMessages = tool({
|
|
4
|
+
description: 'Add or remove labels on multiple Gmail messages in one request.',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
gmailToken: z.string().optional().describe('Injected by system; do not provide'),
|
|
7
|
+
messageIds: z.array(z.string()).min(1).max(1000).describe('Message IDs to modify'),
|
|
8
|
+
addLabelIds: z.array(z.string()).optional().describe('Label IDs to add'),
|
|
9
|
+
removeLabelIds: z.array(z.string()).optional().describe('Label IDs to remove'),
|
|
10
|
+
}),
|
|
11
|
+
execute: async ({ gmailToken, messageIds, addLabelIds = [], removeLabelIds = [] }) => {
|
|
12
|
+
try {
|
|
13
|
+
const response = await fetch('https://gmail.googleapis.com/gmail/v1/users/me/messages/batchModify', {
|
|
14
|
+
method: 'POST',
|
|
15
|
+
headers: {
|
|
16
|
+
Authorization: `Bearer ${gmailToken}`,
|
|
17
|
+
'Content-Type': 'application/json',
|
|
18
|
+
},
|
|
19
|
+
body: JSON.stringify({
|
|
20
|
+
ids: messageIds,
|
|
21
|
+
addLabelIds,
|
|
22
|
+
removeLabelIds,
|
|
23
|
+
}),
|
|
24
|
+
});
|
|
25
|
+
if (!response.ok) {
|
|
26
|
+
const error = await response.json();
|
|
27
|
+
return { error: 'Failed to batch modify messages', details: error };
|
|
28
|
+
}
|
|
29
|
+
return { success: true, modifiedCount: messageIds.length, messageIds, addLabelIds, removeLabelIds };
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
return {
|
|
33
|
+
error: 'Error batch modifying messages',
|
|
34
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=batch-modify-messages.js.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare const createFilter: import("ai").Tool<{
|
|
2
|
+
criteria: Record<string, any>;
|
|
3
|
+
action: Record<string, any>;
|
|
4
|
+
gmailToken?: string | undefined;
|
|
5
|
+
}, {
|
|
6
|
+
error: string;
|
|
7
|
+
details: any;
|
|
8
|
+
success?: undefined;
|
|
9
|
+
filter?: undefined;
|
|
10
|
+
message?: undefined;
|
|
11
|
+
} | {
|
|
12
|
+
success: boolean;
|
|
13
|
+
filter: any;
|
|
14
|
+
error?: undefined;
|
|
15
|
+
details?: undefined;
|
|
16
|
+
message?: undefined;
|
|
17
|
+
} | {
|
|
18
|
+
error: string;
|
|
19
|
+
message: string;
|
|
20
|
+
details?: undefined;
|
|
21
|
+
success?: undefined;
|
|
22
|
+
filter?: undefined;
|
|
23
|
+
}>;
|
|
24
|
+
//# sourceMappingURL=create-filter.d.ts.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const createFilter = tool({
|
|
4
|
+
description: 'Create a Gmail filter with criteria and actions such as applying labels, forwarding, archiving, or marking read.',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
gmailToken: z.string().optional().describe('Injected by system; do not provide'),
|
|
7
|
+
criteria: z.record(z.any()).describe('Gmail filter criteria object, e.g. { from, to, subject, query, negatedQuery }'),
|
|
8
|
+
action: z.record(z.any()).describe('Gmail filter action object, e.g. { addLabelIds, removeLabelIds, forward }'),
|
|
9
|
+
}),
|
|
10
|
+
execute: async ({ gmailToken, criteria, action }) => {
|
|
11
|
+
try {
|
|
12
|
+
const response = await fetch('https://gmail.googleapis.com/gmail/v1/users/me/settings/filters', {
|
|
13
|
+
method: 'POST',
|
|
14
|
+
headers: {
|
|
15
|
+
Authorization: `Bearer ${gmailToken}`,
|
|
16
|
+
'Content-Type': 'application/json',
|
|
17
|
+
},
|
|
18
|
+
body: JSON.stringify({ criteria, action }),
|
|
19
|
+
});
|
|
20
|
+
if (!response.ok) {
|
|
21
|
+
const error = await response.json();
|
|
22
|
+
return { error: 'Failed to create filter', details: error };
|
|
23
|
+
}
|
|
24
|
+
const data = await response.json();
|
|
25
|
+
return { success: true, filter: data };
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
return {
|
|
29
|
+
error: 'Error creating filter',
|
|
30
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=create-filter.js.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export declare const createLabel: import("ai").Tool<{
|
|
2
|
+
labelName: string;
|
|
3
|
+
gmailToken?: string | undefined;
|
|
4
|
+
labelListVisibility?: "labelShow" | "labelShowIfUnread" | "labelHide" | undefined;
|
|
5
|
+
messageListVisibility?: "show" | "hide" | undefined;
|
|
6
|
+
textColor?: string | undefined;
|
|
7
|
+
backgroundColor?: string | undefined;
|
|
8
|
+
}, {
|
|
9
|
+
error: string;
|
|
10
|
+
details: any;
|
|
11
|
+
success?: undefined;
|
|
12
|
+
label?: undefined;
|
|
13
|
+
message?: undefined;
|
|
14
|
+
} | {
|
|
15
|
+
success: boolean;
|
|
16
|
+
label: any;
|
|
17
|
+
error?: undefined;
|
|
18
|
+
details?: undefined;
|
|
19
|
+
message?: undefined;
|
|
20
|
+
} | {
|
|
21
|
+
error: string;
|
|
22
|
+
message: string;
|
|
23
|
+
details?: undefined;
|
|
24
|
+
success?: undefined;
|
|
25
|
+
label?: undefined;
|
|
26
|
+
}>;
|
|
27
|
+
//# sourceMappingURL=create-label.d.ts.map
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
const visibilitySchema = z.enum(['labelShow', 'labelShowIfUnread', 'labelHide']).optional();
|
|
4
|
+
const messageVisibilitySchema = z.enum(['show', 'hide']).optional();
|
|
5
|
+
export const createLabel = tool({
|
|
6
|
+
description: 'Create a new user label in Gmail.',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
gmailToken: z.string().optional().describe('Injected by system; do not provide'),
|
|
9
|
+
labelName: z.string().min(1).describe('Display name for the new label'),
|
|
10
|
+
labelListVisibility: visibilitySchema.describe('How the label appears in the label list'),
|
|
11
|
+
messageListVisibility: messageVisibilitySchema.describe('How messages with this label appear in message lists'),
|
|
12
|
+
textColor: z.string().optional().describe('Optional label text color hex code'),
|
|
13
|
+
backgroundColor: z.string().optional().describe('Optional label background color hex code'),
|
|
14
|
+
}),
|
|
15
|
+
execute: async ({ gmailToken, labelName, labelListVisibility, messageListVisibility, textColor, backgroundColor }) => {
|
|
16
|
+
try {
|
|
17
|
+
const color = textColor || backgroundColor ? { textColor, backgroundColor } : undefined;
|
|
18
|
+
const response = await fetch('https://gmail.googleapis.com/gmail/v1/users/me/labels', {
|
|
19
|
+
method: 'POST',
|
|
20
|
+
headers: {
|
|
21
|
+
Authorization: `Bearer ${gmailToken}`,
|
|
22
|
+
'Content-Type': 'application/json',
|
|
23
|
+
},
|
|
24
|
+
body: JSON.stringify({
|
|
25
|
+
name: labelName,
|
|
26
|
+
labelListVisibility,
|
|
27
|
+
messageListVisibility,
|
|
28
|
+
color,
|
|
29
|
+
}),
|
|
30
|
+
});
|
|
31
|
+
if (!response.ok) {
|
|
32
|
+
const error = await response.json();
|
|
33
|
+
return { error: 'Failed to create label', details: error };
|
|
34
|
+
}
|
|
35
|
+
const data = await response.json();
|
|
36
|
+
return { success: true, label: data };
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
return {
|
|
40
|
+
error: 'Error creating label',
|
|
41
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=create-label.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const deleteFilter: import("ai").Tool<{
|
|
2
|
+
filterId: string;
|
|
3
|
+
gmailToken?: string | undefined;
|
|
4
|
+
}, {
|
|
5
|
+
error: string;
|
|
6
|
+
details: any;
|
|
7
|
+
success?: undefined;
|
|
8
|
+
filterId?: undefined;
|
|
9
|
+
message?: undefined;
|
|
10
|
+
} | {
|
|
11
|
+
success: boolean;
|
|
12
|
+
filterId: string;
|
|
13
|
+
error?: undefined;
|
|
14
|
+
details?: undefined;
|
|
15
|
+
message?: undefined;
|
|
16
|
+
} | {
|
|
17
|
+
error: string;
|
|
18
|
+
message: string;
|
|
19
|
+
details?: undefined;
|
|
20
|
+
success?: undefined;
|
|
21
|
+
filterId?: undefined;
|
|
22
|
+
}>;
|
|
23
|
+
//# sourceMappingURL=delete-filter.d.ts.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const deleteFilter = tool({
|
|
4
|
+
description: 'Permanently delete a Gmail filter by ID.',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
gmailToken: z.string().optional().describe('Injected by system; do not provide'),
|
|
7
|
+
filterId: z.string().describe('The filter ID to delete'),
|
|
8
|
+
}),
|
|
9
|
+
execute: async ({ gmailToken, filterId }) => {
|
|
10
|
+
try {
|
|
11
|
+
const response = await fetch(`https://gmail.googleapis.com/gmail/v1/users/me/settings/filters/${filterId}`, {
|
|
12
|
+
method: 'DELETE',
|
|
13
|
+
headers: {
|
|
14
|
+
Authorization: `Bearer ${gmailToken}`,
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
if (!response.ok) {
|
|
18
|
+
const error = await response.json();
|
|
19
|
+
return { error: 'Failed to delete filter', details: error };
|
|
20
|
+
}
|
|
21
|
+
return { success: true, filterId };
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
return {
|
|
25
|
+
error: 'Error deleting filter',
|
|
26
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=delete-filter.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const deleteLabel: import("ai").Tool<{
|
|
2
|
+
labelId: string;
|
|
3
|
+
gmailToken?: string | undefined;
|
|
4
|
+
}, {
|
|
5
|
+
error: string;
|
|
6
|
+
details: any;
|
|
7
|
+
success?: undefined;
|
|
8
|
+
labelId?: undefined;
|
|
9
|
+
message?: undefined;
|
|
10
|
+
} | {
|
|
11
|
+
success: boolean;
|
|
12
|
+
labelId: string;
|
|
13
|
+
error?: undefined;
|
|
14
|
+
details?: undefined;
|
|
15
|
+
message?: undefined;
|
|
16
|
+
} | {
|
|
17
|
+
error: string;
|
|
18
|
+
message: string;
|
|
19
|
+
details?: undefined;
|
|
20
|
+
success?: undefined;
|
|
21
|
+
labelId?: undefined;
|
|
22
|
+
}>;
|
|
23
|
+
//# sourceMappingURL=delete-label.d.ts.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const deleteLabel = tool({
|
|
4
|
+
description: 'Permanently delete a user-created Gmail label from the account.',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
gmailToken: z.string().optional().describe('Injected by system; do not provide'),
|
|
7
|
+
labelId: z.string().describe('The label ID to delete, e.g. Label_123'),
|
|
8
|
+
}),
|
|
9
|
+
execute: async ({ gmailToken, labelId }) => {
|
|
10
|
+
try {
|
|
11
|
+
const response = await fetch(`https://gmail.googleapis.com/gmail/v1/users/me/labels/${labelId}`, {
|
|
12
|
+
method: 'DELETE',
|
|
13
|
+
headers: {
|
|
14
|
+
Authorization: `Bearer ${gmailToken}`,
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
if (!response.ok) {
|
|
18
|
+
const error = await response.json();
|
|
19
|
+
return { error: 'Failed to delete label', details: error };
|
|
20
|
+
}
|
|
21
|
+
return { success: true, labelId };
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
return {
|
|
25
|
+
error: 'Error deleting label',
|
|
26
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=delete-label.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const deleteMessage: import("ai").Tool<{
|
|
2
|
+
id: string;
|
|
3
|
+
gmailToken?: string | undefined;
|
|
4
|
+
}, {
|
|
5
|
+
error: string;
|
|
6
|
+
details: any;
|
|
7
|
+
success?: undefined;
|
|
8
|
+
messageId?: undefined;
|
|
9
|
+
message?: undefined;
|
|
10
|
+
} | {
|
|
11
|
+
success: boolean;
|
|
12
|
+
messageId: string;
|
|
13
|
+
error?: undefined;
|
|
14
|
+
details?: undefined;
|
|
15
|
+
message?: undefined;
|
|
16
|
+
} | {
|
|
17
|
+
error: string;
|
|
18
|
+
message: string;
|
|
19
|
+
details?: undefined;
|
|
20
|
+
success?: undefined;
|
|
21
|
+
messageId?: undefined;
|
|
22
|
+
}>;
|
|
23
|
+
//# sourceMappingURL=delete-message.d.ts.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const deleteMessage = tool({
|
|
4
|
+
description: 'Permanently delete a Gmail message by ID. This bypasses Trash and cannot be undone.',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
gmailToken: z.string().optional().describe('Injected by system; do not provide'),
|
|
7
|
+
id: z.string().describe('The message ID to permanently delete'),
|
|
8
|
+
}),
|
|
9
|
+
execute: async ({ gmailToken, id }) => {
|
|
10
|
+
try {
|
|
11
|
+
const response = await fetch(`https://gmail.googleapis.com/gmail/v1/users/me/messages/${id}`, {
|
|
12
|
+
method: 'DELETE',
|
|
13
|
+
headers: {
|
|
14
|
+
Authorization: `Bearer ${gmailToken}`,
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
if (!response.ok) {
|
|
18
|
+
const error = await response.json();
|
|
19
|
+
return { error: 'Failed to delete message', details: error };
|
|
20
|
+
}
|
|
21
|
+
return { success: true, messageId: id };
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
return {
|
|
25
|
+
error: 'Error deleting message',
|
|
26
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=delete-message.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const deleteThread: import("ai").Tool<{
|
|
2
|
+
id: string;
|
|
3
|
+
gmailToken?: string | undefined;
|
|
4
|
+
}, {
|
|
5
|
+
error: string;
|
|
6
|
+
details: any;
|
|
7
|
+
success?: undefined;
|
|
8
|
+
threadId?: undefined;
|
|
9
|
+
message?: undefined;
|
|
10
|
+
} | {
|
|
11
|
+
success: boolean;
|
|
12
|
+
threadId: string;
|
|
13
|
+
error?: undefined;
|
|
14
|
+
details?: undefined;
|
|
15
|
+
message?: undefined;
|
|
16
|
+
} | {
|
|
17
|
+
error: string;
|
|
18
|
+
message: string;
|
|
19
|
+
details?: undefined;
|
|
20
|
+
success?: undefined;
|
|
21
|
+
threadId?: undefined;
|
|
22
|
+
}>;
|
|
23
|
+
//# sourceMappingURL=delete-thread.d.ts.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const deleteThread = tool({
|
|
4
|
+
description: 'Permanently delete a Gmail thread and all of its messages. This cannot be undone.',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
gmailToken: z.string().optional().describe('Injected by system; do not provide'),
|
|
7
|
+
id: z.string().describe('The thread ID to permanently delete'),
|
|
8
|
+
}),
|
|
9
|
+
execute: async ({ gmailToken, id }) => {
|
|
10
|
+
try {
|
|
11
|
+
const response = await fetch(`https://gmail.googleapis.com/gmail/v1/users/me/threads/${id}`, {
|
|
12
|
+
method: 'DELETE',
|
|
13
|
+
headers: {
|
|
14
|
+
Authorization: `Bearer ${gmailToken}`,
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
if (!response.ok) {
|
|
18
|
+
const error = await response.json();
|
|
19
|
+
return { error: 'Failed to delete thread', details: error };
|
|
20
|
+
}
|
|
21
|
+
return { success: true, threadId: id };
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
return {
|
|
25
|
+
error: 'Error deleting thread',
|
|
26
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=delete-thread.js.map
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export declare const forwardMessage: import("ai").Tool<{
|
|
2
|
+
messageId: string;
|
|
3
|
+
recipients: string;
|
|
4
|
+
includeAttachments: boolean;
|
|
5
|
+
gmailToken?: string | undefined;
|
|
6
|
+
cc?: string | undefined;
|
|
7
|
+
bcc?: string | undefined;
|
|
8
|
+
additionalText?: string | undefined;
|
|
9
|
+
}, {
|
|
10
|
+
error: string;
|
|
11
|
+
details: any;
|
|
12
|
+
success?: undefined;
|
|
13
|
+
messageId?: undefined;
|
|
14
|
+
threadId?: undefined;
|
|
15
|
+
forwardedMessageId?: undefined;
|
|
16
|
+
attachmentCount?: undefined;
|
|
17
|
+
message?: undefined;
|
|
18
|
+
} | {
|
|
19
|
+
success: boolean;
|
|
20
|
+
messageId: any;
|
|
21
|
+
threadId: any;
|
|
22
|
+
forwardedMessageId: string;
|
|
23
|
+
attachmentCount: number;
|
|
24
|
+
error?: undefined;
|
|
25
|
+
details?: undefined;
|
|
26
|
+
message?: undefined;
|
|
27
|
+
} | {
|
|
28
|
+
error: string;
|
|
29
|
+
message: string;
|
|
30
|
+
details?: undefined;
|
|
31
|
+
success?: undefined;
|
|
32
|
+
messageId?: undefined;
|
|
33
|
+
threadId?: undefined;
|
|
34
|
+
forwardedMessageId?: undefined;
|
|
35
|
+
attachmentCount?: undefined;
|
|
36
|
+
}>;
|
|
37
|
+
//# sourceMappingURL=forward-message.d.ts.map
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { collectAttachments, encodeMultipartMessage, encodeRFC822Message, extractBodyFromPayload, getHeaderValue, } from './utils.js';
|
|
4
|
+
export const forwardMessage = tool({
|
|
5
|
+
description: 'Forward an existing Gmail message to one or more recipients, optionally preserving attachments.',
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
gmailToken: z.string().optional().describe('Injected by system; do not provide'),
|
|
8
|
+
messageId: z.string().describe('The message ID to forward'),
|
|
9
|
+
recipients: z.string().describe('Recipient email address(es), comma-separated'),
|
|
10
|
+
cc: z.string().optional().describe('Optional CC recipient email address(es), comma-separated'),
|
|
11
|
+
bcc: z.string().optional().describe('Optional BCC recipient email address(es), comma-separated'),
|
|
12
|
+
additionalText: z.string().optional().describe('Optional text to add above the forwarded message'),
|
|
13
|
+
includeAttachments: z.boolean().optional().default(true).describe('Whether to copy original attachments into the forwarded message'),
|
|
14
|
+
}),
|
|
15
|
+
execute: async ({ gmailToken, messageId, recipients, cc, bcc, additionalText, includeAttachments }) => {
|
|
16
|
+
try {
|
|
17
|
+
const messageResponse = await fetch(`https://gmail.googleapis.com/gmail/v1/users/me/messages/${messageId}?format=full`, {
|
|
18
|
+
headers: {
|
|
19
|
+
Authorization: `Bearer ${gmailToken}`,
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
if (!messageResponse.ok) {
|
|
23
|
+
const error = await messageResponse.json();
|
|
24
|
+
return { error: 'Failed to fetch message to forward', details: error };
|
|
25
|
+
}
|
|
26
|
+
const originalMessage = await messageResponse.json();
|
|
27
|
+
const headers = originalMessage.payload?.headers || [];
|
|
28
|
+
const originalSubject = getHeaderValue(headers, 'subject') || '(no subject)';
|
|
29
|
+
const originalFrom = getHeaderValue(headers, 'from') || '';
|
|
30
|
+
const originalTo = getHeaderValue(headers, 'to') || '';
|
|
31
|
+
const originalDate = getHeaderValue(headers, 'date') || '';
|
|
32
|
+
const originalBody = extractBodyFromPayload(originalMessage.payload);
|
|
33
|
+
const subject = originalSubject.toLowerCase().startsWith('fwd:')
|
|
34
|
+
? originalSubject
|
|
35
|
+
: `Fwd: ${originalSubject}`;
|
|
36
|
+
const body = [
|
|
37
|
+
additionalText || '',
|
|
38
|
+
additionalText ? '' : null,
|
|
39
|
+
'---------- Forwarded message ---------',
|
|
40
|
+
originalFrom ? `From: ${originalFrom}` : null,
|
|
41
|
+
originalDate ? `Date: ${originalDate}` : null,
|
|
42
|
+
originalSubject ? `Subject: ${originalSubject}` : null,
|
|
43
|
+
originalTo ? `To: ${originalTo}` : null,
|
|
44
|
+
'',
|
|
45
|
+
originalBody,
|
|
46
|
+
].filter((line) => line !== null).join('\n');
|
|
47
|
+
const attachments = [];
|
|
48
|
+
if (includeAttachments) {
|
|
49
|
+
for (const attachment of collectAttachments(originalMessage.payload)) {
|
|
50
|
+
const attachmentResponse = await fetch(`https://gmail.googleapis.com/gmail/v1/users/me/messages/${messageId}/attachments/${attachment.attachmentId}`, {
|
|
51
|
+
headers: {
|
|
52
|
+
Authorization: `Bearer ${gmailToken}`,
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
if (!attachmentResponse.ok) {
|
|
56
|
+
const error = await attachmentResponse.json();
|
|
57
|
+
return { error: `Failed to fetch attachment ${attachment.filename}`, details: error };
|
|
58
|
+
}
|
|
59
|
+
const attachmentData = await attachmentResponse.json();
|
|
60
|
+
attachments.push({
|
|
61
|
+
filename: attachment.filename,
|
|
62
|
+
mimeType: attachment.mimeType,
|
|
63
|
+
data: attachmentData.data,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const raw = attachments.length > 0
|
|
68
|
+
? encodeMultipartMessage({
|
|
69
|
+
to: recipients,
|
|
70
|
+
subject,
|
|
71
|
+
body,
|
|
72
|
+
cc,
|
|
73
|
+
bcc,
|
|
74
|
+
attachments,
|
|
75
|
+
})
|
|
76
|
+
: encodeRFC822Message({
|
|
77
|
+
to: recipients,
|
|
78
|
+
subject,
|
|
79
|
+
body,
|
|
80
|
+
cc,
|
|
81
|
+
bcc,
|
|
82
|
+
});
|
|
83
|
+
const sendResponse = await fetch('https://gmail.googleapis.com/gmail/v1/users/me/messages/send', {
|
|
84
|
+
method: 'POST',
|
|
85
|
+
headers: {
|
|
86
|
+
Authorization: `Bearer ${gmailToken}`,
|
|
87
|
+
'Content-Type': 'application/json',
|
|
88
|
+
},
|
|
89
|
+
body: JSON.stringify({ raw }),
|
|
90
|
+
});
|
|
91
|
+
if (!sendResponse.ok) {
|
|
92
|
+
const error = await sendResponse.json();
|
|
93
|
+
return { error: 'Failed to forward message', details: error };
|
|
94
|
+
}
|
|
95
|
+
const data = await sendResponse.json();
|
|
96
|
+
return {
|
|
97
|
+
success: true,
|
|
98
|
+
messageId: data.id,
|
|
99
|
+
threadId: data.threadId,
|
|
100
|
+
forwardedMessageId: messageId,
|
|
101
|
+
attachmentCount: attachments.length,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
return {
|
|
106
|
+
error: 'Error forwarding message',
|
|
107
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
//# sourceMappingURL=forward-message.js.map
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export declare const getAttachment: import("ai").Tool<{
|
|
2
|
+
messageId: string;
|
|
3
|
+
attachmentId: string;
|
|
4
|
+
gmailToken?: string | undefined;
|
|
5
|
+
fileName?: string | undefined;
|
|
6
|
+
}, {
|
|
7
|
+
error: string;
|
|
8
|
+
details: any;
|
|
9
|
+
success?: undefined;
|
|
10
|
+
messageId?: undefined;
|
|
11
|
+
attachmentId?: undefined;
|
|
12
|
+
fileName?: undefined;
|
|
13
|
+
size?: undefined;
|
|
14
|
+
data?: undefined;
|
|
15
|
+
encoding?: undefined;
|
|
16
|
+
message?: undefined;
|
|
17
|
+
} | {
|
|
18
|
+
success: boolean;
|
|
19
|
+
messageId: string;
|
|
20
|
+
attachmentId: string;
|
|
21
|
+
fileName: string | undefined;
|
|
22
|
+
size: any;
|
|
23
|
+
data: any;
|
|
24
|
+
encoding: string;
|
|
25
|
+
error?: undefined;
|
|
26
|
+
details?: undefined;
|
|
27
|
+
message?: undefined;
|
|
28
|
+
} | {
|
|
29
|
+
error: string;
|
|
30
|
+
message: string;
|
|
31
|
+
details?: undefined;
|
|
32
|
+
success?: undefined;
|
|
33
|
+
messageId?: undefined;
|
|
34
|
+
attachmentId?: undefined;
|
|
35
|
+
fileName?: undefined;
|
|
36
|
+
size?: undefined;
|
|
37
|
+
data?: undefined;
|
|
38
|
+
encoding?: undefined;
|
|
39
|
+
}>;
|
|
40
|
+
//# sourceMappingURL=get-attachment.d.ts.map
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const getAttachment = tool({
|
|
4
|
+
description: 'Retrieve a Gmail message attachment by message ID and attachment ID.',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
gmailToken: z.string().optional().describe('Injected by system; do not provide'),
|
|
7
|
+
messageId: z.string().describe('The message ID containing the attachment'),
|
|
8
|
+
attachmentId: z.string().describe('The attachment ID from the message payload part'),
|
|
9
|
+
fileName: z.string().optional().describe('Optional filename to include in the response'),
|
|
10
|
+
}),
|
|
11
|
+
execute: async ({ gmailToken, messageId, attachmentId, fileName }) => {
|
|
12
|
+
try {
|
|
13
|
+
const response = await fetch(`https://gmail.googleapis.com/gmail/v1/users/me/messages/${messageId}/attachments/${attachmentId}`, {
|
|
14
|
+
headers: {
|
|
15
|
+
Authorization: `Bearer ${gmailToken}`,
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
if (!response.ok) {
|
|
19
|
+
const error = await response.json();
|
|
20
|
+
return { error: 'Failed to get attachment', details: error };
|
|
21
|
+
}
|
|
22
|
+
const data = await response.json();
|
|
23
|
+
return {
|
|
24
|
+
success: true,
|
|
25
|
+
messageId,
|
|
26
|
+
attachmentId,
|
|
27
|
+
fileName,
|
|
28
|
+
size: data.size,
|
|
29
|
+
data: data.data,
|
|
30
|
+
encoding: 'base64url',
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
return {
|
|
35
|
+
error: 'Error getting attachment',
|
|
36
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=get-attachment.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare const getAutoForwarding: import("ai").Tool<{
|
|
2
|
+
gmailToken?: string | undefined;
|
|
3
|
+
}, {
|
|
4
|
+
error: string;
|
|
5
|
+
details: any;
|
|
6
|
+
success?: undefined;
|
|
7
|
+
autoForwarding?: undefined;
|
|
8
|
+
message?: undefined;
|
|
9
|
+
} | {
|
|
10
|
+
success: boolean;
|
|
11
|
+
autoForwarding: any;
|
|
12
|
+
error?: undefined;
|
|
13
|
+
details?: undefined;
|
|
14
|
+
message?: undefined;
|
|
15
|
+
} | {
|
|
16
|
+
error: string;
|
|
17
|
+
message: string;
|
|
18
|
+
details?: undefined;
|
|
19
|
+
success?: undefined;
|
|
20
|
+
autoForwarding?: undefined;
|
|
21
|
+
}>;
|
|
22
|
+
//# sourceMappingURL=get-auto-forwarding.d.ts.map
|