integrate-sdk 0.9.28-dev.0 → 0.9.29-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 (38) hide show
  1. package/dist/adapters/auto-routes.js +54 -23
  2. package/dist/adapters/base-handler.d.ts +1 -0
  3. package/dist/adapters/base-handler.d.ts.map +1 -1
  4. package/dist/adapters/base-handler.js +54 -23
  5. package/dist/adapters/index.js +141 -56
  6. package/dist/adapters/nextjs.d.ts.map +1 -1
  7. package/dist/adapters/nextjs.js +55 -24
  8. package/dist/adapters/solid-start.js +141 -56
  9. package/dist/adapters/svelte-kit.js +141 -56
  10. package/dist/index.d.ts +1 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +398 -108
  13. package/dist/oauth.js +53 -23
  14. package/dist/server.js +420 -130
  15. package/dist/src/adapters/base-handler.d.ts +1 -0
  16. package/dist/src/adapters/base-handler.d.ts.map +1 -1
  17. package/dist/src/adapters/nextjs.d.ts.map +1 -1
  18. package/dist/src/client.d.ts +7 -2
  19. package/dist/src/client.d.ts.map +1 -1
  20. package/dist/src/index.d.ts +4 -0
  21. package/dist/src/index.d.ts.map +1 -1
  22. package/dist/src/integrations/library-metadata.d.ts +1 -1
  23. package/dist/src/integrations/library-metadata.d.ts.map +1 -1
  24. package/dist/src/integrations/posthog-client.d.ts +222 -0
  25. package/dist/src/integrations/posthog-client.d.ts.map +1 -0
  26. package/dist/src/integrations/posthog.d.ts +30 -0
  27. package/dist/src/integrations/posthog.d.ts.map +1 -0
  28. package/dist/src/integrations/railway-client.d.ts +302 -0
  29. package/dist/src/integrations/railway-client.d.ts.map +1 -0
  30. package/dist/src/integrations/railway.d.ts +24 -0
  31. package/dist/src/integrations/railway.d.ts.map +1 -0
  32. package/dist/src/oauth/manager.d.ts.map +1 -1
  33. package/dist/src/oauth/types.d.ts +8 -0
  34. package/dist/src/oauth/types.d.ts.map +1 -1
  35. package/dist/src/server.d.ts +2 -0
  36. package/dist/src/server.d.ts.map +1 -1
  37. package/index.ts +2 -1
  38. package/package.json +1 -1
