integrate-sdk 0.8.74-dev.0 → 0.8.75-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.
Files changed (63) hide show
  1. package/dist/adapters/auto-routes.js +31 -0
  2. package/dist/adapters/base-handler.d.ts +5 -0
  3. package/dist/adapters/base-handler.d.ts.map +1 -1
  4. package/dist/adapters/index.js +31 -0
  5. package/dist/adapters/nextjs.js +31 -0
  6. package/dist/adapters/node.js +31 -0
  7. package/dist/adapters/svelte-kit.js +31 -0
  8. package/dist/adapters/tanstack-start.js +31 -0
  9. package/dist/index.js +31 -0
  10. package/dist/oauth.js +31 -0
  11. package/dist/server.js +31 -0
  12. package/dist/src/adapters/base-handler.d.ts +5 -0
  13. package/dist/src/adapters/base-handler.d.ts.map +1 -1
  14. package/dist/src/integrations/airtable.d.ts +2 -0
  15. package/dist/src/integrations/airtable.d.ts.map +1 -1
  16. package/dist/src/integrations/calcom.d.ts +2 -0
  17. package/dist/src/integrations/calcom.d.ts.map +1 -1
  18. package/dist/src/integrations/figma.d.ts +2 -0
  19. package/dist/src/integrations/figma.d.ts.map +1 -1
  20. package/dist/src/integrations/gcal.d.ts +2 -0
  21. package/dist/src/integrations/gcal.d.ts.map +1 -1
  22. package/dist/src/integrations/generic.d.ts +2 -0
  23. package/dist/src/integrations/generic.d.ts.map +1 -1
  24. package/dist/src/integrations/github.d.ts +2 -0
  25. package/dist/src/integrations/github.d.ts.map +1 -1
  26. package/dist/src/integrations/gmail.d.ts +2 -0
  27. package/dist/src/integrations/gmail.d.ts.map +1 -1
  28. package/dist/src/integrations/gworkspace.d.ts +2 -0
  29. package/dist/src/integrations/gworkspace.d.ts.map +1 -1
  30. package/dist/src/integrations/hubspot.d.ts +2 -0
  31. package/dist/src/integrations/hubspot.d.ts.map +1 -1
  32. package/dist/src/integrations/intercom.d.ts +2 -0
  33. package/dist/src/integrations/intercom.d.ts.map +1 -1
  34. package/dist/src/integrations/linear.d.ts +2 -0
  35. package/dist/src/integrations/linear.d.ts.map +1 -1
  36. package/dist/src/integrations/notion.d.ts +2 -0
  37. package/dist/src/integrations/notion.d.ts.map +1 -1
  38. package/dist/src/integrations/onedrive.d.ts +2 -0
  39. package/dist/src/integrations/onedrive.d.ts.map +1 -1
  40. package/dist/src/integrations/outlook.d.ts +2 -0
  41. package/dist/src/integrations/outlook.d.ts.map +1 -1
  42. package/dist/src/integrations/polar.d.ts +2 -0
  43. package/dist/src/integrations/polar.d.ts.map +1 -1
  44. package/dist/src/integrations/ramp.d.ts +2 -0
  45. package/dist/src/integrations/ramp.d.ts.map +1 -1
  46. package/dist/src/integrations/slack.d.ts +2 -0
  47. package/dist/src/integrations/slack.d.ts.map +1 -1
  48. package/dist/src/integrations/stripe.d.ts +2 -0
  49. package/dist/src/integrations/stripe.d.ts.map +1 -1
  50. package/dist/src/integrations/todoist.d.ts +2 -0
  51. package/dist/src/integrations/todoist.d.ts.map +1 -1
  52. package/dist/src/integrations/types.d.ts +2 -0
  53. package/dist/src/integrations/types.d.ts.map +1 -1
  54. package/dist/src/integrations/vercel.d.ts +2 -0
  55. package/dist/src/integrations/vercel.d.ts.map +1 -1
  56. package/dist/src/integrations/whatsapp.d.ts +2 -0
  57. package/dist/src/integrations/whatsapp.d.ts.map +1 -1
  58. package/dist/src/integrations/youtube.d.ts +2 -0
  59. package/dist/src/integrations/youtube.d.ts.map +1 -1
  60. package/dist/src/integrations/zendesk.d.ts +2 -0
  61. package/dist/src/integrations/zendesk.d.ts.map +1 -1
  62. package/dist/src/server.d.ts.map +1 -1
  63. package/package.json +1 -1
