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/server.js
CHANGED
|
@@ -96,18 +96,42 @@ var init_library_metadata = __esm(() => {
|
|
|
96
96
|
description: "Manage Airtable bases, tables, and records",
|
|
97
97
|
category: "Business"
|
|
98
98
|
},
|
|
99
|
+
aws: {
|
|
100
|
+
description: "Inspect AWS accounts and resources with SigV4 (control-plane APIs)",
|
|
101
|
+
category: "Infrastructure"
|
|
102
|
+
},
|
|
103
|
+
attio: {
|
|
104
|
+
description: "Manage Attio people, companies, tasks, and CRM records",
|
|
105
|
+
category: "Business"
|
|
106
|
+
},
|
|
99
107
|
calcom: {
|
|
100
108
|
description: "Manage Cal.com bookings and schedules",
|
|
101
109
|
category: "Business"
|
|
102
110
|
},
|
|
111
|
+
canva: {
|
|
112
|
+
description: "List and create Canva designs, manage folders, and export assets",
|
|
113
|
+
category: "Productivity"
|
|
114
|
+
},
|
|
115
|
+
cloudflare: {
|
|
116
|
+
description: "Manage Cloudflare zones, DNS, CDN cache, and Workers",
|
|
117
|
+
category: "Infrastructure"
|
|
118
|
+
},
|
|
103
119
|
cursor: {
|
|
104
120
|
description: "Manage Cursor Cloud Agents and background tasks",
|
|
105
121
|
category: "Engineering"
|
|
106
122
|
},
|
|
123
|
+
databricks: {
|
|
124
|
+
description: "Run Databricks jobs, list clusters and SQL warehouses, and inspect workspace paths",
|
|
125
|
+
category: "Engineering"
|
|
126
|
+
},
|
|
107
127
|
figma: {
|
|
108
128
|
description: "Access Figma files, comments, and components",
|
|
109
129
|
category: "Engineering"
|
|
110
130
|
},
|
|
131
|
+
facebook: {
|
|
132
|
+
description: "Manage Facebook Page posts, comments, reactions, and insights via the Graph API",
|
|
133
|
+
category: "Social Media"
|
|
134
|
+
},
|
|
111
135
|
github: {
|
|
112
136
|
description: "Manage GitHub repos, issues, and pull requests",
|
|
113
137
|
category: "Engineering"
|
|
@@ -120,10 +144,26 @@ var init_library_metadata = __esm(() => {
|
|
|
120
144
|
description: "Manage Google Calendar events and schedules",
|
|
121
145
|
category: "Productivity"
|
|
122
146
|
},
|
|
147
|
+
gtasks: {
|
|
148
|
+
description: "Manage Google Tasks lists and to-dos",
|
|
149
|
+
category: "Productivity"
|
|
150
|
+
},
|
|
151
|
+
gmeet: {
|
|
152
|
+
description: "Create Google Meet links and manage meeting events via Calendar",
|
|
153
|
+
category: "Communication"
|
|
154
|
+
},
|
|
155
|
+
gcontacts: {
|
|
156
|
+
description: "List, search, create, update, and delete Google Contacts via the People API",
|
|
157
|
+
category: "Communication"
|
|
158
|
+
},
|
|
123
159
|
hubspot: {
|
|
124
160
|
description: "Manage HubSpot contacts, deals, and tickets",
|
|
125
161
|
category: "Business"
|
|
126
162
|
},
|
|
163
|
+
instagram: {
|
|
164
|
+
description: "Instagram Graph API — media, comments, insights, stories, and publishing",
|
|
165
|
+
category: "Social Media"
|
|
166
|
+
},
|
|
127
167
|
intercom: {
|
|
128
168
|
description: "Manage Intercom contacts and conversations",
|
|
129
169
|
category: "Business"
|
|
@@ -140,6 +180,10 @@ var init_library_metadata = __esm(() => {
|
|
|
140
180
|
description: "Manage OneDrive files, folders, and sharing",
|
|
141
181
|
category: "Storage"
|
|
142
182
|
},
|
|
183
|
+
planner: {
|
|
184
|
+
description: "Manage Microsoft Planner plans, buckets, and tasks",
|
|
185
|
+
category: "Productivity"
|
|
186
|
+
},
|
|
143
187
|
outlook: {
|
|
144
188
|
description: "Manage Outlook mail, calendars, and contacts",
|
|
145
189
|
category: "Communication"
|
|
@@ -148,18 +192,38 @@ var init_library_metadata = __esm(() => {
|
|
|
148
192
|
description: "Manage Polar products, orders, and subscriptions",
|
|
149
193
|
category: "Finance"
|
|
150
194
|
},
|
|
195
|
+
phantom: {
|
|
196
|
+
description: "Build Phantom mobile browse universal links and deeplink provider documentation (Solana)",
|
|
197
|
+
category: "Other"
|
|
198
|
+
},
|
|
151
199
|
posthog: {
|
|
152
200
|
description: "Read PostHog organizations, projects, insights, and feature flags",
|
|
153
201
|
category: "Analytics"
|
|
154
202
|
},
|
|
203
|
+
postman: {
|
|
204
|
+
description: "Manage Postman workspaces, collections, and environments via the Postman API",
|
|
205
|
+
category: "Engineering"
|
|
206
|
+
},
|
|
155
207
|
ramp: {
|
|
156
208
|
description: "Manage Ramp corporate cards, bills, and spend",
|
|
157
209
|
category: "Business"
|
|
158
210
|
},
|
|
211
|
+
resend: {
|
|
212
|
+
description: "Send email and manage domains with the Resend API",
|
|
213
|
+
category: "Communication"
|
|
214
|
+
},
|
|
215
|
+
mailchimp: {
|
|
216
|
+
description: "Manage Mailchimp audiences, members, and campaigns",
|
|
217
|
+
category: "Communication"
|
|
218
|
+
},
|
|
159
219
|
railway: {
|
|
160
220
|
description: "Manage Railway workspaces, projects, services, deployments, variables, domains, and volumes",
|
|
161
221
|
category: "Infrastructure"
|
|
162
222
|
},
|
|
223
|
+
supabase: {
|
|
224
|
+
description: "Manage Supabase organizations, projects, Postgres, API keys, secrets, and branches",
|
|
225
|
+
category: "Infrastructure"
|
|
226
|
+
},
|
|
163
227
|
sentry: {
|
|
164
228
|
description: "Monitor Sentry errors, issues, releases, and projects",
|
|
165
229
|
category: "Engineering"
|
|
@@ -168,6 +232,14 @@ var init_library_metadata = __esm(() => {
|
|
|
168
232
|
description: "Manage Netlify sites, deploys, builds, and environment variables",
|
|
169
233
|
category: "Infrastructure"
|
|
170
234
|
},
|
|
235
|
+
redis: {
|
|
236
|
+
description: "Manage Redis Cloud subscriptions, databases, async tasks, and audit logs",
|
|
237
|
+
category: "Infrastructure"
|
|
238
|
+
},
|
|
239
|
+
upstash: {
|
|
240
|
+
description: "Use Upstash Redis REST, QStash messaging, and related HTTP APIs",
|
|
241
|
+
category: "Infrastructure"
|
|
242
|
+
},
|
|
171
243
|
jira: {
|
|
172
244
|
description: "Manage Jira issues, projects, sprints, and boards",
|
|
173
245
|
category: "Engineering"
|
|
@@ -204,6 +276,10 @@ var init_library_metadata = __esm(() => {
|
|
|
204
276
|
description: "Manage Vercel projects, deployments, and domains",
|
|
205
277
|
category: "Infrastructure"
|
|
206
278
|
},
|
|
279
|
+
workos: {
|
|
280
|
+
description: "Manage WorkOS organizations, users, directory sync, and AuthKit",
|
|
281
|
+
category: "Infrastructure"
|
|
282
|
+
},
|
|
207
283
|
whatsapp: {
|
|
208
284
|
description: "Send WhatsApp messages and templates",
|
|
209
285
|
category: "Communication"
|
|
@@ -212,6 +288,14 @@ var init_library_metadata = __esm(() => {
|
|
|
212
288
|
description: "Search and access YouTube videos and channels",
|
|
213
289
|
category: "Social Media"
|
|
214
290
|
},
|
|
291
|
+
zoom: {
|
|
292
|
+
description: "Manage Zoom user profile and meetings",
|
|
293
|
+
category: "Communication"
|
|
294
|
+
},
|
|
295
|
+
reddit: {
|
|
296
|
+
description: "Browse subreddits, search posts, submit content, and vote on Reddit",
|
|
297
|
+
category: "Social Media"
|
|
298
|
+
},
|
|
215
299
|
powerpoint: {
|
|
216
300
|
description: "Manage PowerPoint presentations and sharing",
|
|
217
301
|
category: "Productivity"
|
|
@@ -228,17 +312,149 @@ var init_library_metadata = __esm(() => {
|
|
|
228
312
|
description: "Manage Dropbox files, folders, and sharing",
|
|
229
313
|
category: "Storage"
|
|
230
314
|
},
|
|
315
|
+
paper: {
|
|
316
|
+
description: "Create, update, and export Dropbox Paper documents",
|
|
317
|
+
category: "Productivity"
|
|
318
|
+
},
|
|
231
319
|
granola: {
|
|
232
320
|
description: "List and read Granola meeting notes and folders",
|
|
233
321
|
category: "Productivity"
|
|
234
322
|
},
|
|
323
|
+
alpaca: {
|
|
324
|
+
description: "Trade equities with Alpaca: account, orders, positions, and market clock",
|
|
325
|
+
category: "Finance"
|
|
326
|
+
},
|
|
327
|
+
binance: {
|
|
328
|
+
description: "Read Binance Spot prices, order books, and account data with read-only API keys",
|
|
329
|
+
category: "Finance"
|
|
330
|
+
},
|
|
235
331
|
mercury: {
|
|
236
332
|
description: "Manage Mercury bank accounts, cards, and transactions",
|
|
237
333
|
category: "Finance"
|
|
238
334
|
},
|
|
335
|
+
monday: {
|
|
336
|
+
description: "Manage Monday.com boards, items, columns, and updates",
|
|
337
|
+
category: "Productivity"
|
|
338
|
+
},
|
|
239
339
|
zendesk: {
|
|
240
340
|
description: "Manage Zendesk tickets, users, and help center content",
|
|
241
341
|
category: "Business"
|
|
342
|
+
},
|
|
343
|
+
wix: {
|
|
344
|
+
description: "Manage Wix site stores, products, and e-commerce orders via REST",
|
|
345
|
+
category: "Business"
|
|
346
|
+
},
|
|
347
|
+
astronomer: {
|
|
348
|
+
description: "Manage Apache Airflow DAGs and deployments on Astronomer",
|
|
349
|
+
category: "Engineering"
|
|
350
|
+
},
|
|
351
|
+
auth0: {
|
|
352
|
+
description: "Manage Auth0 users, applications, and tenant configuration",
|
|
353
|
+
category: "Infrastructure"
|
|
354
|
+
},
|
|
355
|
+
betterstack: {
|
|
356
|
+
description: "Monitor uptime, logs, and incident alerts with BetterStack",
|
|
357
|
+
category: "Engineering"
|
|
358
|
+
},
|
|
359
|
+
clerk: {
|
|
360
|
+
description: "Manage Clerk users, organizations, and authentication",
|
|
361
|
+
category: "Infrastructure"
|
|
362
|
+
},
|
|
363
|
+
clickup: {
|
|
364
|
+
description: "Manage ClickUp tasks, lists, spaces, and workspaces",
|
|
365
|
+
category: "Productivity"
|
|
366
|
+
},
|
|
367
|
+
convex: {
|
|
368
|
+
description: "Run Convex functions, manage tables, and query your app backend",
|
|
369
|
+
category: "Engineering"
|
|
370
|
+
},
|
|
371
|
+
datadog: {
|
|
372
|
+
description: "Monitor Datadog metrics, logs, dashboards, and alerts",
|
|
373
|
+
category: "Engineering"
|
|
374
|
+
},
|
|
375
|
+
discord: {
|
|
376
|
+
description: "Send messages and manage Discord channels and servers",
|
|
377
|
+
category: "Communication"
|
|
378
|
+
},
|
|
379
|
+
etoro: {
|
|
380
|
+
description: "Read eToro portfolio data and market instruments",
|
|
381
|
+
category: "Finance"
|
|
382
|
+
},
|
|
383
|
+
ga4: {
|
|
384
|
+
description: "Read Google Analytics 4 reports, properties, and events",
|
|
385
|
+
category: "Analytics"
|
|
386
|
+
},
|
|
387
|
+
gchat: {
|
|
388
|
+
description: "Send messages and manage Google Chat spaces and memberships",
|
|
389
|
+
category: "Communication"
|
|
390
|
+
},
|
|
391
|
+
gitlab: {
|
|
392
|
+
description: "Manage GitLab repositories, issues, and merge requests",
|
|
393
|
+
category: "Engineering"
|
|
394
|
+
},
|
|
395
|
+
linkedin: {
|
|
396
|
+
description: "Post updates and manage LinkedIn profile and company pages",
|
|
397
|
+
category: "Social Media"
|
|
398
|
+
},
|
|
399
|
+
neon: {
|
|
400
|
+
description: "Manage Neon Postgres projects, branches, and databases",
|
|
401
|
+
category: "Infrastructure"
|
|
402
|
+
},
|
|
403
|
+
planetscale: {
|
|
404
|
+
description: "Manage PlanetScale databases, branches, and schema changes",
|
|
405
|
+
category: "Infrastructure"
|
|
406
|
+
},
|
|
407
|
+
salesforce: {
|
|
408
|
+
description: "Manage Salesforce accounts, contacts, opportunities, and cases",
|
|
409
|
+
category: "Business"
|
|
410
|
+
},
|
|
411
|
+
sharepoint: {
|
|
412
|
+
description: "Manage SharePoint sites, lists, documents, and permissions",
|
|
413
|
+
category: "Productivity"
|
|
414
|
+
},
|
|
415
|
+
shopify: {
|
|
416
|
+
description: "Manage Shopify products, orders, customers, and inventory",
|
|
417
|
+
category: "Business"
|
|
418
|
+
},
|
|
419
|
+
teams: {
|
|
420
|
+
description: "Send messages and manage Microsoft Teams channels and meetings",
|
|
421
|
+
category: "Communication"
|
|
422
|
+
},
|
|
423
|
+
threads: {
|
|
424
|
+
description: "Post and manage content on Threads (Meta)",
|
|
425
|
+
category: "Social Media"
|
|
426
|
+
},
|
|
427
|
+
tiktok: {
|
|
428
|
+
description: "Manage TikTok videos, account info, and creator analytics",
|
|
429
|
+
category: "Social Media"
|
|
430
|
+
},
|
|
431
|
+
tldraw: {
|
|
432
|
+
description: "Create and manage tldraw collaborative whiteboards",
|
|
433
|
+
category: "Productivity"
|
|
434
|
+
},
|
|
435
|
+
trello: {
|
|
436
|
+
description: "Manage Trello boards, lists, and cards",
|
|
437
|
+
category: "Productivity"
|
|
438
|
+
},
|
|
439
|
+
typeform: {
|
|
440
|
+
description: "Create and manage Typeform surveys and responses",
|
|
441
|
+
category: "Business"
|
|
442
|
+
},
|
|
443
|
+
webflow: {
|
|
444
|
+
description: "Manage Webflow sites, collections, and CMS content",
|
|
445
|
+
category: "Engineering"
|
|
446
|
+
},
|
|
447
|
+
workday: {
|
|
448
|
+
description: "Read Workday HR data including workers, organizations, and pay",
|
|
449
|
+
category: "Business"
|
|
450
|
+
},
|
|
451
|
+
xero: {
|
|
452
|
+
description: "Manage Xero invoices, contacts, and accounting data",
|
|
453
|
+
category: "Finance"
|
|
454
|
+
},
|
|
455
|
+
zapier: {
|
|
456
|
+
description: "Trigger and manage Zapier automation workflows",
|
|
457
|
+
category: "Engineering"
|
|
242
458
|
}
|
|
243
459
|
};
|
|
244
460
|
});
|
|
@@ -2244,7 +2460,7 @@ async function deliverWebhook(webhook, payload, timeoutMs) {
|
|
|
2244
2460
|
signal: controller.signal
|
|
2245
2461
|
});
|
|
2246
2462
|
if (!response.ok) {
|
|
2247
|
-
|
|
2463
|
+
logger91.warn(`Webhook delivery to ${webhook.url} returned ${response.status}`);
|
|
2248
2464
|
}
|
|
2249
2465
|
} finally {
|
|
2250
2466
|
clearTimeout(timeout);
|
|
@@ -2257,14 +2473,14 @@ async function deliverWebhooks(webhooks, payload, timeoutMs) {
|
|
|
2257
2473
|
for (let i = 0;i < results.length; i++) {
|
|
2258
2474
|
const result = results[i];
|
|
2259
2475
|
if (result.status === "rejected") {
|
|
2260
|
-
|
|
2476
|
+
logger91.warn(`Webhook delivery to ${webhooks[i].url} failed:`, result.reason);
|
|
2261
2477
|
}
|
|
2262
2478
|
}
|
|
2263
2479
|
}
|
|
2264
|
-
var
|
|
2480
|
+
var logger91;
|
|
2265
2481
|
var init_webhooks = __esm(() => {
|
|
2266
2482
|
init_logger();
|
|
2267
|
-
|
|
2483
|
+
logger91 = createLogger("Webhooks", "server");
|
|
2268
2484
|
});
|
|
2269
2485
|
|
|
2270
2486
|
// src/triggers/types.ts
|
|
@@ -2284,13 +2500,13 @@ async function executeTrigger(trigger, config, context) {
|
|
|
2284
2500
|
while (stepIndex < MAX_TRIGGER_STEPS) {
|
|
2285
2501
|
const stepValidation = validateStepLimit(stepIndex, MAX_TRIGGER_STEPS);
|
|
2286
2502
|
if (!stepValidation.valid) {
|
|
2287
|
-
|
|
2503
|
+
logger92.error(`[Trigger ${trigger.id}] ${stepValidation.error}`);
|
|
2288
2504
|
break;
|
|
2289
2505
|
}
|
|
2290
2506
|
const providerToken = await config.getProviderToken(currentProvider, undefined, context);
|
|
2291
2507
|
if (!providerToken) {
|
|
2292
2508
|
const error = `No OAuth token available for provider '${currentProvider}'`;
|
|
2293
|
-
|
|
2509
|
+
logger92.error(`[Trigger ${trigger.id}] ${error}`);
|
|
2294
2510
|
steps.push({
|
|
2295
2511
|
stepIndex,
|
|
2296
2512
|
toolName: currentToolName,
|
|
@@ -2316,7 +2532,7 @@ async function executeTrigger(trigger, config, context) {
|
|
|
2316
2532
|
} catch (err) {
|
|
2317
2533
|
stepSuccess = false;
|
|
2318
2534
|
stepError = err.message || "Tool execution failed";
|
|
2319
|
-
|
|
2535
|
+
logger92.error(`[Trigger ${trigger.id}] Step ${stepIndex} failed:`, err);
|
|
2320
2536
|
}
|
|
2321
2537
|
if (stepSuccess && toolResult) {
|
|
2322
2538
|
if (toolResult.isError === true) {
|
|
@@ -2409,7 +2625,7 @@ async function executeTrigger(trigger, config, context) {
|
|
|
2409
2625
|
return { success: steps.every((s) => s.success), steps, error: stepError };
|
|
2410
2626
|
}
|
|
2411
2627
|
const limitError = `Trigger execution exceeded maximum of ${MAX_TRIGGER_STEPS} steps`;
|
|
2412
|
-
|
|
2628
|
+
logger92.error(`[Trigger ${trigger.id}] ${limitError}`);
|
|
2413
2629
|
await config.triggers.update(trigger.id, {
|
|
2414
2630
|
lastRunAt: new Date().toISOString(),
|
|
2415
2631
|
runCount: (trigger.runCount || 0) + 1,
|
|
@@ -2418,12 +2634,12 @@ async function executeTrigger(trigger, config, context) {
|
|
|
2418
2634
|
}, context);
|
|
2419
2635
|
return { success: false, steps, error: limitError };
|
|
2420
2636
|
}
|
|
2421
|
-
var
|
|
2637
|
+
var logger92;
|
|
2422
2638
|
var init_executor2 = __esm(() => {
|
|
2423
2639
|
init_logger();
|
|
2424
2640
|
init_utils();
|
|
2425
2641
|
init_webhooks();
|
|
2426
|
-
|
|
2642
|
+
logger92 = createLogger("TriggerExecutor", "server");
|
|
2427
2643
|
});
|
|
2428
2644
|
|
|
2429
2645
|
// src/protocol/jsonrpc.ts
|
|
@@ -3060,6 +3276,148 @@ class IndexedDBStorage {
|
|
|
3060
3276
|
|
|
3061
3277
|
// src/oauth/manager.ts
|
|
3062
3278
|
init_email_fetcher();
|
|
3279
|
+
|
|
3280
|
+
// src/oauth/refresh.ts
|
|
3281
|
+
class RefreshRejectedError extends Error {
|
|
3282
|
+
provider;
|
|
3283
|
+
constructor(provider, message) {
|
|
3284
|
+
super(message ?? `OAuth refresh rejected (invalid_grant) for ${provider}`);
|
|
3285
|
+
this.name = "RefreshRejectedError";
|
|
3286
|
+
this.provider = provider;
|
|
3287
|
+
}
|
|
3288
|
+
}
|
|
3289
|
+
|
|
3290
|
+
class RefreshTransientError extends Error {
|
|
3291
|
+
provider;
|
|
3292
|
+
constructor(provider, message) {
|
|
3293
|
+
super(message);
|
|
3294
|
+
this.name = "RefreshTransientError";
|
|
3295
|
+
this.provider = provider;
|
|
3296
|
+
}
|
|
3297
|
+
}
|
|
3298
|
+
var DEFAULT_REFRESH_WINDOW_MS = 2 * 60 * 1000;
|
|
3299
|
+
function shouldRefreshToken(tokenData, windowMs = DEFAULT_REFRESH_WINDOW_MS) {
|
|
3300
|
+
if (!tokenData || !tokenData.refreshToken || !tokenData.expiresAt) {
|
|
3301
|
+
return false;
|
|
3302
|
+
}
|
|
3303
|
+
const expiresAtMs = Date.parse(tokenData.expiresAt);
|
|
3304
|
+
if (Number.isNaN(expiresAtMs)) {
|
|
3305
|
+
return false;
|
|
3306
|
+
}
|
|
3307
|
+
return expiresAtMs - Date.now() <= windowMs;
|
|
3308
|
+
}
|
|
3309
|
+
async function refreshViaMcp(opts) {
|
|
3310
|
+
const url = new URL("/oauth/refresh", opts.serverUrl);
|
|
3311
|
+
const body = {
|
|
3312
|
+
provider: opts.provider,
|
|
3313
|
+
refresh_token: opts.refreshToken,
|
|
3314
|
+
client_id: opts.clientId
|
|
3315
|
+
};
|
|
3316
|
+
if (opts.clientSecret) {
|
|
3317
|
+
body.client_secret = opts.clientSecret;
|
|
3318
|
+
}
|
|
3319
|
+
if (opts.subdomain) {
|
|
3320
|
+
body.subdomain = opts.subdomain;
|
|
3321
|
+
}
|
|
3322
|
+
if (opts.extraConfig) {
|
|
3323
|
+
for (const [key, value] of Object.entries(opts.extraConfig)) {
|
|
3324
|
+
if (body[key] === undefined) {
|
|
3325
|
+
body[key] = value;
|
|
3326
|
+
}
|
|
3327
|
+
}
|
|
3328
|
+
}
|
|
3329
|
+
const headers = { "Content-Type": "application/json" };
|
|
3330
|
+
if (opts.apiKey) {
|
|
3331
|
+
headers["X-API-KEY"] = opts.apiKey;
|
|
3332
|
+
}
|
|
3333
|
+
let response;
|
|
3334
|
+
try {
|
|
3335
|
+
response = await fetch(url.toString(), {
|
|
3336
|
+
method: "POST",
|
|
3337
|
+
headers,
|
|
3338
|
+
body: JSON.stringify(body),
|
|
3339
|
+
signal: opts.signal
|
|
3340
|
+
});
|
|
3341
|
+
} catch (err) {
|
|
3342
|
+
throw new RefreshTransientError(opts.provider, `Network error refreshing ${opts.provider} token: ${err.message}`);
|
|
3343
|
+
}
|
|
3344
|
+
if (response.status === 401) {
|
|
3345
|
+
let parsed = {};
|
|
3346
|
+
try {
|
|
3347
|
+
parsed = await response.json();
|
|
3348
|
+
} catch {}
|
|
3349
|
+
if (parsed.error === "invalid_grant") {
|
|
3350
|
+
throw new RefreshRejectedError(opts.provider);
|
|
3351
|
+
}
|
|
3352
|
+
throw new RefreshTransientError(opts.provider, `Refresh endpoint returned 401`);
|
|
3353
|
+
}
|
|
3354
|
+
if (!response.ok) {
|
|
3355
|
+
let text = "";
|
|
3356
|
+
try {
|
|
3357
|
+
text = await response.text();
|
|
3358
|
+
} catch {}
|
|
3359
|
+
throw new RefreshTransientError(opts.provider, `Refresh endpoint returned ${response.status}: ${text || "<no body>"}`);
|
|
3360
|
+
}
|
|
3361
|
+
let result;
|
|
3362
|
+
try {
|
|
3363
|
+
result = await response.json();
|
|
3364
|
+
} catch (err) {
|
|
3365
|
+
throw new RefreshTransientError(opts.provider, `Malformed refresh response: ${err.message}`);
|
|
3366
|
+
}
|
|
3367
|
+
if (!result.accessToken) {
|
|
3368
|
+
throw new RefreshTransientError(opts.provider, `Refresh response missing access_token`);
|
|
3369
|
+
}
|
|
3370
|
+
if (!result.refreshToken) {
|
|
3371
|
+
result.refreshToken = opts.refreshToken;
|
|
3372
|
+
}
|
|
3373
|
+
return result;
|
|
3374
|
+
}
|
|
3375
|
+
async function resolveAccessToken(opts) {
|
|
3376
|
+
const { provider, currentTokens, force = false } = opts;
|
|
3377
|
+
const needsRefresh = force || shouldRefreshToken(currentTokens, opts.windowMs);
|
|
3378
|
+
if (!needsRefresh || !currentTokens.refreshToken) {
|
|
3379
|
+
return currentTokens.accessToken;
|
|
3380
|
+
}
|
|
3381
|
+
try {
|
|
3382
|
+
const refreshed = await refreshViaMcp({
|
|
3383
|
+
provider,
|
|
3384
|
+
refreshToken: currentTokens.refreshToken,
|
|
3385
|
+
clientId: opts.providerOAuth.clientId,
|
|
3386
|
+
clientSecret: opts.providerOAuth.clientSecret,
|
|
3387
|
+
subdomain: opts.providerOAuth.subdomain,
|
|
3388
|
+
extraConfig: opts.providerOAuth.extraConfig,
|
|
3389
|
+
serverUrl: opts.serverUrl,
|
|
3390
|
+
apiKey: opts.apiKey
|
|
3391
|
+
});
|
|
3392
|
+
const updated = {
|
|
3393
|
+
...currentTokens,
|
|
3394
|
+
accessToken: refreshed.accessToken,
|
|
3395
|
+
refreshToken: refreshed.refreshToken ?? currentTokens.refreshToken,
|
|
3396
|
+
tokenType: refreshed.tokenType || currentTokens.tokenType,
|
|
3397
|
+
expiresIn: refreshed.expiresIn ?? currentTokens.expiresIn,
|
|
3398
|
+
expiresAt: refreshed.expiresAt ?? currentTokens.expiresAt,
|
|
3399
|
+
scopes: refreshed.scopes && refreshed.scopes.length > 0 ? refreshed.scopes : currentTokens.scopes
|
|
3400
|
+
};
|
|
3401
|
+
if (opts.setProviderToken) {
|
|
3402
|
+
try {
|
|
3403
|
+
await opts.setProviderToken(provider, updated, updated.email, opts.context);
|
|
3404
|
+
} catch {}
|
|
3405
|
+
}
|
|
3406
|
+
return updated.accessToken;
|
|
3407
|
+
} catch (err) {
|
|
3408
|
+
if (err instanceof RefreshRejectedError) {
|
|
3409
|
+
if (opts.setProviderToken) {
|
|
3410
|
+
try {
|
|
3411
|
+
await opts.setProviderToken(provider, null, currentTokens.email, opts.context);
|
|
3412
|
+
} catch {}
|
|
3413
|
+
}
|
|
3414
|
+
throw err;
|
|
3415
|
+
}
|
|
3416
|
+
return currentTokens.accessToken;
|
|
3417
|
+
}
|
|
3418
|
+
}
|
|
3419
|
+
|
|
3420
|
+
// src/oauth/manager.ts
|
|
3063
3421
|
init_logger();
|
|
3064
3422
|
var logger4 = createLogger("OAuth");
|
|
3065
3423
|
|
|
@@ -3075,7 +3433,10 @@ class OAuthManager {
|
|
|
3075
3433
|
removeTokenCallback;
|
|
3076
3434
|
indexedDBStorage;
|
|
3077
3435
|
skipLocalStorage = false;
|
|
3078
|
-
|
|
3436
|
+
providerOAuth = {};
|
|
3437
|
+
mcpServerUrl;
|
|
3438
|
+
mcpApiKey;
|
|
3439
|
+
constructor(oauthApiBase, flowConfig, apiBaseUrl, tokenCallbacks, refreshConfig) {
|
|
3079
3440
|
this.oauthApiBase = oauthApiBase;
|
|
3080
3441
|
this.apiBaseUrl = apiBaseUrl;
|
|
3081
3442
|
this.windowManager = new OAuthWindowManager;
|
|
@@ -3087,6 +3448,9 @@ class OAuthManager {
|
|
|
3087
3448
|
this.getTokenCallback = tokenCallbacks?.getProviderToken;
|
|
3088
3449
|
this.setTokenCallback = tokenCallbacks?.setProviderToken;
|
|
3089
3450
|
this.removeTokenCallback = tokenCallbacks?.removeProviderToken;
|
|
3451
|
+
this.providerOAuth = refreshConfig?.providers ?? {};
|
|
3452
|
+
this.mcpServerUrl = refreshConfig?.mcpServerUrl;
|
|
3453
|
+
this.mcpApiKey = refreshConfig?.apiKey;
|
|
3090
3454
|
this.indexedDBStorage = new IndexedDBStorage;
|
|
3091
3455
|
this.cleanupExpiredPendingAuths();
|
|
3092
3456
|
}
|
|
@@ -3296,7 +3660,9 @@ class OAuthManager {
|
|
|
3296
3660
|
try {
|
|
3297
3661
|
const tokenData = await this.getTokenCallback(provider, email, context);
|
|
3298
3662
|
if (tokenData) {
|
|
3299
|
-
this.
|
|
3663
|
+
const refreshed = await this.maybeRefreshTokenData(provider, tokenData, context);
|
|
3664
|
+
this.providerTokens.set(provider, refreshed);
|
|
3665
|
+
return refreshed;
|
|
3300
3666
|
}
|
|
3301
3667
|
return tokenData;
|
|
3302
3668
|
} catch (error) {
|
|
@@ -3336,6 +3702,59 @@ class OAuthManager {
|
|
|
3336
3702
|
}
|
|
3337
3703
|
await this.saveProviderToken(provider, tokenData, tokenEmail, context);
|
|
3338
3704
|
}
|
|
3705
|
+
configureTokenRefresh(refreshConfig) {
|
|
3706
|
+
if (refreshConfig.providers) {
|
|
3707
|
+
this.providerOAuth = refreshConfig.providers;
|
|
3708
|
+
}
|
|
3709
|
+
if (refreshConfig.mcpServerUrl !== undefined) {
|
|
3710
|
+
this.mcpServerUrl = refreshConfig.mcpServerUrl;
|
|
3711
|
+
}
|
|
3712
|
+
if (refreshConfig.apiKey !== undefined) {
|
|
3713
|
+
this.mcpApiKey = refreshConfig.apiKey;
|
|
3714
|
+
}
|
|
3715
|
+
}
|
|
3716
|
+
async maybeRefreshTokenData(provider, tokenData, context) {
|
|
3717
|
+
const credentials = this.providerOAuth[provider];
|
|
3718
|
+
const serverUrl = this.mcpServerUrl;
|
|
3719
|
+
if (!credentials || !serverUrl) {
|
|
3720
|
+
return tokenData;
|
|
3721
|
+
}
|
|
3722
|
+
if (!shouldRefreshToken(tokenData)) {
|
|
3723
|
+
return tokenData;
|
|
3724
|
+
}
|
|
3725
|
+
try {
|
|
3726
|
+
const newAccessToken = await resolveAccessToken({
|
|
3727
|
+
provider,
|
|
3728
|
+
currentTokens: tokenData,
|
|
3729
|
+
providerOAuth: {
|
|
3730
|
+
clientId: credentials.clientId,
|
|
3731
|
+
clientSecret: credentials.clientSecret,
|
|
3732
|
+
subdomain: credentials.config?.subdomain
|
|
3733
|
+
},
|
|
3734
|
+
serverUrl,
|
|
3735
|
+
apiKey: this.mcpApiKey,
|
|
3736
|
+
setProviderToken: this.setTokenCallback,
|
|
3737
|
+
context
|
|
3738
|
+
});
|
|
3739
|
+
if (newAccessToken === tokenData.accessToken) {
|
|
3740
|
+
return tokenData;
|
|
3741
|
+
}
|
|
3742
|
+
if (this.getTokenCallback) {
|
|
3743
|
+
try {
|
|
3744
|
+
const reloaded = await this.getTokenCallback(provider, tokenData.email, context);
|
|
3745
|
+
if (reloaded) {
|
|
3746
|
+
return reloaded;
|
|
3747
|
+
}
|
|
3748
|
+
} catch {}
|
|
3749
|
+
}
|
|
3750
|
+
return { ...tokenData, accessToken: newAccessToken };
|
|
3751
|
+
} catch (err) {
|
|
3752
|
+
if (err instanceof RefreshRejectedError) {
|
|
3753
|
+
throw err;
|
|
3754
|
+
}
|
|
3755
|
+
return tokenData;
|
|
3756
|
+
}
|
|
3757
|
+
}
|
|
3339
3758
|
clearProviderToken(provider) {
|
|
3340
3759
|
this.providerTokens.delete(provider);
|
|
3341
3760
|
if (!this.setTokenCallback && !this.removeTokenCallback && !this.skipLocalStorage) {
|
|
@@ -3792,10 +4211,26 @@ class MCPClientBase {
|
|
|
3792
4211
|
};
|
|
3793
4212
|
this.onReauthRequired = config.onReauthRequired;
|
|
3794
4213
|
this.maxReauthRetries = config.maxReauthRetries ?? 1;
|
|
4214
|
+
const refreshProviders = {};
|
|
4215
|
+
for (const integration of this.integrations) {
|
|
4216
|
+
const oauth = integration?.oauth;
|
|
4217
|
+
if (oauth?.clientId && oauth?.provider) {
|
|
4218
|
+
refreshProviders[oauth.provider] = {
|
|
4219
|
+
clientId: oauth.clientId,
|
|
4220
|
+
clientSecret: oauth.clientSecret,
|
|
4221
|
+
config: oauth.config
|
|
4222
|
+
};
|
|
4223
|
+
}
|
|
4224
|
+
}
|
|
4225
|
+
const mcpServerUrl = config.serverUrl;
|
|
3795
4226
|
this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow, this.apiBaseUrl, {
|
|
3796
4227
|
getProviderToken: config.getProviderToken,
|
|
3797
4228
|
setProviderToken: config.setProviderToken,
|
|
3798
4229
|
removeProviderToken: config.removeProviderToken
|
|
4230
|
+
}, {
|
|
4231
|
+
providers: refreshProviders,
|
|
4232
|
+
mcpServerUrl,
|
|
4233
|
+
apiKey: config.apiKey
|
|
3799
4234
|
});
|
|
3800
4235
|
this.setSessionToken(config.sessionToken || this.loadSessionTokenFromStorage());
|
|
3801
4236
|
for (const integration of this.integrations) {
|
|
@@ -3856,56 +4291,8 @@ class MCPClientBase {
|
|
|
3856
4291
|
}
|
|
3857
4292
|
}
|
|
3858
4293
|
const integrationIds = this.integrations.map((i) => i.id);
|
|
3859
|
-
|
|
3860
|
-
this
|
|
3861
|
-
}
|
|
3862
|
-
if (integrationIds.includes("gmail")) {
|
|
3863
|
-
this.gmail = this.createIntegrationProxy("gmail");
|
|
3864
|
-
}
|
|
3865
|
-
if (integrationIds.includes("notion")) {
|
|
3866
|
-
this.notion = this.createIntegrationProxy("notion");
|
|
3867
|
-
}
|
|
3868
|
-
if (integrationIds.includes("slack")) {
|
|
3869
|
-
this.slack = this.createIntegrationProxy("slack");
|
|
3870
|
-
}
|
|
3871
|
-
if (integrationIds.includes("linear")) {
|
|
3872
|
-
this.linear = this.createIntegrationProxy("linear");
|
|
3873
|
-
}
|
|
3874
|
-
if (integrationIds.includes("railway")) {
|
|
3875
|
-
this.railway = this.createIntegrationProxy("railway");
|
|
3876
|
-
}
|
|
3877
|
-
if (integrationIds.includes("vercel")) {
|
|
3878
|
-
this.vercel = this.createIntegrationProxy("vercel");
|
|
3879
|
-
}
|
|
3880
|
-
if (integrationIds.includes("zendesk")) {
|
|
3881
|
-
this.zendesk = this.createIntegrationProxy("zendesk");
|
|
3882
|
-
}
|
|
3883
|
-
if (integrationIds.includes("stripe")) {
|
|
3884
|
-
this.stripe = this.createIntegrationProxy("stripe");
|
|
3885
|
-
}
|
|
3886
|
-
if (integrationIds.includes("gcal")) {
|
|
3887
|
-
this.gcal = this.createIntegrationProxy("gcal");
|
|
3888
|
-
}
|
|
3889
|
-
if (integrationIds.includes("outlook")) {
|
|
3890
|
-
this.outlook = this.createIntegrationProxy("outlook");
|
|
3891
|
-
}
|
|
3892
|
-
if (integrationIds.includes("airtable")) {
|
|
3893
|
-
this.airtable = this.createIntegrationProxy("airtable");
|
|
3894
|
-
}
|
|
3895
|
-
if (integrationIds.includes("todoist")) {
|
|
3896
|
-
this.todoist = this.createIntegrationProxy("todoist");
|
|
3897
|
-
}
|
|
3898
|
-
if (integrationIds.includes("gdocs")) {
|
|
3899
|
-
this.gdocs = this.createIntegrationProxy("gdocs");
|
|
3900
|
-
}
|
|
3901
|
-
if (integrationIds.includes("gsheets")) {
|
|
3902
|
-
this.gsheets = this.createIntegrationProxy("gsheets");
|
|
3903
|
-
}
|
|
3904
|
-
if (integrationIds.includes("gslides")) {
|
|
3905
|
-
this.gslides = this.createIntegrationProxy("gslides");
|
|
3906
|
-
}
|
|
3907
|
-
if (integrationIds.includes("posthog")) {
|
|
3908
|
-
this.posthog = this.createIntegrationProxy("posthog");
|
|
4294
|
+
for (const id of integrationIds) {
|
|
4295
|
+
this[id] = this.createIntegrationProxy(id);
|
|
3909
4296
|
}
|
|
3910
4297
|
this.server = this.createServerProxy();
|
|
3911
4298
|
this.trigger = new TriggerClient({
|
|
@@ -4982,6 +5369,7 @@ var GITHUB_TOOLS = [
|
|
|
4982
5369
|
"github_create_repo",
|
|
4983
5370
|
"github_list_branches",
|
|
4984
5371
|
"github_create_branch",
|
|
5372
|
+
"github_get_authenticated_user",
|
|
4985
5373
|
"github_get_user",
|
|
4986
5374
|
"github_list_commits",
|
|
4987
5375
|
"github_get_commit",
|
|
@@ -5042,18 +5430,76 @@ function githubIntegration(config = {}) {
|
|
|
5042
5430
|
}
|
|
5043
5431
|
};
|
|
5044
5432
|
}
|
|
5433
|
+
// src/integrations/gitlab.ts
|
|
5434
|
+
init_logger();
|
|
5435
|
+
var logger9 = createLogger("GitLab");
|
|
5436
|
+
var GITLAB_TOOLS = [
|
|
5437
|
+
"gitlab_list_projects",
|
|
5438
|
+
"gitlab_list_own_projects",
|
|
5439
|
+
"gitlab_get_project",
|
|
5440
|
+
"gitlab_create_project",
|
|
5441
|
+
"gitlab_create_issue",
|
|
5442
|
+
"gitlab_list_issues",
|
|
5443
|
+
"gitlab_get_issue",
|
|
5444
|
+
"gitlab_update_issue",
|
|
5445
|
+
"gitlab_close_issue",
|
|
5446
|
+
"gitlab_create_merge_request",
|
|
5447
|
+
"gitlab_list_merge_requests",
|
|
5448
|
+
"gitlab_get_merge_request",
|
|
5449
|
+
"gitlab_accept_merge_request",
|
|
5450
|
+
"gitlab_list_branches",
|
|
5451
|
+
"gitlab_create_branch",
|
|
5452
|
+
"gitlab_list_commits",
|
|
5453
|
+
"gitlab_get_commit",
|
|
5454
|
+
"gitlab_list_issue_notes",
|
|
5455
|
+
"gitlab_create_issue_note",
|
|
5456
|
+
"gitlab_list_milestones",
|
|
5457
|
+
"gitlab_create_milestone",
|
|
5458
|
+
"gitlab_get_current_user"
|
|
5459
|
+
];
|
|
5460
|
+
function gitlabIntegration(config = {}) {
|
|
5461
|
+
const oauth = {
|
|
5462
|
+
provider: "gitlab",
|
|
5463
|
+
clientId: config.clientId ?? getEnv("GITLAB_CLIENT_ID"),
|
|
5464
|
+
clientSecret: config.clientSecret ?? getEnv("GITLAB_CLIENT_SECRET"),
|
|
5465
|
+
scopes: config.scopes ?? ["read_api", "write_api", "read_user"],
|
|
5466
|
+
optionalScopes: config.optionalScopes,
|
|
5467
|
+
redirectUri: config.redirectUri,
|
|
5468
|
+
config: {
|
|
5469
|
+
apiBaseUrl: config.apiBaseUrl ?? "https://gitlab.com/api/v4/",
|
|
5470
|
+
...config
|
|
5471
|
+
}
|
|
5472
|
+
};
|
|
5473
|
+
return {
|
|
5474
|
+
id: "gitlab",
|
|
5475
|
+
name: "GitLab",
|
|
5476
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/gitlab.png",
|
|
5477
|
+
description: "Manage GitLab projects, issues, merge requests, and CI/CD",
|
|
5478
|
+
category: "Engineering",
|
|
5479
|
+
tools: [...GITLAB_TOOLS],
|
|
5480
|
+
oauth,
|
|
5481
|
+
async onInit(_client) {
|
|
5482
|
+
logger9.debug("GitLab integration initialized");
|
|
5483
|
+
},
|
|
5484
|
+
async onAfterConnect(_client) {
|
|
5485
|
+
logger9.debug("GitLab integration connected");
|
|
5486
|
+
}
|
|
5487
|
+
};
|
|
5488
|
+
}
|
|
5045
5489
|
// src/integrations/gmail.ts
|
|
5046
5490
|
init_logger();
|
|
5047
|
-
var
|
|
5491
|
+
var logger10 = createLogger("Gmail");
|
|
5048
5492
|
var GMAIL_TOOLS = [
|
|
5049
|
-
"
|
|
5050
|
-
"
|
|
5493
|
+
"gmail_create_draft",
|
|
5494
|
+
"gmail_get_attachment",
|
|
5051
5495
|
"gmail_get_message",
|
|
5052
|
-
"gmail_search_messages",
|
|
5053
|
-
"gmail_reply_message",
|
|
5054
|
-
"gmail_list_threads",
|
|
5055
5496
|
"gmail_get_thread",
|
|
5497
|
+
"gmail_list_messages",
|
|
5498
|
+
"gmail_list_threads",
|
|
5056
5499
|
"gmail_modify_message",
|
|
5500
|
+
"gmail_reply_message",
|
|
5501
|
+
"gmail_search_messages",
|
|
5502
|
+
"gmail_send_message",
|
|
5057
5503
|
"gmail_trash_message"
|
|
5058
5504
|
];
|
|
5059
5505
|
function gmailIntegration(config = {}) {
|
|
@@ -5073,16 +5519,16 @@ function gmailIntegration(config = {}) {
|
|
|
5073
5519
|
tools: [...GMAIL_TOOLS],
|
|
5074
5520
|
oauth,
|
|
5075
5521
|
async onInit(_client) {
|
|
5076
|
-
|
|
5522
|
+
logger10.debug("Gmail integration initialized");
|
|
5077
5523
|
},
|
|
5078
5524
|
async onAfterConnect(_client) {
|
|
5079
|
-
|
|
5525
|
+
logger10.debug("Gmail integration connected");
|
|
5080
5526
|
}
|
|
5081
5527
|
};
|
|
5082
5528
|
}
|
|
5083
5529
|
// src/integrations/notion.ts
|
|
5084
5530
|
init_logger();
|
|
5085
|
-
var
|
|
5531
|
+
var logger11 = createLogger("Notion");
|
|
5086
5532
|
var NOTION_TOOLS = [
|
|
5087
5533
|
"notion_search",
|
|
5088
5534
|
"notion_get_page",
|
|
@@ -5135,16 +5581,16 @@ function notionIntegration(config = {}) {
|
|
|
5135
5581
|
tools: [...NOTION_TOOLS],
|
|
5136
5582
|
oauth,
|
|
5137
5583
|
async onInit(_client) {
|
|
5138
|
-
|
|
5584
|
+
logger11.debug("Notion integration initialized");
|
|
5139
5585
|
},
|
|
5140
5586
|
async onAfterConnect(_client) {
|
|
5141
|
-
|
|
5587
|
+
logger11.debug("Notion integration connected");
|
|
5142
5588
|
}
|
|
5143
5589
|
};
|
|
5144
5590
|
}
|
|
5145
5591
|
// src/integrations/slack.ts
|
|
5146
5592
|
init_logger();
|
|
5147
|
-
var
|
|
5593
|
+
var logger12 = createLogger("Slack");
|
|
5148
5594
|
var SLACK_TOOLS = [
|
|
5149
5595
|
"slack_send_message",
|
|
5150
5596
|
"slack_list_messages",
|
|
@@ -5209,16 +5655,57 @@ function slackIntegration(config = {}) {
|
|
|
5209
5655
|
tools: [...SLACK_TOOLS],
|
|
5210
5656
|
oauth,
|
|
5211
5657
|
async onInit(_client) {
|
|
5212
|
-
|
|
5658
|
+
logger12.debug("Slack integration initialized");
|
|
5659
|
+
},
|
|
5660
|
+
async onAfterConnect(_client) {
|
|
5661
|
+
logger12.debug("Slack integration connected");
|
|
5662
|
+
}
|
|
5663
|
+
};
|
|
5664
|
+
}
|
|
5665
|
+
// src/integrations/discord.ts
|
|
5666
|
+
init_logger();
|
|
5667
|
+
var logger13 = createLogger("Discord");
|
|
5668
|
+
var DISCORD_TOOLS = [
|
|
5669
|
+
"discord_get_current_user",
|
|
5670
|
+
"discord_list_my_guilds",
|
|
5671
|
+
"discord_get_guild",
|
|
5672
|
+
"discord_list_guild_channels",
|
|
5673
|
+
"discord_get_channel",
|
|
5674
|
+
"discord_send_message",
|
|
5675
|
+
"discord_list_messages",
|
|
5676
|
+
"discord_edit_message",
|
|
5677
|
+
"discord_delete_message"
|
|
5678
|
+
];
|
|
5679
|
+
function discordIntegration(config = {}) {
|
|
5680
|
+
const oauth = {
|
|
5681
|
+
provider: "discord",
|
|
5682
|
+
clientId: config.clientId ?? getEnv("DISCORD_CLIENT_ID"),
|
|
5683
|
+
clientSecret: config.clientSecret ?? getEnv("DISCORD_CLIENT_SECRET"),
|
|
5684
|
+
scopes: config.scopes ?? ["identify", "email", "guilds", "bot", "applications.commands"],
|
|
5685
|
+
redirectUri: config.redirectUri,
|
|
5686
|
+
config: {
|
|
5687
|
+
...config
|
|
5688
|
+
}
|
|
5689
|
+
};
|
|
5690
|
+
return {
|
|
5691
|
+
id: "discord",
|
|
5692
|
+
name: "Discord",
|
|
5693
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/discord.png",
|
|
5694
|
+
description: "Send and manage Discord messages; list guilds and channels (bot token required on server for channel APIs)",
|
|
5695
|
+
category: "Communication",
|
|
5696
|
+
tools: [...DISCORD_TOOLS],
|
|
5697
|
+
oauth,
|
|
5698
|
+
async onInit(_client) {
|
|
5699
|
+
logger13.debug("Discord integration initialized");
|
|
5213
5700
|
},
|
|
5214
5701
|
async onAfterConnect(_client) {
|
|
5215
|
-
|
|
5702
|
+
logger13.debug("Discord integration connected");
|
|
5216
5703
|
}
|
|
5217
5704
|
};
|
|
5218
5705
|
}
|
|
5219
5706
|
// src/integrations/linear.ts
|
|
5220
5707
|
init_logger();
|
|
5221
|
-
var
|
|
5708
|
+
var logger14 = createLogger("Linear");
|
|
5222
5709
|
var LINEAR_TOOLS = [
|
|
5223
5710
|
"linear_create_issue",
|
|
5224
5711
|
"linear_list_issues",
|
|
@@ -5273,16 +5760,16 @@ function linearIntegration(config = {}) {
|
|
|
5273
5760
|
tools: [...LINEAR_TOOLS],
|
|
5274
5761
|
oauth,
|
|
5275
5762
|
async onInit(_client) {
|
|
5276
|
-
|
|
5763
|
+
logger14.debug("Linear integration initialized");
|
|
5277
5764
|
},
|
|
5278
5765
|
async onAfterConnect(_client) {
|
|
5279
|
-
|
|
5766
|
+
logger14.debug("Linear integration connected");
|
|
5280
5767
|
}
|
|
5281
5768
|
};
|
|
5282
5769
|
}
|
|
5283
5770
|
// src/integrations/railway.ts
|
|
5284
5771
|
init_logger();
|
|
5285
|
-
var
|
|
5772
|
+
var logger15 = createLogger("Railway");
|
|
5286
5773
|
var RAILWAY_SCOPES = [
|
|
5287
5774
|
"openid",
|
|
5288
5775
|
"profile",
|
|
@@ -5387,16 +5874,16 @@ function railwayIntegration(config = {}) {
|
|
|
5387
5874
|
tools: [...RAILWAY_TOOLS],
|
|
5388
5875
|
oauth,
|
|
5389
5876
|
async onInit(_client) {
|
|
5390
|
-
|
|
5877
|
+
logger15.debug("Railway integration initialized");
|
|
5391
5878
|
},
|
|
5392
5879
|
async onAfterConnect(_client) {
|
|
5393
|
-
|
|
5880
|
+
logger15.debug("Railway integration connected");
|
|
5394
5881
|
}
|
|
5395
5882
|
};
|
|
5396
5883
|
}
|
|
5397
5884
|
// src/integrations/vercel.ts
|
|
5398
5885
|
init_logger();
|
|
5399
|
-
var
|
|
5886
|
+
var logger16 = createLogger("Vercel");
|
|
5400
5887
|
var VERCEL_TOOLS = [
|
|
5401
5888
|
"vercel_list_projects",
|
|
5402
5889
|
"vercel_get_project",
|
|
@@ -5439,16 +5926,16 @@ function vercelIntegration(config = {}) {
|
|
|
5439
5926
|
tools: [...VERCEL_TOOLS],
|
|
5440
5927
|
oauth,
|
|
5441
5928
|
async onInit(_client) {
|
|
5442
|
-
|
|
5929
|
+
logger16.debug("Vercel integration initialized");
|
|
5443
5930
|
},
|
|
5444
5931
|
async onAfterConnect(_client) {
|
|
5445
|
-
|
|
5932
|
+
logger16.debug("Vercel integration connected");
|
|
5446
5933
|
}
|
|
5447
5934
|
};
|
|
5448
5935
|
}
|
|
5449
5936
|
// src/integrations/zendesk.ts
|
|
5450
5937
|
init_logger();
|
|
5451
|
-
var
|
|
5938
|
+
var logger17 = createLogger("Zendesk");
|
|
5452
5939
|
var ZENDESK_TOOLS = [
|
|
5453
5940
|
"zendesk_list_tickets",
|
|
5454
5941
|
"zendesk_get_ticket",
|
|
@@ -5497,16 +5984,16 @@ function zendeskIntegration(config = {}) {
|
|
|
5497
5984
|
tools: [...ZENDESK_TOOLS],
|
|
5498
5985
|
oauth,
|
|
5499
5986
|
async onInit(_client) {
|
|
5500
|
-
|
|
5987
|
+
logger17.debug("Zendesk integration initialized");
|
|
5501
5988
|
},
|
|
5502
5989
|
async onAfterConnect(_client) {
|
|
5503
|
-
|
|
5990
|
+
logger17.debug("Zendesk integration connected");
|
|
5504
5991
|
}
|
|
5505
5992
|
};
|
|
5506
5993
|
}
|
|
5507
5994
|
// src/integrations/stripe.ts
|
|
5508
5995
|
init_logger();
|
|
5509
|
-
var
|
|
5996
|
+
var logger18 = createLogger("Stripe");
|
|
5510
5997
|
var STRIPE_TOOLS = [
|
|
5511
5998
|
"stripe_list_customers",
|
|
5512
5999
|
"stripe_get_customer",
|
|
@@ -5525,6 +6012,7 @@ var STRIPE_TOOLS = [
|
|
|
5525
6012
|
"stripe_update_subscription",
|
|
5526
6013
|
"stripe_cancel_subscription",
|
|
5527
6014
|
"stripe_list_invoices",
|
|
6015
|
+
"stripe_get_invoice",
|
|
5528
6016
|
"stripe_create_invoice",
|
|
5529
6017
|
"stripe_finalize_invoice",
|
|
5530
6018
|
"stripe_pay_invoice",
|
|
@@ -5562,28 +6050,29 @@ function stripeIntegration(config = {}) {
|
|
|
5562
6050
|
tools: [...STRIPE_TOOLS],
|
|
5563
6051
|
oauth,
|
|
5564
6052
|
async onInit(_client) {
|
|
5565
|
-
|
|
6053
|
+
logger18.debug("Stripe integration initialized");
|
|
5566
6054
|
},
|
|
5567
6055
|
async onAfterConnect(_client) {
|
|
5568
|
-
|
|
6056
|
+
logger18.debug("Stripe integration connected");
|
|
5569
6057
|
}
|
|
5570
6058
|
};
|
|
5571
6059
|
}
|
|
5572
6060
|
// src/integrations/gcal.ts
|
|
5573
6061
|
init_logger();
|
|
5574
|
-
var
|
|
6062
|
+
var logger19 = createLogger("Google Calendar");
|
|
5575
6063
|
var GCAL_TOOLS = [
|
|
5576
|
-
"
|
|
5577
|
-
"gcal_get_calendar",
|
|
5578
|
-
"gcal_list_events",
|
|
5579
|
-
"gcal_get_event",
|
|
6064
|
+
"gcal_create_calendar",
|
|
5580
6065
|
"gcal_create_event",
|
|
5581
|
-
"
|
|
6066
|
+
"gcal_delete_calendar",
|
|
5582
6067
|
"gcal_delete_event",
|
|
5583
|
-
"
|
|
6068
|
+
"gcal_freebusy",
|
|
6069
|
+
"gcal_get_calendar",
|
|
6070
|
+
"gcal_get_event",
|
|
6071
|
+
"gcal_list_attendees",
|
|
6072
|
+
"gcal_list_calendars",
|
|
6073
|
+
"gcal_list_events",
|
|
5584
6074
|
"gcal_quick_add",
|
|
5585
|
-
"
|
|
5586
|
-
"gcal_delete_calendar"
|
|
6075
|
+
"gcal_update_event"
|
|
5587
6076
|
];
|
|
5588
6077
|
function gcalIntegration(config = {}) {
|
|
5589
6078
|
const oauth = {
|
|
@@ -5604,42 +6093,167 @@ function gcalIntegration(config = {}) {
|
|
|
5604
6093
|
tools: [...GCAL_TOOLS],
|
|
5605
6094
|
oauth,
|
|
5606
6095
|
async onInit(_client) {
|
|
5607
|
-
|
|
6096
|
+
logger19.debug("Google Calendar integration initialized");
|
|
6097
|
+
},
|
|
6098
|
+
async onAfterConnect(_client) {
|
|
6099
|
+
logger19.debug("Google Calendar integration connected");
|
|
6100
|
+
}
|
|
6101
|
+
};
|
|
6102
|
+
}
|
|
6103
|
+
// src/integrations/gcontacts.ts
|
|
6104
|
+
init_logger();
|
|
6105
|
+
var logger20 = createLogger("Google Contacts");
|
|
6106
|
+
var GCONTACTS_TOOLS = [
|
|
6107
|
+
"gcontacts_batch_get_contacts",
|
|
6108
|
+
"gcontacts_copy_other_contact",
|
|
6109
|
+
"gcontacts_create_contact",
|
|
6110
|
+
"gcontacts_delete_contact",
|
|
6111
|
+
"gcontacts_get_person",
|
|
6112
|
+
"gcontacts_get_self",
|
|
6113
|
+
"gcontacts_list_connections",
|
|
6114
|
+
"gcontacts_list_other_contacts",
|
|
6115
|
+
"gcontacts_search_contacts",
|
|
6116
|
+
"gcontacts_update_contact"
|
|
6117
|
+
];
|
|
6118
|
+
function gcontactsIntegration(config = {}) {
|
|
6119
|
+
const oauth = {
|
|
6120
|
+
provider: "gcontacts",
|
|
6121
|
+
clientId: config.clientId ?? getEnv("GCONTACTS_CLIENT_ID"),
|
|
6122
|
+
clientSecret: config.clientSecret ?? getEnv("GCONTACTS_CLIENT_SECRET"),
|
|
6123
|
+
scopes: config.scopes,
|
|
6124
|
+
optionalScopes: config.optionalScopes,
|
|
6125
|
+
redirectUri: config.redirectUri,
|
|
6126
|
+
config: {
|
|
6127
|
+
...config
|
|
6128
|
+
}
|
|
6129
|
+
};
|
|
6130
|
+
return {
|
|
6131
|
+
id: "gcontacts",
|
|
6132
|
+
name: "Google Contacts",
|
|
6133
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/gcontacts.png",
|
|
6134
|
+
description: "List, search, create, update, and delete Google Contacts via the People API",
|
|
6135
|
+
category: "Communication",
|
|
6136
|
+
tools: [...GCONTACTS_TOOLS],
|
|
6137
|
+
oauth,
|
|
6138
|
+
async onInit(_client) {
|
|
6139
|
+
logger20.debug("Google Contacts integration initialized");
|
|
6140
|
+
},
|
|
6141
|
+
async onAfterConnect(_client) {
|
|
6142
|
+
logger20.debug("Google Contacts integration connected");
|
|
6143
|
+
}
|
|
6144
|
+
};
|
|
6145
|
+
}
|
|
6146
|
+
// src/integrations/gmeet.ts
|
|
6147
|
+
init_logger();
|
|
6148
|
+
var logger21 = createLogger("Google Meet");
|
|
6149
|
+
var GMEET_TOOLS = [
|
|
6150
|
+
"gmeet_add_meet_to_event",
|
|
6151
|
+
"gmeet_create_meeting",
|
|
6152
|
+
"gmeet_delete_meeting",
|
|
6153
|
+
"gmeet_get_meeting",
|
|
6154
|
+
"gmeet_list_meetings",
|
|
6155
|
+
"gmeet_update_meeting"
|
|
6156
|
+
];
|
|
6157
|
+
function gmeetIntegration(config = {}) {
|
|
6158
|
+
const oauth = {
|
|
6159
|
+
provider: "gmeet",
|
|
6160
|
+
clientId: config.clientId ?? getEnv("GMEET_CLIENT_ID"),
|
|
6161
|
+
clientSecret: config.clientSecret ?? getEnv("GMEET_CLIENT_SECRET"),
|
|
6162
|
+
scopes: config.scopes,
|
|
6163
|
+
optionalScopes: config.optionalScopes,
|
|
6164
|
+
redirectUri: config.redirectUri,
|
|
6165
|
+
config: { ...config }
|
|
6166
|
+
};
|
|
6167
|
+
return {
|
|
6168
|
+
id: "gmeet",
|
|
6169
|
+
name: "Google Meet",
|
|
6170
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/google_meet.webp",
|
|
6171
|
+
description: "Create and manage Google Meet links via Calendar conference data",
|
|
6172
|
+
category: "Communication",
|
|
6173
|
+
tools: [...GMEET_TOOLS],
|
|
6174
|
+
oauth,
|
|
6175
|
+
async onInit(_client) {
|
|
6176
|
+
logger21.debug("Google Meet integration initialized");
|
|
6177
|
+
},
|
|
6178
|
+
async onAfterConnect(_client) {
|
|
6179
|
+
logger21.debug("Google Meet integration connected");
|
|
6180
|
+
}
|
|
6181
|
+
};
|
|
6182
|
+
}
|
|
6183
|
+
// src/integrations/gtasks.ts
|
|
6184
|
+
init_logger();
|
|
6185
|
+
var logger22 = createLogger("Google Tasks");
|
|
6186
|
+
var GTASKS_TOOLS = [
|
|
6187
|
+
"gtasks_clear_completed",
|
|
6188
|
+
"gtasks_create_task",
|
|
6189
|
+
"gtasks_create_tasklist",
|
|
6190
|
+
"gtasks_delete_task",
|
|
6191
|
+
"gtasks_delete_tasklist",
|
|
6192
|
+
"gtasks_get_task",
|
|
6193
|
+
"gtasks_get_tasklist",
|
|
6194
|
+
"gtasks_list_tasklists",
|
|
6195
|
+
"gtasks_list_tasks",
|
|
6196
|
+
"gtasks_move_task",
|
|
6197
|
+
"gtasks_update_task",
|
|
6198
|
+
"gtasks_update_tasklist"
|
|
6199
|
+
];
|
|
6200
|
+
function gtasksIntegration(config = {}) {
|
|
6201
|
+
const oauth = {
|
|
6202
|
+
provider: "gtasks",
|
|
6203
|
+
clientId: config.clientId ?? getEnv("GTASKS_CLIENT_ID"),
|
|
6204
|
+
clientSecret: config.clientSecret ?? getEnv("GTASKS_CLIENT_SECRET"),
|
|
6205
|
+
scopes: config.scopes,
|
|
6206
|
+
optionalScopes: config.optionalScopes,
|
|
6207
|
+
redirectUri: config.redirectUri,
|
|
6208
|
+
config: {
|
|
6209
|
+
...config
|
|
6210
|
+
}
|
|
6211
|
+
};
|
|
6212
|
+
return {
|
|
6213
|
+
id: "gtasks",
|
|
6214
|
+
name: "Google Tasks",
|
|
6215
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/google_tasks.webp",
|
|
6216
|
+
description: "Manage Google Tasks lists and to-dos synced with your Google account",
|
|
6217
|
+
category: "Productivity",
|
|
6218
|
+
tools: [...GTASKS_TOOLS],
|
|
6219
|
+
oauth,
|
|
6220
|
+
async onInit(_client) {
|
|
6221
|
+
logger22.debug("Google Tasks integration initialized");
|
|
5608
6222
|
},
|
|
5609
6223
|
async onAfterConnect(_client) {
|
|
5610
|
-
|
|
6224
|
+
logger22.debug("Google Tasks integration connected");
|
|
5611
6225
|
}
|
|
5612
6226
|
};
|
|
5613
6227
|
}
|
|
5614
6228
|
// src/integrations/outlook.ts
|
|
5615
6229
|
init_logger();
|
|
5616
|
-
var
|
|
6230
|
+
var logger23 = createLogger("Outlook");
|
|
5617
6231
|
var OUTLOOK_TOOLS = [
|
|
5618
|
-
"
|
|
5619
|
-
"outlook_get_message",
|
|
5620
|
-
"outlook_send_message",
|
|
5621
|
-
"outlook_search_messages",
|
|
5622
|
-
"outlook_reply_message",
|
|
5623
|
-
"outlook_reply_all_message",
|
|
5624
|
-
"outlook_forward_message",
|
|
5625
|
-
"outlook_delete_message",
|
|
5626
|
-
"outlook_move_message",
|
|
5627
|
-
"outlook_mark_message_read",
|
|
6232
|
+
"outlook_accept_event",
|
|
5628
6233
|
"outlook_create_draft",
|
|
5629
|
-
"outlook_list_mail_folders",
|
|
5630
|
-
"outlook_list_events",
|
|
5631
|
-
"outlook_get_event",
|
|
5632
6234
|
"outlook_create_event",
|
|
5633
|
-
"outlook_update_event",
|
|
5634
|
-
"outlook_delete_event",
|
|
5635
|
-
"outlook_list_calendars",
|
|
5636
|
-
"outlook_accept_event",
|
|
5637
6235
|
"outlook_decline_event",
|
|
5638
|
-
"
|
|
6236
|
+
"outlook_delete_event",
|
|
6237
|
+
"outlook_delete_message",
|
|
5639
6238
|
"outlook_find_meeting_times",
|
|
6239
|
+
"outlook_forward_message",
|
|
6240
|
+
"outlook_get_contact",
|
|
6241
|
+
"outlook_get_event",
|
|
6242
|
+
"outlook_get_message",
|
|
5640
6243
|
"outlook_get_schedule",
|
|
6244
|
+
"outlook_list_calendars",
|
|
5641
6245
|
"outlook_list_contacts",
|
|
5642
|
-
"
|
|
6246
|
+
"outlook_list_events",
|
|
6247
|
+
"outlook_list_mail_folders",
|
|
6248
|
+
"outlook_list_messages",
|
|
6249
|
+
"outlook_mark_message_read",
|
|
6250
|
+
"outlook_move_message",
|
|
6251
|
+
"outlook_reply_all_message",
|
|
6252
|
+
"outlook_reply_message",
|
|
6253
|
+
"outlook_search_messages",
|
|
6254
|
+
"outlook_send_message",
|
|
6255
|
+
"outlook_tentatively_accept_event",
|
|
6256
|
+
"outlook_update_event"
|
|
5643
6257
|
];
|
|
5644
6258
|
function outlookIntegration(config = {}) {
|
|
5645
6259
|
const oauth = {
|
|
@@ -5660,16 +6274,75 @@ function outlookIntegration(config = {}) {
|
|
|
5660
6274
|
tools: [...OUTLOOK_TOOLS],
|
|
5661
6275
|
oauth,
|
|
5662
6276
|
async onInit(_client) {
|
|
5663
|
-
|
|
6277
|
+
logger23.debug("Outlook integration initialized");
|
|
6278
|
+
},
|
|
6279
|
+
async onAfterConnect(_client) {
|
|
6280
|
+
logger23.debug("Outlook integration connected");
|
|
6281
|
+
}
|
|
6282
|
+
};
|
|
6283
|
+
}
|
|
6284
|
+
// src/integrations/teams.ts
|
|
6285
|
+
init_logger();
|
|
6286
|
+
var logger24 = createLogger("Teams");
|
|
6287
|
+
var TEAMS_SCOPES = [
|
|
6288
|
+
"offline_access",
|
|
6289
|
+
"User.Read",
|
|
6290
|
+
"Team.ReadBasic.All",
|
|
6291
|
+
"Channel.ReadBasic.All",
|
|
6292
|
+
"ChannelMessage.Read.All",
|
|
6293
|
+
"ChannelMessage.Send",
|
|
6294
|
+
"Chat.Read",
|
|
6295
|
+
"Chat.ReadWrite"
|
|
6296
|
+
];
|
|
6297
|
+
var TEAMS_TOOLS = [
|
|
6298
|
+
"teams_get_channel",
|
|
6299
|
+
"teams_get_chat",
|
|
6300
|
+
"teams_get_profile",
|
|
6301
|
+
"teams_get_team",
|
|
6302
|
+
"teams_list_channel_messages",
|
|
6303
|
+
"teams_list_channels",
|
|
6304
|
+
"teams_list_chat_messages",
|
|
6305
|
+
"teams_list_chats",
|
|
6306
|
+
"teams_list_teams",
|
|
6307
|
+
"teams_reply_channel_message",
|
|
6308
|
+
"teams_send_channel_message",
|
|
6309
|
+
"teams_send_chat_message"
|
|
6310
|
+
];
|
|
6311
|
+
function teamsIntegration(config = {}) {
|
|
6312
|
+
const oauth = {
|
|
6313
|
+
provider: "teams",
|
|
6314
|
+
clientId: config.clientId ?? getEnv("TEAMS_CLIENT_ID"),
|
|
6315
|
+
clientSecret: config.clientSecret ?? getEnv("TEAMS_CLIENT_SECRET"),
|
|
6316
|
+
scopes: config.scopes ?? [...TEAMS_SCOPES],
|
|
6317
|
+
optionalScopes: config.optionalScopes,
|
|
6318
|
+
redirectUri: config.redirectUri,
|
|
6319
|
+
config: {
|
|
6320
|
+
...config,
|
|
6321
|
+
authorization_endpoint: "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
|
|
6322
|
+
token_endpoint: "https://login.microsoftonline.com/common/oauth2/v2.0/token",
|
|
6323
|
+
response_type: "code",
|
|
6324
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
6325
|
+
}
|
|
6326
|
+
};
|
|
6327
|
+
return {
|
|
6328
|
+
id: "teams",
|
|
6329
|
+
name: "Microsoft Teams",
|
|
6330
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/teams.png",
|
|
6331
|
+
description: "Collaborate in Teams channels and chats using Microsoft Graph — teams, channels, messages, and profile.",
|
|
6332
|
+
category: "Communication",
|
|
6333
|
+
tools: [...TEAMS_TOOLS],
|
|
6334
|
+
oauth,
|
|
6335
|
+
async onInit(_client) {
|
|
6336
|
+
logger24.debug("Teams integration initialized");
|
|
5664
6337
|
},
|
|
5665
6338
|
async onAfterConnect(_client) {
|
|
5666
|
-
|
|
6339
|
+
logger24.debug("Teams integration connected");
|
|
5667
6340
|
}
|
|
5668
6341
|
};
|
|
5669
6342
|
}
|
|
5670
6343
|
// src/integrations/airtable.ts
|
|
5671
6344
|
init_logger();
|
|
5672
|
-
var
|
|
6345
|
+
var logger25 = createLogger("Airtable");
|
|
5673
6346
|
var AIRTABLE_TOOLS = [
|
|
5674
6347
|
"airtable_list_bases",
|
|
5675
6348
|
"airtable_get_base",
|
|
@@ -5715,16 +6388,206 @@ function airtableIntegration(config = {}) {
|
|
|
5715
6388
|
tools: [...AIRTABLE_TOOLS],
|
|
5716
6389
|
oauth,
|
|
5717
6390
|
async onInit(_client) {
|
|
5718
|
-
|
|
6391
|
+
logger25.debug("Airtable integration initialized");
|
|
6392
|
+
},
|
|
6393
|
+
async onAfterConnect(_client) {
|
|
6394
|
+
logger25.debug("Airtable integration connected");
|
|
6395
|
+
}
|
|
6396
|
+
};
|
|
6397
|
+
}
|
|
6398
|
+
// src/integrations/auth0.ts
|
|
6399
|
+
init_logger();
|
|
6400
|
+
var logger26 = createLogger("Auth0");
|
|
6401
|
+
var AUTH0_TOOLS = [
|
|
6402
|
+
"auth0_list_users",
|
|
6403
|
+
"auth0_get_user",
|
|
6404
|
+
"auth0_create_user",
|
|
6405
|
+
"auth0_patch_user",
|
|
6406
|
+
"auth0_delete_user",
|
|
6407
|
+
"auth0_list_connections",
|
|
6408
|
+
"auth0_get_connection",
|
|
6409
|
+
"auth0_list_clients",
|
|
6410
|
+
"auth0_get_client",
|
|
6411
|
+
"auth0_create_client",
|
|
6412
|
+
"auth0_patch_client"
|
|
6413
|
+
];
|
|
6414
|
+
function normalizeAuth0Domain(raw) {
|
|
6415
|
+
let s = raw.trim();
|
|
6416
|
+
s = s.replace(/^https?:\/\//i, "");
|
|
6417
|
+
const slash = s.indexOf("/");
|
|
6418
|
+
if (slash >= 0)
|
|
6419
|
+
s = s.slice(0, slash);
|
|
6420
|
+
return s.replace(/\/$/, "");
|
|
6421
|
+
}
|
|
6422
|
+
async function fetchClientCredentialsToken(params) {
|
|
6423
|
+
const tokenUrl = `https://${params.domain}/oauth/token`;
|
|
6424
|
+
const body = new URLSearchParams({
|
|
6425
|
+
grant_type: "client_credentials",
|
|
6426
|
+
client_id: params.clientId,
|
|
6427
|
+
client_secret: params.clientSecret,
|
|
6428
|
+
audience: params.audience
|
|
6429
|
+
});
|
|
6430
|
+
const res = await fetch(tokenUrl, {
|
|
6431
|
+
method: "POST",
|
|
6432
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
6433
|
+
body
|
|
6434
|
+
});
|
|
6435
|
+
const text = await res.text();
|
|
6436
|
+
if (!res.ok) {
|
|
6437
|
+
throw new Error(`Auth0 token request failed (${res.status}): ${text}`);
|
|
6438
|
+
}
|
|
6439
|
+
const data = JSON.parse(text);
|
|
6440
|
+
if (!data.access_token) {
|
|
6441
|
+
throw new Error("Auth0 token response missing access_token");
|
|
6442
|
+
}
|
|
6443
|
+
return data;
|
|
6444
|
+
}
|
|
6445
|
+
function auth0Integration(options) {
|
|
6446
|
+
const domain = normalizeAuth0Domain(options.domain);
|
|
6447
|
+
if (!domain) {
|
|
6448
|
+
throw new Error("auth0Integration requires domain (tenant host)");
|
|
6449
|
+
}
|
|
6450
|
+
const clientId = options.clientId ?? getEnv("AUTH0_CLIENT_ID");
|
|
6451
|
+
const clientSecret = options.clientSecret ?? getEnv("AUTH0_CLIENT_SECRET");
|
|
6452
|
+
const initialToken = options.accessToken ?? getEnv("AUTH0_ACCESS_TOKEN") ?? "";
|
|
6453
|
+
if (!initialToken && (!clientId || !clientSecret)) {
|
|
6454
|
+
throw new Error("auth0Integration requires accessToken (or AUTH0_ACCESS_TOKEN) or both clientId/clientSecret (or AUTH0_CLIENT_ID / AUTH0_CLIENT_SECRET)");
|
|
6455
|
+
}
|
|
6456
|
+
let accessToken = initialToken;
|
|
6457
|
+
let tokenExpiresAtMs = 0;
|
|
6458
|
+
async function ensureFreshToken() {
|
|
6459
|
+
if (!clientId || !clientSecret)
|
|
6460
|
+
return;
|
|
6461
|
+
if (accessToken && Date.now() < tokenExpiresAtMs - 60000)
|
|
6462
|
+
return;
|
|
6463
|
+
const audience = options.audience?.trim() || `https://${domain}/api/v2/`;
|
|
6464
|
+
const tok = await fetchClientCredentialsToken({
|
|
6465
|
+
domain,
|
|
6466
|
+
clientId,
|
|
6467
|
+
clientSecret,
|
|
6468
|
+
audience
|
|
6469
|
+
});
|
|
6470
|
+
accessToken = tok.access_token;
|
|
6471
|
+
const sec = typeof tok.expires_in === "number" && tok.expires_in > 0 ? tok.expires_in : 86400;
|
|
6472
|
+
tokenExpiresAtMs = Date.now() + sec * 1000;
|
|
6473
|
+
}
|
|
6474
|
+
return {
|
|
6475
|
+
id: "auth0",
|
|
6476
|
+
name: "Auth0",
|
|
6477
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/auth0.png",
|
|
6478
|
+
description: "Manage Auth0 users, connections, and applications via the Management API",
|
|
6479
|
+
category: "Engineering",
|
|
6480
|
+
tools: [...AUTH0_TOOLS],
|
|
6481
|
+
authType: "apiKey",
|
|
6482
|
+
getHeaders() {
|
|
6483
|
+
return {
|
|
6484
|
+
Authorization: `Bearer ${accessToken}`,
|
|
6485
|
+
"X-Auth0-Domain": domain
|
|
6486
|
+
};
|
|
6487
|
+
},
|
|
6488
|
+
async onInit() {
|
|
6489
|
+
logger26.debug("Auth0 integration initialized");
|
|
6490
|
+
},
|
|
6491
|
+
async onBeforeConnect() {
|
|
6492
|
+
await ensureFreshToken();
|
|
6493
|
+
if (!accessToken) {
|
|
6494
|
+
throw new Error("Auth0 access token is not configured");
|
|
6495
|
+
}
|
|
6496
|
+
},
|
|
6497
|
+
async onAfterConnect() {
|
|
6498
|
+
logger26.debug("Auth0 integration connected");
|
|
6499
|
+
}
|
|
6500
|
+
};
|
|
6501
|
+
}
|
|
6502
|
+
// src/integrations/astronomer.ts
|
|
6503
|
+
init_logger();
|
|
6504
|
+
var logger27 = createLogger("Astronomer");
|
|
6505
|
+
var ASTRONOMER_TOOLS = [
|
|
6506
|
+
"astronomer_get_self",
|
|
6507
|
+
"astronomer_list_organizations",
|
|
6508
|
+
"astronomer_get_organization",
|
|
6509
|
+
"astronomer_list_workspaces",
|
|
6510
|
+
"astronomer_get_workspace",
|
|
6511
|
+
"astronomer_list_clusters",
|
|
6512
|
+
"astronomer_get_cluster",
|
|
6513
|
+
"astronomer_list_deployments",
|
|
6514
|
+
"astronomer_get_deployment",
|
|
6515
|
+
"astronomer_create_deployment",
|
|
6516
|
+
"astronomer_update_deployment",
|
|
6517
|
+
"astronomer_list_deploys",
|
|
6518
|
+
"astronomer_get_deploy"
|
|
6519
|
+
];
|
|
6520
|
+
function astronomerIntegration(options = {}) {
|
|
6521
|
+
const apiToken = options.apiToken ?? getEnv("ASTRO_API_TOKEN") ?? getEnv("ASTRONOMER_API_TOKEN");
|
|
6522
|
+
if (!apiToken) {
|
|
6523
|
+
throw new Error("astronomerIntegration requires apiToken or ASTRO_API_TOKEN / ASTRONOMER_API_TOKEN environment variable");
|
|
6524
|
+
}
|
|
6525
|
+
return {
|
|
6526
|
+
id: "astronomer",
|
|
6527
|
+
name: "Astronomer",
|
|
6528
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/astronomer.png",
|
|
6529
|
+
description: "Manage Astro organizations, workspaces, deployments, clusters, and deploy history via the Astro API v1",
|
|
6530
|
+
category: "Infrastructure",
|
|
6531
|
+
tools: [...ASTRONOMER_TOOLS],
|
|
6532
|
+
authType: "apiKey",
|
|
6533
|
+
getHeaders() {
|
|
6534
|
+
return {
|
|
6535
|
+
Authorization: `Bearer ${apiToken}`
|
|
6536
|
+
};
|
|
6537
|
+
},
|
|
6538
|
+
async onInit(_client) {
|
|
6539
|
+
logger27.debug("Astronomer integration initialized");
|
|
6540
|
+
},
|
|
6541
|
+
async onAfterConnect(_client) {
|
|
6542
|
+
logger27.debug("Astronomer integration connected");
|
|
6543
|
+
}
|
|
6544
|
+
};
|
|
6545
|
+
}
|
|
6546
|
+
// src/integrations/betterstack.ts
|
|
6547
|
+
init_logger();
|
|
6548
|
+
var logger28 = createLogger("BetterStack");
|
|
6549
|
+
var BETTERSTACK_TOOLS = [
|
|
6550
|
+
"betterstack_list_sources",
|
|
6551
|
+
"betterstack_get_source",
|
|
6552
|
+
"betterstack_create_source",
|
|
6553
|
+
"betterstack_update_source",
|
|
6554
|
+
"betterstack_delete_source",
|
|
6555
|
+
"betterstack_list_source_groups",
|
|
6556
|
+
"betterstack_get_source_group",
|
|
6557
|
+
"betterstack_update_source_group",
|
|
6558
|
+
"betterstack_list_collectors",
|
|
6559
|
+
"betterstack_list_source_metrics",
|
|
6560
|
+
"betterstack_ingest_logs"
|
|
6561
|
+
];
|
|
6562
|
+
function betterstackIntegration(options = {}) {
|
|
6563
|
+
const apiKey = options.apiKey ?? getEnv("BETTERSTACK_API_KEY");
|
|
6564
|
+
if (!apiKey) {
|
|
6565
|
+
throw new Error("betterstackIntegration requires apiKey or BETTERSTACK_API_KEY environment variable");
|
|
6566
|
+
}
|
|
6567
|
+
return {
|
|
6568
|
+
id: "betterstack",
|
|
6569
|
+
name: "Better Stack",
|
|
6570
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/betterstack.png",
|
|
6571
|
+
description: "Ingest and manage log sources, collectors, and metrics with Better Stack Logs (Logtail) Telemetry API",
|
|
6572
|
+
category: "Infrastructure",
|
|
6573
|
+
tools: [...BETTERSTACK_TOOLS],
|
|
6574
|
+
authType: "apiKey",
|
|
6575
|
+
getHeaders() {
|
|
6576
|
+
return {
|
|
6577
|
+
Authorization: `Bearer ${apiKey}`
|
|
6578
|
+
};
|
|
6579
|
+
},
|
|
6580
|
+
async onInit(_client) {
|
|
6581
|
+
logger28.debug("Better Stack integration initialized");
|
|
5719
6582
|
},
|
|
5720
6583
|
async onAfterConnect(_client) {
|
|
5721
|
-
|
|
6584
|
+
logger28.debug("Better Stack integration connected");
|
|
5722
6585
|
}
|
|
5723
6586
|
};
|
|
5724
6587
|
}
|
|
5725
6588
|
// src/integrations/todoist.ts
|
|
5726
6589
|
init_logger();
|
|
5727
|
-
var
|
|
6590
|
+
var logger29 = createLogger("Todoist");
|
|
5728
6591
|
var TODOIST_TOOLS = [
|
|
5729
6592
|
"todoist_list_projects",
|
|
5730
6593
|
"todoist_get_project",
|
|
@@ -5779,16 +6642,16 @@ function todoistIntegration(config = {}) {
|
|
|
5779
6642
|
tools: [...TODOIST_TOOLS],
|
|
5780
6643
|
oauth,
|
|
5781
6644
|
async onInit(_client) {
|
|
5782
|
-
|
|
6645
|
+
logger29.debug("Todoist integration initialized");
|
|
5783
6646
|
},
|
|
5784
6647
|
async onAfterConnect(_client) {
|
|
5785
|
-
|
|
6648
|
+
logger29.debug("Todoist integration connected");
|
|
5786
6649
|
}
|
|
5787
6650
|
};
|
|
5788
6651
|
}
|
|
5789
6652
|
// src/integrations/whatsapp.ts
|
|
5790
6653
|
init_logger();
|
|
5791
|
-
var
|
|
6654
|
+
var logger30 = createLogger("WhatsApp");
|
|
5792
6655
|
var WHATSAPP_TOOLS = [
|
|
5793
6656
|
"whatsapp_send_message",
|
|
5794
6657
|
"whatsapp_reply_message",
|
|
@@ -5812,7 +6675,10 @@ var WHATSAPP_TOOLS = [
|
|
|
5812
6675
|
"whatsapp_update_profile",
|
|
5813
6676
|
"whatsapp_get_message_status",
|
|
5814
6677
|
"whatsapp_create_qr_code",
|
|
5815
|
-
"
|
|
6678
|
+
"whatsapp_update_qr_code",
|
|
6679
|
+
"whatsapp_list_qr_codes",
|
|
6680
|
+
"whatsapp_get_qr_code",
|
|
6681
|
+
"whatsapp_delete_qr_code"
|
|
5816
6682
|
];
|
|
5817
6683
|
function whatsappIntegration(config = {}) {
|
|
5818
6684
|
const oauth = {
|
|
@@ -5834,16 +6700,16 @@ function whatsappIntegration(config = {}) {
|
|
|
5834
6700
|
tools: [...WHATSAPP_TOOLS],
|
|
5835
6701
|
oauth,
|
|
5836
6702
|
async onInit(_client) {
|
|
5837
|
-
|
|
6703
|
+
logger30.debug("WhatsApp Business integration initialized");
|
|
5838
6704
|
},
|
|
5839
6705
|
async onAfterConnect(_client) {
|
|
5840
|
-
|
|
6706
|
+
logger30.debug("WhatsApp Business integration connected");
|
|
5841
6707
|
}
|
|
5842
6708
|
};
|
|
5843
6709
|
}
|
|
5844
6710
|
// src/integrations/calcom.ts
|
|
5845
6711
|
init_logger();
|
|
5846
|
-
var
|
|
6712
|
+
var logger31 = createLogger("Cal.com");
|
|
5847
6713
|
var CALCOM_TOOLS = [
|
|
5848
6714
|
"calcom_list_bookings",
|
|
5849
6715
|
"calcom_get_booking",
|
|
@@ -5919,16 +6785,16 @@ function calcomIntegration(config = {}) {
|
|
|
5919
6785
|
tools: [...CALCOM_TOOLS],
|
|
5920
6786
|
oauth,
|
|
5921
6787
|
async onInit(_client) {
|
|
5922
|
-
|
|
6788
|
+
logger31.debug("Cal.com integration initialized");
|
|
5923
6789
|
},
|
|
5924
6790
|
async onAfterConnect(_client) {
|
|
5925
|
-
|
|
6791
|
+
logger31.debug("Cal.com integration connected");
|
|
5926
6792
|
}
|
|
5927
6793
|
};
|
|
5928
6794
|
}
|
|
5929
6795
|
// src/integrations/ramp.ts
|
|
5930
6796
|
init_logger();
|
|
5931
|
-
var
|
|
6797
|
+
var logger32 = createLogger("Ramp");
|
|
5932
6798
|
var RAMP_TOOLS = [
|
|
5933
6799
|
"ramp_list_transactions",
|
|
5934
6800
|
"ramp_get_transaction",
|
|
@@ -5960,24 +6826,27 @@ function rampIntegration(config = {}) {
|
|
|
5960
6826
|
tools: [...RAMP_TOOLS],
|
|
5961
6827
|
oauth,
|
|
5962
6828
|
async onInit(_client) {
|
|
5963
|
-
|
|
6829
|
+
logger32.debug("Ramp integration initialized");
|
|
5964
6830
|
},
|
|
5965
6831
|
async onAfterConnect(_client) {
|
|
5966
|
-
|
|
6832
|
+
logger32.debug("Ramp integration connected");
|
|
5967
6833
|
}
|
|
5968
6834
|
};
|
|
5969
6835
|
}
|
|
5970
6836
|
// src/integrations/onedrive.ts
|
|
5971
6837
|
init_logger();
|
|
5972
|
-
var
|
|
6838
|
+
var logger33 = createLogger("OneDrive");
|
|
5973
6839
|
var ONEDRIVE_TOOLS = [
|
|
5974
|
-
"
|
|
5975
|
-
"onedrive_get_file",
|
|
5976
|
-
"onedrive_download_file",
|
|
5977
|
-
"onedrive_upload_file",
|
|
6840
|
+
"onedrive_create_folder",
|
|
5978
6841
|
"onedrive_delete_file",
|
|
6842
|
+
"onedrive_download_file",
|
|
6843
|
+
"onedrive_get_file",
|
|
6844
|
+
"onedrive_list_files",
|
|
6845
|
+
"onedrive_list_permissions",
|
|
6846
|
+
"onedrive_remove_permission",
|
|
5979
6847
|
"onedrive_search_files",
|
|
5980
|
-
"onedrive_share_file"
|
|
6848
|
+
"onedrive_share_file",
|
|
6849
|
+
"onedrive_upload_file"
|
|
5981
6850
|
];
|
|
5982
6851
|
function onedriveIntegration(config = {}) {
|
|
5983
6852
|
const oauth = {
|
|
@@ -5998,16 +6867,96 @@ function onedriveIntegration(config = {}) {
|
|
|
5998
6867
|
tools: [...ONEDRIVE_TOOLS],
|
|
5999
6868
|
oauth,
|
|
6000
6869
|
async onInit(_client) {
|
|
6001
|
-
|
|
6870
|
+
logger33.debug("OneDrive integration initialized");
|
|
6871
|
+
},
|
|
6872
|
+
async onAfterConnect(_client) {
|
|
6873
|
+
logger33.debug("OneDrive integration connected");
|
|
6874
|
+
}
|
|
6875
|
+
};
|
|
6876
|
+
}
|
|
6877
|
+
// src/integrations/planner.ts
|
|
6878
|
+
var PLANNER_TOOLS = [
|
|
6879
|
+
"planner_create_bucket",
|
|
6880
|
+
"planner_create_plan",
|
|
6881
|
+
"planner_create_task",
|
|
6882
|
+
"planner_delete_task",
|
|
6883
|
+
"planner_get_plan",
|
|
6884
|
+
"planner_get_task",
|
|
6885
|
+
"planner_get_task_details",
|
|
6886
|
+
"planner_list_buckets",
|
|
6887
|
+
"planner_list_group_plans",
|
|
6888
|
+
"planner_list_my_plans",
|
|
6889
|
+
"planner_list_my_tasks",
|
|
6890
|
+
"planner_list_plan_tasks",
|
|
6891
|
+
"planner_update_task"
|
|
6892
|
+
];
|
|
6893
|
+
function plannerIntegration(config = {}) {
|
|
6894
|
+
const oauth = {
|
|
6895
|
+
provider: "planner",
|
|
6896
|
+
clientId: config.clientId ?? getEnv("PLANNER_CLIENT_ID"),
|
|
6897
|
+
clientSecret: config.clientSecret ?? getEnv("PLANNER_CLIENT_SECRET"),
|
|
6898
|
+
scopes: config.scopes ?? ["Tasks.ReadWrite", "Group.Read.All", "offline_access"],
|
|
6899
|
+
optionalScopes: config.optionalScopes,
|
|
6900
|
+
redirectUri: config.redirectUri
|
|
6901
|
+
};
|
|
6902
|
+
return {
|
|
6903
|
+
id: "planner",
|
|
6904
|
+
name: "Microsoft Planner",
|
|
6905
|
+
tools: [...PLANNER_TOOLS],
|
|
6906
|
+
oauth
|
|
6907
|
+
};
|
|
6908
|
+
}
|
|
6909
|
+
// src/integrations/sharepoint.ts
|
|
6910
|
+
init_logger();
|
|
6911
|
+
var logger34 = createLogger("SharePoint");
|
|
6912
|
+
var SHAREPOINT_SCOPES = ["Sites.ReadWrite.All", "Files.ReadWrite.All", "offline_access"];
|
|
6913
|
+
var SHAREPOINT_TOOLS = [
|
|
6914
|
+
"sharepoint_create_folder",
|
|
6915
|
+
"sharepoint_delete_item",
|
|
6916
|
+
"sharepoint_get_item",
|
|
6917
|
+
"sharepoint_get_site",
|
|
6918
|
+
"sharepoint_list_drives",
|
|
6919
|
+
"sharepoint_list_items",
|
|
6920
|
+
"sharepoint_search_files",
|
|
6921
|
+
"sharepoint_search_sites",
|
|
6922
|
+
"sharepoint_share_item",
|
|
6923
|
+
"sharepoint_update_item",
|
|
6924
|
+
"sharepoint_upload_file"
|
|
6925
|
+
];
|
|
6926
|
+
function sharepointIntegration(config = {}) {
|
|
6927
|
+
const oauth = {
|
|
6928
|
+
provider: "sharepoint",
|
|
6929
|
+
clientId: config.clientId ?? getEnv("SHAREPOINT_CLIENT_ID"),
|
|
6930
|
+
clientSecret: config.clientSecret ?? getEnv("SHAREPOINT_CLIENT_SECRET"),
|
|
6931
|
+
scopes: config.scopes ?? [...SHAREPOINT_SCOPES],
|
|
6932
|
+
optionalScopes: config.optionalScopes,
|
|
6933
|
+
redirectUri: config.redirectUri,
|
|
6934
|
+
config: {
|
|
6935
|
+
authorization_endpoint: "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
|
|
6936
|
+
token_endpoint: "https://login.microsoftonline.com/common/oauth2/v2.0/token",
|
|
6937
|
+
response_type: "code",
|
|
6938
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
6939
|
+
}
|
|
6940
|
+
};
|
|
6941
|
+
return {
|
|
6942
|
+
id: "sharepoint",
|
|
6943
|
+
name: "SharePoint",
|
|
6944
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/sharepoint.png",
|
|
6945
|
+
description: "Search SharePoint sites and manage drives, files, folders, and sharing links",
|
|
6946
|
+
category: "Productivity",
|
|
6947
|
+
tools: [...SHAREPOINT_TOOLS],
|
|
6948
|
+
oauth,
|
|
6949
|
+
async onInit(_client) {
|
|
6950
|
+
logger34.debug("SharePoint integration initialized");
|
|
6002
6951
|
},
|
|
6003
6952
|
async onAfterConnect(_client) {
|
|
6004
|
-
|
|
6953
|
+
logger34.debug("SharePoint integration connected");
|
|
6005
6954
|
}
|
|
6006
6955
|
};
|
|
6007
6956
|
}
|
|
6008
6957
|
// src/integrations/dropbox.ts
|
|
6009
6958
|
init_logger();
|
|
6010
|
-
var
|
|
6959
|
+
var logger35 = createLogger("Dropbox");
|
|
6011
6960
|
var DROPBOX_TOOLS = [
|
|
6012
6961
|
"dropbox_get_current_account",
|
|
6013
6962
|
"dropbox_get_space_usage",
|
|
@@ -6049,23 +6998,79 @@ function dropboxIntegration(options = {}) {
|
|
|
6049
6998
|
authType: "oauth",
|
|
6050
6999
|
oauth,
|
|
6051
7000
|
async onInit(_client) {
|
|
6052
|
-
|
|
7001
|
+
logger35.debug("Dropbox integration initialized");
|
|
7002
|
+
},
|
|
7003
|
+
async onAfterConnect(_client) {
|
|
7004
|
+
logger35.debug("Dropbox integration connected");
|
|
7005
|
+
}
|
|
7006
|
+
};
|
|
7007
|
+
}
|
|
7008
|
+
// src/integrations/paper.ts
|
|
7009
|
+
init_logger();
|
|
7010
|
+
var logger36 = createLogger("Paper");
|
|
7011
|
+
var PAPER_SCOPES = [
|
|
7012
|
+
"account_info.read",
|
|
7013
|
+
"files.metadata.read",
|
|
7014
|
+
"files.content.read",
|
|
7015
|
+
"files.content.write"
|
|
7016
|
+
];
|
|
7017
|
+
var PAPER_TOOLS = [
|
|
7018
|
+
"paper_create_doc",
|
|
7019
|
+
"paper_update_doc",
|
|
7020
|
+
"paper_export_doc"
|
|
7021
|
+
];
|
|
7022
|
+
function resolveClientId(config) {
|
|
7023
|
+
return config.clientId ?? getEnv("PAPER_CLIENT_ID") ?? getEnv("DROPBOX_CLIENT_ID");
|
|
7024
|
+
}
|
|
7025
|
+
function resolveClientSecret(config) {
|
|
7026
|
+
return config.clientSecret ?? getEnv("PAPER_CLIENT_SECRET") ?? getEnv("DROPBOX_CLIENT_SECRET");
|
|
7027
|
+
}
|
|
7028
|
+
function paperIntegration(config = {}) {
|
|
7029
|
+
if (config.scopes !== undefined && (!Array.isArray(config.scopes) || config.scopes.some((scope) => typeof scope !== "string"))) {
|
|
7030
|
+
throw new Error("paperIntegration scopes must be an array of strings");
|
|
7031
|
+
}
|
|
7032
|
+
const oauth = {
|
|
7033
|
+
provider: "paper",
|
|
7034
|
+
clientId: resolveClientId(config),
|
|
7035
|
+
clientSecret: resolveClientSecret(config),
|
|
7036
|
+
scopes: config.scopes ?? [...PAPER_SCOPES],
|
|
7037
|
+
optionalScopes: config.optionalScopes,
|
|
7038
|
+
redirectUri: config.redirectUri,
|
|
7039
|
+
config: {
|
|
7040
|
+
authorization_endpoint: "https://www.dropbox.com/oauth2/authorize",
|
|
7041
|
+
token_endpoint: "https://api.dropboxapi.com/oauth2/token",
|
|
7042
|
+
response_type: "code",
|
|
7043
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
7044
|
+
}
|
|
7045
|
+
};
|
|
7046
|
+
return {
|
|
7047
|
+
id: "paper",
|
|
7048
|
+
name: "Dropbox Paper",
|
|
7049
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/paper.png",
|
|
7050
|
+
description: "Create, update, and export Dropbox Paper documents",
|
|
7051
|
+
category: "Productivity",
|
|
7052
|
+
tools: [...PAPER_TOOLS],
|
|
7053
|
+
authType: "oauth",
|
|
7054
|
+
oauth,
|
|
7055
|
+
async onInit(_client) {
|
|
7056
|
+
logger36.debug("Paper integration initialized");
|
|
6053
7057
|
},
|
|
6054
7058
|
async onAfterConnect(_client) {
|
|
6055
|
-
|
|
7059
|
+
logger36.debug("Paper integration connected");
|
|
6056
7060
|
}
|
|
6057
7061
|
};
|
|
6058
7062
|
}
|
|
6059
7063
|
// src/integrations/word.ts
|
|
6060
7064
|
init_logger();
|
|
6061
|
-
var
|
|
7065
|
+
var logger37 = createLogger("Word");
|
|
6062
7066
|
var WORD_TOOLS = [
|
|
6063
|
-
"word_list",
|
|
6064
|
-
"word_get",
|
|
6065
|
-
"word_create",
|
|
6066
7067
|
"word_copy",
|
|
7068
|
+
"word_create",
|
|
6067
7069
|
"word_delete",
|
|
6068
|
-
"
|
|
7070
|
+
"word_get",
|
|
7071
|
+
"word_list",
|
|
7072
|
+
"word_share",
|
|
7073
|
+
"word_update_content"
|
|
6069
7074
|
];
|
|
6070
7075
|
function wordIntegration(config = {}) {
|
|
6071
7076
|
const oauth = {
|
|
@@ -6084,33 +7089,33 @@ function wordIntegration(config = {}) {
|
|
|
6084
7089
|
tools: [...WORD_TOOLS],
|
|
6085
7090
|
oauth,
|
|
6086
7091
|
async onInit(_client) {
|
|
6087
|
-
|
|
7092
|
+
logger37.debug("Word integration initialized");
|
|
6088
7093
|
},
|
|
6089
7094
|
async onAfterConnect(_client) {
|
|
6090
|
-
|
|
7095
|
+
logger37.debug("Word integration connected");
|
|
6091
7096
|
}
|
|
6092
7097
|
};
|
|
6093
7098
|
}
|
|
6094
7099
|
// src/integrations/excel.ts
|
|
6095
7100
|
init_logger();
|
|
6096
|
-
var
|
|
7101
|
+
var logger38 = createLogger("Excel");
|
|
6097
7102
|
var EXCEL_TOOLS = [
|
|
6098
|
-
"
|
|
6099
|
-
"
|
|
7103
|
+
"excel_add_table_rows",
|
|
7104
|
+
"excel_add_worksheet",
|
|
7105
|
+
"excel_clear_range",
|
|
6100
7106
|
"excel_create",
|
|
7107
|
+
"excel_create_table",
|
|
6101
7108
|
"excel_delete",
|
|
6102
|
-
"excel_share",
|
|
6103
|
-
"excel_list_worksheets",
|
|
6104
|
-
"excel_add_worksheet",
|
|
6105
7109
|
"excel_delete_worksheet",
|
|
7110
|
+
"excel_get",
|
|
6106
7111
|
"excel_get_range",
|
|
6107
|
-
"
|
|
6108
|
-
"excel_clear_range",
|
|
7112
|
+
"excel_get_table_rows",
|
|
6109
7113
|
"excel_get_used_range",
|
|
7114
|
+
"excel_list",
|
|
6110
7115
|
"excel_list_tables",
|
|
6111
|
-
"
|
|
6112
|
-
"
|
|
6113
|
-
"
|
|
7116
|
+
"excel_list_worksheets",
|
|
7117
|
+
"excel_share",
|
|
7118
|
+
"excel_update_range"
|
|
6114
7119
|
];
|
|
6115
7120
|
function excelIntegration(config = {}) {
|
|
6116
7121
|
const oauth = {
|
|
@@ -6129,23 +7134,24 @@ function excelIntegration(config = {}) {
|
|
|
6129
7134
|
tools: [...EXCEL_TOOLS],
|
|
6130
7135
|
oauth,
|
|
6131
7136
|
async onInit(_client) {
|
|
6132
|
-
|
|
7137
|
+
logger38.debug("Excel integration initialized");
|
|
6133
7138
|
},
|
|
6134
7139
|
async onAfterConnect(_client) {
|
|
6135
|
-
|
|
7140
|
+
logger38.debug("Excel integration connected");
|
|
6136
7141
|
}
|
|
6137
7142
|
};
|
|
6138
7143
|
}
|
|
6139
7144
|
// src/integrations/powerpoint.ts
|
|
6140
7145
|
init_logger();
|
|
6141
|
-
var
|
|
7146
|
+
var logger39 = createLogger("PowerPoint");
|
|
6142
7147
|
var POWERPOINT_TOOLS = [
|
|
6143
|
-
"powerpoint_list",
|
|
6144
|
-
"powerpoint_get",
|
|
6145
|
-
"powerpoint_create",
|
|
6146
7148
|
"powerpoint_copy",
|
|
7149
|
+
"powerpoint_create",
|
|
6147
7150
|
"powerpoint_delete",
|
|
6148
|
-
"
|
|
7151
|
+
"powerpoint_get",
|
|
7152
|
+
"powerpoint_list",
|
|
7153
|
+
"powerpoint_share",
|
|
7154
|
+
"powerpoint_update_content"
|
|
6149
7155
|
];
|
|
6150
7156
|
function powerpointIntegration(config = {}) {
|
|
6151
7157
|
const oauth = {
|
|
@@ -6164,21 +7170,26 @@ function powerpointIntegration(config = {}) {
|
|
|
6164
7170
|
tools: [...POWERPOINT_TOOLS],
|
|
6165
7171
|
oauth,
|
|
6166
7172
|
async onInit(_client) {
|
|
6167
|
-
|
|
7173
|
+
logger39.debug("PowerPoint integration initialized");
|
|
6168
7174
|
},
|
|
6169
7175
|
async onAfterConnect(_client) {
|
|
6170
|
-
|
|
7176
|
+
logger39.debug("PowerPoint integration connected");
|
|
6171
7177
|
}
|
|
6172
7178
|
};
|
|
6173
7179
|
}
|
|
6174
7180
|
// src/integrations/gdocs.ts
|
|
6175
7181
|
init_logger();
|
|
6176
|
-
var
|
|
7182
|
+
var logger40 = createLogger("Google Docs");
|
|
6177
7183
|
var GDOCS_TOOLS = [
|
|
6178
|
-
"gdocs_list",
|
|
6179
|
-
"gdocs_get",
|
|
6180
|
-
"gdocs_create",
|
|
6181
7184
|
"gdocs_append_text",
|
|
7185
|
+
"gdocs_batch_update",
|
|
7186
|
+
"gdocs_create",
|
|
7187
|
+
"gdocs_create_comment",
|
|
7188
|
+
"gdocs_delete",
|
|
7189
|
+
"gdocs_delete_comment",
|
|
7190
|
+
"gdocs_get",
|
|
7191
|
+
"gdocs_list",
|
|
7192
|
+
"gdocs_list_comments",
|
|
6182
7193
|
"gdocs_replace_text"
|
|
6183
7194
|
];
|
|
6184
7195
|
function gdocsIntegration(config = {}) {
|
|
@@ -6198,31 +7209,31 @@ function gdocsIntegration(config = {}) {
|
|
|
6198
7209
|
tools: [...GDOCS_TOOLS],
|
|
6199
7210
|
oauth,
|
|
6200
7211
|
async onInit(_client) {
|
|
6201
|
-
|
|
7212
|
+
logger40.debug("Google Docs integration initialized");
|
|
6202
7213
|
},
|
|
6203
7214
|
async onAfterConnect(_client) {
|
|
6204
|
-
|
|
7215
|
+
logger40.debug("Google Docs integration connected");
|
|
6205
7216
|
}
|
|
6206
7217
|
};
|
|
6207
7218
|
}
|
|
6208
7219
|
// src/integrations/gdrive.ts
|
|
6209
7220
|
init_logger();
|
|
6210
|
-
var
|
|
7221
|
+
var logger41 = createLogger("Google Drive");
|
|
6211
7222
|
var GDRIVE_TOOLS = [
|
|
6212
|
-
"gdrive_list_files",
|
|
6213
|
-
"gdrive_get_file",
|
|
6214
|
-
"gdrive_create_folder",
|
|
6215
|
-
"gdrive_rename_file",
|
|
6216
|
-
"gdrive_move_file",
|
|
6217
7223
|
"gdrive_copy_file",
|
|
7224
|
+
"gdrive_create_folder",
|
|
6218
7225
|
"gdrive_delete_file",
|
|
6219
|
-
"gdrive_trash_file",
|
|
6220
|
-
"gdrive_upload_text_file",
|
|
6221
7226
|
"gdrive_download_file",
|
|
7227
|
+
"gdrive_get_about",
|
|
7228
|
+
"gdrive_get_file",
|
|
7229
|
+
"gdrive_list_files",
|
|
6222
7230
|
"gdrive_list_permissions",
|
|
6223
|
-
"
|
|
7231
|
+
"gdrive_move_file",
|
|
6224
7232
|
"gdrive_remove_permission",
|
|
6225
|
-
"
|
|
7233
|
+
"gdrive_rename_file",
|
|
7234
|
+
"gdrive_share_file",
|
|
7235
|
+
"gdrive_trash_file",
|
|
7236
|
+
"gdrive_upload_text_file"
|
|
6226
7237
|
];
|
|
6227
7238
|
function gdriveIntegration(config = {}) {
|
|
6228
7239
|
const oauth = {
|
|
@@ -6241,25 +7252,27 @@ function gdriveIntegration(config = {}) {
|
|
|
6241
7252
|
tools: [...GDRIVE_TOOLS],
|
|
6242
7253
|
oauth,
|
|
6243
7254
|
async onInit(_client) {
|
|
6244
|
-
|
|
7255
|
+
logger41.debug("Google Drive integration initialized");
|
|
6245
7256
|
},
|
|
6246
7257
|
async onAfterConnect(_client) {
|
|
6247
|
-
|
|
7258
|
+
logger41.debug("Google Drive integration connected");
|
|
6248
7259
|
}
|
|
6249
7260
|
};
|
|
6250
7261
|
}
|
|
6251
7262
|
// src/integrations/gsheets.ts
|
|
6252
7263
|
init_logger();
|
|
6253
|
-
var
|
|
7264
|
+
var logger42 = createLogger("Google Sheets");
|
|
6254
7265
|
var GSHEETS_TOOLS = [
|
|
6255
|
-
"gsheets_list",
|
|
6256
|
-
"gsheets_get",
|
|
6257
|
-
"gsheets_get_values",
|
|
6258
|
-
"gsheets_update_values",
|
|
6259
|
-
"gsheets_create",
|
|
6260
7266
|
"gsheets_append_values",
|
|
7267
|
+
"gsheets_batch_update",
|
|
7268
|
+
"gsheets_batch_update_values",
|
|
6261
7269
|
"gsheets_clear_values",
|
|
6262
|
-
"
|
|
7270
|
+
"gsheets_create",
|
|
7271
|
+
"gsheets_delete",
|
|
7272
|
+
"gsheets_get",
|
|
7273
|
+
"gsheets_get_values",
|
|
7274
|
+
"gsheets_list",
|
|
7275
|
+
"gsheets_update_values"
|
|
6263
7276
|
];
|
|
6264
7277
|
function gsheetsIntegration(config = {}) {
|
|
6265
7278
|
const oauth = {
|
|
@@ -6278,23 +7291,25 @@ function gsheetsIntegration(config = {}) {
|
|
|
6278
7291
|
tools: [...GSHEETS_TOOLS],
|
|
6279
7292
|
oauth,
|
|
6280
7293
|
async onInit(_client) {
|
|
6281
|
-
|
|
7294
|
+
logger42.debug("Google Sheets integration initialized");
|
|
6282
7295
|
},
|
|
6283
7296
|
async onAfterConnect(_client) {
|
|
6284
|
-
|
|
7297
|
+
logger42.debug("Google Sheets integration connected");
|
|
6285
7298
|
}
|
|
6286
7299
|
};
|
|
6287
7300
|
}
|
|
6288
7301
|
// src/integrations/gslides.ts
|
|
6289
7302
|
init_logger();
|
|
6290
|
-
var
|
|
7303
|
+
var logger43 = createLogger("Google Slides");
|
|
6291
7304
|
var GSLIDES_TOOLS = [
|
|
6292
|
-
"gslides_list",
|
|
6293
|
-
"gslides_get",
|
|
6294
|
-
"gslides_get_page",
|
|
6295
|
-
"gslides_create",
|
|
6296
7305
|
"gslides_add_slide",
|
|
7306
|
+
"gslides_batch_update",
|
|
7307
|
+
"gslides_create",
|
|
7308
|
+
"gslides_delete",
|
|
6297
7309
|
"gslides_delete_slide",
|
|
7310
|
+
"gslides_get",
|
|
7311
|
+
"gslides_get_page",
|
|
7312
|
+
"gslides_list",
|
|
6298
7313
|
"gslides_update_text"
|
|
6299
7314
|
];
|
|
6300
7315
|
function gslidesIntegration(config = {}) {
|
|
@@ -6314,16 +7329,16 @@ function gslidesIntegration(config = {}) {
|
|
|
6314
7329
|
tools: [...GSLIDES_TOOLS],
|
|
6315
7330
|
oauth,
|
|
6316
7331
|
async onInit(_client) {
|
|
6317
|
-
|
|
7332
|
+
logger43.debug("Google Slides integration initialized");
|
|
6318
7333
|
},
|
|
6319
7334
|
async onAfterConnect(_client) {
|
|
6320
|
-
|
|
7335
|
+
logger43.debug("Google Slides integration connected");
|
|
6321
7336
|
}
|
|
6322
7337
|
};
|
|
6323
7338
|
}
|
|
6324
7339
|
// src/integrations/polar.ts
|
|
6325
7340
|
init_logger();
|
|
6326
|
-
var
|
|
7341
|
+
var logger44 = createLogger("Polar");
|
|
6327
7342
|
var POLAR_TOOLS = [
|
|
6328
7343
|
"polar_list_products",
|
|
6329
7344
|
"polar_get_product",
|
|
@@ -6380,16 +7395,47 @@ function polarIntegration(config = {}) {
|
|
|
6380
7395
|
tools: [...POLAR_TOOLS],
|
|
6381
7396
|
oauth,
|
|
6382
7397
|
async onInit(_client) {
|
|
6383
|
-
|
|
7398
|
+
logger44.debug("Polar integration initialized");
|
|
7399
|
+
},
|
|
7400
|
+
async onAfterConnect(_client) {
|
|
7401
|
+
logger44.debug("Polar integration connected");
|
|
7402
|
+
}
|
|
7403
|
+
};
|
|
7404
|
+
}
|
|
7405
|
+
// src/integrations/phantom.ts
|
|
7406
|
+
init_logger();
|
|
7407
|
+
var logger45 = createLogger("Phantom");
|
|
7408
|
+
var PHANTOM_TOOLS = [
|
|
7409
|
+
"phantom_build_browse_deeplink",
|
|
7410
|
+
"phantom_deeplink_provider_reference"
|
|
7411
|
+
];
|
|
7412
|
+
function buildPhantomBrowseDeeplink(params) {
|
|
7413
|
+
const target = new URL(params.url);
|
|
7414
|
+
const ref = new URL(params.ref);
|
|
7415
|
+
if (target.protocol !== "https:" || ref.protocol !== "https:") {
|
|
7416
|
+
throw new Error("Phantom browse deeplinks require https url and ref values");
|
|
7417
|
+
}
|
|
7418
|
+
return `https://phantom.app/ul/browse/${encodeURIComponent(target.toString())}?ref=${encodeURIComponent(ref.toString())}`;
|
|
7419
|
+
}
|
|
7420
|
+
function phantomIntegration(_options = {}) {
|
|
7421
|
+
return {
|
|
7422
|
+
id: "phantom",
|
|
7423
|
+
name: "Phantom",
|
|
7424
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/phantom.png",
|
|
7425
|
+
description: "Build Phantom mobile universal links and expose provider deeplink reference data",
|
|
7426
|
+
category: "Other",
|
|
7427
|
+
tools: [...PHANTOM_TOOLS],
|
|
7428
|
+
async onInit(_client) {
|
|
7429
|
+
logger45.debug("Phantom integration initialized");
|
|
6384
7430
|
},
|
|
6385
7431
|
async onAfterConnect(_client) {
|
|
6386
|
-
|
|
7432
|
+
logger45.debug("Phantom integration connected");
|
|
6387
7433
|
}
|
|
6388
7434
|
};
|
|
6389
7435
|
}
|
|
6390
7436
|
// src/integrations/figma.ts
|
|
6391
7437
|
init_logger();
|
|
6392
|
-
var
|
|
7438
|
+
var logger46 = createLogger("Figma");
|
|
6393
7439
|
var FIGMA_TOOLS = [
|
|
6394
7440
|
"figma_get_file",
|
|
6395
7441
|
"figma_get_file_nodes",
|
|
@@ -6455,16 +7501,16 @@ function figmaIntegration(config = {}) {
|
|
|
6455
7501
|
tools: [...FIGMA_TOOLS],
|
|
6456
7502
|
oauth,
|
|
6457
7503
|
async onInit(_client) {
|
|
6458
|
-
|
|
7504
|
+
logger46.debug("Figma integration initialized");
|
|
6459
7505
|
},
|
|
6460
7506
|
async onAfterConnect(_client) {
|
|
6461
|
-
|
|
7507
|
+
logger46.debug("Figma integration connected");
|
|
6462
7508
|
}
|
|
6463
7509
|
};
|
|
6464
7510
|
}
|
|
6465
7511
|
// src/integrations/intercom.ts
|
|
6466
7512
|
init_logger();
|
|
6467
|
-
var
|
|
7513
|
+
var logger47 = createLogger("Intercom");
|
|
6468
7514
|
var INTERCOM_TOOLS = [
|
|
6469
7515
|
"intercom_list_contacts",
|
|
6470
7516
|
"intercom_get_contact",
|
|
@@ -6495,16 +7541,16 @@ function intercomIntegration(config = {}) {
|
|
|
6495
7541
|
tools: [...INTERCOM_TOOLS],
|
|
6496
7542
|
oauth,
|
|
6497
7543
|
async onInit(_client) {
|
|
6498
|
-
|
|
7544
|
+
logger47.debug("Intercom integration initialized");
|
|
6499
7545
|
},
|
|
6500
7546
|
async onAfterConnect(_client) {
|
|
6501
|
-
|
|
7547
|
+
logger47.debug("Intercom integration connected");
|
|
6502
7548
|
}
|
|
6503
7549
|
};
|
|
6504
7550
|
}
|
|
6505
7551
|
// src/integrations/hubspot.ts
|
|
6506
7552
|
init_logger();
|
|
6507
|
-
var
|
|
7553
|
+
var logger48 = createLogger("HubSpot");
|
|
6508
7554
|
var HUBSPOT_TOOLS = [
|
|
6509
7555
|
"hubspot_list_contacts",
|
|
6510
7556
|
"hubspot_get_contact",
|
|
@@ -6554,40 +7600,40 @@ function hubspotIntegration(config = {}) {
|
|
|
6554
7600
|
tools: [...HUBSPOT_TOOLS],
|
|
6555
7601
|
oauth,
|
|
6556
7602
|
async onInit(_client) {
|
|
6557
|
-
|
|
7603
|
+
logger48.debug("HubSpot integration initialized");
|
|
6558
7604
|
},
|
|
6559
7605
|
async onAfterConnect(_client) {
|
|
6560
|
-
|
|
7606
|
+
logger48.debug("HubSpot integration connected");
|
|
6561
7607
|
}
|
|
6562
7608
|
};
|
|
6563
7609
|
}
|
|
6564
7610
|
// src/integrations/youtube.ts
|
|
6565
7611
|
init_logger();
|
|
6566
|
-
var
|
|
7612
|
+
var logger49 = createLogger("YouTube");
|
|
6567
7613
|
var YOUTUBE_TOOLS = [
|
|
6568
|
-
"
|
|
6569
|
-
"
|
|
6570
|
-
"
|
|
7614
|
+
"youtube_add_comment",
|
|
7615
|
+
"youtube_add_to_playlist",
|
|
7616
|
+
"youtube_create_playlist",
|
|
7617
|
+
"youtube_delete_playlist",
|
|
7618
|
+
"youtube_get_captions",
|
|
6571
7619
|
"youtube_get_channel",
|
|
6572
|
-
"
|
|
6573
|
-
"youtube_get_video_rating",
|
|
6574
|
-
"youtube_list_playlists",
|
|
7620
|
+
"youtube_get_my_channel",
|
|
6575
7621
|
"youtube_get_playlist",
|
|
7622
|
+
"youtube_get_video",
|
|
7623
|
+
"youtube_get_video_rating",
|
|
7624
|
+
"youtube_list_comment_replies",
|
|
7625
|
+
"youtube_list_comments",
|
|
7626
|
+
"youtube_list_my_videos",
|
|
6576
7627
|
"youtube_list_playlist_items",
|
|
7628
|
+
"youtube_list_playlists",
|
|
6577
7629
|
"youtube_list_subscriptions",
|
|
6578
|
-
"youtube_list_comments",
|
|
6579
|
-
"youtube_list_comment_replies",
|
|
6580
|
-
"youtube_get_captions",
|
|
6581
7630
|
"youtube_rate_video",
|
|
7631
|
+
"youtube_remove_from_playlist",
|
|
7632
|
+
"youtube_reply_to_comment",
|
|
7633
|
+
"youtube_search",
|
|
6582
7634
|
"youtube_subscribe",
|
|
6583
7635
|
"youtube_unsubscribe",
|
|
6584
|
-
"youtube_add_comment",
|
|
6585
|
-
"youtube_reply_to_comment",
|
|
6586
|
-
"youtube_create_playlist",
|
|
6587
7636
|
"youtube_update_playlist",
|
|
6588
|
-
"youtube_delete_playlist",
|
|
6589
|
-
"youtube_add_to_playlist",
|
|
6590
|
-
"youtube_remove_from_playlist",
|
|
6591
7637
|
"youtube_update_video"
|
|
6592
7638
|
];
|
|
6593
7639
|
function youtubeIntegration(config = {}) {
|
|
@@ -6609,16 +7655,80 @@ function youtubeIntegration(config = {}) {
|
|
|
6609
7655
|
tools: [...YOUTUBE_TOOLS],
|
|
6610
7656
|
oauth,
|
|
6611
7657
|
async onInit(_client) {
|
|
6612
|
-
|
|
7658
|
+
logger49.debug("YouTube integration initialized");
|
|
7659
|
+
},
|
|
7660
|
+
async onAfterConnect(_client) {
|
|
7661
|
+
logger49.debug("YouTube integration connected");
|
|
7662
|
+
}
|
|
7663
|
+
};
|
|
7664
|
+
}
|
|
7665
|
+
// src/integrations/zoom.ts
|
|
7666
|
+
init_logger();
|
|
7667
|
+
var logger50 = createLogger("Zoom");
|
|
7668
|
+
var ZOOM_TOOLS = [
|
|
7669
|
+
"zoom_get_user",
|
|
7670
|
+
"zoom_list_meetings",
|
|
7671
|
+
"zoom_create_meeting",
|
|
7672
|
+
"zoom_get_meeting",
|
|
7673
|
+
"zoom_update_meeting",
|
|
7674
|
+
"zoom_delete_meeting"
|
|
7675
|
+
];
|
|
7676
|
+
function zoomIntegration(config = {}) {
|
|
7677
|
+
const oauth = {
|
|
7678
|
+
provider: "zoom",
|
|
7679
|
+
clientId: config.clientId ?? getEnv("ZOOM_CLIENT_ID"),
|
|
7680
|
+
clientSecret: config.clientSecret ?? getEnv("ZOOM_CLIENT_SECRET"),
|
|
7681
|
+
scopes: config.scopes,
|
|
7682
|
+
optionalScopes: config.optionalScopes,
|
|
7683
|
+
redirectUri: config.redirectUri,
|
|
7684
|
+
config: { ...config }
|
|
7685
|
+
};
|
|
7686
|
+
return {
|
|
7687
|
+
id: "zoom",
|
|
7688
|
+
name: "Zoom",
|
|
7689
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/zoom.png",
|
|
7690
|
+
tools: [...ZOOM_TOOLS],
|
|
7691
|
+
oauth,
|
|
7692
|
+
async onInit(_client) {
|
|
7693
|
+
logger50.debug("Zoom integration initialized");
|
|
6613
7694
|
},
|
|
6614
7695
|
async onAfterConnect(_client) {
|
|
6615
|
-
|
|
7696
|
+
logger50.debug("Zoom integration connected");
|
|
6616
7697
|
}
|
|
6617
7698
|
};
|
|
6618
7699
|
}
|
|
7700
|
+
// src/integrations/reddit.ts
|
|
7701
|
+
var REDDIT_TOOLS = [
|
|
7702
|
+
"reddit_get_me",
|
|
7703
|
+
"reddit_get_subreddit_about",
|
|
7704
|
+
"reddit_list_subreddit_posts",
|
|
7705
|
+
"reddit_get_post_thread",
|
|
7706
|
+
"reddit_search",
|
|
7707
|
+
"reddit_submit_post",
|
|
7708
|
+
"reddit_comment",
|
|
7709
|
+
"reddit_vote",
|
|
7710
|
+
"reddit_list_my_subreddits",
|
|
7711
|
+
"reddit_list_popular_subreddits"
|
|
7712
|
+
];
|
|
7713
|
+
function redditIntegration(config = {}) {
|
|
7714
|
+
const oauth = {
|
|
7715
|
+
provider: "reddit",
|
|
7716
|
+
clientId: config.clientId ?? getEnv("REDDIT_CLIENT_ID"),
|
|
7717
|
+
clientSecret: config.clientSecret ?? getEnv("REDDIT_CLIENT_SECRET"),
|
|
7718
|
+
scopes: config.scopes ?? ["identity", "read", "submit", "vote", "mysubreddits"],
|
|
7719
|
+
optionalScopes: config.optionalScopes,
|
|
7720
|
+
redirectUri: config.redirectUri
|
|
7721
|
+
};
|
|
7722
|
+
return {
|
|
7723
|
+
id: "reddit",
|
|
7724
|
+
name: "Reddit",
|
|
7725
|
+
tools: [...REDDIT_TOOLS],
|
|
7726
|
+
oauth
|
|
7727
|
+
};
|
|
7728
|
+
}
|
|
6619
7729
|
// src/integrations/cursor.ts
|
|
6620
7730
|
init_logger();
|
|
6621
|
-
var
|
|
7731
|
+
var logger51 = createLogger("Cursor");
|
|
6622
7732
|
var CURSOR_TOOLS = [
|
|
6623
7733
|
"cursor_list_agents",
|
|
6624
7734
|
"cursor_get_agent",
|
|
@@ -6638,16 +7748,72 @@ function cursorIntegration(_config = {}) {
|
|
|
6638
7748
|
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/cursor.jpeg",
|
|
6639
7749
|
tools: [...CURSOR_TOOLS],
|
|
6640
7750
|
async onInit(_client) {
|
|
6641
|
-
|
|
7751
|
+
logger51.debug("Cursor integration initialized");
|
|
7752
|
+
},
|
|
7753
|
+
async onAfterConnect(_client) {
|
|
7754
|
+
logger51.debug("Cursor integration connected");
|
|
7755
|
+
}
|
|
7756
|
+
};
|
|
7757
|
+
}
|
|
7758
|
+
// src/integrations/databricks.ts
|
|
7759
|
+
init_logger();
|
|
7760
|
+
var logger52 = createLogger("Databricks");
|
|
7761
|
+
var DATABRICKS_SCOPES = ["all-apis", "offline_access"];
|
|
7762
|
+
var DATABRICKS_TOOLS = [
|
|
7763
|
+
"databricks_current_user",
|
|
7764
|
+
"databricks_clusters_list",
|
|
7765
|
+
"databricks_clusters_get",
|
|
7766
|
+
"databricks_jobs_list",
|
|
7767
|
+
"databricks_jobs_get",
|
|
7768
|
+
"databricks_jobs_run_now",
|
|
7769
|
+
"databricks_sql_warehouses_list",
|
|
7770
|
+
"databricks_workspace_get_status"
|
|
7771
|
+
];
|
|
7772
|
+
function normalizeDatabricksWorkspaceHost(raw) {
|
|
7773
|
+
const value = (raw ?? "").trim().replace(/\/+$/, "");
|
|
7774
|
+
if (!value) {
|
|
7775
|
+
return "";
|
|
7776
|
+
}
|
|
7777
|
+
return /^https?:\/\//i.test(value) ? value : `https://${value}`;
|
|
7778
|
+
}
|
|
7779
|
+
function databricksIntegration(config = {}) {
|
|
7780
|
+
const host = normalizeDatabricksWorkspaceHost(config.workspaceHost ?? getEnv("DATABRICKS_WORKSPACE_HOST"));
|
|
7781
|
+
const placeholder = "https://workspace-host.invalid";
|
|
7782
|
+
const base = host || placeholder;
|
|
7783
|
+
const oauth = {
|
|
7784
|
+
provider: "databricks",
|
|
7785
|
+
clientId: config.clientId ?? getEnv("DATABRICKS_CLIENT_ID"),
|
|
7786
|
+
clientSecret: config.clientSecret ?? getEnv("DATABRICKS_CLIENT_SECRET"),
|
|
7787
|
+
scopes: config.scopes ?? [...DATABRICKS_SCOPES],
|
|
7788
|
+
redirectUri: config.redirectUri,
|
|
7789
|
+
config: {
|
|
7790
|
+
subdomain: host || undefined,
|
|
7791
|
+
authorization_endpoint: `${base}/oidc/v1/authorize`,
|
|
7792
|
+
token_endpoint: `${base}/oidc/v1/token`,
|
|
7793
|
+
response_type: "code",
|
|
7794
|
+
grant_types_supported: ["authorization_code", "refresh_token"],
|
|
7795
|
+
code_challenge_method: "S256"
|
|
7796
|
+
}
|
|
7797
|
+
};
|
|
7798
|
+
return {
|
|
7799
|
+
id: "databricks",
|
|
7800
|
+
name: "Databricks",
|
|
7801
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/databricks.png",
|
|
7802
|
+
description: "Run Databricks jobs, list clusters and SQL warehouses, and inspect workspace paths",
|
|
7803
|
+
category: "Engineering",
|
|
7804
|
+
tools: [...DATABRICKS_TOOLS],
|
|
7805
|
+
oauth,
|
|
7806
|
+
async onInit(_client) {
|
|
7807
|
+
logger52.debug("Databricks integration initialized");
|
|
6642
7808
|
},
|
|
6643
7809
|
async onAfterConnect(_client) {
|
|
6644
|
-
|
|
7810
|
+
logger52.debug("Databricks integration connected");
|
|
6645
7811
|
}
|
|
6646
7812
|
};
|
|
6647
7813
|
}
|
|
6648
7814
|
// src/integrations/posthog.ts
|
|
6649
7815
|
init_logger();
|
|
6650
|
-
var
|
|
7816
|
+
var logger53 = createLogger("PostHog");
|
|
6651
7817
|
var DEFAULT_POSTHOG_BASE_URL = "https://us.posthog.com";
|
|
6652
7818
|
var POSTHOG_SCOPES = [
|
|
6653
7819
|
"openid",
|
|
@@ -6733,16 +7899,56 @@ function posthogIntegration(config = {}) {
|
|
|
6733
7899
|
tools: [...POSTHOG_TOOLS],
|
|
6734
7900
|
oauth,
|
|
6735
7901
|
async onInit(_client) {
|
|
6736
|
-
|
|
7902
|
+
logger53.debug("PostHog integration initialized");
|
|
7903
|
+
},
|
|
7904
|
+
async onAfterConnect(_client) {
|
|
7905
|
+
logger53.debug("PostHog integration connected");
|
|
7906
|
+
}
|
|
7907
|
+
};
|
|
7908
|
+
}
|
|
7909
|
+
// src/integrations/postman.ts
|
|
7910
|
+
init_logger();
|
|
7911
|
+
var logger54 = createLogger("Postman");
|
|
7912
|
+
var POSTMAN_TOOLS = [
|
|
7913
|
+
"postman_get_me",
|
|
7914
|
+
"postman_list_workspaces",
|
|
7915
|
+
"postman_get_workspace",
|
|
7916
|
+
"postman_list_collections",
|
|
7917
|
+
"postman_get_collection",
|
|
7918
|
+
"postman_delete_collection",
|
|
7919
|
+
"postman_list_environments",
|
|
7920
|
+
"postman_get_environment",
|
|
7921
|
+
"postman_create_collection"
|
|
7922
|
+
];
|
|
7923
|
+
function postmanIntegration(options = {}) {
|
|
7924
|
+
const apiKey = options.apiKey ?? getEnv("POSTMAN_API_KEY");
|
|
7925
|
+
if (!apiKey) {
|
|
7926
|
+
throw new Error("postmanIntegration requires apiKey or POSTMAN_API_KEY environment variable");
|
|
7927
|
+
}
|
|
7928
|
+
return {
|
|
7929
|
+
id: "postman",
|
|
7930
|
+
name: "Postman",
|
|
7931
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/postman.png",
|
|
7932
|
+
description: "Manage Postman workspaces, collections, and environments via the Postman API",
|
|
7933
|
+
category: "Engineering",
|
|
7934
|
+
tools: [...POSTMAN_TOOLS],
|
|
7935
|
+
authType: "apiKey",
|
|
7936
|
+
getHeaders() {
|
|
7937
|
+
return {
|
|
7938
|
+
Authorization: `Bearer ${apiKey}`
|
|
7939
|
+
};
|
|
7940
|
+
},
|
|
7941
|
+
async onInit(_client) {
|
|
7942
|
+
logger54.debug("Postman integration initialized");
|
|
6737
7943
|
},
|
|
6738
7944
|
async onAfterConnect(_client) {
|
|
6739
|
-
|
|
7945
|
+
logger54.debug("Postman integration connected");
|
|
6740
7946
|
}
|
|
6741
7947
|
};
|
|
6742
7948
|
}
|
|
6743
7949
|
// src/integrations/sentry.ts
|
|
6744
7950
|
init_logger();
|
|
6745
|
-
var
|
|
7951
|
+
var logger55 = createLogger("Sentry");
|
|
6746
7952
|
var SENTRY_SCOPES = [
|
|
6747
7953
|
"org:read",
|
|
6748
7954
|
"project:read",
|
|
@@ -6770,263 +7976,2057 @@ var SENTRY_TOOLS = [
|
|
|
6770
7976
|
];
|
|
6771
7977
|
function sentryIntegration(config = {}) {
|
|
6772
7978
|
const oauth = {
|
|
6773
|
-
provider: "sentry",
|
|
6774
|
-
clientId: config.clientId ?? getEnv("SENTRY_CLIENT_ID"),
|
|
6775
|
-
clientSecret: config.clientSecret ?? getEnv("SENTRY_CLIENT_SECRET"),
|
|
6776
|
-
scopes: config.scopes ?? [...SENTRY_SCOPES],
|
|
7979
|
+
provider: "sentry",
|
|
7980
|
+
clientId: config.clientId ?? getEnv("SENTRY_CLIENT_ID"),
|
|
7981
|
+
clientSecret: config.clientSecret ?? getEnv("SENTRY_CLIENT_SECRET"),
|
|
7982
|
+
scopes: config.scopes ?? [...SENTRY_SCOPES],
|
|
7983
|
+
redirectUri: config.redirectUri,
|
|
7984
|
+
config: {
|
|
7985
|
+
authorization_endpoint: "https://sentry.io/oauth/authorize/",
|
|
7986
|
+
token_endpoint: "https://sentry.io/oauth/token/",
|
|
7987
|
+
response_type: "code",
|
|
7988
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
7989
|
+
}
|
|
7990
|
+
};
|
|
7991
|
+
return {
|
|
7992
|
+
id: "sentry",
|
|
7993
|
+
name: "Sentry",
|
|
7994
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/sentry.png",
|
|
7995
|
+
description: "Monitor Sentry errors, issues, releases, and projects",
|
|
7996
|
+
category: "Engineering",
|
|
7997
|
+
tools: [...SENTRY_TOOLS],
|
|
7998
|
+
oauth,
|
|
7999
|
+
async onInit(_client) {
|
|
8000
|
+
logger55.debug("Sentry integration initialized");
|
|
8001
|
+
},
|
|
8002
|
+
async onAfterConnect(_client) {
|
|
8003
|
+
logger55.debug("Sentry integration connected");
|
|
8004
|
+
}
|
|
8005
|
+
};
|
|
8006
|
+
}
|
|
8007
|
+
// src/integrations/supabase.ts
|
|
8008
|
+
init_logger();
|
|
8009
|
+
var logger56 = createLogger("Supabase");
|
|
8010
|
+
var SUPABASE_API_BASE = "https://api.supabase.com";
|
|
8011
|
+
var SUPABASE_TOOLS = [
|
|
8012
|
+
"supabase_get_profile",
|
|
8013
|
+
"supabase_list_organizations",
|
|
8014
|
+
"supabase_get_organization",
|
|
8015
|
+
"supabase_list_organization_projects",
|
|
8016
|
+
"supabase_list_projects",
|
|
8017
|
+
"supabase_get_project",
|
|
8018
|
+
"supabase_create_project",
|
|
8019
|
+
"supabase_update_project",
|
|
8020
|
+
"supabase_delete_project",
|
|
8021
|
+
"supabase_list_project_api_keys",
|
|
8022
|
+
"supabase_create_project_api_key",
|
|
8023
|
+
"supabase_delete_project_api_key",
|
|
8024
|
+
"supabase_list_project_secrets",
|
|
8025
|
+
"supabase_list_project_branches",
|
|
8026
|
+
"supabase_get_project_health",
|
|
8027
|
+
"supabase_get_database_postgres_config",
|
|
8028
|
+
"supabase_list_available_regions"
|
|
8029
|
+
];
|
|
8030
|
+
function supabaseIntegration(config = {}) {
|
|
8031
|
+
const pat = config.accessToken ?? getEnv("SUPABASE_ACCESS_TOKEN");
|
|
8032
|
+
if (pat) {
|
|
8033
|
+
return {
|
|
8034
|
+
id: "supabase",
|
|
8035
|
+
name: "Supabase",
|
|
8036
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/supabase.png",
|
|
8037
|
+
description: "Manage Supabase organizations, projects, Postgres settings, API keys, secrets, and branches via the Management API",
|
|
8038
|
+
category: "Infrastructure",
|
|
8039
|
+
tools: [...SUPABASE_TOOLS],
|
|
8040
|
+
authType: "apiKey",
|
|
8041
|
+
getHeaders() {
|
|
8042
|
+
return {
|
|
8043
|
+
Authorization: `Bearer ${pat}`
|
|
8044
|
+
};
|
|
8045
|
+
},
|
|
8046
|
+
async onInit(_client) {
|
|
8047
|
+
logger56.debug("Supabase integration initialized (personal access token)");
|
|
8048
|
+
},
|
|
8049
|
+
async onAfterConnect(_client) {
|
|
8050
|
+
logger56.debug("Supabase integration connected");
|
|
8051
|
+
}
|
|
8052
|
+
};
|
|
8053
|
+
}
|
|
8054
|
+
const oauth = {
|
|
8055
|
+
provider: "supabase",
|
|
8056
|
+
clientId: config.clientId ?? getEnv("SUPABASE_CLIENT_ID"),
|
|
8057
|
+
clientSecret: config.clientSecret ?? getEnv("SUPABASE_CLIENT_SECRET"),
|
|
8058
|
+
scopes: config.scopes ?? [],
|
|
8059
|
+
optionalScopes: config.optionalScopes,
|
|
8060
|
+
redirectUri: config.redirectUri,
|
|
8061
|
+
config: {
|
|
8062
|
+
apiBaseUrl: SUPABASE_API_BASE,
|
|
8063
|
+
authorization_endpoint: `${SUPABASE_API_BASE}/v1/oauth/authorize`,
|
|
8064
|
+
token_endpoint: `${SUPABASE_API_BASE}/v1/oauth/token`,
|
|
8065
|
+
token_auth_method: "client_secret_basic",
|
|
8066
|
+
response_type: "code",
|
|
8067
|
+
grant_types_supported: ["authorization_code", "refresh_token"],
|
|
8068
|
+
code_challenge_method: "S256"
|
|
8069
|
+
}
|
|
8070
|
+
};
|
|
8071
|
+
return {
|
|
8072
|
+
id: "supabase",
|
|
8073
|
+
name: "Supabase",
|
|
8074
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/supabase.png",
|
|
8075
|
+
description: "Manage Supabase organizations, projects, Postgres settings, API keys, secrets, and branches via the Management API",
|
|
8076
|
+
category: "Infrastructure",
|
|
8077
|
+
tools: [...SUPABASE_TOOLS],
|
|
8078
|
+
oauth,
|
|
8079
|
+
async onInit(_client) {
|
|
8080
|
+
logger56.debug("Supabase integration initialized");
|
|
8081
|
+
},
|
|
8082
|
+
async onAfterConnect(_client) {
|
|
8083
|
+
logger56.debug("Supabase integration connected");
|
|
8084
|
+
}
|
|
8085
|
+
};
|
|
8086
|
+
}
|
|
8087
|
+
// src/integrations/netlify.ts
|
|
8088
|
+
init_logger();
|
|
8089
|
+
var logger57 = createLogger("Netlify");
|
|
8090
|
+
var NETLIFY_TOOLS = [
|
|
8091
|
+
"netlify_get_current_user",
|
|
8092
|
+
"netlify_list_accounts",
|
|
8093
|
+
"netlify_get_account",
|
|
8094
|
+
"netlify_list_sites",
|
|
8095
|
+
"netlify_get_site",
|
|
8096
|
+
"netlify_create_site",
|
|
8097
|
+
"netlify_update_site",
|
|
8098
|
+
"netlify_delete_site",
|
|
8099
|
+
"netlify_enable_site",
|
|
8100
|
+
"netlify_disable_site",
|
|
8101
|
+
"netlify_list_deploys",
|
|
8102
|
+
"netlify_get_deploy",
|
|
8103
|
+
"netlify_create_deploy",
|
|
8104
|
+
"netlify_cancel_deploy",
|
|
8105
|
+
"netlify_restore_deploy",
|
|
8106
|
+
"netlify_lock_deploy",
|
|
8107
|
+
"netlify_unlock_deploy",
|
|
8108
|
+
"netlify_list_builds",
|
|
8109
|
+
"netlify_get_build",
|
|
8110
|
+
"netlify_trigger_build",
|
|
8111
|
+
"netlify_list_env_vars",
|
|
8112
|
+
"netlify_get_env_var",
|
|
8113
|
+
"netlify_create_env_vars",
|
|
8114
|
+
"netlify_update_env_var",
|
|
8115
|
+
"netlify_delete_env_var",
|
|
8116
|
+
"netlify_list_build_hooks",
|
|
8117
|
+
"netlify_create_build_hook",
|
|
8118
|
+
"netlify_delete_build_hook",
|
|
8119
|
+
"netlify_list_forms",
|
|
8120
|
+
"netlify_list_form_submissions",
|
|
8121
|
+
"netlify_list_dns_zones",
|
|
8122
|
+
"netlify_get_dns_records",
|
|
8123
|
+
"netlify_create_dns_record",
|
|
8124
|
+
"netlify_delete_dns_record",
|
|
8125
|
+
"netlify_list_functions",
|
|
8126
|
+
"netlify_list_files",
|
|
8127
|
+
"netlify_purge_cache"
|
|
8128
|
+
];
|
|
8129
|
+
function netlifyIntegration(config = {}) {
|
|
8130
|
+
const oauth = {
|
|
8131
|
+
provider: "netlify",
|
|
8132
|
+
clientId: config.clientId ?? getEnv("NETLIFY_CLIENT_ID"),
|
|
8133
|
+
clientSecret: config.clientSecret ?? getEnv("NETLIFY_CLIENT_SECRET"),
|
|
8134
|
+
scopes: [],
|
|
8135
|
+
redirectUri: config.redirectUri,
|
|
8136
|
+
config: {
|
|
8137
|
+
authorization_endpoint: "https://app.netlify.com/authorize",
|
|
8138
|
+
token_endpoint: "https://api.netlify.com/oauth/token",
|
|
8139
|
+
response_type: "code",
|
|
8140
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
8141
|
+
}
|
|
8142
|
+
};
|
|
8143
|
+
return {
|
|
8144
|
+
id: "netlify",
|
|
8145
|
+
name: "Netlify",
|
|
8146
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/netlify.png",
|
|
8147
|
+
description: "Manage Netlify sites, deploys, builds, and environment variables",
|
|
8148
|
+
category: "Infrastructure",
|
|
8149
|
+
tools: [...NETLIFY_TOOLS],
|
|
8150
|
+
oauth,
|
|
8151
|
+
async onInit(_client) {
|
|
8152
|
+
logger57.debug("Netlify integration initialized");
|
|
8153
|
+
},
|
|
8154
|
+
async onAfterConnect(_client) {
|
|
8155
|
+
logger57.debug("Netlify integration connected");
|
|
8156
|
+
}
|
|
8157
|
+
};
|
|
8158
|
+
}
|
|
8159
|
+
// src/integrations/datadog.ts
|
|
8160
|
+
init_logger();
|
|
8161
|
+
var logger58 = createLogger("Datadog");
|
|
8162
|
+
var DATADOG_SCOPES = [
|
|
8163
|
+
"monitors_read",
|
|
8164
|
+
"dashboards_read",
|
|
8165
|
+
"metrics_read",
|
|
8166
|
+
"logs_read_data"
|
|
8167
|
+
];
|
|
8168
|
+
var DATADOG_TOOLS = [
|
|
8169
|
+
"datadog_list_monitors",
|
|
8170
|
+
"datadog_get_monitor",
|
|
8171
|
+
"datadog_list_dashboards",
|
|
8172
|
+
"datadog_get_dashboard",
|
|
8173
|
+
"datadog_search_logs"
|
|
8174
|
+
];
|
|
8175
|
+
function normalizeSite(raw) {
|
|
8176
|
+
const s = (raw ?? "").trim();
|
|
8177
|
+
return s.length > 0 ? s : "datadoghq.com";
|
|
8178
|
+
}
|
|
8179
|
+
function datadogIntegration(config = {}) {
|
|
8180
|
+
const site = normalizeSite(config.site ?? getEnv("DATADOG_SITE"));
|
|
8181
|
+
const apiKey = config.apiKey ?? getEnv("DATADOG_API_KEY");
|
|
8182
|
+
const applicationKey = config.applicationKey ?? getEnv("DATADOG_APPLICATION_KEY");
|
|
8183
|
+
const baseFields = {
|
|
8184
|
+
id: "datadog",
|
|
8185
|
+
name: "Datadog",
|
|
8186
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/datadog.png",
|
|
8187
|
+
description: "List monitors and dashboards and search logs with the Datadog API",
|
|
8188
|
+
category: "Engineering",
|
|
8189
|
+
tools: [...DATADOG_TOOLS],
|
|
8190
|
+
async onInit(_client) {
|
|
8191
|
+
logger58.debug("Datadog integration initialized");
|
|
8192
|
+
},
|
|
8193
|
+
async onAfterConnect(_client) {
|
|
8194
|
+
logger58.debug("Datadog integration connected");
|
|
8195
|
+
}
|
|
8196
|
+
};
|
|
8197
|
+
if (apiKey || applicationKey) {
|
|
8198
|
+
if (!apiKey || !applicationKey) {
|
|
8199
|
+
throw new Error("datadogIntegration: apiKey and applicationKey must both be set for API key authentication");
|
|
8200
|
+
}
|
|
8201
|
+
return {
|
|
8202
|
+
...baseFields,
|
|
8203
|
+
authType: "apiKey",
|
|
8204
|
+
getHeaders() {
|
|
8205
|
+
return {
|
|
8206
|
+
"DD-API-KEY": apiKey,
|
|
8207
|
+
"DD-APPLICATION-KEY": applicationKey,
|
|
8208
|
+
"DD-SITE": site
|
|
8209
|
+
};
|
|
8210
|
+
}
|
|
8211
|
+
};
|
|
8212
|
+
}
|
|
8213
|
+
const clientId = config.clientId ?? getEnv("DATADOG_CLIENT_ID");
|
|
8214
|
+
const clientSecret = config.clientSecret ?? getEnv("DATADOG_CLIENT_SECRET");
|
|
8215
|
+
const oauth = {
|
|
8216
|
+
provider: "datadog",
|
|
8217
|
+
clientId,
|
|
8218
|
+
clientSecret,
|
|
8219
|
+
scopes: config.scopes ?? [...DATADOG_SCOPES],
|
|
8220
|
+
redirectUri: config.redirectUri,
|
|
8221
|
+
config: {
|
|
8222
|
+
authorization_endpoint: "https://app.datadoghq.com/oauth2/v1/authorize",
|
|
8223
|
+
token_endpoint: "https://api.datadoghq.com/oauth2/v1/token",
|
|
8224
|
+
response_type: "code",
|
|
8225
|
+
grant_types_supported: ["authorization_code", "refresh_token"],
|
|
8226
|
+
subdomain: site
|
|
8227
|
+
}
|
|
8228
|
+
};
|
|
8229
|
+
return {
|
|
8230
|
+
...baseFields,
|
|
8231
|
+
oauth
|
|
8232
|
+
};
|
|
8233
|
+
}
|
|
8234
|
+
// src/integrations/redis.ts
|
|
8235
|
+
init_logger();
|
|
8236
|
+
var logger59 = createLogger("Redis Cloud");
|
|
8237
|
+
var REDIS_TOOLS = [
|
|
8238
|
+
"redis_list_subscriptions",
|
|
8239
|
+
"redis_get_subscription",
|
|
8240
|
+
"redis_list_fixed_subscriptions",
|
|
8241
|
+
"redis_get_fixed_subscription",
|
|
8242
|
+
"redis_list_databases",
|
|
8243
|
+
"redis_get_database",
|
|
8244
|
+
"redis_create_database",
|
|
8245
|
+
"redis_update_database",
|
|
8246
|
+
"redis_delete_database",
|
|
8247
|
+
"redis_list_essentials_databases",
|
|
8248
|
+
"redis_get_essentials_database",
|
|
8249
|
+
"redis_create_essentials_database",
|
|
8250
|
+
"redis_update_essentials_database",
|
|
8251
|
+
"redis_delete_essentials_database",
|
|
8252
|
+
"redis_get_task",
|
|
8253
|
+
"redis_list_logs"
|
|
8254
|
+
];
|
|
8255
|
+
function encodeRedisCloudBearerToken(accountKey, secretKey) {
|
|
8256
|
+
const json = JSON.stringify({ account_key: accountKey, secret_key: secretKey });
|
|
8257
|
+
let b64;
|
|
8258
|
+
if (typeof Buffer !== "undefined") {
|
|
8259
|
+
b64 = Buffer.from(json, "utf8").toString("base64");
|
|
8260
|
+
} else {
|
|
8261
|
+
const bytes = new TextEncoder().encode(json);
|
|
8262
|
+
let binary = "";
|
|
8263
|
+
for (let i = 0;i < bytes.length; i++) {
|
|
8264
|
+
binary += String.fromCharCode(bytes[i]);
|
|
8265
|
+
}
|
|
8266
|
+
b64 = btoa(binary);
|
|
8267
|
+
}
|
|
8268
|
+
return `redis_cloud:${b64}`;
|
|
8269
|
+
}
|
|
8270
|
+
function redisIntegration(options = {}) {
|
|
8271
|
+
const accountKey = options.accountKey ?? getEnv("REDIS_CLOUD_ACCOUNT_KEY");
|
|
8272
|
+
const secretKey = options.secretKey ?? getEnv("REDIS_CLOUD_SECRET_KEY");
|
|
8273
|
+
if (!accountKey || !secretKey) {
|
|
8274
|
+
throw new Error("redisIntegration requires accountKey/secretKey or REDIS_CLOUD_ACCOUNT_KEY and REDIS_CLOUD_SECRET_KEY environment variables");
|
|
8275
|
+
}
|
|
8276
|
+
const bearer = encodeRedisCloudBearerToken(accountKey, secretKey);
|
|
8277
|
+
return {
|
|
8278
|
+
id: "redis",
|
|
8279
|
+
name: "Redis Cloud",
|
|
8280
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/redis.png",
|
|
8281
|
+
description: "Manage Redis Cloud subscriptions, databases, async tasks, and audit logs via the REST API",
|
|
8282
|
+
category: "Infrastructure",
|
|
8283
|
+
tools: [...REDIS_TOOLS],
|
|
8284
|
+
authType: "apiKey",
|
|
8285
|
+
getHeaders() {
|
|
8286
|
+
return {
|
|
8287
|
+
Authorization: `Bearer ${bearer}`
|
|
8288
|
+
};
|
|
8289
|
+
},
|
|
8290
|
+
async onInit(_client) {
|
|
8291
|
+
logger59.debug("Redis Cloud integration initialized");
|
|
8292
|
+
},
|
|
8293
|
+
async onAfterConnect(_client) {
|
|
8294
|
+
logger59.debug("Redis Cloud integration connected");
|
|
8295
|
+
}
|
|
8296
|
+
};
|
|
8297
|
+
}
|
|
8298
|
+
// src/integrations/upstash.ts
|
|
8299
|
+
init_logger();
|
|
8300
|
+
var logger60 = createLogger("Upstash");
|
|
8301
|
+
var UPSTASH_TOOLS = [
|
|
8302
|
+
"upstash_redis_run",
|
|
8303
|
+
"upstash_redis_get",
|
|
8304
|
+
"upstash_redis_set",
|
|
8305
|
+
"upstash_redis_del",
|
|
8306
|
+
"upstash_qstash_publish"
|
|
8307
|
+
];
|
|
8308
|
+
function upstashIntegration(options = {}) {
|
|
8309
|
+
const redisUrl = options.redisUrl ?? getEnv("UPSTASH_REDIS_REST_URL");
|
|
8310
|
+
const redisToken = options.redisToken ?? getEnv("UPSTASH_REDIS_REST_TOKEN");
|
|
8311
|
+
const qstashToken = options.qstashToken ?? getEnv("QSTASH_TOKEN");
|
|
8312
|
+
const hasRedis = !!(redisUrl && redisToken);
|
|
8313
|
+
const onlyPartialRedis = !!redisUrl && !redisToken || !redisUrl && !!redisToken;
|
|
8314
|
+
if (onlyPartialRedis) {
|
|
8315
|
+
throw new Error("upstashIntegration requires both redisUrl and redisToken for Redis tools (or omit both for QStash-only)");
|
|
8316
|
+
}
|
|
8317
|
+
if (!hasRedis && !qstashToken) {
|
|
8318
|
+
throw new Error("upstashIntegration requires Redis credentials (UPSTASH_REDIS_REST_URL + UPSTASH_REDIS_REST_TOKEN) and/or QSTASH_TOKEN");
|
|
8319
|
+
}
|
|
8320
|
+
return {
|
|
8321
|
+
id: "upstash",
|
|
8322
|
+
name: "Upstash",
|
|
8323
|
+
logoUrl: "https://avatars.githubusercontent.com/u/74989412?s=200&v=4",
|
|
8324
|
+
description: "Serverless Redis (REST), QStash messaging, and HTTP APIs",
|
|
8325
|
+
category: "Infrastructure",
|
|
8326
|
+
tools: [...UPSTASH_TOOLS],
|
|
8327
|
+
authType: "apiKey",
|
|
8328
|
+
getHeaders() {
|
|
8329
|
+
const headers = {};
|
|
8330
|
+
if (hasRedis) {
|
|
8331
|
+
headers["X-Upstash-Redis-Rest-Url"] = redisUrl;
|
|
8332
|
+
headers["X-Upstash-Redis-Rest-Token"] = redisToken;
|
|
8333
|
+
}
|
|
8334
|
+
if (qstashToken) {
|
|
8335
|
+
headers["X-Qstash-Token"] = qstashToken;
|
|
8336
|
+
}
|
|
8337
|
+
return headers;
|
|
8338
|
+
},
|
|
8339
|
+
async onInit(_client) {
|
|
8340
|
+
logger60.debug("Upstash integration initialized");
|
|
8341
|
+
},
|
|
8342
|
+
async onAfterConnect(_client) {
|
|
8343
|
+
logger60.debug("Upstash integration connected");
|
|
8344
|
+
}
|
|
8345
|
+
};
|
|
8346
|
+
}
|
|
8347
|
+
// src/integrations/webflow.ts
|
|
8348
|
+
init_logger();
|
|
8349
|
+
var logger61 = createLogger("Webflow");
|
|
8350
|
+
var WEBFLOW_TOOLS = [
|
|
8351
|
+
"webflow_token_introspect",
|
|
8352
|
+
"webflow_get_authorized_user",
|
|
8353
|
+
"webflow_list_sites",
|
|
8354
|
+
"webflow_get_site",
|
|
8355
|
+
"webflow_get_site_custom_domains",
|
|
8356
|
+
"webflow_publish_site",
|
|
8357
|
+
"webflow_list_site_pages",
|
|
8358
|
+
"webflow_list_site_collections",
|
|
8359
|
+
"webflow_get_collection",
|
|
8360
|
+
"webflow_list_collection_items",
|
|
8361
|
+
"webflow_list_live_collection_items",
|
|
8362
|
+
"webflow_get_collection_item",
|
|
8363
|
+
"webflow_create_collection_items",
|
|
8364
|
+
"webflow_update_collection_items",
|
|
8365
|
+
"webflow_delete_collection_items",
|
|
8366
|
+
"webflow_publish_collection_items",
|
|
8367
|
+
"webflow_list_site_forms",
|
|
8368
|
+
"webflow_list_site_webhooks"
|
|
8369
|
+
];
|
|
8370
|
+
var DEFAULT_WEBFLOW_SCOPES = [
|
|
8371
|
+
"authorized_user:read",
|
|
8372
|
+
"assets:read",
|
|
8373
|
+
"assets:write",
|
|
8374
|
+
"cms:read",
|
|
8375
|
+
"cms:write",
|
|
8376
|
+
"custom_code:read",
|
|
8377
|
+
"custom_code:write",
|
|
8378
|
+
"forms:read",
|
|
8379
|
+
"forms:write",
|
|
8380
|
+
"pages:read",
|
|
8381
|
+
"pages:write",
|
|
8382
|
+
"sites:read",
|
|
8383
|
+
"sites:write"
|
|
8384
|
+
];
|
|
8385
|
+
function webflowIntegration(config = {}) {
|
|
8386
|
+
const oauth = {
|
|
8387
|
+
provider: "webflow",
|
|
8388
|
+
clientId: config.clientId ?? getEnv("WEBFLOW_CLIENT_ID"),
|
|
8389
|
+
clientSecret: config.clientSecret ?? getEnv("WEBFLOW_CLIENT_SECRET"),
|
|
8390
|
+
scopes: config.scopes ?? [...DEFAULT_WEBFLOW_SCOPES],
|
|
8391
|
+
redirectUri: config.redirectUri,
|
|
8392
|
+
config: {
|
|
8393
|
+
authorization_endpoint: "https://webflow.com/oauth/authorize",
|
|
8394
|
+
token_endpoint: "https://api.webflow.com/oauth/access_token",
|
|
8395
|
+
response_type: "code",
|
|
8396
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
8397
|
+
}
|
|
8398
|
+
};
|
|
8399
|
+
return {
|
|
8400
|
+
id: "webflow",
|
|
8401
|
+
name: "Webflow",
|
|
8402
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/webflow.png",
|
|
8403
|
+
description: "Manage Webflow sites, CMS collections, pages, forms, and publishing",
|
|
8404
|
+
category: "Engineering",
|
|
8405
|
+
tools: [...WEBFLOW_TOOLS],
|
|
8406
|
+
oauth,
|
|
8407
|
+
async onInit(_client) {
|
|
8408
|
+
logger61.debug("Webflow integration initialized");
|
|
8409
|
+
},
|
|
8410
|
+
async onAfterConnect(_client) {
|
|
8411
|
+
logger61.debug("Webflow integration connected");
|
|
8412
|
+
}
|
|
8413
|
+
};
|
|
8414
|
+
}
|
|
8415
|
+
// src/integrations/jira.ts
|
|
8416
|
+
init_logger();
|
|
8417
|
+
var logger62 = createLogger("Jira");
|
|
8418
|
+
var JIRA_SCOPES = [
|
|
8419
|
+
"read:jira-work",
|
|
8420
|
+
"write:jira-work",
|
|
8421
|
+
"read:account",
|
|
8422
|
+
"offline_access"
|
|
8423
|
+
];
|
|
8424
|
+
var JIRA_TOOLS = [
|
|
8425
|
+
"jira_list_projects",
|
|
8426
|
+
"jira_get_project",
|
|
8427
|
+
"jira_get_issue_types",
|
|
8428
|
+
"jira_search_issues",
|
|
8429
|
+
"jira_get_issue",
|
|
8430
|
+
"jira_create_issue",
|
|
8431
|
+
"jira_update_issue",
|
|
8432
|
+
"jira_get_transitions",
|
|
8433
|
+
"jira_transition_issue",
|
|
8434
|
+
"jira_add_comment",
|
|
8435
|
+
"jira_assign_issue",
|
|
8436
|
+
"jira_list_boards",
|
|
8437
|
+
"jira_list_sprints"
|
|
8438
|
+
];
|
|
8439
|
+
function jiraIntegration(config = {}) {
|
|
8440
|
+
const oauth = {
|
|
8441
|
+
provider: "jira",
|
|
8442
|
+
clientId: config.clientId ?? getEnv("JIRA_CLIENT_ID"),
|
|
8443
|
+
clientSecret: config.clientSecret ?? getEnv("JIRA_CLIENT_SECRET"),
|
|
8444
|
+
scopes: config.scopes ?? [...JIRA_SCOPES],
|
|
8445
|
+
redirectUri: config.redirectUri,
|
|
8446
|
+
config: {
|
|
8447
|
+
authorization_endpoint: "https://auth.atlassian.com/authorize",
|
|
8448
|
+
token_endpoint: "https://auth.atlassian.com/oauth/token",
|
|
8449
|
+
response_type: "code",
|
|
8450
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
8451
|
+
}
|
|
8452
|
+
};
|
|
8453
|
+
return {
|
|
8454
|
+
id: "jira",
|
|
8455
|
+
name: "Jira",
|
|
8456
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/jira.png",
|
|
8457
|
+
description: "Manage Jira issues, projects, sprints, and boards",
|
|
8458
|
+
category: "Engineering",
|
|
8459
|
+
tools: [...JIRA_TOOLS],
|
|
8460
|
+
oauth,
|
|
8461
|
+
async onInit(_client) {
|
|
8462
|
+
logger62.debug("Jira integration initialized");
|
|
8463
|
+
},
|
|
8464
|
+
async onAfterConnect(_client) {
|
|
8465
|
+
logger62.debug("Jira integration connected");
|
|
8466
|
+
}
|
|
8467
|
+
};
|
|
8468
|
+
}
|
|
8469
|
+
// src/integrations/salesforce.ts
|
|
8470
|
+
init_logger();
|
|
8471
|
+
var logger63 = createLogger("Salesforce");
|
|
8472
|
+
var SALESFORCE_TOOLS = [
|
|
8473
|
+
"salesforce_query",
|
|
8474
|
+
"salesforce_get_limits",
|
|
8475
|
+
"salesforce_describe_global",
|
|
8476
|
+
"salesforce_sobject_describe",
|
|
8477
|
+
"salesforce_sobject_get",
|
|
8478
|
+
"salesforce_sobject_create",
|
|
8479
|
+
"salesforce_sobject_update",
|
|
8480
|
+
"salesforce_sobject_delete"
|
|
8481
|
+
];
|
|
8482
|
+
function salesforceIntegration(config = {}) {
|
|
8483
|
+
const oauth = {
|
|
8484
|
+
provider: "salesforce",
|
|
8485
|
+
clientId: config.clientId ?? getEnv("SALESFORCE_CLIENT_ID"),
|
|
8486
|
+
clientSecret: config.clientSecret ?? getEnv("SALESFORCE_CLIENT_SECRET"),
|
|
8487
|
+
scopes: config.scopes ?? ["api", "refresh_token", "offline_access"],
|
|
8488
|
+
optionalScopes: config.optionalScopes,
|
|
8489
|
+
redirectUri: config.redirectUri,
|
|
8490
|
+
config: {
|
|
8491
|
+
...config,
|
|
8492
|
+
subdomain: config.subdomain ?? getEnv("SALESFORCE_SUBDOMAIN")
|
|
8493
|
+
}
|
|
8494
|
+
};
|
|
8495
|
+
return {
|
|
8496
|
+
id: "salesforce",
|
|
8497
|
+
name: "Salesforce",
|
|
8498
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/salesforce.png",
|
|
8499
|
+
tools: [...SALESFORCE_TOOLS],
|
|
8500
|
+
oauth,
|
|
8501
|
+
async onInit(_client) {
|
|
8502
|
+
logger63.debug("Salesforce integration initialized");
|
|
8503
|
+
},
|
|
8504
|
+
async onAfterConnect(_client) {
|
|
8505
|
+
logger63.debug("Salesforce integration connected");
|
|
8506
|
+
}
|
|
8507
|
+
};
|
|
8508
|
+
}
|
|
8509
|
+
// src/integrations/zapier.ts
|
|
8510
|
+
init_logger();
|
|
8511
|
+
var logger64 = createLogger("Zapier");
|
|
8512
|
+
var ZAPIER_TOOLS = [
|
|
8513
|
+
"zapier_get_profile",
|
|
8514
|
+
"zapier_list_zaps",
|
|
8515
|
+
"zapier_list_apps",
|
|
8516
|
+
"zapier_list_actions",
|
|
8517
|
+
"zapier_list_authentications",
|
|
8518
|
+
"zapier_list_zap_runs"
|
|
8519
|
+
];
|
|
8520
|
+
function zapierIntegration(config = {}) {
|
|
8521
|
+
const oauth = {
|
|
8522
|
+
provider: "zapier",
|
|
8523
|
+
clientId: config.clientId ?? getEnv("ZAPIER_CLIENT_ID"),
|
|
8524
|
+
clientSecret: config.clientSecret ?? getEnv("ZAPIER_CLIENT_SECRET"),
|
|
8525
|
+
scopes: config.scopes ?? [],
|
|
8526
|
+
redirectUri: config.redirectUri,
|
|
8527
|
+
config: {
|
|
8528
|
+
authorization_endpoint: "https://zapier.com/oauth/authorize/",
|
|
8529
|
+
token_endpoint: "https://zapier.com/oauth/token/",
|
|
8530
|
+
response_type: "code",
|
|
8531
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
8532
|
+
}
|
|
8533
|
+
};
|
|
8534
|
+
return {
|
|
8535
|
+
id: "zapier",
|
|
8536
|
+
name: "Zapier",
|
|
8537
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/zapier.png",
|
|
8538
|
+
description: "List Zaps, browse apps, manage authentications, and inspect Zap runs via the Partner Workflow API",
|
|
8539
|
+
category: "Productivity",
|
|
8540
|
+
tools: [...ZAPIER_TOOLS],
|
|
8541
|
+
oauth,
|
|
8542
|
+
async onInit(_client) {
|
|
8543
|
+
logger64.debug("Zapier integration initialized");
|
|
8544
|
+
},
|
|
8545
|
+
async onAfterConnect(_client) {
|
|
8546
|
+
logger64.debug("Zapier integration connected");
|
|
8547
|
+
}
|
|
8548
|
+
};
|
|
8549
|
+
}
|
|
8550
|
+
// src/integrations/linkedin.ts
|
|
8551
|
+
init_logger();
|
|
8552
|
+
var logger65 = createLogger("LinkedIn");
|
|
8553
|
+
var LINKEDIN_SCOPES = ["openid", "profile", "email", "w_member_social"];
|
|
8554
|
+
var LINKEDIN_TOOLS = ["linkedin_get_userinfo", "linkedin_create_post"];
|
|
8555
|
+
function linkedinIntegration(config = {}) {
|
|
8556
|
+
const oauth = {
|
|
8557
|
+
provider: "linkedin",
|
|
8558
|
+
clientId: config.clientId ?? getEnv("LINKEDIN_CLIENT_ID"),
|
|
8559
|
+
clientSecret: config.clientSecret ?? getEnv("LINKEDIN_CLIENT_SECRET"),
|
|
8560
|
+
scopes: config.scopes ?? [...LINKEDIN_SCOPES],
|
|
8561
|
+
optionalScopes: config.optionalScopes,
|
|
8562
|
+
redirectUri: config.redirectUri,
|
|
8563
|
+
config: {
|
|
8564
|
+
authorization_endpoint: "https://www.linkedin.com/oauth/v2/authorization",
|
|
8565
|
+
token_endpoint: "https://www.linkedin.com/oauth/v2/accessToken",
|
|
8566
|
+
response_type: "code",
|
|
8567
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
8568
|
+
}
|
|
8569
|
+
};
|
|
8570
|
+
return {
|
|
8571
|
+
id: "linkedin",
|
|
8572
|
+
name: "LinkedIn",
|
|
8573
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/linkedin.png",
|
|
8574
|
+
description: "Read LinkedIn OpenID profile data and publish member posts",
|
|
8575
|
+
category: "Social Media",
|
|
8576
|
+
tools: [...LINKEDIN_TOOLS],
|
|
8577
|
+
oauth,
|
|
8578
|
+
async onInit(_client) {
|
|
8579
|
+
logger65.debug("LinkedIn integration initialized");
|
|
8580
|
+
},
|
|
8581
|
+
async onAfterConnect(_client) {
|
|
8582
|
+
logger65.debug("LinkedIn integration connected");
|
|
8583
|
+
}
|
|
8584
|
+
};
|
|
8585
|
+
}
|
|
8586
|
+
// src/integrations/threads.ts
|
|
8587
|
+
init_logger();
|
|
8588
|
+
var logger66 = createLogger("Threads");
|
|
8589
|
+
var THREADS_SCOPES = [
|
|
8590
|
+
"threads_basic",
|
|
8591
|
+
"threads_content_publish",
|
|
8592
|
+
"threads_read_replies",
|
|
8593
|
+
"threads_manage_replies",
|
|
8594
|
+
"threads_manage_insights"
|
|
8595
|
+
];
|
|
8596
|
+
var THREADS_OPTIONAL_SCOPES = [
|
|
8597
|
+
"threads_keyword_search",
|
|
8598
|
+
"threads_profile_discovery",
|
|
8599
|
+
"threads_manage_mentions"
|
|
8600
|
+
];
|
|
8601
|
+
var THREADS_TOOLS = [
|
|
8602
|
+
"threads_get_me",
|
|
8603
|
+
"threads_list_user_media",
|
|
8604
|
+
"threads_get_media",
|
|
8605
|
+
"threads_keyword_search",
|
|
8606
|
+
"threads_create_media_container",
|
|
8607
|
+
"threads_publish_media_container",
|
|
8608
|
+
"threads_get_container_status",
|
|
8609
|
+
"threads_list_replies",
|
|
8610
|
+
"threads_get_conversation",
|
|
8611
|
+
"threads_manage_reply",
|
|
8612
|
+
"threads_repost",
|
|
8613
|
+
"threads_delete_media"
|
|
8614
|
+
];
|
|
8615
|
+
function threadsIntegration(config = {}) {
|
|
8616
|
+
const oauth = {
|
|
8617
|
+
provider: "threads",
|
|
8618
|
+
clientId: config.clientId ?? getEnv("THREADS_CLIENT_ID"),
|
|
8619
|
+
clientSecret: config.clientSecret ?? getEnv("THREADS_CLIENT_SECRET"),
|
|
8620
|
+
scopes: config.scopes ?? [...THREADS_SCOPES],
|
|
8621
|
+
optionalScopes: config.optionalScopes ?? [...THREADS_OPTIONAL_SCOPES],
|
|
8622
|
+
redirectUri: config.redirectUri,
|
|
8623
|
+
config: {
|
|
8624
|
+
authorization_endpoint: "https://threads.net/oauth/authorize",
|
|
8625
|
+
token_endpoint: "https://graph.threads.net/oauth/access_token",
|
|
8626
|
+
response_type: "code",
|
|
8627
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
8628
|
+
}
|
|
8629
|
+
};
|
|
8630
|
+
return {
|
|
8631
|
+
id: "threads",
|
|
8632
|
+
name: "Threads",
|
|
8633
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/threads.png",
|
|
8634
|
+
description: "Publish Threads posts and manage media, replies, conversations, and keyword search",
|
|
8635
|
+
category: "Social Media",
|
|
8636
|
+
tools: [...THREADS_TOOLS],
|
|
8637
|
+
oauth,
|
|
8638
|
+
async onInit(_client) {
|
|
8639
|
+
logger66.debug("Threads integration initialized");
|
|
8640
|
+
},
|
|
8641
|
+
async onAfterConnect(_client) {
|
|
8642
|
+
logger66.debug("Threads integration connected");
|
|
8643
|
+
}
|
|
8644
|
+
};
|
|
8645
|
+
}
|
|
8646
|
+
// src/integrations/tiktok.ts
|
|
8647
|
+
init_logger();
|
|
8648
|
+
var logger67 = createLogger("TikTok");
|
|
8649
|
+
var TIKTOK_SCOPES = ["user.info.basic", "video.list"];
|
|
8650
|
+
var TIKTOK_TOOLS = [
|
|
8651
|
+
"tiktok_get_user_info",
|
|
8652
|
+
"tiktok_list_videos",
|
|
8653
|
+
"tiktok_query_videos"
|
|
8654
|
+
];
|
|
8655
|
+
function tiktokIntegration(config = {}) {
|
|
8656
|
+
const oauth = {
|
|
8657
|
+
provider: "tiktok",
|
|
8658
|
+
clientId: config.clientId ?? getEnv("TIKTOK_CLIENT_ID"),
|
|
8659
|
+
clientSecret: config.clientSecret ?? getEnv("TIKTOK_CLIENT_SECRET"),
|
|
8660
|
+
scopes: config.scopes ?? [...TIKTOK_SCOPES],
|
|
8661
|
+
optionalScopes: config.optionalScopes,
|
|
8662
|
+
redirectUri: config.redirectUri,
|
|
8663
|
+
config: {
|
|
8664
|
+
authorization_endpoint: "https://www.tiktok.com/v2/auth/authorize/",
|
|
8665
|
+
token_endpoint: "https://open.tiktokapis.com/v2/oauth/token/",
|
|
8666
|
+
response_type: "code",
|
|
8667
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
8668
|
+
}
|
|
8669
|
+
};
|
|
8670
|
+
return {
|
|
8671
|
+
id: "tiktok",
|
|
8672
|
+
name: "TikTok",
|
|
8673
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/tiktok.png",
|
|
8674
|
+
description: "Read TikTok user profile data and user-authorized video metadata",
|
|
8675
|
+
category: "Social Media",
|
|
8676
|
+
tools: [...TIKTOK_TOOLS],
|
|
8677
|
+
oauth,
|
|
8678
|
+
async onInit(_client) {
|
|
8679
|
+
logger67.debug("TikTok integration initialized");
|
|
8680
|
+
},
|
|
8681
|
+
async onAfterConnect(_client) {
|
|
8682
|
+
logger67.debug("TikTok integration connected");
|
|
8683
|
+
}
|
|
8684
|
+
};
|
|
8685
|
+
}
|
|
8686
|
+
// src/integrations/trello.ts
|
|
8687
|
+
init_logger();
|
|
8688
|
+
var logger68 = createLogger("Trello");
|
|
8689
|
+
var TRELLO_TOOLS = [
|
|
8690
|
+
"trello_get_member",
|
|
8691
|
+
"trello_list_boards",
|
|
8692
|
+
"trello_get_board",
|
|
8693
|
+
"trello_list_lists",
|
|
8694
|
+
"trello_get_list",
|
|
8695
|
+
"trello_list_cards",
|
|
8696
|
+
"trello_get_card",
|
|
8697
|
+
"trello_create_card",
|
|
8698
|
+
"trello_update_card",
|
|
8699
|
+
"trello_delete_card",
|
|
8700
|
+
"trello_add_card_comment",
|
|
8701
|
+
"trello_search"
|
|
8702
|
+
];
|
|
8703
|
+
function encodeCredential(apiKey, memberToken) {
|
|
8704
|
+
const payload = JSON.stringify({ k: apiKey, t: memberToken });
|
|
8705
|
+
return `trello:${Buffer.from(payload).toString("base64url")}`;
|
|
8706
|
+
}
|
|
8707
|
+
function trelloIntegration(options = {}) {
|
|
8708
|
+
const apiKey = options.apiKey ?? getEnv("TRELLO_API_KEY");
|
|
8709
|
+
const memberToken = options.memberToken ?? getEnv("TRELLO_TOKEN");
|
|
8710
|
+
if (!apiKey || !memberToken) {
|
|
8711
|
+
throw new Error("trelloIntegration requires apiKey/memberToken or TRELLO_API_KEY/TRELLO_TOKEN");
|
|
8712
|
+
}
|
|
8713
|
+
return {
|
|
8714
|
+
id: "trello",
|
|
8715
|
+
name: "Trello",
|
|
8716
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/trello.png",
|
|
8717
|
+
description: "Manage Trello boards, lists, cards, comments, and search",
|
|
8718
|
+
category: "Productivity",
|
|
8719
|
+
tools: [...TRELLO_TOOLS],
|
|
8720
|
+
authType: "apiKey",
|
|
8721
|
+
getHeaders() {
|
|
8722
|
+
return { Authorization: `Bearer ${encodeCredential(apiKey, memberToken)}` };
|
|
8723
|
+
},
|
|
8724
|
+
async onInit(_client) {
|
|
8725
|
+
logger68.debug("Trello integration initialized");
|
|
8726
|
+
},
|
|
8727
|
+
async onAfterConnect(_client) {
|
|
8728
|
+
logger68.debug("Trello integration connected");
|
|
8729
|
+
}
|
|
8730
|
+
};
|
|
8731
|
+
}
|
|
8732
|
+
// src/integrations/typeform.ts
|
|
8733
|
+
init_logger();
|
|
8734
|
+
var logger69 = createLogger("Typeform");
|
|
8735
|
+
var TYPEFORM_SCOPES = [
|
|
8736
|
+
"offline",
|
|
8737
|
+
"accounts:read",
|
|
8738
|
+
"forms:read",
|
|
8739
|
+
"forms:write",
|
|
8740
|
+
"responses:read",
|
|
8741
|
+
"workspaces:read"
|
|
8742
|
+
];
|
|
8743
|
+
var TYPEFORM_TOOLS = [
|
|
8744
|
+
"typeform_get_me",
|
|
8745
|
+
"typeform_list_workspaces",
|
|
8746
|
+
"typeform_get_workspace",
|
|
8747
|
+
"typeform_list_forms",
|
|
8748
|
+
"typeform_get_form",
|
|
8749
|
+
"typeform_create_form",
|
|
8750
|
+
"typeform_update_form",
|
|
8751
|
+
"typeform_delete_form",
|
|
8752
|
+
"typeform_list_responses"
|
|
8753
|
+
];
|
|
8754
|
+
function typeformIntegration(config = {}) {
|
|
8755
|
+
const oauth = {
|
|
8756
|
+
provider: "typeform",
|
|
8757
|
+
clientId: config.clientId ?? getEnv("TYPEFORM_CLIENT_ID"),
|
|
8758
|
+
clientSecret: config.clientSecret ?? getEnv("TYPEFORM_CLIENT_SECRET"),
|
|
8759
|
+
scopes: config.scopes ?? [...TYPEFORM_SCOPES],
|
|
8760
|
+
optionalScopes: config.optionalScopes,
|
|
8761
|
+
redirectUri: config.redirectUri,
|
|
8762
|
+
config: {
|
|
8763
|
+
authorization_endpoint: "https://api.typeform.com/oauth/authorize",
|
|
8764
|
+
token_endpoint: "https://api.typeform.com/oauth/token",
|
|
8765
|
+
response_type: "code",
|
|
8766
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
8767
|
+
}
|
|
8768
|
+
};
|
|
8769
|
+
return {
|
|
8770
|
+
id: "typeform",
|
|
8771
|
+
name: "Typeform",
|
|
8772
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/typeform.png",
|
|
8773
|
+
description: "Manage Typeform workspaces, forms, and responses",
|
|
8774
|
+
category: "Productivity",
|
|
8775
|
+
tools: [...TYPEFORM_TOOLS],
|
|
8776
|
+
oauth,
|
|
8777
|
+
async onInit(_client) {
|
|
8778
|
+
logger69.debug("Typeform integration initialized");
|
|
8779
|
+
},
|
|
8780
|
+
async onAfterConnect(_client) {
|
|
8781
|
+
logger69.debug("Typeform integration connected");
|
|
8782
|
+
}
|
|
8783
|
+
};
|
|
8784
|
+
}
|
|
8785
|
+
// src/integrations/xero.ts
|
|
8786
|
+
init_logger();
|
|
8787
|
+
var logger70 = createLogger("Xero");
|
|
8788
|
+
var XERO_SCOPES = [
|
|
8789
|
+
"openid",
|
|
8790
|
+
"profile",
|
|
8791
|
+
"email",
|
|
8792
|
+
"offline_access",
|
|
8793
|
+
"accounting.settings",
|
|
8794
|
+
"accounting.transactions",
|
|
8795
|
+
"accounting.contacts",
|
|
8796
|
+
"accounting.attachments"
|
|
8797
|
+
];
|
|
8798
|
+
var XERO_TOOLS = [
|
|
8799
|
+
"xero_list_connections",
|
|
8800
|
+
"xero_get_organisation",
|
|
8801
|
+
"xero_list_accounts",
|
|
8802
|
+
"xero_list_contacts",
|
|
8803
|
+
"xero_get_contact",
|
|
8804
|
+
"xero_create_contact",
|
|
8805
|
+
"xero_list_invoices",
|
|
8806
|
+
"xero_get_invoice",
|
|
8807
|
+
"xero_create_invoice",
|
|
8808
|
+
"xero_list_bank_transactions"
|
|
8809
|
+
];
|
|
8810
|
+
function xeroIntegration(config = {}) {
|
|
8811
|
+
const oauth = {
|
|
8812
|
+
provider: "xero",
|
|
8813
|
+
clientId: config.clientId ?? getEnv("XERO_CLIENT_ID"),
|
|
8814
|
+
clientSecret: config.clientSecret ?? getEnv("XERO_CLIENT_SECRET"),
|
|
8815
|
+
scopes: config.scopes ?? [...XERO_SCOPES],
|
|
8816
|
+
optionalScopes: config.optionalScopes,
|
|
8817
|
+
redirectUri: config.redirectUri,
|
|
8818
|
+
config: {
|
|
8819
|
+
authorization_endpoint: "https://login.xero.com/identity/connect/authorize",
|
|
8820
|
+
token_endpoint: "https://identity.xero.com/connect/token",
|
|
8821
|
+
response_type: "code",
|
|
8822
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
8823
|
+
}
|
|
8824
|
+
};
|
|
8825
|
+
return {
|
|
8826
|
+
id: "xero",
|
|
8827
|
+
name: "Xero",
|
|
8828
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/xero.png",
|
|
8829
|
+
description: "Manage Xero organisations, accounts, contacts, invoices, and bank transactions",
|
|
8830
|
+
category: "Finance",
|
|
8831
|
+
tools: [...XERO_TOOLS],
|
|
8832
|
+
oauth,
|
|
8833
|
+
async onInit(_client) {
|
|
8834
|
+
logger70.debug("Xero integration initialized");
|
|
8835
|
+
},
|
|
8836
|
+
async onAfterConnect(_client) {
|
|
8837
|
+
logger70.debug("Xero integration connected");
|
|
8838
|
+
}
|
|
8839
|
+
};
|
|
8840
|
+
}
|
|
8841
|
+
// src/integrations/attio.ts
|
|
8842
|
+
init_logger();
|
|
8843
|
+
var logger71 = createLogger("Attio");
|
|
8844
|
+
var ATTIO_SCOPES = [
|
|
8845
|
+
"record_permission:read-write",
|
|
8846
|
+
"object_configuration:read",
|
|
8847
|
+
"user_management:read",
|
|
8848
|
+
"task:read"
|
|
8849
|
+
];
|
|
8850
|
+
var ATTIO_TOOLS = [
|
|
8851
|
+
"attio_get_self",
|
|
8852
|
+
"attio_query_people",
|
|
8853
|
+
"attio_get_person",
|
|
8854
|
+
"attio_create_person",
|
|
8855
|
+
"attio_update_person",
|
|
8856
|
+
"attio_assert_person",
|
|
8857
|
+
"attio_query_companies",
|
|
8858
|
+
"attio_get_company",
|
|
8859
|
+
"attio_create_company",
|
|
8860
|
+
"attio_update_company",
|
|
8861
|
+
"attio_assert_company",
|
|
8862
|
+
"attio_list_tasks",
|
|
8863
|
+
"attio_get_task"
|
|
8864
|
+
];
|
|
8865
|
+
function attioIntegration(config = {}) {
|
|
8866
|
+
const oauth = {
|
|
8867
|
+
provider: "attio",
|
|
8868
|
+
clientId: config.clientId ?? getEnv("ATTIO_CLIENT_ID"),
|
|
8869
|
+
clientSecret: config.clientSecret ?? getEnv("ATTIO_CLIENT_SECRET"),
|
|
8870
|
+
scopes: config.scopes ?? [...ATTIO_SCOPES],
|
|
8871
|
+
optionalScopes: config.optionalScopes,
|
|
8872
|
+
redirectUri: config.redirectUri,
|
|
8873
|
+
config: {
|
|
8874
|
+
authorization_endpoint: "https://app.attio.com/authorize",
|
|
8875
|
+
token_endpoint: "https://app.attio.com/oauth/token",
|
|
8876
|
+
response_type: "code",
|
|
8877
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
8878
|
+
}
|
|
8879
|
+
};
|
|
8880
|
+
return {
|
|
8881
|
+
id: "attio",
|
|
8882
|
+
name: "Attio",
|
|
8883
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/attio.png",
|
|
8884
|
+
description: "Manage Attio people, companies, records, and tasks",
|
|
8885
|
+
category: "Business",
|
|
8886
|
+
tools: [...ATTIO_TOOLS],
|
|
8887
|
+
oauth,
|
|
8888
|
+
async onInit(_client) {
|
|
8889
|
+
logger71.debug("Attio integration initialized");
|
|
8890
|
+
},
|
|
8891
|
+
async onAfterConnect(_client) {
|
|
8892
|
+
logger71.debug("Attio integration connected");
|
|
8893
|
+
}
|
|
8894
|
+
};
|
|
8895
|
+
}
|
|
8896
|
+
// src/integrations/gchat.ts
|
|
8897
|
+
init_logger();
|
|
8898
|
+
var logger72 = createLogger("Google Chat");
|
|
8899
|
+
var GCHAT_SCOPES = [
|
|
8900
|
+
"https://www.googleapis.com/auth/chat.messages",
|
|
8901
|
+
"https://www.googleapis.com/auth/chat.spaces.readonly"
|
|
8902
|
+
];
|
|
8903
|
+
var GCHAT_TOOLS = [
|
|
8904
|
+
"gchat_delete_message",
|
|
8905
|
+
"gchat_get_message",
|
|
8906
|
+
"gchat_get_space",
|
|
8907
|
+
"gchat_list_members",
|
|
8908
|
+
"gchat_list_messages",
|
|
8909
|
+
"gchat_list_spaces",
|
|
8910
|
+
"gchat_send_message",
|
|
8911
|
+
"gchat_update_message"
|
|
8912
|
+
];
|
|
8913
|
+
function gchatIntegration(config = {}) {
|
|
8914
|
+
const oauth = {
|
|
8915
|
+
provider: "gchat",
|
|
8916
|
+
clientId: config.clientId ?? getEnv("GCHAT_CLIENT_ID"),
|
|
8917
|
+
clientSecret: config.clientSecret ?? getEnv("GCHAT_CLIENT_SECRET"),
|
|
8918
|
+
scopes: config.scopes ?? [...GCHAT_SCOPES],
|
|
8919
|
+
optionalScopes: config.optionalScopes,
|
|
8920
|
+
redirectUri: config.redirectUri,
|
|
8921
|
+
config: {
|
|
8922
|
+
authorization_endpoint: "https://accounts.google.com/o/oauth2/v2/auth",
|
|
8923
|
+
token_endpoint: "https://oauth2.googleapis.com/token",
|
|
8924
|
+
response_type: "code",
|
|
8925
|
+
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
8926
|
+
}
|
|
8927
|
+
};
|
|
8928
|
+
return {
|
|
8929
|
+
id: "gchat",
|
|
8930
|
+
name: "Google Chat",
|
|
8931
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/google_chat.png",
|
|
8932
|
+
description: "List Google Chat spaces and manage messages and memberships",
|
|
8933
|
+
category: "Communication",
|
|
8934
|
+
tools: [...GCHAT_TOOLS],
|
|
8935
|
+
oauth,
|
|
8936
|
+
async onInit(_client) {
|
|
8937
|
+
logger72.debug("Google Chat integration initialized");
|
|
8938
|
+
},
|
|
8939
|
+
async onAfterConnect(_client) {
|
|
8940
|
+
logger72.debug("Google Chat integration connected");
|
|
8941
|
+
}
|
|
8942
|
+
};
|
|
8943
|
+
}
|
|
8944
|
+
// src/integrations/shopify.ts
|
|
8945
|
+
init_logger();
|
|
8946
|
+
var logger73 = createLogger("Shopify");
|
|
8947
|
+
var SHOPIFY_SCOPES = [
|
|
8948
|
+
"read_products",
|
|
8949
|
+
"write_products",
|
|
8950
|
+
"read_orders",
|
|
8951
|
+
"write_orders",
|
|
8952
|
+
"read_customers",
|
|
8953
|
+
"write_customers",
|
|
8954
|
+
"read_inventory",
|
|
8955
|
+
"write_inventory",
|
|
8956
|
+
"read_content",
|
|
8957
|
+
"write_content",
|
|
8958
|
+
"read_fulfillments",
|
|
8959
|
+
"write_fulfillments",
|
|
8960
|
+
"read_analytics"
|
|
8961
|
+
];
|
|
8962
|
+
var SHOPIFY_TOOLS = [
|
|
8963
|
+
"shopify_admin_graphql",
|
|
8964
|
+
"shopify_rest_get",
|
|
8965
|
+
"shopify_rest_post",
|
|
8966
|
+
"shopify_rest_put",
|
|
8967
|
+
"shopify_rest_delete",
|
|
8968
|
+
"shopify_get_shop"
|
|
8969
|
+
];
|
|
8970
|
+
function shopifyIntegration(config = {}) {
|
|
8971
|
+
const oauth = {
|
|
8972
|
+
provider: "shopify",
|
|
8973
|
+
clientId: config.clientId ?? getEnv("SHOPIFY_CLIENT_ID"),
|
|
8974
|
+
clientSecret: config.clientSecret ?? getEnv("SHOPIFY_CLIENT_SECRET"),
|
|
8975
|
+
scopes: config.scopes ?? [...SHOPIFY_SCOPES],
|
|
8976
|
+
optionalScopes: config.optionalScopes,
|
|
8977
|
+
redirectUri: config.redirectUri,
|
|
8978
|
+
config: {
|
|
8979
|
+
authorization_endpoint: "https://shopify.oauth.placeholder/admin/oauth/authorize",
|
|
8980
|
+
token_endpoint: "https://shopify.oauth.placeholder/admin/oauth/access_token",
|
|
8981
|
+
response_type: "code",
|
|
8982
|
+
grant_types_supported: ["authorization_code"],
|
|
8983
|
+
subdomain: config.shop ?? getEnv("SHOPIFY_SHOP")
|
|
8984
|
+
}
|
|
8985
|
+
};
|
|
8986
|
+
return {
|
|
8987
|
+
id: "shopify",
|
|
8988
|
+
name: "Shopify",
|
|
8989
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/shopify.png",
|
|
8990
|
+
description: "Route-complete Shopify Admin access through GraphQL and REST tools",
|
|
8991
|
+
category: "Business",
|
|
8992
|
+
tools: [...SHOPIFY_TOOLS],
|
|
8993
|
+
oauth,
|
|
8994
|
+
async onInit(_client) {
|
|
8995
|
+
logger73.debug("Shopify integration initialized");
|
|
8996
|
+
},
|
|
8997
|
+
async onAfterConnect(_client) {
|
|
8998
|
+
logger73.debug("Shopify integration connected");
|
|
8999
|
+
}
|
|
9000
|
+
};
|
|
9001
|
+
}
|
|
9002
|
+
// src/integrations/convex.ts
|
|
9003
|
+
init_logger();
|
|
9004
|
+
var logger74 = createLogger("Convex");
|
|
9005
|
+
var CONVEX_TOOLS = [
|
|
9006
|
+
"convex_management_token_details",
|
|
9007
|
+
"convex_management_list_projects",
|
|
9008
|
+
"convex_management_create_project",
|
|
9009
|
+
"convex_management_get_project",
|
|
9010
|
+
"convex_management_delete_project",
|
|
9011
|
+
"convex_management_list_deployments",
|
|
9012
|
+
"convex_management_list_team_deployments",
|
|
9013
|
+
"convex_management_get_deployment",
|
|
9014
|
+
"convex_management_create_deployment",
|
|
9015
|
+
"convex_management_update_deployment",
|
|
9016
|
+
"convex_management_delete_deployment",
|
|
9017
|
+
"convex_management_list_deployment_regions",
|
|
9018
|
+
"convex_management_list_deployment_classes",
|
|
9019
|
+
"convex_management_list_default_environment_variables",
|
|
9020
|
+
"convex_management_update_default_environment_variables",
|
|
9021
|
+
"convex_deployment_list_environment_variables",
|
|
9022
|
+
"convex_deployment_update_environment_variables"
|
|
9023
|
+
];
|
|
9024
|
+
function convexIntegration(options = {}) {
|
|
9025
|
+
const accessToken = options.accessToken ?? getEnv("CONVEX_ACCESS_TOKEN");
|
|
9026
|
+
if (!accessToken) {
|
|
9027
|
+
throw new Error("convexIntegration requires accessToken or CONVEX_ACCESS_TOKEN");
|
|
9028
|
+
}
|
|
9029
|
+
return {
|
|
9030
|
+
id: "convex",
|
|
9031
|
+
name: "Convex",
|
|
9032
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/convex.png",
|
|
9033
|
+
description: "Manage Convex projects, deployments, regions, classes, and environment variables",
|
|
9034
|
+
category: "Infrastructure",
|
|
9035
|
+
tools: [...CONVEX_TOOLS],
|
|
9036
|
+
authType: "apiKey",
|
|
9037
|
+
getHeaders() {
|
|
9038
|
+
return { Authorization: `Bearer ${accessToken}` };
|
|
9039
|
+
},
|
|
9040
|
+
async onInit(_client) {
|
|
9041
|
+
logger74.debug("Convex integration initialized");
|
|
9042
|
+
},
|
|
9043
|
+
async onAfterConnect(_client) {
|
|
9044
|
+
logger74.debug("Convex integration connected");
|
|
9045
|
+
}
|
|
9046
|
+
};
|
|
9047
|
+
}
|
|
9048
|
+
// src/integrations/etoro.ts
|
|
9049
|
+
init_logger();
|
|
9050
|
+
var logger75 = createLogger("eToro");
|
|
9051
|
+
var ETORO_TOOLS = [
|
|
9052
|
+
"etoro_get_identity",
|
|
9053
|
+
"etoro_get_portfolio",
|
|
9054
|
+
"etoro_search_instruments",
|
|
9055
|
+
"etoro_get_instrument_rates",
|
|
9056
|
+
"etoro_list_trade_history",
|
|
9057
|
+
"etoro_list_watchlists"
|
|
9058
|
+
];
|
|
9059
|
+
function etoroIntegration(options = {}) {
|
|
9060
|
+
const publicApiKey = options.publicApiKey ?? getEnv("ETORO_PUBLIC_API_KEY");
|
|
9061
|
+
const userKey = options.userKey ?? getEnv("ETORO_USER_KEY");
|
|
9062
|
+
if (!publicApiKey || !userKey) {
|
|
9063
|
+
throw new Error("etoroIntegration requires publicApiKey/userKey or ETORO_PUBLIC_API_KEY/ETORO_USER_KEY");
|
|
9064
|
+
}
|
|
9065
|
+
return {
|
|
9066
|
+
id: "etoro",
|
|
9067
|
+
name: "eToro",
|
|
9068
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/etoro.png",
|
|
9069
|
+
description: "Access eToro Public API identity, portfolio, market data, trade history, and watchlists",
|
|
9070
|
+
category: "Finance",
|
|
9071
|
+
tools: [...ETORO_TOOLS],
|
|
9072
|
+
authType: "apiKey",
|
|
9073
|
+
getHeaders() {
|
|
9074
|
+
return {
|
|
9075
|
+
"X-Api-Key": publicApiKey,
|
|
9076
|
+
"X-User-Key": userKey
|
|
9077
|
+
};
|
|
9078
|
+
},
|
|
9079
|
+
async onInit(_client) {
|
|
9080
|
+
logger75.debug("eToro integration initialized");
|
|
9081
|
+
},
|
|
9082
|
+
async onAfterConnect(_client) {
|
|
9083
|
+
logger75.debug("eToro integration connected");
|
|
9084
|
+
}
|
|
9085
|
+
};
|
|
9086
|
+
}
|
|
9087
|
+
// src/integrations/alpaca.ts
|
|
9088
|
+
init_logger();
|
|
9089
|
+
var logger76 = createLogger("Alpaca");
|
|
9090
|
+
var ALPACA_TOOLS = [
|
|
9091
|
+
"alpaca_get_account",
|
|
9092
|
+
"alpaca_list_positions",
|
|
9093
|
+
"alpaca_get_position",
|
|
9094
|
+
"alpaca_list_orders",
|
|
9095
|
+
"alpaca_get_order",
|
|
9096
|
+
"alpaca_create_order",
|
|
9097
|
+
"alpaca_cancel_order",
|
|
9098
|
+
"alpaca_cancel_all_orders",
|
|
9099
|
+
"alpaca_get_clock",
|
|
9100
|
+
"alpaca_get_calendar",
|
|
9101
|
+
"alpaca_list_assets",
|
|
9102
|
+
"alpaca_get_asset",
|
|
9103
|
+
"alpaca_get_portfolio_history"
|
|
9104
|
+
];
|
|
9105
|
+
function alpacaIntegration(options = {}) {
|
|
9106
|
+
const apiKeyId = options.apiKeyId ?? getEnv("ALPACA_API_KEY_ID");
|
|
9107
|
+
const apiSecretKey = options.apiSecretKey ?? getEnv("ALPACA_API_SECRET_KEY");
|
|
9108
|
+
if (!apiKeyId || !apiSecretKey) {
|
|
9109
|
+
throw new Error("alpacaIntegration requires apiKeyId and apiSecretKey (or ALPACA_API_KEY_ID and ALPACA_API_SECRET_KEY)");
|
|
9110
|
+
}
|
|
9111
|
+
const environment = options.environment ?? "paper";
|
|
9112
|
+
return {
|
|
9113
|
+
id: "alpaca",
|
|
9114
|
+
name: "Alpaca",
|
|
9115
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/alpaca.png",
|
|
9116
|
+
description: "Trade US equities and crypto with Alpaca: account, orders, positions, clock, and assets",
|
|
9117
|
+
category: "Finance",
|
|
9118
|
+
tools: [...ALPACA_TOOLS],
|
|
9119
|
+
authType: "apiKey",
|
|
9120
|
+
getHeaders() {
|
|
9121
|
+
const headers = {
|
|
9122
|
+
"APCA-API-KEY-ID": apiKeyId,
|
|
9123
|
+
"APCA-API-SECRET-KEY": apiSecretKey
|
|
9124
|
+
};
|
|
9125
|
+
if (environment === "live") {
|
|
9126
|
+
headers["X-Integrate-Alpaca-Environment"] = "live";
|
|
9127
|
+
}
|
|
9128
|
+
return headers;
|
|
9129
|
+
},
|
|
9130
|
+
async onInit(_client) {
|
|
9131
|
+
logger76.debug("Alpaca integration initialized");
|
|
9132
|
+
},
|
|
9133
|
+
async onAfterConnect(_client) {
|
|
9134
|
+
logger76.debug("Alpaca integration connected");
|
|
9135
|
+
}
|
|
9136
|
+
};
|
|
9137
|
+
}
|
|
9138
|
+
// src/integrations/neon.ts
|
|
9139
|
+
init_logger();
|
|
9140
|
+
var logger77 = createLogger("Neon");
|
|
9141
|
+
var NEON_TOOLS = [
|
|
9142
|
+
"neon_list_api_keys",
|
|
9143
|
+
"neon_create_api_key",
|
|
9144
|
+
"neon_revoke_api_key",
|
|
9145
|
+
"neon_list_organizations",
|
|
9146
|
+
"neon_list_projects",
|
|
9147
|
+
"neon_list_shared_projects",
|
|
9148
|
+
"neon_create_project",
|
|
9149
|
+
"neon_get_project",
|
|
9150
|
+
"neon_update_project",
|
|
9151
|
+
"neon_delete_project",
|
|
9152
|
+
"neon_recover_project",
|
|
9153
|
+
"neon_list_branches",
|
|
9154
|
+
"neon_create_branch",
|
|
9155
|
+
"neon_get_branch",
|
|
9156
|
+
"neon_delete_branch",
|
|
9157
|
+
"neon_list_operations",
|
|
9158
|
+
"neon_get_operation",
|
|
9159
|
+
"neon_get_connection_uri"
|
|
9160
|
+
];
|
|
9161
|
+
function neonIntegration(options = {}) {
|
|
9162
|
+
const apiKey = options.apiKey ?? getEnv("NEON_API_KEY");
|
|
9163
|
+
if (!apiKey) {
|
|
9164
|
+
throw new Error("neonIntegration requires apiKey or NEON_API_KEY environment variable");
|
|
9165
|
+
}
|
|
9166
|
+
return {
|
|
9167
|
+
id: "neon",
|
|
9168
|
+
name: "Neon",
|
|
9169
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/neon.png",
|
|
9170
|
+
description: "Manage Neon Postgres projects, branches, API keys, and connection strings",
|
|
9171
|
+
category: "Infrastructure",
|
|
9172
|
+
tools: [...NEON_TOOLS],
|
|
9173
|
+
authType: "apiKey",
|
|
9174
|
+
getHeaders() {
|
|
9175
|
+
return {
|
|
9176
|
+
Authorization: `Bearer ${apiKey}`
|
|
9177
|
+
};
|
|
9178
|
+
},
|
|
9179
|
+
async onInit(_client) {
|
|
9180
|
+
logger77.debug("Neon integration initialized");
|
|
9181
|
+
},
|
|
9182
|
+
async onAfterConnect(_client) {
|
|
9183
|
+
logger77.debug("Neon integration connected");
|
|
9184
|
+
}
|
|
9185
|
+
};
|
|
9186
|
+
}
|
|
9187
|
+
// src/integrations/granola.ts
|
|
9188
|
+
var GRANOLA_TOOLS = [
|
|
9189
|
+
"granola_list_notes",
|
|
9190
|
+
"granola_get_note",
|
|
9191
|
+
"granola_list_folders"
|
|
9192
|
+
];
|
|
9193
|
+
function granolaIntegration(options) {
|
|
9194
|
+
if (!options.apiKey) {
|
|
9195
|
+
throw new Error("granolaIntegration requires an apiKey");
|
|
9196
|
+
}
|
|
9197
|
+
return {
|
|
9198
|
+
id: "granola",
|
|
9199
|
+
name: "Granola",
|
|
9200
|
+
tools: [...GRANOLA_TOOLS],
|
|
9201
|
+
authType: "apiKey",
|
|
9202
|
+
getHeaders() {
|
|
9203
|
+
return {
|
|
9204
|
+
Authorization: `Bearer ${options.apiKey}`
|
|
9205
|
+
};
|
|
9206
|
+
}
|
|
9207
|
+
};
|
|
9208
|
+
}
|
|
9209
|
+
// src/integrations/mercury.ts
|
|
9210
|
+
var MERCURY_TOOLS = [
|
|
9211
|
+
"mercury_get_organization",
|
|
9212
|
+
"mercury_list_accounts",
|
|
9213
|
+
"mercury_get_account",
|
|
9214
|
+
"mercury_get_account_cards",
|
|
9215
|
+
"mercury_list_account_transactions",
|
|
9216
|
+
"mercury_get_account_transaction",
|
|
9217
|
+
"mercury_list_account_statements",
|
|
9218
|
+
"mercury_download_statement_pdf",
|
|
9219
|
+
"mercury_list_transactions",
|
|
9220
|
+
"mercury_get_transaction",
|
|
9221
|
+
"mercury_update_transaction",
|
|
9222
|
+
"mercury_upload_transaction_attachment",
|
|
9223
|
+
"mercury_list_cards",
|
|
9224
|
+
"mercury_get_card",
|
|
9225
|
+
"mercury_create_card",
|
|
9226
|
+
"mercury_update_card",
|
|
9227
|
+
"mercury_freeze_card",
|
|
9228
|
+
"mercury_unfreeze_card",
|
|
9229
|
+
"mercury_cancel_card",
|
|
9230
|
+
"mercury_list_categories",
|
|
9231
|
+
"mercury_create_category",
|
|
9232
|
+
"mercury_update_category",
|
|
9233
|
+
"mercury_list_credit_accounts",
|
|
9234
|
+
"mercury_list_users",
|
|
9235
|
+
"mercury_get_user",
|
|
9236
|
+
"mercury_list_recipients",
|
|
9237
|
+
"mercury_get_recipient",
|
|
9238
|
+
"mercury_create_recipient",
|
|
9239
|
+
"mercury_update_recipient",
|
|
9240
|
+
"mercury_list_recipient_attachments",
|
|
9241
|
+
"mercury_upload_recipient_attachment",
|
|
9242
|
+
"mercury_list_customers",
|
|
9243
|
+
"mercury_get_customer",
|
|
9244
|
+
"mercury_create_customer",
|
|
9245
|
+
"mercury_update_customer",
|
|
9246
|
+
"mercury_delete_customer",
|
|
9247
|
+
"mercury_list_invoices",
|
|
9248
|
+
"mercury_get_invoice",
|
|
9249
|
+
"mercury_create_invoice",
|
|
9250
|
+
"mercury_update_invoice",
|
|
9251
|
+
"mercury_cancel_invoice",
|
|
9252
|
+
"mercury_list_invoice_attachments",
|
|
9253
|
+
"mercury_get_attachment",
|
|
9254
|
+
"mercury_download_invoice_pdf",
|
|
9255
|
+
"mercury_list_treasury_accounts",
|
|
9256
|
+
"mercury_list_treasury_transactions",
|
|
9257
|
+
"mercury_list_treasury_statements",
|
|
9258
|
+
"mercury_list_events",
|
|
9259
|
+
"mercury_get_event",
|
|
9260
|
+
"mercury_list_send_money_requests",
|
|
9261
|
+
"mercury_get_send_money_request",
|
|
9262
|
+
"mercury_list_safe_requests",
|
|
9263
|
+
"mercury_get_safe_request",
|
|
9264
|
+
"mercury_download_safe_request_document",
|
|
9265
|
+
"mercury_list_webhooks",
|
|
9266
|
+
"mercury_get_webhook",
|
|
9267
|
+
"mercury_create_webhook",
|
|
9268
|
+
"mercury_update_webhook",
|
|
9269
|
+
"mercury_delete_webhook",
|
|
9270
|
+
"mercury_verify_webhook",
|
|
9271
|
+
"mercury_create_internal_transfer",
|
|
9272
|
+
"mercury_send_money",
|
|
9273
|
+
"mercury_request_send_money"
|
|
9274
|
+
];
|
|
9275
|
+
function mercuryIntegration(options) {
|
|
9276
|
+
if (!options.apiKey) {
|
|
9277
|
+
throw new Error("mercuryIntegration requires an apiKey");
|
|
9278
|
+
}
|
|
9279
|
+
return {
|
|
9280
|
+
id: "mercury",
|
|
9281
|
+
name: "Mercury",
|
|
9282
|
+
tools: [...MERCURY_TOOLS],
|
|
9283
|
+
authType: "apiKey",
|
|
9284
|
+
getHeaders() {
|
|
9285
|
+
return {
|
|
9286
|
+
Authorization: `Bearer ${options.apiKey}`
|
|
9287
|
+
};
|
|
9288
|
+
}
|
|
9289
|
+
};
|
|
9290
|
+
}
|
|
9291
|
+
// src/integrations/aws.ts
|
|
9292
|
+
init_logger();
|
|
9293
|
+
var logger78 = createLogger("AWS");
|
|
9294
|
+
var AWS_TOOLS = [
|
|
9295
|
+
"aws_sts_get_caller_identity",
|
|
9296
|
+
"aws_ec2_describe_regions",
|
|
9297
|
+
"aws_ec2_describe_instances",
|
|
9298
|
+
"aws_s3_list_buckets",
|
|
9299
|
+
"aws_lambda_list_functions",
|
|
9300
|
+
"aws_cloudformation_list_stacks",
|
|
9301
|
+
"aws_iam_list_account_aliases"
|
|
9302
|
+
];
|
|
9303
|
+
function resolveCredentials(opts) {
|
|
9304
|
+
const c = opts.credentials;
|
|
9305
|
+
const accessKeyId = c?.accessKeyId ?? getEnv("AWS_ACCESS_KEY_ID");
|
|
9306
|
+
const secretAccessKey = c?.secretAccessKey ?? getEnv("AWS_SECRET_ACCESS_KEY");
|
|
9307
|
+
if (!accessKeyId || !secretAccessKey) {
|
|
9308
|
+
throw new Error("awsIntegration requires accessKeyId and secretAccessKey (or AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY)");
|
|
9309
|
+
}
|
|
9310
|
+
return {
|
|
9311
|
+
accessKeyId,
|
|
9312
|
+
secretAccessKey,
|
|
9313
|
+
sessionToken: c?.sessionToken ?? getEnv("AWS_SESSION_TOKEN"),
|
|
9314
|
+
region: c?.region ?? getEnv("AWS_REGION") ?? getEnv("AWS_DEFAULT_REGION")
|
|
9315
|
+
};
|
|
9316
|
+
}
|
|
9317
|
+
function encodeAwsCredentialsPayload(c) {
|
|
9318
|
+
const o = {
|
|
9319
|
+
accessKeyId: c.accessKeyId,
|
|
9320
|
+
secretAccessKey: c.secretAccessKey
|
|
9321
|
+
};
|
|
9322
|
+
if (c.sessionToken) {
|
|
9323
|
+
o.sessionToken = c.sessionToken;
|
|
9324
|
+
}
|
|
9325
|
+
if (c.region) {
|
|
9326
|
+
o.region = c.region;
|
|
9327
|
+
}
|
|
9328
|
+
return JSON.stringify(o);
|
|
9329
|
+
}
|
|
9330
|
+
function awsIntegration(options = {}) {
|
|
9331
|
+
const creds = resolveCredentials(options);
|
|
9332
|
+
return {
|
|
9333
|
+
id: "aws",
|
|
9334
|
+
name: "Amazon Web Services",
|
|
9335
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/aws.png",
|
|
9336
|
+
description: "Query AWS accounts and resources using SigV4 (control-plane read APIs: STS, EC2, S3, Lambda, CloudFormation, IAM).",
|
|
9337
|
+
category: "Infrastructure",
|
|
9338
|
+
tools: [...AWS_TOOLS],
|
|
9339
|
+
authType: "apiKey",
|
|
9340
|
+
getHeaders() {
|
|
9341
|
+
return {
|
|
9342
|
+
Authorization: `Bearer ${encodeAwsCredentialsPayload(creds)}`
|
|
9343
|
+
};
|
|
9344
|
+
},
|
|
9345
|
+
async onInit(_client) {
|
|
9346
|
+
logger78.debug("AWS integration initialized");
|
|
9347
|
+
},
|
|
9348
|
+
async onAfterConnect(_client) {
|
|
9349
|
+
logger78.debug("AWS integration connected");
|
|
9350
|
+
}
|
|
9351
|
+
};
|
|
9352
|
+
}
|
|
9353
|
+
// src/integrations/wix.ts
|
|
9354
|
+
init_logger();
|
|
9355
|
+
var logger79 = createLogger("Wix");
|
|
9356
|
+
var WIX_TOOLS = [
|
|
9357
|
+
"wix_query_products",
|
|
9358
|
+
"wix_get_product",
|
|
9359
|
+
"wix_create_product",
|
|
9360
|
+
"wix_update_product",
|
|
9361
|
+
"wix_search_orders",
|
|
9362
|
+
"wix_get_order"
|
|
9363
|
+
];
|
|
9364
|
+
function wixIntegration(options = {}) {
|
|
9365
|
+
const apiKey = options.apiKey ?? getEnv("WIX_API_KEY");
|
|
9366
|
+
const siteId = options.siteId ?? getEnv("WIX_SITE_ID");
|
|
9367
|
+
if (!apiKey) {
|
|
9368
|
+
throw new Error("wixIntegration requires apiKey or WIX_API_KEY environment variable");
|
|
9369
|
+
}
|
|
9370
|
+
if (!siteId) {
|
|
9371
|
+
throw new Error("wixIntegration requires siteId or WIX_SITE_ID environment variable");
|
|
9372
|
+
}
|
|
9373
|
+
return {
|
|
9374
|
+
id: "wix",
|
|
9375
|
+
name: "Wix",
|
|
9376
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/wix.png",
|
|
9377
|
+
description: "Manage Wix site stores, products, and e-commerce orders via REST",
|
|
9378
|
+
category: "Business",
|
|
9379
|
+
tools: [...WIX_TOOLS],
|
|
9380
|
+
authType: "apiKey",
|
|
9381
|
+
getHeaders() {
|
|
9382
|
+
return {
|
|
9383
|
+
Authorization: apiKey,
|
|
9384
|
+
"wix-site-id": siteId
|
|
9385
|
+
};
|
|
9386
|
+
},
|
|
9387
|
+
async onInit(_client) {
|
|
9388
|
+
logger79.debug("Wix integration initialized");
|
|
9389
|
+
},
|
|
9390
|
+
async onAfterConnect(_client) {
|
|
9391
|
+
logger79.debug("Wix integration connected");
|
|
9392
|
+
}
|
|
9393
|
+
};
|
|
9394
|
+
}
|
|
9395
|
+
// src/integrations/mailchimp.ts
|
|
9396
|
+
var MAILCHIMP_TOOLS = [
|
|
9397
|
+
"mailchimp_ping",
|
|
9398
|
+
"mailchimp_list_audiences",
|
|
9399
|
+
"mailchimp_get_audience",
|
|
9400
|
+
"mailchimp_list_members",
|
|
9401
|
+
"mailchimp_get_member",
|
|
9402
|
+
"mailchimp_add_or_update_member",
|
|
9403
|
+
"mailchimp_archive_member",
|
|
9404
|
+
"mailchimp_list_campaigns"
|
|
9405
|
+
];
|
|
9406
|
+
function mailchimpIntegration(config = {}) {
|
|
9407
|
+
const oauth = {
|
|
9408
|
+
provider: "mailchimp",
|
|
9409
|
+
clientId: config.clientId ?? getEnv("MAILCHIMP_CLIENT_ID"),
|
|
9410
|
+
clientSecret: config.clientSecret ?? getEnv("MAILCHIMP_CLIENT_SECRET"),
|
|
9411
|
+
scopes: config.scopes ?? [],
|
|
9412
|
+
optionalScopes: config.optionalScopes,
|
|
9413
|
+
redirectUri: config.redirectUri
|
|
9414
|
+
};
|
|
9415
|
+
return {
|
|
9416
|
+
id: "mailchimp",
|
|
9417
|
+
name: "Mailchimp",
|
|
9418
|
+
tools: [...MAILCHIMP_TOOLS],
|
|
9419
|
+
oauth
|
|
9420
|
+
};
|
|
9421
|
+
}
|
|
9422
|
+
// src/integrations/monday.ts
|
|
9423
|
+
init_logger();
|
|
9424
|
+
var logger80 = createLogger("Monday");
|
|
9425
|
+
var MONDAY_TOOLS = [
|
|
9426
|
+
"monday_me",
|
|
9427
|
+
"monday_list_workspaces",
|
|
9428
|
+
"monday_list_boards",
|
|
9429
|
+
"monday_get_board",
|
|
9430
|
+
"monday_list_board_items",
|
|
9431
|
+
"monday_next_items_page",
|
|
9432
|
+
"monday_get_items",
|
|
9433
|
+
"monday_create_item",
|
|
9434
|
+
"monday_update_item_columns",
|
|
9435
|
+
"monday_create_update",
|
|
9436
|
+
"monday_delete_item"
|
|
9437
|
+
];
|
|
9438
|
+
function mondayIntegration(config = {}) {
|
|
9439
|
+
const oauth = {
|
|
9440
|
+
provider: "monday",
|
|
9441
|
+
clientId: config.clientId ?? getEnv("MONDAY_CLIENT_ID"),
|
|
9442
|
+
clientSecret: config.clientSecret ?? getEnv("MONDAY_CLIENT_SECRET"),
|
|
9443
|
+
scopes: config.scopes ?? [],
|
|
9444
|
+
redirectUri: config.redirectUri,
|
|
9445
|
+
config: {
|
|
9446
|
+
authorization_endpoint: "https://auth.monday.com/oauth2/authorize",
|
|
9447
|
+
token_endpoint: "https://auth.monday.com/oauth2/token",
|
|
9448
|
+
response_type: "code",
|
|
9449
|
+
grant_types_supported: ["authorization_code"]
|
|
9450
|
+
}
|
|
9451
|
+
};
|
|
9452
|
+
return {
|
|
9453
|
+
id: "monday",
|
|
9454
|
+
name: "Monday.com",
|
|
9455
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/monday.png",
|
|
9456
|
+
description: "Manage Monday.com boards, items, columns, and updates",
|
|
9457
|
+
category: "Productivity",
|
|
9458
|
+
tools: [...MONDAY_TOOLS],
|
|
9459
|
+
oauth,
|
|
9460
|
+
async onInit(_client) {
|
|
9461
|
+
logger80.debug("Monday.com integration initialized");
|
|
9462
|
+
},
|
|
9463
|
+
async onAfterConnect(_client) {
|
|
9464
|
+
logger80.debug("Monday.com integration connected");
|
|
9465
|
+
}
|
|
9466
|
+
};
|
|
9467
|
+
}
|
|
9468
|
+
// src/integrations/binance.ts
|
|
9469
|
+
init_logger();
|
|
9470
|
+
var logger81 = createLogger("Binance");
|
|
9471
|
+
var BINANCE_TOOLS = [
|
|
9472
|
+
"binance_ping",
|
|
9473
|
+
"binance_get_server_time",
|
|
9474
|
+
"binance_get_exchange_info",
|
|
9475
|
+
"binance_get_ticker_price",
|
|
9476
|
+
"binance_get_ticker_24hr",
|
|
9477
|
+
"binance_get_order_book",
|
|
9478
|
+
"binance_get_recent_trades",
|
|
9479
|
+
"binance_get_klines",
|
|
9480
|
+
"binance_get_account",
|
|
9481
|
+
"binance_get_open_orders",
|
|
9482
|
+
"binance_get_all_orders",
|
|
9483
|
+
"binance_get_my_trades"
|
|
9484
|
+
];
|
|
9485
|
+
function normalizeBaseUrl(url) {
|
|
9486
|
+
const u = (url ?? "").trim().replace(/\/+$/, "");
|
|
9487
|
+
return u || "https://api.binance.com";
|
|
9488
|
+
}
|
|
9489
|
+
function binanceIntegration(options = {}) {
|
|
9490
|
+
const apiKey = options.apiKey ?? getEnv("BINANCE_API_KEY");
|
|
9491
|
+
const secret = options.secret ?? getEnv("BINANCE_SECRET_KEY");
|
|
9492
|
+
if (!apiKey || !secret) {
|
|
9493
|
+
throw new Error("binanceIntegration requires apiKey and secret (or BINANCE_API_KEY and BINANCE_SECRET_KEY environment variables)");
|
|
9494
|
+
}
|
|
9495
|
+
const baseUrl = normalizeBaseUrl(options.baseUrl);
|
|
9496
|
+
return {
|
|
9497
|
+
id: "binance",
|
|
9498
|
+
name: "Binance",
|
|
9499
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/binance.png",
|
|
9500
|
+
description: "Read Binance Spot market data and account information with API keys scoped to reading only",
|
|
9501
|
+
category: "Finance",
|
|
9502
|
+
tools: [...BINANCE_TOOLS],
|
|
9503
|
+
authType: "apiKey",
|
|
9504
|
+
getHeaders() {
|
|
9505
|
+
return {
|
|
9506
|
+
Authorization: `Bearer ${apiKey}`,
|
|
9507
|
+
"X-MBX-APIKEY": apiKey,
|
|
9508
|
+
"X-Binance-Api-Secret": secret,
|
|
9509
|
+
"X-Binance-Base-Url": baseUrl
|
|
9510
|
+
};
|
|
9511
|
+
},
|
|
9512
|
+
async onInit(_client) {
|
|
9513
|
+
logger81.debug("Binance integration initialized");
|
|
9514
|
+
},
|
|
9515
|
+
async onAfterConnect(_client) {
|
|
9516
|
+
logger81.debug("Binance integration connected");
|
|
9517
|
+
}
|
|
9518
|
+
};
|
|
9519
|
+
}
|
|
9520
|
+
// src/integrations/canva.ts
|
|
9521
|
+
init_logger();
|
|
9522
|
+
var logger82 = createLogger("Canva");
|
|
9523
|
+
var CANVA_TOOLS = [
|
|
9524
|
+
"canva_get_me",
|
|
9525
|
+
"canva_get_profile",
|
|
9526
|
+
"canva_list_designs",
|
|
9527
|
+
"canva_get_design",
|
|
9528
|
+
"canva_get_design_export_formats",
|
|
9529
|
+
"canva_create_design",
|
|
9530
|
+
"canva_get_folder",
|
|
9531
|
+
"canva_list_folder_items",
|
|
9532
|
+
"canva_create_folder",
|
|
9533
|
+
"canva_update_folder",
|
|
9534
|
+
"canva_delete_folder",
|
|
9535
|
+
"canva_list_brand_templates",
|
|
9536
|
+
"canva_get_brand_template",
|
|
9537
|
+
"canva_create_export_job",
|
|
9538
|
+
"canva_get_export_job"
|
|
9539
|
+
];
|
|
9540
|
+
function canvaIntegration(config = {}) {
|
|
9541
|
+
const oauth = {
|
|
9542
|
+
provider: "canva",
|
|
9543
|
+
clientId: config.clientId ?? getEnv("CANVA_CLIENT_ID"),
|
|
9544
|
+
clientSecret: config.clientSecret ?? getEnv("CANVA_CLIENT_SECRET"),
|
|
9545
|
+
scopes: config.scopes,
|
|
9546
|
+
optionalScopes: config.optionalScopes,
|
|
9547
|
+
redirectUri: config.redirectUri,
|
|
9548
|
+
config: { ...config }
|
|
9549
|
+
};
|
|
9550
|
+
return {
|
|
9551
|
+
id: "canva",
|
|
9552
|
+
name: "Canva",
|
|
9553
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/canva.png",
|
|
9554
|
+
description: "List and create Canva designs, manage folders, and export assets",
|
|
9555
|
+
category: "Productivity",
|
|
9556
|
+
tools: [...CANVA_TOOLS],
|
|
9557
|
+
oauth,
|
|
9558
|
+
async onInit(_client) {
|
|
9559
|
+
logger82.debug("Canva integration initialized");
|
|
9560
|
+
},
|
|
9561
|
+
async onAfterConnect(_client) {
|
|
9562
|
+
logger82.debug("Canva integration connected");
|
|
9563
|
+
}
|
|
9564
|
+
};
|
|
9565
|
+
}
|
|
9566
|
+
// src/integrations/clerk.ts
|
|
9567
|
+
init_logger();
|
|
9568
|
+
var logger83 = createLogger("Clerk");
|
|
9569
|
+
var CLERK_TOOLS = [
|
|
9570
|
+
"clerk_list_users",
|
|
9571
|
+
"clerk_get_user",
|
|
9572
|
+
"clerk_create_user",
|
|
9573
|
+
"clerk_update_user",
|
|
9574
|
+
"clerk_delete_user",
|
|
9575
|
+
"clerk_list_organizations",
|
|
9576
|
+
"clerk_get_organization",
|
|
9577
|
+
"clerk_create_organization",
|
|
9578
|
+
"clerk_update_organization",
|
|
9579
|
+
"clerk_delete_organization",
|
|
9580
|
+
"clerk_list_sessions",
|
|
9581
|
+
"clerk_get_session",
|
|
9582
|
+
"clerk_revoke_session"
|
|
9583
|
+
];
|
|
9584
|
+
function clerkIntegration(options = {}) {
|
|
9585
|
+
const secretKey = options.secretKey ?? getEnv("CLERK_SECRET_KEY");
|
|
9586
|
+
if (!secretKey) {
|
|
9587
|
+
throw new Error("clerkIntegration requires secretKey or CLERK_SECRET_KEY environment variable");
|
|
9588
|
+
}
|
|
9589
|
+
return {
|
|
9590
|
+
id: "clerk",
|
|
9591
|
+
name: "Clerk",
|
|
9592
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/clerk.png",
|
|
9593
|
+
description: "Manage Clerk users, organizations, and sessions via the Backend API",
|
|
9594
|
+
category: "Business",
|
|
9595
|
+
tools: [...CLERK_TOOLS],
|
|
9596
|
+
authType: "apiKey",
|
|
9597
|
+
getHeaders() {
|
|
9598
|
+
return {
|
|
9599
|
+
Authorization: `Bearer ${secretKey}`
|
|
9600
|
+
};
|
|
9601
|
+
},
|
|
9602
|
+
async onInit(_client) {
|
|
9603
|
+
logger83.debug("Clerk integration initialized");
|
|
9604
|
+
},
|
|
9605
|
+
async onAfterConnect(_client) {
|
|
9606
|
+
logger83.debug("Clerk integration connected");
|
|
9607
|
+
}
|
|
9608
|
+
};
|
|
9609
|
+
}
|
|
9610
|
+
// src/integrations/clickup.ts
|
|
9611
|
+
init_logger();
|
|
9612
|
+
var logger84 = createLogger("ClickUp");
|
|
9613
|
+
var CLICKUP_TOOLS = [
|
|
9614
|
+
"clickup_get_authorized_user",
|
|
9615
|
+
"clickup_list_teams",
|
|
9616
|
+
"clickup_list_spaces",
|
|
9617
|
+
"clickup_list_folders",
|
|
9618
|
+
"clickup_list_lists_in_folder",
|
|
9619
|
+
"clickup_list_folderless_lists",
|
|
9620
|
+
"clickup_list_tasks",
|
|
9621
|
+
"clickup_get_task",
|
|
9622
|
+
"clickup_create_task",
|
|
9623
|
+
"clickup_update_task",
|
|
9624
|
+
"clickup_delete_task",
|
|
9625
|
+
"clickup_list_task_comments",
|
|
9626
|
+
"clickup_create_task_comment"
|
|
9627
|
+
];
|
|
9628
|
+
function clickupIntegration(config = {}) {
|
|
9629
|
+
const oauth = {
|
|
9630
|
+
provider: "clickup",
|
|
9631
|
+
clientId: config.clientId ?? getEnv("CLICKUP_CLIENT_ID"),
|
|
9632
|
+
clientSecret: config.clientSecret ?? getEnv("CLICKUP_CLIENT_SECRET"),
|
|
9633
|
+
scopes: config.scopes ?? [],
|
|
9634
|
+
optionalScopes: config.optionalScopes,
|
|
9635
|
+
redirectUri: config.redirectUri,
|
|
9636
|
+
config: {
|
|
9637
|
+
authorization_endpoint: "https://app.clickup.com/api",
|
|
9638
|
+
token_endpoint: "https://api.clickup.com/api/v2/oauth/token"
|
|
9639
|
+
}
|
|
9640
|
+
};
|
|
9641
|
+
return {
|
|
9642
|
+
id: "clickup",
|
|
9643
|
+
name: "ClickUp",
|
|
9644
|
+
tools: [...CLICKUP_TOOLS],
|
|
9645
|
+
oauth,
|
|
9646
|
+
async onInit(_client) {
|
|
9647
|
+
logger84.debug("ClickUp integration initialized");
|
|
9648
|
+
},
|
|
9649
|
+
async onAfterConnect(_client) {
|
|
9650
|
+
logger84.debug("ClickUp integration connected");
|
|
9651
|
+
}
|
|
9652
|
+
};
|
|
9653
|
+
}
|
|
9654
|
+
// src/integrations/cloudflare.ts
|
|
9655
|
+
init_logger();
|
|
9656
|
+
var logger85 = createLogger("Cloudflare");
|
|
9657
|
+
var CLOUDFLARE_TOOLS = [
|
|
9658
|
+
"cloudflare_verify_token",
|
|
9659
|
+
"cloudflare_get_user",
|
|
9660
|
+
"cloudflare_list_accounts",
|
|
9661
|
+
"cloudflare_get_account",
|
|
9662
|
+
"cloudflare_list_zones",
|
|
9663
|
+
"cloudflare_get_zone",
|
|
9664
|
+
"cloudflare_list_dns_records",
|
|
9665
|
+
"cloudflare_create_dns_record",
|
|
9666
|
+
"cloudflare_update_dns_record",
|
|
9667
|
+
"cloudflare_delete_dns_record",
|
|
9668
|
+
"cloudflare_purge_zone_cache",
|
|
9669
|
+
"cloudflare_list_worker_scripts"
|
|
9670
|
+
];
|
|
9671
|
+
var DEFAULT_SCOPES = [
|
|
9672
|
+
"account:read",
|
|
9673
|
+
"user:read",
|
|
9674
|
+
"zone:read",
|
|
9675
|
+
"workers:read",
|
|
9676
|
+
"workers:write",
|
|
9677
|
+
"pages:write",
|
|
9678
|
+
"offline_access"
|
|
9679
|
+
];
|
|
9680
|
+
function cloudflareIntegration(config = {}) {
|
|
9681
|
+
const apiToken = config.apiToken ?? getEnv("CLOUDFLARE_API_TOKEN");
|
|
9682
|
+
if (apiToken && apiToken.trim() !== "") {
|
|
9683
|
+
return {
|
|
9684
|
+
id: "cloudflare",
|
|
9685
|
+
name: "Cloudflare",
|
|
9686
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/cloudflare.png",
|
|
9687
|
+
description: "Manage Cloudflare zones, DNS, cache, and Workers via the Cloudflare API",
|
|
9688
|
+
category: "Infrastructure",
|
|
9689
|
+
tools: [...CLOUDFLARE_TOOLS],
|
|
9690
|
+
authType: "apiKey",
|
|
9691
|
+
getHeaders() {
|
|
9692
|
+
return { Authorization: `Bearer ${apiToken.trim()}` };
|
|
9693
|
+
},
|
|
9694
|
+
async onInit(_client) {
|
|
9695
|
+
logger85.debug("Cloudflare integration initialized (API token)");
|
|
9696
|
+
},
|
|
9697
|
+
async onAfterConnect(_client) {
|
|
9698
|
+
logger85.debug("Cloudflare integration connected");
|
|
9699
|
+
}
|
|
9700
|
+
};
|
|
9701
|
+
}
|
|
9702
|
+
const oauth = {
|
|
9703
|
+
provider: "cloudflare",
|
|
9704
|
+
clientId: config.clientId ?? getEnv("CLOUDFLARE_CLIENT_ID"),
|
|
9705
|
+
clientSecret: config.clientSecret ?? getEnv("CLOUDFLARE_CLIENT_SECRET"),
|
|
9706
|
+
scopes: config.scopes?.length ? config.scopes : [...DEFAULT_SCOPES],
|
|
6777
9707
|
redirectUri: config.redirectUri,
|
|
6778
9708
|
config: {
|
|
6779
|
-
authorization_endpoint: "https://
|
|
6780
|
-
token_endpoint: "https://
|
|
9709
|
+
authorization_endpoint: "https://dash.cloudflare.com/oauth2/auth",
|
|
9710
|
+
token_endpoint: "https://dash.cloudflare.com/oauth2/token",
|
|
6781
9711
|
response_type: "code",
|
|
6782
9712
|
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
6783
9713
|
}
|
|
6784
9714
|
};
|
|
6785
9715
|
return {
|
|
6786
|
-
id: "
|
|
6787
|
-
name: "
|
|
6788
|
-
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/
|
|
6789
|
-
description: "
|
|
6790
|
-
category: "
|
|
6791
|
-
tools: [...
|
|
9716
|
+
id: "cloudflare",
|
|
9717
|
+
name: "Cloudflare",
|
|
9718
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/cloudflare.png",
|
|
9719
|
+
description: "Manage Cloudflare zones, DNS, cache, and Workers via the Cloudflare API",
|
|
9720
|
+
category: "Infrastructure",
|
|
9721
|
+
tools: [...CLOUDFLARE_TOOLS],
|
|
6792
9722
|
oauth,
|
|
6793
9723
|
async onInit(_client) {
|
|
6794
|
-
|
|
9724
|
+
logger85.debug("Cloudflare integration initialized (OAuth)");
|
|
6795
9725
|
},
|
|
6796
9726
|
async onAfterConnect(_client) {
|
|
6797
|
-
|
|
9727
|
+
logger85.debug("Cloudflare integration connected");
|
|
6798
9728
|
}
|
|
6799
9729
|
};
|
|
6800
9730
|
}
|
|
6801
|
-
// src/integrations/
|
|
9731
|
+
// src/integrations/instagram.ts
|
|
6802
9732
|
init_logger();
|
|
6803
|
-
var
|
|
6804
|
-
var
|
|
6805
|
-
"
|
|
6806
|
-
"
|
|
6807
|
-
"
|
|
6808
|
-
"
|
|
6809
|
-
"
|
|
6810
|
-
"
|
|
6811
|
-
"netlify_update_site",
|
|
6812
|
-
"netlify_delete_site",
|
|
6813
|
-
"netlify_enable_site",
|
|
6814
|
-
"netlify_disable_site",
|
|
6815
|
-
"netlify_list_deploys",
|
|
6816
|
-
"netlify_get_deploy",
|
|
6817
|
-
"netlify_create_deploy",
|
|
6818
|
-
"netlify_cancel_deploy",
|
|
6819
|
-
"netlify_restore_deploy",
|
|
6820
|
-
"netlify_lock_deploy",
|
|
6821
|
-
"netlify_unlock_deploy",
|
|
6822
|
-
"netlify_list_builds",
|
|
6823
|
-
"netlify_get_build",
|
|
6824
|
-
"netlify_trigger_build",
|
|
6825
|
-
"netlify_list_env_vars",
|
|
6826
|
-
"netlify_get_env_var",
|
|
6827
|
-
"netlify_create_env_vars",
|
|
6828
|
-
"netlify_update_env_var",
|
|
6829
|
-
"netlify_delete_env_var",
|
|
6830
|
-
"netlify_list_build_hooks",
|
|
6831
|
-
"netlify_create_build_hook",
|
|
6832
|
-
"netlify_delete_build_hook",
|
|
6833
|
-
"netlify_list_forms",
|
|
6834
|
-
"netlify_list_form_submissions",
|
|
6835
|
-
"netlify_list_dns_zones",
|
|
6836
|
-
"netlify_get_dns_records",
|
|
6837
|
-
"netlify_create_dns_record",
|
|
6838
|
-
"netlify_delete_dns_record",
|
|
6839
|
-
"netlify_list_functions",
|
|
6840
|
-
"netlify_list_files",
|
|
6841
|
-
"netlify_purge_cache"
|
|
9733
|
+
var logger86 = createLogger("Instagram");
|
|
9734
|
+
var INSTAGRAM_SCOPES = [
|
|
9735
|
+
"pages_show_list",
|
|
9736
|
+
"pages_read_engagement",
|
|
9737
|
+
"instagram_basic",
|
|
9738
|
+
"instagram_manage_insights",
|
|
9739
|
+
"instagram_manage_comments",
|
|
9740
|
+
"instagram_content_publish"
|
|
6842
9741
|
];
|
|
6843
|
-
|
|
9742
|
+
var INSTAGRAM_TOOLS = [
|
|
9743
|
+
"instagram_list_pages",
|
|
9744
|
+
"instagram_get_profile",
|
|
9745
|
+
"instagram_list_media",
|
|
9746
|
+
"instagram_get_media",
|
|
9747
|
+
"instagram_list_comments",
|
|
9748
|
+
"instagram_reply_comment",
|
|
9749
|
+
"instagram_delete_comment",
|
|
9750
|
+
"instagram_hide_comment",
|
|
9751
|
+
"instagram_get_media_insights",
|
|
9752
|
+
"instagram_get_user_insights",
|
|
9753
|
+
"instagram_create_media_container",
|
|
9754
|
+
"instagram_publish_media",
|
|
9755
|
+
"instagram_list_stories",
|
|
9756
|
+
"instagram_list_tagged_media"
|
|
9757
|
+
];
|
|
9758
|
+
function instagramIntegration(config = {}) {
|
|
6844
9759
|
const oauth = {
|
|
6845
|
-
provider: "
|
|
6846
|
-
clientId: config.clientId ?? getEnv("
|
|
6847
|
-
clientSecret: config.clientSecret ?? getEnv("
|
|
6848
|
-
scopes: [],
|
|
9760
|
+
provider: "instagram",
|
|
9761
|
+
clientId: config.clientId ?? getEnv("INSTAGRAM_CLIENT_ID"),
|
|
9762
|
+
clientSecret: config.clientSecret ?? getEnv("INSTAGRAM_CLIENT_SECRET"),
|
|
9763
|
+
scopes: config.scopes ?? [...INSTAGRAM_SCOPES],
|
|
9764
|
+
optionalScopes: config.optionalScopes,
|
|
6849
9765
|
redirectUri: config.redirectUri,
|
|
6850
9766
|
config: {
|
|
6851
|
-
authorization_endpoint: "https://
|
|
6852
|
-
token_endpoint: "https://
|
|
9767
|
+
authorization_endpoint: "https://www.facebook.com/v21.0/dialog/oauth",
|
|
9768
|
+
token_endpoint: "https://graph.facebook.com/v21.0/oauth/access_token",
|
|
6853
9769
|
response_type: "code",
|
|
6854
|
-
grant_types_supported: ["authorization_code", "refresh_token"]
|
|
9770
|
+
grant_types_supported: ["authorization_code", "refresh_token"],
|
|
9771
|
+
...config
|
|
6855
9772
|
}
|
|
6856
9773
|
};
|
|
6857
9774
|
return {
|
|
6858
|
-
id: "
|
|
6859
|
-
name: "
|
|
6860
|
-
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/
|
|
6861
|
-
description: "
|
|
6862
|
-
category: "
|
|
6863
|
-
tools: [...
|
|
9775
|
+
id: "instagram",
|
|
9776
|
+
name: "Instagram",
|
|
9777
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/instagram.png",
|
|
9778
|
+
description: "Instagram Graph API for professional accounts — pages, media, comments, insights, stories, and publishing.",
|
|
9779
|
+
category: "Social Media",
|
|
9780
|
+
tools: [...INSTAGRAM_TOOLS],
|
|
6864
9781
|
oauth,
|
|
6865
9782
|
async onInit(_client) {
|
|
6866
|
-
|
|
9783
|
+
logger86.debug("Instagram integration initialized");
|
|
6867
9784
|
},
|
|
6868
9785
|
async onAfterConnect(_client) {
|
|
6869
|
-
|
|
9786
|
+
logger86.debug("Instagram integration connected");
|
|
6870
9787
|
}
|
|
6871
9788
|
};
|
|
6872
9789
|
}
|
|
6873
|
-
// src/integrations/
|
|
9790
|
+
// src/integrations/facebook.ts
|
|
6874
9791
|
init_logger();
|
|
6875
|
-
var
|
|
6876
|
-
var
|
|
6877
|
-
"
|
|
6878
|
-
"
|
|
6879
|
-
"
|
|
6880
|
-
"
|
|
9792
|
+
var logger87 = createLogger("Facebook");
|
|
9793
|
+
var FACEBOOK_SCOPES = [
|
|
9794
|
+
"public_profile",
|
|
9795
|
+
"email",
|
|
9796
|
+
"pages_show_list",
|
|
9797
|
+
"pages_read_engagement",
|
|
9798
|
+
"pages_manage_posts",
|
|
9799
|
+
"pages_read_user_content",
|
|
9800
|
+
"pages_manage_engagement"
|
|
6881
9801
|
];
|
|
6882
|
-
var
|
|
6883
|
-
"
|
|
6884
|
-
"
|
|
6885
|
-
"
|
|
6886
|
-
"
|
|
6887
|
-
"
|
|
6888
|
-
"
|
|
6889
|
-
"
|
|
6890
|
-
"
|
|
6891
|
-
"
|
|
6892
|
-
"
|
|
6893
|
-
"
|
|
6894
|
-
"jira_list_boards",
|
|
6895
|
-
"jira_list_sprints"
|
|
9802
|
+
var FACEBOOK_TOOLS = [
|
|
9803
|
+
"facebook_get_me",
|
|
9804
|
+
"facebook_list_pages",
|
|
9805
|
+
"facebook_list_page_posts",
|
|
9806
|
+
"facebook_get_object",
|
|
9807
|
+
"facebook_create_page_post",
|
|
9808
|
+
"facebook_delete_object",
|
|
9809
|
+
"facebook_list_comments",
|
|
9810
|
+
"facebook_publish_comment",
|
|
9811
|
+
"facebook_get_insights",
|
|
9812
|
+
"facebook_set_comment_visibility",
|
|
9813
|
+
"facebook_like_object"
|
|
6896
9814
|
];
|
|
6897
|
-
function
|
|
9815
|
+
function facebookIntegration(config = {}) {
|
|
6898
9816
|
const oauth = {
|
|
6899
|
-
provider: "
|
|
6900
|
-
clientId: config.clientId ?? getEnv("
|
|
6901
|
-
clientSecret: config.clientSecret ?? getEnv("
|
|
6902
|
-
scopes: config.scopes ?? [...
|
|
9817
|
+
provider: "facebook",
|
|
9818
|
+
clientId: config.clientId ?? getEnv("FACEBOOK_CLIENT_ID"),
|
|
9819
|
+
clientSecret: config.clientSecret ?? getEnv("FACEBOOK_CLIENT_SECRET"),
|
|
9820
|
+
scopes: config.scopes ?? [...FACEBOOK_SCOPES],
|
|
6903
9821
|
redirectUri: config.redirectUri,
|
|
6904
9822
|
config: {
|
|
6905
|
-
authorization_endpoint: "https://
|
|
6906
|
-
token_endpoint: "https://
|
|
9823
|
+
authorization_endpoint: "https://www.facebook.com/v18.0/dialog/oauth",
|
|
9824
|
+
token_endpoint: "https://graph.facebook.com/v18.0/oauth/access_token",
|
|
6907
9825
|
response_type: "code",
|
|
6908
|
-
grant_types_supported: ["authorization_code"
|
|
9826
|
+
grant_types_supported: ["authorization_code"]
|
|
6909
9827
|
}
|
|
6910
9828
|
};
|
|
6911
9829
|
return {
|
|
6912
|
-
id: "
|
|
6913
|
-
name: "
|
|
6914
|
-
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/
|
|
6915
|
-
description: "Manage
|
|
6916
|
-
category: "
|
|
6917
|
-
tools: [...
|
|
9830
|
+
id: "facebook",
|
|
9831
|
+
name: "Facebook",
|
|
9832
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/facebook.png",
|
|
9833
|
+
description: "Manage Facebook Page posts, comments, reactions, and insights via the Graph API",
|
|
9834
|
+
category: "Social Media",
|
|
9835
|
+
tools: [...FACEBOOK_TOOLS],
|
|
6918
9836
|
oauth,
|
|
6919
9837
|
async onInit(_client) {
|
|
6920
|
-
|
|
9838
|
+
logger87.debug("Facebook integration initialized");
|
|
6921
9839
|
},
|
|
6922
9840
|
async onAfterConnect(_client) {
|
|
6923
|
-
|
|
9841
|
+
logger87.debug("Facebook integration connected");
|
|
6924
9842
|
}
|
|
6925
9843
|
};
|
|
6926
9844
|
}
|
|
6927
|
-
// src/integrations/
|
|
6928
|
-
var
|
|
6929
|
-
"
|
|
6930
|
-
"
|
|
6931
|
-
"
|
|
9845
|
+
// src/integrations/ga4.ts
|
|
9846
|
+
var GA4_TOOLS = [
|
|
9847
|
+
"ga4_batch_run_reports",
|
|
9848
|
+
"ga4_get_property",
|
|
9849
|
+
"ga4_list_account_summaries",
|
|
9850
|
+
"ga4_run_realtime_report",
|
|
9851
|
+
"ga4_run_report"
|
|
6932
9852
|
];
|
|
6933
|
-
function
|
|
6934
|
-
|
|
6935
|
-
|
|
9853
|
+
function ga4Integration(config = {}) {
|
|
9854
|
+
const oauth = {
|
|
9855
|
+
provider: "ga4",
|
|
9856
|
+
clientId: config.clientId ?? getEnv("GA4_CLIENT_ID"),
|
|
9857
|
+
clientSecret: config.clientSecret ?? getEnv("GA4_CLIENT_SECRET"),
|
|
9858
|
+
scopes: config.scopes ?? ["https://www.googleapis.com/auth/analytics.readonly"],
|
|
9859
|
+
optionalScopes: config.optionalScopes,
|
|
9860
|
+
redirectUri: config.redirectUri
|
|
9861
|
+
};
|
|
9862
|
+
return {
|
|
9863
|
+
id: "ga4",
|
|
9864
|
+
name: "Google Analytics 4",
|
|
9865
|
+
tools: [...GA4_TOOLS],
|
|
9866
|
+
oauth
|
|
9867
|
+
};
|
|
9868
|
+
}
|
|
9869
|
+
// src/integrations/resend.ts
|
|
9870
|
+
init_logger();
|
|
9871
|
+
var logger88 = createLogger("Resend");
|
|
9872
|
+
var RESEND_TOOLS = [
|
|
9873
|
+
"resend_list_domains",
|
|
9874
|
+
"resend_get_domain",
|
|
9875
|
+
"resend_create_domain",
|
|
9876
|
+
"resend_delete_domain",
|
|
9877
|
+
"resend_verify_domain",
|
|
9878
|
+
"resend_send_email",
|
|
9879
|
+
"resend_get_email",
|
|
9880
|
+
"resend_cancel_scheduled_email"
|
|
9881
|
+
];
|
|
9882
|
+
function resendIntegration(options = {}) {
|
|
9883
|
+
const apiKey = options.apiKey ?? getEnv("RESEND_API_KEY");
|
|
9884
|
+
if (!apiKey) {
|
|
9885
|
+
throw new Error("resendIntegration requires apiKey or RESEND_API_KEY");
|
|
6936
9886
|
}
|
|
6937
9887
|
return {
|
|
6938
|
-
id: "
|
|
6939
|
-
name: "
|
|
6940
|
-
tools: [...
|
|
9888
|
+
id: "resend",
|
|
9889
|
+
name: "Resend",
|
|
9890
|
+
tools: [...RESEND_TOOLS],
|
|
6941
9891
|
authType: "apiKey",
|
|
6942
9892
|
getHeaders() {
|
|
6943
|
-
return {
|
|
6944
|
-
|
|
6945
|
-
|
|
9893
|
+
return { Authorization: `Bearer ${apiKey}` };
|
|
9894
|
+
},
|
|
9895
|
+
async onInit(_client) {
|
|
9896
|
+
logger88.debug("Resend integration initialized");
|
|
9897
|
+
},
|
|
9898
|
+
async onAfterConnect(_client) {
|
|
9899
|
+
logger88.debug("Resend integration connected");
|
|
6946
9900
|
}
|
|
6947
9901
|
};
|
|
6948
9902
|
}
|
|
6949
|
-
// src/integrations/
|
|
6950
|
-
var
|
|
6951
|
-
"
|
|
6952
|
-
"
|
|
6953
|
-
"
|
|
6954
|
-
"
|
|
6955
|
-
"
|
|
6956
|
-
"mercury_get_account_transaction",
|
|
6957
|
-
"mercury_list_account_statements",
|
|
6958
|
-
"mercury_download_statement_pdf",
|
|
6959
|
-
"mercury_list_transactions",
|
|
6960
|
-
"mercury_get_transaction",
|
|
6961
|
-
"mercury_update_transaction",
|
|
6962
|
-
"mercury_upload_transaction_attachment",
|
|
6963
|
-
"mercury_list_cards",
|
|
6964
|
-
"mercury_get_card",
|
|
6965
|
-
"mercury_create_card",
|
|
6966
|
-
"mercury_update_card",
|
|
6967
|
-
"mercury_freeze_card",
|
|
6968
|
-
"mercury_unfreeze_card",
|
|
6969
|
-
"mercury_cancel_card",
|
|
6970
|
-
"mercury_list_categories",
|
|
6971
|
-
"mercury_create_category",
|
|
6972
|
-
"mercury_update_category",
|
|
6973
|
-
"mercury_list_credit_accounts",
|
|
6974
|
-
"mercury_list_users",
|
|
6975
|
-
"mercury_get_user",
|
|
6976
|
-
"mercury_list_recipients",
|
|
6977
|
-
"mercury_get_recipient",
|
|
6978
|
-
"mercury_create_recipient",
|
|
6979
|
-
"mercury_update_recipient",
|
|
6980
|
-
"mercury_list_recipient_attachments",
|
|
6981
|
-
"mercury_upload_recipient_attachment",
|
|
6982
|
-
"mercury_list_customers",
|
|
6983
|
-
"mercury_get_customer",
|
|
6984
|
-
"mercury_create_customer",
|
|
6985
|
-
"mercury_update_customer",
|
|
6986
|
-
"mercury_delete_customer",
|
|
6987
|
-
"mercury_list_invoices",
|
|
6988
|
-
"mercury_get_invoice",
|
|
6989
|
-
"mercury_create_invoice",
|
|
6990
|
-
"mercury_update_invoice",
|
|
6991
|
-
"mercury_cancel_invoice",
|
|
6992
|
-
"mercury_list_invoice_attachments",
|
|
6993
|
-
"mercury_get_attachment",
|
|
6994
|
-
"mercury_download_invoice_pdf",
|
|
6995
|
-
"mercury_list_treasury_accounts",
|
|
6996
|
-
"mercury_list_treasury_transactions",
|
|
6997
|
-
"mercury_list_treasury_statements",
|
|
6998
|
-
"mercury_list_events",
|
|
6999
|
-
"mercury_get_event",
|
|
7000
|
-
"mercury_list_send_money_requests",
|
|
7001
|
-
"mercury_get_send_money_request",
|
|
7002
|
-
"mercury_list_safe_requests",
|
|
7003
|
-
"mercury_get_safe_request",
|
|
7004
|
-
"mercury_download_safe_request_document",
|
|
7005
|
-
"mercury_list_webhooks",
|
|
7006
|
-
"mercury_get_webhook",
|
|
7007
|
-
"mercury_create_webhook",
|
|
7008
|
-
"mercury_update_webhook",
|
|
7009
|
-
"mercury_delete_webhook",
|
|
7010
|
-
"mercury_verify_webhook",
|
|
7011
|
-
"mercury_create_internal_transfer",
|
|
7012
|
-
"mercury_send_money",
|
|
7013
|
-
"mercury_request_send_money"
|
|
9903
|
+
// src/integrations/tldraw.ts
|
|
9904
|
+
var TLDRAW_TOOLS = [
|
|
9905
|
+
"tldraw_unfurl_url",
|
|
9906
|
+
"tldraw_create_room_snapshot",
|
|
9907
|
+
"tldraw_get_room_snapshot",
|
|
9908
|
+
"tldraw_get_published_snapshot",
|
|
9909
|
+
"tldraw_get_readonly_slug"
|
|
7014
9910
|
];
|
|
7015
|
-
function
|
|
7016
|
-
|
|
7017
|
-
|
|
9911
|
+
function tldrawIntegration(options = {}) {
|
|
9912
|
+
const apiKey = options.apiKey ?? getEnv("TLDRAW_API_KEY");
|
|
9913
|
+
return {
|
|
9914
|
+
id: "tldraw",
|
|
9915
|
+
name: "tldraw",
|
|
9916
|
+
tools: [...TLDRAW_TOOLS],
|
|
9917
|
+
authType: apiKey ? "apiKey" : undefined,
|
|
9918
|
+
getHeaders: apiKey ? () => ({ Authorization: `Bearer ${apiKey}` }) : undefined
|
|
9919
|
+
};
|
|
9920
|
+
}
|
|
9921
|
+
// src/integrations/workday.ts
|
|
9922
|
+
init_logger();
|
|
9923
|
+
var logger89 = createLogger("Workday");
|
|
9924
|
+
var WORKDAY_TOOLS = [
|
|
9925
|
+
"workday_list_workers",
|
|
9926
|
+
"workday_get_worker"
|
|
9927
|
+
];
|
|
9928
|
+
function workdayIntegration(config = {}) {
|
|
9929
|
+
const oauth = {
|
|
9930
|
+
provider: "workday",
|
|
9931
|
+
clientId: config.clientId ?? getEnv("WORKDAY_CLIENT_ID"),
|
|
9932
|
+
clientSecret: config.clientSecret ?? getEnv("WORKDAY_CLIENT_SECRET"),
|
|
9933
|
+
scopes: config.scopes,
|
|
9934
|
+
redirectUri: config.redirectUri,
|
|
9935
|
+
config: {
|
|
9936
|
+
subdomain: config.subdomain ?? getEnv("WORKDAY_TENANT_DESCRIPTOR")
|
|
9937
|
+
}
|
|
9938
|
+
};
|
|
9939
|
+
return {
|
|
9940
|
+
id: "workday",
|
|
9941
|
+
name: "Workday",
|
|
9942
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/workday.png",
|
|
9943
|
+
description: "Query Workday workers via the tenant REST API",
|
|
9944
|
+
category: "Business",
|
|
9945
|
+
tools: [...WORKDAY_TOOLS],
|
|
9946
|
+
oauth,
|
|
9947
|
+
async onInit(_client) {
|
|
9948
|
+
logger89.debug("Workday integration initialized");
|
|
9949
|
+
},
|
|
9950
|
+
async onAfterConnect(_client) {
|
|
9951
|
+
logger89.debug("Workday integration connected");
|
|
9952
|
+
}
|
|
9953
|
+
};
|
|
9954
|
+
}
|
|
9955
|
+
// src/integrations/workos.ts
|
|
9956
|
+
init_logger();
|
|
9957
|
+
var logger90 = createLogger("WorkOS");
|
|
9958
|
+
var WORKOS_TOOLS = [
|
|
9959
|
+
"workos_list_organizations",
|
|
9960
|
+
"workos_get_organization",
|
|
9961
|
+
"workos_create_organization",
|
|
9962
|
+
"workos_update_organization",
|
|
9963
|
+
"workos_list_users",
|
|
9964
|
+
"workos_get_user",
|
|
9965
|
+
"workos_list_organization_memberships",
|
|
9966
|
+
"workos_list_directories",
|
|
9967
|
+
"workos_get_directory",
|
|
9968
|
+
"workos_list_directory_users",
|
|
9969
|
+
"workos_get_directory_user"
|
|
9970
|
+
];
|
|
9971
|
+
function workosIntegration(options = {}) {
|
|
9972
|
+
const apiKey = options.apiKey ?? getEnv("WORKOS_API_KEY");
|
|
9973
|
+
if (!apiKey) {
|
|
9974
|
+
throw new Error("workosIntegration requires apiKey or WORKOS_API_KEY environment variable");
|
|
7018
9975
|
}
|
|
7019
9976
|
return {
|
|
7020
|
-
id: "
|
|
7021
|
-
name: "
|
|
7022
|
-
|
|
9977
|
+
id: "workos",
|
|
9978
|
+
name: "WorkOS",
|
|
9979
|
+
logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/workos.png",
|
|
9980
|
+
description: "Manage WorkOS organizations, AuthKit users, memberships, and directory sync",
|
|
9981
|
+
category: "Infrastructure",
|
|
9982
|
+
tools: [...WORKOS_TOOLS],
|
|
7023
9983
|
authType: "apiKey",
|
|
7024
9984
|
getHeaders() {
|
|
7025
9985
|
return {
|
|
7026
|
-
Authorization: `Bearer ${
|
|
9986
|
+
Authorization: `Bearer ${apiKey}`
|
|
7027
9987
|
};
|
|
9988
|
+
},
|
|
9989
|
+
async onInit(_client) {
|
|
9990
|
+
logger90.debug("WorkOS integration initialized");
|
|
9991
|
+
},
|
|
9992
|
+
async onAfterConnect(_client) {
|
|
9993
|
+
logger90.debug("WorkOS integration connected");
|
|
9994
|
+
}
|
|
9995
|
+
};
|
|
9996
|
+
}
|
|
9997
|
+
// src/integrations/planetscale.ts
|
|
9998
|
+
var PLANETSCALE_TOOLS = [
|
|
9999
|
+
"planetscale_get_current_user",
|
|
10000
|
+
"planetscale_list_organizations",
|
|
10001
|
+
"planetscale_get_organization",
|
|
10002
|
+
"planetscale_list_databases",
|
|
10003
|
+
"planetscale_get_database",
|
|
10004
|
+
"planetscale_list_branches",
|
|
10005
|
+
"planetscale_get_branch",
|
|
10006
|
+
"planetscale_list_deploy_requests",
|
|
10007
|
+
"planetscale_get_deploy_request"
|
|
10008
|
+
];
|
|
10009
|
+
function planetscaleIntegration(config = {}) {
|
|
10010
|
+
const oauth = {
|
|
10011
|
+
provider: "planetscale",
|
|
10012
|
+
clientId: config.clientId ?? getEnv("PLANETSCALE_CLIENT_ID"),
|
|
10013
|
+
clientSecret: config.clientSecret ?? getEnv("PLANETSCALE_CLIENT_SECRET"),
|
|
10014
|
+
scopes: config.scopes ?? ["database:read_branches", "database:read_deploy_requests", "organization:read"],
|
|
10015
|
+
optionalScopes: config.optionalScopes,
|
|
10016
|
+
redirectUri: config.redirectUri,
|
|
10017
|
+
config: {
|
|
10018
|
+
authorization_endpoint: "https://auth.planetscale.com/oauth/authorize",
|
|
10019
|
+
token_endpoint: "https://auth.planetscale.com/oauth/token",
|
|
10020
|
+
apiBaseUrl: config.apiBaseUrl ?? "https://api.planetscale.com/v1"
|
|
7028
10021
|
}
|
|
7029
10022
|
};
|
|
10023
|
+
return {
|
|
10024
|
+
id: "planetscale",
|
|
10025
|
+
name: "PlanetScale",
|
|
10026
|
+
category: "Infrastructure",
|
|
10027
|
+
tools: [...PLANETSCALE_TOOLS],
|
|
10028
|
+
oauth
|
|
10029
|
+
};
|
|
7030
10030
|
}
|
|
7031
10031
|
// src/integrations/generic.ts
|
|
7032
10032
|
function genericOAuthIntegration(config) {
|
|
@@ -13196,7 +16196,35 @@ function convertJsonSchemaToGoogleSchema(jsonSchema, TypeEnum) {
|
|
|
13196
16196
|
}
|
|
13197
16197
|
// src/server.ts
|
|
13198
16198
|
var SERVER_LOG_CONTEXT3 = "server";
|
|
13199
|
-
var
|
|
16199
|
+
var logger93 = createLogger("MCPServer", SERVER_LOG_CONTEXT3);
|
|
16200
|
+
async function refreshTokenIfNeeded(provider, tokenData, providers, config, context) {
|
|
16201
|
+
const credentials = providers[provider];
|
|
16202
|
+
if (!credentials || !config.serverUrl) {
|
|
16203
|
+
return tokenData.accessToken;
|
|
16204
|
+
}
|
|
16205
|
+
try {
|
|
16206
|
+
return await resolveAccessToken({
|
|
16207
|
+
provider,
|
|
16208
|
+
currentTokens: tokenData,
|
|
16209
|
+
providerOAuth: {
|
|
16210
|
+
clientId: credentials.clientId,
|
|
16211
|
+
clientSecret: credentials.clientSecret,
|
|
16212
|
+
subdomain: credentials.config?.subdomain
|
|
16213
|
+
},
|
|
16214
|
+
serverUrl: config.serverUrl,
|
|
16215
|
+
apiKey: config.apiKey,
|
|
16216
|
+
setProviderToken: config.setProviderToken,
|
|
16217
|
+
context
|
|
16218
|
+
});
|
|
16219
|
+
} catch (err) {
|
|
16220
|
+
if (err instanceof RefreshRejectedError) {
|
|
16221
|
+
logger93.warn(`[Token Refresh] Refresh token rejected for ${provider}; integration marked disconnected.`);
|
|
16222
|
+
} else {
|
|
16223
|
+
logger93.warn(`[Token Refresh] Failed to refresh ${provider} token: ${err.message}`);
|
|
16224
|
+
}
|
|
16225
|
+
return tokenData.accessToken;
|
|
16226
|
+
}
|
|
16227
|
+
}
|
|
13200
16228
|
var globalServerConfig = null;
|
|
13201
16229
|
var globalMCPHandler = null;
|
|
13202
16230
|
var codeVerifierStorage = new Map;
|
|
@@ -13302,7 +16330,7 @@ function createMCPServer(config) {
|
|
|
13302
16330
|
if (integration.oauth) {
|
|
13303
16331
|
const { clientId, clientSecret, redirectUri: integrationRedirectUri, config: oauthConfig } = integration.oauth;
|
|
13304
16332
|
if (!clientId || !clientSecret) {
|
|
13305
|
-
|
|
16333
|
+
logger93.warn(`Warning: Integration "${integration.id}" is missing OAuth credentials. ` + `Provide clientId and clientSecret in the integration configuration.`);
|
|
13306
16334
|
return integration;
|
|
13307
16335
|
}
|
|
13308
16336
|
const redirectUri = integrationRedirectUri || config.redirectUri || getDefaultRedirectUri();
|
|
@@ -13448,7 +16476,8 @@ function createMCPServer(config) {
|
|
|
13448
16476
|
if (provider) {
|
|
13449
16477
|
const tokenData = await config.getProviderToken(provider, undefined, context2);
|
|
13450
16478
|
if (tokenData?.accessToken) {
|
|
13451
|
-
|
|
16479
|
+
const accessToken = await refreshTokenIfNeeded(provider, tokenData, providers, config, context2);
|
|
16480
|
+
authHeader = `Bearer ${accessToken}`;
|
|
13452
16481
|
}
|
|
13453
16482
|
}
|
|
13454
16483
|
} catch {}
|
|
@@ -13479,7 +16508,7 @@ function createMCPServer(config) {
|
|
|
13479
16508
|
}
|
|
13480
16509
|
return response2;
|
|
13481
16510
|
} catch (error) {
|
|
13482
|
-
|
|
16511
|
+
logger93.error("[MCP Tool Call] Error:", error);
|
|
13483
16512
|
return Response.json({ error: error.message || "Failed to execute tool call" }, { status: error.statusCode || 500 });
|
|
13484
16513
|
}
|
|
13485
16514
|
}
|
|
@@ -13528,7 +16557,7 @@ function createMCPServer(config) {
|
|
|
13528
16557
|
});
|
|
13529
16558
|
return Response.json(result, { status: result.success ? 200 : 500 });
|
|
13530
16559
|
} catch (error) {
|
|
13531
|
-
|
|
16560
|
+
logger93.error("[Code Mode] Error:", error);
|
|
13532
16561
|
return Response.json({ error: error?.message || "Failed to execute code" }, { status: 500 });
|
|
13533
16562
|
}
|
|
13534
16563
|
}
|
|
@@ -13586,7 +16615,7 @@ function createMCPServer(config) {
|
|
|
13586
16615
|
error: executionResult.error
|
|
13587
16616
|
});
|
|
13588
16617
|
} catch (error) {
|
|
13589
|
-
|
|
16618
|
+
logger93.error("[Trigger Notify] Error:", error);
|
|
13590
16619
|
return Response.json({ error: error.message || "Failed to execute trigger" }, { status: 500 });
|
|
13591
16620
|
}
|
|
13592
16621
|
}
|
|
@@ -13650,7 +16679,7 @@ function createMCPServer(config) {
|
|
|
13650
16679
|
})
|
|
13651
16680
|
});
|
|
13652
16681
|
} catch (scheduleError) {
|
|
13653
|
-
|
|
16682
|
+
logger93.error("[Trigger] Failed to register with scheduler:", scheduleError);
|
|
13654
16683
|
}
|
|
13655
16684
|
return Response.json(created, { status: 201 });
|
|
13656
16685
|
}
|
|
@@ -13685,7 +16714,7 @@ function createMCPServer(config) {
|
|
|
13685
16714
|
body: JSON.stringify({ triggerId })
|
|
13686
16715
|
});
|
|
13687
16716
|
} catch (error) {
|
|
13688
|
-
|
|
16717
|
+
logger93.error("[Trigger] Failed to pause in scheduler:", error);
|
|
13689
16718
|
}
|
|
13690
16719
|
return Response.json(updated);
|
|
13691
16720
|
} else if (subAction === "resume" && method === "POST") {
|
|
@@ -13713,7 +16742,7 @@ function createMCPServer(config) {
|
|
|
13713
16742
|
body: JSON.stringify({ triggerId })
|
|
13714
16743
|
});
|
|
13715
16744
|
} catch (error) {
|
|
13716
|
-
|
|
16745
|
+
logger93.error("[Trigger] Failed to resume in scheduler:", error);
|
|
13717
16746
|
}
|
|
13718
16747
|
return Response.json(updated);
|
|
13719
16748
|
} else if (subAction === "run" && method === "POST") {
|
|
@@ -13784,7 +16813,7 @@ function createMCPServer(config) {
|
|
|
13784
16813
|
})
|
|
13785
16814
|
});
|
|
13786
16815
|
} catch (error) {
|
|
13787
|
-
|
|
16816
|
+
logger93.error("[Trigger] Failed to update scheduler:", error);
|
|
13788
16817
|
}
|
|
13789
16818
|
}
|
|
13790
16819
|
return Response.json(updated);
|
|
@@ -13801,14 +16830,14 @@ function createMCPServer(config) {
|
|
|
13801
16830
|
body: JSON.stringify({ triggerId })
|
|
13802
16831
|
});
|
|
13803
16832
|
} catch (error) {
|
|
13804
|
-
|
|
16833
|
+
logger93.error("[Trigger] Failed to unregister from scheduler:", error);
|
|
13805
16834
|
}
|
|
13806
16835
|
return new Response(null, { status: 204 });
|
|
13807
16836
|
}
|
|
13808
16837
|
}
|
|
13809
16838
|
return Response.json({ error: "Invalid trigger route or method" }, { status: 404 });
|
|
13810
16839
|
} catch (error) {
|
|
13811
|
-
|
|
16840
|
+
logger93.error("[Trigger] Error:", error);
|
|
13812
16841
|
return Response.json({ error: error.message || "Failed to process trigger request" }, { status: error.statusCode || 500 });
|
|
13813
16842
|
}
|
|
13814
16843
|
}
|
|
@@ -13834,11 +16863,11 @@ function createMCPServer(config) {
|
|
|
13834
16863
|
const errorRedirectUrl = "/auth-error";
|
|
13835
16864
|
if (error) {
|
|
13836
16865
|
const errorMsg = errorDescription || error;
|
|
13837
|
-
|
|
16866
|
+
logger93.error("[OAuth Redirect] Error:", errorMsg);
|
|
13838
16867
|
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent(errorMsg)}`, webRequest.url));
|
|
13839
16868
|
}
|
|
13840
16869
|
if (!code || !state) {
|
|
13841
|
-
|
|
16870
|
+
logger93.error("[OAuth Redirect] Missing code or state parameter");
|
|
13842
16871
|
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent("Invalid OAuth callback")}`, webRequest.url));
|
|
13843
16872
|
}
|
|
13844
16873
|
let returnUrl = defaultRedirectUrl;
|
|
@@ -13915,7 +16944,7 @@ function createMCPServer(config) {
|
|
|
13915
16944
|
frontendUrl.hash = `oauth_callback=${encodeURIComponent(JSON.stringify({ code, state, tokenData }))}`;
|
|
13916
16945
|
return Response.redirect(frontendUrl);
|
|
13917
16946
|
} catch (error2) {
|
|
13918
|
-
|
|
16947
|
+
logger93.error("[OAuth Backend Callback] Error:", error2);
|
|
13919
16948
|
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent(error2.message || "Failed to exchange token")}`, webRequest.url));
|
|
13920
16949
|
}
|
|
13921
16950
|
} else {
|
|
@@ -14194,43 +17223,77 @@ init_type_generator();
|
|
|
14194
17223
|
init_executor();
|
|
14195
17224
|
init_tool_builder();
|
|
14196
17225
|
export {
|
|
17226
|
+
zoomIntegration,
|
|
14197
17227
|
zendeskIntegration,
|
|
17228
|
+
zapierIntegration,
|
|
14198
17229
|
youtubeIntegration,
|
|
17230
|
+
xeroIntegration,
|
|
17231
|
+
workosIntegration,
|
|
17232
|
+
workdayIntegration,
|
|
14199
17233
|
wordIntegration,
|
|
17234
|
+
wixIntegration,
|
|
14200
17235
|
whatsappIntegration,
|
|
17236
|
+
webflowIntegration,
|
|
14201
17237
|
vercelIntegration,
|
|
17238
|
+
upstashIntegration,
|
|
17239
|
+
typeformIntegration,
|
|
17240
|
+
trelloIntegration,
|
|
14202
17241
|
todoistIntegration,
|
|
14203
17242
|
toWebRequest,
|
|
14204
17243
|
toTanStackStartHandler,
|
|
14205
17244
|
toSvelteKitHandler,
|
|
14206
17245
|
toSolidStartHandler,
|
|
14207
17246
|
toNextJsHandler,
|
|
17247
|
+
tldrawIntegration,
|
|
17248
|
+
tiktokIntegration,
|
|
17249
|
+
threadsIntegration,
|
|
17250
|
+
teamsIntegration,
|
|
14208
17251
|
svelteKitHandler,
|
|
17252
|
+
supabaseIntegration,
|
|
14209
17253
|
stripeIntegration,
|
|
14210
17254
|
storeCodeVerifier,
|
|
14211
17255
|
slackIntegration,
|
|
17256
|
+
shopifyIntegration,
|
|
17257
|
+
sharepointIntegration,
|
|
14212
17258
|
sentryIntegration,
|
|
14213
17259
|
sendWebResponse,
|
|
17260
|
+
salesforceIntegration,
|
|
17261
|
+
resendIntegration,
|
|
17262
|
+
redisIntegration,
|
|
17263
|
+
redditIntegration,
|
|
14214
17264
|
rampIntegration,
|
|
14215
17265
|
railwayIntegration,
|
|
14216
17266
|
powerpointIntegration,
|
|
17267
|
+
postmanIntegration,
|
|
14217
17268
|
posthogIntegration,
|
|
14218
17269
|
polarIntegration,
|
|
17270
|
+
plannerIntegration,
|
|
17271
|
+
planetscaleIntegration,
|
|
17272
|
+
phantomIntegration,
|
|
17273
|
+
paperIntegration,
|
|
14219
17274
|
outlookIntegration,
|
|
14220
17275
|
onedriveIntegration,
|
|
14221
17276
|
notionIntegration,
|
|
14222
17277
|
netlifyIntegration,
|
|
17278
|
+
neonIntegration,
|
|
17279
|
+
mondayIntegration,
|
|
14223
17280
|
mercuryIntegration,
|
|
17281
|
+
mailchimpIntegration,
|
|
17282
|
+
linkedinIntegration,
|
|
14224
17283
|
linearIntegration,
|
|
14225
17284
|
jiraIntegration,
|
|
14226
17285
|
intercomIntegration,
|
|
17286
|
+
instagramIntegration,
|
|
14227
17287
|
hubspotIntegration,
|
|
14228
17288
|
handleOpenAIResponse,
|
|
14229
17289
|
handleAnthropicMessage,
|
|
17290
|
+
gtasksIntegration,
|
|
14230
17291
|
gslidesIntegration,
|
|
14231
17292
|
gsheetsIntegration,
|
|
14232
17293
|
granolaIntegration,
|
|
17294
|
+
gmeetIntegration,
|
|
14233
17295
|
gmailIntegration,
|
|
17296
|
+
gitlabIntegration,
|
|
14234
17297
|
githubIntegration,
|
|
14235
17298
|
getVercelAITools,
|
|
14236
17299
|
getOpenAITools,
|
|
@@ -14241,21 +17304,43 @@ export {
|
|
|
14241
17304
|
generateCodeModeTypes,
|
|
14242
17305
|
gdriveIntegration,
|
|
14243
17306
|
gdocsIntegration,
|
|
17307
|
+
gcontactsIntegration,
|
|
17308
|
+
gchatIntegration,
|
|
14244
17309
|
gcalIntegration,
|
|
17310
|
+
ga4Integration,
|
|
14245
17311
|
fromNodeHeaders,
|
|
14246
17312
|
figmaIntegration,
|
|
17313
|
+
facebookIntegration,
|
|
14247
17314
|
executeSandboxCode,
|
|
14248
17315
|
executeGoogleFunctionCalls,
|
|
14249
17316
|
excelIntegration,
|
|
17317
|
+
etoroIntegration,
|
|
17318
|
+
encodeRedisCloudBearerToken,
|
|
14250
17319
|
dropboxIntegration,
|
|
17320
|
+
discordIntegration,
|
|
17321
|
+
datadogIntegration,
|
|
17322
|
+
databricksIntegration,
|
|
14251
17323
|
cursorIntegration,
|
|
14252
17324
|
createTriggerTools,
|
|
14253
17325
|
createTanStackOAuthHandler,
|
|
14254
17326
|
createSimpleIntegration,
|
|
14255
17327
|
createNextOAuthHandler,
|
|
14256
17328
|
createMCPServer,
|
|
17329
|
+
convexIntegration,
|
|
17330
|
+
cloudflareIntegration,
|
|
17331
|
+
clickupIntegration,
|
|
17332
|
+
clerkIntegration,
|
|
17333
|
+
canvaIntegration,
|
|
14257
17334
|
calcomIntegration,
|
|
17335
|
+
buildPhantomBrowseDeeplink,
|
|
14258
17336
|
buildCodeModeTool,
|
|
17337
|
+
binanceIntegration,
|
|
17338
|
+
betterstackIntegration,
|
|
17339
|
+
awsIntegration,
|
|
17340
|
+
auth0Integration,
|
|
17341
|
+
attioIntegration,
|
|
17342
|
+
astronomerIntegration,
|
|
17343
|
+
alpacaIntegration,
|
|
14259
17344
|
airtableIntegration,
|
|
14260
17345
|
__resetUnauthenticatedCodeModeWarnings,
|
|
14261
17346
|
RUNTIME_STUB_SOURCE,
|