@@ -358,10 +358,18 @@ var init_library_metadata = __esm(() => {
358
358
  description: "Manage Polar products, orders, and subscriptions",
359
359
  category: "Business"
360
360
  },
361
+ posthog: {
362
+ description: "Read PostHog organizations, projects, insights, and feature flags",
363
+ category: "Analytics"
364
+ },
361
365
  ramp: {
362
366
  description: "Manage Ramp corporate cards, bills, and spend",
363
367
  category: "Business"
364
368
  },
369
+ railway: {
370
+ description: "Manage Railway workspaces, projects, services, deployments, variables, domains, and volumes",
371
+ category: "Infrastructure"
372
+ },
365
373
  slack: {
366
374
  description: "Send and manage Slack messages and channels",
367
375
  category: "Communication"
@@ -605,6 +613,22 @@ var init_email_fetcher = __esm(() => {
605
613
  });
606
614
 
607
615
  // base-handler.ts
616
+ function getForwardableProviderConfig(config) {
617
+ if (!config) {
618
+ return {};
619
+ }
620
+ return Object.fromEntries(Object.entries(config).filter(([key, value]) => value !== undefined && value !== null && !OAUTH_CONFIG_FIELDS.has(key)).map(([key, value]) => [key, String(value)]));
621
+ }
622
+ function getStoredProviderConfig(config) {
623
+ const baseUrl = config?.baseUrl || config?.apiBaseUrl;
624
+ if (!baseUrl) {
625
+ return;
626
+ }
627
+ return {
628
+ baseUrl: String(baseUrl)
629
+ };
630
+ }
631
+
608
632
  class OAuthHandler {
609
633
  config;
610
634
  serverUrl;
@@ -675,25 +699,9 @@ class OAuthHandler {
675
699
  if (redirectUri) {
676
700
  url.searchParams.set("redirect_uri", redirectUri);
677
701
  }
678
- const OAUTH_FIELDS = new Set([
679
- "clientId",
680
- "clientSecret",
681
- "scopes",
682
- "optionalScopes",
683
- "redirectUri",
684
- "client_id",
685
- "client_secret",
686
- "scope",
687
- "optional_scope",
688
- "redirect_uri",
689
- "provider"
690
- ]);
691
- if (providerConfig.config) {
692
- for (const [key, value] of Object.entries(providerConfig.config)) {
693
- if (value !== undefined && value !== null && !OAUTH_FIELDS.has(key)) {
694
- url.searchParams.set(key, String(value));
695
- }
696
- }
702
+ const extraConfig = getForwardableProviderConfig(providerConfig.config);
703
+ for (const [key, value] of Object.entries(extraConfig)) {
704
+ url.searchParams.set(key, value);
697
705
  }
698
706
  const response = await fetch(url.toString(), {
699
707
  method: "GET",
@@ -780,7 +788,8 @@ class OAuthHandler {
780
788
  state: callbackRequest.state,
781
789
  client_id: providerConfig.clientId,
782
790
  client_secret: providerConfig.clientSecret,
783
- redirect_uri: providerConfig.redirectUri
791
+ redirect_uri: providerConfig.redirectUri,
792
+ ...getForwardableProviderConfig(providerConfig.config)
784
793
  })
785
794
  });
786
795
  if (!response.ok) {
@@ -792,12 +801,14 @@ class OAuthHandler {
792
801
  if (this.config.setProviderToken) {
793
802
  try {
794
803
  const tokenData = {
804
+ sessionToken: result.sessionToken,
795
805
  accessToken: result.accessToken,
796
806
  refreshToken: result.refreshToken,
797
807
  tokenType: result.tokenType,
798
808
  expiresIn: result.expiresIn,
799
809
  expiresAt: result.expiresAt,
800
- scopes: result.scopes ? result.scopes.flatMap((s) => s.split(" ").filter(Boolean)) : result.scopes
810
+ scopes: result.scopes ? result.scopes.flatMap((s) => s.split(" ").filter(Boolean)) : result.scopes,
811
+ providerConfig: getStoredProviderConfig(providerConfig.config)
801
812
  };
802
813
  const email = result.email || await fetchUserEmail(callbackRequest.provider, tokenData);
803
814
  if (email) {
@@ -914,6 +925,12 @@ class OAuthHandler {
914
925
  if (providerConfig.config?.subdomain) {
915
926
  body.subdomain = providerConfig.config.subdomain;
916
927
  }
928
+ const extraConfig = getForwardableProviderConfig(providerConfig.config);
929
+ for (const [key, value] of Object.entries(extraConfig)) {
930
+ if (body[key] === undefined) {
931
+ body[key] = value;
932
+ }
933
+ }
917
934
  const url = new URL("/oauth/refresh", this.serverUrl);
918
935
  const response = await fetch(url.toString(), {
919
936
  method: "POST",
@@ -940,7 +957,8 @@ class OAuthHandler {
940
957
  tokenType: result.tokenType,
941
958
  expiresIn: result.expiresIn,
942
959
  expiresAt: result.expiresAt,
943
- scopes: result.scopes ? result.scopes.flatMap((s) => s.split(" ").filter(Boolean)) : result.scopes
960
+ scopes: result.scopes ? result.scopes.flatMap((s) => s.split(" ").filter(Boolean)) : result.scopes,
961
+ providerConfig: getStoredProviderConfig(providerConfig.config)
944
962
  };
945
963
  const email = result.email || await fetchUserEmail(refreshRequest.provider, tokenData);
946
964
  if (email) {
@@ -1007,12 +1025,25 @@ class OAuthHandler {
1007
1025
  return jsonRpcResponse.result;
1008
1026
  }
1009
1027
  }
1010
- var SERVER_LOG_CONTEXT = "server", logger2, MCP_SERVER_URL = "https://mcp.integrate.dev/api/v1/mcp";
1028
+ var SERVER_LOG_CONTEXT = "server", logger2, OAUTH_CONFIG_FIELDS, MCP_SERVER_URL = "https://mcp.integrate.dev/api/v1/mcp";
1011
1029
  var init_base_handler = __esm(() => {
1012
1030
  init_integration_summary();
1013
1031
  init_email_fetcher();
1014
1032
  init_logger();
1015
1033
  logger2 = createLogger("OAuthHandler", SERVER_LOG_CONTEXT);
1034
+ OAUTH_CONFIG_FIELDS = new Set([
1035
+ "clientId",
1036
+ "clientSecret",
1037
+ "scopes",
1038
+ "optionalScopes",
1039
+ "redirectUri",
1040
+ "client_id",
1041
+ "client_secret",
1042
+ "scope",
1043
+ "optional_scope",
1044
+ "redirect_uri",
1045
+ "provider"
1046
+ ]);
1016
1047
  });
1017
1048
 
1018
1049
  // ../oauth/pkce.ts
@@ -1508,7 +1539,7 @@ function createNextOAuthHandler(config) {
1508
1539
  const codeModeHeader = req.headers.get("x-integrate-code-mode");
1509
1540
  const tokensHeader = req.headers.get("x-integrate-tokens");
1510
1541
  const toolName = typeof body?.name === "string" ? body.name : "";
1511
- if (codeModeHeader === "1" && tokensHeader && toolName) {
1542
+ if (codeModeHeader === "1" && !authHeader && tokensHeader && toolName) {
1512
1543
  try {
1513
1544
  const tokens = JSON.parse(tokensHeader);
1514
1545
  let best = null;
@@ -2375,6 +2406,7 @@ class OAuthManager {
2375
2406
  }
2376
2407
  const provider = tokenData.provider || pendingAuth.provider;
2377
2408
  const tokenDataToStore = {
2409
+ sessionToken: tokenData.sessionToken,
2378
2410
  accessToken: tokenData.accessToken,
2379
2411
  refreshToken: tokenData.refreshToken,
2380
2412
  tokenType: tokenData.tokenType,
@@ -2416,6 +2448,7 @@ class OAuthManager {
2416
2448
  try {
2417
2449
  const response = await this.exchangeCodeForToken(pendingAuth.provider, code, pendingAuth.codeVerifier, state);
2418
2450
  const tokenData = {
2451
+ sessionToken: response.sessionToken,
2419
2452
  accessToken: response.accessToken,
2420
2453
  refreshToken: response.refreshToken,
2421
2454
  tokenType: response.tokenType,
@@ -2987,6 +3020,7 @@ class MCPClientBase {
2987
3020
  authState = new Map;
2988
3021
  oauthManager;
2989
3022
  eventEmitter = new SimpleEventEmitter;
3023
+ sessionToken;
2990
3024
  apiRouteBase;
2991
3025
  apiBaseUrl;
2992
3026
  databaseDetected = false;
@@ -3031,6 +3065,7 @@ class MCPClientBase {
3031
3065
  setProviderToken: config.setProviderToken,
3032
3066
  removeProviderToken: config.removeProviderToken
3033
3067
  });
3068
+ this.setSessionToken(config.sessionToken || this.loadSessionTokenFromStorage());
3034
3069
  for (const integration of this.integrations) {
3035
3070
  for (const toolName of integration.tools) {
3036
3071
  this.enabledToolNames.add(toolName);
@@ -3053,6 +3088,9 @@ class MCPClientBase {
3053
3088
  const provider = integration.oauth.provider;
3054
3089
  try {
3055
3090
  const tokenData = await this.oauthManager.getProviderToken(provider);
3091
+ if (tokenData?.sessionToken && !this.sessionToken) {
3092
+ this.setSessionToken(tokenData.sessionToken);
3093
+ }
3056
3094
  const currentState = this.authState.get(provider);
3057
3095
  if (currentState && !currentState.authenticated && !currentState.lastError) {
3058
3096
  this.authState.set(provider, { authenticated: !!tokenData });
@@ -3077,6 +3115,9 @@ class MCPClientBase {
3077
3115
  const provider = integration.oauth.provider;
3078
3116
  const tokenData = this.oauthManager.getProviderTokenFromCache(provider);
3079
3117
  if (tokenData) {
3118
+ if (tokenData.sessionToken && !this.sessionToken) {
3119
+ this.setSessionToken(tokenData.sessionToken);
3120
+ }
3080
3121
  this.authState.set(provider, { authenticated: true });
3081
3122
  }
3082
3123
  }
@@ -3098,6 +3139,9 @@ class MCPClientBase {
3098
3139
  if (integrationIds.includes("linear")) {
3099
3140
  this.linear = this.createIntegrationProxy("linear");
3100
3141
  }
3142
+ if (integrationIds.includes("railway")) {
3143
+ this.railway = this.createIntegrationProxy("railway");
3144
+ }
3101
3145
  if (integrationIds.includes("vercel")) {
3102
3146
  this.vercel = this.createIntegrationProxy("vercel");
3103
3147
  }
@@ -3128,6 +3172,9 @@ class MCPClientBase {
3128
3172
  if (integrationIds.includes("gslides")) {
3129
3173
  this.gslides = this.createIntegrationProxy("gslides");
3130
3174
  }
3175
+ if (integrationIds.includes("posthog")) {
3176
+ this.posthog = this.createIntegrationProxy("posthog");
3177
+ }
3131
3178
  this.server = this.createServerProxy();
3132
3179
  this.trigger = new TriggerClient({
3133
3180
  apiRouteBase: this.apiRouteBase,
@@ -3418,17 +3465,15 @@ class MCPClientBase {
3418
3465
  const headers = {
3419
3466
  "Content-Type": "application/json"
3420
3467
  };
3468
+ if (this.sessionToken) {
3469
+ headers["Authorization"] = `Bearer ${this.sessionToken}`;
3470
+ headers["X-Session-Token"] = this.sessionToken;
3471
+ }
3421
3472
  const integrationsHeader = this.getIntegrationHeaderValue();
3422
3473
  if (integrationsHeader) {
3423
3474
  headers["X-Integrations"] = integrationsHeader;
3424
3475
  }
3425
3476
  Object.assign(headers, integrationHeaders);
3426
- if (provider) {
3427
- const tokenData = await this.oauthManager.getProviderToken(provider, undefined, options?.context);
3428
- if (tokenData) {
3429
- headers["Authorization"] = `Bearer ${tokenData.accessToken}`;
3430
- }
3431
- }
3432
3477
  const response = await fetch(url, {
3433
3478
  method: "POST",
3434
3479
  headers,
@@ -3627,7 +3672,35 @@ class MCPClientBase {
3627
3672
  off(event, handler) {
3628
3673
  this.eventEmitter.off(event, handler);
3629
3674
  }
3675
+ loadSessionTokenFromStorage() {
3676
+ if (typeof window === "undefined" || !window.sessionStorage) {
3677
+ return;
3678
+ }
3679
+ try {
3680
+ return window.sessionStorage.getItem("integrate_session_token") || undefined;
3681
+ } catch {
3682
+ return;
3683
+ }
3684
+ }
3685
+ setSessionToken(sessionToken) {
3686
+ this.sessionToken = sessionToken;
3687
+ if (sessionToken) {
3688
+ this.transport.setHeader("X-Session-Token", sessionToken);
3689
+ } else {
3690
+ this.transport.removeHeader("X-Session-Token");
3691
+ }
3692
+ if (typeof window !== "undefined" && window.sessionStorage) {
3693
+ try {
3694
+ if (sessionToken) {
3695
+ window.sessionStorage.setItem("integrate_session_token", sessionToken);
3696
+ } else {
3697
+ window.sessionStorage.removeItem("integrate_session_token");
3698
+ }
3699
+ } catch {}
3700
+ }
3701
+ }
3630
3702
  clearSessionToken() {
3703
+ this.setSessionToken(undefined);
3631
3704
  this.oauthManager.clearAllProviderTokens();
3632
3705
  for (const integration of this.integrations) {
3633
3706
  if (integration.oauth) {
@@ -3769,6 +3842,7 @@ class MCPClientBase {
3769
3842
  if (tokenData) {
3770
3843
  this.eventEmitter.emit("auth:complete", {
3771
3844
  provider,
3845
+ sessionToken: tokenData.sessionToken || this.sessionToken,
3772
3846
  accessToken: tokenData.accessToken,
3773
3847
  expiresAt: tokenData.expiresAt
3774
3848
  });
@@ -3784,6 +3858,7 @@ class MCPClientBase {
3784
3858
  if (tokenData) {
3785
3859
  this.eventEmitter.emit("auth:complete", {
3786
3860
  provider,
3861
+ sessionToken: tokenData.sessionToken || this.sessionToken,
3787
3862
  accessToken: tokenData.accessToken,
3788
3863
  expiresAt: tokenData.expiresAt
3789
3864
  });
@@ -3797,9 +3872,13 @@ class MCPClientBase {
3797
3872
  async handleOAuthCallback(params) {
3798
3873
  try {
3799
3874
  const result = params.tokenData ? await this.oauthManager.handleCallbackWithToken(params.code, params.state, params.tokenData) : await this.oauthManager.handleCallback(params.code, params.state);
3875
+ if (result.sessionToken) {
3876
+ this.setSessionToken(result.sessionToken);
3877
+ }
3800
3878
  this.authState.set(result.provider, { authenticated: true });
3801
3879
  this.eventEmitter.emit("auth:complete", {
3802
3880
  provider: result.provider,
3881
+ sessionToken: result.sessionToken || this.sessionToken,
3803
3882
  accessToken: result.accessToken,
3804
3883
  expiresAt: result.expiresAt
3805
3884
  });
@@ -3869,81 +3948,87 @@ var logger11 = createLogger("Slack");
3869
3948
  // ../integrations/linear.ts
3870
3949
  init_logger();
3871
3950
  var logger12 = createLogger("Linear");
3951
+ // ../integrations/railway.ts
3952
+ init_logger();
3953
+ var logger13 = createLogger("Railway");
3872
3954
  // ../integrations/vercel.ts
3873
3955
  init_logger();
3874
- var logger13 = createLogger("Vercel");
3956
+ var logger14 = createLogger("Vercel");
3875
3957
  // ../integrations/zendesk.ts
3876
3958
  init_logger();
3877
- var logger14 = createLogger("Zendesk");
3959
+ var logger15 = createLogger("Zendesk");
3878
3960
  // ../integrations/stripe.ts
3879
3961
  init_logger();
3880
- var logger15 = createLogger("Stripe");
3962
+ var logger16 = createLogger("Stripe");
3881
3963
  // ../integrations/gcal.ts
3882
3964
  init_logger();
3883
- var logger16 = createLogger("Google Calendar");
3965
+ var logger17 = createLogger("Google Calendar");
3884
3966
  // ../integrations/outlook.ts
3885
3967
  init_logger();
3886
- var logger17 = createLogger("Outlook");
3968
+ var logger18 = createLogger("Outlook");
3887
3969
  // ../integrations/airtable.ts
3888
3970
  init_logger();
3889
- var logger18 = createLogger("Airtable");
3971
+ var logger19 = createLogger("Airtable");
3890
3972
  // ../integrations/todoist.ts
3891
3973
  init_logger();
3892
- var logger19 = createLogger("Todoist");
3974
+ var logger20 = createLogger("Todoist");
3893
3975
  // ../integrations/whatsapp.ts
3894
3976
  init_logger();
3895
- var logger20 = createLogger("WhatsApp");
3977
+ var logger21 = createLogger("WhatsApp");
3896
3978
  // ../integrations/calcom.ts
3897
3979
  init_logger();
3898
- var logger21 = createLogger("Cal.com");
3980
+ var logger22 = createLogger("Cal.com");
3899
3981
  // ../integrations/ramp.ts
3900
3982
  init_logger();
3901
- var logger22 = createLogger("Ramp");
3983
+ var logger23 = createLogger("Ramp");
3902
3984
  // ../integrations/onedrive.ts
3903
3985
  init_logger();
3904
- var logger23 = createLogger("OneDrive");
3986
+ var logger24 = createLogger("OneDrive");
3905
3987
  // ../integrations/dropbox.ts
3906
3988
  init_logger();
3907
- var logger24 = createLogger("Dropbox");
3989
+ var logger25 = createLogger("Dropbox");
3908
3990
  // ../integrations/word.ts
3909
3991
  init_logger();
3910
- var logger25 = createLogger("Word");
3992
+ var logger26 = createLogger("Word");
3911
3993
  // ../integrations/excel.ts
3912
3994
  init_logger();
3913
- var logger26 = createLogger("Excel");
3995
+ var logger27 = createLogger("Excel");
3914
3996
  // ../integrations/powerpoint.ts
3915
3997
  init_logger();
3916
- var logger27 = createLogger("PowerPoint");
3998
+ var logger28 = createLogger("PowerPoint");
3917
3999
  // ../integrations/gdocs.ts
3918
4000
  init_logger();
3919
- var logger28 = createLogger("Google Docs");
4001
+ var logger29 = createLogger("Google Docs");
3920
4002
  // ../integrations/gdrive.ts
3921
4003
  init_logger();
3922
- var logger29 = createLogger("Google Drive");
4004
+ var logger30 = createLogger("Google Drive");
3923
4005
  // ../integrations/gsheets.ts
3924
4006
  init_logger();
3925
- var logger30 = createLogger("Google Sheets");
4007
+ var logger31 = createLogger("Google Sheets");
3926
4008
  // ../integrations/gslides.ts
3927
4009
  init_logger();
3928
- var logger31 = createLogger("Google Slides");
4010
+ var logger32 = createLogger("Google Slides");
3929
4011
  // ../integrations/polar.ts
3930
4012
  init_logger();
3931
- var logger32 = createLogger("Polar");
4013
+ var logger33 = createLogger("Polar");
3932
4014
  // ../integrations/figma.ts
3933
4015
  init_logger();
3934
- var logger33 = createLogger("Figma");
4016
+ var logger34 = createLogger("Figma");
3935
4017
  // ../integrations/intercom.ts
3936
4018
  init_logger();
3937
- var logger34 = createLogger("Intercom");
4019
+ var logger35 = createLogger("Intercom");
3938
4020
  // ../integrations/hubspot.ts
3939
4021
  init_logger();
3940
- var logger35 = createLogger("HubSpot");
4022
+ var logger36 = createLogger("HubSpot");
3941
4023
  // ../integrations/youtube.ts
3942
4024
  init_logger();
3943
- var logger36 = createLogger("YouTube");
4025
+ var logger37 = createLogger("YouTube");
3944
4026
  // ../integrations/cursor.ts
3945
4027
  init_logger();
3946
- var logger37 = createLogger("Cursor");
4028
+ var logger38 = createLogger("Cursor");
4029
+ // ../integrations/posthog.ts
4030
+ init_logger();
4031
+ var logger39 = createLogger("PostHog");
3947
4032
  // ../ai/trigger-tools.ts
3948
4033
  init_utils();
3949
4034
 
@@ -3962,7 +4047,7 @@ init_tool_builder();
3962
4047
  init_tool_builder();
3963
4048
  // ../server.ts
3964
4049
  var SERVER_LOG_CONTEXT3 = "server";
3965
- var logger38 = createLogger("MCPServer", SERVER_LOG_CONTEXT3);
4050
+ var logger40 = createLogger("MCPServer", SERVER_LOG_CONTEXT3);
3966
4051
  var codeVerifierStorage = new Map;
3967
4052
  var unauthenticatedCodeModeWarnings = new Set;
3968
4053
  function toSolidStartHandler(clientOrHandlerOrOptions, _redirectOptions) {
@@ -1 +1 @@
1
- {"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../../src/adapters/nextjs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAU1E,KAAK,WAAW,GAAG,GAAG,CAAC;AACvB,KAAK,YAAY,GAAG,GAAG,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB;IAI7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCG;mBACkB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;kBACiB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;gBACe,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAsCrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuCG;oBACmB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAyCzD;;;;;;;;;;;;;;OAcG;iBACgB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAwBtD;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;;QAGC;;WAEG;kBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,GACpE,OAAO,CAAC,YAAY,CAAC;QA+BxB;;WAEG;iBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,GACpE,OAAO,CAAC,YAAY,CAAC;;IAiB5B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;aACY,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA0ClD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;qCAC8B;QAC/B,6DAA6D;QAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iEAAiE;QACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B;QAKG;;WAEG;kBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,GAAG,EAAE,MAAM,EAAE,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,GAAG,EAAE,MAAM,EAAE,CAAA;aAAE,CAAC,CAAA;SAAE,GAClE,OAAO,CAAC,YAAY,CAAC;QA0CxB;;WAEG;iBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,GAAG,EAAE,MAAM,EAAE,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,GAAG,EAAE,MAAM,EAAE,CAAA;aAAE,CAAC,CAAA;SAAE,GAClE,OAAO,CAAC,YAAY,CAAC;;EAqG/B"}
1
+ {"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../../src/adapters/nextjs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAU1E,KAAK,WAAW,GAAG,GAAG,CAAC;AACvB,KAAK,YAAY,GAAG,GAAG,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB;IAI7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCG;mBACkB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;kBACiB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;gBACe,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAsCrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuCG;oBACmB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAyCzD;;;;;;;;;;;;;;OAcG;iBACgB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAwBtD;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;;QAGC;;WAEG;kBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,GACpE,OAAO,CAAC,YAAY,CAAC;QA+BxB;;WAEG;iBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,GACpE,OAAO,CAAC,YAAY,CAAC;;IAiB5B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;aACY,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAyClD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;qCAC8B;QAC/B,6DAA6D;QAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iEAAiE;QACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B;QAKG;;WAEG;kBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,GAAG,EAAE,MAAM,EAAE,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,GAAG,EAAE,MAAM,EAAE,CAAA;aAAE,CAAC,CAAA;SAAE,GAClE,OAAO,CAAC,YAAY,CAAC;QA0CxB;;WAEG;iBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,GAAG,EAAE,MAAM,EAAE,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,GAAG,EAAE,MAAM,EAAE,CAAA;aAAE,CAAC,CAAA;SAAE,GAClE,OAAO,CAAC,YAAY,CAAC;;EAqG/B"}
@@ -358,10 +358,18 @@ var init_library_metadata = __esm(() => {
358
358
  description: "Manage Polar products, orders, and subscriptions",
359
359
  category: "Business"
360
360
  },
361
+ posthog: {
362
+ description: "Read PostHog organizations, projects, insights, and feature flags",
363
+ category: "Analytics"
364
+ },
361
365
  ramp: {
362
366
  description: "Manage Ramp corporate cards, bills, and spend",
363
367
  category: "Business"
364
368
  },
369
+ railway: {
370
+ description: "Manage Railway workspaces, projects, services, deployments, variables, domains, and volumes",
371
+ category: "Infrastructure"
372
+ },
365
373
  slack: {
366
374
  description: "Send and manage Slack messages and channels",
367
375
  category: "Communication"
@@ -605,6 +613,22 @@ var init_email_fetcher = __esm(() => {
605
613
  });
606
614
 
607
615
  // base-handler.ts
616
+ function getForwardableProviderConfig(config) {
617
+ if (!config) {
618
+ return {};
619
+ }
620
+ return Object.fromEntries(Object.entries(config).filter(([key, value]) => value !== undefined && value !== null && !OAUTH_CONFIG_FIELDS.has(key)).map(([key, value]) => [key, String(value)]));
621
+ }
622
+ function getStoredProviderConfig(config) {
623
+ const baseUrl = config?.baseUrl || config?.apiBaseUrl;
624
+ if (!baseUrl) {
625
+ return;
626
+ }
627
+ return {
628
+ baseUrl: String(baseUrl)
629
+ };
630
+ }
631
+
608
632
  class OAuthHandler {
609
633
  config;
610
634
  serverUrl;
@@ -675,25 +699,9 @@ class OAuthHandler {
675
699
  if (redirectUri) {
676
700
  url.searchParams.set("redirect_uri", redirectUri);
677
701
  }
678
- const OAUTH_FIELDS = new Set([
679
- "clientId",
680
- "clientSecret",
681
- "scopes",
682
- "optionalScopes",
683
- "redirectUri",
684
- "client_id",
685
- "client_secret",
686
- "scope",
687
- "optional_scope",
688
- "redirect_uri",
689
- "provider"
690
- ]);
691
- if (providerConfig.config) {
692
- for (const [key, value] of Object.entries(providerConfig.config)) {
693
- if (value !== undefined && value !== null && !OAUTH_FIELDS.has(key)) {
694
- url.searchParams.set(key, String(value));
695
- }
696
- }
702
+ const extraConfig = getForwardableProviderConfig(providerConfig.config);
703
+ for (const [key, value] of Object.entries(extraConfig)) {
704
+ url.searchParams.set(key, value);
697
705
  }
698
706
  const response = await fetch(url.toString(), {
699
707
  method: "GET",
@@ -780,7 +788,8 @@ class OAuthHandler {
780
788
  state: callbackRequest.state,
781
789
  client_id: providerConfig.clientId,
782
790
  client_secret: providerConfig.clientSecret,
783
- redirect_uri: providerConfig.redirectUri
791
+ redirect_uri: providerConfig.redirectUri,
792
+ ...getForwardableProviderConfig(providerConfig.config)
784
793
  })
785
794
  });
786
795
  if (!response.ok) {
@@ -792,12 +801,14 @@ class OAuthHandler {
792
801
  if (this.config.setProviderToken) {
793
802
  try {
794
803
  const tokenData = {
804
+ sessionToken: result.sessionToken,
795
805
  accessToken: result.accessToken,
796
806
  refreshToken: result.refreshToken,
797
807
  tokenType: result.tokenType,
798
808
  expiresIn: result.expiresIn,
799
809
  expiresAt: result.expiresAt,
800
- scopes: result.scopes ? result.scopes.flatMap((s) => s.split(" ").filter(Boolean)) : result.scopes
810
+ scopes: result.scopes ? result.scopes.flatMap((s) => s.split(" ").filter(Boolean)) : result.scopes,
811
+ providerConfig: getStoredProviderConfig(providerConfig.config)
801
812
  };
802
813
  const email = result.email || await fetchUserEmail(callbackRequest.provider, tokenData);
803
814
  if (email) {
@@ -914,6 +925,12 @@ class OAuthHandler {
914
925
  if (providerConfig.config?.subdomain) {
915
926
  body.subdomain = providerConfig.config.subdomain;
916
927
  }
928
+ const extraConfig = getForwardableProviderConfig(providerConfig.config);
929
+ for (const [key, value] of Object.entries(extraConfig)) {
930
+ if (body[key] === undefined) {
931
+ body[key] = value;
932
+ }
933
+ }
917
934
  const url = new URL("/oauth/refresh", this.serverUrl);
918
935
  const response = await fetch(url.toString(), {
919
936
  method: "POST",
@@ -940,7 +957,8 @@ class OAuthHandler {
940
957
  tokenType: result.tokenType,
941
958
  expiresIn: result.expiresIn,
942
959
  expiresAt: result.expiresAt,
943
- scopes: result.scopes ? result.scopes.flatMap((s) => s.split(" ").filter(Boolean)) : result.scopes
960
+ scopes: result.scopes ? result.scopes.flatMap((s) => s.split(" ").filter(Boolean)) : result.scopes,
961
+ providerConfig: getStoredProviderConfig(providerConfig.config)
944
962
  };
945
963
  const email = result.email || await fetchUserEmail(refreshRequest.provider, tokenData);
946
964
  if (email) {
@@ -1007,12 +1025,25 @@ class OAuthHandler {
1007
1025
  return jsonRpcResponse.result;
1008
1026
  }
1009
1027
  }
1010
- var SERVER_LOG_CONTEXT = "server", logger2, MCP_SERVER_URL = "https://mcp.integrate.dev/api/v1/mcp";
1028
+ var SERVER_LOG_CONTEXT = "server", logger2, OAUTH_CONFIG_FIELDS, MCP_SERVER_URL = "https://mcp.integrate.dev/api/v1/mcp";
1011
1029
  var init_base_handler = __esm(() => {
1012
1030
  init_integration_summary();
1013
1031
  init_email_fetcher();
1014
1032
  init_logger();
1015
1033
  logger2 = createLogger("OAuthHandler", SERVER_LOG_CONTEXT);
1034
+ OAUTH_CONFIG_FIELDS = new Set([
1035
+ "clientId",
1036
+ "clientSecret",
1037
+ "scopes",
1038
+ "optionalScopes",
1039
+ "redirectUri",
1040
+ "client_id",
1041
+ "client_secret",
1042
+ "scope",
1043
+ "optional_scope",
1044
+ "redirect_uri",
1045
+ "provider"
1046
+ ]);
1016
1047
  });
1017
1048
 
1018
1049
  // ../oauth/pkce.ts
@@ -1253,7 +1284,7 @@ function createNextOAuthHandler(config) {
1253
1284
  const codeModeHeader = req.headers.get("x-integrate-code-mode");
1254
1285
  const tokensHeader = req.headers.get("x-integrate-tokens");
1255
1286
  const toolName = typeof body?.name === "string" ? body.name : "";
1256
- if (codeModeHeader === "1" && tokensHeader && toolName) {
1287
+ if (codeModeHeader === "1" && !authHeader && tokensHeader && toolName) {
1257
1288
  try {
1258
1289
  const tokens = JSON.parse(tokensHeader);
1259
1290
  let best = null;