@@ -2629,6 +2629,7 @@ function githubIntegration(config = {}) {
2629
2629
  clientId: config.clientId ?? getEnv("GITHUB_CLIENT_ID"),
2630
2630
  clientSecret: config.clientSecret ?? getEnv("GITHUB_CLIENT_SECRET"),
2631
2631
  scopes: config.scopes || ["repo", "user"],
2632
+ optionalScopes: config.optionalScopes,
2632
2633
  redirectUri: config.redirectUri,
2633
2634
  config: {
2634
2635
  apiBaseUrl: config.apiBaseUrl || "https://api.github.com",
@@ -2716,6 +2717,7 @@ function gmailIntegration(config = {}) {
2716
2717
  "https://www.googleapis.com/auth/gmail.modify",
2717
2718
  "https://www.googleapis.com/auth/gmail.labels"
2718
2719
  ],
2720
+ optionalScopes: config.optionalScopes,
2719
2721
  redirectUri: config.redirectUri,
2720
2722
  config
2721
2723
  };
@@ -2752,6 +2754,7 @@ function notionIntegration(config = {}) {
2752
2754
  clientId: config.clientId ?? getEnv("NOTION_CLIENT_ID"),
2753
2755
  clientSecret: config.clientSecret ?? getEnv("NOTION_CLIENT_SECRET"),
2754
2756
  scopes: [],
2757
+ optionalScopes: config.optionalScopes,
2755
2758
  redirectUri: config.redirectUri,
2756
2759
  config: {
2757
2760
  owner: config.owner || "user",
@@ -2817,6 +2820,7 @@ function slackIntegration(config = {}) {
2817
2820
  clientId: config.clientId ?? getEnv("SLACK_CLIENT_ID"),
2818
2821
  clientSecret: config.clientSecret ?? getEnv("SLACK_CLIENT_SECRET"),
2819
2822
  scopes: config.scopes || ["chat:write", "channels:read", "users:read", "search:read", "files:write"],
2823
+ optionalScopes: config.optionalScopes,
2820
2824
  redirectUri: config.redirectUri,
2821
2825
  config: {
2822
2826
  ...config
@@ -2860,6 +2864,7 @@ function linearIntegration(config = {}) {
2860
2864
  clientId: config.clientId ?? getEnv("LINEAR_CLIENT_ID"),
2861
2865
  clientSecret: config.clientSecret ?? getEnv("LINEAR_CLIENT_SECRET"),
2862
2866
  scopes: config.scopes || ["read", "write", "issues:create", "comments:create"],
2867
+ optionalScopes: config.optionalScopes,
2863
2868
  redirectUri: config.redirectUri,
2864
2869
  config: {
2865
2870
  ...config
@@ -2927,6 +2932,7 @@ function vercelIntegration(config = {}) {
2927
2932
  clientId: config.clientId ?? getEnv("VERCEL_CLIENT_ID"),
2928
2933
  clientSecret: config.clientSecret ?? getEnv("VERCEL_CLIENT_SECRET"),
2929
2934
  scopes: config.scopes || [],
2935
+ optionalScopes: config.optionalScopes,
2930
2936
  redirectUri: config.redirectUri,
2931
2937
  config: {
2932
2938
  ...config
@@ -2970,6 +2976,7 @@ function zendeskIntegration(config = {}) {
2970
2976
  clientId: config.clientId ?? getEnv("ZENDESK_CLIENT_ID"),
2971
2977
  clientSecret: config.clientSecret ?? getEnv("ZENDESK_CLIENT_SECRET"),
2972
2978
  scopes: config.scopes || ["read", "write"],
2979
+ optionalScopes: config.optionalScopes,
2973
2980
  redirectUri: config.redirectUri,
2974
2981
  config: {
2975
2982
  subdomain: config.subdomain ?? getEnv("ZENDESK_SUBDOMAIN"),
@@ -3014,6 +3021,7 @@ function stripeIntegration(config = {}) {
3014
3021
  clientId: config.clientId ?? getEnv("STRIPE_CLIENT_ID"),
3015
3022
  clientSecret: config.clientSecret ?? getEnv("STRIPE_CLIENT_SECRET"),
3016
3023
  scopes: config.scopes || ["read_write"],
3024
+ optionalScopes: config.optionalScopes,
3017
3025
  redirectUri: config.redirectUri,
3018
3026
  config: {
3019
3027
  ...config
@@ -3057,6 +3065,7 @@ function gcalIntegration(config = {}) {
3057
3065
  clientId: config.clientId ?? getEnv("GCAL_CLIENT_ID"),
3058
3066
  clientSecret: config.clientSecret ?? getEnv("GCAL_CLIENT_SECRET"),
3059
3067
  scopes: config.scopes || ["https://www.googleapis.com/auth/calendar"],
3068
+ optionalScopes: config.optionalScopes,
3060
3069
  redirectUri: config.redirectUri,
3061
3070
  config: {
3062
3071
  ...config
@@ -3100,6 +3109,7 @@ function outlookIntegration(config = {}) {
3100
3109
  clientId: config.clientId ?? getEnv("OUTLOOK_CLIENT_ID"),
3101
3110
  clientSecret: config.clientSecret ?? getEnv("OUTLOOK_CLIENT_SECRET"),
3102
3111
  scopes: config.scopes || ["Mail.Read", "Mail.Send", "Calendars.ReadWrite", "Contacts.Read"],
3112
+ optionalScopes: config.optionalScopes,
3103
3113
  redirectUri: config.redirectUri,
3104
3114
  config: {
3105
3115
  ...config
@@ -3151,6 +3161,7 @@ function airtableIntegration(config = {}) {
3151
3161
  "schema.bases:write",
3152
3162
  "webhook:manage"
3153
3163
  ],
3164
+ optionalScopes: config.optionalScopes,
3154
3165
  redirectUri: config.redirectUri,
3155
3166
  config: {
3156
3167
  ...config
@@ -3209,6 +3220,7 @@ function todoistIntegration(config = {}) {
3209
3220
  clientId: config.clientId ?? getEnv("TODOIST_CLIENT_ID"),
3210
3221
  clientSecret: config.clientSecret ?? getEnv("TODOIST_CLIENT_SECRET"),
3211
3222
  scopes: config.scopes || ["data:read_write"],
3223
+ optionalScopes: config.optionalScopes,
3212
3224
  redirectUri: config.redirectUri,
3213
3225
  config: {
3214
3226
  ...config
@@ -3252,6 +3264,7 @@ function whatsappIntegration(config = {}) {
3252
3264
  clientId: config.clientId ?? getEnv("WHATSAPP_CLIENT_ID"),
3253
3265
  clientSecret: config.clientSecret ?? getEnv("WHATSAPP_CLIENT_SECRET"),
3254
3266
  scopes: config.scopes || ["business_management", "whatsapp_business_messaging", "whatsapp_business_management"],
3267
+ optionalScopes: config.optionalScopes,
3255
3268
  redirectUri: config.redirectUri,
3256
3269
  config: {
3257
3270
  businessAccountId: config.businessAccountId,
@@ -3295,6 +3308,7 @@ function calcomIntegration(config = {}) {
3295
3308
  clientId: config.clientId ?? getEnv("CALCOM_CLIENT_ID"),
3296
3309
  clientSecret: config.clientSecret ?? getEnv("CALCOM_CLIENT_SECRET"),
3297
3310
  scopes: config.scopes || ["READ_BOOKING", "WRITE_BOOKING", "READ_PROFILE", "WRITE_PROFILE"],
3311
+ optionalScopes: config.optionalScopes,
3298
3312
  redirectUri: config.redirectUri,
3299
3313
  config: {
3300
3314
  apiBaseUrl: config.apiBaseUrl || "https://api.cal.com/v1",
@@ -3383,6 +3397,7 @@ function rampIntegration(config = {}) {
3383
3397
  clientId: config.clientId ?? getEnv("RAMP_CLIENT_ID"),
3384
3398
  clientSecret: config.clientSecret ?? getEnv("RAMP_CLIENT_SECRET"),
3385
3399
  scopes: config.scopes || ["transactions:read", "cards:read", "users:read"],
3400
+ optionalScopes: config.optionalScopes,
3386
3401
  redirectUri: config.redirectUri,
3387
3402
  config: {
3388
3403
  apiBaseUrl: config.apiBaseUrl || "https://api.ramp.com/v1",
@@ -3427,6 +3442,7 @@ function onedriveIntegration(config = {}) {
3427
3442
  clientId: config.clientId ?? getEnv("ONEDRIVE_CLIENT_ID"),
3428
3443
  clientSecret: config.clientSecret ?? getEnv("ONEDRIVE_CLIENT_SECRET"),
3429
3444
  scopes: config.scopes || ["Files.Read", "Files.ReadWrite", "offline_access"],
3445
+ optionalScopes: config.optionalScopes,
3430
3446
  redirectUri: config.redirectUri,
3431
3447
  config: {
3432
3448
  ...config
@@ -3478,6 +3494,7 @@ function gworkspaceIntegration(config = {}) {
3478
3494
  "https://www.googleapis.com/auth/presentations",
3479
3495
  "https://www.googleapis.com/auth/drive.readonly"
3480
3496
  ],
3497
+ optionalScopes: config.optionalScopes,
3481
3498
  redirectUri: config.redirectUri,
3482
3499
  config: {
3483
3500
  ...config
@@ -3543,6 +3560,7 @@ function polarIntegration(config = {}) {
3543
3560
  "metrics:read",
3544
3561
  "organizations:read"
3545
3562
  ],
3563
+ optionalScopes: config.optionalScopes,
3546
3564
  redirectUri: config.redirectUri,
3547
3565
  config: {
3548
3566
  apiBaseUrl: config.apiBaseUrl || "https://api.polar.sh"
@@ -3612,6 +3630,7 @@ function figmaIntegration(config = {}) {
3612
3630
  clientId: config.clientId ?? getEnv("FIGMA_CLIENT_ID"),
3613
3631
  clientSecret: config.clientSecret ?? getEnv("FIGMA_CLIENT_SECRET"),
3614
3632
  scopes: config.scopes || ["files:read", "file_comments:write"],
3633
+ optionalScopes: config.optionalScopes,
3615
3634
  redirectUri: config.redirectUri,
3616
3635
  config: {
3617
3636
  ...config
@@ -3655,6 +3674,7 @@ function intercomIntegration(config = {}) {
3655
3674
  clientId: config.clientId ?? getEnv("INTERCOM_CLIENT_ID"),
3656
3675
  clientSecret: config.clientSecret ?? getEnv("INTERCOM_CLIENT_SECRET"),
3657
3676
  scopes: config.scopes || [],
3677
+ optionalScopes: config.optionalScopes,
3658
3678
  redirectUri: config.redirectUri,
3659
3679
  config: {
3660
3680
  ...config
@@ -3708,6 +3728,7 @@ function hubspotIntegration(config = {}) {
3708
3728
  "crm.objects.tickets.write",
3709
3729
  "crm.objects.owners.read"
3710
3730
  ],
3731
+ optionalScopes: config.optionalScopes,
3711
3732
  redirectUri: config.redirectUri,
3712
3733
  config: {
3713
3734
  ...config
@@ -3770,6 +3791,7 @@ function youtubeIntegration(config = {}) {
3770
3791
  clientId: config.clientId ?? getEnv("YOUTUBE_CLIENT_ID"),
3771
3792
  clientSecret: config.clientSecret ?? getEnv("YOUTUBE_CLIENT_SECRET"),
3772
3793
  scopes: config.scopes || ["https://www.googleapis.com/auth/youtube.readonly"],
3794
+ optionalScopes: config.optionalScopes,
3773
3795
  redirectUri: config.redirectUri,
3774
3796
  config: {
3775
3797
  ...config
@@ -3847,6 +3869,7 @@ function genericOAuthIntegration(config) {
3847
3869
  clientId: config.clientId ?? getEnv(`${providerUpper}_CLIENT_ID`),
3848
3870
  clientSecret: config.clientSecret ?? getEnv(`${providerUpper}_CLIENT_SECRET`),
3849
3871
  scopes: config.scopes,
3872
+ optionalScopes: config.optionalScopes,
3850
3873
  redirectUri: config.redirectUri,
3851
3874
  config
3852
3875
  };
@@ -10561,6 +10584,7 @@ function createMCPServer(config) {
10561
10584
  tools: integration.tools,
10562
10585
  hasOAuth: !!integration.oauth,
10563
10586
  scopes: integration.oauth?.scopes,
10587
+ optionalScopes: integration.oauth?.optionalScopes,
10564
10588
  provider: integration.oauth?.provider
10565
10589
  }));
10566
10590
  return Response.json({ integrations });
@@ -11524,6 +11548,7 @@ class OAuthHandler {
11524
11548
  tools: integration.tools,
11525
11549
  hasOAuth: !!integration.oauth,
11526
11550
  scopes: integration.oauth?.scopes,
11551
+ optionalScopes: integration.oauth?.optionalScopes,
11527
11552
  provider: integration.oauth?.provider
11528
11553
  }))
11529
11554
  };
@@ -11566,6 +11591,10 @@ class OAuthHandler {
11566
11591
  if (scopes.length > 0) {
11567
11592
  url.searchParams.set("scope", scopes.join(","));
11568
11593
  }
11594
+ const optionalScopes = authorizeRequest.optionalScopes || providerConfig.optionalScopes || [];
11595
+ if (optionalScopes.length > 0) {
11596
+ url.searchParams.set("optional_scope", optionalScopes.join(","));
11597
+ }
11569
11598
  url.searchParams.set("state", authorizeRequest.state);
11570
11599
  url.searchParams.set("code_challenge", authorizeRequest.codeChallenge);
11571
11600
  url.searchParams.set("code_challenge_method", authorizeRequest.codeChallengeMethod);
@@ -11577,10 +11606,12 @@ class OAuthHandler {
11577
11606
  "clientId",
11578
11607
  "clientSecret",
11579
11608
  "scopes",
11609
+ "optionalScopes",
11580
11610
  "redirectUri",
11581
11611
  "client_id",
11582
11612
  "client_secret",
11583
11613
  "scope",
11614
+ "optional_scope",
11584
11615
  "redirect_uri",
11585
11616
  "provider"
11586
11617
  ]);
package/dist/index.js CHANGED
@@ -3020,6 +3020,7 @@ function githubIntegration(config = {}) {
3020
3020
  clientId: config.clientId ?? getEnv("GITHUB_CLIENT_ID"),
3021
3021
  clientSecret: config.clientSecret ?? getEnv("GITHUB_CLIENT_SECRET"),
3022
3022
  scopes: config.scopes || ["repo", "user"],
3023
+ optionalScopes: config.optionalScopes,
3023
3024
  redirectUri: config.redirectUri,
3024
3025
  config: {
3025
3026
  apiBaseUrl: config.apiBaseUrl || "https://api.github.com",
@@ -3107,6 +3108,7 @@ function gmailIntegration(config = {}) {
3107
3108
  "https://www.googleapis.com/auth/gmail.modify",
3108
3109
  "https://www.googleapis.com/auth/gmail.labels"
3109
3110
  ],
3111
+ optionalScopes: config.optionalScopes,
3110
3112
  redirectUri: config.redirectUri,
3111
3113
  config
3112
3114
  };
@@ -3143,6 +3145,7 @@ function notionIntegration(config = {}) {
3143
3145
  clientId: config.clientId ?? getEnv("NOTION_CLIENT_ID"),
3144
3146
  clientSecret: config.clientSecret ?? getEnv("NOTION_CLIENT_SECRET"),
3145
3147
  scopes: [],
3148
+ optionalScopes: config.optionalScopes,
3146
3149
  redirectUri: config.redirectUri,
3147
3150
  config: {
3148
3151
  owner: config.owner || "user",
@@ -3208,6 +3211,7 @@ function slackIntegration(config = {}) {
3208
3211
  clientId: config.clientId ?? getEnv("SLACK_CLIENT_ID"),
3209
3212
  clientSecret: config.clientSecret ?? getEnv("SLACK_CLIENT_SECRET"),
3210
3213
  scopes: config.scopes || ["chat:write", "channels:read", "users:read", "search:read", "files:write"],
3214
+ optionalScopes: config.optionalScopes,
3211
3215
  redirectUri: config.redirectUri,
3212
3216
  config: {
3213
3217
  ...config
@@ -3251,6 +3255,7 @@ function linearIntegration(config = {}) {
3251
3255
  clientId: config.clientId ?? getEnv("LINEAR_CLIENT_ID"),
3252
3256
  clientSecret: config.clientSecret ?? getEnv("LINEAR_CLIENT_SECRET"),
3253
3257
  scopes: config.scopes || ["read", "write", "issues:create", "comments:create"],
3258
+ optionalScopes: config.optionalScopes,
3254
3259
  redirectUri: config.redirectUri,
3255
3260
  config: {
3256
3261
  ...config
@@ -3318,6 +3323,7 @@ function vercelIntegration(config = {}) {
3318
3323
  clientId: config.clientId ?? getEnv("VERCEL_CLIENT_ID"),
3319
3324
  clientSecret: config.clientSecret ?? getEnv("VERCEL_CLIENT_SECRET"),
3320
3325
  scopes: config.scopes || [],
3326
+ optionalScopes: config.optionalScopes,
3321
3327
  redirectUri: config.redirectUri,
3322
3328
  config: {
3323
3329
  ...config
@@ -3361,6 +3367,7 @@ function zendeskIntegration(config = {}) {
3361
3367
  clientId: config.clientId ?? getEnv("ZENDESK_CLIENT_ID"),
3362
3368
  clientSecret: config.clientSecret ?? getEnv("ZENDESK_CLIENT_SECRET"),
3363
3369
  scopes: config.scopes || ["read", "write"],
3370
+ optionalScopes: config.optionalScopes,
3364
3371
  redirectUri: config.redirectUri,
3365
3372
  config: {
3366
3373
  subdomain: config.subdomain ?? getEnv("ZENDESK_SUBDOMAIN"),
@@ -3405,6 +3412,7 @@ function stripeIntegration(config = {}) {
3405
3412
  clientId: config.clientId ?? getEnv("STRIPE_CLIENT_ID"),
3406
3413
  clientSecret: config.clientSecret ?? getEnv("STRIPE_CLIENT_SECRET"),
3407
3414
  scopes: config.scopes || ["read_write"],
3415
+ optionalScopes: config.optionalScopes,
3408
3416
  redirectUri: config.redirectUri,
3409
3417
  config: {
3410
3418
  ...config
@@ -3448,6 +3456,7 @@ function gcalIntegration(config = {}) {
3448
3456
  clientId: config.clientId ?? getEnv("GCAL_CLIENT_ID"),
3449
3457
  clientSecret: config.clientSecret ?? getEnv("GCAL_CLIENT_SECRET"),
3450
3458
  scopes: config.scopes || ["https://www.googleapis.com/auth/calendar"],
3459
+ optionalScopes: config.optionalScopes,
3451
3460
  redirectUri: config.redirectUri,
3452
3461
  config: {
3453
3462
  ...config
@@ -3491,6 +3500,7 @@ function outlookIntegration(config = {}) {
3491
3500
  clientId: config.clientId ?? getEnv("OUTLOOK_CLIENT_ID"),
3492
3501
  clientSecret: config.clientSecret ?? getEnv("OUTLOOK_CLIENT_SECRET"),
3493
3502
  scopes: config.scopes || ["Mail.Read", "Mail.Send", "Calendars.ReadWrite", "Contacts.Read"],
3503
+ optionalScopes: config.optionalScopes,
3494
3504
  redirectUri: config.redirectUri,
3495
3505
  config: {
3496
3506
  ...config
@@ -3542,6 +3552,7 @@ function airtableIntegration(config = {}) {
3542
3552
  "schema.bases:write",
3543
3553
  "webhook:manage"
3544
3554
  ],
3555
+ optionalScopes: config.optionalScopes,
3545
3556
  redirectUri: config.redirectUri,
3546
3557
  config: {
3547
3558
  ...config
@@ -3600,6 +3611,7 @@ function todoistIntegration(config = {}) {
3600
3611
  clientId: config.clientId ?? getEnv("TODOIST_CLIENT_ID"),
3601
3612
  clientSecret: config.clientSecret ?? getEnv("TODOIST_CLIENT_SECRET"),
3602
3613
  scopes: config.scopes || ["data:read_write"],
3614
+ optionalScopes: config.optionalScopes,
3603
3615
  redirectUri: config.redirectUri,
3604
3616
  config: {
3605
3617
  ...config
@@ -3643,6 +3655,7 @@ function whatsappIntegration(config = {}) {
3643
3655
  clientId: config.clientId ?? getEnv("WHATSAPP_CLIENT_ID"),
3644
3656
  clientSecret: config.clientSecret ?? getEnv("WHATSAPP_CLIENT_SECRET"),
3645
3657
  scopes: config.scopes || ["business_management", "whatsapp_business_messaging", "whatsapp_business_management"],
3658
+ optionalScopes: config.optionalScopes,
3646
3659
  redirectUri: config.redirectUri,
3647
3660
  config: {
3648
3661
  businessAccountId: config.businessAccountId,
@@ -3686,6 +3699,7 @@ function calcomIntegration(config = {}) {
3686
3699
  clientId: config.clientId ?? getEnv("CALCOM_CLIENT_ID"),
3687
3700
  clientSecret: config.clientSecret ?? getEnv("CALCOM_CLIENT_SECRET"),
3688
3701
  scopes: config.scopes || ["READ_BOOKING", "WRITE_BOOKING", "READ_PROFILE", "WRITE_PROFILE"],
3702
+ optionalScopes: config.optionalScopes,
3689
3703
  redirectUri: config.redirectUri,
3690
3704
  config: {
3691
3705
  apiBaseUrl: config.apiBaseUrl || "https://api.cal.com/v1",
@@ -3774,6 +3788,7 @@ function rampIntegration(config = {}) {
3774
3788
  clientId: config.clientId ?? getEnv("RAMP_CLIENT_ID"),
3775
3789
  clientSecret: config.clientSecret ?? getEnv("RAMP_CLIENT_SECRET"),
3776
3790
  scopes: config.scopes || ["transactions:read", "cards:read", "users:read"],
3791
+ optionalScopes: config.optionalScopes,
3777
3792
  redirectUri: config.redirectUri,
3778
3793
  config: {
3779
3794
  apiBaseUrl: config.apiBaseUrl || "https://api.ramp.com/v1",
@@ -3818,6 +3833,7 @@ function onedriveIntegration(config = {}) {
3818
3833
  clientId: config.clientId ?? getEnv("ONEDRIVE_CLIENT_ID"),
3819
3834
  clientSecret: config.clientSecret ?? getEnv("ONEDRIVE_CLIENT_SECRET"),
3820
3835
  scopes: config.scopes || ["Files.Read", "Files.ReadWrite", "offline_access"],
3836
+ optionalScopes: config.optionalScopes,
3821
3837
  redirectUri: config.redirectUri,
3822
3838
  config: {
3823
3839
  ...config
@@ -3869,6 +3885,7 @@ function gworkspaceIntegration(config = {}) {
3869
3885
  "https://www.googleapis.com/auth/presentations",
3870
3886
  "https://www.googleapis.com/auth/drive.readonly"
3871
3887
  ],
3888
+ optionalScopes: config.optionalScopes,
3872
3889
  redirectUri: config.redirectUri,
3873
3890
  config: {
3874
3891
  ...config
@@ -3934,6 +3951,7 @@ function polarIntegration(config = {}) {
3934
3951
  "metrics:read",
3935
3952
  "organizations:read"
3936
3953
  ],
3954
+ optionalScopes: config.optionalScopes,
3937
3955
  redirectUri: config.redirectUri,
3938
3956
  config: {
3939
3957
  apiBaseUrl: config.apiBaseUrl || "https://api.polar.sh"
@@ -4003,6 +4021,7 @@ function figmaIntegration(config = {}) {
4003
4021
  clientId: config.clientId ?? getEnv("FIGMA_CLIENT_ID"),
4004
4022
  clientSecret: config.clientSecret ?? getEnv("FIGMA_CLIENT_SECRET"),
4005
4023
  scopes: config.scopes || ["files:read", "file_comments:write"],
4024
+ optionalScopes: config.optionalScopes,
4006
4025
  redirectUri: config.redirectUri,
4007
4026
  config: {
4008
4027
  ...config
@@ -4046,6 +4065,7 @@ function intercomIntegration(config = {}) {
4046
4065
  clientId: config.clientId ?? getEnv("INTERCOM_CLIENT_ID"),
4047
4066
  clientSecret: config.clientSecret ?? getEnv("INTERCOM_CLIENT_SECRET"),
4048
4067
  scopes: config.scopes || [],
4068
+ optionalScopes: config.optionalScopes,
4049
4069
  redirectUri: config.redirectUri,
4050
4070
  config: {
4051
4071
  ...config
@@ -4099,6 +4119,7 @@ function hubspotIntegration(config = {}) {
4099
4119
  "crm.objects.tickets.write",
4100
4120
  "crm.objects.owners.read"
4101
4121
  ],
4122
+ optionalScopes: config.optionalScopes,
4102
4123
  redirectUri: config.redirectUri,
4103
4124
  config: {
4104
4125
  ...config
@@ -4161,6 +4182,7 @@ function youtubeIntegration(config = {}) {
4161
4182
  clientId: config.clientId ?? getEnv("YOUTUBE_CLIENT_ID"),
4162
4183
  clientSecret: config.clientSecret ?? getEnv("YOUTUBE_CLIENT_SECRET"),
4163
4184
  scopes: config.scopes || ["https://www.googleapis.com/auth/youtube.readonly"],
4185
+ optionalScopes: config.optionalScopes,
4164
4186
  redirectUri: config.redirectUri,
4165
4187
  config: {
4166
4188
  ...config
@@ -4238,6 +4260,7 @@ function genericOAuthIntegration(config) {
4238
4260
  clientId: config.clientId ?? getEnv(`${providerUpper}_CLIENT_ID`),
4239
4261
  clientSecret: config.clientSecret ?? getEnv(`${providerUpper}_CLIENT_SECRET`),
4240
4262
  scopes: config.scopes,
4263
+ optionalScopes: config.optionalScopes,
4241
4264
  redirectUri: config.redirectUri,
4242
4265
  config
4243
4266
  };
@@ -10940,6 +10963,7 @@ function createMCPServer(config) {
10940
10963
  tools: integration.tools,
10941
10964
  hasOAuth: !!integration.oauth,
10942
10965
  scopes: integration.oauth?.scopes,
10966
+ optionalScopes: integration.oauth?.optionalScopes,
10943
10967
  provider: integration.oauth?.provider
10944
10968
  }));
10945
10969
  return Response.json({ integrations });
@@ -11903,6 +11927,7 @@ class OAuthHandler {
11903
11927
  tools: integration.tools,
11904
11928
  hasOAuth: !!integration.oauth,
11905
11929
  scopes: integration.oauth?.scopes,
11930
+ optionalScopes: integration.oauth?.optionalScopes,
11906
11931
  provider: integration.oauth?.provider
11907
11932
  }))
11908
11933
  };
@@ -11945,6 +11970,10 @@ class OAuthHandler {
11945
11970
  if (scopes.length > 0) {
11946
11971
  url.searchParams.set("scope", scopes.join(","));
11947
11972
  }
11973
+ const optionalScopes = authorizeRequest.optionalScopes || providerConfig.optionalScopes || [];
11974
+ if (optionalScopes.length > 0) {
11975
+ url.searchParams.set("optional_scope", optionalScopes.join(","));
11976
+ }
11948
11977
  url.searchParams.set("state", authorizeRequest.state);
11949
11978
  url.searchParams.set("code_challenge", authorizeRequest.codeChallenge);
11950
11979
  url.searchParams.set("code_challenge_method", authorizeRequest.codeChallengeMethod);
@@ -11956,10 +11985,12 @@ class OAuthHandler {
11956
11985
  "clientId",
11957
11986
  "clientSecret",
11958
11987
  "scopes",
11988
+ "optionalScopes",
11959
11989
  "redirectUri",
11960
11990
  "client_id",
11961
11991
  "client_secret",
11962
11992
  "scope",
11993
+ "optional_scope",
11963
11994
  "redirect_uri",
11964
11995
  "provider"
11965
11996
  ]);
package/dist/oauth.js CHANGED
@@ -2842,6 +2842,7 @@ function githubIntegration(config = {}) {
2842
2842
  clientId: config.clientId ?? getEnv("GITHUB_CLIENT_ID"),
2843
2843
  clientSecret: config.clientSecret ?? getEnv("GITHUB_CLIENT_SECRET"),
2844
2844
  scopes: config.scopes || ["repo", "user"],
2845
+ optionalScopes: config.optionalScopes,
2845
2846
  redirectUri: config.redirectUri,
2846
2847
  config: {
2847
2848
  apiBaseUrl: config.apiBaseUrl || "https://api.github.com",
@@ -2929,6 +2930,7 @@ function gmailIntegration(config = {}) {
2929
2930
  "https://www.googleapis.com/auth/gmail.modify",
2930
2931
  "https://www.googleapis.com/auth/gmail.labels"
2931
2932
  ],
2933
+ optionalScopes: config.optionalScopes,
2932
2934
  redirectUri: config.redirectUri,
2933
2935
  config
2934
2936
  };
@@ -2965,6 +2967,7 @@ function notionIntegration(config = {}) {
2965
2967
  clientId: config.clientId ?? getEnv("NOTION_CLIENT_ID"),
2966
2968
  clientSecret: config.clientSecret ?? getEnv("NOTION_CLIENT_SECRET"),
2967
2969
  scopes: [],
2970
+ optionalScopes: config.optionalScopes,
2968
2971
  redirectUri: config.redirectUri,
2969
2972
  config: {
2970
2973
  owner: config.owner || "user",
@@ -3030,6 +3033,7 @@ function slackIntegration(config = {}) {
3030
3033
  clientId: config.clientId ?? getEnv("SLACK_CLIENT_ID"),
3031
3034
  clientSecret: config.clientSecret ?? getEnv("SLACK_CLIENT_SECRET"),
3032
3035
  scopes: config.scopes || ["chat:write", "channels:read", "users:read", "search:read", "files:write"],
3036
+ optionalScopes: config.optionalScopes,
3033
3037
  redirectUri: config.redirectUri,
3034
3038
  config: {
3035
3039
  ...config
@@ -3073,6 +3077,7 @@ function linearIntegration(config = {}) {
3073
3077
  clientId: config.clientId ?? getEnv("LINEAR_CLIENT_ID"),
3074
3078
  clientSecret: config.clientSecret ?? getEnv("LINEAR_CLIENT_SECRET"),
3075
3079
  scopes: config.scopes || ["read", "write", "issues:create", "comments:create"],
3080
+ optionalScopes: config.optionalScopes,
3076
3081
  redirectUri: config.redirectUri,
3077
3082
  config: {
3078
3083
  ...config
@@ -3140,6 +3145,7 @@ function vercelIntegration(config = {}) {
3140
3145
  clientId: config.clientId ?? getEnv("VERCEL_CLIENT_ID"),
3141
3146
  clientSecret: config.clientSecret ?? getEnv("VERCEL_CLIENT_SECRET"),
3142
3147
  scopes: config.scopes || [],
3148
+ optionalScopes: config.optionalScopes,
3143
3149
  redirectUri: config.redirectUri,
3144
3150
  config: {
3145
3151
  ...config
@@ -3183,6 +3189,7 @@ function zendeskIntegration(config = {}) {
3183
3189
  clientId: config.clientId ?? getEnv("ZENDESK_CLIENT_ID"),
3184
3190
  clientSecret: config.clientSecret ?? getEnv("ZENDESK_CLIENT_SECRET"),
3185
3191
  scopes: config.scopes || ["read", "write"],
3192
+ optionalScopes: config.optionalScopes,
3186
3193
  redirectUri: config.redirectUri,
3187
3194
  config: {
3188
3195
  subdomain: config.subdomain ?? getEnv("ZENDESK_SUBDOMAIN"),
@@ -3227,6 +3234,7 @@ function stripeIntegration(config = {}) {
3227
3234
  clientId: config.clientId ?? getEnv("STRIPE_CLIENT_ID"),
3228
3235
  clientSecret: config.clientSecret ?? getEnv("STRIPE_CLIENT_SECRET"),
3229
3236
  scopes: config.scopes || ["read_write"],
3237
+ optionalScopes: config.optionalScopes,
3230
3238
  redirectUri: config.redirectUri,
3231
3239
  config: {
3232
3240
  ...config
@@ -3270,6 +3278,7 @@ function gcalIntegration(config = {}) {
3270
3278
  clientId: config.clientId ?? getEnv("GCAL_CLIENT_ID"),
3271
3279
  clientSecret: config.clientSecret ?? getEnv("GCAL_CLIENT_SECRET"),
3272
3280
  scopes: config.scopes || ["https://www.googleapis.com/auth/calendar"],
3281
+ optionalScopes: config.optionalScopes,
3273
3282
  redirectUri: config.redirectUri,
3274
3283
  config: {
3275
3284
  ...config
@@ -3313,6 +3322,7 @@ function outlookIntegration(config = {}) {
3313
3322
  clientId: config.clientId ?? getEnv("OUTLOOK_CLIENT_ID"),
3314
3323
  clientSecret: config.clientSecret ?? getEnv("OUTLOOK_CLIENT_SECRET"),
3315
3324
  scopes: config.scopes || ["Mail.Read", "Mail.Send", "Calendars.ReadWrite", "Contacts.Read"],
3325
+ optionalScopes: config.optionalScopes,
3316
3326
  redirectUri: config.redirectUri,
3317
3327
  config: {
3318
3328
  ...config
@@ -3364,6 +3374,7 @@ function airtableIntegration(config = {}) {
3364
3374
  "schema.bases:write",
3365
3375
  "webhook:manage"
3366
3376
  ],
3377
+ optionalScopes: config.optionalScopes,
3367
3378
  redirectUri: config.redirectUri,
3368
3379
  config: {
3369
3380
  ...config
@@ -3422,6 +3433,7 @@ function todoistIntegration(config = {}) {
3422
3433
  clientId: config.clientId ?? getEnv("TODOIST_CLIENT_ID"),
3423
3434
  clientSecret: config.clientSecret ?? getEnv("TODOIST_CLIENT_SECRET"),
3424
3435
  scopes: config.scopes || ["data:read_write"],
3436
+ optionalScopes: config.optionalScopes,
3425
3437
  redirectUri: config.redirectUri,
3426
3438
  config: {
3427
3439
  ...config
@@ -3465,6 +3477,7 @@ function whatsappIntegration(config = {}) {
3465
3477
  clientId: config.clientId ?? getEnv("WHATSAPP_CLIENT_ID"),
3466
3478
  clientSecret: config.clientSecret ?? getEnv("WHATSAPP_CLIENT_SECRET"),
3467
3479
  scopes: config.scopes || ["business_management", "whatsapp_business_messaging", "whatsapp_business_management"],
3480
+ optionalScopes: config.optionalScopes,
3468
3481
  redirectUri: config.redirectUri,
3469
3482
  config: {
3470
3483
  businessAccountId: config.businessAccountId,
@@ -3508,6 +3521,7 @@ function calcomIntegration(config = {}) {
3508
3521
  clientId: config.clientId ?? getEnv("CALCOM_CLIENT_ID"),
3509
3522
  clientSecret: config.clientSecret ?? getEnv("CALCOM_CLIENT_SECRET"),
3510
3523
  scopes: config.scopes || ["READ_BOOKING", "WRITE_BOOKING", "READ_PROFILE", "WRITE_PROFILE"],
3524
+ optionalScopes: config.optionalScopes,
3511
3525
  redirectUri: config.redirectUri,
3512
3526
  config: {
3513
3527
  apiBaseUrl: config.apiBaseUrl || "https://api.cal.com/v1",
@@ -3596,6 +3610,7 @@ function rampIntegration(config = {}) {
3596
3610
  clientId: config.clientId ?? getEnv("RAMP_CLIENT_ID"),
3597
3611
  clientSecret: config.clientSecret ?? getEnv("RAMP_CLIENT_SECRET"),
3598
3612
  scopes: config.scopes || ["transactions:read", "cards:read", "users:read"],
3613
+ optionalScopes: config.optionalScopes,
3599
3614
  redirectUri: config.redirectUri,
3600
3615
  config: {
3601
3616
  apiBaseUrl: config.apiBaseUrl || "https://api.ramp.com/v1",
@@ -3640,6 +3655,7 @@ function onedriveIntegration(config = {}) {
3640
3655
  clientId: config.clientId ?? getEnv("ONEDRIVE_CLIENT_ID"),
3641
3656
  clientSecret: config.clientSecret ?? getEnv("ONEDRIVE_CLIENT_SECRET"),
3642
3657
  scopes: config.scopes || ["Files.Read", "Files.ReadWrite", "offline_access"],
3658
+ optionalScopes: config.optionalScopes,
3643
3659
  redirectUri: config.redirectUri,
3644
3660
  config: {
3645
3661
  ...config
@@ -3691,6 +3707,7 @@ function gworkspaceIntegration(config = {}) {
3691
3707
  "https://www.googleapis.com/auth/presentations",
3692
3708
  "https://www.googleapis.com/auth/drive.readonly"
3693
3709
  ],
3710
+ optionalScopes: config.optionalScopes,
3694
3711
  redirectUri: config.redirectUri,
3695
3712
  config: {
3696
3713
  ...config
@@ -3756,6 +3773,7 @@ function polarIntegration(config = {}) {
3756
3773
  "metrics:read",
3757
3774
  "organizations:read"
3758
3775
  ],
3776
+ optionalScopes: config.optionalScopes,
3759
3777
  redirectUri: config.redirectUri,
3760
3778
  config: {
3761
3779
  apiBaseUrl: config.apiBaseUrl || "https://api.polar.sh"
@@ -3825,6 +3843,7 @@ function figmaIntegration(config = {}) {
3825
3843
  clientId: config.clientId ?? getEnv("FIGMA_CLIENT_ID"),
3826
3844
  clientSecret: config.clientSecret ?? getEnv("FIGMA_CLIENT_SECRET"),
3827
3845
  scopes: config.scopes || ["files:read", "file_comments:write"],
3846
+ optionalScopes: config.optionalScopes,
3828
3847
  redirectUri: config.redirectUri,
3829
3848
  config: {
3830
3849
  ...config
@@ -3868,6 +3887,7 @@ function intercomIntegration(config = {}) {
3868
3887
  clientId: config.clientId ?? getEnv("INTERCOM_CLIENT_ID"),
3869
3888
  clientSecret: config.clientSecret ?? getEnv("INTERCOM_CLIENT_SECRET"),
3870
3889
  scopes: config.scopes || [],
3890
+ optionalScopes: config.optionalScopes,
3871
3891
  redirectUri: config.redirectUri,
3872
3892
  config: {
3873
3893
  ...config
@@ -3921,6 +3941,7 @@ function hubspotIntegration(config = {}) {
3921
3941
  "crm.objects.tickets.write",
3922
3942
  "crm.objects.owners.read"
3923
3943
  ],
3944
+ optionalScopes: config.optionalScopes,
3924
3945
  redirectUri: config.redirectUri,
3925
3946
  config: {
3926
3947
  ...config
@@ -3983,6 +4004,7 @@ function youtubeIntegration(config = {}) {
3983
4004
  clientId: config.clientId ?? getEnv("YOUTUBE_CLIENT_ID"),
3984
4005
  clientSecret: config.clientSecret ?? getEnv("YOUTUBE_CLIENT_SECRET"),
3985
4006
  scopes: config.scopes || ["https://www.googleapis.com/auth/youtube.readonly"],
4007
+ optionalScopes: config.optionalScopes,
3986
4008
  redirectUri: config.redirectUri,
3987
4009
  config: {
3988
4010
  ...config
@@ -4060,6 +4082,7 @@ function genericOAuthIntegration(config) {
4060
4082
  clientId: config.clientId ?? getEnv(`${providerUpper}_CLIENT_ID`),
4061
4083
  clientSecret: config.clientSecret ?? getEnv(`${providerUpper}_CLIENT_SECRET`),
4062
4084
  scopes: config.scopes,
4085
+ optionalScopes: config.optionalScopes,
4063
4086
  redirectUri: config.redirectUri,
4064
4087
  config
4065
4088
  };
@@ -10774,6 +10797,7 @@ function createMCPServer(config) {
10774
10797
  tools: integration.tools,
10775
10798
  hasOAuth: !!integration.oauth,
10776
10799
  scopes: integration.oauth?.scopes,
10800
+ optionalScopes: integration.oauth?.optionalScopes,
10777
10801
  provider: integration.oauth?.provider
10778
10802
  }));
10779
10803
  return Response.json({ integrations });
@@ -11737,6 +11761,7 @@ class OAuthHandler {
11737
11761
  tools: integration.tools,
11738
11762
  hasOAuth: !!integration.oauth,
11739
11763
  scopes: integration.oauth?.scopes,
11764
+ optionalScopes: integration.oauth?.optionalScopes,
11740
11765
  provider: integration.oauth?.provider
11741
11766
  }))
11742
11767
  };
@@ -11779,6 +11804,10 @@ class OAuthHandler {
11779
11804
  if (scopes.length > 0) {
11780
11805
  url.searchParams.set("scope", scopes.join(","));
11781
11806
  }
11807
+ const optionalScopes = authorizeRequest.optionalScopes || providerConfig.optionalScopes || [];
11808
+ if (optionalScopes.length > 0) {
11809
+ url.searchParams.set("optional_scope", optionalScopes.join(","));
11810
+ }
11782
11811
  url.searchParams.set("state", authorizeRequest.state);
11783
11812
  url.searchParams.set("code_challenge", authorizeRequest.codeChallenge);
11784
11813
  url.searchParams.set("code_challenge_method", authorizeRequest.codeChallengeMethod);
@@ -11790,10 +11819,12 @@ class OAuthHandler {
11790
11819
  "clientId",
11791
11820
  "clientSecret",
11792
11821
  "scopes",
11822
+ "optionalScopes",
11793
11823
  "redirectUri",
11794
11824
  "client_id",
11795
11825
  "client_secret",
11796
11826
  "scope",
11827
+ "optional_scope",
11797
11828
  "redirect_uri",
11798
11829
  "provider"
11799
11830
  ]);