integrate-sdk 0.9.31-dev.0 → 0.9.43-dev.0
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/adapters/auto-routes.js +216 -0
- package/dist/adapters/base-handler.js +216 -0
- package/dist/adapters/index.js +618 -87
- package/dist/adapters/nextjs.js +216 -0
- package/dist/adapters/solid-start.js +618 -87
- package/dist/adapters/svelte-kit.js +618 -87
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3483 -445
- package/dist/oauth.js +216 -0
- package/dist/server.js +3542 -457
- package/dist/src/client.d.ts +55 -1
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/index.d.ts +118 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/integrations/alpaca-client.d.ts +64 -0
- package/dist/src/integrations/alpaca-client.d.ts.map +1 -0
- package/dist/src/integrations/alpaca.d.ts +22 -0
- package/dist/src/integrations/alpaca.d.ts.map +1 -0
- package/dist/src/integrations/astronomer-client.d.ts +80 -0
- package/dist/src/integrations/astronomer-client.d.ts.map +1 -0
- package/dist/src/integrations/astronomer.d.ts +14 -0
- package/dist/src/integrations/astronomer.d.ts.map +1 -0
- package/dist/src/integrations/attio-client.d.ts +17 -0
- package/dist/src/integrations/attio-client.d.ts.map +1 -0
- package/dist/src/integrations/attio.d.ts +15 -0
- package/dist/src/integrations/attio.d.ts.map +1 -0
- package/dist/src/integrations/auth0-client.d.ts +55 -0
- package/dist/src/integrations/auth0-client.d.ts.map +1 -0
- package/dist/src/integrations/auth0.d.ts +22 -0
- package/dist/src/integrations/auth0.d.ts.map +1 -0
- package/dist/src/integrations/aws-client.d.ts +26 -0
- package/dist/src/integrations/aws-client.d.ts.map +1 -0
- package/dist/src/integrations/aws.d.ts +28 -0
- package/dist/src/integrations/aws.d.ts.map +1 -0
- package/dist/src/integrations/betterstack-client.d.ts +62 -0
- package/dist/src/integrations/betterstack-client.d.ts.map +1 -0
- package/dist/src/integrations/betterstack.d.ts +14 -0
- package/dist/src/integrations/betterstack.d.ts.map +1 -0
- package/dist/src/integrations/binance-client.d.ts +54 -0
- package/dist/src/integrations/binance-client.d.ts.map +1 -0
- package/dist/src/integrations/binance.d.ts +22 -0
- package/dist/src/integrations/binance.d.ts.map +1 -0
- package/dist/src/integrations/canva-client.d.ts +70 -0
- package/dist/src/integrations/canva-client.d.ts.map +1 -0
- package/dist/src/integrations/canva.d.ts +20 -0
- package/dist/src/integrations/canva.d.ts.map +1 -0
- package/dist/src/integrations/clerk-client.d.ts +66 -0
- package/dist/src/integrations/clerk-client.d.ts.map +1 -0
- package/dist/src/integrations/clerk.d.ts +14 -0
- package/dist/src/integrations/clerk.d.ts.map +1 -0
- package/dist/src/integrations/clickup-client.d.ts +5 -0
- package/dist/src/integrations/clickup-client.d.ts.map +1 -0
- package/dist/src/integrations/clickup.d.ts +13 -0
- package/dist/src/integrations/clickup.d.ts.map +1 -0
- package/dist/src/integrations/cloudflare-client.d.ts +69 -0
- package/dist/src/integrations/cloudflare-client.d.ts.map +1 -0
- package/dist/src/integrations/cloudflare.d.ts +23 -0
- package/dist/src/integrations/cloudflare.d.ts.map +1 -0
- package/dist/src/integrations/convex-client.d.ts +21 -0
- package/dist/src/integrations/convex-client.d.ts.map +1 -0
- package/dist/src/integrations/convex.d.ts +9 -0
- package/dist/src/integrations/convex.d.ts.map +1 -0
- package/dist/src/integrations/databricks-client.d.ts +40 -0
- package/dist/src/integrations/databricks-client.d.ts.map +1 -0
- package/dist/src/integrations/databricks.d.ts +27 -0
- package/dist/src/integrations/databricks.d.ts.map +1 -0
- package/dist/src/integrations/datadog-client.d.ts +9 -0
- package/dist/src/integrations/datadog-client.d.ts.map +1 -0
- package/dist/src/integrations/datadog.d.ts +30 -0
- package/dist/src/integrations/datadog.d.ts.map +1 -0
- package/dist/src/integrations/discord-client.d.ts +44 -0
- package/dist/src/integrations/discord-client.d.ts.map +1 -0
- package/dist/src/integrations/discord.d.ts +19 -0
- package/dist/src/integrations/discord.d.ts.map +1 -0
- package/dist/src/integrations/etoro-client.d.ts +10 -0
- package/dist/src/integrations/etoro-client.d.ts.map +1 -0
- package/dist/src/integrations/etoro.d.ts +10 -0
- package/dist/src/integrations/etoro.d.ts.map +1 -0
- package/dist/src/integrations/excel.d.ts +1 -1
- package/dist/src/integrations/facebook-client.d.ts +61 -0
- package/dist/src/integrations/facebook-client.d.ts.map +1 -0
- package/dist/src/integrations/facebook.d.ts +22 -0
- package/dist/src/integrations/facebook.d.ts.map +1 -0
- package/dist/src/integrations/ga4-client.d.ts +9 -0
- package/dist/src/integrations/ga4-client.d.ts.map +1 -0
- package/dist/src/integrations/ga4.d.ts +13 -0
- package/dist/src/integrations/ga4.d.ts.map +1 -0
- package/dist/src/integrations/gcal-client.d.ts +6 -0
- package/dist/src/integrations/gcal-client.d.ts.map +1 -1
- package/dist/src/integrations/gcal.d.ts +1 -1
- package/dist/src/integrations/gcal.d.ts.map +1 -1
- package/dist/src/integrations/gchat-client.d.ts +12 -0
- package/dist/src/integrations/gchat-client.d.ts.map +1 -0
- package/dist/src/integrations/gchat.d.ts +15 -0
- package/dist/src/integrations/gchat.d.ts.map +1 -0
- package/dist/src/integrations/gcontacts-client.d.ts +14 -0
- package/dist/src/integrations/gcontacts-client.d.ts.map +1 -0
- package/dist/src/integrations/gcontacts.d.ts +22 -0
- package/dist/src/integrations/gcontacts.d.ts.map +1 -0
- package/dist/src/integrations/gdocs-client.d.ts +22 -0
- package/dist/src/integrations/gdocs-client.d.ts.map +1 -1
- package/dist/src/integrations/gdocs.d.ts +1 -1
- package/dist/src/integrations/gdocs.d.ts.map +1 -1
- package/dist/src/integrations/gdrive.d.ts +1 -1
- package/dist/src/integrations/github-client.d.ts +4 -0
- package/dist/src/integrations/github-client.d.ts.map +1 -1
- package/dist/src/integrations/github.d.ts +1 -1
- package/dist/src/integrations/github.d.ts.map +1 -1
- package/dist/src/integrations/gitlab-client.d.ts +5 -0
- package/dist/src/integrations/gitlab-client.d.ts.map +1 -0
- package/dist/src/integrations/gitlab.d.ts +20 -0
- package/dist/src/integrations/gitlab.d.ts.map +1 -0
- package/dist/src/integrations/gmail-client.d.ts +18 -0
- package/dist/src/integrations/gmail-client.d.ts.map +1 -1
- package/dist/src/integrations/gmail.d.ts +1 -1
- package/dist/src/integrations/gmail.d.ts.map +1 -1
- package/dist/src/integrations/gmeet-client.d.ts +10 -0
- package/dist/src/integrations/gmeet-client.d.ts.map +1 -0
- package/dist/src/integrations/gmeet.d.ts +19 -0
- package/dist/src/integrations/gmeet.d.ts.map +1 -0
- package/dist/src/integrations/gsheets-client.d.ts +10 -0
- package/dist/src/integrations/gsheets-client.d.ts.map +1 -1
- package/dist/src/integrations/gsheets.d.ts +1 -1
- package/dist/src/integrations/gsheets.d.ts.map +1 -1
- package/dist/src/integrations/gslides-client.d.ts +8 -0
- package/dist/src/integrations/gslides-client.d.ts.map +1 -1
- package/dist/src/integrations/gslides.d.ts +1 -1
- package/dist/src/integrations/gslides.d.ts.map +1 -1
- package/dist/src/integrations/gtasks-client.d.ts +16 -0
- package/dist/src/integrations/gtasks-client.d.ts.map +1 -0
- package/dist/src/integrations/gtasks.d.ts +22 -0
- package/dist/src/integrations/gtasks.d.ts.map +1 -0
- package/dist/src/integrations/instagram-client.d.ts +74 -0
- package/dist/src/integrations/instagram-client.d.ts.map +1 -0
- package/dist/src/integrations/instagram.d.ts +24 -0
- package/dist/src/integrations/instagram.d.ts.map +1 -0
- package/dist/src/integrations/library-metadata.d.ts.map +1 -1
- package/dist/src/integrations/linkedin-client.d.ts +6 -0
- package/dist/src/integrations/linkedin-client.d.ts.map +1 -0
- package/dist/src/integrations/linkedin.d.ts +15 -0
- package/dist/src/integrations/linkedin.d.ts.map +1 -0
- package/dist/src/integrations/mailchimp-client.d.ts +5 -0
- package/dist/src/integrations/mailchimp-client.d.ts.map +1 -0
- package/dist/src/integrations/mailchimp.d.ts +13 -0
- package/dist/src/integrations/mailchimp.d.ts.map +1 -0
- package/dist/src/integrations/monday-client.d.ts +44 -0
- package/dist/src/integrations/monday-client.d.ts.map +1 -0
- package/dist/src/integrations/monday.d.ts +19 -0
- package/dist/src/integrations/monday.d.ts.map +1 -0
- package/dist/src/integrations/neon-client.d.ts +89 -0
- package/dist/src/integrations/neon-client.d.ts.map +1 -0
- package/dist/src/integrations/neon.d.ts +13 -0
- package/dist/src/integrations/neon.d.ts.map +1 -0
- package/dist/src/integrations/onedrive-client.d.ts +16 -0
- package/dist/src/integrations/onedrive-client.d.ts.map +1 -1
- package/dist/src/integrations/onedrive.d.ts +1 -1
- package/dist/src/integrations/onedrive.d.ts.map +1 -1
- package/dist/src/integrations/outlook.d.ts +1 -1
- package/dist/src/integrations/outlook.d.ts.map +1 -1
- package/dist/src/integrations/paper-client.d.ts +24 -0
- package/dist/src/integrations/paper-client.d.ts.map +1 -0
- package/dist/src/integrations/paper.d.ts +22 -0
- package/dist/src/integrations/paper.d.ts.map +1 -0
- package/dist/src/integrations/phantom-client.d.ts +9 -0
- package/dist/src/integrations/phantom-client.d.ts.map +1 -0
- package/dist/src/integrations/phantom.d.ts +13 -0
- package/dist/src/integrations/phantom.d.ts.map +1 -0
- package/dist/src/integrations/planetscale-client.d.ts +5 -0
- package/dist/src/integrations/planetscale-client.d.ts.map +1 -0
- package/dist/src/integrations/planetscale.d.ts +14 -0
- package/dist/src/integrations/planetscale.d.ts.map +1 -0
- package/dist/src/integrations/planner-client.d.ts +17 -0
- package/dist/src/integrations/planner-client.d.ts.map +1 -0
- package/dist/src/integrations/planner.d.ts +13 -0
- package/dist/src/integrations/planner.d.ts.map +1 -0
- package/dist/src/integrations/postman-client.d.ts +34 -0
- package/dist/src/integrations/postman-client.d.ts.map +1 -0
- package/dist/src/integrations/postman.d.ts +14 -0
- package/dist/src/integrations/postman.d.ts.map +1 -0
- package/dist/src/integrations/powerpoint-client.d.ts +8 -0
- package/dist/src/integrations/powerpoint-client.d.ts.map +1 -1
- package/dist/src/integrations/powerpoint.d.ts +1 -1
- package/dist/src/integrations/powerpoint.d.ts.map +1 -1
- package/dist/src/integrations/reddit-client.d.ts +5 -0
- package/dist/src/integrations/reddit-client.d.ts.map +1 -0
- package/dist/src/integrations/reddit.d.ts +13 -0
- package/dist/src/integrations/reddit.d.ts.map +1 -0
- package/dist/src/integrations/redis-client.d.ts +67 -0
- package/dist/src/integrations/redis-client.d.ts.map +1 -0
- package/dist/src/integrations/redis.d.ts +18 -0
- package/dist/src/integrations/redis.d.ts.map +1 -0
- package/dist/src/integrations/resend-client.d.ts +5 -0
- package/dist/src/integrations/resend-client.d.ts.map +1 -0
- package/dist/src/integrations/resend.d.ts +9 -0
- package/dist/src/integrations/resend.d.ts.map +1 -0
- package/dist/src/integrations/salesforce-client.d.ts +43 -0
- package/dist/src/integrations/salesforce-client.d.ts.map +1 -0
- package/dist/src/integrations/salesforce.d.ts +25 -0
- package/dist/src/integrations/salesforce.d.ts.map +1 -0
- package/dist/src/integrations/sharepoint-client.d.ts +15 -0
- package/dist/src/integrations/sharepoint-client.d.ts.map +1 -0
- package/dist/src/integrations/sharepoint.d.ts +15 -0
- package/dist/src/integrations/sharepoint.d.ts.map +1 -0
- package/dist/src/integrations/shopify-client.d.ts +31 -0
- package/dist/src/integrations/shopify-client.d.ts.map +1 -0
- package/dist/src/integrations/shopify.d.ts +16 -0
- package/dist/src/integrations/shopify.d.ts.map +1 -0
- package/dist/src/integrations/stripe-client.d.ts +12 -0
- package/dist/src/integrations/stripe-client.d.ts.map +1 -1
- package/dist/src/integrations/stripe.d.ts +1 -1
- package/dist/src/integrations/stripe.d.ts.map +1 -1
- package/dist/src/integrations/supabase-client.d.ts +63 -0
- package/dist/src/integrations/supabase-client.d.ts.map +1 -0
- package/dist/src/integrations/supabase.d.ts +26 -0
- package/dist/src/integrations/supabase.d.ts.map +1 -0
- package/dist/src/integrations/teams-client.d.ts +16 -0
- package/dist/src/integrations/teams-client.d.ts.map +1 -0
- package/dist/src/integrations/teams.d.ts +24 -0
- package/dist/src/integrations/teams.d.ts.map +1 -0
- package/dist/src/integrations/threads-client.d.ts +16 -0
- package/dist/src/integrations/threads-client.d.ts.map +1 -0
- package/dist/src/integrations/threads.d.ts +15 -0
- package/dist/src/integrations/threads.d.ts.map +1 -0
- package/dist/src/integrations/tiktok-client.d.ts +7 -0
- package/dist/src/integrations/tiktok-client.d.ts.map +1 -0
- package/dist/src/integrations/tiktok.d.ts +15 -0
- package/dist/src/integrations/tiktok.d.ts.map +1 -0
- package/dist/src/integrations/tldraw-client.d.ts +5 -0
- package/dist/src/integrations/tldraw-client.d.ts.map +1 -0
- package/dist/src/integrations/tldraw.d.ts +9 -0
- package/dist/src/integrations/tldraw.d.ts.map +1 -0
- package/dist/src/integrations/trello-client.d.ts +16 -0
- package/dist/src/integrations/trello-client.d.ts.map +1 -0
- package/dist/src/integrations/trello.d.ts +10 -0
- package/dist/src/integrations/trello.d.ts.map +1 -0
- package/dist/src/integrations/typeform-client.d.ts +13 -0
- package/dist/src/integrations/typeform-client.d.ts.map +1 -0
- package/dist/src/integrations/typeform.d.ts +15 -0
- package/dist/src/integrations/typeform.d.ts.map +1 -0
- package/dist/src/integrations/upstash-client.d.ts +28 -0
- package/dist/src/integrations/upstash-client.d.ts.map +1 -0
- package/dist/src/integrations/upstash.d.ts +18 -0
- package/dist/src/integrations/upstash.d.ts.map +1 -0
- package/dist/src/integrations/webflow-client.d.ts +78 -0
- package/dist/src/integrations/webflow-client.d.ts.map +1 -0
- package/dist/src/integrations/webflow.d.ts +20 -0
- package/dist/src/integrations/webflow.d.ts.map +1 -0
- package/dist/src/integrations/whatsapp-client.d.ts +22 -0
- package/dist/src/integrations/whatsapp-client.d.ts.map +1 -1
- package/dist/src/integrations/whatsapp.d.ts +1 -1
- package/dist/src/integrations/whatsapp.d.ts.map +1 -1
- package/dist/src/integrations/wix-client.d.ts +27 -0
- package/dist/src/integrations/wix-client.d.ts.map +1 -0
- package/dist/src/integrations/wix.d.ts +16 -0
- package/dist/src/integrations/wix.d.ts.map +1 -0
- package/dist/src/integrations/word-client.d.ts +8 -0
- package/dist/src/integrations/word-client.d.ts.map +1 -1
- package/dist/src/integrations/word.d.ts +1 -1
- package/dist/src/integrations/word.d.ts.map +1 -1
- package/dist/src/integrations/workday-client.d.ts +18 -0
- package/dist/src/integrations/workday-client.d.ts.map +1 -0
- package/dist/src/integrations/workday.d.ts +24 -0
- package/dist/src/integrations/workday.d.ts.map +1 -0
- package/dist/src/integrations/workos-client.d.ts +75 -0
- package/dist/src/integrations/workos-client.d.ts.map +1 -0
- package/dist/src/integrations/workos.d.ts +14 -0
- package/dist/src/integrations/workos.d.ts.map +1 -0
- package/dist/src/integrations/xero-client.d.ts +14 -0
- package/dist/src/integrations/xero-client.d.ts.map +1 -0
- package/dist/src/integrations/xero.d.ts +15 -0
- package/dist/src/integrations/xero.d.ts.map +1 -0
- package/dist/src/integrations/youtube.d.ts +1 -1
- package/dist/src/integrations/youtube.d.ts.map +1 -1
- package/dist/src/integrations/zapier-client.d.ts +41 -0
- package/dist/src/integrations/zapier-client.d.ts.map +1 -0
- package/dist/src/integrations/zapier.d.ts +20 -0
- package/dist/src/integrations/zapier.d.ts.map +1 -0
- package/dist/src/integrations/zoom-client.d.ts +42 -0
- package/dist/src/integrations/zoom-client.d.ts.map +1 -0
- package/dist/src/integrations/zoom.d.ts +23 -0
- package/dist/src/integrations/zoom.d.ts.map +1 -0
- package/dist/src/oauth/manager.d.ts +44 -0
- package/dist/src/oauth/manager.d.ts.map +1 -1
- package/dist/src/oauth/refresh.d.ts +124 -0
- package/dist/src/oauth/refresh.d.ts.map +1 -0
- package/dist/src/server.d.ts +54 -0
- package/dist/src/server.d.ts.map +1 -1
- package/index.ts +52 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -818,18 +818,42 @@ var INTEGRATION_LIBRARY_METADATA = {
|
|
|
818
818
|
description: "Manage Airtable bases, tables, and records",
|
|
819
819
|
category: "Business"
|
|
820
820
|
},
|
|
821
|
+
aws: {
|
|
822
|
+
description: "Inspect AWS accounts and resources with SigV4 (control-plane APIs)",
|
|
823
|
+
category: "Infrastructure"
|
|
824
|
+
},
|
|
825
|
+
attio: {
|
|
826
|
+
description: "Manage Attio people, companies, tasks, and CRM records",
|
|
827
|
+
category: "Business"
|
|
828
|
+
},
|
|
821
829
|
calcom: {
|
|
822
830
|
description: "Manage Cal.com bookings and schedules",
|
|
823
831
|
category: "Business"
|
|
824
832
|
},
|
|
833
|
+
canva: {
|
|
834
|
+
description: "List and create Canva designs, manage folders, and export assets",
|
|
835
|
+
category: "Productivity"
|
|
836
|
+
},
|
|
837
|
+
cloudflare: {
|
|
838
|
+
description: "Manage Cloudflare zones, DNS, CDN cache, and Workers",
|
|
839
|
+
category: "Infrastructure"
|
|
840
|
+
},
|
|
825
841
|
cursor: {
|
|
826
842
|
description: "Manage Cursor Cloud Agents and background tasks",
|
|
827
843
|
category: "Engineering"
|
|
828
844
|
},
|
|
845
|
+
databricks: {
|
|
846
|
+
description: "Run Databricks jobs, list clusters and SQL warehouses, and inspect workspace paths",
|
|
847
|
+
category: "Engineering"
|
|
848
|
+
},
|
|
829
849
|
figma: {
|
|
830
850
|
description: "Access Figma files, comments, and components",
|
|
831
851
|
category: "Engineering"
|
|
832
852
|
},
|
|
853
|
+
facebook: {
|
|
854
|
+
description: "Manage Facebook Page posts, comments, reactions, and insights via the Graph API",
|
|
855
|
+
category: "Social Media"
|
|
856
|
+
},
|
|
833
857
|
github: {
|
|
834
858
|
description: "Manage GitHub repos, issues, and pull requests",
|
|
835
859
|
category: "Engineering"
|
|
@@ -842,10 +866,26 @@ var INTEGRATION_LIBRARY_METADATA = {
|
|
|
842
866
|
description: "Manage Google Calendar events and schedules",
|
|
843
867
|
category: "Productivity"
|
|
844
868
|
},
|
|
869
|
+
gtasks: {
|
|
870
|
+
description: "Manage Google Tasks lists and to-dos",
|
|
871
|
+
category: "Productivity"
|
|
872
|
+
},
|
|
873
|
+
gmeet: {
|
|
874
|
+
description: "Create Google Meet links and manage meeting events via Calendar",
|
|
875
|
+
category: "Communication"
|
|
876
|
+
},
|
|
877
|
+
gcontacts: {
|
|
878
|
+
description: "List, search, create, update, and delete Google Contacts via the People API",
|
|
879
|
+
category: "Communication"
|
|
880
|
+
},
|
|
845
881
|
hubspot: {
|
|
846
882
|
description: "Manage HubSpot contacts, deals, and tickets",
|
|
847
883
|
category: "Business"
|
|
848
884
|
},
|
|
885
|
+
instagram: {
|
|
886
|
+
description: "Instagram Graph API — media, comments, insights, stories, and publishing",
|
|
887
|
+
category: "Social Media"
|
|
888
|
+
},
|
|
849
889
|
intercom: {
|
|
850
890
|
description: "Manage Intercom contacts and conversations",
|
|
851
891
|
category: "Business"
|
|
@@ -862,6 +902,10 @@ var INTEGRATION_LIBRARY_METADATA = {
|
|
|
862
902
|
description: "Manage OneDrive files, folders, and sharing",
|
|
863
903
|
category: "Storage"
|
|
864
904
|
},
|
|
905
|
+
planner: {
|
|
906
|
+
description: "Manage Microsoft Planner plans, buckets, and tasks",
|
|
907
|
+
category: "Productivity"
|
|
908
|
+
},
|
|
865
909
|
outlook: {
|
|
866
910
|
description: "Manage Outlook mail, calendars, and contacts",
|
|
867
911
|
category: "Communication"
|
|
@@ -870,18 +914,38 @@ var INTEGRATION_LIBRARY_METADATA = {
|
|
|
870
914
|
description: "Manage Polar products, orders, and subscriptions",
|
|
871
915
|
category: "Finance"
|
|
872
916
|
},
|
|
917
|
+
phantom: {
|
|
918
|
+
description: "Build Phantom mobile browse universal links and deeplink provider documentation (Solana)",
|
|
919
|
+
category: "Other"
|
|
920
|
+
},
|
|
873
921
|
posthog: {
|
|
874
922
|
description: "Read PostHog organizations, projects, insights, and feature flags",
|
|
875
923
|
category: "Analytics"
|
|
876
924
|
},
|
|
925
|
+
postman: {
|
|
926
|
+
description: "Manage Postman workspaces, collections, and environments via the Postman API",
|
|
927
|
+
category: "Engineering"
|
|
928
|
+
},
|
|
877
929
|
ramp: {
|
|
878
930
|
description: "Manage Ramp corporate cards, bills, and spend",
|
|
879
931
|
category: "Business"
|
|
880
932
|
},
|
|
933
|
+
resend: {
|
|
934
|
+
description: "Send email and manage domains with the Resend API",
|
|
935
|
+
category: "Communication"
|
|
936
|
+
},
|
|
937
|
+
mailchimp: {
|
|
938
|
+
description: "Manage Mailchimp audiences, members, and campaigns",
|
|
939
|
+
category: "Communication"
|
|
940
|
+
},
|
|
881
941
|
railway: {
|
|
882
942
|
description: "Manage Railway workspaces, projects, services, deployments, variables, domains, and volumes",
|
|
883
943
|
category: "Infrastructure"
|
|
884
944
|
},
|
|
945
|
+
supabase: {
|
|
946
|
+
description: "Manage Supabase organizations, projects, Postgres, API keys, secrets, and branches",
|
|
947
|
+
category: "Infrastructure"
|
|
948
|
+
},
|
|
885
949
|
sentry: {
|
|
886
950
|
description: "Monitor Sentry errors, issues, releases, and projects",
|
|
887
951
|
category: "Engineering"
|
|
@@ -890,6 +954,14 @@ var INTEGRATION_LIBRARY_METADATA = {
|
|
|
890
954
|
description: "Manage Netlify sites, deploys, builds, and environment variables",
|
|
891
955
|
category: "Infrastructure"
|
|
892
956
|
},
|
|
957
|
+
redis: {
|
|
958
|
+
description: "Manage Redis Cloud subscriptions, databases, async tasks, and audit logs",
|
|
959
|
+
category: "Infrastructure"
|
|
960
|
+
},
|
|
961
|
+
upstash: {
|
|
962
|
+
description: "Use Upstash Redis REST, QStash messaging, and related HTTP APIs",
|
|
963
|
+
category: "Infrastructure"
|
|
964
|
+
},
|
|
893
965
|
jira: {
|
|
894
966
|
description: "Manage Jira issues, projects, sprints, and boards",
|
|
895
967
|
category: "Engineering"
|
|
@@ -926,6 +998,10 @@ var INTEGRATION_LIBRARY_METADATA = {
|
|
|
926
998
|
description: "Manage Vercel projects, deployments, and domains",
|
|
927
999
|
category: "Infrastructure"
|
|
928
1000
|
},
|
|
1001
|
+
workos: {
|
|
1002
|
+
description: "Manage WorkOS organizations, users, directory sync, and AuthKit",
|
|
1003
|
+
category: "Infrastructure"
|
|
1004
|
+
},
|
|
929
1005
|
whatsapp: {
|
|
930
1006
|
description: "Send WhatsApp messages and templates",
|
|
931
1007
|
category: "Communication"
|
|
@@ -934,6 +1010,14 @@ var INTEGRATION_LIBRARY_METADATA = {
|
|
|
934
1010
|
description: "Search and access YouTube videos and channels",
|
|
935
1011
|
category: "Social Media"
|
|
936
1012
|
},
|
|
1013
|
+
zoom: {
|
|
1014
|
+
description: "Manage Zoom user profile and meetings",
|
|
1015
|
+
category: "Communication"
|
|
1016
|
+
},
|
|
1017
|
+
reddit: {
|
|
1018
|
+
description: "Browse subreddits, search posts, submit content, and vote on Reddit",
|
|
1019
|
+
category: "Social Media"
|
|
1020
|
+
},
|
|
937
1021
|
powerpoint: {
|
|
938
1022
|
description: "Manage PowerPoint presentations and sharing",
|
|
939
1023
|
category: "Productivity"
|
|
@@ -950,17 +1034,149 @@ var INTEGRATION_LIBRARY_METADATA = {
|
|
|
950
1034
|
description: "Manage Dropbox files, folders, and sharing",
|
|
951
1035
|
category: "Storage"
|
|
952
1036
|
},
|
|
1037
|
+
paper: {
|
|
1038
|
+
description: "Create, update, and export Dropbox Paper documents",
|
|
1039
|
+
category: "Productivity"
|
|
1040
|
+
},
|
|
953
1041
|
granola: {
|
|
954
1042
|
description: "List and read Granola meeting notes and folders",
|
|
955
1043
|
category: "Productivity"
|
|
956
1044
|
},
|
|
1045
|
+
alpaca: {
|
|
1046
|
+
description: "Trade equities with Alpaca: account, orders, positions, and market clock",
|
|
1047
|
+
category: "Finance"
|
|
1048
|
+
},
|
|
1049
|
+
binance: {
|
|
1050
|
+
description: "Read Binance Spot prices, order books, and account data with read-only API keys",
|
|
1051
|
+
category: "Finance"
|
|
1052
|
+
},
|
|
957
1053
|
mercury: {
|
|
958
1054
|
description: "Manage Mercury bank accounts, cards, and transactions",
|
|
959
1055
|
category: "Finance"
|
|
960
1056
|
},
|
|
1057
|
+
monday: {
|
|
1058
|
+
description: "Manage Monday.com boards, items, columns, and updates",
|
|
1059
|
+
category: "Productivity"
|
|
1060
|
+
},
|
|
961
1061
|
zendesk: {
|
|
962
1062
|
description: "Manage Zendesk tickets, users, and help center content",
|
|
963
1063
|
category: "Business"
|
|
1064
|
+
},
|
|
1065
|
+
wix: {
|
|
1066
|
+
description: "Manage Wix site stores, products, and e-commerce orders via REST",
|
|
1067
|
+
category: "Business"
|
|
1068
|
+
},
|
|
1069
|
+
astronomer: {
|
|
1070
|
+
description: "Manage Apache Airflow DAGs and deployments on Astronomer",
|
|
1071
|
+
category: "Engineering"
|
|
1072
|
+
},
|
|
1073
|
+
auth0: {
|
|
1074
|
+
description: "Manage Auth0 users, applications, and tenant configuration",
|
|
1075
|
+
category: "Infrastructure"
|
|
1076
|
+
},
|
|
1077
|
+
betterstack: {
|
|
1078
|
+
description: "Monitor uptime, logs, and incident alerts with BetterStack",
|
|
1079
|
+
category: "Engineering"
|
|
1080
|
+
},
|
|
1081
|
+
clerk: {
|
|
1082
|
+
description: "Manage Clerk users, organizations, and authentication",
|
|
1083
|
+
category: "Infrastructure"
|
|
1084
|
+
},
|
|
1085
|
+
clickup: {
|
|
1086
|
+
description: "Manage ClickUp tasks, lists, spaces, and workspaces",
|
|
1087
|
+
category: "Productivity"
|
|
1088
|
+
},
|
|
1089
|
+
convex: {
|
|
1090
|
+
description: "Run Convex functions, manage tables, and query your app backend",
|
|
1091
|
+
category: "Engineering"
|
|
1092
|
+
},
|
|
1093
|
+
datadog: {
|
|
1094
|
+
description: "Monitor Datadog metrics, logs, dashboards, and alerts",
|
|
1095
|
+
category: "Engineering"
|
|
1096
|
+
},
|
|
1097
|
+
discord: {
|
|
1098
|
+
description: "Send messages and manage Discord channels and servers",
|
|
1099
|
+
category: "Communication"
|
|
1100
|
+
},
|
|
1101
|
+
etoro: {
|
|
1102
|
+
description: "Read eToro portfolio data and market instruments",
|
|
1103
|
+
category: "Finance"
|
|
1104
|
+
},
|
|
1105
|
+
ga4: {
|
|
1106
|
+
description: "Read Google Analytics 4 reports, properties, and events",
|
|
1107
|
+
category: "Analytics"
|
|
1108
|
+
},
|
|
1109
|
+
gchat: {
|
|
1110
|
+
description: "Send messages and manage Google Chat spaces and memberships",
|
|
1111
|
+
category: "Communication"
|
|
1112
|
+
},
|
|
1113
|
+
gitlab: {
|
|
1114
|
+
description: "Manage GitLab repositories, issues, and merge requests",
|
|
1115
|
+
category: "Engineering"
|
|
1116
|
+
},
|
|
1117
|
+
linkedin: {
|
|
1118
|
+
description: "Post updates and manage LinkedIn profile and company pages",
|
|
1119
|
+
category: "Social Media"
|
|
1120
|
+
},
|
|
1121
|
+
neon: {
|
|
1122
|
+
description: "Manage Neon Postgres projects, branches, and databases",
|
|
1123
|
+
category: "Infrastructure"
|
|
1124
|
+
},
|
|
1125
|
+
planetscale: {
|
|
1126
|
+
description: "Manage PlanetScale databases, branches, and schema changes",
|
|
1127
|
+
category: "Infrastructure"
|
|
1128
|
+
},
|
|
1129
|
+
salesforce: {
|
|
1130
|
+
description: "Manage Salesforce accounts, contacts, opportunities, and cases",
|
|
1131
|
+
category: "Business"
|
|
1132
|
+
},
|
|
1133
|
+
sharepoint: {
|
|
1134
|
+
description: "Manage SharePoint sites, lists, documents, and permissions",
|
|
1135
|
+
category: "Productivity"
|
|
1136
|
+
},
|
|
1137
|
+
shopify: {
|
|
1138
|
+
description: "Manage Shopify products, orders, customers, and inventory",
|
|
1139
|
+
category: "Business"
|
|
1140
|
+
},
|
|
1141
|
+
teams: {
|
|
1142
|
+
description: "Send messages and manage Microsoft Teams channels and meetings",
|
|
1143
|
+
category: "Communication"
|
|
1144
|
+
},
|
|
1145
|
+
threads: {
|
|
1146
|
+
description: "Post and manage content on Threads (Meta)",
|
|
1147
|
+
category: "Social Media"
|
|
1148
|
+
},
|
|
1149
|
+
tiktok: {
|
|
1150
|
+
description: "Manage TikTok videos, account info, and creator analytics",
|
|
1151
|
+
category: "Social Media"
|
|
1152
|
+
},
|
|
1153
|
+
tldraw: {
|
|
1154
|
+
description: "Create and manage tldraw collaborative whiteboards",
|
|
1155
|
+
category: "Productivity"
|
|
1156
|
+
},
|
|
1157
|
+
trello: {
|
|
1158
|
+
description: "Manage Trello boards, lists, and cards",
|
|
1159
|
+
category: "Productivity"
|
|
1160
|
+
},
|
|
1161
|
+
typeform: {
|
|
1162
|
+
description: "Create and manage Typeform surveys and responses",
|
|
1163
|
+
category: "Business"
|
|
1164
|
+
},
|
|
1165
|
+
webflow: {
|
|
1166
|
+
description: "Manage Webflow sites, collections, and CMS content",
|
|
1167
|
+
category: "Engineering"
|
|
1168
|
+
},
|
|
1169
|
+
workday: {
|
|
1170
|
+
description: "Read Workday HR data including workers, organizations, and pay",
|
|
1171
|
+
category: "Business"
|
|
1172
|
+
},
|
|
1173
|
+
xero: {
|
|
1174
|
+
description: "Manage Xero invoices, contacts, and accounting data",
|
|
1175
|
+
category: "Finance"
|
|
1176
|
+
},
|
|
1177
|
+
zapier: {
|
|
1178
|
+
description: "Trigger and manage Zapier automation workflows",
|
|
1179
|
+
category: "Engineering"
|
|
964
1180
|
}
|
|
965
1181
|
};
|
|
966
1182
|
function integrationLibraryPresentationFields(integration) {
|
|
@@ -1551,6 +1767,146 @@ async function fetchNotionEmail(accessToken) {
|
|
|
1551
1767
|
}
|
|
1552
1768
|
}
|
|
1553
1769
|
|
|
1770
|
+
// src/oauth/refresh.ts
|
|
1771
|
+
class RefreshRejectedError extends Error {
|
|
1772
|
+
provider;
|
|
1773
|
+
constructor(provider, message) {
|
|
1774
|
+
super(message ?? `OAuth refresh rejected (invalid_grant) for ${provider}`);
|
|
1775
|
+
this.name = "RefreshRejectedError";
|
|
1776
|
+
this.provider = provider;
|
|
1777
|
+
}
|
|
1778
|
+
}
|
|
1779
|
+
|
|
1780
|
+
class RefreshTransientError extends Error {
|
|
1781
|
+
provider;
|
|
1782
|
+
constructor(provider, message) {
|
|
1783
|
+
super(message);
|
|
1784
|
+
this.name = "RefreshTransientError";
|
|
1785
|
+
this.provider = provider;
|
|
1786
|
+
}
|
|
1787
|
+
}
|
|
1788
|
+
var DEFAULT_REFRESH_WINDOW_MS = 2 * 60 * 1000;
|
|
1789
|
+
function shouldRefreshToken(tokenData, windowMs = DEFAULT_REFRESH_WINDOW_MS) {
|
|
1790
|
+
if (!tokenData || !tokenData.refreshToken || !tokenData.expiresAt) {
|
|
1791
|
+
return false;
|
|
1792
|
+
}
|
|
1793
|
+
const expiresAtMs = Date.parse(tokenData.expiresAt);
|
|
1794
|
+
if (Number.isNaN(expiresAtMs)) {
|
|
1795
|
+
return false;
|
|
1796
|
+
}
|
|
1797
|
+
return expiresAtMs - Date.now() <= windowMs;
|
|
1798
|
+
}
|
|
1799
|
+
async function refreshViaMcp(opts) {
|
|
1800
|
+
const url = new URL("/oauth/refresh", opts.serverUrl);
|
|
1801
|
+
const body = {
|
|
1802
|
+
provider: opts.provider,
|
|
1803
|
+
refresh_token: opts.refreshToken,
|
|
1804
|
+
client_id: opts.clientId
|
|
1805
|
+
};
|
|
1806
|
+
if (opts.clientSecret) {
|
|
1807
|
+
body.client_secret = opts.clientSecret;
|
|
1808
|
+
}
|
|
1809
|
+
if (opts.subdomain) {
|
|
1810
|
+
body.subdomain = opts.subdomain;
|
|
1811
|
+
}
|
|
1812
|
+
if (opts.extraConfig) {
|
|
1813
|
+
for (const [key, value] of Object.entries(opts.extraConfig)) {
|
|
1814
|
+
if (body[key] === undefined) {
|
|
1815
|
+
body[key] = value;
|
|
1816
|
+
}
|
|
1817
|
+
}
|
|
1818
|
+
}
|
|
1819
|
+
const headers = { "Content-Type": "application/json" };
|
|
1820
|
+
if (opts.apiKey) {
|
|
1821
|
+
headers["X-API-KEY"] = opts.apiKey;
|
|
1822
|
+
}
|
|
1823
|
+
let response;
|
|
1824
|
+
try {
|
|
1825
|
+
response = await fetch(url.toString(), {
|
|
1826
|
+
method: "POST",
|
|
1827
|
+
headers,
|
|
1828
|
+
body: JSON.stringify(body),
|
|
1829
|
+
signal: opts.signal
|
|
1830
|
+
});
|
|
1831
|
+
} catch (err) {
|
|
1832
|
+
throw new RefreshTransientError(opts.provider, `Network error refreshing ${opts.provider} token: ${err.message}`);
|
|
1833
|
+
}
|
|
1834
|
+
if (response.status === 401) {
|
|
1835
|
+
let parsed = {};
|
|
1836
|
+
try {
|
|
1837
|
+
parsed = await response.json();
|
|
1838
|
+
} catch {}
|
|
1839
|
+
if (parsed.error === "invalid_grant") {
|
|
1840
|
+
throw new RefreshRejectedError(opts.provider);
|
|
1841
|
+
}
|
|
1842
|
+
throw new RefreshTransientError(opts.provider, `Refresh endpoint returned 401`);
|
|
1843
|
+
}
|
|
1844
|
+
if (!response.ok) {
|
|
1845
|
+
let text = "";
|
|
1846
|
+
try {
|
|
1847
|
+
text = await response.text();
|
|
1848
|
+
} catch {}
|
|
1849
|
+
throw new RefreshTransientError(opts.provider, `Refresh endpoint returned ${response.status}: ${text || "<no body>"}`);
|
|
1850
|
+
}
|
|
1851
|
+
let result;
|
|
1852
|
+
try {
|
|
1853
|
+
result = await response.json();
|
|
1854
|
+
} catch (err) {
|
|
1855
|
+
throw new RefreshTransientError(opts.provider, `Malformed refresh response: ${err.message}`);
|
|
1856
|
+
}
|
|
1857
|
+
if (!result.accessToken) {
|
|
1858
|
+
throw new RefreshTransientError(opts.provider, `Refresh response missing access_token`);
|
|
1859
|
+
}
|
|
1860
|
+
if (!result.refreshToken) {
|
|
1861
|
+
result.refreshToken = opts.refreshToken;
|
|
1862
|
+
}
|
|
1863
|
+
return result;
|
|
1864
|
+
}
|
|
1865
|
+
async function resolveAccessToken(opts) {
|
|
1866
|
+
const { provider, currentTokens, force = false } = opts;
|
|
1867
|
+
const needsRefresh = force || shouldRefreshToken(currentTokens, opts.windowMs);
|
|
1868
|
+
if (!needsRefresh || !currentTokens.refreshToken) {
|
|
1869
|
+
return currentTokens.accessToken;
|
|
1870
|
+
}
|
|
1871
|
+
try {
|
|
1872
|
+
const refreshed = await refreshViaMcp({
|
|
1873
|
+
provider,
|
|
1874
|
+
refreshToken: currentTokens.refreshToken,
|
|
1875
|
+
clientId: opts.providerOAuth.clientId,
|
|
1876
|
+
clientSecret: opts.providerOAuth.clientSecret,
|
|
1877
|
+
subdomain: opts.providerOAuth.subdomain,
|
|
1878
|
+
extraConfig: opts.providerOAuth.extraConfig,
|
|
1879
|
+
serverUrl: opts.serverUrl,
|
|
1880
|
+
apiKey: opts.apiKey
|
|
1881
|
+
});
|
|
1882
|
+
const updated = {
|
|
1883
|
+
...currentTokens,
|
|
1884
|
+
accessToken: refreshed.accessToken,
|
|
1885
|
+
refreshToken: refreshed.refreshToken ?? currentTokens.refreshToken,
|
|
1886
|
+
tokenType: refreshed.tokenType || currentTokens.tokenType,
|
|
1887
|
+
expiresIn: refreshed.expiresIn ?? currentTokens.expiresIn,
|
|
1888
|
+
expiresAt: refreshed.expiresAt ?? currentTokens.expiresAt,
|
|
1889
|
+
scopes: refreshed.scopes && refreshed.scopes.length > 0 ? refreshed.scopes : currentTokens.scopes
|
|
1890
|
+
};
|
|
1891
|
+
if (opts.setProviderToken) {
|
|
1892
|
+
try {
|
|
1893
|
+
await opts.setProviderToken(provider, updated, updated.email, opts.context);
|
|
1894
|
+
} catch {}
|
|
1895
|
+
}
|
|
1896
|
+
return updated.accessToken;
|
|
1897
|
+
} catch (err) {
|
|
1898
|
+
if (err instanceof RefreshRejectedError) {
|
|
1899
|
+
if (opts.setProviderToken) {
|
|
1900
|
+
try {
|
|
1901
|
+
await opts.setProviderToken(provider, null, currentTokens.email, opts.context);
|
|
1902
|
+
} catch {}
|
|
1903
|
+
}
|
|
1904
|
+
throw err;
|
|
1905
|
+
}
|
|
1906
|
+
return currentTokens.accessToken;
|
|
1907
|
+
}
|
|
1908
|
+
}
|
|
1909
|
+
|
|
1554
1910
|
// src/oauth/manager.ts
|
|
1555
1911
|
var logger4 = createLogger("OAuth");
|
|
1556
1912
|
|
|
@@ -1566,7 +1922,10 @@ class OAuthManager {
|
|
|
1566
1922
|
removeTokenCallback;
|
|
1567
1923
|
indexedDBStorage;
|
|
1568
1924
|
skipLocalStorage = false;
|
|
1569
|
-
|
|
1925
|
+
providerOAuth = {};
|
|
1926
|
+
mcpServerUrl;
|
|
1927
|
+
mcpApiKey;
|
|
1928
|
+
constructor(oauthApiBase, flowConfig, apiBaseUrl, tokenCallbacks, refreshConfig) {
|
|
1570
1929
|
this.oauthApiBase = oauthApiBase;
|
|
1571
1930
|
this.apiBaseUrl = apiBaseUrl;
|
|
1572
1931
|
this.windowManager = new OAuthWindowManager;
|
|
@@ -1578,6 +1937,9 @@ class OAuthManager {
|
|
|
1578
1937
|
this.getTokenCallback = tokenCallbacks?.getProviderToken;
|
|
1579
1938
|
this.setTokenCallback = tokenCallbacks?.setProviderToken;
|
|
1580
1939
|
this.removeTokenCallback = tokenCallbacks?.removeProviderToken;
|
|
1940
|
+
this.providerOAuth = refreshConfig?.providers ?? {};
|
|
1941
|
+
this.mcpServerUrl = refreshConfig?.mcpServerUrl;
|
|
1942
|
+
this.mcpApiKey = refreshConfig?.apiKey;
|
|
1581
1943
|
this.indexedDBStorage = new IndexedDBStorage;
|
|
1582
1944
|
this.cleanupExpiredPendingAuths();
|
|
1583
1945
|
}
|
|
@@ -1787,7 +2149,9 @@ class OAuthManager {
|
|
|
1787
2149
|
try {
|
|
1788
2150
|
const tokenData = await this.getTokenCallback(provider, email, context);
|
|
1789
2151
|
if (tokenData) {
|
|
1790
|
-
this.
|
|
2152
|
+
const refreshed = await this.maybeRefreshTokenData(provider, tokenData, context);
|
|
2153
|
+
this.providerTokens.set(provider, refreshed);
|
|
2154
|
+
return refreshed;
|
|
1791
2155
|
}
|
|
1792
2156
|
return tokenData;
|
|
1793
2157
|
} catch (error) {
|
|
@@ -1827,6 +2191,59 @@ class OAuthManager {
|
|
|
1827
2191
|
}
|
|
1828
2192
|
await this.saveProviderToken(provider, tokenData, tokenEmail, context);
|
|
1829
2193
|
}
|
|
2194
|
+
configureTokenRefresh(refreshConfig) {
|
|
2195
|
+
if (refreshConfig.providers) {
|
|
2196
|
+
this.providerOAuth = refreshConfig.providers;
|
|
2197
|
+
}
|
|
2198
|
+
if (refreshConfig.mcpServerUrl !== undefined) {
|
|
2199
|
+
this.mcpServerUrl = refreshConfig.mcpServerUrl;
|
|
2200
|
+
}
|
|
2201
|
+
if (refreshConfig.apiKey !== undefined) {
|
|
2202
|
+
this.mcpApiKey = refreshConfig.apiKey;
|
|
2203
|
+
}
|
|
2204
|
+
}
|
|
2205
|
+
async maybeRefreshTokenData(provider, tokenData, context) {
|
|
2206
|
+
const credentials = this.providerOAuth[provider];
|
|
2207
|
+
const serverUrl = this.mcpServerUrl;
|
|
2208
|
+
if (!credentials || !serverUrl) {
|
|
2209
|
+
return tokenData;
|
|
2210
|
+
}
|
|
2211
|
+
if (!shouldRefreshToken(tokenData)) {
|
|
2212
|
+
return tokenData;
|
|
2213
|
+
}
|
|
2214
|
+
try {
|
|
2215
|
+
const newAccessToken = await resolveAccessToken({
|
|
2216
|
+
provider,
|
|
2217
|
+
currentTokens: tokenData,
|
|
2218
|
+
providerOAuth: {
|
|
2219
|
+
clientId: credentials.clientId,
|
|
2220
|
+
clientSecret: credentials.clientSecret,
|
|
2221
|
+
subdomain: credentials.config?.subdomain
|
|
2222
|
+
},
|
|
2223
|
+
serverUrl,
|
|
2224
|
+
apiKey: this.mcpApiKey,
|
|
2225
|
+
setProviderToken: this.setTokenCallback,
|
|
2226
|
+
context
|
|
2227
|
+
});
|
|
2228
|
+
if (newAccessToken === tokenData.accessToken) {
|
|
2229
|
+
return tokenData;
|
|
2230
|
+
}
|
|
2231
|
+
if (this.getTokenCallback) {
|
|
2232
|
+
try {
|
|
2233
|
+
const reloaded = await this.getTokenCallback(provider, tokenData.email, context);
|
|
2234
|
+
if (reloaded) {
|
|
2235
|
+
return reloaded;
|
|
2236
|
+
}
|
|
2237
|
+
} catch {}
|
|
2238
|
+
}
|
|
2239
|
+
return { ...tokenData, accessToken: newAccessToken };
|
|
2240
|
+
} catch (err) {
|
|
2241
|
+
if (err instanceof RefreshRejectedError) {
|
|
2242
|
+
throw err;
|
|
2243
|
+
}
|
|
2244
|
+
return tokenData;
|
|
2245
|
+
}
|
|
2246
|
+
}
|
|
1830
2247
|
clearProviderToken(provider) {
|
|
1831
2248
|
this.providerTokens.delete(provider);
|
|
1832
2249
|
if (!this.setTokenCallback && !this.removeTokenCallback && !this.skipLocalStorage) {
|
|
@@ -2285,10 +2702,26 @@ class MCPClientBase {
|
|
|
2285
2702
|
};
|
|
2286
2703
|
this.onReauthRequired = config.onReauthRequired;
|
|
2287
2704
|
this.maxReauthRetries = config.maxReauthRetries ?? 1;
|
|
2705
|
+
const refreshProviders = {};
|
|
2706
|
+
for (const integration of this.integrations) {
|
|
2707
|
+
const oauth = integration?.oauth;
|
|
2708
|
+
if (oauth?.clientId && oauth?.provider) {
|
|
2709
|
+
refreshProviders[oauth.provider] = {
|
|
2710
|
+
clientId: oauth.clientId,
|
|
2711
|
+
clientSecret: oauth.clientSecret,
|
|
2712
|
+
config: oauth.config
|
|
2713
|
+
};
|
|
2714
|
+
}
|
|
2715
|
+
}
|
|
2716
|
+
const mcpServerUrl = config.serverUrl;
|
|
2288
2717
|
this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow, this.apiBaseUrl, {
|
|
2289
2718
|
getProviderToken: config.getProviderToken,
|
|
2290
2719
|
setProviderToken: config.setProviderToken,
|
|
2291
2720
|
removeProviderToken: config.removeProviderToken
|
|
2721
|
+
}, {
|
|
2722
|
+
providers: refreshProviders,
|
|
2723
|
+
mcpServerUrl,
|
|
2724
|
+
apiKey: config.apiKey
|
|
2292
2725
|
});
|
|
2293
2726
|
this.setSessionToken(config.sessionToken || this.loadSessionTokenFromStorage());
|
|
2294
2727
|
for (const integration of this.integrations) {
|
|
@@ -2349,56 +2782,8 @@ class MCPClientBase {
|
|
|
2349
2782
|
}
|
|
2350
2783
|
}
|
|
2351
2784
|
const integrationIds = this.integrations.map((i) => i.id);
|
|
2352
|
-
|
|
2353
|
-
this
|
|
2354
|
-
}
|
|
2355
|
-
if (integrationIds.includes("gmail")) {
|
|
2356
|
-
this.gmail = this.createIntegrationProxy("gmail");
|
|
2357
|
-
}
|
|
2358
|
-
if (integrationIds.includes("notion")) {
|
|
2359
|
-
this.notion = this.createIntegrationProxy("notion");
|
|
2360
|
-
}
|
|
2361
|
-
if (integrationIds.includes("slack")) {
|
|
2362
|
-
this.slack = this.createIntegrationProxy("slack");
|
|
2363
|
-
}
|
|
2364
|
-
if (integrationIds.includes("linear")) {
|
|
2365
|
-
this.linear = this.createIntegrationProxy("linear");
|
|
2366
|
-
}
|
|
2367
|
-
if (integrationIds.includes("railway")) {
|
|
2368
|
-
this.railway = this.createIntegrationProxy("railway");
|
|
2369
|
-
}
|
|
2370
|
-
if (integrationIds.includes("vercel")) {
|
|
2371
|
-
this.vercel = this.createIntegrationProxy("vercel");
|
|
2372
|
-
}
|
|
2373
|
-
if (integrationIds.includes("zendesk")) {
|
|
2374
|
-
this.zendesk = this.createIntegrationProxy("zendesk");
|
|
2375
|
-
}
|
|
2376
|
-
if (integrationIds.includes("stripe")) {
|
|
2377
|
-
this.stripe = this.createIntegrationProxy("stripe");
|
|
2378
|
-
}
|
|
2379
|
-
if (integrationIds.includes("gcal")) {
|
|
2380
|
-
this.gcal = this.createIntegrationProxy("gcal");
|
|
2381
|
-
}
|
|
2382
|
-
if (integrationIds.includes("outlook")) {
|
|
2383
|
-
this.outlook = this.createIntegrationProxy("outlook");
|
|
2384
|
-
}
|
|
2385
|
-
if (integrationIds.includes("airtable")) {
|
|
2386
|
-
this.airtable = this.createIntegrationProxy("airtable");
|
|
2387
|
-
}
|
|
2388
|
-
if (integrationIds.includes("todoist")) {
|
|
2389
|
-
this.todoist = this.createIntegrationProxy("todoist");
|
|
2390
|
-
}
|
|
2391
|
-
if (integrationIds.includes("gdocs")) {
|
|
2392
|
-
this.gdocs = this.createIntegrationProxy("gdocs");
|
|
2393
|
-
}
|
|
2394
|
-
if (integrationIds.includes("gsheets")) {
|
|
2395
|
-
this.gsheets = this.createIntegrationProxy("gsheets");
|
|
2396
|
-
}
|
|
2397
|
-
if (integrationIds.includes("gslides")) {
|
|
2398
|
-
this.gslides = this.createIntegrationProxy("gslides");
|
|
2399
|
-
}
|
|
2400
|
-
if (integrationIds.includes("posthog")) {
|
|
2401
|
-
this.posthog = this.createIntegrationProxy("posthog");
|
|
2785
|
+
for (const id of integrationIds) {
|
|
2786
|
+
this[id] = this.createIntegrationProxy(id);
|
|
2402
2787
|
}
|
|
2403
2788
|
this.server = this.createServerProxy();
|
|
2404
2789
|
this.trigger = new TriggerClient({
|
|
@@ -4115,6 +4500,7 @@ var GITHUB_TOOLS = [
|
|
|
4115
4500
|
"github_create_repo",
|
|
4116
4501
|
"github_list_branches",
|
|
4117
4502
|
"github_create_branch",
|
|
4503
|
+
"github_get_authenticated_user",
|
|
4118
4504
|
"github_get_user",
|
|
4119
4505
|
"github_list_commits",
|
|
4120
4506
|
"github_get_commit",
|
|
@@ -4178,14 +4564,16 @@ function githubIntegration(config = {}) {
|
|
|
4178
4564
|
// src/integrations/gmail.ts
|
|
4179
4565
|
var logger10 = createLogger("Gmail");
|
|
4180
4566
|
var GMAIL_TOOLS = [
|
|
4181
|
-
"
|
|
4182
|
-
"
|
|
4567
|
+
"gmail_create_draft",
|
|
4568
|
+
"gmail_get_attachment",
|
|
4183
4569
|
"gmail_get_message",
|
|
4184
|
-
"gmail_search_messages",
|
|
4185
|
-
"gmail_reply_message",
|
|
4186
|
-
"gmail_list_threads",
|
|
4187
4570
|
"gmail_get_thread",
|
|
4571
|
+
"gmail_list_messages",
|
|
4572
|
+
"gmail_list_threads",
|
|
4188
4573
|
"gmail_modify_message",
|
|
4574
|
+
"gmail_reply_message",
|
|
4575
|
+
"gmail_search_messages",
|
|
4576
|
+
"gmail_send_message",
|
|
4189
4577
|
"gmail_trash_message"
|
|
4190
4578
|
];
|
|
4191
4579
|
function gmailIntegration(config = {}) {
|
|
@@ -4346,8 +4734,48 @@ function slackIntegration(config = {}) {
|
|
|
4346
4734
|
}
|
|
4347
4735
|
};
|
|
4348
4736
|
}
|
|
4737
|
+
// src/integrations/discord.ts
|
|
4738
|
+
var logger13 = createLogger("Discord");
|
|
4739
|
+
var DISCORD_TOOLS = [
|
|
4740
|
+
"discord_get_current_user",
|
|
4741
|
+
"discord_list_my_guilds",
|
|
4742
|
+
"discord_get_guild",
|
|
4743
|
+
"discord_list_guild_channels",
|
|
4744
|
+
"discord_get_channel",
|
|
4745
|
+
"discord_send_message",
|
|
4746
|
+
"discord_list_messages",
|
|
4747
|
+
"discord_edit_message",
|
|
4748
|
+
"discord_delete_message"
|
|
4749
|
+
];
|
|
4750
|
+
function discordIntegration(config = {}) {
|
|
4751
|
+
const oauth = {
|
|
4752
|
+
provider: "discord",
|
|
4753
|
+
clientId: config.clientId ?? getEnv("DISCORD_CLIENT_ID"),
|
|
4754
|
+
clientSecret: config.clientSecret ?? getEnv("DISCORD_CLIENT_SECRET"),
|
|
4755
|
+
scopes: config.scopes ?? ["identify", "email", "guilds", "bot", "applications.commands"],
|
|
4756
|
+
redirectUri: config.redirectUri,
|
|
4757
|
+
config: {
|
|
4758
|
+
...config
|
|
4759
|
+
}
|
|
4760
|
+
};
|
|
4761
|
+
return {
|
|
4762
|
+
id: "discord",
|
|
4763
|
+
name: "Discord",
|
|
4764
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/discord.png",
|
|
4765
|
+
description: "Send and manage Discord messages; list guilds and channels (bot token required on server for channel APIs)",
|
|
4766
|
+
category: "Communication",
|
|
4767
|
+
tools: [...DISCORD_TOOLS],
|
|
4768
|
+
oauth,
|
|
4769
|
+
async onInit(_client) {
|
|
4770
|
+
logger13.debug("Discord integration initialized");
|
|
4771
|
+
},
|
|
4772
|
+
async onAfterConnect(_client) {
|
|
4773
|
+
logger13.debug("Discord integration connected");
|
|
4774
|
+
}
|
|
4775
|
+
};
|
|
4776
|
+
}
|
|
4349
4777
|
// src/integrations/linear.ts
|
|
4350
|
-
var
|
|
4778
|
+
var logger14 = createLogger("Linear");
|
|
4351
4779
|
var LINEAR_TOOLS = [
|
|
4352
4780
|
"linear_create_issue",
|
|
4353
4781
|
"linear_list_issues",
|
|
@@ -4402,15 +4830,15 @@ function linearIntegration(config = {}) {
|
|
|
4402
4830
|
tools: [...LINEAR_TOOLS],
|
|
4403
4831
|
oauth,
|
|
4404
4832
|
async onInit(_client) {
|
|
4405
|
-
|
|
4833
|
+
logger14.debug("Linear integration initialized");
|
|
4406
4834
|
},
|
|
4407
4835
|
async onAfterConnect(_client) {
|
|
4408
|
-
|
|
4836
|
+
logger14.debug("Linear integration connected");
|
|
4409
4837
|
}
|
|
4410
4838
|
};
|
|
4411
4839
|
}
|
|
4412
4840
|
// src/integrations/railway.ts
|
|
4413
|
-
var
|
|
4841
|
+
var logger15 = createLogger("Railway");
|
|
4414
4842
|
var RAILWAY_SCOPES = [
|
|
4415
4843
|
"openid",
|
|
4416
4844
|
"profile",
|
|
@@ -4515,15 +4943,15 @@ function railwayIntegration(config = {}) {
|
|
|
4515
4943
|
tools: [...RAILWAY_TOOLS],
|
|
4516
4944
|
oauth,
|
|
4517
4945
|
async onInit(_client) {
|
|
4518
|
-
|
|
4946
|
+
logger15.debug("Railway integration initialized");
|
|
4519
4947
|
},
|
|
4520
4948
|
async onAfterConnect(_client) {
|
|
4521
|
-
|
|
4949
|
+
logger15.debug("Railway integration connected");
|
|
4522
4950
|
}
|
|
4523
4951
|
};
|
|
4524
4952
|
}
|
|
4525
4953
|
// src/integrations/vercel.ts
|
|
4526
|
-
var
|
|
4954
|
+
var logger16 = createLogger("Vercel");
|
|
4527
4955
|
var VERCEL_TOOLS = [
|
|
4528
4956
|
"vercel_list_projects",
|
|
4529
4957
|
"vercel_get_project",
|
|
@@ -4566,15 +4994,15 @@ function vercelIntegration(config = {}) {
|
|
|
4566
4994
|
tools: [...VERCEL_TOOLS],
|
|
4567
4995
|
oauth,
|
|
4568
4996
|
async onInit(_client) {
|
|
4569
|
-
|
|
4997
|
+
logger16.debug("Vercel integration initialized");
|
|
4570
4998
|
},
|
|
4571
4999
|
async onAfterConnect(_client) {
|
|
4572
|
-
|
|
5000
|
+
logger16.debug("Vercel integration connected");
|
|
4573
5001
|
}
|
|
4574
5002
|
};
|
|
4575
5003
|
}
|
|
4576
5004
|
// src/integrations/zendesk.ts
|
|
4577
|
-
var
|
|
5005
|
+
var logger17 = createLogger("Zendesk");
|
|
4578
5006
|
var ZENDESK_TOOLS = [
|
|
4579
5007
|
"zendesk_list_tickets",
|
|
4580
5008
|
"zendesk_get_ticket",
|
|
@@ -4623,15 +5051,15 @@ function zendeskIntegration(config = {}) {
|
|
|
4623
5051
|
tools: [...ZENDESK_TOOLS],
|
|
4624
5052
|
oauth,
|
|
4625
5053
|
async onInit(_client) {
|
|
4626
|
-
|
|
5054
|
+
logger17.debug("Zendesk integration initialized");
|
|
4627
5055
|
},
|
|
4628
5056
|
async onAfterConnect(_client) {
|
|
4629
|
-
|
|
5057
|
+
logger17.debug("Zendesk integration connected");
|
|
4630
5058
|
}
|
|
4631
5059
|
};
|
|
4632
5060
|
}
|
|
4633
5061
|
// src/integrations/stripe.ts
|
|
4634
|
-
var
|
|
5062
|
+
var logger18 = createLogger("Stripe");
|
|
4635
5063
|
var STRIPE_TOOLS = [
|
|
4636
5064
|
"stripe_list_customers",
|
|
4637
5065
|
"stripe_get_customer",
|
|
@@ -4650,6 +5078,7 @@ var STRIPE_TOOLS = [
|
|
|
4650
5078
|
"stripe_update_subscription",
|
|
4651
5079
|
"stripe_cancel_subscription",
|
|
4652
5080
|
"stripe_list_invoices",
|
|
5081
|
+
"stripe_get_invoice",
|
|
4653
5082
|
"stripe_create_invoice",
|
|
4654
5083
|
"stripe_finalize_invoice",
|
|
4655
5084
|
"stripe_pay_invoice",
|
|
@@ -4687,27 +5116,28 @@ function stripeIntegration(config = {}) {
|
|
|
4687
5116
|
tools: [...STRIPE_TOOLS],
|
|
4688
5117
|
oauth,
|
|
4689
5118
|
async onInit(_client) {
|
|
4690
|
-
|
|
5119
|
+
logger18.debug("Stripe integration initialized");
|
|
4691
5120
|
},
|
|
4692
5121
|
async onAfterConnect(_client) {
|
|
4693
|
-
|
|
5122
|
+
logger18.debug("Stripe integration connected");
|
|
4694
5123
|
}
|
|
4695
5124
|
};
|
|
4696
5125
|
}
|
|
4697
5126
|
// src/integrations/gcal.ts
|
|
4698
|
-
var
|
|
5127
|
+
var logger19 = createLogger("Google Calendar");
|
|
4699
5128
|
var GCAL_TOOLS = [
|
|
4700
|
-
"
|
|
4701
|
-
"gcal_get_calendar",
|
|
4702
|
-
"gcal_list_events",
|
|
4703
|
-
"gcal_get_event",
|
|
5129
|
+
"gcal_create_calendar",
|
|
4704
5130
|
"gcal_create_event",
|
|
4705
|
-
"
|
|
5131
|
+
"gcal_delete_calendar",
|
|
4706
5132
|
"gcal_delete_event",
|
|
5133
|
+
"gcal_freebusy",
|
|
5134
|
+
"gcal_get_calendar",
|
|
5135
|
+
"gcal_get_event",
|
|
4707
5136
|
"gcal_list_attendees",
|
|
5137
|
+
"gcal_list_calendars",
|
|
5138
|
+
"gcal_list_events",
|
|
4708
5139
|
"gcal_quick_add",
|
|
4709
|
-
"
|
|
4710
|
-
"gcal_delete_calendar"
|
|
5140
|
+
"gcal_update_event"
|
|
4711
5141
|
];
|
|
4712
5142
|
function gcalIntegration(config = {}) {
|
|
4713
5143
|
const oauth = {
|
|
@@ -4728,41 +5158,127 @@ function gcalIntegration(config = {}) {
|
|
|
4728
5158
|
tools: [...GCAL_TOOLS],
|
|
4729
5159
|
oauth,
|
|
4730
5160
|
async onInit(_client) {
|
|
4731
|
-
|
|
5161
|
+
logger19.debug("Google Calendar integration initialized");
|
|
4732
5162
|
},
|
|
4733
5163
|
async onAfterConnect(_client) {
|
|
4734
|
-
|
|
5164
|
+
logger19.debug("Google Calendar integration connected");
|
|
4735
5165
|
}
|
|
4736
5166
|
};
|
|
4737
5167
|
}
|
|
4738
|
-
// src/integrations/
|
|
4739
|
-
var
|
|
4740
|
-
var
|
|
4741
|
-
"
|
|
4742
|
-
"
|
|
4743
|
-
"
|
|
4744
|
-
"
|
|
4745
|
-
"
|
|
4746
|
-
"
|
|
4747
|
-
"
|
|
4748
|
-
"
|
|
4749
|
-
"
|
|
4750
|
-
"
|
|
4751
|
-
"
|
|
4752
|
-
"
|
|
4753
|
-
|
|
4754
|
-
|
|
4755
|
-
|
|
4756
|
-
|
|
4757
|
-
|
|
4758
|
-
|
|
4759
|
-
|
|
4760
|
-
|
|
4761
|
-
|
|
4762
|
-
|
|
4763
|
-
|
|
4764
|
-
|
|
4765
|
-
|
|
5168
|
+
// src/integrations/gtasks.ts
|
|
5169
|
+
var logger20 = createLogger("Google Tasks");
|
|
5170
|
+
var GTASKS_TOOLS = [
|
|
5171
|
+
"gtasks_clear_completed",
|
|
5172
|
+
"gtasks_create_task",
|
|
5173
|
+
"gtasks_create_tasklist",
|
|
5174
|
+
"gtasks_delete_task",
|
|
5175
|
+
"gtasks_delete_tasklist",
|
|
5176
|
+
"gtasks_get_task",
|
|
5177
|
+
"gtasks_get_tasklist",
|
|
5178
|
+
"gtasks_list_tasklists",
|
|
5179
|
+
"gtasks_list_tasks",
|
|
5180
|
+
"gtasks_move_task",
|
|
5181
|
+
"gtasks_update_task",
|
|
5182
|
+
"gtasks_update_tasklist"
|
|
5183
|
+
];
|
|
5184
|
+
function gtasksIntegration(config = {}) {
|
|
5185
|
+
const oauth = {
|
|
5186
|
+
provider: "gtasks",
|
|
5187
|
+
clientId: config.clientId ?? getEnv("GTASKS_CLIENT_ID"),
|
|
5188
|
+
clientSecret: config.clientSecret ?? getEnv("GTASKS_CLIENT_SECRET"),
|
|
5189
|
+
scopes: config.scopes,
|
|
5190
|
+
optionalScopes: config.optionalScopes,
|
|
5191
|
+
redirectUri: config.redirectUri,
|
|
5192
|
+
config: {
|
|
5193
|
+
...config
|
|
5194
|
+
}
|
|
5195
|
+
};
|
|
5196
|
+
return {
|
|
5197
|
+
id: "gtasks",
|
|
5198
|
+
name: "Google Tasks",
|
|
5199
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/google_tasks.webp",
|
|
5200
|
+
description: "Manage Google Tasks lists and to-dos synced with your Google account",
|
|
5201
|
+
category: "Productivity",
|
|
5202
|
+
tools: [...GTASKS_TOOLS],
|
|
5203
|
+
oauth,
|
|
5204
|
+
async onInit(_client) {
|
|
5205
|
+
logger20.debug("Google Tasks integration initialized");
|
|
5206
|
+
},
|
|
5207
|
+
async onAfterConnect(_client) {
|
|
5208
|
+
logger20.debug("Google Tasks integration connected");
|
|
5209
|
+
}
|
|
5210
|
+
};
|
|
5211
|
+
}
|
|
5212
|
+
// src/integrations/gcontacts.ts
|
|
5213
|
+
var logger21 = createLogger("Google Contacts");
|
|
5214
|
+
var GCONTACTS_TOOLS = [
|
|
5215
|
+
"gcontacts_batch_get_contacts",
|
|
5216
|
+
"gcontacts_copy_other_contact",
|
|
5217
|
+
"gcontacts_create_contact",
|
|
5218
|
+
"gcontacts_delete_contact",
|
|
5219
|
+
"gcontacts_get_person",
|
|
5220
|
+
"gcontacts_get_self",
|
|
5221
|
+
"gcontacts_list_connections",
|
|
5222
|
+
"gcontacts_list_other_contacts",
|
|
5223
|
+
"gcontacts_search_contacts",
|
|
5224
|
+
"gcontacts_update_contact"
|
|
5225
|
+
];
|
|
5226
|
+
function gcontactsIntegration(config = {}) {
|
|
5227
|
+
const oauth = {
|
|
5228
|
+
provider: "gcontacts",
|
|
5229
|
+
clientId: config.clientId ?? getEnv("GCONTACTS_CLIENT_ID"),
|
|
5230
|
+
clientSecret: config.clientSecret ?? getEnv("GCONTACTS_CLIENT_SECRET"),
|
|
5231
|
+
scopes: config.scopes,
|
|
5232
|
+
optionalScopes: config.optionalScopes,
|
|
5233
|
+
redirectUri: config.redirectUri,
|
|
5234
|
+
config: {
|
|
5235
|
+
...config
|
|
5236
|
+
}
|
|
5237
|
+
};
|
|
5238
|
+
return {
|
|
5239
|
+
id: "gcontacts",
|
|
5240
|
+
name: "Google Contacts",
|
|
5241
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/gcontacts.png",
|
|
5242
|
+
description: "List, search, create, update, and delete Google Contacts via the People API",
|
|
5243
|
+
category: "Communication",
|
|
5244
|
+
tools: [...GCONTACTS_TOOLS],
|
|
5245
|
+
oauth,
|
|
5246
|
+
async onInit(_client) {
|
|
5247
|
+
logger21.debug("Google Contacts integration initialized");
|
|
5248
|
+
},
|
|
5249
|
+
async onAfterConnect(_client) {
|
|
5250
|
+
logger21.debug("Google Contacts integration connected");
|
|
5251
|
+
}
|
|
5252
|
+
};
|
|
5253
|
+
}
|
|
5254
|
+
// src/integrations/outlook.ts
|
|
5255
|
+
var logger22 = createLogger("Outlook");
|
|
5256
|
+
var OUTLOOK_TOOLS = [
|
|
5257
|
+
"outlook_accept_event",
|
|
5258
|
+
"outlook_create_draft",
|
|
5259
|
+
"outlook_create_event",
|
|
5260
|
+
"outlook_decline_event",
|
|
5261
|
+
"outlook_delete_event",
|
|
5262
|
+
"outlook_delete_message",
|
|
5263
|
+
"outlook_find_meeting_times",
|
|
5264
|
+
"outlook_forward_message",
|
|
5265
|
+
"outlook_get_contact",
|
|
5266
|
+
"outlook_get_event",
|
|
5267
|
+
"outlook_get_message",
|
|
5268
|
+
"outlook_get_schedule",
|
|
5269
|
+
"outlook_list_calendars",
|
|
5270
|
+
"outlook_list_contacts",
|
|
5271
|
+
"outlook_list_events",
|
|
5272
|
+
"outlook_list_mail_folders",
|
|
5273
|
+
"outlook_list_messages",
|
|
5274
|
+
"outlook_mark_message_read",
|
|
5275
|
+
"outlook_move_message",
|
|
5276
|
+
"outlook_reply_all_message",
|
|
5277
|
+
"outlook_reply_message",
|
|
5278
|
+
"outlook_search_messages",
|
|
5279
|
+
"outlook_send_message",
|
|
5280
|
+
"outlook_tentatively_accept_event",
|
|
5281
|
+
"outlook_update_event"
|
|
4766
5282
|
];
|
|
4767
5283
|
function outlookIntegration(config = {}) {
|
|
4768
5284
|
const oauth = {
|
|
@@ -4783,15 +5299,73 @@ function outlookIntegration(config = {}) {
|
|
|
4783
5299
|
tools: [...OUTLOOK_TOOLS],
|
|
4784
5300
|
oauth,
|
|
4785
5301
|
async onInit(_client) {
|
|
4786
|
-
|
|
5302
|
+
logger22.debug("Outlook integration initialized");
|
|
5303
|
+
},
|
|
5304
|
+
async onAfterConnect(_client) {
|
|
5305
|
+
logger22.debug("Outlook integration connected");
|
|
5306
|
+
}
|
|
5307
|
+
};
|
|
5308
|
+
}
|
|
5309
|
+
// src/integrations/teams.ts
|
|
5310
|
+
var logger23 = createLogger("Teams");
|
|
5311
|
+
var TEAMS_SCOPES = [
|
|
5312
|
+
"offline_access",
|
|
5313
|
+
"User.Read",
|
|
5314
|
+
"Team.ReadBasic.All",
|
|
5315
|
+
"Channel.ReadBasic.All",
|
|
5316
|
+
"ChannelMessage.Read.All",
|
|
5317
|
+
"ChannelMessage.Send",
|
|
5318
|
+
"Chat.Read",
|
|
5319
|
+
"Chat.ReadWrite"
|
|
5320
|
+
];
|
|
5321
|
+
var TEAMS_TOOLS = [
|
|
5322
|
+
"teams_get_channel",
|
|
5323
|
+
"teams_get_chat",
|
|
5324
|
+
"teams_get_profile",
|
|
5325
|
+
"teams_get_team",
|
|
5326
|
+
"teams_list_channel_messages",
|
|
5327
|
+
"teams_list_channels",
|
|
5328
|
+
"teams_list_chat_messages",
|
|
5329
|
+
"teams_list_chats",
|
|
5330
|
+
"teams_list_teams",
|
|
5331
|
+
"teams_reply_channel_message",
|
|
5332
|
+
"teams_send_channel_message",
|
|
5333
|
+
"teams_send_chat_message"
|
|
5334
|
+
];
|
|
5335
|
+
function teamsIntegration(config = {}) {
|
|
5336
|
+
const oauth = {
|
|
5337
|
+
provider: "teams",
|
|
5338
|
+
clientId: config.clientId ?? getEnv("TEAMS_CLIENT_ID"),
|
|
5339
|
+
clientSecret: config.clientSecret ?? getEnv("TEAMS_CLIENT_SECRET"),
|
|
5340
|
+
scopes: config.scopes ?? [...TEAMS_SCOPES],
|
|
5341
|
+
optionalScopes: config.optionalScopes,
|
|
5342
|
+
redirectUri: config.redirectUri,
|
|
5343
|
+
config: {
|
|
5344
|
+
...config,
|
|
5345
|
+
authorization_endpoint: "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
|
|
5346
|
+
token_endpoint: "https://login.microsoftonline.com/common/oauth2/v2.0/token",
|
|
5347
|
+
response_type: "code",
|
|
5348
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
5349
|
+
}
|
|
5350
|
+
};
|
|
5351
|
+
return {
|
|
5352
|
+
id: "teams",
|
|
5353
|
+
name: "Microsoft Teams",
|
|
5354
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/teams.png",
|
|
5355
|
+
description: "Collaborate in Teams channels and chats using Microsoft Graph — teams, channels, messages, and profile.",
|
|
5356
|
+
category: "Communication",
|
|
5357
|
+
tools: [...TEAMS_TOOLS],
|
|
5358
|
+
oauth,
|
|
5359
|
+
async onInit(_client) {
|
|
5360
|
+
logger23.debug("Teams integration initialized");
|
|
4787
5361
|
},
|
|
4788
5362
|
async onAfterConnect(_client) {
|
|
4789
|
-
|
|
5363
|
+
logger23.debug("Teams integration connected");
|
|
4790
5364
|
}
|
|
4791
5365
|
};
|
|
4792
5366
|
}
|
|
4793
5367
|
// src/integrations/airtable.ts
|
|
4794
|
-
var
|
|
5368
|
+
var logger24 = createLogger("Airtable");
|
|
4795
5369
|
var AIRTABLE_TOOLS = [
|
|
4796
5370
|
"airtable_list_bases",
|
|
4797
5371
|
"airtable_get_base",
|
|
@@ -4837,15 +5411,99 @@ function airtableIntegration(config = {}) {
|
|
|
4837
5411
|
tools: [...AIRTABLE_TOOLS],
|
|
4838
5412
|
oauth,
|
|
4839
5413
|
async onInit(_client) {
|
|
4840
|
-
|
|
5414
|
+
logger24.debug("Airtable integration initialized");
|
|
5415
|
+
},
|
|
5416
|
+
async onAfterConnect(_client) {
|
|
5417
|
+
logger24.debug("Airtable integration connected");
|
|
5418
|
+
}
|
|
5419
|
+
};
|
|
5420
|
+
}
|
|
5421
|
+
// src/integrations/astronomer.ts
|
|
5422
|
+
var logger25 = createLogger("Astronomer");
|
|
5423
|
+
var ASTRONOMER_TOOLS = [
|
|
5424
|
+
"astronomer_get_self",
|
|
5425
|
+
"astronomer_list_organizations",
|
|
5426
|
+
"astronomer_get_organization",
|
|
5427
|
+
"astronomer_list_workspaces",
|
|
5428
|
+
"astronomer_get_workspace",
|
|
5429
|
+
"astronomer_list_clusters",
|
|
5430
|
+
"astronomer_get_cluster",
|
|
5431
|
+
"astronomer_list_deployments",
|
|
5432
|
+
"astronomer_get_deployment",
|
|
5433
|
+
"astronomer_create_deployment",
|
|
5434
|
+
"astronomer_update_deployment",
|
|
5435
|
+
"astronomer_list_deploys",
|
|
5436
|
+
"astronomer_get_deploy"
|
|
5437
|
+
];
|
|
5438
|
+
function astronomerIntegration(options = {}) {
|
|
5439
|
+
const apiToken = options.apiToken ?? getEnv("ASTRO_API_TOKEN") ?? getEnv("ASTRONOMER_API_TOKEN");
|
|
5440
|
+
if (!apiToken) {
|
|
5441
|
+
throw new Error("astronomerIntegration requires apiToken or ASTRO_API_TOKEN / ASTRONOMER_API_TOKEN environment variable");
|
|
5442
|
+
}
|
|
5443
|
+
return {
|
|
5444
|
+
id: "astronomer",
|
|
5445
|
+
name: "Astronomer",
|
|
5446
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/astronomer.png",
|
|
5447
|
+
description: "Manage Astro organizations, workspaces, deployments, clusters, and deploy history via the Astro API v1",
|
|
5448
|
+
category: "Infrastructure",
|
|
5449
|
+
tools: [...ASTRONOMER_TOOLS],
|
|
5450
|
+
authType: "apiKey",
|
|
5451
|
+
getHeaders() {
|
|
5452
|
+
return {
|
|
5453
|
+
Authorization: `Bearer ${apiToken}`
|
|
5454
|
+
};
|
|
5455
|
+
},
|
|
5456
|
+
async onInit(_client) {
|
|
5457
|
+
logger25.debug("Astronomer integration initialized");
|
|
5458
|
+
},
|
|
5459
|
+
async onAfterConnect(_client) {
|
|
5460
|
+
logger25.debug("Astronomer integration connected");
|
|
5461
|
+
}
|
|
5462
|
+
};
|
|
5463
|
+
}
|
|
5464
|
+
// src/integrations/betterstack.ts
|
|
5465
|
+
var logger26 = createLogger("BetterStack");
|
|
5466
|
+
var BETTERSTACK_TOOLS = [
|
|
5467
|
+
"betterstack_list_sources",
|
|
5468
|
+
"betterstack_get_source",
|
|
5469
|
+
"betterstack_create_source",
|
|
5470
|
+
"betterstack_update_source",
|
|
5471
|
+
"betterstack_delete_source",
|
|
5472
|
+
"betterstack_list_source_groups",
|
|
5473
|
+
"betterstack_get_source_group",
|
|
5474
|
+
"betterstack_update_source_group",
|
|
5475
|
+
"betterstack_list_collectors",
|
|
5476
|
+
"betterstack_list_source_metrics",
|
|
5477
|
+
"betterstack_ingest_logs"
|
|
5478
|
+
];
|
|
5479
|
+
function betterstackIntegration(options = {}) {
|
|
5480
|
+
const apiKey = options.apiKey ?? getEnv("BETTERSTACK_API_KEY");
|
|
5481
|
+
if (!apiKey) {
|
|
5482
|
+
throw new Error("betterstackIntegration requires apiKey or BETTERSTACK_API_KEY environment variable");
|
|
5483
|
+
}
|
|
5484
|
+
return {
|
|
5485
|
+
id: "betterstack",
|
|
5486
|
+
name: "Better Stack",
|
|
5487
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/betterstack.png",
|
|
5488
|
+
description: "Ingest and manage log sources, collectors, and metrics with Better Stack Logs (Logtail) Telemetry API",
|
|
5489
|
+
category: "Infrastructure",
|
|
5490
|
+
tools: [...BETTERSTACK_TOOLS],
|
|
5491
|
+
authType: "apiKey",
|
|
5492
|
+
getHeaders() {
|
|
5493
|
+
return {
|
|
5494
|
+
Authorization: `Bearer ${apiKey}`
|
|
5495
|
+
};
|
|
5496
|
+
},
|
|
5497
|
+
async onInit(_client) {
|
|
5498
|
+
logger26.debug("Better Stack integration initialized");
|
|
4841
5499
|
},
|
|
4842
5500
|
async onAfterConnect(_client) {
|
|
4843
|
-
|
|
5501
|
+
logger26.debug("Better Stack integration connected");
|
|
4844
5502
|
}
|
|
4845
5503
|
};
|
|
4846
5504
|
}
|
|
4847
5505
|
// src/integrations/todoist.ts
|
|
4848
|
-
var
|
|
5506
|
+
var logger27 = createLogger("Todoist");
|
|
4849
5507
|
var TODOIST_TOOLS = [
|
|
4850
5508
|
"todoist_list_projects",
|
|
4851
5509
|
"todoist_get_project",
|
|
@@ -4900,15 +5558,15 @@ function todoistIntegration(config = {}) {
|
|
|
4900
5558
|
tools: [...TODOIST_TOOLS],
|
|
4901
5559
|
oauth,
|
|
4902
5560
|
async onInit(_client) {
|
|
4903
|
-
|
|
5561
|
+
logger27.debug("Todoist integration initialized");
|
|
4904
5562
|
},
|
|
4905
5563
|
async onAfterConnect(_client) {
|
|
4906
|
-
|
|
5564
|
+
logger27.debug("Todoist integration connected");
|
|
4907
5565
|
}
|
|
4908
5566
|
};
|
|
4909
5567
|
}
|
|
4910
5568
|
// src/integrations/whatsapp.ts
|
|
4911
|
-
var
|
|
5569
|
+
var logger28 = createLogger("WhatsApp");
|
|
4912
5570
|
var WHATSAPP_TOOLS = [
|
|
4913
5571
|
"whatsapp_send_message",
|
|
4914
5572
|
"whatsapp_reply_message",
|
|
@@ -4932,7 +5590,10 @@ var WHATSAPP_TOOLS = [
|
|
|
4932
5590
|
"whatsapp_update_profile",
|
|
4933
5591
|
"whatsapp_get_message_status",
|
|
4934
5592
|
"whatsapp_create_qr_code",
|
|
4935
|
-
"
|
|
5593
|
+
"whatsapp_update_qr_code",
|
|
5594
|
+
"whatsapp_list_qr_codes",
|
|
5595
|
+
"whatsapp_get_qr_code",
|
|
5596
|
+
"whatsapp_delete_qr_code"
|
|
4936
5597
|
];
|
|
4937
5598
|
function whatsappIntegration(config = {}) {
|
|
4938
5599
|
const oauth = {
|
|
@@ -4954,15 +5615,15 @@ function whatsappIntegration(config = {}) {
|
|
|
4954
5615
|
tools: [...WHATSAPP_TOOLS],
|
|
4955
5616
|
oauth,
|
|
4956
5617
|
async onInit(_client) {
|
|
4957
|
-
|
|
5618
|
+
logger28.debug("WhatsApp Business integration initialized");
|
|
4958
5619
|
},
|
|
4959
5620
|
async onAfterConnect(_client) {
|
|
4960
|
-
|
|
5621
|
+
logger28.debug("WhatsApp Business integration connected");
|
|
4961
5622
|
}
|
|
4962
5623
|
};
|
|
4963
5624
|
}
|
|
4964
5625
|
// src/integrations/calcom.ts
|
|
4965
|
-
var
|
|
5626
|
+
var logger29 = createLogger("Cal.com");
|
|
4966
5627
|
var CALCOM_TOOLS = [
|
|
4967
5628
|
"calcom_list_bookings",
|
|
4968
5629
|
"calcom_get_booking",
|
|
@@ -5038,15 +5699,15 @@ function calcomIntegration(config = {}) {
|
|
|
5038
5699
|
tools: [...CALCOM_TOOLS],
|
|
5039
5700
|
oauth,
|
|
5040
5701
|
async onInit(_client) {
|
|
5041
|
-
|
|
5702
|
+
logger29.debug("Cal.com integration initialized");
|
|
5042
5703
|
},
|
|
5043
5704
|
async onAfterConnect(_client) {
|
|
5044
|
-
|
|
5705
|
+
logger29.debug("Cal.com integration connected");
|
|
5045
5706
|
}
|
|
5046
5707
|
};
|
|
5047
5708
|
}
|
|
5048
5709
|
// src/integrations/ramp.ts
|
|
5049
|
-
var
|
|
5710
|
+
var logger30 = createLogger("Ramp");
|
|
5050
5711
|
var RAMP_TOOLS = [
|
|
5051
5712
|
"ramp_list_transactions",
|
|
5052
5713
|
"ramp_get_transaction",
|
|
@@ -5078,23 +5739,26 @@ function rampIntegration(config = {}) {
|
|
|
5078
5739
|
tools: [...RAMP_TOOLS],
|
|
5079
5740
|
oauth,
|
|
5080
5741
|
async onInit(_client) {
|
|
5081
|
-
|
|
5742
|
+
logger30.debug("Ramp integration initialized");
|
|
5082
5743
|
},
|
|
5083
5744
|
async onAfterConnect(_client) {
|
|
5084
|
-
|
|
5745
|
+
logger30.debug("Ramp integration connected");
|
|
5085
5746
|
}
|
|
5086
5747
|
};
|
|
5087
5748
|
}
|
|
5088
5749
|
// src/integrations/onedrive.ts
|
|
5089
|
-
var
|
|
5750
|
+
var logger31 = createLogger("OneDrive");
|
|
5090
5751
|
var ONEDRIVE_TOOLS = [
|
|
5091
|
-
"
|
|
5092
|
-
"onedrive_get_file",
|
|
5093
|
-
"onedrive_download_file",
|
|
5094
|
-
"onedrive_upload_file",
|
|
5752
|
+
"onedrive_create_folder",
|
|
5095
5753
|
"onedrive_delete_file",
|
|
5754
|
+
"onedrive_download_file",
|
|
5755
|
+
"onedrive_get_file",
|
|
5756
|
+
"onedrive_list_files",
|
|
5757
|
+
"onedrive_list_permissions",
|
|
5758
|
+
"onedrive_remove_permission",
|
|
5096
5759
|
"onedrive_search_files",
|
|
5097
|
-
"onedrive_share_file"
|
|
5760
|
+
"onedrive_share_file",
|
|
5761
|
+
"onedrive_upload_file"
|
|
5098
5762
|
];
|
|
5099
5763
|
function onedriveIntegration(config = {}) {
|
|
5100
5764
|
const oauth = {
|
|
@@ -5115,15 +5779,47 @@ function onedriveIntegration(config = {}) {
|
|
|
5115
5779
|
tools: [...ONEDRIVE_TOOLS],
|
|
5116
5780
|
oauth,
|
|
5117
5781
|
async onInit(_client) {
|
|
5118
|
-
|
|
5782
|
+
logger31.debug("OneDrive integration initialized");
|
|
5119
5783
|
},
|
|
5120
5784
|
async onAfterConnect(_client) {
|
|
5121
|
-
|
|
5785
|
+
logger31.debug("OneDrive integration connected");
|
|
5122
5786
|
}
|
|
5123
5787
|
};
|
|
5124
5788
|
}
|
|
5789
|
+
// src/integrations/planner.ts
|
|
5790
|
+
var PLANNER_TOOLS = [
|
|
5791
|
+
"planner_create_bucket",
|
|
5792
|
+
"planner_create_plan",
|
|
5793
|
+
"planner_create_task",
|
|
5794
|
+
"planner_delete_task",
|
|
5795
|
+
"planner_get_plan",
|
|
5796
|
+
"planner_get_task",
|
|
5797
|
+
"planner_get_task_details",
|
|
5798
|
+
"planner_list_buckets",
|
|
5799
|
+
"planner_list_group_plans",
|
|
5800
|
+
"planner_list_my_plans",
|
|
5801
|
+
"planner_list_my_tasks",
|
|
5802
|
+
"planner_list_plan_tasks",
|
|
5803
|
+
"planner_update_task"
|
|
5804
|
+
];
|
|
5805
|
+
function plannerIntegration(config = {}) {
|
|
5806
|
+
const oauth = {
|
|
5807
|
+
provider: "planner",
|
|
5808
|
+
clientId: config.clientId ?? getEnv("PLANNER_CLIENT_ID"),
|
|
5809
|
+
clientSecret: config.clientSecret ?? getEnv("PLANNER_CLIENT_SECRET"),
|
|
5810
|
+
scopes: config.scopes ?? ["Tasks.ReadWrite", "Group.Read.All", "offline_access"],
|
|
5811
|
+
optionalScopes: config.optionalScopes,
|
|
5812
|
+
redirectUri: config.redirectUri
|
|
5813
|
+
};
|
|
5814
|
+
return {
|
|
5815
|
+
id: "planner",
|
|
5816
|
+
name: "Microsoft Planner",
|
|
5817
|
+
tools: [...PLANNER_TOOLS],
|
|
5818
|
+
oauth
|
|
5819
|
+
};
|
|
5820
|
+
}
|
|
5125
5821
|
// src/integrations/dropbox.ts
|
|
5126
|
-
var
|
|
5822
|
+
var logger32 = createLogger("Dropbox");
|
|
5127
5823
|
var DROPBOX_TOOLS = [
|
|
5128
5824
|
"dropbox_get_current_account",
|
|
5129
5825
|
"dropbox_get_space_usage",
|
|
@@ -5165,20 +5861,79 @@ function dropboxIntegration(options = {}) {
|
|
|
5165
5861
|
authType: "oauth",
|
|
5166
5862
|
oauth,
|
|
5167
5863
|
async onInit(_client) {
|
|
5168
|
-
|
|
5864
|
+
logger32.debug("Dropbox integration initialized");
|
|
5865
|
+
},
|
|
5866
|
+
async onAfterConnect(_client) {
|
|
5867
|
+
logger32.debug("Dropbox integration connected");
|
|
5868
|
+
}
|
|
5869
|
+
};
|
|
5870
|
+
}
|
|
5871
|
+
// src/integrations/paper.ts
|
|
5872
|
+
var logger33 = createLogger("Paper");
|
|
5873
|
+
var PAPER_SCOPES = [
|
|
5874
|
+
"account_info.read",
|
|
5875
|
+
"files.metadata.read",
|
|
5876
|
+
"files.content.read",
|
|
5877
|
+
"files.content.write"
|
|
5878
|
+
];
|
|
5879
|
+
var PAPER_TOOLS = [
|
|
5880
|
+
"paper_create_doc",
|
|
5881
|
+
"paper_update_doc",
|
|
5882
|
+
"paper_export_doc"
|
|
5883
|
+
];
|
|
5884
|
+
function resolveClientId(config) {
|
|
5885
|
+
return config.clientId ?? getEnv("PAPER_CLIENT_ID") ?? getEnv("DROPBOX_CLIENT_ID");
|
|
5886
|
+
}
|
|
5887
|
+
function resolveClientSecret(config) {
|
|
5888
|
+
return config.clientSecret ?? getEnv("PAPER_CLIENT_SECRET") ?? getEnv("DROPBOX_CLIENT_SECRET");
|
|
5889
|
+
}
|
|
5890
|
+
function paperIntegration(config = {}) {
|
|
5891
|
+
if (config.scopes !== undefined && (!Array.isArray(config.scopes) || config.scopes.some((scope) => typeof scope !== "string"))) {
|
|
5892
|
+
throw new Error("paperIntegration scopes must be an array of strings");
|
|
5893
|
+
}
|
|
5894
|
+
const oauth = {
|
|
5895
|
+
provider: "paper",
|
|
5896
|
+
clientId: resolveClientId(config),
|
|
5897
|
+
clientSecret: resolveClientSecret(config),
|
|
5898
|
+
scopes: config.scopes ?? [...PAPER_SCOPES],
|
|
5899
|
+
optionalScopes: config.optionalScopes,
|
|
5900
|
+
redirectUri: config.redirectUri,
|
|
5901
|
+
config: {
|
|
5902
|
+
authorization_endpoint: "https://www.dropbox.com/oauth2/authorize",
|
|
5903
|
+
token_endpoint: "https://api.dropboxapi.com/oauth2/token",
|
|
5904
|
+
response_type: "code",
|
|
5905
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
5906
|
+
}
|
|
5907
|
+
};
|
|
5908
|
+
return {
|
|
5909
|
+
id: "paper",
|
|
5910
|
+
name: "Dropbox Paper",
|
|
5911
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/paper.png",
|
|
5912
|
+
description: "Create, update, and export Dropbox Paper documents",
|
|
5913
|
+
category: "Productivity",
|
|
5914
|
+
tools: [...PAPER_TOOLS],
|
|
5915
|
+
authType: "oauth",
|
|
5916
|
+
oauth,
|
|
5917
|
+
async onInit(_client) {
|
|
5918
|
+
logger33.debug("Paper integration initialized");
|
|
5169
5919
|
},
|
|
5170
5920
|
async onAfterConnect(_client) {
|
|
5171
|
-
|
|
5921
|
+
logger33.debug("Paper integration connected");
|
|
5172
5922
|
}
|
|
5173
5923
|
};
|
|
5174
5924
|
}
|
|
5175
5925
|
// src/integrations/gdocs.ts
|
|
5176
|
-
var
|
|
5926
|
+
var logger34 = createLogger("Google Docs");
|
|
5177
5927
|
var GDOCS_TOOLS = [
|
|
5178
|
-
"gdocs_list",
|
|
5179
|
-
"gdocs_get",
|
|
5180
|
-
"gdocs_create",
|
|
5181
5928
|
"gdocs_append_text",
|
|
5929
|
+
"gdocs_batch_update",
|
|
5930
|
+
"gdocs_create",
|
|
5931
|
+
"gdocs_create_comment",
|
|
5932
|
+
"gdocs_delete",
|
|
5933
|
+
"gdocs_delete_comment",
|
|
5934
|
+
"gdocs_get",
|
|
5935
|
+
"gdocs_list",
|
|
5936
|
+
"gdocs_list_comments",
|
|
5182
5937
|
"gdocs_replace_text"
|
|
5183
5938
|
];
|
|
5184
5939
|
function gdocsIntegration(config = {}) {
|
|
@@ -5198,24 +5953,26 @@ function gdocsIntegration(config = {}) {
|
|
|
5198
5953
|
tools: [...GDOCS_TOOLS],
|
|
5199
5954
|
oauth,
|
|
5200
5955
|
async onInit(_client) {
|
|
5201
|
-
|
|
5956
|
+
logger34.debug("Google Docs integration initialized");
|
|
5202
5957
|
},
|
|
5203
5958
|
async onAfterConnect(_client) {
|
|
5204
|
-
|
|
5959
|
+
logger34.debug("Google Docs integration connected");
|
|
5205
5960
|
}
|
|
5206
5961
|
};
|
|
5207
5962
|
}
|
|
5208
5963
|
// src/integrations/gsheets.ts
|
|
5209
|
-
var
|
|
5964
|
+
var logger35 = createLogger("Google Sheets");
|
|
5210
5965
|
var GSHEETS_TOOLS = [
|
|
5211
|
-
"gsheets_list",
|
|
5212
|
-
"gsheets_get",
|
|
5213
|
-
"gsheets_get_values",
|
|
5214
|
-
"gsheets_update_values",
|
|
5215
|
-
"gsheets_create",
|
|
5216
5966
|
"gsheets_append_values",
|
|
5967
|
+
"gsheets_batch_update",
|
|
5968
|
+
"gsheets_batch_update_values",
|
|
5217
5969
|
"gsheets_clear_values",
|
|
5218
|
-
"
|
|
5970
|
+
"gsheets_create",
|
|
5971
|
+
"gsheets_delete",
|
|
5972
|
+
"gsheets_get",
|
|
5973
|
+
"gsheets_get_values",
|
|
5974
|
+
"gsheets_list",
|
|
5975
|
+
"gsheets_update_values"
|
|
5219
5976
|
];
|
|
5220
5977
|
function gsheetsIntegration(config = {}) {
|
|
5221
5978
|
const oauth = {
|
|
@@ -5234,22 +5991,24 @@ function gsheetsIntegration(config = {}) {
|
|
|
5234
5991
|
tools: [...GSHEETS_TOOLS],
|
|
5235
5992
|
oauth,
|
|
5236
5993
|
async onInit(_client) {
|
|
5237
|
-
|
|
5994
|
+
logger35.debug("Google Sheets integration initialized");
|
|
5238
5995
|
},
|
|
5239
5996
|
async onAfterConnect(_client) {
|
|
5240
|
-
|
|
5997
|
+
logger35.debug("Google Sheets integration connected");
|
|
5241
5998
|
}
|
|
5242
5999
|
};
|
|
5243
6000
|
}
|
|
5244
6001
|
// src/integrations/gslides.ts
|
|
5245
|
-
var
|
|
6002
|
+
var logger36 = createLogger("Google Slides");
|
|
5246
6003
|
var GSLIDES_TOOLS = [
|
|
5247
|
-
"gslides_list",
|
|
5248
|
-
"gslides_get",
|
|
5249
|
-
"gslides_get_page",
|
|
5250
|
-
"gslides_create",
|
|
5251
6004
|
"gslides_add_slide",
|
|
6005
|
+
"gslides_batch_update",
|
|
6006
|
+
"gslides_create",
|
|
6007
|
+
"gslides_delete",
|
|
5252
6008
|
"gslides_delete_slide",
|
|
6009
|
+
"gslides_get",
|
|
6010
|
+
"gslides_get_page",
|
|
6011
|
+
"gslides_list",
|
|
5253
6012
|
"gslides_update_text"
|
|
5254
6013
|
];
|
|
5255
6014
|
function gslidesIntegration(config = {}) {
|
|
@@ -5269,15 +6028,15 @@ function gslidesIntegration(config = {}) {
|
|
|
5269
6028
|
tools: [...GSLIDES_TOOLS],
|
|
5270
6029
|
oauth,
|
|
5271
6030
|
async onInit(_client) {
|
|
5272
|
-
|
|
6031
|
+
logger36.debug("Google Slides integration initialized");
|
|
5273
6032
|
},
|
|
5274
6033
|
async onAfterConnect(_client) {
|
|
5275
|
-
|
|
6034
|
+
logger36.debug("Google Slides integration connected");
|
|
5276
6035
|
}
|
|
5277
6036
|
};
|
|
5278
6037
|
}
|
|
5279
6038
|
// src/integrations/polar.ts
|
|
5280
|
-
var
|
|
6039
|
+
var logger37 = createLogger("Polar");
|
|
5281
6040
|
var POLAR_TOOLS = [
|
|
5282
6041
|
"polar_list_products",
|
|
5283
6042
|
"polar_get_product",
|
|
@@ -5334,15 +6093,178 @@ function polarIntegration(config = {}) {
|
|
|
5334
6093
|
tools: [...POLAR_TOOLS],
|
|
5335
6094
|
oauth,
|
|
5336
6095
|
async onInit(_client) {
|
|
5337
|
-
|
|
6096
|
+
logger37.debug("Polar integration initialized");
|
|
6097
|
+
},
|
|
6098
|
+
async onAfterConnect(_client) {
|
|
6099
|
+
logger37.debug("Polar integration connected");
|
|
6100
|
+
}
|
|
6101
|
+
};
|
|
6102
|
+
}
|
|
6103
|
+
// src/integrations/supabase.ts
|
|
6104
|
+
var logger38 = createLogger("Supabase");
|
|
6105
|
+
var SUPABASE_API_BASE = "https://api.supabase.com";
|
|
6106
|
+
var SUPABASE_TOOLS = [
|
|
6107
|
+
"supabase_get_profile",
|
|
6108
|
+
"supabase_list_organizations",
|
|
6109
|
+
"supabase_get_organization",
|
|
6110
|
+
"supabase_list_organization_projects",
|
|
6111
|
+
"supabase_list_projects",
|
|
6112
|
+
"supabase_get_project",
|
|
6113
|
+
"supabase_create_project",
|
|
6114
|
+
"supabase_update_project",
|
|
6115
|
+
"supabase_delete_project",
|
|
6116
|
+
"supabase_list_project_api_keys",
|
|
6117
|
+
"supabase_create_project_api_key",
|
|
6118
|
+
"supabase_delete_project_api_key",
|
|
6119
|
+
"supabase_list_project_secrets",
|
|
6120
|
+
"supabase_list_project_branches",
|
|
6121
|
+
"supabase_get_project_health",
|
|
6122
|
+
"supabase_get_database_postgres_config",
|
|
6123
|
+
"supabase_list_available_regions"
|
|
6124
|
+
];
|
|
6125
|
+
function supabaseIntegration(config = {}) {
|
|
6126
|
+
const pat = config.accessToken ?? getEnv("SUPABASE_ACCESS_TOKEN");
|
|
6127
|
+
if (pat) {
|
|
6128
|
+
return {
|
|
6129
|
+
id: "supabase",
|
|
6130
|
+
name: "Supabase",
|
|
6131
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/supabase.png",
|
|
6132
|
+
description: "Manage Supabase organizations, projects, Postgres settings, API keys, secrets, and branches via the Management API",
|
|
6133
|
+
category: "Infrastructure",
|
|
6134
|
+
tools: [...SUPABASE_TOOLS],
|
|
6135
|
+
authType: "apiKey",
|
|
6136
|
+
getHeaders() {
|
|
6137
|
+
return {
|
|
6138
|
+
Authorization: `Bearer ${pat}`
|
|
6139
|
+
};
|
|
6140
|
+
},
|
|
6141
|
+
async onInit(_client) {
|
|
6142
|
+
logger38.debug("Supabase integration initialized (personal access token)");
|
|
6143
|
+
},
|
|
6144
|
+
async onAfterConnect(_client) {
|
|
6145
|
+
logger38.debug("Supabase integration connected");
|
|
6146
|
+
}
|
|
6147
|
+
};
|
|
6148
|
+
}
|
|
6149
|
+
const oauth = {
|
|
6150
|
+
provider: "supabase",
|
|
6151
|
+
clientId: config.clientId ?? getEnv("SUPABASE_CLIENT_ID"),
|
|
6152
|
+
clientSecret: config.clientSecret ?? getEnv("SUPABASE_CLIENT_SECRET"),
|
|
6153
|
+
scopes: config.scopes ?? [],
|
|
6154
|
+
optionalScopes: config.optionalScopes,
|
|
6155
|
+
redirectUri: config.redirectUri,
|
|
6156
|
+
config: {
|
|
6157
|
+
apiBaseUrl: SUPABASE_API_BASE,
|
|
6158
|
+
authorization_endpoint: `${SUPABASE_API_BASE}/v1/oauth/authorize`,
|
|
6159
|
+
token_endpoint: `${SUPABASE_API_BASE}/v1/oauth/token`,
|
|
6160
|
+
token_auth_method: "client_secret_basic",
|
|
6161
|
+
response_type: "code",
|
|
6162
|
+
grant_types_supported: ["authorization_code", "refresh_token"],
|
|
6163
|
+
code_challenge_method: "S256"
|
|
6164
|
+
}
|
|
6165
|
+
};
|
|
6166
|
+
return {
|
|
6167
|
+
id: "supabase",
|
|
6168
|
+
name: "Supabase",
|
|
6169
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/supabase.png",
|
|
6170
|
+
description: "Manage Supabase organizations, projects, Postgres settings, API keys, secrets, and branches via the Management API",
|
|
6171
|
+
category: "Infrastructure",
|
|
6172
|
+
tools: [...SUPABASE_TOOLS],
|
|
6173
|
+
oauth,
|
|
6174
|
+
async onInit(_client) {
|
|
6175
|
+
logger38.debug("Supabase integration initialized");
|
|
5338
6176
|
},
|
|
5339
6177
|
async onAfterConnect(_client) {
|
|
5340
|
-
|
|
6178
|
+
logger38.debug("Supabase integration connected");
|
|
6179
|
+
}
|
|
6180
|
+
};
|
|
6181
|
+
}
|
|
6182
|
+
// src/integrations/phantom.ts
|
|
6183
|
+
var logger39 = createLogger("Phantom");
|
|
6184
|
+
var PHANTOM_TOOLS = [
|
|
6185
|
+
"phantom_build_browse_deeplink",
|
|
6186
|
+
"phantom_deeplink_provider_reference"
|
|
6187
|
+
];
|
|
6188
|
+
function buildPhantomBrowseDeeplink(params) {
|
|
6189
|
+
const target = new URL(params.url);
|
|
6190
|
+
const ref = new URL(params.ref);
|
|
6191
|
+
if (target.protocol !== "https:" || ref.protocol !== "https:") {
|
|
6192
|
+
throw new Error("Phantom browse deeplinks require https url and ref values");
|
|
6193
|
+
}
|
|
6194
|
+
return `https://phantom.app/ul/browse/${encodeURIComponent(target.toString())}?ref=${encodeURIComponent(ref.toString())}`;
|
|
6195
|
+
}
|
|
6196
|
+
function phantomIntegration(_options = {}) {
|
|
6197
|
+
return {
|
|
6198
|
+
id: "phantom",
|
|
6199
|
+
name: "Phantom",
|
|
6200
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/phantom.png",
|
|
6201
|
+
description: "Build Phantom mobile universal links and expose provider deeplink reference data",
|
|
6202
|
+
category: "Other",
|
|
6203
|
+
tools: [...PHANTOM_TOOLS],
|
|
6204
|
+
async onInit(_client) {
|
|
6205
|
+
logger39.debug("Phantom integration initialized");
|
|
6206
|
+
},
|
|
6207
|
+
async onAfterConnect(_client) {
|
|
6208
|
+
logger39.debug("Phantom integration connected");
|
|
6209
|
+
}
|
|
6210
|
+
};
|
|
6211
|
+
}
|
|
6212
|
+
// src/integrations/facebook.ts
|
|
6213
|
+
var logger40 = createLogger("Facebook");
|
|
6214
|
+
var FACEBOOK_SCOPES = [
|
|
6215
|
+
"public_profile",
|
|
6216
|
+
"email",
|
|
6217
|
+
"pages_show_list",
|
|
6218
|
+
"pages_read_engagement",
|
|
6219
|
+
"pages_manage_posts",
|
|
6220
|
+
"pages_read_user_content",
|
|
6221
|
+
"pages_manage_engagement"
|
|
6222
|
+
];
|
|
6223
|
+
var FACEBOOK_TOOLS = [
|
|
6224
|
+
"facebook_get_me",
|
|
6225
|
+
"facebook_list_pages",
|
|
6226
|
+
"facebook_list_page_posts",
|
|
6227
|
+
"facebook_get_object",
|
|
6228
|
+
"facebook_create_page_post",
|
|
6229
|
+
"facebook_delete_object",
|
|
6230
|
+
"facebook_list_comments",
|
|
6231
|
+
"facebook_publish_comment",
|
|
6232
|
+
"facebook_get_insights",
|
|
6233
|
+
"facebook_set_comment_visibility",
|
|
6234
|
+
"facebook_like_object"
|
|
6235
|
+
];
|
|
6236
|
+
function facebookIntegration(config = {}) {
|
|
6237
|
+
const oauth = {
|
|
6238
|
+
provider: "facebook",
|
|
6239
|
+
clientId: config.clientId ?? getEnv("FACEBOOK_CLIENT_ID"),
|
|
6240
|
+
clientSecret: config.clientSecret ?? getEnv("FACEBOOK_CLIENT_SECRET"),
|
|
6241
|
+
scopes: config.scopes ?? [...FACEBOOK_SCOPES],
|
|
6242
|
+
redirectUri: config.redirectUri,
|
|
6243
|
+
config: {
|
|
6244
|
+
authorization_endpoint: "https://www.facebook.com/v18.0/dialog/oauth",
|
|
6245
|
+
token_endpoint: "https://graph.facebook.com/v18.0/oauth/access_token",
|
|
6246
|
+
response_type: "code",
|
|
6247
|
+
grant_types_supported: ["authorization_code"]
|
|
6248
|
+
}
|
|
6249
|
+
};
|
|
6250
|
+
return {
|
|
6251
|
+
id: "facebook",
|
|
6252
|
+
name: "Facebook",
|
|
6253
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/facebook.png",
|
|
6254
|
+
description: "Manage Facebook Page posts, comments, reactions, and insights via the Graph API",
|
|
6255
|
+
category: "Social Media",
|
|
6256
|
+
tools: [...FACEBOOK_TOOLS],
|
|
6257
|
+
oauth,
|
|
6258
|
+
async onInit(_client) {
|
|
6259
|
+
logger40.debug("Facebook integration initialized");
|
|
6260
|
+
},
|
|
6261
|
+
async onAfterConnect(_client) {
|
|
6262
|
+
logger40.debug("Facebook integration connected");
|
|
5341
6263
|
}
|
|
5342
6264
|
};
|
|
5343
6265
|
}
|
|
5344
6266
|
// src/integrations/figma.ts
|
|
5345
|
-
var
|
|
6267
|
+
var logger41 = createLogger("Figma");
|
|
5346
6268
|
var FIGMA_TOOLS = [
|
|
5347
6269
|
"figma_get_file",
|
|
5348
6270
|
"figma_get_file_nodes",
|
|
@@ -5408,15 +6330,15 @@ function figmaIntegration(config = {}) {
|
|
|
5408
6330
|
tools: [...FIGMA_TOOLS],
|
|
5409
6331
|
oauth,
|
|
5410
6332
|
async onInit(_client) {
|
|
5411
|
-
|
|
6333
|
+
logger41.debug("Figma integration initialized");
|
|
5412
6334
|
},
|
|
5413
6335
|
async onAfterConnect(_client) {
|
|
5414
|
-
|
|
6336
|
+
logger41.debug("Figma integration connected");
|
|
5415
6337
|
}
|
|
5416
6338
|
};
|
|
5417
6339
|
}
|
|
5418
6340
|
// src/integrations/intercom.ts
|
|
5419
|
-
var
|
|
6341
|
+
var logger42 = createLogger("Intercom");
|
|
5420
6342
|
var INTERCOM_TOOLS = [
|
|
5421
6343
|
"intercom_list_contacts",
|
|
5422
6344
|
"intercom_get_contact",
|
|
@@ -5447,15 +6369,15 @@ function intercomIntegration(config = {}) {
|
|
|
5447
6369
|
tools: [...INTERCOM_TOOLS],
|
|
5448
6370
|
oauth,
|
|
5449
6371
|
async onInit(_client) {
|
|
5450
|
-
|
|
6372
|
+
logger42.debug("Intercom integration initialized");
|
|
5451
6373
|
},
|
|
5452
6374
|
async onAfterConnect(_client) {
|
|
5453
|
-
|
|
6375
|
+
logger42.debug("Intercom integration connected");
|
|
5454
6376
|
}
|
|
5455
6377
|
};
|
|
5456
6378
|
}
|
|
5457
6379
|
// src/integrations/hubspot.ts
|
|
5458
|
-
var
|
|
6380
|
+
var logger43 = createLogger("HubSpot");
|
|
5459
6381
|
var HUBSPOT_TOOLS = [
|
|
5460
6382
|
"hubspot_list_contacts",
|
|
5461
6383
|
"hubspot_get_contact",
|
|
@@ -5505,69 +6427,127 @@ function hubspotIntegration(config = {}) {
|
|
|
5505
6427
|
tools: [...HUBSPOT_TOOLS],
|
|
5506
6428
|
oauth,
|
|
5507
6429
|
async onInit(_client) {
|
|
5508
|
-
|
|
6430
|
+
logger43.debug("HubSpot integration initialized");
|
|
5509
6431
|
},
|
|
5510
6432
|
async onAfterConnect(_client) {
|
|
5511
|
-
|
|
6433
|
+
logger43.debug("HubSpot integration connected");
|
|
5512
6434
|
}
|
|
5513
6435
|
};
|
|
5514
6436
|
}
|
|
5515
|
-
// src/integrations/
|
|
5516
|
-
var
|
|
5517
|
-
var
|
|
5518
|
-
"
|
|
5519
|
-
"
|
|
5520
|
-
"
|
|
5521
|
-
"
|
|
5522
|
-
"
|
|
5523
|
-
"
|
|
5524
|
-
"youtube_list_playlists",
|
|
5525
|
-
"youtube_get_playlist",
|
|
5526
|
-
"youtube_list_playlist_items",
|
|
5527
|
-
"youtube_list_subscriptions",
|
|
5528
|
-
"youtube_list_comments",
|
|
5529
|
-
"youtube_list_comment_replies",
|
|
5530
|
-
"youtube_get_captions",
|
|
5531
|
-
"youtube_rate_video",
|
|
5532
|
-
"youtube_subscribe",
|
|
5533
|
-
"youtube_unsubscribe",
|
|
5534
|
-
"youtube_add_comment",
|
|
5535
|
-
"youtube_reply_to_comment",
|
|
5536
|
-
"youtube_create_playlist",
|
|
5537
|
-
"youtube_update_playlist",
|
|
5538
|
-
"youtube_delete_playlist",
|
|
5539
|
-
"youtube_add_to_playlist",
|
|
5540
|
-
"youtube_remove_from_playlist",
|
|
5541
|
-
"youtube_update_video"
|
|
6437
|
+
// src/integrations/instagram.ts
|
|
6438
|
+
var logger44 = createLogger("Instagram");
|
|
6439
|
+
var INSTAGRAM_SCOPES = [
|
|
6440
|
+
"pages_show_list",
|
|
6441
|
+
"pages_read_engagement",
|
|
6442
|
+
"instagram_basic",
|
|
6443
|
+
"instagram_manage_insights",
|
|
6444
|
+
"instagram_manage_comments",
|
|
6445
|
+
"instagram_content_publish"
|
|
5542
6446
|
];
|
|
5543
|
-
|
|
6447
|
+
var INSTAGRAM_TOOLS = [
|
|
6448
|
+
"instagram_list_pages",
|
|
6449
|
+
"instagram_get_profile",
|
|
6450
|
+
"instagram_list_media",
|
|
6451
|
+
"instagram_get_media",
|
|
6452
|
+
"instagram_list_comments",
|
|
6453
|
+
"instagram_reply_comment",
|
|
6454
|
+
"instagram_delete_comment",
|
|
6455
|
+
"instagram_hide_comment",
|
|
6456
|
+
"instagram_get_media_insights",
|
|
6457
|
+
"instagram_get_user_insights",
|
|
6458
|
+
"instagram_create_media_container",
|
|
6459
|
+
"instagram_publish_media",
|
|
6460
|
+
"instagram_list_stories",
|
|
6461
|
+
"instagram_list_tagged_media"
|
|
6462
|
+
];
|
|
6463
|
+
function instagramIntegration(config = {}) {
|
|
5544
6464
|
const oauth = {
|
|
5545
|
-
provider: "
|
|
5546
|
-
clientId: config.clientId ?? getEnv("
|
|
5547
|
-
clientSecret: config.clientSecret ?? getEnv("
|
|
5548
|
-
scopes: config.scopes,
|
|
6465
|
+
provider: "instagram",
|
|
6466
|
+
clientId: config.clientId ?? getEnv("INSTAGRAM_CLIENT_ID"),
|
|
6467
|
+
clientSecret: config.clientSecret ?? getEnv("INSTAGRAM_CLIENT_SECRET"),
|
|
6468
|
+
scopes: config.scopes ?? [...INSTAGRAM_SCOPES],
|
|
5549
6469
|
optionalScopes: config.optionalScopes,
|
|
5550
6470
|
redirectUri: config.redirectUri,
|
|
5551
6471
|
config: {
|
|
6472
|
+
authorization_endpoint: "https://www.facebook.com/v21.0/dialog/oauth",
|
|
6473
|
+
token_endpoint: "https://graph.facebook.com/v21.0/oauth/access_token",
|
|
6474
|
+
response_type: "code",
|
|
6475
|
+
grant_types_supported: ["authorization_code", "refresh_token"],
|
|
5552
6476
|
...config
|
|
5553
6477
|
}
|
|
5554
6478
|
};
|
|
5555
6479
|
return {
|
|
5556
|
-
id: "
|
|
5557
|
-
name: "
|
|
5558
|
-
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/
|
|
6480
|
+
id: "instagram",
|
|
6481
|
+
name: "Instagram",
|
|
6482
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/instagram.png",
|
|
6483
|
+
description: "Instagram Graph API for professional accounts — pages, media, comments, insights, stories, and publishing.",
|
|
6484
|
+
category: "Social Media",
|
|
6485
|
+
tools: [...INSTAGRAM_TOOLS],
|
|
6486
|
+
oauth,
|
|
6487
|
+
async onInit(_client) {
|
|
6488
|
+
logger44.debug("Instagram integration initialized");
|
|
6489
|
+
},
|
|
6490
|
+
async onAfterConnect(_client) {
|
|
6491
|
+
logger44.debug("Instagram integration connected");
|
|
6492
|
+
}
|
|
6493
|
+
};
|
|
6494
|
+
}
|
|
6495
|
+
// src/integrations/youtube.ts
|
|
6496
|
+
var logger45 = createLogger("YouTube");
|
|
6497
|
+
var YOUTUBE_TOOLS = [
|
|
6498
|
+
"youtube_add_comment",
|
|
6499
|
+
"youtube_add_to_playlist",
|
|
6500
|
+
"youtube_create_playlist",
|
|
6501
|
+
"youtube_delete_playlist",
|
|
6502
|
+
"youtube_get_captions",
|
|
6503
|
+
"youtube_get_channel",
|
|
6504
|
+
"youtube_get_my_channel",
|
|
6505
|
+
"youtube_get_playlist",
|
|
6506
|
+
"youtube_get_video",
|
|
6507
|
+
"youtube_get_video_rating",
|
|
6508
|
+
"youtube_list_comment_replies",
|
|
6509
|
+
"youtube_list_comments",
|
|
6510
|
+
"youtube_list_my_videos",
|
|
6511
|
+
"youtube_list_playlist_items",
|
|
6512
|
+
"youtube_list_playlists",
|
|
6513
|
+
"youtube_list_subscriptions",
|
|
6514
|
+
"youtube_rate_video",
|
|
6515
|
+
"youtube_remove_from_playlist",
|
|
6516
|
+
"youtube_reply_to_comment",
|
|
6517
|
+
"youtube_search",
|
|
6518
|
+
"youtube_subscribe",
|
|
6519
|
+
"youtube_unsubscribe",
|
|
6520
|
+
"youtube_update_playlist",
|
|
6521
|
+
"youtube_update_video"
|
|
6522
|
+
];
|
|
6523
|
+
function youtubeIntegration(config = {}) {
|
|
6524
|
+
const oauth = {
|
|
6525
|
+
provider: "youtube",
|
|
6526
|
+
clientId: config.clientId ?? getEnv("YOUTUBE_CLIENT_ID"),
|
|
6527
|
+
clientSecret: config.clientSecret ?? getEnv("YOUTUBE_CLIENT_SECRET"),
|
|
6528
|
+
scopes: config.scopes,
|
|
6529
|
+
optionalScopes: config.optionalScopes,
|
|
6530
|
+
redirectUri: config.redirectUri,
|
|
6531
|
+
config: {
|
|
6532
|
+
...config
|
|
6533
|
+
}
|
|
6534
|
+
};
|
|
6535
|
+
return {
|
|
6536
|
+
id: "youtube",
|
|
6537
|
+
name: "YouTube",
|
|
6538
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/youtube.jpeg",
|
|
5559
6539
|
tools: [...YOUTUBE_TOOLS],
|
|
5560
6540
|
oauth,
|
|
5561
6541
|
async onInit(_client) {
|
|
5562
|
-
|
|
6542
|
+
logger45.debug("YouTube integration initialized");
|
|
5563
6543
|
},
|
|
5564
6544
|
async onAfterConnect(_client) {
|
|
5565
|
-
|
|
6545
|
+
logger45.debug("YouTube integration connected");
|
|
5566
6546
|
}
|
|
5567
6547
|
};
|
|
5568
6548
|
}
|
|
5569
6549
|
// src/integrations/cursor.ts
|
|
5570
|
-
var
|
|
6550
|
+
var logger46 = createLogger("Cursor");
|
|
5571
6551
|
var CURSOR_TOOLS = [
|
|
5572
6552
|
"cursor_list_agents",
|
|
5573
6553
|
"cursor_get_agent",
|
|
@@ -5587,15 +6567,70 @@ function cursorIntegration(_config = {}) {
|
|
|
5587
6567
|
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/cursor.jpeg",
|
|
5588
6568
|
tools: [...CURSOR_TOOLS],
|
|
5589
6569
|
async onInit(_client) {
|
|
5590
|
-
|
|
6570
|
+
logger46.debug("Cursor integration initialized");
|
|
6571
|
+
},
|
|
6572
|
+
async onAfterConnect(_client) {
|
|
6573
|
+
logger46.debug("Cursor integration connected");
|
|
6574
|
+
}
|
|
6575
|
+
};
|
|
6576
|
+
}
|
|
6577
|
+
// src/integrations/databricks.ts
|
|
6578
|
+
var logger47 = createLogger("Databricks");
|
|
6579
|
+
var DATABRICKS_SCOPES = ["all-apis", "offline_access"];
|
|
6580
|
+
var DATABRICKS_TOOLS = [
|
|
6581
|
+
"databricks_current_user",
|
|
6582
|
+
"databricks_clusters_list",
|
|
6583
|
+
"databricks_clusters_get",
|
|
6584
|
+
"databricks_jobs_list",
|
|
6585
|
+
"databricks_jobs_get",
|
|
6586
|
+
"databricks_jobs_run_now",
|
|
6587
|
+
"databricks_sql_warehouses_list",
|
|
6588
|
+
"databricks_workspace_get_status"
|
|
6589
|
+
];
|
|
6590
|
+
function normalizeDatabricksWorkspaceHost(raw) {
|
|
6591
|
+
const value = (raw ?? "").trim().replace(/\/+$/, "");
|
|
6592
|
+
if (!value) {
|
|
6593
|
+
return "";
|
|
6594
|
+
}
|
|
6595
|
+
return /^https?:\/\//i.test(value) ? value : `https://${value}`;
|
|
6596
|
+
}
|
|
6597
|
+
function databricksIntegration(config = {}) {
|
|
6598
|
+
const host = normalizeDatabricksWorkspaceHost(config.workspaceHost ?? getEnv("DATABRICKS_WORKSPACE_HOST"));
|
|
6599
|
+
const placeholder = "https://workspace-host.invalid";
|
|
6600
|
+
const base = host || placeholder;
|
|
6601
|
+
const oauth = {
|
|
6602
|
+
provider: "databricks",
|
|
6603
|
+
clientId: config.clientId ?? getEnv("DATABRICKS_CLIENT_ID"),
|
|
6604
|
+
clientSecret: config.clientSecret ?? getEnv("DATABRICKS_CLIENT_SECRET"),
|
|
6605
|
+
scopes: config.scopes ?? [...DATABRICKS_SCOPES],
|
|
6606
|
+
redirectUri: config.redirectUri,
|
|
6607
|
+
config: {
|
|
6608
|
+
subdomain: host || undefined,
|
|
6609
|
+
authorization_endpoint: `${base}/oidc/v1/authorize`,
|
|
6610
|
+
token_endpoint: `${base}/oidc/v1/token`,
|
|
6611
|
+
response_type: "code",
|
|
6612
|
+
grant_types_supported: ["authorization_code", "refresh_token"],
|
|
6613
|
+
code_challenge_method: "S256"
|
|
6614
|
+
}
|
|
6615
|
+
};
|
|
6616
|
+
return {
|
|
6617
|
+
id: "databricks",
|
|
6618
|
+
name: "Databricks",
|
|
6619
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/databricks.png",
|
|
6620
|
+
description: "Run Databricks jobs, list clusters and SQL warehouses, and inspect workspace paths",
|
|
6621
|
+
category: "Engineering",
|
|
6622
|
+
tools: [...DATABRICKS_TOOLS],
|
|
6623
|
+
oauth,
|
|
6624
|
+
async onInit(_client) {
|
|
6625
|
+
logger47.debug("Databricks integration initialized");
|
|
5591
6626
|
},
|
|
5592
6627
|
async onAfterConnect(_client) {
|
|
5593
|
-
|
|
6628
|
+
logger47.debug("Databricks integration connected");
|
|
5594
6629
|
}
|
|
5595
6630
|
};
|
|
5596
6631
|
}
|
|
5597
6632
|
// src/integrations/posthog.ts
|
|
5598
|
-
var
|
|
6633
|
+
var logger48 = createLogger("PostHog");
|
|
5599
6634
|
var DEFAULT_POSTHOG_BASE_URL = "https://us.posthog.com";
|
|
5600
6635
|
var POSTHOG_SCOPES = [
|
|
5601
6636
|
"openid",
|
|
@@ -5681,15 +6716,54 @@ function posthogIntegration(config = {}) {
|
|
|
5681
6716
|
tools: [...POSTHOG_TOOLS],
|
|
5682
6717
|
oauth,
|
|
5683
6718
|
async onInit(_client) {
|
|
5684
|
-
|
|
6719
|
+
logger48.debug("PostHog integration initialized");
|
|
6720
|
+
},
|
|
6721
|
+
async onAfterConnect(_client) {
|
|
6722
|
+
logger48.debug("PostHog integration connected");
|
|
6723
|
+
}
|
|
6724
|
+
};
|
|
6725
|
+
}
|
|
6726
|
+
// src/integrations/postman.ts
|
|
6727
|
+
var logger49 = createLogger("Postman");
|
|
6728
|
+
var POSTMAN_TOOLS = [
|
|
6729
|
+
"postman_get_me",
|
|
6730
|
+
"postman_list_workspaces",
|
|
6731
|
+
"postman_get_workspace",
|
|
6732
|
+
"postman_list_collections",
|
|
6733
|
+
"postman_get_collection",
|
|
6734
|
+
"postman_delete_collection",
|
|
6735
|
+
"postman_list_environments",
|
|
6736
|
+
"postman_get_environment",
|
|
6737
|
+
"postman_create_collection"
|
|
6738
|
+
];
|
|
6739
|
+
function postmanIntegration(options = {}) {
|
|
6740
|
+
const apiKey = options.apiKey ?? getEnv("POSTMAN_API_KEY");
|
|
6741
|
+
if (!apiKey) {
|
|
6742
|
+
throw new Error("postmanIntegration requires apiKey or POSTMAN_API_KEY environment variable");
|
|
6743
|
+
}
|
|
6744
|
+
return {
|
|
6745
|
+
id: "postman",
|
|
6746
|
+
name: "Postman",
|
|
6747
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/postman.png",
|
|
6748
|
+
description: "Manage Postman workspaces, collections, and environments via the Postman API",
|
|
6749
|
+
category: "Engineering",
|
|
6750
|
+
tools: [...POSTMAN_TOOLS],
|
|
6751
|
+
authType: "apiKey",
|
|
6752
|
+
getHeaders() {
|
|
6753
|
+
return {
|
|
6754
|
+
Authorization: `Bearer ${apiKey}`
|
|
6755
|
+
};
|
|
6756
|
+
},
|
|
6757
|
+
async onInit(_client) {
|
|
6758
|
+
logger49.debug("Postman integration initialized");
|
|
5685
6759
|
},
|
|
5686
6760
|
async onAfterConnect(_client) {
|
|
5687
|
-
|
|
6761
|
+
logger49.debug("Postman integration connected");
|
|
5688
6762
|
}
|
|
5689
6763
|
};
|
|
5690
6764
|
}
|
|
5691
6765
|
// src/integrations/sentry.ts
|
|
5692
|
-
var
|
|
6766
|
+
var logger50 = createLogger("Sentry");
|
|
5693
6767
|
var SENTRY_SCOPES = [
|
|
5694
6768
|
"org:read",
|
|
5695
6769
|
"project:read",
|
|
@@ -5738,15 +6812,89 @@ function sentryIntegration(config = {}) {
|
|
|
5738
6812
|
tools: [...SENTRY_TOOLS],
|
|
5739
6813
|
oauth,
|
|
5740
6814
|
async onInit(_client) {
|
|
5741
|
-
|
|
6815
|
+
logger50.debug("Sentry integration initialized");
|
|
6816
|
+
},
|
|
6817
|
+
async onAfterConnect(_client) {
|
|
6818
|
+
logger50.debug("Sentry integration connected");
|
|
6819
|
+
}
|
|
6820
|
+
};
|
|
6821
|
+
}
|
|
6822
|
+
// src/integrations/datadog.ts
|
|
6823
|
+
var logger51 = createLogger("Datadog");
|
|
6824
|
+
var DATADOG_SCOPES = [
|
|
6825
|
+
"monitors_read",
|
|
6826
|
+
"dashboards_read",
|
|
6827
|
+
"metrics_read",
|
|
6828
|
+
"logs_read_data"
|
|
6829
|
+
];
|
|
6830
|
+
var DATADOG_TOOLS = [
|
|
6831
|
+
"datadog_list_monitors",
|
|
6832
|
+
"datadog_get_monitor",
|
|
6833
|
+
"datadog_list_dashboards",
|
|
6834
|
+
"datadog_get_dashboard",
|
|
6835
|
+
"datadog_search_logs"
|
|
6836
|
+
];
|
|
6837
|
+
function normalizeSite(raw) {
|
|
6838
|
+
const s = (raw ?? "").trim();
|
|
6839
|
+
return s.length > 0 ? s : "datadoghq.com";
|
|
6840
|
+
}
|
|
6841
|
+
function datadogIntegration(config = {}) {
|
|
6842
|
+
const site = normalizeSite(config.site ?? getEnv("DATADOG_SITE"));
|
|
6843
|
+
const apiKey = config.apiKey ?? getEnv("DATADOG_API_KEY");
|
|
6844
|
+
const applicationKey = config.applicationKey ?? getEnv("DATADOG_APPLICATION_KEY");
|
|
6845
|
+
const baseFields = {
|
|
6846
|
+
id: "datadog",
|
|
6847
|
+
name: "Datadog",
|
|
6848
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/datadog.png",
|
|
6849
|
+
description: "List monitors and dashboards and search logs with the Datadog API",
|
|
6850
|
+
category: "Engineering",
|
|
6851
|
+
tools: [...DATADOG_TOOLS],
|
|
6852
|
+
async onInit(_client) {
|
|
6853
|
+
logger51.debug("Datadog integration initialized");
|
|
5742
6854
|
},
|
|
5743
6855
|
async onAfterConnect(_client) {
|
|
5744
|
-
|
|
6856
|
+
logger51.debug("Datadog integration connected");
|
|
6857
|
+
}
|
|
6858
|
+
};
|
|
6859
|
+
if (apiKey || applicationKey) {
|
|
6860
|
+
if (!apiKey || !applicationKey) {
|
|
6861
|
+
throw new Error("datadogIntegration: apiKey and applicationKey must both be set for API key authentication");
|
|
6862
|
+
}
|
|
6863
|
+
return {
|
|
6864
|
+
...baseFields,
|
|
6865
|
+
authType: "apiKey",
|
|
6866
|
+
getHeaders() {
|
|
6867
|
+
return {
|
|
6868
|
+
"DD-API-KEY": apiKey,
|
|
6869
|
+
"DD-APPLICATION-KEY": applicationKey,
|
|
6870
|
+
"DD-SITE": site
|
|
6871
|
+
};
|
|
6872
|
+
}
|
|
6873
|
+
};
|
|
6874
|
+
}
|
|
6875
|
+
const clientId = config.clientId ?? getEnv("DATADOG_CLIENT_ID");
|
|
6876
|
+
const clientSecret = config.clientSecret ?? getEnv("DATADOG_CLIENT_SECRET");
|
|
6877
|
+
const oauth = {
|
|
6878
|
+
provider: "datadog",
|
|
6879
|
+
clientId,
|
|
6880
|
+
clientSecret,
|
|
6881
|
+
scopes: config.scopes ?? [...DATADOG_SCOPES],
|
|
6882
|
+
redirectUri: config.redirectUri,
|
|
6883
|
+
config: {
|
|
6884
|
+
authorization_endpoint: "https://app.datadoghq.com/oauth2/v1/authorize",
|
|
6885
|
+
token_endpoint: "https://api.datadoghq.com/oauth2/v1/token",
|
|
6886
|
+
response_type: "code",
|
|
6887
|
+
grant_types_supported: ["authorization_code", "refresh_token"],
|
|
6888
|
+
subdomain: site
|
|
5745
6889
|
}
|
|
5746
6890
|
};
|
|
6891
|
+
return {
|
|
6892
|
+
...baseFields,
|
|
6893
|
+
oauth
|
|
6894
|
+
};
|
|
5747
6895
|
}
|
|
5748
6896
|
// src/integrations/netlify.ts
|
|
5749
|
-
var
|
|
6897
|
+
var logger52 = createLogger("Netlify");
|
|
5750
6898
|
var NETLIFY_TOOLS = [
|
|
5751
6899
|
"netlify_get_current_user",
|
|
5752
6900
|
"netlify_list_accounts",
|
|
@@ -5809,15 +6957,145 @@ function netlifyIntegration(config = {}) {
|
|
|
5809
6957
|
tools: [...NETLIFY_TOOLS],
|
|
5810
6958
|
oauth,
|
|
5811
6959
|
async onInit(_client) {
|
|
5812
|
-
|
|
6960
|
+
logger52.debug("Netlify integration initialized");
|
|
6961
|
+
},
|
|
6962
|
+
async onAfterConnect(_client) {
|
|
6963
|
+
logger52.debug("Netlify integration connected");
|
|
6964
|
+
}
|
|
6965
|
+
};
|
|
6966
|
+
}
|
|
6967
|
+
// src/integrations/redis.ts
|
|
6968
|
+
var logger53 = createLogger("Redis Cloud");
|
|
6969
|
+
var REDIS_TOOLS = [
|
|
6970
|
+
"redis_list_subscriptions",
|
|
6971
|
+
"redis_get_subscription",
|
|
6972
|
+
"redis_list_fixed_subscriptions",
|
|
6973
|
+
"redis_get_fixed_subscription",
|
|
6974
|
+
"redis_list_databases",
|
|
6975
|
+
"redis_get_database",
|
|
6976
|
+
"redis_create_database",
|
|
6977
|
+
"redis_update_database",
|
|
6978
|
+
"redis_delete_database",
|
|
6979
|
+
"redis_list_essentials_databases",
|
|
6980
|
+
"redis_get_essentials_database",
|
|
6981
|
+
"redis_create_essentials_database",
|
|
6982
|
+
"redis_update_essentials_database",
|
|
6983
|
+
"redis_delete_essentials_database",
|
|
6984
|
+
"redis_get_task",
|
|
6985
|
+
"redis_list_logs"
|
|
6986
|
+
];
|
|
6987
|
+
function encodeRedisCloudBearerToken(accountKey, secretKey) {
|
|
6988
|
+
const json = JSON.stringify({ account_key: accountKey, secret_key: secretKey });
|
|
6989
|
+
let b64;
|
|
6990
|
+
if (typeof Buffer !== "undefined") {
|
|
6991
|
+
b64 = Buffer.from(json, "utf8").toString("base64");
|
|
6992
|
+
} else {
|
|
6993
|
+
const bytes = new TextEncoder().encode(json);
|
|
6994
|
+
let binary = "";
|
|
6995
|
+
for (let i = 0;i < bytes.length; i++) {
|
|
6996
|
+
binary += String.fromCharCode(bytes[i]);
|
|
6997
|
+
}
|
|
6998
|
+
b64 = btoa(binary);
|
|
6999
|
+
}
|
|
7000
|
+
return `redis_cloud:${b64}`;
|
|
7001
|
+
}
|
|
7002
|
+
function redisIntegration(options = {}) {
|
|
7003
|
+
const accountKey = options.accountKey ?? getEnv("REDIS_CLOUD_ACCOUNT_KEY");
|
|
7004
|
+
const secretKey = options.secretKey ?? getEnv("REDIS_CLOUD_SECRET_KEY");
|
|
7005
|
+
if (!accountKey || !secretKey) {
|
|
7006
|
+
throw new Error("redisIntegration requires accountKey/secretKey or REDIS_CLOUD_ACCOUNT_KEY and REDIS_CLOUD_SECRET_KEY environment variables");
|
|
7007
|
+
}
|
|
7008
|
+
const bearer = encodeRedisCloudBearerToken(accountKey, secretKey);
|
|
7009
|
+
return {
|
|
7010
|
+
id: "redis",
|
|
7011
|
+
name: "Redis Cloud",
|
|
7012
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/redis.png",
|
|
7013
|
+
description: "Manage Redis Cloud subscriptions, databases, async tasks, and audit logs via the REST API",
|
|
7014
|
+
category: "Infrastructure",
|
|
7015
|
+
tools: [...REDIS_TOOLS],
|
|
7016
|
+
authType: "apiKey",
|
|
7017
|
+
getHeaders() {
|
|
7018
|
+
return {
|
|
7019
|
+
Authorization: `Bearer ${bearer}`
|
|
7020
|
+
};
|
|
7021
|
+
},
|
|
7022
|
+
async onInit(_client) {
|
|
7023
|
+
logger53.debug("Redis Cloud integration initialized");
|
|
7024
|
+
},
|
|
7025
|
+
async onAfterConnect(_client) {
|
|
7026
|
+
logger53.debug("Redis Cloud integration connected");
|
|
7027
|
+
}
|
|
7028
|
+
};
|
|
7029
|
+
}
|
|
7030
|
+
// src/integrations/webflow.ts
|
|
7031
|
+
var logger54 = createLogger("Webflow");
|
|
7032
|
+
var WEBFLOW_TOOLS = [
|
|
7033
|
+
"webflow_token_introspect",
|
|
7034
|
+
"webflow_get_authorized_user",
|
|
7035
|
+
"webflow_list_sites",
|
|
7036
|
+
"webflow_get_site",
|
|
7037
|
+
"webflow_get_site_custom_domains",
|
|
7038
|
+
"webflow_publish_site",
|
|
7039
|
+
"webflow_list_site_pages",
|
|
7040
|
+
"webflow_list_site_collections",
|
|
7041
|
+
"webflow_get_collection",
|
|
7042
|
+
"webflow_list_collection_items",
|
|
7043
|
+
"webflow_list_live_collection_items",
|
|
7044
|
+
"webflow_get_collection_item",
|
|
7045
|
+
"webflow_create_collection_items",
|
|
7046
|
+
"webflow_update_collection_items",
|
|
7047
|
+
"webflow_delete_collection_items",
|
|
7048
|
+
"webflow_publish_collection_items",
|
|
7049
|
+
"webflow_list_site_forms",
|
|
7050
|
+
"webflow_list_site_webhooks"
|
|
7051
|
+
];
|
|
7052
|
+
var DEFAULT_WEBFLOW_SCOPES = [
|
|
7053
|
+
"authorized_user:read",
|
|
7054
|
+
"assets:read",
|
|
7055
|
+
"assets:write",
|
|
7056
|
+
"cms:read",
|
|
7057
|
+
"cms:write",
|
|
7058
|
+
"custom_code:read",
|
|
7059
|
+
"custom_code:write",
|
|
7060
|
+
"forms:read",
|
|
7061
|
+
"forms:write",
|
|
7062
|
+
"pages:read",
|
|
7063
|
+
"pages:write",
|
|
7064
|
+
"sites:read",
|
|
7065
|
+
"sites:write"
|
|
7066
|
+
];
|
|
7067
|
+
function webflowIntegration(config = {}) {
|
|
7068
|
+
const oauth = {
|
|
7069
|
+
provider: "webflow",
|
|
7070
|
+
clientId: config.clientId ?? getEnv("WEBFLOW_CLIENT_ID"),
|
|
7071
|
+
clientSecret: config.clientSecret ?? getEnv("WEBFLOW_CLIENT_SECRET"),
|
|
7072
|
+
scopes: config.scopes ?? [...DEFAULT_WEBFLOW_SCOPES],
|
|
7073
|
+
redirectUri: config.redirectUri,
|
|
7074
|
+
config: {
|
|
7075
|
+
authorization_endpoint: "https://webflow.com/oauth/authorize",
|
|
7076
|
+
token_endpoint: "https://api.webflow.com/oauth/access_token",
|
|
7077
|
+
response_type: "code",
|
|
7078
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
7079
|
+
}
|
|
7080
|
+
};
|
|
7081
|
+
return {
|
|
7082
|
+
id: "webflow",
|
|
7083
|
+
name: "Webflow",
|
|
7084
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/webflow.png",
|
|
7085
|
+
description: "Manage Webflow sites, CMS collections, pages, forms, and publishing",
|
|
7086
|
+
category: "Engineering",
|
|
7087
|
+
tools: [...WEBFLOW_TOOLS],
|
|
7088
|
+
oauth,
|
|
7089
|
+
async onInit(_client) {
|
|
7090
|
+
logger54.debug("Webflow integration initialized");
|
|
5813
7091
|
},
|
|
5814
7092
|
async onAfterConnect(_client) {
|
|
5815
|
-
|
|
7093
|
+
logger54.debug("Webflow integration connected");
|
|
5816
7094
|
}
|
|
5817
7095
|
};
|
|
5818
7096
|
}
|
|
5819
7097
|
// src/integrations/jira.ts
|
|
5820
|
-
var
|
|
7098
|
+
var logger55 = createLogger("Jira");
|
|
5821
7099
|
var JIRA_SCOPES = [
|
|
5822
7100
|
"read:jira-work",
|
|
5823
7101
|
"write:jira-work",
|
|
@@ -5862,70 +7140,920 @@ function jiraIntegration(config = {}) {
|
|
|
5862
7140
|
tools: [...JIRA_TOOLS],
|
|
5863
7141
|
oauth,
|
|
5864
7142
|
async onInit(_client) {
|
|
5865
|
-
|
|
7143
|
+
logger55.debug("Jira integration initialized");
|
|
5866
7144
|
},
|
|
5867
7145
|
async onAfterConnect(_client) {
|
|
5868
|
-
|
|
7146
|
+
logger55.debug("Jira integration connected");
|
|
5869
7147
|
}
|
|
5870
7148
|
};
|
|
5871
7149
|
}
|
|
5872
|
-
// src/integrations/
|
|
5873
|
-
var
|
|
5874
|
-
|
|
5875
|
-
|
|
5876
|
-
|
|
7150
|
+
// src/integrations/linkedin.ts
|
|
7151
|
+
var logger56 = createLogger("LinkedIn");
|
|
7152
|
+
var LINKEDIN_SCOPES = ["openid", "profile", "email", "w_member_social"];
|
|
7153
|
+
var LINKEDIN_TOOLS = ["linkedin_get_userinfo", "linkedin_create_post"];
|
|
7154
|
+
function linkedinIntegration(config = {}) {
|
|
7155
|
+
const oauth = {
|
|
7156
|
+
provider: "linkedin",
|
|
7157
|
+
clientId: config.clientId ?? getEnv("LINKEDIN_CLIENT_ID"),
|
|
7158
|
+
clientSecret: config.clientSecret ?? getEnv("LINKEDIN_CLIENT_SECRET"),
|
|
7159
|
+
scopes: config.scopes ?? [...LINKEDIN_SCOPES],
|
|
7160
|
+
optionalScopes: config.optionalScopes,
|
|
7161
|
+
redirectUri: config.redirectUri,
|
|
7162
|
+
config: {
|
|
7163
|
+
authorization_endpoint: "https://www.linkedin.com/oauth/v2/authorization",
|
|
7164
|
+
token_endpoint: "https://www.linkedin.com/oauth/v2/accessToken",
|
|
7165
|
+
response_type: "code",
|
|
7166
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
7167
|
+
}
|
|
7168
|
+
};
|
|
7169
|
+
return {
|
|
7170
|
+
id: "linkedin",
|
|
7171
|
+
name: "LinkedIn",
|
|
7172
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/linkedin.png",
|
|
7173
|
+
description: "Read LinkedIn OpenID profile data and publish member posts",
|
|
7174
|
+
category: "Social Media",
|
|
7175
|
+
tools: [...LINKEDIN_TOOLS],
|
|
7176
|
+
oauth,
|
|
7177
|
+
async onInit(_client) {
|
|
7178
|
+
logger56.debug("LinkedIn integration initialized");
|
|
7179
|
+
},
|
|
7180
|
+
async onAfterConnect(_client) {
|
|
7181
|
+
logger56.debug("LinkedIn integration connected");
|
|
7182
|
+
}
|
|
7183
|
+
};
|
|
7184
|
+
}
|
|
7185
|
+
// src/integrations/threads.ts
|
|
7186
|
+
var logger57 = createLogger("Threads");
|
|
7187
|
+
var THREADS_SCOPES = [
|
|
7188
|
+
"threads_basic",
|
|
7189
|
+
"threads_content_publish",
|
|
7190
|
+
"threads_read_replies",
|
|
7191
|
+
"threads_manage_replies",
|
|
7192
|
+
"threads_manage_insights"
|
|
5877
7193
|
];
|
|
5878
|
-
|
|
5879
|
-
|
|
5880
|
-
|
|
7194
|
+
var THREADS_OPTIONAL_SCOPES = [
|
|
7195
|
+
"threads_keyword_search",
|
|
7196
|
+
"threads_profile_discovery",
|
|
7197
|
+
"threads_manage_mentions"
|
|
7198
|
+
];
|
|
7199
|
+
var THREADS_TOOLS = [
|
|
7200
|
+
"threads_get_me",
|
|
7201
|
+
"threads_list_user_media",
|
|
7202
|
+
"threads_get_media",
|
|
7203
|
+
"threads_keyword_search",
|
|
7204
|
+
"threads_create_media_container",
|
|
7205
|
+
"threads_publish_media_container",
|
|
7206
|
+
"threads_get_container_status",
|
|
7207
|
+
"threads_list_replies",
|
|
7208
|
+
"threads_get_conversation",
|
|
7209
|
+
"threads_manage_reply",
|
|
7210
|
+
"threads_repost",
|
|
7211
|
+
"threads_delete_media"
|
|
7212
|
+
];
|
|
7213
|
+
function threadsIntegration(config = {}) {
|
|
7214
|
+
const oauth = {
|
|
7215
|
+
provider: "threads",
|
|
7216
|
+
clientId: config.clientId ?? getEnv("THREADS_CLIENT_ID"),
|
|
7217
|
+
clientSecret: config.clientSecret ?? getEnv("THREADS_CLIENT_SECRET"),
|
|
7218
|
+
scopes: config.scopes ?? [...THREADS_SCOPES],
|
|
7219
|
+
optionalScopes: config.optionalScopes ?? [...THREADS_OPTIONAL_SCOPES],
|
|
7220
|
+
redirectUri: config.redirectUri,
|
|
7221
|
+
config: {
|
|
7222
|
+
authorization_endpoint: "https://threads.net/oauth/authorize",
|
|
7223
|
+
token_endpoint: "https://graph.threads.net/oauth/access_token",
|
|
7224
|
+
response_type: "code",
|
|
7225
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
7226
|
+
}
|
|
7227
|
+
};
|
|
7228
|
+
return {
|
|
7229
|
+
id: "threads",
|
|
7230
|
+
name: "Threads",
|
|
7231
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/threads.png",
|
|
7232
|
+
description: "Publish Threads posts and manage media, replies, conversations, and keyword search",
|
|
7233
|
+
category: "Social Media",
|
|
7234
|
+
tools: [...THREADS_TOOLS],
|
|
7235
|
+
oauth,
|
|
7236
|
+
async onInit(_client) {
|
|
7237
|
+
logger57.debug("Threads integration initialized");
|
|
7238
|
+
},
|
|
7239
|
+
async onAfterConnect(_client) {
|
|
7240
|
+
logger57.debug("Threads integration connected");
|
|
7241
|
+
}
|
|
7242
|
+
};
|
|
7243
|
+
}
|
|
7244
|
+
// src/integrations/tiktok.ts
|
|
7245
|
+
var logger58 = createLogger("TikTok");
|
|
7246
|
+
var TIKTOK_SCOPES = ["user.info.basic", "video.list"];
|
|
7247
|
+
var TIKTOK_TOOLS = [
|
|
7248
|
+
"tiktok_get_user_info",
|
|
7249
|
+
"tiktok_list_videos",
|
|
7250
|
+
"tiktok_query_videos"
|
|
7251
|
+
];
|
|
7252
|
+
function tiktokIntegration(config = {}) {
|
|
7253
|
+
const oauth = {
|
|
7254
|
+
provider: "tiktok",
|
|
7255
|
+
clientId: config.clientId ?? getEnv("TIKTOK_CLIENT_ID"),
|
|
7256
|
+
clientSecret: config.clientSecret ?? getEnv("TIKTOK_CLIENT_SECRET"),
|
|
7257
|
+
scopes: config.scopes ?? [...TIKTOK_SCOPES],
|
|
7258
|
+
optionalScopes: config.optionalScopes,
|
|
7259
|
+
redirectUri: config.redirectUri,
|
|
7260
|
+
config: {
|
|
7261
|
+
authorization_endpoint: "https://www.tiktok.com/v2/auth/authorize/",
|
|
7262
|
+
token_endpoint: "https://open.tiktokapis.com/v2/oauth/token/",
|
|
7263
|
+
response_type: "code",
|
|
7264
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
7265
|
+
}
|
|
7266
|
+
};
|
|
7267
|
+
return {
|
|
7268
|
+
id: "tiktok",
|
|
7269
|
+
name: "TikTok",
|
|
7270
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/tiktok.png",
|
|
7271
|
+
description: "Read TikTok user profile data and user-authorized video metadata",
|
|
7272
|
+
category: "Social Media",
|
|
7273
|
+
tools: [...TIKTOK_TOOLS],
|
|
7274
|
+
oauth,
|
|
7275
|
+
async onInit(_client) {
|
|
7276
|
+
logger58.debug("TikTok integration initialized");
|
|
7277
|
+
},
|
|
7278
|
+
async onAfterConnect(_client) {
|
|
7279
|
+
logger58.debug("TikTok integration connected");
|
|
7280
|
+
}
|
|
7281
|
+
};
|
|
7282
|
+
}
|
|
7283
|
+
// src/integrations/trello.ts
|
|
7284
|
+
var logger59 = createLogger("Trello");
|
|
7285
|
+
var TRELLO_TOOLS = [
|
|
7286
|
+
"trello_get_member",
|
|
7287
|
+
"trello_list_boards",
|
|
7288
|
+
"trello_get_board",
|
|
7289
|
+
"trello_list_lists",
|
|
7290
|
+
"trello_get_list",
|
|
7291
|
+
"trello_list_cards",
|
|
7292
|
+
"trello_get_card",
|
|
7293
|
+
"trello_create_card",
|
|
7294
|
+
"trello_update_card",
|
|
7295
|
+
"trello_delete_card",
|
|
7296
|
+
"trello_add_card_comment",
|
|
7297
|
+
"trello_search"
|
|
7298
|
+
];
|
|
7299
|
+
function encodeCredential(apiKey, memberToken) {
|
|
7300
|
+
const payload = JSON.stringify({ k: apiKey, t: memberToken });
|
|
7301
|
+
return `trello:${Buffer.from(payload).toString("base64url")}`;
|
|
7302
|
+
}
|
|
7303
|
+
function trelloIntegration(options = {}) {
|
|
7304
|
+
const apiKey = options.apiKey ?? getEnv("TRELLO_API_KEY");
|
|
7305
|
+
const memberToken = options.memberToken ?? getEnv("TRELLO_TOKEN");
|
|
7306
|
+
if (!apiKey || !memberToken) {
|
|
7307
|
+
throw new Error("trelloIntegration requires apiKey/memberToken or TRELLO_API_KEY/TRELLO_TOKEN");
|
|
5881
7308
|
}
|
|
5882
7309
|
return {
|
|
5883
|
-
id: "
|
|
5884
|
-
name: "
|
|
5885
|
-
|
|
7310
|
+
id: "trello",
|
|
7311
|
+
name: "Trello",
|
|
7312
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/trello.png",
|
|
7313
|
+
description: "Manage Trello boards, lists, cards, comments, and search",
|
|
7314
|
+
category: "Productivity",
|
|
7315
|
+
tools: [...TRELLO_TOOLS],
|
|
5886
7316
|
authType: "apiKey",
|
|
5887
7317
|
getHeaders() {
|
|
5888
|
-
return {
|
|
5889
|
-
|
|
5890
|
-
|
|
7318
|
+
return { Authorization: `Bearer ${encodeCredential(apiKey, memberToken)}` };
|
|
7319
|
+
},
|
|
7320
|
+
async onInit(_client) {
|
|
7321
|
+
logger59.debug("Trello integration initialized");
|
|
7322
|
+
},
|
|
7323
|
+
async onAfterConnect(_client) {
|
|
7324
|
+
logger59.debug("Trello integration connected");
|
|
5891
7325
|
}
|
|
5892
7326
|
};
|
|
5893
7327
|
}
|
|
5894
|
-
// src/integrations/
|
|
5895
|
-
var
|
|
5896
|
-
|
|
5897
|
-
"
|
|
5898
|
-
"
|
|
5899
|
-
"
|
|
5900
|
-
"
|
|
5901
|
-
"
|
|
5902
|
-
"
|
|
5903
|
-
|
|
5904
|
-
|
|
5905
|
-
"
|
|
5906
|
-
"
|
|
5907
|
-
"
|
|
5908
|
-
"
|
|
5909
|
-
"
|
|
5910
|
-
"
|
|
5911
|
-
"
|
|
5912
|
-
"
|
|
5913
|
-
"
|
|
5914
|
-
|
|
5915
|
-
|
|
5916
|
-
|
|
5917
|
-
|
|
5918
|
-
|
|
5919
|
-
|
|
5920
|
-
|
|
5921
|
-
|
|
5922
|
-
|
|
5923
|
-
|
|
5924
|
-
|
|
5925
|
-
|
|
5926
|
-
|
|
5927
|
-
|
|
5928
|
-
|
|
7328
|
+
// src/integrations/typeform.ts
|
|
7329
|
+
var logger60 = createLogger("Typeform");
|
|
7330
|
+
var TYPEFORM_SCOPES = [
|
|
7331
|
+
"offline",
|
|
7332
|
+
"accounts:read",
|
|
7333
|
+
"forms:read",
|
|
7334
|
+
"forms:write",
|
|
7335
|
+
"responses:read",
|
|
7336
|
+
"workspaces:read"
|
|
7337
|
+
];
|
|
7338
|
+
var TYPEFORM_TOOLS = [
|
|
7339
|
+
"typeform_get_me",
|
|
7340
|
+
"typeform_list_workspaces",
|
|
7341
|
+
"typeform_get_workspace",
|
|
7342
|
+
"typeform_list_forms",
|
|
7343
|
+
"typeform_get_form",
|
|
7344
|
+
"typeform_create_form",
|
|
7345
|
+
"typeform_update_form",
|
|
7346
|
+
"typeform_delete_form",
|
|
7347
|
+
"typeform_list_responses"
|
|
7348
|
+
];
|
|
7349
|
+
function typeformIntegration(config = {}) {
|
|
7350
|
+
const oauth = {
|
|
7351
|
+
provider: "typeform",
|
|
7352
|
+
clientId: config.clientId ?? getEnv("TYPEFORM_CLIENT_ID"),
|
|
7353
|
+
clientSecret: config.clientSecret ?? getEnv("TYPEFORM_CLIENT_SECRET"),
|
|
7354
|
+
scopes: config.scopes ?? [...TYPEFORM_SCOPES],
|
|
7355
|
+
optionalScopes: config.optionalScopes,
|
|
7356
|
+
redirectUri: config.redirectUri,
|
|
7357
|
+
config: {
|
|
7358
|
+
authorization_endpoint: "https://api.typeform.com/oauth/authorize",
|
|
7359
|
+
token_endpoint: "https://api.typeform.com/oauth/token",
|
|
7360
|
+
response_type: "code",
|
|
7361
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
7362
|
+
}
|
|
7363
|
+
};
|
|
7364
|
+
return {
|
|
7365
|
+
id: "typeform",
|
|
7366
|
+
name: "Typeform",
|
|
7367
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/typeform.png",
|
|
7368
|
+
description: "Manage Typeform workspaces, forms, and responses",
|
|
7369
|
+
category: "Productivity",
|
|
7370
|
+
tools: [...TYPEFORM_TOOLS],
|
|
7371
|
+
oauth,
|
|
7372
|
+
async onInit(_client) {
|
|
7373
|
+
logger60.debug("Typeform integration initialized");
|
|
7374
|
+
},
|
|
7375
|
+
async onAfterConnect(_client) {
|
|
7376
|
+
logger60.debug("Typeform integration connected");
|
|
7377
|
+
}
|
|
7378
|
+
};
|
|
7379
|
+
}
|
|
7380
|
+
// src/integrations/sharepoint.ts
|
|
7381
|
+
var logger61 = createLogger("SharePoint");
|
|
7382
|
+
var SHAREPOINT_SCOPES = ["Sites.ReadWrite.All", "Files.ReadWrite.All", "offline_access"];
|
|
7383
|
+
var SHAREPOINT_TOOLS = [
|
|
7384
|
+
"sharepoint_create_folder",
|
|
7385
|
+
"sharepoint_delete_item",
|
|
7386
|
+
"sharepoint_get_item",
|
|
7387
|
+
"sharepoint_get_site",
|
|
7388
|
+
"sharepoint_list_drives",
|
|
7389
|
+
"sharepoint_list_items",
|
|
7390
|
+
"sharepoint_search_files",
|
|
7391
|
+
"sharepoint_search_sites",
|
|
7392
|
+
"sharepoint_share_item",
|
|
7393
|
+
"sharepoint_update_item",
|
|
7394
|
+
"sharepoint_upload_file"
|
|
7395
|
+
];
|
|
7396
|
+
function sharepointIntegration(config = {}) {
|
|
7397
|
+
const oauth = {
|
|
7398
|
+
provider: "sharepoint",
|
|
7399
|
+
clientId: config.clientId ?? getEnv("SHAREPOINT_CLIENT_ID"),
|
|
7400
|
+
clientSecret: config.clientSecret ?? getEnv("SHAREPOINT_CLIENT_SECRET"),
|
|
7401
|
+
scopes: config.scopes ?? [...SHAREPOINT_SCOPES],
|
|
7402
|
+
optionalScopes: config.optionalScopes,
|
|
7403
|
+
redirectUri: config.redirectUri,
|
|
7404
|
+
config: {
|
|
7405
|
+
authorization_endpoint: "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
|
|
7406
|
+
token_endpoint: "https://login.microsoftonline.com/common/oauth2/v2.0/token",
|
|
7407
|
+
response_type: "code",
|
|
7408
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
7409
|
+
}
|
|
7410
|
+
};
|
|
7411
|
+
return {
|
|
7412
|
+
id: "sharepoint",
|
|
7413
|
+
name: "SharePoint",
|
|
7414
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/sharepoint.png",
|
|
7415
|
+
description: "Search SharePoint sites and manage drives, files, folders, and sharing links",
|
|
7416
|
+
category: "Productivity",
|
|
7417
|
+
tools: [...SHAREPOINT_TOOLS],
|
|
7418
|
+
oauth,
|
|
7419
|
+
async onInit(_client) {
|
|
7420
|
+
logger61.debug("SharePoint integration initialized");
|
|
7421
|
+
},
|
|
7422
|
+
async onAfterConnect(_client) {
|
|
7423
|
+
logger61.debug("SharePoint integration connected");
|
|
7424
|
+
}
|
|
7425
|
+
};
|
|
7426
|
+
}
|
|
7427
|
+
// src/integrations/xero.ts
|
|
7428
|
+
var logger62 = createLogger("Xero");
|
|
7429
|
+
var XERO_SCOPES = [
|
|
7430
|
+
"openid",
|
|
7431
|
+
"profile",
|
|
7432
|
+
"email",
|
|
7433
|
+
"offline_access",
|
|
7434
|
+
"accounting.settings",
|
|
7435
|
+
"accounting.transactions",
|
|
7436
|
+
"accounting.contacts",
|
|
7437
|
+
"accounting.attachments"
|
|
7438
|
+
];
|
|
7439
|
+
var XERO_TOOLS = [
|
|
7440
|
+
"xero_list_connections",
|
|
7441
|
+
"xero_get_organisation",
|
|
7442
|
+
"xero_list_accounts",
|
|
7443
|
+
"xero_list_contacts",
|
|
7444
|
+
"xero_get_contact",
|
|
7445
|
+
"xero_create_contact",
|
|
7446
|
+
"xero_list_invoices",
|
|
7447
|
+
"xero_get_invoice",
|
|
7448
|
+
"xero_create_invoice",
|
|
7449
|
+
"xero_list_bank_transactions"
|
|
7450
|
+
];
|
|
7451
|
+
function xeroIntegration(config = {}) {
|
|
7452
|
+
const oauth = {
|
|
7453
|
+
provider: "xero",
|
|
7454
|
+
clientId: config.clientId ?? getEnv("XERO_CLIENT_ID"),
|
|
7455
|
+
clientSecret: config.clientSecret ?? getEnv("XERO_CLIENT_SECRET"),
|
|
7456
|
+
scopes: config.scopes ?? [...XERO_SCOPES],
|
|
7457
|
+
optionalScopes: config.optionalScopes,
|
|
7458
|
+
redirectUri: config.redirectUri,
|
|
7459
|
+
config: {
|
|
7460
|
+
authorization_endpoint: "https://login.xero.com/identity/connect/authorize",
|
|
7461
|
+
token_endpoint: "https://identity.xero.com/connect/token",
|
|
7462
|
+
response_type: "code",
|
|
7463
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
7464
|
+
}
|
|
7465
|
+
};
|
|
7466
|
+
return {
|
|
7467
|
+
id: "xero",
|
|
7468
|
+
name: "Xero",
|
|
7469
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/xero.png",
|
|
7470
|
+
description: "Manage Xero organisations, accounts, contacts, invoices, and bank transactions",
|
|
7471
|
+
category: "Finance",
|
|
7472
|
+
tools: [...XERO_TOOLS],
|
|
7473
|
+
oauth,
|
|
7474
|
+
async onInit(_client) {
|
|
7475
|
+
logger62.debug("Xero integration initialized");
|
|
7476
|
+
},
|
|
7477
|
+
async onAfterConnect(_client) {
|
|
7478
|
+
logger62.debug("Xero integration connected");
|
|
7479
|
+
}
|
|
7480
|
+
};
|
|
7481
|
+
}
|
|
7482
|
+
// src/integrations/salesforce.ts
|
|
7483
|
+
var logger63 = createLogger("Salesforce");
|
|
7484
|
+
var SALESFORCE_TOOLS = [
|
|
7485
|
+
"salesforce_query",
|
|
7486
|
+
"salesforce_get_limits",
|
|
7487
|
+
"salesforce_describe_global",
|
|
7488
|
+
"salesforce_sobject_describe",
|
|
7489
|
+
"salesforce_sobject_get",
|
|
7490
|
+
"salesforce_sobject_create",
|
|
7491
|
+
"salesforce_sobject_update",
|
|
7492
|
+
"salesforce_sobject_delete"
|
|
7493
|
+
];
|
|
7494
|
+
function salesforceIntegration(config = {}) {
|
|
7495
|
+
const oauth = {
|
|
7496
|
+
provider: "salesforce",
|
|
7497
|
+
clientId: config.clientId ?? getEnv("SALESFORCE_CLIENT_ID"),
|
|
7498
|
+
clientSecret: config.clientSecret ?? getEnv("SALESFORCE_CLIENT_SECRET"),
|
|
7499
|
+
scopes: config.scopes ?? ["api", "refresh_token", "offline_access"],
|
|
7500
|
+
optionalScopes: config.optionalScopes,
|
|
7501
|
+
redirectUri: config.redirectUri,
|
|
7502
|
+
config: {
|
|
7503
|
+
...config,
|
|
7504
|
+
subdomain: config.subdomain ?? getEnv("SALESFORCE_SUBDOMAIN")
|
|
7505
|
+
}
|
|
7506
|
+
};
|
|
7507
|
+
return {
|
|
7508
|
+
id: "salesforce",
|
|
7509
|
+
name: "Salesforce",
|
|
7510
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/salesforce.png",
|
|
7511
|
+
tools: [...SALESFORCE_TOOLS],
|
|
7512
|
+
oauth,
|
|
7513
|
+
async onInit(_client) {
|
|
7514
|
+
logger63.debug("Salesforce integration initialized");
|
|
7515
|
+
},
|
|
7516
|
+
async onAfterConnect(_client) {
|
|
7517
|
+
logger63.debug("Salesforce integration connected");
|
|
7518
|
+
}
|
|
7519
|
+
};
|
|
7520
|
+
}
|
|
7521
|
+
// src/integrations/attio.ts
|
|
7522
|
+
var logger64 = createLogger("Attio");
|
|
7523
|
+
var ATTIO_SCOPES = [
|
|
7524
|
+
"record_permission:read-write",
|
|
7525
|
+
"object_configuration:read",
|
|
7526
|
+
"user_management:read",
|
|
7527
|
+
"task:read"
|
|
7528
|
+
];
|
|
7529
|
+
var ATTIO_TOOLS = [
|
|
7530
|
+
"attio_get_self",
|
|
7531
|
+
"attio_query_people",
|
|
7532
|
+
"attio_get_person",
|
|
7533
|
+
"attio_create_person",
|
|
7534
|
+
"attio_update_person",
|
|
7535
|
+
"attio_assert_person",
|
|
7536
|
+
"attio_query_companies",
|
|
7537
|
+
"attio_get_company",
|
|
7538
|
+
"attio_create_company",
|
|
7539
|
+
"attio_update_company",
|
|
7540
|
+
"attio_assert_company",
|
|
7541
|
+
"attio_list_tasks",
|
|
7542
|
+
"attio_get_task"
|
|
7543
|
+
];
|
|
7544
|
+
function attioIntegration(config = {}) {
|
|
7545
|
+
const oauth = {
|
|
7546
|
+
provider: "attio",
|
|
7547
|
+
clientId: config.clientId ?? getEnv("ATTIO_CLIENT_ID"),
|
|
7548
|
+
clientSecret: config.clientSecret ?? getEnv("ATTIO_CLIENT_SECRET"),
|
|
7549
|
+
scopes: config.scopes ?? [...ATTIO_SCOPES],
|
|
7550
|
+
optionalScopes: config.optionalScopes,
|
|
7551
|
+
redirectUri: config.redirectUri,
|
|
7552
|
+
config: {
|
|
7553
|
+
authorization_endpoint: "https://app.attio.com/authorize",
|
|
7554
|
+
token_endpoint: "https://app.attio.com/oauth/token",
|
|
7555
|
+
response_type: "code",
|
|
7556
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
7557
|
+
}
|
|
7558
|
+
};
|
|
7559
|
+
return {
|
|
7560
|
+
id: "attio",
|
|
7561
|
+
name: "Attio",
|
|
7562
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/attio.png",
|
|
7563
|
+
description: "Manage Attio people, companies, records, and tasks",
|
|
7564
|
+
category: "Business",
|
|
7565
|
+
tools: [...ATTIO_TOOLS],
|
|
7566
|
+
oauth,
|
|
7567
|
+
async onInit(_client) {
|
|
7568
|
+
logger64.debug("Attio integration initialized");
|
|
7569
|
+
},
|
|
7570
|
+
async onAfterConnect(_client) {
|
|
7571
|
+
logger64.debug("Attio integration connected");
|
|
7572
|
+
}
|
|
7573
|
+
};
|
|
7574
|
+
}
|
|
7575
|
+
// src/integrations/gchat.ts
|
|
7576
|
+
var logger65 = createLogger("Google Chat");
|
|
7577
|
+
var GCHAT_SCOPES = [
|
|
7578
|
+
"https://www.googleapis.com/auth/chat.messages",
|
|
7579
|
+
"https://www.googleapis.com/auth/chat.spaces.readonly"
|
|
7580
|
+
];
|
|
7581
|
+
var GCHAT_TOOLS = [
|
|
7582
|
+
"gchat_delete_message",
|
|
7583
|
+
"gchat_get_message",
|
|
7584
|
+
"gchat_get_space",
|
|
7585
|
+
"gchat_list_members",
|
|
7586
|
+
"gchat_list_messages",
|
|
7587
|
+
"gchat_list_spaces",
|
|
7588
|
+
"gchat_send_message",
|
|
7589
|
+
"gchat_update_message"
|
|
7590
|
+
];
|
|
7591
|
+
function gchatIntegration(config = {}) {
|
|
7592
|
+
const oauth = {
|
|
7593
|
+
provider: "gchat",
|
|
7594
|
+
clientId: config.clientId ?? getEnv("GCHAT_CLIENT_ID"),
|
|
7595
|
+
clientSecret: config.clientSecret ?? getEnv("GCHAT_CLIENT_SECRET"),
|
|
7596
|
+
scopes: config.scopes ?? [...GCHAT_SCOPES],
|
|
7597
|
+
optionalScopes: config.optionalScopes,
|
|
7598
|
+
redirectUri: config.redirectUri,
|
|
7599
|
+
config: {
|
|
7600
|
+
authorization_endpoint: "https://accounts.google.com/o/oauth2/v2/auth",
|
|
7601
|
+
token_endpoint: "https://oauth2.googleapis.com/token",
|
|
7602
|
+
response_type: "code",
|
|
7603
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
7604
|
+
}
|
|
7605
|
+
};
|
|
7606
|
+
return {
|
|
7607
|
+
id: "gchat",
|
|
7608
|
+
name: "Google Chat",
|
|
7609
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/google_chat.png",
|
|
7610
|
+
description: "List Google Chat spaces and manage messages and memberships",
|
|
7611
|
+
category: "Communication",
|
|
7612
|
+
tools: [...GCHAT_TOOLS],
|
|
7613
|
+
oauth,
|
|
7614
|
+
async onInit(_client) {
|
|
7615
|
+
logger65.debug("Google Chat integration initialized");
|
|
7616
|
+
},
|
|
7617
|
+
async onAfterConnect(_client) {
|
|
7618
|
+
logger65.debug("Google Chat integration connected");
|
|
7619
|
+
}
|
|
7620
|
+
};
|
|
7621
|
+
}
|
|
7622
|
+
// src/integrations/shopify.ts
|
|
7623
|
+
var logger66 = createLogger("Shopify");
|
|
7624
|
+
var SHOPIFY_SCOPES = [
|
|
7625
|
+
"read_products",
|
|
7626
|
+
"write_products",
|
|
7627
|
+
"read_orders",
|
|
7628
|
+
"write_orders",
|
|
7629
|
+
"read_customers",
|
|
7630
|
+
"write_customers",
|
|
7631
|
+
"read_inventory",
|
|
7632
|
+
"write_inventory",
|
|
7633
|
+
"read_content",
|
|
7634
|
+
"write_content",
|
|
7635
|
+
"read_fulfillments",
|
|
7636
|
+
"write_fulfillments",
|
|
7637
|
+
"read_analytics"
|
|
7638
|
+
];
|
|
7639
|
+
var SHOPIFY_TOOLS = [
|
|
7640
|
+
"shopify_admin_graphql",
|
|
7641
|
+
"shopify_rest_get",
|
|
7642
|
+
"shopify_rest_post",
|
|
7643
|
+
"shopify_rest_put",
|
|
7644
|
+
"shopify_rest_delete",
|
|
7645
|
+
"shopify_get_shop"
|
|
7646
|
+
];
|
|
7647
|
+
function shopifyIntegration(config = {}) {
|
|
7648
|
+
const oauth = {
|
|
7649
|
+
provider: "shopify",
|
|
7650
|
+
clientId: config.clientId ?? getEnv("SHOPIFY_CLIENT_ID"),
|
|
7651
|
+
clientSecret: config.clientSecret ?? getEnv("SHOPIFY_CLIENT_SECRET"),
|
|
7652
|
+
scopes: config.scopes ?? [...SHOPIFY_SCOPES],
|
|
7653
|
+
optionalScopes: config.optionalScopes,
|
|
7654
|
+
redirectUri: config.redirectUri,
|
|
7655
|
+
config: {
|
|
7656
|
+
authorization_endpoint: "https://shopify.oauth.placeholder/admin/oauth/authorize",
|
|
7657
|
+
token_endpoint: "https://shopify.oauth.placeholder/admin/oauth/access_token",
|
|
7658
|
+
response_type: "code",
|
|
7659
|
+
grant_types_supported: ["authorization_code"],
|
|
7660
|
+
subdomain: config.shop ?? getEnv("SHOPIFY_SHOP")
|
|
7661
|
+
}
|
|
7662
|
+
};
|
|
7663
|
+
return {
|
|
7664
|
+
id: "shopify",
|
|
7665
|
+
name: "Shopify",
|
|
7666
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/shopify.png",
|
|
7667
|
+
description: "Route-complete Shopify Admin access through GraphQL and REST tools",
|
|
7668
|
+
category: "Business",
|
|
7669
|
+
tools: [...SHOPIFY_TOOLS],
|
|
7670
|
+
oauth,
|
|
7671
|
+
async onInit(_client) {
|
|
7672
|
+
logger66.debug("Shopify integration initialized");
|
|
7673
|
+
},
|
|
7674
|
+
async onAfterConnect(_client) {
|
|
7675
|
+
logger66.debug("Shopify integration connected");
|
|
7676
|
+
}
|
|
7677
|
+
};
|
|
7678
|
+
}
|
|
7679
|
+
// src/integrations/convex.ts
|
|
7680
|
+
var logger67 = createLogger("Convex");
|
|
7681
|
+
var CONVEX_TOOLS = [
|
|
7682
|
+
"convex_management_token_details",
|
|
7683
|
+
"convex_management_list_projects",
|
|
7684
|
+
"convex_management_create_project",
|
|
7685
|
+
"convex_management_get_project",
|
|
7686
|
+
"convex_management_delete_project",
|
|
7687
|
+
"convex_management_list_deployments",
|
|
7688
|
+
"convex_management_list_team_deployments",
|
|
7689
|
+
"convex_management_get_deployment",
|
|
7690
|
+
"convex_management_create_deployment",
|
|
7691
|
+
"convex_management_update_deployment",
|
|
7692
|
+
"convex_management_delete_deployment",
|
|
7693
|
+
"convex_management_list_deployment_regions",
|
|
7694
|
+
"convex_management_list_deployment_classes",
|
|
7695
|
+
"convex_management_list_default_environment_variables",
|
|
7696
|
+
"convex_management_update_default_environment_variables",
|
|
7697
|
+
"convex_deployment_list_environment_variables",
|
|
7698
|
+
"convex_deployment_update_environment_variables"
|
|
7699
|
+
];
|
|
7700
|
+
function convexIntegration(options = {}) {
|
|
7701
|
+
const accessToken = options.accessToken ?? getEnv("CONVEX_ACCESS_TOKEN");
|
|
7702
|
+
if (!accessToken) {
|
|
7703
|
+
throw new Error("convexIntegration requires accessToken or CONVEX_ACCESS_TOKEN");
|
|
7704
|
+
}
|
|
7705
|
+
return {
|
|
7706
|
+
id: "convex",
|
|
7707
|
+
name: "Convex",
|
|
7708
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/convex.png",
|
|
7709
|
+
description: "Manage Convex projects, deployments, regions, classes, and environment variables",
|
|
7710
|
+
category: "Infrastructure",
|
|
7711
|
+
tools: [...CONVEX_TOOLS],
|
|
7712
|
+
authType: "apiKey",
|
|
7713
|
+
getHeaders() {
|
|
7714
|
+
return { Authorization: `Bearer ${accessToken}` };
|
|
7715
|
+
},
|
|
7716
|
+
async onInit(_client) {
|
|
7717
|
+
logger67.debug("Convex integration initialized");
|
|
7718
|
+
},
|
|
7719
|
+
async onAfterConnect(_client) {
|
|
7720
|
+
logger67.debug("Convex integration connected");
|
|
7721
|
+
}
|
|
7722
|
+
};
|
|
7723
|
+
}
|
|
7724
|
+
// src/integrations/etoro.ts
|
|
7725
|
+
var logger68 = createLogger("eToro");
|
|
7726
|
+
var ETORO_TOOLS = [
|
|
7727
|
+
"etoro_get_identity",
|
|
7728
|
+
"etoro_get_portfolio",
|
|
7729
|
+
"etoro_search_instruments",
|
|
7730
|
+
"etoro_get_instrument_rates",
|
|
7731
|
+
"etoro_list_trade_history",
|
|
7732
|
+
"etoro_list_watchlists"
|
|
7733
|
+
];
|
|
7734
|
+
function etoroIntegration(options = {}) {
|
|
7735
|
+
const publicApiKey = options.publicApiKey ?? getEnv("ETORO_PUBLIC_API_KEY");
|
|
7736
|
+
const userKey = options.userKey ?? getEnv("ETORO_USER_KEY");
|
|
7737
|
+
if (!publicApiKey || !userKey) {
|
|
7738
|
+
throw new Error("etoroIntegration requires publicApiKey/userKey or ETORO_PUBLIC_API_KEY/ETORO_USER_KEY");
|
|
7739
|
+
}
|
|
7740
|
+
return {
|
|
7741
|
+
id: "etoro",
|
|
7742
|
+
name: "eToro",
|
|
7743
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/etoro.png",
|
|
7744
|
+
description: "Access eToro Public API identity, portfolio, market data, trade history, and watchlists",
|
|
7745
|
+
category: "Finance",
|
|
7746
|
+
tools: [...ETORO_TOOLS],
|
|
7747
|
+
authType: "apiKey",
|
|
7748
|
+
getHeaders() {
|
|
7749
|
+
return {
|
|
7750
|
+
"X-Api-Key": publicApiKey,
|
|
7751
|
+
"X-User-Key": userKey
|
|
7752
|
+
};
|
|
7753
|
+
},
|
|
7754
|
+
async onInit(_client) {
|
|
7755
|
+
logger68.debug("eToro integration initialized");
|
|
7756
|
+
},
|
|
7757
|
+
async onAfterConnect(_client) {
|
|
7758
|
+
logger68.debug("eToro integration connected");
|
|
7759
|
+
}
|
|
7760
|
+
};
|
|
7761
|
+
}
|
|
7762
|
+
// src/integrations/alpaca.ts
|
|
7763
|
+
var logger69 = createLogger("Alpaca");
|
|
7764
|
+
var ALPACA_TOOLS = [
|
|
7765
|
+
"alpaca_get_account",
|
|
7766
|
+
"alpaca_list_positions",
|
|
7767
|
+
"alpaca_get_position",
|
|
7768
|
+
"alpaca_list_orders",
|
|
7769
|
+
"alpaca_get_order",
|
|
7770
|
+
"alpaca_create_order",
|
|
7771
|
+
"alpaca_cancel_order",
|
|
7772
|
+
"alpaca_cancel_all_orders",
|
|
7773
|
+
"alpaca_get_clock",
|
|
7774
|
+
"alpaca_get_calendar",
|
|
7775
|
+
"alpaca_list_assets",
|
|
7776
|
+
"alpaca_get_asset",
|
|
7777
|
+
"alpaca_get_portfolio_history"
|
|
7778
|
+
];
|
|
7779
|
+
function alpacaIntegration(options = {}) {
|
|
7780
|
+
const apiKeyId = options.apiKeyId ?? getEnv("ALPACA_API_KEY_ID");
|
|
7781
|
+
const apiSecretKey = options.apiSecretKey ?? getEnv("ALPACA_API_SECRET_KEY");
|
|
7782
|
+
if (!apiKeyId || !apiSecretKey) {
|
|
7783
|
+
throw new Error("alpacaIntegration requires apiKeyId and apiSecretKey (or ALPACA_API_KEY_ID and ALPACA_API_SECRET_KEY)");
|
|
7784
|
+
}
|
|
7785
|
+
const environment = options.environment ?? "paper";
|
|
7786
|
+
return {
|
|
7787
|
+
id: "alpaca",
|
|
7788
|
+
name: "Alpaca",
|
|
7789
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/alpaca.png",
|
|
7790
|
+
description: "Trade US equities and crypto with Alpaca: account, orders, positions, clock, and assets",
|
|
7791
|
+
category: "Finance",
|
|
7792
|
+
tools: [...ALPACA_TOOLS],
|
|
7793
|
+
authType: "apiKey",
|
|
7794
|
+
getHeaders() {
|
|
7795
|
+
const headers = {
|
|
7796
|
+
"APCA-API-KEY-ID": apiKeyId,
|
|
7797
|
+
"APCA-API-SECRET-KEY": apiSecretKey
|
|
7798
|
+
};
|
|
7799
|
+
if (environment === "live") {
|
|
7800
|
+
headers["X-Integrate-Alpaca-Environment"] = "live";
|
|
7801
|
+
}
|
|
7802
|
+
return headers;
|
|
7803
|
+
},
|
|
7804
|
+
async onInit(_client) {
|
|
7805
|
+
logger69.debug("Alpaca integration initialized");
|
|
7806
|
+
},
|
|
7807
|
+
async onAfterConnect(_client) {
|
|
7808
|
+
logger69.debug("Alpaca integration connected");
|
|
7809
|
+
}
|
|
7810
|
+
};
|
|
7811
|
+
}
|
|
7812
|
+
// src/integrations/neon.ts
|
|
7813
|
+
var logger70 = createLogger("Neon");
|
|
7814
|
+
var NEON_TOOLS = [
|
|
7815
|
+
"neon_list_api_keys",
|
|
7816
|
+
"neon_create_api_key",
|
|
7817
|
+
"neon_revoke_api_key",
|
|
7818
|
+
"neon_list_organizations",
|
|
7819
|
+
"neon_list_projects",
|
|
7820
|
+
"neon_list_shared_projects",
|
|
7821
|
+
"neon_create_project",
|
|
7822
|
+
"neon_get_project",
|
|
7823
|
+
"neon_update_project",
|
|
7824
|
+
"neon_delete_project",
|
|
7825
|
+
"neon_recover_project",
|
|
7826
|
+
"neon_list_branches",
|
|
7827
|
+
"neon_create_branch",
|
|
7828
|
+
"neon_get_branch",
|
|
7829
|
+
"neon_delete_branch",
|
|
7830
|
+
"neon_list_operations",
|
|
7831
|
+
"neon_get_operation",
|
|
7832
|
+
"neon_get_connection_uri"
|
|
7833
|
+
];
|
|
7834
|
+
function neonIntegration(options = {}) {
|
|
7835
|
+
const apiKey = options.apiKey ?? getEnv("NEON_API_KEY");
|
|
7836
|
+
if (!apiKey) {
|
|
7837
|
+
throw new Error("neonIntegration requires apiKey or NEON_API_KEY environment variable");
|
|
7838
|
+
}
|
|
7839
|
+
return {
|
|
7840
|
+
id: "neon",
|
|
7841
|
+
name: "Neon",
|
|
7842
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/neon.png",
|
|
7843
|
+
description: "Manage Neon Postgres projects, branches, API keys, and connection strings",
|
|
7844
|
+
category: "Infrastructure",
|
|
7845
|
+
tools: [...NEON_TOOLS],
|
|
7846
|
+
authType: "apiKey",
|
|
7847
|
+
getHeaders() {
|
|
7848
|
+
return {
|
|
7849
|
+
Authorization: `Bearer ${apiKey}`
|
|
7850
|
+
};
|
|
7851
|
+
},
|
|
7852
|
+
async onInit(_client) {
|
|
7853
|
+
logger70.debug("Neon integration initialized");
|
|
7854
|
+
},
|
|
7855
|
+
async onAfterConnect(_client) {
|
|
7856
|
+
logger70.debug("Neon integration connected");
|
|
7857
|
+
}
|
|
7858
|
+
};
|
|
7859
|
+
}
|
|
7860
|
+
// src/integrations/workos.ts
|
|
7861
|
+
var logger71 = createLogger("WorkOS");
|
|
7862
|
+
var WORKOS_TOOLS = [
|
|
7863
|
+
"workos_list_organizations",
|
|
7864
|
+
"workos_get_organization",
|
|
7865
|
+
"workos_create_organization",
|
|
7866
|
+
"workos_update_organization",
|
|
7867
|
+
"workos_list_users",
|
|
7868
|
+
"workos_get_user",
|
|
7869
|
+
"workos_list_organization_memberships",
|
|
7870
|
+
"workos_list_directories",
|
|
7871
|
+
"workos_get_directory",
|
|
7872
|
+
"workos_list_directory_users",
|
|
7873
|
+
"workos_get_directory_user"
|
|
7874
|
+
];
|
|
7875
|
+
function workosIntegration(options = {}) {
|
|
7876
|
+
const apiKey = options.apiKey ?? getEnv("WORKOS_API_KEY");
|
|
7877
|
+
if (!apiKey) {
|
|
7878
|
+
throw new Error("workosIntegration requires apiKey or WORKOS_API_KEY environment variable");
|
|
7879
|
+
}
|
|
7880
|
+
return {
|
|
7881
|
+
id: "workos",
|
|
7882
|
+
name: "WorkOS",
|
|
7883
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/workos.png",
|
|
7884
|
+
description: "Manage WorkOS organizations, AuthKit users, memberships, and directory sync",
|
|
7885
|
+
category: "Infrastructure",
|
|
7886
|
+
tools: [...WORKOS_TOOLS],
|
|
7887
|
+
authType: "apiKey",
|
|
7888
|
+
getHeaders() {
|
|
7889
|
+
return {
|
|
7890
|
+
Authorization: `Bearer ${apiKey}`
|
|
7891
|
+
};
|
|
7892
|
+
},
|
|
7893
|
+
async onInit(_client) {
|
|
7894
|
+
logger71.debug("WorkOS integration initialized");
|
|
7895
|
+
},
|
|
7896
|
+
async onAfterConnect(_client) {
|
|
7897
|
+
logger71.debug("WorkOS integration connected");
|
|
7898
|
+
}
|
|
7899
|
+
};
|
|
7900
|
+
}
|
|
7901
|
+
// src/integrations/workday.ts
|
|
7902
|
+
var logger72 = createLogger("Workday");
|
|
7903
|
+
var WORKDAY_TOOLS = [
|
|
7904
|
+
"workday_list_workers",
|
|
7905
|
+
"workday_get_worker"
|
|
7906
|
+
];
|
|
7907
|
+
function workdayIntegration(config = {}) {
|
|
7908
|
+
const oauth = {
|
|
7909
|
+
provider: "workday",
|
|
7910
|
+
clientId: config.clientId ?? getEnv("WORKDAY_CLIENT_ID"),
|
|
7911
|
+
clientSecret: config.clientSecret ?? getEnv("WORKDAY_CLIENT_SECRET"),
|
|
7912
|
+
scopes: config.scopes,
|
|
7913
|
+
redirectUri: config.redirectUri,
|
|
7914
|
+
config: {
|
|
7915
|
+
subdomain: config.subdomain ?? getEnv("WORKDAY_TENANT_DESCRIPTOR")
|
|
7916
|
+
}
|
|
7917
|
+
};
|
|
7918
|
+
return {
|
|
7919
|
+
id: "workday",
|
|
7920
|
+
name: "Workday",
|
|
7921
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/workday.png",
|
|
7922
|
+
description: "Query Workday workers via the tenant REST API",
|
|
7923
|
+
category: "Business",
|
|
7924
|
+
tools: [...WORKDAY_TOOLS],
|
|
7925
|
+
oauth,
|
|
7926
|
+
async onInit(_client) {
|
|
7927
|
+
logger72.debug("Workday integration initialized");
|
|
7928
|
+
},
|
|
7929
|
+
async onAfterConnect(_client) {
|
|
7930
|
+
logger72.debug("Workday integration connected");
|
|
7931
|
+
}
|
|
7932
|
+
};
|
|
7933
|
+
}
|
|
7934
|
+
// src/integrations/tldraw.ts
|
|
7935
|
+
var TLDRAW_TOOLS = [
|
|
7936
|
+
"tldraw_unfurl_url",
|
|
7937
|
+
"tldraw_create_room_snapshot",
|
|
7938
|
+
"tldraw_get_room_snapshot",
|
|
7939
|
+
"tldraw_get_published_snapshot",
|
|
7940
|
+
"tldraw_get_readonly_slug"
|
|
7941
|
+
];
|
|
7942
|
+
function tldrawIntegration(options = {}) {
|
|
7943
|
+
const apiKey = options.apiKey ?? getEnv("TLDRAW_API_KEY");
|
|
7944
|
+
return {
|
|
7945
|
+
id: "tldraw",
|
|
7946
|
+
name: "tldraw",
|
|
7947
|
+
tools: [...TLDRAW_TOOLS],
|
|
7948
|
+
authType: apiKey ? "apiKey" : undefined,
|
|
7949
|
+
getHeaders: apiKey ? () => ({ Authorization: `Bearer ${apiKey}` }) : undefined
|
|
7950
|
+
};
|
|
7951
|
+
}
|
|
7952
|
+
// src/integrations/upstash.ts
|
|
7953
|
+
var logger73 = createLogger("Upstash");
|
|
7954
|
+
var UPSTASH_TOOLS = [
|
|
7955
|
+
"upstash_redis_run",
|
|
7956
|
+
"upstash_redis_get",
|
|
7957
|
+
"upstash_redis_set",
|
|
7958
|
+
"upstash_redis_del",
|
|
7959
|
+
"upstash_qstash_publish"
|
|
7960
|
+
];
|
|
7961
|
+
function upstashIntegration(options = {}) {
|
|
7962
|
+
const redisUrl = options.redisUrl ?? getEnv("UPSTASH_REDIS_REST_URL");
|
|
7963
|
+
const redisToken = options.redisToken ?? getEnv("UPSTASH_REDIS_REST_TOKEN");
|
|
7964
|
+
const qstashToken = options.qstashToken ?? getEnv("QSTASH_TOKEN");
|
|
7965
|
+
const hasRedis = !!(redisUrl && redisToken);
|
|
7966
|
+
const onlyPartialRedis = !!redisUrl && !redisToken || !redisUrl && !!redisToken;
|
|
7967
|
+
if (onlyPartialRedis) {
|
|
7968
|
+
throw new Error("upstashIntegration requires both redisUrl and redisToken for Redis tools (or omit both for QStash-only)");
|
|
7969
|
+
}
|
|
7970
|
+
if (!hasRedis && !qstashToken) {
|
|
7971
|
+
throw new Error("upstashIntegration requires Redis credentials (UPSTASH_REDIS_REST_URL + UPSTASH_REDIS_REST_TOKEN) and/or QSTASH_TOKEN");
|
|
7972
|
+
}
|
|
7973
|
+
return {
|
|
7974
|
+
id: "upstash",
|
|
7975
|
+
name: "Upstash",
|
|
7976
|
+
logoUrl: "https://avatars.githubusercontent.com/u/74989412?s=200&v=4",
|
|
7977
|
+
description: "Serverless Redis (REST), QStash messaging, and HTTP APIs",
|
|
7978
|
+
category: "Infrastructure",
|
|
7979
|
+
tools: [...UPSTASH_TOOLS],
|
|
7980
|
+
authType: "apiKey",
|
|
7981
|
+
getHeaders() {
|
|
7982
|
+
const headers = {};
|
|
7983
|
+
if (hasRedis) {
|
|
7984
|
+
headers["X-Upstash-Redis-Rest-Url"] = redisUrl;
|
|
7985
|
+
headers["X-Upstash-Redis-Rest-Token"] = redisToken;
|
|
7986
|
+
}
|
|
7987
|
+
if (qstashToken) {
|
|
7988
|
+
headers["X-Qstash-Token"] = qstashToken;
|
|
7989
|
+
}
|
|
7990
|
+
return headers;
|
|
7991
|
+
},
|
|
7992
|
+
async onInit(_client) {
|
|
7993
|
+
logger73.debug("Upstash integration initialized");
|
|
7994
|
+
},
|
|
7995
|
+
async onAfterConnect(_client) {
|
|
7996
|
+
logger73.debug("Upstash integration connected");
|
|
7997
|
+
}
|
|
7998
|
+
};
|
|
7999
|
+
}
|
|
8000
|
+
// src/integrations/granola.ts
|
|
8001
|
+
var GRANOLA_TOOLS = [
|
|
8002
|
+
"granola_list_notes",
|
|
8003
|
+
"granola_get_note",
|
|
8004
|
+
"granola_list_folders"
|
|
8005
|
+
];
|
|
8006
|
+
function granolaIntegration(options) {
|
|
8007
|
+
if (!options.apiKey) {
|
|
8008
|
+
throw new Error("granolaIntegration requires an apiKey");
|
|
8009
|
+
}
|
|
8010
|
+
return {
|
|
8011
|
+
id: "granola",
|
|
8012
|
+
name: "Granola",
|
|
8013
|
+
tools: [...GRANOLA_TOOLS],
|
|
8014
|
+
authType: "apiKey",
|
|
8015
|
+
getHeaders() {
|
|
8016
|
+
return {
|
|
8017
|
+
Authorization: `Bearer ${options.apiKey}`
|
|
8018
|
+
};
|
|
8019
|
+
}
|
|
8020
|
+
};
|
|
8021
|
+
}
|
|
8022
|
+
// src/integrations/mercury.ts
|
|
8023
|
+
var MERCURY_TOOLS = [
|
|
8024
|
+
"mercury_get_organization",
|
|
8025
|
+
"mercury_list_accounts",
|
|
8026
|
+
"mercury_get_account",
|
|
8027
|
+
"mercury_get_account_cards",
|
|
8028
|
+
"mercury_list_account_transactions",
|
|
8029
|
+
"mercury_get_account_transaction",
|
|
8030
|
+
"mercury_list_account_statements",
|
|
8031
|
+
"mercury_download_statement_pdf",
|
|
8032
|
+
"mercury_list_transactions",
|
|
8033
|
+
"mercury_get_transaction",
|
|
8034
|
+
"mercury_update_transaction",
|
|
8035
|
+
"mercury_upload_transaction_attachment",
|
|
8036
|
+
"mercury_list_cards",
|
|
8037
|
+
"mercury_get_card",
|
|
8038
|
+
"mercury_create_card",
|
|
8039
|
+
"mercury_update_card",
|
|
8040
|
+
"mercury_freeze_card",
|
|
8041
|
+
"mercury_unfreeze_card",
|
|
8042
|
+
"mercury_cancel_card",
|
|
8043
|
+
"mercury_list_categories",
|
|
8044
|
+
"mercury_create_category",
|
|
8045
|
+
"mercury_update_category",
|
|
8046
|
+
"mercury_list_credit_accounts",
|
|
8047
|
+
"mercury_list_users",
|
|
8048
|
+
"mercury_get_user",
|
|
8049
|
+
"mercury_list_recipients",
|
|
8050
|
+
"mercury_get_recipient",
|
|
8051
|
+
"mercury_create_recipient",
|
|
8052
|
+
"mercury_update_recipient",
|
|
8053
|
+
"mercury_list_recipient_attachments",
|
|
8054
|
+
"mercury_upload_recipient_attachment",
|
|
8055
|
+
"mercury_list_customers",
|
|
8056
|
+
"mercury_get_customer",
|
|
5929
8057
|
"mercury_create_customer",
|
|
5930
8058
|
"mercury_update_customer",
|
|
5931
8059
|
"mercury_delete_customer",
|
|
@@ -5957,19 +8085,995 @@ var MERCURY_TOOLS = [
|
|
|
5957
8085
|
"mercury_send_money",
|
|
5958
8086
|
"mercury_request_send_money"
|
|
5959
8087
|
];
|
|
5960
|
-
function mercuryIntegration(options) {
|
|
5961
|
-
if (!options.apiKey) {
|
|
5962
|
-
throw new Error("mercuryIntegration requires an apiKey");
|
|
8088
|
+
function mercuryIntegration(options) {
|
|
8089
|
+
if (!options.apiKey) {
|
|
8090
|
+
throw new Error("mercuryIntegration requires an apiKey");
|
|
8091
|
+
}
|
|
8092
|
+
return {
|
|
8093
|
+
id: "mercury",
|
|
8094
|
+
name: "Mercury",
|
|
8095
|
+
tools: [...MERCURY_TOOLS],
|
|
8096
|
+
authType: "apiKey",
|
|
8097
|
+
getHeaders() {
|
|
8098
|
+
return {
|
|
8099
|
+
Authorization: `Bearer ${options.apiKey}`
|
|
8100
|
+
};
|
|
8101
|
+
}
|
|
8102
|
+
};
|
|
8103
|
+
}
|
|
8104
|
+
// src/integrations/mailchimp.ts
|
|
8105
|
+
var MAILCHIMP_TOOLS = [
|
|
8106
|
+
"mailchimp_ping",
|
|
8107
|
+
"mailchimp_list_audiences",
|
|
8108
|
+
"mailchimp_get_audience",
|
|
8109
|
+
"mailchimp_list_members",
|
|
8110
|
+
"mailchimp_get_member",
|
|
8111
|
+
"mailchimp_add_or_update_member",
|
|
8112
|
+
"mailchimp_archive_member",
|
|
8113
|
+
"mailchimp_list_campaigns"
|
|
8114
|
+
];
|
|
8115
|
+
function mailchimpIntegration(config = {}) {
|
|
8116
|
+
const oauth = {
|
|
8117
|
+
provider: "mailchimp",
|
|
8118
|
+
clientId: config.clientId ?? getEnv("MAILCHIMP_CLIENT_ID"),
|
|
8119
|
+
clientSecret: config.clientSecret ?? getEnv("MAILCHIMP_CLIENT_SECRET"),
|
|
8120
|
+
scopes: config.scopes ?? [],
|
|
8121
|
+
optionalScopes: config.optionalScopes,
|
|
8122
|
+
redirectUri: config.redirectUri
|
|
8123
|
+
};
|
|
8124
|
+
return {
|
|
8125
|
+
id: "mailchimp",
|
|
8126
|
+
name: "Mailchimp",
|
|
8127
|
+
tools: [...MAILCHIMP_TOOLS],
|
|
8128
|
+
oauth
|
|
8129
|
+
};
|
|
8130
|
+
}
|
|
8131
|
+
// src/integrations/aws.ts
|
|
8132
|
+
var logger74 = createLogger("AWS");
|
|
8133
|
+
var AWS_TOOLS = [
|
|
8134
|
+
"aws_sts_get_caller_identity",
|
|
8135
|
+
"aws_ec2_describe_regions",
|
|
8136
|
+
"aws_ec2_describe_instances",
|
|
8137
|
+
"aws_s3_list_buckets",
|
|
8138
|
+
"aws_lambda_list_functions",
|
|
8139
|
+
"aws_cloudformation_list_stacks",
|
|
8140
|
+
"aws_iam_list_account_aliases"
|
|
8141
|
+
];
|
|
8142
|
+
function resolveCredentials(opts) {
|
|
8143
|
+
const c = opts.credentials;
|
|
8144
|
+
const accessKeyId = c?.accessKeyId ?? getEnv("AWS_ACCESS_KEY_ID");
|
|
8145
|
+
const secretAccessKey = c?.secretAccessKey ?? getEnv("AWS_SECRET_ACCESS_KEY");
|
|
8146
|
+
if (!accessKeyId || !secretAccessKey) {
|
|
8147
|
+
throw new Error("awsIntegration requires accessKeyId and secretAccessKey (or AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY)");
|
|
8148
|
+
}
|
|
8149
|
+
return {
|
|
8150
|
+
accessKeyId,
|
|
8151
|
+
secretAccessKey,
|
|
8152
|
+
sessionToken: c?.sessionToken ?? getEnv("AWS_SESSION_TOKEN"),
|
|
8153
|
+
region: c?.region ?? getEnv("AWS_REGION") ?? getEnv("AWS_DEFAULT_REGION")
|
|
8154
|
+
};
|
|
8155
|
+
}
|
|
8156
|
+
function encodeAwsCredentialsPayload(c) {
|
|
8157
|
+
const o = {
|
|
8158
|
+
accessKeyId: c.accessKeyId,
|
|
8159
|
+
secretAccessKey: c.secretAccessKey
|
|
8160
|
+
};
|
|
8161
|
+
if (c.sessionToken) {
|
|
8162
|
+
o.sessionToken = c.sessionToken;
|
|
8163
|
+
}
|
|
8164
|
+
if (c.region) {
|
|
8165
|
+
o.region = c.region;
|
|
8166
|
+
}
|
|
8167
|
+
return JSON.stringify(o);
|
|
8168
|
+
}
|
|
8169
|
+
function awsIntegration(options = {}) {
|
|
8170
|
+
const creds = resolveCredentials(options);
|
|
8171
|
+
return {
|
|
8172
|
+
id: "aws",
|
|
8173
|
+
name: "Amazon Web Services",
|
|
8174
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/aws.png",
|
|
8175
|
+
description: "Query AWS accounts and resources using SigV4 (control-plane read APIs: STS, EC2, S3, Lambda, CloudFormation, IAM).",
|
|
8176
|
+
category: "Infrastructure",
|
|
8177
|
+
tools: [...AWS_TOOLS],
|
|
8178
|
+
authType: "apiKey",
|
|
8179
|
+
getHeaders() {
|
|
8180
|
+
return {
|
|
8181
|
+
Authorization: `Bearer ${encodeAwsCredentialsPayload(creds)}`
|
|
8182
|
+
};
|
|
8183
|
+
},
|
|
8184
|
+
async onInit(_client) {
|
|
8185
|
+
logger74.debug("AWS integration initialized");
|
|
8186
|
+
},
|
|
8187
|
+
async onAfterConnect(_client) {
|
|
8188
|
+
logger74.debug("AWS integration connected");
|
|
8189
|
+
}
|
|
8190
|
+
};
|
|
8191
|
+
}
|
|
8192
|
+
// src/integrations/wix.ts
|
|
8193
|
+
var logger75 = createLogger("Wix");
|
|
8194
|
+
var WIX_TOOLS = [
|
|
8195
|
+
"wix_query_products",
|
|
8196
|
+
"wix_get_product",
|
|
8197
|
+
"wix_create_product",
|
|
8198
|
+
"wix_update_product",
|
|
8199
|
+
"wix_search_orders",
|
|
8200
|
+
"wix_get_order"
|
|
8201
|
+
];
|
|
8202
|
+
function wixIntegration(options = {}) {
|
|
8203
|
+
const apiKey = options.apiKey ?? getEnv("WIX_API_KEY");
|
|
8204
|
+
const siteId = options.siteId ?? getEnv("WIX_SITE_ID");
|
|
8205
|
+
if (!apiKey) {
|
|
8206
|
+
throw new Error("wixIntegration requires apiKey or WIX_API_KEY environment variable");
|
|
8207
|
+
}
|
|
8208
|
+
if (!siteId) {
|
|
8209
|
+
throw new Error("wixIntegration requires siteId or WIX_SITE_ID environment variable");
|
|
8210
|
+
}
|
|
8211
|
+
return {
|
|
8212
|
+
id: "wix",
|
|
8213
|
+
name: "Wix",
|
|
8214
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/wix.png",
|
|
8215
|
+
description: "Manage Wix site stores, products, and e-commerce orders via REST",
|
|
8216
|
+
category: "Business",
|
|
8217
|
+
tools: [...WIX_TOOLS],
|
|
8218
|
+
authType: "apiKey",
|
|
8219
|
+
getHeaders() {
|
|
8220
|
+
return {
|
|
8221
|
+
Authorization: apiKey,
|
|
8222
|
+
"wix-site-id": siteId
|
|
8223
|
+
};
|
|
8224
|
+
},
|
|
8225
|
+
async onInit(_client) {
|
|
8226
|
+
logger75.debug("Wix integration initialized");
|
|
8227
|
+
},
|
|
8228
|
+
async onAfterConnect(_client) {
|
|
8229
|
+
logger75.debug("Wix integration connected");
|
|
8230
|
+
}
|
|
8231
|
+
};
|
|
8232
|
+
}
|
|
8233
|
+
// src/integrations/auth0.ts
|
|
8234
|
+
var logger76 = createLogger("Auth0");
|
|
8235
|
+
var AUTH0_TOOLS = [
|
|
8236
|
+
"auth0_list_users",
|
|
8237
|
+
"auth0_get_user",
|
|
8238
|
+
"auth0_create_user",
|
|
8239
|
+
"auth0_patch_user",
|
|
8240
|
+
"auth0_delete_user",
|
|
8241
|
+
"auth0_list_connections",
|
|
8242
|
+
"auth0_get_connection",
|
|
8243
|
+
"auth0_list_clients",
|
|
8244
|
+
"auth0_get_client",
|
|
8245
|
+
"auth0_create_client",
|
|
8246
|
+
"auth0_patch_client"
|
|
8247
|
+
];
|
|
8248
|
+
function normalizeAuth0Domain(raw) {
|
|
8249
|
+
let s = raw.trim();
|
|
8250
|
+
s = s.replace(/^https?:\/\//i, "");
|
|
8251
|
+
const slash = s.indexOf("/");
|
|
8252
|
+
if (slash >= 0)
|
|
8253
|
+
s = s.slice(0, slash);
|
|
8254
|
+
return s.replace(/\/$/, "");
|
|
8255
|
+
}
|
|
8256
|
+
async function fetchClientCredentialsToken(params) {
|
|
8257
|
+
const tokenUrl = `https://${params.domain}/oauth/token`;
|
|
8258
|
+
const body = new URLSearchParams({
|
|
8259
|
+
grant_type: "client_credentials",
|
|
8260
|
+
client_id: params.clientId,
|
|
8261
|
+
client_secret: params.clientSecret,
|
|
8262
|
+
audience: params.audience
|
|
8263
|
+
});
|
|
8264
|
+
const res = await fetch(tokenUrl, {
|
|
8265
|
+
method: "POST",
|
|
8266
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
8267
|
+
body
|
|
8268
|
+
});
|
|
8269
|
+
const text = await res.text();
|
|
8270
|
+
if (!res.ok) {
|
|
8271
|
+
throw new Error(`Auth0 token request failed (${res.status}): ${text}`);
|
|
8272
|
+
}
|
|
8273
|
+
const data = JSON.parse(text);
|
|
8274
|
+
if (!data.access_token) {
|
|
8275
|
+
throw new Error("Auth0 token response missing access_token");
|
|
8276
|
+
}
|
|
8277
|
+
return data;
|
|
8278
|
+
}
|
|
8279
|
+
function auth0Integration(options) {
|
|
8280
|
+
const domain = normalizeAuth0Domain(options.domain);
|
|
8281
|
+
if (!domain) {
|
|
8282
|
+
throw new Error("auth0Integration requires domain (tenant host)");
|
|
8283
|
+
}
|
|
8284
|
+
const clientId = options.clientId ?? getEnv("AUTH0_CLIENT_ID");
|
|
8285
|
+
const clientSecret = options.clientSecret ?? getEnv("AUTH0_CLIENT_SECRET");
|
|
8286
|
+
const initialToken = options.accessToken ?? getEnv("AUTH0_ACCESS_TOKEN") ?? "";
|
|
8287
|
+
if (!initialToken && (!clientId || !clientSecret)) {
|
|
8288
|
+
throw new Error("auth0Integration requires accessToken (or AUTH0_ACCESS_TOKEN) or both clientId/clientSecret (or AUTH0_CLIENT_ID / AUTH0_CLIENT_SECRET)");
|
|
8289
|
+
}
|
|
8290
|
+
let accessToken = initialToken;
|
|
8291
|
+
let tokenExpiresAtMs = 0;
|
|
8292
|
+
async function ensureFreshToken() {
|
|
8293
|
+
if (!clientId || !clientSecret)
|
|
8294
|
+
return;
|
|
8295
|
+
if (accessToken && Date.now() < tokenExpiresAtMs - 60000)
|
|
8296
|
+
return;
|
|
8297
|
+
const audience = options.audience?.trim() || `https://${domain}/api/v2/`;
|
|
8298
|
+
const tok = await fetchClientCredentialsToken({
|
|
8299
|
+
domain,
|
|
8300
|
+
clientId,
|
|
8301
|
+
clientSecret,
|
|
8302
|
+
audience
|
|
8303
|
+
});
|
|
8304
|
+
accessToken = tok.access_token;
|
|
8305
|
+
const sec = typeof tok.expires_in === "number" && tok.expires_in > 0 ? tok.expires_in : 86400;
|
|
8306
|
+
tokenExpiresAtMs = Date.now() + sec * 1000;
|
|
8307
|
+
}
|
|
8308
|
+
return {
|
|
8309
|
+
id: "auth0",
|
|
8310
|
+
name: "Auth0",
|
|
8311
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/auth0.png",
|
|
8312
|
+
description: "Manage Auth0 users, connections, and applications via the Management API",
|
|
8313
|
+
category: "Engineering",
|
|
8314
|
+
tools: [...AUTH0_TOOLS],
|
|
8315
|
+
authType: "apiKey",
|
|
8316
|
+
getHeaders() {
|
|
8317
|
+
return {
|
|
8318
|
+
Authorization: `Bearer ${accessToken}`,
|
|
8319
|
+
"X-Auth0-Domain": domain
|
|
8320
|
+
};
|
|
8321
|
+
},
|
|
8322
|
+
async onInit() {
|
|
8323
|
+
logger76.debug("Auth0 integration initialized");
|
|
8324
|
+
},
|
|
8325
|
+
async onBeforeConnect() {
|
|
8326
|
+
await ensureFreshToken();
|
|
8327
|
+
if (!accessToken) {
|
|
8328
|
+
throw new Error("Auth0 access token is not configured");
|
|
8329
|
+
}
|
|
8330
|
+
},
|
|
8331
|
+
async onAfterConnect() {
|
|
8332
|
+
logger76.debug("Auth0 integration connected");
|
|
8333
|
+
}
|
|
8334
|
+
};
|
|
8335
|
+
}
|
|
8336
|
+
// src/integrations/binance.ts
|
|
8337
|
+
var logger77 = createLogger("Binance");
|
|
8338
|
+
var BINANCE_TOOLS = [
|
|
8339
|
+
"binance_ping",
|
|
8340
|
+
"binance_get_server_time",
|
|
8341
|
+
"binance_get_exchange_info",
|
|
8342
|
+
"binance_get_ticker_price",
|
|
8343
|
+
"binance_get_ticker_24hr",
|
|
8344
|
+
"binance_get_order_book",
|
|
8345
|
+
"binance_get_recent_trades",
|
|
8346
|
+
"binance_get_klines",
|
|
8347
|
+
"binance_get_account",
|
|
8348
|
+
"binance_get_open_orders",
|
|
8349
|
+
"binance_get_all_orders",
|
|
8350
|
+
"binance_get_my_trades"
|
|
8351
|
+
];
|
|
8352
|
+
function normalizeBaseUrl(url) {
|
|
8353
|
+
const u = (url ?? "").trim().replace(/\/+$/, "");
|
|
8354
|
+
return u || "https://api.binance.com";
|
|
8355
|
+
}
|
|
8356
|
+
function binanceIntegration(options = {}) {
|
|
8357
|
+
const apiKey = options.apiKey ?? getEnv("BINANCE_API_KEY");
|
|
8358
|
+
const secret = options.secret ?? getEnv("BINANCE_SECRET_KEY");
|
|
8359
|
+
if (!apiKey || !secret) {
|
|
8360
|
+
throw new Error("binanceIntegration requires apiKey and secret (or BINANCE_API_KEY and BINANCE_SECRET_KEY environment variables)");
|
|
8361
|
+
}
|
|
8362
|
+
const baseUrl = normalizeBaseUrl(options.baseUrl);
|
|
8363
|
+
return {
|
|
8364
|
+
id: "binance",
|
|
8365
|
+
name: "Binance",
|
|
8366
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/binance.png",
|
|
8367
|
+
description: "Read Binance Spot market data and account information with API keys scoped to reading only",
|
|
8368
|
+
category: "Finance",
|
|
8369
|
+
tools: [...BINANCE_TOOLS],
|
|
8370
|
+
authType: "apiKey",
|
|
8371
|
+
getHeaders() {
|
|
8372
|
+
return {
|
|
8373
|
+
Authorization: `Bearer ${apiKey}`,
|
|
8374
|
+
"X-MBX-APIKEY": apiKey,
|
|
8375
|
+
"X-Binance-Api-Secret": secret,
|
|
8376
|
+
"X-Binance-Base-Url": baseUrl
|
|
8377
|
+
};
|
|
8378
|
+
},
|
|
8379
|
+
async onInit(_client) {
|
|
8380
|
+
logger77.debug("Binance integration initialized");
|
|
8381
|
+
},
|
|
8382
|
+
async onAfterConnect(_client) {
|
|
8383
|
+
logger77.debug("Binance integration connected");
|
|
8384
|
+
}
|
|
8385
|
+
};
|
|
8386
|
+
}
|
|
8387
|
+
// src/integrations/canva.ts
|
|
8388
|
+
var logger78 = createLogger("Canva");
|
|
8389
|
+
var CANVA_TOOLS = [
|
|
8390
|
+
"canva_get_me",
|
|
8391
|
+
"canva_get_profile",
|
|
8392
|
+
"canva_list_designs",
|
|
8393
|
+
"canva_get_design",
|
|
8394
|
+
"canva_get_design_export_formats",
|
|
8395
|
+
"canva_create_design",
|
|
8396
|
+
"canva_get_folder",
|
|
8397
|
+
"canva_list_folder_items",
|
|
8398
|
+
"canva_create_folder",
|
|
8399
|
+
"canva_update_folder",
|
|
8400
|
+
"canva_delete_folder",
|
|
8401
|
+
"canva_list_brand_templates",
|
|
8402
|
+
"canva_get_brand_template",
|
|
8403
|
+
"canva_create_export_job",
|
|
8404
|
+
"canva_get_export_job"
|
|
8405
|
+
];
|
|
8406
|
+
function canvaIntegration(config = {}) {
|
|
8407
|
+
const oauth = {
|
|
8408
|
+
provider: "canva",
|
|
8409
|
+
clientId: config.clientId ?? getEnv("CANVA_CLIENT_ID"),
|
|
8410
|
+
clientSecret: config.clientSecret ?? getEnv("CANVA_CLIENT_SECRET"),
|
|
8411
|
+
scopes: config.scopes,
|
|
8412
|
+
optionalScopes: config.optionalScopes,
|
|
8413
|
+
redirectUri: config.redirectUri,
|
|
8414
|
+
config: { ...config }
|
|
8415
|
+
};
|
|
8416
|
+
return {
|
|
8417
|
+
id: "canva",
|
|
8418
|
+
name: "Canva",
|
|
8419
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/canva.png",
|
|
8420
|
+
description: "List and create Canva designs, manage folders, and export assets",
|
|
8421
|
+
category: "Productivity",
|
|
8422
|
+
tools: [...CANVA_TOOLS],
|
|
8423
|
+
oauth,
|
|
8424
|
+
async onInit(_client) {
|
|
8425
|
+
logger78.debug("Canva integration initialized");
|
|
8426
|
+
},
|
|
8427
|
+
async onAfterConnect(_client) {
|
|
8428
|
+
logger78.debug("Canva integration connected");
|
|
8429
|
+
}
|
|
8430
|
+
};
|
|
8431
|
+
}
|
|
8432
|
+
// src/integrations/clerk.ts
|
|
8433
|
+
var logger79 = createLogger("Clerk");
|
|
8434
|
+
var CLERK_TOOLS = [
|
|
8435
|
+
"clerk_list_users",
|
|
8436
|
+
"clerk_get_user",
|
|
8437
|
+
"clerk_create_user",
|
|
8438
|
+
"clerk_update_user",
|
|
8439
|
+
"clerk_delete_user",
|
|
8440
|
+
"clerk_list_organizations",
|
|
8441
|
+
"clerk_get_organization",
|
|
8442
|
+
"clerk_create_organization",
|
|
8443
|
+
"clerk_update_organization",
|
|
8444
|
+
"clerk_delete_organization",
|
|
8445
|
+
"clerk_list_sessions",
|
|
8446
|
+
"clerk_get_session",
|
|
8447
|
+
"clerk_revoke_session"
|
|
8448
|
+
];
|
|
8449
|
+
function clerkIntegration(options = {}) {
|
|
8450
|
+
const secretKey = options.secretKey ?? getEnv("CLERK_SECRET_KEY");
|
|
8451
|
+
if (!secretKey) {
|
|
8452
|
+
throw new Error("clerkIntegration requires secretKey or CLERK_SECRET_KEY environment variable");
|
|
8453
|
+
}
|
|
8454
|
+
return {
|
|
8455
|
+
id: "clerk",
|
|
8456
|
+
name: "Clerk",
|
|
8457
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/clerk.png",
|
|
8458
|
+
description: "Manage Clerk users, organizations, and sessions via the Backend API",
|
|
8459
|
+
category: "Business",
|
|
8460
|
+
tools: [...CLERK_TOOLS],
|
|
8461
|
+
authType: "apiKey",
|
|
8462
|
+
getHeaders() {
|
|
8463
|
+
return {
|
|
8464
|
+
Authorization: `Bearer ${secretKey}`
|
|
8465
|
+
};
|
|
8466
|
+
},
|
|
8467
|
+
async onInit(_client) {
|
|
8468
|
+
logger79.debug("Clerk integration initialized");
|
|
8469
|
+
},
|
|
8470
|
+
async onAfterConnect(_client) {
|
|
8471
|
+
logger79.debug("Clerk integration connected");
|
|
8472
|
+
}
|
|
8473
|
+
};
|
|
8474
|
+
}
|
|
8475
|
+
// src/integrations/cloudflare.ts
|
|
8476
|
+
var logger80 = createLogger("Cloudflare");
|
|
8477
|
+
var CLOUDFLARE_TOOLS = [
|
|
8478
|
+
"cloudflare_verify_token",
|
|
8479
|
+
"cloudflare_get_user",
|
|
8480
|
+
"cloudflare_list_accounts",
|
|
8481
|
+
"cloudflare_get_account",
|
|
8482
|
+
"cloudflare_list_zones",
|
|
8483
|
+
"cloudflare_get_zone",
|
|
8484
|
+
"cloudflare_list_dns_records",
|
|
8485
|
+
"cloudflare_create_dns_record",
|
|
8486
|
+
"cloudflare_update_dns_record",
|
|
8487
|
+
"cloudflare_delete_dns_record",
|
|
8488
|
+
"cloudflare_purge_zone_cache",
|
|
8489
|
+
"cloudflare_list_worker_scripts"
|
|
8490
|
+
];
|
|
8491
|
+
var DEFAULT_SCOPES = [
|
|
8492
|
+
"account:read",
|
|
8493
|
+
"user:read",
|
|
8494
|
+
"zone:read",
|
|
8495
|
+
"workers:read",
|
|
8496
|
+
"workers:write",
|
|
8497
|
+
"pages:write",
|
|
8498
|
+
"offline_access"
|
|
8499
|
+
];
|
|
8500
|
+
function cloudflareIntegration(config = {}) {
|
|
8501
|
+
const apiToken = config.apiToken ?? getEnv("CLOUDFLARE_API_TOKEN");
|
|
8502
|
+
if (apiToken && apiToken.trim() !== "") {
|
|
8503
|
+
return {
|
|
8504
|
+
id: "cloudflare",
|
|
8505
|
+
name: "Cloudflare",
|
|
8506
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/cloudflare.png",
|
|
8507
|
+
description: "Manage Cloudflare zones, DNS, cache, and Workers via the Cloudflare API",
|
|
8508
|
+
category: "Infrastructure",
|
|
8509
|
+
tools: [...CLOUDFLARE_TOOLS],
|
|
8510
|
+
authType: "apiKey",
|
|
8511
|
+
getHeaders() {
|
|
8512
|
+
return { Authorization: `Bearer ${apiToken.trim()}` };
|
|
8513
|
+
},
|
|
8514
|
+
async onInit(_client) {
|
|
8515
|
+
logger80.debug("Cloudflare integration initialized (API token)");
|
|
8516
|
+
},
|
|
8517
|
+
async onAfterConnect(_client) {
|
|
8518
|
+
logger80.debug("Cloudflare integration connected");
|
|
8519
|
+
}
|
|
8520
|
+
};
|
|
8521
|
+
}
|
|
8522
|
+
const oauth = {
|
|
8523
|
+
provider: "cloudflare",
|
|
8524
|
+
clientId: config.clientId ?? getEnv("CLOUDFLARE_CLIENT_ID"),
|
|
8525
|
+
clientSecret: config.clientSecret ?? getEnv("CLOUDFLARE_CLIENT_SECRET"),
|
|
8526
|
+
scopes: config.scopes?.length ? config.scopes : [...DEFAULT_SCOPES],
|
|
8527
|
+
redirectUri: config.redirectUri,
|
|
8528
|
+
config: {
|
|
8529
|
+
authorization_endpoint: "https://dash.cloudflare.com/oauth2/auth",
|
|
8530
|
+
token_endpoint: "https://dash.cloudflare.com/oauth2/token",
|
|
8531
|
+
response_type: "code",
|
|
8532
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
8533
|
+
}
|
|
8534
|
+
};
|
|
8535
|
+
return {
|
|
8536
|
+
id: "cloudflare",
|
|
8537
|
+
name: "Cloudflare",
|
|
8538
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/cloudflare.png",
|
|
8539
|
+
description: "Manage Cloudflare zones, DNS, cache, and Workers via the Cloudflare API",
|
|
8540
|
+
category: "Infrastructure",
|
|
8541
|
+
tools: [...CLOUDFLARE_TOOLS],
|
|
8542
|
+
oauth,
|
|
8543
|
+
async onInit(_client) {
|
|
8544
|
+
logger80.debug("Cloudflare integration initialized (OAuth)");
|
|
8545
|
+
},
|
|
8546
|
+
async onAfterConnect(_client) {
|
|
8547
|
+
logger80.debug("Cloudflare integration connected");
|
|
8548
|
+
}
|
|
8549
|
+
};
|
|
8550
|
+
}
|
|
8551
|
+
// src/integrations/clickup.ts
|
|
8552
|
+
var logger81 = createLogger("ClickUp");
|
|
8553
|
+
var CLICKUP_TOOLS = [
|
|
8554
|
+
"clickup_get_authorized_user",
|
|
8555
|
+
"clickup_list_teams",
|
|
8556
|
+
"clickup_list_spaces",
|
|
8557
|
+
"clickup_list_folders",
|
|
8558
|
+
"clickup_list_lists_in_folder",
|
|
8559
|
+
"clickup_list_folderless_lists",
|
|
8560
|
+
"clickup_list_tasks",
|
|
8561
|
+
"clickup_get_task",
|
|
8562
|
+
"clickup_create_task",
|
|
8563
|
+
"clickup_update_task",
|
|
8564
|
+
"clickup_delete_task",
|
|
8565
|
+
"clickup_list_task_comments",
|
|
8566
|
+
"clickup_create_task_comment"
|
|
8567
|
+
];
|
|
8568
|
+
function clickupIntegration(config = {}) {
|
|
8569
|
+
const oauth = {
|
|
8570
|
+
provider: "clickup",
|
|
8571
|
+
clientId: config.clientId ?? getEnv("CLICKUP_CLIENT_ID"),
|
|
8572
|
+
clientSecret: config.clientSecret ?? getEnv("CLICKUP_CLIENT_SECRET"),
|
|
8573
|
+
scopes: config.scopes ?? [],
|
|
8574
|
+
optionalScopes: config.optionalScopes,
|
|
8575
|
+
redirectUri: config.redirectUri,
|
|
8576
|
+
config: {
|
|
8577
|
+
authorization_endpoint: "https://app.clickup.com/api",
|
|
8578
|
+
token_endpoint: "https://api.clickup.com/api/v2/oauth/token"
|
|
8579
|
+
}
|
|
8580
|
+
};
|
|
8581
|
+
return {
|
|
8582
|
+
id: "clickup",
|
|
8583
|
+
name: "ClickUp",
|
|
8584
|
+
tools: [...CLICKUP_TOOLS],
|
|
8585
|
+
oauth,
|
|
8586
|
+
async onInit(_client) {
|
|
8587
|
+
logger81.debug("ClickUp integration initialized");
|
|
8588
|
+
},
|
|
8589
|
+
async onAfterConnect(_client) {
|
|
8590
|
+
logger81.debug("ClickUp integration connected");
|
|
8591
|
+
}
|
|
8592
|
+
};
|
|
8593
|
+
}
|
|
8594
|
+
// src/integrations/excel.ts
|
|
8595
|
+
var logger82 = createLogger("Excel");
|
|
8596
|
+
var EXCEL_TOOLS = [
|
|
8597
|
+
"excel_add_table_rows",
|
|
8598
|
+
"excel_add_worksheet",
|
|
8599
|
+
"excel_clear_range",
|
|
8600
|
+
"excel_create",
|
|
8601
|
+
"excel_create_table",
|
|
8602
|
+
"excel_delete",
|
|
8603
|
+
"excel_delete_worksheet",
|
|
8604
|
+
"excel_get",
|
|
8605
|
+
"excel_get_range",
|
|
8606
|
+
"excel_get_table_rows",
|
|
8607
|
+
"excel_get_used_range",
|
|
8608
|
+
"excel_list",
|
|
8609
|
+
"excel_list_tables",
|
|
8610
|
+
"excel_list_worksheets",
|
|
8611
|
+
"excel_share",
|
|
8612
|
+
"excel_update_range"
|
|
8613
|
+
];
|
|
8614
|
+
function excelIntegration(config = {}) {
|
|
8615
|
+
const oauth = {
|
|
8616
|
+
provider: "excel",
|
|
8617
|
+
clientId: config.clientId ?? getEnv("EXCEL_CLIENT_ID"),
|
|
8618
|
+
clientSecret: config.clientSecret ?? getEnv("EXCEL_CLIENT_SECRET"),
|
|
8619
|
+
scopes: config.scopes,
|
|
8620
|
+
optionalScopes: config.optionalScopes,
|
|
8621
|
+
redirectUri: config.redirectUri,
|
|
8622
|
+
config
|
|
8623
|
+
};
|
|
8624
|
+
return {
|
|
8625
|
+
id: "excel",
|
|
8626
|
+
name: "Excel",
|
|
8627
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/excel.png",
|
|
8628
|
+
tools: [...EXCEL_TOOLS],
|
|
8629
|
+
oauth,
|
|
8630
|
+
async onInit(_client) {
|
|
8631
|
+
logger82.debug("Excel integration initialized");
|
|
8632
|
+
},
|
|
8633
|
+
async onAfterConnect(_client) {
|
|
8634
|
+
logger82.debug("Excel integration connected");
|
|
8635
|
+
}
|
|
8636
|
+
};
|
|
8637
|
+
}
|
|
8638
|
+
// src/integrations/ga4.ts
|
|
8639
|
+
var GA4_TOOLS = [
|
|
8640
|
+
"ga4_batch_run_reports",
|
|
8641
|
+
"ga4_get_property",
|
|
8642
|
+
"ga4_list_account_summaries",
|
|
8643
|
+
"ga4_run_realtime_report",
|
|
8644
|
+
"ga4_run_report"
|
|
8645
|
+
];
|
|
8646
|
+
function ga4Integration(config = {}) {
|
|
8647
|
+
const oauth = {
|
|
8648
|
+
provider: "ga4",
|
|
8649
|
+
clientId: config.clientId ?? getEnv("GA4_CLIENT_ID"),
|
|
8650
|
+
clientSecret: config.clientSecret ?? getEnv("GA4_CLIENT_SECRET"),
|
|
8651
|
+
scopes: config.scopes ?? ["https://www.googleapis.com/auth/analytics.readonly"],
|
|
8652
|
+
optionalScopes: config.optionalScopes,
|
|
8653
|
+
redirectUri: config.redirectUri
|
|
8654
|
+
};
|
|
8655
|
+
return {
|
|
8656
|
+
id: "ga4",
|
|
8657
|
+
name: "Google Analytics 4",
|
|
8658
|
+
tools: [...GA4_TOOLS],
|
|
8659
|
+
oauth
|
|
8660
|
+
};
|
|
8661
|
+
}
|
|
8662
|
+
// src/integrations/gdrive.ts
|
|
8663
|
+
var logger83 = createLogger("Google Drive");
|
|
8664
|
+
var GDRIVE_TOOLS = [
|
|
8665
|
+
"gdrive_copy_file",
|
|
8666
|
+
"gdrive_create_folder",
|
|
8667
|
+
"gdrive_delete_file",
|
|
8668
|
+
"gdrive_download_file",
|
|
8669
|
+
"gdrive_get_about",
|
|
8670
|
+
"gdrive_get_file",
|
|
8671
|
+
"gdrive_list_files",
|
|
8672
|
+
"gdrive_list_permissions",
|
|
8673
|
+
"gdrive_move_file",
|
|
8674
|
+
"gdrive_remove_permission",
|
|
8675
|
+
"gdrive_rename_file",
|
|
8676
|
+
"gdrive_share_file",
|
|
8677
|
+
"gdrive_trash_file",
|
|
8678
|
+
"gdrive_upload_text_file"
|
|
8679
|
+
];
|
|
8680
|
+
function gdriveIntegration(config = {}) {
|
|
8681
|
+
const oauth = {
|
|
8682
|
+
provider: "gdrive",
|
|
8683
|
+
clientId: config.clientId ?? getEnv("GDRIVE_CLIENT_ID"),
|
|
8684
|
+
clientSecret: config.clientSecret ?? getEnv("GDRIVE_CLIENT_SECRET"),
|
|
8685
|
+
scopes: config.scopes,
|
|
8686
|
+
optionalScopes: config.optionalScopes,
|
|
8687
|
+
redirectUri: config.redirectUri,
|
|
8688
|
+
config
|
|
8689
|
+
};
|
|
8690
|
+
return {
|
|
8691
|
+
id: "gdrive",
|
|
8692
|
+
name: "Google Drive",
|
|
8693
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/google_drive.png",
|
|
8694
|
+
tools: [...GDRIVE_TOOLS],
|
|
8695
|
+
oauth,
|
|
8696
|
+
async onInit(_client) {
|
|
8697
|
+
logger83.debug("Google Drive integration initialized");
|
|
8698
|
+
},
|
|
8699
|
+
async onAfterConnect(_client) {
|
|
8700
|
+
logger83.debug("Google Drive integration connected");
|
|
8701
|
+
}
|
|
8702
|
+
};
|
|
8703
|
+
}
|
|
8704
|
+
// src/integrations/gitlab.ts
|
|
8705
|
+
var logger84 = createLogger("GitLab");
|
|
8706
|
+
var GITLAB_TOOLS = [
|
|
8707
|
+
"gitlab_list_projects",
|
|
8708
|
+
"gitlab_list_own_projects",
|
|
8709
|
+
"gitlab_get_project",
|
|
8710
|
+
"gitlab_create_project",
|
|
8711
|
+
"gitlab_create_issue",
|
|
8712
|
+
"gitlab_list_issues",
|
|
8713
|
+
"gitlab_get_issue",
|
|
8714
|
+
"gitlab_update_issue",
|
|
8715
|
+
"gitlab_close_issue",
|
|
8716
|
+
"gitlab_create_merge_request",
|
|
8717
|
+
"gitlab_list_merge_requests",
|
|
8718
|
+
"gitlab_get_merge_request",
|
|
8719
|
+
"gitlab_accept_merge_request",
|
|
8720
|
+
"gitlab_list_branches",
|
|
8721
|
+
"gitlab_create_branch",
|
|
8722
|
+
"gitlab_list_commits",
|
|
8723
|
+
"gitlab_get_commit",
|
|
8724
|
+
"gitlab_list_issue_notes",
|
|
8725
|
+
"gitlab_create_issue_note",
|
|
8726
|
+
"gitlab_list_milestones",
|
|
8727
|
+
"gitlab_create_milestone",
|
|
8728
|
+
"gitlab_get_current_user"
|
|
8729
|
+
];
|
|
8730
|
+
function gitlabIntegration(config = {}) {
|
|
8731
|
+
const oauth = {
|
|
8732
|
+
provider: "gitlab",
|
|
8733
|
+
clientId: config.clientId ?? getEnv("GITLAB_CLIENT_ID"),
|
|
8734
|
+
clientSecret: config.clientSecret ?? getEnv("GITLAB_CLIENT_SECRET"),
|
|
8735
|
+
scopes: config.scopes ?? ["read_api", "write_api", "read_user"],
|
|
8736
|
+
optionalScopes: config.optionalScopes,
|
|
8737
|
+
redirectUri: config.redirectUri,
|
|
8738
|
+
config: {
|
|
8739
|
+
apiBaseUrl: config.apiBaseUrl ?? "https://gitlab.com/api/v4/",
|
|
8740
|
+
...config
|
|
8741
|
+
}
|
|
8742
|
+
};
|
|
8743
|
+
return {
|
|
8744
|
+
id: "gitlab",
|
|
8745
|
+
name: "GitLab",
|
|
8746
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/gitlab.png",
|
|
8747
|
+
description: "Manage GitLab projects, issues, merge requests, and CI/CD",
|
|
8748
|
+
category: "Engineering",
|
|
8749
|
+
tools: [...GITLAB_TOOLS],
|
|
8750
|
+
oauth,
|
|
8751
|
+
async onInit(_client) {
|
|
8752
|
+
logger84.debug("GitLab integration initialized");
|
|
8753
|
+
},
|
|
8754
|
+
async onAfterConnect(_client) {
|
|
8755
|
+
logger84.debug("GitLab integration connected");
|
|
8756
|
+
}
|
|
8757
|
+
};
|
|
8758
|
+
}
|
|
8759
|
+
// src/integrations/gmeet.ts
|
|
8760
|
+
var logger85 = createLogger("Google Meet");
|
|
8761
|
+
var GMEET_TOOLS = [
|
|
8762
|
+
"gmeet_add_meet_to_event",
|
|
8763
|
+
"gmeet_create_meeting",
|
|
8764
|
+
"gmeet_delete_meeting",
|
|
8765
|
+
"gmeet_get_meeting",
|
|
8766
|
+
"gmeet_list_meetings",
|
|
8767
|
+
"gmeet_update_meeting"
|
|
8768
|
+
];
|
|
8769
|
+
function gmeetIntegration(config = {}) {
|
|
8770
|
+
const oauth = {
|
|
8771
|
+
provider: "gmeet",
|
|
8772
|
+
clientId: config.clientId ?? getEnv("GMEET_CLIENT_ID"),
|
|
8773
|
+
clientSecret: config.clientSecret ?? getEnv("GMEET_CLIENT_SECRET"),
|
|
8774
|
+
scopes: config.scopes,
|
|
8775
|
+
optionalScopes: config.optionalScopes,
|
|
8776
|
+
redirectUri: config.redirectUri,
|
|
8777
|
+
config: { ...config }
|
|
8778
|
+
};
|
|
8779
|
+
return {
|
|
8780
|
+
id: "gmeet",
|
|
8781
|
+
name: "Google Meet",
|
|
8782
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/google_meet.webp",
|
|
8783
|
+
description: "Create and manage Google Meet links via Calendar conference data",
|
|
8784
|
+
category: "Communication",
|
|
8785
|
+
tools: [...GMEET_TOOLS],
|
|
8786
|
+
oauth,
|
|
8787
|
+
async onInit(_client) {
|
|
8788
|
+
logger85.debug("Google Meet integration initialized");
|
|
8789
|
+
},
|
|
8790
|
+
async onAfterConnect(_client) {
|
|
8791
|
+
logger85.debug("Google Meet integration connected");
|
|
8792
|
+
}
|
|
8793
|
+
};
|
|
8794
|
+
}
|
|
8795
|
+
// src/integrations/monday.ts
|
|
8796
|
+
var logger86 = createLogger("Monday");
|
|
8797
|
+
var MONDAY_TOOLS = [
|
|
8798
|
+
"monday_me",
|
|
8799
|
+
"monday_list_workspaces",
|
|
8800
|
+
"monday_list_boards",
|
|
8801
|
+
"monday_get_board",
|
|
8802
|
+
"monday_list_board_items",
|
|
8803
|
+
"monday_next_items_page",
|
|
8804
|
+
"monday_get_items",
|
|
8805
|
+
"monday_create_item",
|
|
8806
|
+
"monday_update_item_columns",
|
|
8807
|
+
"monday_create_update",
|
|
8808
|
+
"monday_delete_item"
|
|
8809
|
+
];
|
|
8810
|
+
function mondayIntegration(config = {}) {
|
|
8811
|
+
const oauth = {
|
|
8812
|
+
provider: "monday",
|
|
8813
|
+
clientId: config.clientId ?? getEnv("MONDAY_CLIENT_ID"),
|
|
8814
|
+
clientSecret: config.clientSecret ?? getEnv("MONDAY_CLIENT_SECRET"),
|
|
8815
|
+
scopes: config.scopes ?? [],
|
|
8816
|
+
redirectUri: config.redirectUri,
|
|
8817
|
+
config: {
|
|
8818
|
+
authorization_endpoint: "https://auth.monday.com/oauth2/authorize",
|
|
8819
|
+
token_endpoint: "https://auth.monday.com/oauth2/token",
|
|
8820
|
+
response_type: "code",
|
|
8821
|
+
grant_types_supported: ["authorization_code"]
|
|
8822
|
+
}
|
|
8823
|
+
};
|
|
8824
|
+
return {
|
|
8825
|
+
id: "monday",
|
|
8826
|
+
name: "Monday.com",
|
|
8827
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/monday.png",
|
|
8828
|
+
description: "Manage Monday.com boards, items, columns, and updates",
|
|
8829
|
+
category: "Productivity",
|
|
8830
|
+
tools: [...MONDAY_TOOLS],
|
|
8831
|
+
oauth,
|
|
8832
|
+
async onInit(_client) {
|
|
8833
|
+
logger86.debug("Monday.com integration initialized");
|
|
8834
|
+
},
|
|
8835
|
+
async onAfterConnect(_client) {
|
|
8836
|
+
logger86.debug("Monday.com integration connected");
|
|
8837
|
+
}
|
|
8838
|
+
};
|
|
8839
|
+
}
|
|
8840
|
+
// src/integrations/planetscale.ts
|
|
8841
|
+
var PLANETSCALE_TOOLS = [
|
|
8842
|
+
"planetscale_get_current_user",
|
|
8843
|
+
"planetscale_list_organizations",
|
|
8844
|
+
"planetscale_get_organization",
|
|
8845
|
+
"planetscale_list_databases",
|
|
8846
|
+
"planetscale_get_database",
|
|
8847
|
+
"planetscale_list_branches",
|
|
8848
|
+
"planetscale_get_branch",
|
|
8849
|
+
"planetscale_list_deploy_requests",
|
|
8850
|
+
"planetscale_get_deploy_request"
|
|
8851
|
+
];
|
|
8852
|
+
function planetscaleIntegration(config = {}) {
|
|
8853
|
+
const oauth = {
|
|
8854
|
+
provider: "planetscale",
|
|
8855
|
+
clientId: config.clientId ?? getEnv("PLANETSCALE_CLIENT_ID"),
|
|
8856
|
+
clientSecret: config.clientSecret ?? getEnv("PLANETSCALE_CLIENT_SECRET"),
|
|
8857
|
+
scopes: config.scopes ?? ["database:read_branches", "database:read_deploy_requests", "organization:read"],
|
|
8858
|
+
optionalScopes: config.optionalScopes,
|
|
8859
|
+
redirectUri: config.redirectUri,
|
|
8860
|
+
config: {
|
|
8861
|
+
authorization_endpoint: "https://auth.planetscale.com/oauth/authorize",
|
|
8862
|
+
token_endpoint: "https://auth.planetscale.com/oauth/token",
|
|
8863
|
+
apiBaseUrl: config.apiBaseUrl ?? "https://api.planetscale.com/v1"
|
|
8864
|
+
}
|
|
8865
|
+
};
|
|
8866
|
+
return {
|
|
8867
|
+
id: "planetscale",
|
|
8868
|
+
name: "PlanetScale",
|
|
8869
|
+
category: "Infrastructure",
|
|
8870
|
+
tools: [...PLANETSCALE_TOOLS],
|
|
8871
|
+
oauth
|
|
8872
|
+
};
|
|
8873
|
+
}
|
|
8874
|
+
// src/integrations/powerpoint.ts
|
|
8875
|
+
var logger87 = createLogger("PowerPoint");
|
|
8876
|
+
var POWERPOINT_TOOLS = [
|
|
8877
|
+
"powerpoint_copy",
|
|
8878
|
+
"powerpoint_create",
|
|
8879
|
+
"powerpoint_delete",
|
|
8880
|
+
"powerpoint_get",
|
|
8881
|
+
"powerpoint_list",
|
|
8882
|
+
"powerpoint_share",
|
|
8883
|
+
"powerpoint_update_content"
|
|
8884
|
+
];
|
|
8885
|
+
function powerpointIntegration(config = {}) {
|
|
8886
|
+
const oauth = {
|
|
8887
|
+
provider: "powerpoint",
|
|
8888
|
+
clientId: config.clientId ?? getEnv("POWERPOINT_CLIENT_ID"),
|
|
8889
|
+
clientSecret: config.clientSecret ?? getEnv("POWERPOINT_CLIENT_SECRET"),
|
|
8890
|
+
scopes: config.scopes,
|
|
8891
|
+
optionalScopes: config.optionalScopes,
|
|
8892
|
+
redirectUri: config.redirectUri,
|
|
8893
|
+
config
|
|
8894
|
+
};
|
|
8895
|
+
return {
|
|
8896
|
+
id: "powerpoint",
|
|
8897
|
+
name: "PowerPoint",
|
|
8898
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/powerpoint.png",
|
|
8899
|
+
tools: [...POWERPOINT_TOOLS],
|
|
8900
|
+
oauth,
|
|
8901
|
+
async onInit(_client) {
|
|
8902
|
+
logger87.debug("PowerPoint integration initialized");
|
|
8903
|
+
},
|
|
8904
|
+
async onAfterConnect(_client) {
|
|
8905
|
+
logger87.debug("PowerPoint integration connected");
|
|
8906
|
+
}
|
|
8907
|
+
};
|
|
8908
|
+
}
|
|
8909
|
+
// src/integrations/reddit.ts
|
|
8910
|
+
var REDDIT_TOOLS = [
|
|
8911
|
+
"reddit_get_me",
|
|
8912
|
+
"reddit_get_subreddit_about",
|
|
8913
|
+
"reddit_list_subreddit_posts",
|
|
8914
|
+
"reddit_get_post_thread",
|
|
8915
|
+
"reddit_search",
|
|
8916
|
+
"reddit_submit_post",
|
|
8917
|
+
"reddit_comment",
|
|
8918
|
+
"reddit_vote",
|
|
8919
|
+
"reddit_list_my_subreddits",
|
|
8920
|
+
"reddit_list_popular_subreddits"
|
|
8921
|
+
];
|
|
8922
|
+
function redditIntegration(config = {}) {
|
|
8923
|
+
const oauth = {
|
|
8924
|
+
provider: "reddit",
|
|
8925
|
+
clientId: config.clientId ?? getEnv("REDDIT_CLIENT_ID"),
|
|
8926
|
+
clientSecret: config.clientSecret ?? getEnv("REDDIT_CLIENT_SECRET"),
|
|
8927
|
+
scopes: config.scopes ?? ["identity", "read", "submit", "vote", "mysubreddits"],
|
|
8928
|
+
optionalScopes: config.optionalScopes,
|
|
8929
|
+
redirectUri: config.redirectUri
|
|
8930
|
+
};
|
|
8931
|
+
return {
|
|
8932
|
+
id: "reddit",
|
|
8933
|
+
name: "Reddit",
|
|
8934
|
+
tools: [...REDDIT_TOOLS],
|
|
8935
|
+
oauth
|
|
8936
|
+
};
|
|
8937
|
+
}
|
|
8938
|
+
// src/integrations/resend.ts
|
|
8939
|
+
var logger88 = createLogger("Resend");
|
|
8940
|
+
var RESEND_TOOLS = [
|
|
8941
|
+
"resend_list_domains",
|
|
8942
|
+
"resend_get_domain",
|
|
8943
|
+
"resend_create_domain",
|
|
8944
|
+
"resend_delete_domain",
|
|
8945
|
+
"resend_verify_domain",
|
|
8946
|
+
"resend_send_email",
|
|
8947
|
+
"resend_get_email",
|
|
8948
|
+
"resend_cancel_scheduled_email"
|
|
8949
|
+
];
|
|
8950
|
+
function resendIntegration(options = {}) {
|
|
8951
|
+
const apiKey = options.apiKey ?? getEnv("RESEND_API_KEY");
|
|
8952
|
+
if (!apiKey) {
|
|
8953
|
+
throw new Error("resendIntegration requires apiKey or RESEND_API_KEY");
|
|
5963
8954
|
}
|
|
5964
8955
|
return {
|
|
5965
|
-
id: "
|
|
5966
|
-
name: "
|
|
5967
|
-
tools: [...
|
|
8956
|
+
id: "resend",
|
|
8957
|
+
name: "Resend",
|
|
8958
|
+
tools: [...RESEND_TOOLS],
|
|
5968
8959
|
authType: "apiKey",
|
|
5969
8960
|
getHeaders() {
|
|
5970
|
-
return {
|
|
5971
|
-
|
|
5972
|
-
|
|
8961
|
+
return { Authorization: `Bearer ${apiKey}` };
|
|
8962
|
+
},
|
|
8963
|
+
async onInit(_client) {
|
|
8964
|
+
logger88.debug("Resend integration initialized");
|
|
8965
|
+
},
|
|
8966
|
+
async onAfterConnect(_client) {
|
|
8967
|
+
logger88.debug("Resend integration connected");
|
|
8968
|
+
}
|
|
8969
|
+
};
|
|
8970
|
+
}
|
|
8971
|
+
// src/integrations/word.ts
|
|
8972
|
+
var logger89 = createLogger("Word");
|
|
8973
|
+
var WORD_TOOLS = [
|
|
8974
|
+
"word_copy",
|
|
8975
|
+
"word_create",
|
|
8976
|
+
"word_delete",
|
|
8977
|
+
"word_get",
|
|
8978
|
+
"word_list",
|
|
8979
|
+
"word_share",
|
|
8980
|
+
"word_update_content"
|
|
8981
|
+
];
|
|
8982
|
+
function wordIntegration(config = {}) {
|
|
8983
|
+
const oauth = {
|
|
8984
|
+
provider: "word",
|
|
8985
|
+
clientId: config.clientId ?? getEnv("WORD_CLIENT_ID"),
|
|
8986
|
+
clientSecret: config.clientSecret ?? getEnv("WORD_CLIENT_SECRET"),
|
|
8987
|
+
scopes: config.scopes,
|
|
8988
|
+
optionalScopes: config.optionalScopes,
|
|
8989
|
+
redirectUri: config.redirectUri,
|
|
8990
|
+
config
|
|
8991
|
+
};
|
|
8992
|
+
return {
|
|
8993
|
+
id: "word",
|
|
8994
|
+
name: "Word",
|
|
8995
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/word.png",
|
|
8996
|
+
tools: [...WORD_TOOLS],
|
|
8997
|
+
oauth,
|
|
8998
|
+
async onInit(_client) {
|
|
8999
|
+
logger89.debug("Word integration initialized");
|
|
9000
|
+
},
|
|
9001
|
+
async onAfterConnect(_client) {
|
|
9002
|
+
logger89.debug("Word integration connected");
|
|
9003
|
+
}
|
|
9004
|
+
};
|
|
9005
|
+
}
|
|
9006
|
+
// src/integrations/zapier.ts
|
|
9007
|
+
var logger90 = createLogger("Zapier");
|
|
9008
|
+
var ZAPIER_TOOLS = [
|
|
9009
|
+
"zapier_get_profile",
|
|
9010
|
+
"zapier_list_zaps",
|
|
9011
|
+
"zapier_list_apps",
|
|
9012
|
+
"zapier_list_actions",
|
|
9013
|
+
"zapier_list_authentications",
|
|
9014
|
+
"zapier_list_zap_runs"
|
|
9015
|
+
];
|
|
9016
|
+
function zapierIntegration(config = {}) {
|
|
9017
|
+
const oauth = {
|
|
9018
|
+
provider: "zapier",
|
|
9019
|
+
clientId: config.clientId ?? getEnv("ZAPIER_CLIENT_ID"),
|
|
9020
|
+
clientSecret: config.clientSecret ?? getEnv("ZAPIER_CLIENT_SECRET"),
|
|
9021
|
+
scopes: config.scopes ?? [],
|
|
9022
|
+
redirectUri: config.redirectUri,
|
|
9023
|
+
config: {
|
|
9024
|
+
authorization_endpoint: "https://zapier.com/oauth/authorize/",
|
|
9025
|
+
token_endpoint: "https://zapier.com/oauth/token/",
|
|
9026
|
+
response_type: "code",
|
|
9027
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
9028
|
+
}
|
|
9029
|
+
};
|
|
9030
|
+
return {
|
|
9031
|
+
id: "zapier",
|
|
9032
|
+
name: "Zapier",
|
|
9033
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/zapier.png",
|
|
9034
|
+
description: "List Zaps, browse apps, manage authentications, and inspect Zap runs via the Partner Workflow API",
|
|
9035
|
+
category: "Productivity",
|
|
9036
|
+
tools: [...ZAPIER_TOOLS],
|
|
9037
|
+
oauth,
|
|
9038
|
+
async onInit(_client) {
|
|
9039
|
+
logger90.debug("Zapier integration initialized");
|
|
9040
|
+
},
|
|
9041
|
+
async onAfterConnect(_client) {
|
|
9042
|
+
logger90.debug("Zapier integration connected");
|
|
9043
|
+
}
|
|
9044
|
+
};
|
|
9045
|
+
}
|
|
9046
|
+
// src/integrations/zoom.ts
|
|
9047
|
+
var logger91 = createLogger("Zoom");
|
|
9048
|
+
var ZOOM_TOOLS = [
|
|
9049
|
+
"zoom_get_user",
|
|
9050
|
+
"zoom_list_meetings",
|
|
9051
|
+
"zoom_create_meeting",
|
|
9052
|
+
"zoom_get_meeting",
|
|
9053
|
+
"zoom_update_meeting",
|
|
9054
|
+
"zoom_delete_meeting"
|
|
9055
|
+
];
|
|
9056
|
+
function zoomIntegration(config = {}) {
|
|
9057
|
+
const oauth = {
|
|
9058
|
+
provider: "zoom",
|
|
9059
|
+
clientId: config.clientId ?? getEnv("ZOOM_CLIENT_ID"),
|
|
9060
|
+
clientSecret: config.clientSecret ?? getEnv("ZOOM_CLIENT_SECRET"),
|
|
9061
|
+
scopes: config.scopes,
|
|
9062
|
+
optionalScopes: config.optionalScopes,
|
|
9063
|
+
redirectUri: config.redirectUri,
|
|
9064
|
+
config: { ...config }
|
|
9065
|
+
};
|
|
9066
|
+
return {
|
|
9067
|
+
id: "zoom",
|
|
9068
|
+
name: "Zoom",
|
|
9069
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/zoom.png",
|
|
9070
|
+
tools: [...ZOOM_TOOLS],
|
|
9071
|
+
oauth,
|
|
9072
|
+
async onInit(_client) {
|
|
9073
|
+
logger91.debug("Zoom integration initialized");
|
|
9074
|
+
},
|
|
9075
|
+
async onAfterConnect(_client) {
|
|
9076
|
+
logger91.debug("Zoom integration connected");
|
|
5973
9077
|
}
|
|
5974
9078
|
};
|
|
5975
9079
|
}
|
|
@@ -5987,7 +9091,7 @@ function validateStepLimit(stepIndex, maxSteps) {
|
|
|
5987
9091
|
return { valid: true };
|
|
5988
9092
|
}
|
|
5989
9093
|
// src/triggers/webhooks.ts
|
|
5990
|
-
var
|
|
9094
|
+
var logger92 = createLogger("Webhooks", "server");
|
|
5991
9095
|
async function signPayload(payload, secret) {
|
|
5992
9096
|
const encoder = new TextEncoder;
|
|
5993
9097
|
const data = encoder.encode(JSON.stringify(payload));
|
|
@@ -6013,7 +9117,7 @@ async function deliverWebhook(webhook, payload, timeoutMs) {
|
|
|
6013
9117
|
signal: controller.signal
|
|
6014
9118
|
});
|
|
6015
9119
|
if (!response.ok) {
|
|
6016
|
-
|
|
9120
|
+
logger92.warn(`Webhook delivery to ${webhook.url} returned ${response.status}`);
|
|
6017
9121
|
}
|
|
6018
9122
|
} finally {
|
|
6019
9123
|
clearTimeout(timeout);
|
|
@@ -6026,7 +9130,7 @@ async function deliverWebhooks(webhooks, payload, timeoutMs) {
|
|
|
6026
9130
|
for (let i = 0;i < results.length; i++) {
|
|
6027
9131
|
const result = results[i];
|
|
6028
9132
|
if (result.status === "rejected") {
|
|
6029
|
-
|
|
9133
|
+
logger92.warn(`Webhook delivery to ${webhooks[i].url} failed:`, result.reason);
|
|
6030
9134
|
}
|
|
6031
9135
|
}
|
|
6032
9136
|
}
|
|
@@ -6062,164 +9166,6 @@ function createSimpleIntegration(config) {
|
|
|
6062
9166
|
onDisconnect: config.onDisconnect
|
|
6063
9167
|
};
|
|
6064
9168
|
}
|
|
6065
|
-
// src/integrations/word.ts
|
|
6066
|
-
var logger41 = createLogger("Word");
|
|
6067
|
-
var WORD_TOOLS = [
|
|
6068
|
-
"word_list",
|
|
6069
|
-
"word_get",
|
|
6070
|
-
"word_create",
|
|
6071
|
-
"word_copy",
|
|
6072
|
-
"word_delete",
|
|
6073
|
-
"word_share"
|
|
6074
|
-
];
|
|
6075
|
-
function wordIntegration(config = {}) {
|
|
6076
|
-
const oauth = {
|
|
6077
|
-
provider: "word",
|
|
6078
|
-
clientId: config.clientId ?? getEnv("WORD_CLIENT_ID"),
|
|
6079
|
-
clientSecret: config.clientSecret ?? getEnv("WORD_CLIENT_SECRET"),
|
|
6080
|
-
scopes: config.scopes,
|
|
6081
|
-
optionalScopes: config.optionalScopes,
|
|
6082
|
-
redirectUri: config.redirectUri,
|
|
6083
|
-
config
|
|
6084
|
-
};
|
|
6085
|
-
return {
|
|
6086
|
-
id: "word",
|
|
6087
|
-
name: "Word",
|
|
6088
|
-
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/word.png",
|
|
6089
|
-
tools: [...WORD_TOOLS],
|
|
6090
|
-
oauth,
|
|
6091
|
-
async onInit(_client) {
|
|
6092
|
-
logger41.debug("Word integration initialized");
|
|
6093
|
-
},
|
|
6094
|
-
async onAfterConnect(_client) {
|
|
6095
|
-
logger41.debug("Word integration connected");
|
|
6096
|
-
}
|
|
6097
|
-
};
|
|
6098
|
-
}
|
|
6099
|
-
|
|
6100
|
-
// src/integrations/excel.ts
|
|
6101
|
-
var logger42 = createLogger("Excel");
|
|
6102
|
-
var EXCEL_TOOLS = [
|
|
6103
|
-
"excel_list",
|
|
6104
|
-
"excel_get",
|
|
6105
|
-
"excel_create",
|
|
6106
|
-
"excel_delete",
|
|
6107
|
-
"excel_share",
|
|
6108
|
-
"excel_list_worksheets",
|
|
6109
|
-
"excel_add_worksheet",
|
|
6110
|
-
"excel_delete_worksheet",
|
|
6111
|
-
"excel_get_range",
|
|
6112
|
-
"excel_update_range",
|
|
6113
|
-
"excel_clear_range",
|
|
6114
|
-
"excel_get_used_range",
|
|
6115
|
-
"excel_list_tables",
|
|
6116
|
-
"excel_create_table",
|
|
6117
|
-
"excel_get_table_rows",
|
|
6118
|
-
"excel_add_table_rows"
|
|
6119
|
-
];
|
|
6120
|
-
function excelIntegration(config = {}) {
|
|
6121
|
-
const oauth = {
|
|
6122
|
-
provider: "excel",
|
|
6123
|
-
clientId: config.clientId ?? getEnv("EXCEL_CLIENT_ID"),
|
|
6124
|
-
clientSecret: config.clientSecret ?? getEnv("EXCEL_CLIENT_SECRET"),
|
|
6125
|
-
scopes: config.scopes,
|
|
6126
|
-
optionalScopes: config.optionalScopes,
|
|
6127
|
-
redirectUri: config.redirectUri,
|
|
6128
|
-
config
|
|
6129
|
-
};
|
|
6130
|
-
return {
|
|
6131
|
-
id: "excel",
|
|
6132
|
-
name: "Excel",
|
|
6133
|
-
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/excel.png",
|
|
6134
|
-
tools: [...EXCEL_TOOLS],
|
|
6135
|
-
oauth,
|
|
6136
|
-
async onInit(_client) {
|
|
6137
|
-
logger42.debug("Excel integration initialized");
|
|
6138
|
-
},
|
|
6139
|
-
async onAfterConnect(_client) {
|
|
6140
|
-
logger42.debug("Excel integration connected");
|
|
6141
|
-
}
|
|
6142
|
-
};
|
|
6143
|
-
}
|
|
6144
|
-
|
|
6145
|
-
// src/integrations/powerpoint.ts
|
|
6146
|
-
var logger43 = createLogger("PowerPoint");
|
|
6147
|
-
var POWERPOINT_TOOLS = [
|
|
6148
|
-
"powerpoint_list",
|
|
6149
|
-
"powerpoint_get",
|
|
6150
|
-
"powerpoint_create",
|
|
6151
|
-
"powerpoint_copy",
|
|
6152
|
-
"powerpoint_delete",
|
|
6153
|
-
"powerpoint_share"
|
|
6154
|
-
];
|
|
6155
|
-
function powerpointIntegration(config = {}) {
|
|
6156
|
-
const oauth = {
|
|
6157
|
-
provider: "powerpoint",
|
|
6158
|
-
clientId: config.clientId ?? getEnv("POWERPOINT_CLIENT_ID"),
|
|
6159
|
-
clientSecret: config.clientSecret ?? getEnv("POWERPOINT_CLIENT_SECRET"),
|
|
6160
|
-
scopes: config.scopes,
|
|
6161
|
-
optionalScopes: config.optionalScopes,
|
|
6162
|
-
redirectUri: config.redirectUri,
|
|
6163
|
-
config
|
|
6164
|
-
};
|
|
6165
|
-
return {
|
|
6166
|
-
id: "powerpoint",
|
|
6167
|
-
name: "PowerPoint",
|
|
6168
|
-
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/powerpoint.png",
|
|
6169
|
-
tools: [...POWERPOINT_TOOLS],
|
|
6170
|
-
oauth,
|
|
6171
|
-
async onInit(_client) {
|
|
6172
|
-
logger43.debug("PowerPoint integration initialized");
|
|
6173
|
-
},
|
|
6174
|
-
async onAfterConnect(_client) {
|
|
6175
|
-
logger43.debug("PowerPoint integration connected");
|
|
6176
|
-
}
|
|
6177
|
-
};
|
|
6178
|
-
}
|
|
6179
|
-
|
|
6180
|
-
// src/integrations/gdrive.ts
|
|
6181
|
-
var logger44 = createLogger("Google Drive");
|
|
6182
|
-
var GDRIVE_TOOLS = [
|
|
6183
|
-
"gdrive_list_files",
|
|
6184
|
-
"gdrive_get_file",
|
|
6185
|
-
"gdrive_create_folder",
|
|
6186
|
-
"gdrive_rename_file",
|
|
6187
|
-
"gdrive_move_file",
|
|
6188
|
-
"gdrive_copy_file",
|
|
6189
|
-
"gdrive_delete_file",
|
|
6190
|
-
"gdrive_trash_file",
|
|
6191
|
-
"gdrive_upload_text_file",
|
|
6192
|
-
"gdrive_download_file",
|
|
6193
|
-
"gdrive_list_permissions",
|
|
6194
|
-
"gdrive_share_file",
|
|
6195
|
-
"gdrive_remove_permission",
|
|
6196
|
-
"gdrive_get_about"
|
|
6197
|
-
];
|
|
6198
|
-
function gdriveIntegration(config = {}) {
|
|
6199
|
-
const oauth = {
|
|
6200
|
-
provider: "gdrive",
|
|
6201
|
-
clientId: config.clientId ?? getEnv("GDRIVE_CLIENT_ID"),
|
|
6202
|
-
clientSecret: config.clientSecret ?? getEnv("GDRIVE_CLIENT_SECRET"),
|
|
6203
|
-
scopes: config.scopes,
|
|
6204
|
-
optionalScopes: config.optionalScopes,
|
|
6205
|
-
redirectUri: config.redirectUri,
|
|
6206
|
-
config
|
|
6207
|
-
};
|
|
6208
|
-
return {
|
|
6209
|
-
id: "gdrive",
|
|
6210
|
-
name: "Google Drive",
|
|
6211
|
-
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/google_drive.png",
|
|
6212
|
-
tools: [...GDRIVE_TOOLS],
|
|
6213
|
-
oauth,
|
|
6214
|
-
async onInit(_client) {
|
|
6215
|
-
logger44.debug("Google Drive integration initialized");
|
|
6216
|
-
},
|
|
6217
|
-
async onAfterConnect(_client) {
|
|
6218
|
-
logger44.debug("Google Drive integration connected");
|
|
6219
|
-
}
|
|
6220
|
-
};
|
|
6221
|
-
}
|
|
6222
|
-
|
|
6223
9169
|
// index.ts
|
|
6224
9170
|
var client = createMCPClient({
|
|
6225
9171
|
integrations: [
|
|
@@ -6227,18 +9173,28 @@ var client = createMCPClient({
|
|
|
6227
9173
|
gmailIntegration(),
|
|
6228
9174
|
notionIntegration(),
|
|
6229
9175
|
slackIntegration(),
|
|
9176
|
+
discordIntegration(),
|
|
6230
9177
|
linearIntegration(),
|
|
6231
9178
|
vercelIntegration(),
|
|
6232
9179
|
zendeskIntegration(),
|
|
6233
9180
|
stripeIntegration(),
|
|
6234
9181
|
gcalIntegration(),
|
|
9182
|
+
gmeetIntegration(),
|
|
9183
|
+
gtasksIntegration(),
|
|
9184
|
+
gcontactsIntegration(),
|
|
6235
9185
|
outlookIntegration(),
|
|
9186
|
+
teamsIntegration(),
|
|
6236
9187
|
airtableIntegration(),
|
|
9188
|
+
attioIntegration(),
|
|
6237
9189
|
todoistIntegration(),
|
|
6238
9190
|
whatsappIntegration(),
|
|
6239
9191
|
calcomIntegration(),
|
|
9192
|
+
canvaIntegration(),
|
|
9193
|
+
cloudflareIntegration(),
|
|
6240
9194
|
rampIntegration(),
|
|
6241
9195
|
onedriveIntegration(),
|
|
9196
|
+
plannerIntegration(),
|
|
9197
|
+
sharepointIntegration(),
|
|
6242
9198
|
wordIntegration(),
|
|
6243
9199
|
excelIntegration(),
|
|
6244
9200
|
powerpointIntegration(),
|
|
@@ -6247,79 +9203,160 @@ var client = createMCPClient({
|
|
|
6247
9203
|
gsheetsIntegration(),
|
|
6248
9204
|
gslidesIntegration(),
|
|
6249
9205
|
polarIntegration(),
|
|
9206
|
+
facebookIntegration(),
|
|
6250
9207
|
figmaIntegration(),
|
|
6251
9208
|
intercomIntegration(),
|
|
6252
9209
|
hubspotIntegration(),
|
|
9210
|
+
instagramIntegration(),
|
|
9211
|
+
linkedinIntegration(),
|
|
9212
|
+
threadsIntegration(),
|
|
9213
|
+
tiktokIntegration(),
|
|
9214
|
+
typeformIntegration(),
|
|
9215
|
+
xeroIntegration(),
|
|
9216
|
+
gchatIntegration(),
|
|
9217
|
+
shopifyIntegration(),
|
|
6253
9218
|
youtubeIntegration(),
|
|
9219
|
+
zoomIntegration(),
|
|
9220
|
+
redditIntegration(),
|
|
6254
9221
|
cursorIntegration(),
|
|
6255
9222
|
posthogIntegration(),
|
|
6256
9223
|
sentryIntegration(),
|
|
9224
|
+
datadogIntegration(),
|
|
6257
9225
|
netlifyIntegration(),
|
|
6258
|
-
|
|
9226
|
+
mondayIntegration(),
|
|
9227
|
+
webflowIntegration(),
|
|
9228
|
+
jiraIntegration(),
|
|
9229
|
+
salesforceIntegration(),
|
|
9230
|
+
workdayIntegration()
|
|
6259
9231
|
],
|
|
6260
9232
|
useServerConfig: true
|
|
6261
9233
|
});
|
|
6262
9234
|
export {
|
|
9235
|
+
zoomIntegration,
|
|
6263
9236
|
zendeskIntegration,
|
|
9237
|
+
zapierIntegration,
|
|
6264
9238
|
youtubeIntegration,
|
|
9239
|
+
xeroIntegration,
|
|
9240
|
+
workosIntegration,
|
|
9241
|
+
workdayIntegration,
|
|
9242
|
+
wordIntegration,
|
|
9243
|
+
wixIntegration,
|
|
6265
9244
|
whatsappIntegration,
|
|
9245
|
+
webflowIntegration,
|
|
6266
9246
|
vercelIntegration,
|
|
6267
9247
|
validateStepLimit,
|
|
9248
|
+
upstashIntegration,
|
|
9249
|
+
typeformIntegration,
|
|
9250
|
+
trelloIntegration,
|
|
6268
9251
|
todoistIntegration,
|
|
6269
9252
|
toWebRequest,
|
|
6270
9253
|
toTanStackStartHandler,
|
|
9254
|
+
tldrawIntegration,
|
|
9255
|
+
tiktokIntegration,
|
|
9256
|
+
threadsIntegration,
|
|
9257
|
+
teamsIntegration,
|
|
9258
|
+
supabaseIntegration,
|
|
6271
9259
|
stripeIntegration,
|
|
6272
9260
|
slackIntegration,
|
|
9261
|
+
shouldRefreshToken,
|
|
9262
|
+
shopifyIntegration,
|
|
9263
|
+
sharepointIntegration,
|
|
6273
9264
|
sentryIntegration,
|
|
6274
9265
|
sendCallbackToOpener,
|
|
9266
|
+
salesforceIntegration,
|
|
9267
|
+
resolveAccessToken,
|
|
9268
|
+
resendIntegration,
|
|
9269
|
+
refreshViaMcp,
|
|
9270
|
+
redisIntegration,
|
|
9271
|
+
redditIntegration,
|
|
6275
9272
|
rampIntegration,
|
|
6276
9273
|
railwayIntegration,
|
|
9274
|
+
powerpointIntegration,
|
|
9275
|
+
postmanIntegration,
|
|
6277
9276
|
posthogIntegration,
|
|
6278
9277
|
polarIntegration,
|
|
9278
|
+
plannerIntegration,
|
|
9279
|
+
planetscaleIntegration,
|
|
9280
|
+
phantomIntegration,
|
|
6279
9281
|
parseState,
|
|
6280
9282
|
parseServerError,
|
|
9283
|
+
paperIntegration,
|
|
6281
9284
|
outlookIntegration,
|
|
6282
9285
|
onedriveIntegration,
|
|
6283
9286
|
notionIntegration,
|
|
6284
9287
|
netlifyIntegration,
|
|
9288
|
+
neonIntegration,
|
|
9289
|
+
mondayIntegration,
|
|
6285
9290
|
mercuryIntegration,
|
|
9291
|
+
mailchimpIntegration,
|
|
9292
|
+
linkedinIntegration,
|
|
6286
9293
|
linearIntegration,
|
|
6287
9294
|
jiraIntegration,
|
|
6288
9295
|
isTokenExpiredError,
|
|
6289
9296
|
isAuthorizationError,
|
|
6290
9297
|
isAuthError,
|
|
6291
9298
|
intercomIntegration,
|
|
9299
|
+
instagramIntegration,
|
|
6292
9300
|
hubspotIntegration,
|
|
9301
|
+
gtasksIntegration,
|
|
6293
9302
|
gslidesIntegration,
|
|
6294
9303
|
gsheetsIntegration,
|
|
6295
9304
|
granolaIntegration,
|
|
9305
|
+
gmeetIntegration,
|
|
6296
9306
|
gmailIntegration,
|
|
9307
|
+
gitlabIntegration,
|
|
6297
9308
|
githubIntegration,
|
|
6298
9309
|
genericOAuthIntegration,
|
|
6299
9310
|
generateStateWithReturnUrl,
|
|
6300
9311
|
generateState,
|
|
6301
9312
|
generateCodeVerifier,
|
|
6302
9313
|
generateCodeChallenge,
|
|
9314
|
+
gdriveIntegration,
|
|
6303
9315
|
gdocsIntegration,
|
|
9316
|
+
gcontactsIntegration,
|
|
9317
|
+
gchatIntegration,
|
|
6304
9318
|
gcalIntegration,
|
|
9319
|
+
ga4Integration,
|
|
6305
9320
|
fromNodeHeaders,
|
|
6306
9321
|
figmaIntegration,
|
|
9322
|
+
facebookIntegration,
|
|
9323
|
+
excelIntegration,
|
|
9324
|
+
etoroIntegration,
|
|
9325
|
+
encodeRedisCloudBearerToken,
|
|
6307
9326
|
dropboxIntegration,
|
|
9327
|
+
discordIntegration,
|
|
6308
9328
|
deliverWebhooks,
|
|
9329
|
+
datadogIntegration,
|
|
9330
|
+
databricksIntegration,
|
|
6309
9331
|
cursorIntegration,
|
|
6310
9332
|
createTanStackOAuthHandler,
|
|
6311
9333
|
createSimpleIntegration,
|
|
6312
9334
|
createOAuthRedirectHandler,
|
|
6313
9335
|
createNextOAuthHandler,
|
|
6314
9336
|
createMCPClient,
|
|
9337
|
+
convexIntegration,
|
|
9338
|
+
cloudflareIntegration,
|
|
6315
9339
|
client,
|
|
9340
|
+
clickupIntegration,
|
|
9341
|
+
clerkIntegration,
|
|
6316
9342
|
clearClientCache,
|
|
9343
|
+
canvaIntegration,
|
|
6317
9344
|
calcomIntegration,
|
|
9345
|
+
buildPhantomBrowseDeeplink,
|
|
9346
|
+
binanceIntegration,
|
|
9347
|
+
betterstackIntegration,
|
|
9348
|
+
awsIntegration,
|
|
9349
|
+
auth0Integration,
|
|
9350
|
+
attioIntegration,
|
|
9351
|
+
astronomerIntegration,
|
|
9352
|
+
alpacaIntegration,
|
|
6318
9353
|
airtableIntegration,
|
|
6319
9354
|
WEBHOOK_DELIVERY_TIMEOUT_MS,
|
|
6320
9355
|
TriggerClient,
|
|
6321
9356
|
ToolCallError,
|
|
6322
9357
|
TokenExpiredError,
|
|
9358
|
+
RefreshTransientError,
|
|
9359
|
+
RefreshRejectedError,
|
|
6323
9360
|
OAuthWindowManager,
|
|
6324
9361
|
OAuthManager,
|
|
6325
9362
|
OAuthHandler,
|
|
@@ -6329,6 +9366,7 @@ export {
|
|
|
6329
9366
|
IntegrateSDKError,
|
|
6330
9367
|
INTEGRATION_CATEGORY_ORDER,
|
|
6331
9368
|
HttpSessionTransport,
|
|
9369
|
+
DEFAULT_REFRESH_WINDOW_MS,
|
|
6332
9370
|
ConnectionError,
|
|
6333
9371
|
AuthorizationError,
|
|
6334
9372
|
AuthenticationError
|