integrate-sdk 0.8.61-dev.0 → 0.8.62-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/oauth.js CHANGED
@@ -10181,21 +10181,7 @@ var init_ai = __esm(() => {
10181
10181
  init_trigger_tools();
10182
10182
  });
10183
10183
 
10184
- // src/triggers/types.ts
10185
- var exports_types = {};
10186
- __export(exports_types, {
10187
- WEBHOOK_DELIVERY_TIMEOUT_MS: () => WEBHOOK_DELIVERY_TIMEOUT_MS,
10188
- MAX_TRIGGER_STEPS: () => MAX_TRIGGER_STEPS
10189
- });
10190
- var MAX_TRIGGER_STEPS = 20, WEBHOOK_DELIVERY_TIMEOUT_MS = 1e4;
10191
-
10192
10184
  // src/triggers/webhooks.ts
10193
- var exports_webhooks = {};
10194
- __export(exports_webhooks, {
10195
- signPayload: () => signPayload,
10196
- deliverWebhooks: () => deliverWebhooks,
10197
- deliverWebhook: () => deliverWebhook
10198
- });
10199
10185
  async function signPayload(payload, secret) {
10200
10186
  const encoder = new TextEncoder;
10201
10187
  const data = encoder.encode(JSON.stringify(payload));
@@ -10244,6 +10230,155 @@ var init_webhooks = __esm(() => {
10244
10230
  logger30 = createLogger("Webhooks", "server");
10245
10231
  });
10246
10232
 
10233
+ // src/triggers/types.ts
10234
+ var MAX_TRIGGER_STEPS = 20, WEBHOOK_DELIVERY_TIMEOUT_MS = 1e4;
10235
+
10236
+ // src/triggers/executor.ts
10237
+ var exports_executor = {};
10238
+ __export(exports_executor, {
10239
+ executeTrigger: () => executeTrigger
10240
+ });
10241
+ async function executeTrigger(trigger, config, context) {
10242
+ const steps = [];
10243
+ let currentToolName = trigger.toolName;
10244
+ let currentToolArguments = trigger.toolArguments;
10245
+ let currentProvider = trigger.provider;
10246
+ let stepIndex = 0;
10247
+ while (stepIndex < MAX_TRIGGER_STEPS) {
10248
+ const stepValidation = validateStepLimit(stepIndex, MAX_TRIGGER_STEPS);
10249
+ if (!stepValidation.valid) {
10250
+ logger31.error(`[Trigger ${trigger.id}] ${stepValidation.error}`);
10251
+ break;
10252
+ }
10253
+ const providerToken = await config.getProviderToken(currentProvider, undefined, context);
10254
+ if (!providerToken) {
10255
+ const error = `No OAuth token available for provider '${currentProvider}'`;
10256
+ logger31.error(`[Trigger ${trigger.id}] ${error}`);
10257
+ steps.push({
10258
+ stepIndex,
10259
+ toolName: currentToolName,
10260
+ success: false,
10261
+ error,
10262
+ duration: 0,
10263
+ executedAt: new Date().toISOString()
10264
+ });
10265
+ await config.triggers.update(trigger.id, {
10266
+ lastRunAt: new Date().toISOString(),
10267
+ runCount: (trigger.runCount || 0) + 1,
10268
+ lastError: error,
10269
+ status: "failed"
10270
+ }, context);
10271
+ return { success: false, steps, error };
10272
+ }
10273
+ const startTime = Date.now();
10274
+ let toolResult;
10275
+ let stepSuccess = true;
10276
+ let stepError;
10277
+ try {
10278
+ toolResult = await config.handleToolCall({ name: currentToolName, arguments: currentToolArguments }, `${providerToken.tokenType || "Bearer"} ${providerToken.accessToken}`, null);
10279
+ } catch (err) {
10280
+ stepSuccess = false;
10281
+ stepError = err.message || "Tool execution failed";
10282
+ logger31.error(`[Trigger ${trigger.id}] Step ${stepIndex} failed:`, err);
10283
+ }
10284
+ const duration = Date.now() - startTime;
10285
+ const executedAt = new Date().toISOString();
10286
+ steps.push({
10287
+ stepIndex,
10288
+ toolName: currentToolName,
10289
+ success: stepSuccess,
10290
+ result: stepSuccess ? toolResult : undefined,
10291
+ error: stepError,
10292
+ duration,
10293
+ executedAt
10294
+ });
10295
+ if (!config.triggers.onComplete || !stepSuccess) {
10296
+ const updates = {
10297
+ lastRunAt: executedAt,
10298
+ runCount: (trigger.runCount || 0) + 1
10299
+ };
10300
+ if (stepSuccess) {
10301
+ updates.lastResult = toolResult;
10302
+ updates.lastError = undefined;
10303
+ if (trigger.schedule.type === "once") {
10304
+ updates.status = "completed";
10305
+ }
10306
+ } else {
10307
+ updates.lastError = stepError;
10308
+ updates.status = "failed";
10309
+ }
10310
+ await config.triggers.update(trigger.id, updates, context);
10311
+ return { success: stepSuccess, steps, error: stepError };
10312
+ }
10313
+ const completeRequest = {
10314
+ success: stepSuccess,
10315
+ result: stepSuccess ? toolResult : undefined,
10316
+ error: stepError,
10317
+ executedAt,
10318
+ duration,
10319
+ stepIndex,
10320
+ previousResults: steps,
10321
+ final: false
10322
+ };
10323
+ const completeResponse = await config.triggers.onComplete({
10324
+ trigger,
10325
+ request: completeRequest,
10326
+ context
10327
+ });
10328
+ if (completeResponse.hasMore && completeResponse.nextStep) {
10329
+ currentToolName = completeResponse.nextStep.toolName;
10330
+ currentToolArguments = completeResponse.nextStep.toolArguments;
10331
+ currentProvider = completeResponse.nextStep.provider;
10332
+ stepIndex++;
10333
+ continue;
10334
+ }
10335
+ const finalUpdates = {
10336
+ lastRunAt: executedAt,
10337
+ runCount: (trigger.runCount || 0) + 1
10338
+ };
10339
+ if (stepSuccess) {
10340
+ finalUpdates.lastResult = toolResult;
10341
+ finalUpdates.lastError = undefined;
10342
+ if (trigger.schedule.type === "once") {
10343
+ finalUpdates.status = "completed";
10344
+ }
10345
+ } else {
10346
+ finalUpdates.lastError = stepError;
10347
+ finalUpdates.status = "failed";
10348
+ }
10349
+ await config.triggers.update(trigger.id, finalUpdates, context);
10350
+ if (completeResponse.webhooks && completeResponse.webhooks.length > 0) {
10351
+ const totalDuration = steps.reduce((sum, s) => sum + (s.duration || 0), 0);
10352
+ const payload = {
10353
+ triggerId: trigger.id,
10354
+ success: steps.every((s) => s.success),
10355
+ steps,
10356
+ totalSteps: steps.length,
10357
+ totalDuration,
10358
+ executedAt
10359
+ };
10360
+ deliverWebhooks(completeResponse.webhooks, payload, WEBHOOK_DELIVERY_TIMEOUT_MS).catch(() => {});
10361
+ }
10362
+ return { success: stepSuccess, steps, error: stepError };
10363
+ }
10364
+ const limitError = `Trigger execution exceeded maximum of ${MAX_TRIGGER_STEPS} steps`;
10365
+ logger31.error(`[Trigger ${trigger.id}] ${limitError}`);
10366
+ await config.triggers.update(trigger.id, {
10367
+ lastRunAt: new Date().toISOString(),
10368
+ runCount: (trigger.runCount || 0) + 1,
10369
+ lastError: limitError,
10370
+ status: "failed"
10371
+ }, context);
10372
+ return { success: false, steps, error: limitError };
10373
+ }
10374
+ var logger31;
10375
+ var init_executor = __esm(() => {
10376
+ init_logger();
10377
+ init_utils2();
10378
+ init_webhooks();
10379
+ logger31 = createLogger("TriggerExecutor", "server");
10380
+ });
10381
+
10247
10382
  // src/server.ts
10248
10383
  var exports_server = {};
10249
10384
  __export(exports_server, {
@@ -10337,7 +10472,7 @@ function createMCPServer(config) {
10337
10472
  if (integration.oauth) {
10338
10473
  const { clientId, clientSecret, redirectUri: integrationRedirectUri, config: oauthConfig } = integration.oauth;
10339
10474
  if (!clientId || !clientSecret) {
10340
- logger31.warn(`Warning: Integration "${integration.id}" is missing OAuth credentials. ` + `Provide clientId and clientSecret in the integration configuration.`);
10475
+ logger32.warn(`Warning: Integration "${integration.id}" is missing OAuth credentials. ` + `Provide clientId and clientSecret in the integration configuration.`);
10341
10476
  return integration;
10342
10477
  }
10343
10478
  const redirectUri = integrationRedirectUri || config.redirectUri || getDefaultRedirectUri();
@@ -10468,7 +10603,7 @@ function createMCPServer(config) {
10468
10603
  }
10469
10604
  return response2;
10470
10605
  } catch (error) {
10471
- logger31.error("[MCP Tool Call] Error:", error);
10606
+ logger32.error("[MCP Tool Call] Error:", error);
10472
10607
  return Response.json({ error: error.message || "Failed to execute tool call" }, { status: error.statusCode || 500 });
10473
10608
  }
10474
10609
  }
@@ -10484,6 +10619,57 @@ function createMCPServer(config) {
10484
10619
  }));
10485
10620
  return Response.json({ integrations });
10486
10621
  }
10622
+ if (segments.length === 2 && segments[0] === "triggers" && segments[1] === "notify" && method === "POST") {
10623
+ if (!config.triggers) {
10624
+ return Response.json({ error: "Triggers not configured. Add triggers callbacks to createMCPServer config." }, { status: 501 });
10625
+ }
10626
+ try {
10627
+ const apiKey = webRequest.headers.get("x-api-key");
10628
+ if (!apiKey || apiKey !== config.apiKey) {
10629
+ return Response.json({ error: "Unauthorized" }, { status: 401 });
10630
+ }
10631
+ const body = await webRequest.json();
10632
+ const { triggerId } = body;
10633
+ if (!triggerId) {
10634
+ return Response.json({ error: "triggerId is required" }, { status: 400 });
10635
+ }
10636
+ const trigger = await config.triggers.get(triggerId);
10637
+ if (!trigger) {
10638
+ return Response.json({ error: "Trigger not found" }, { status: 404 });
10639
+ }
10640
+ if (!trigger.provider) {
10641
+ return Response.json({ error: "Trigger has no provider configured" }, { status: 400 });
10642
+ }
10643
+ const triggerContext = trigger.userId ? { userId: trigger.userId } : undefined;
10644
+ const { executeTrigger: executeTrigger2 } = await Promise.resolve().then(() => (init_executor(), exports_executor));
10645
+ const { OAuthHandler: OAuthHandler2 } = await Promise.resolve().then(() => (init_base_handler(), exports_base_handler));
10646
+ const oauthHandler = new OAuthHandler2({
10647
+ providers,
10648
+ serverUrl: config.serverUrl,
10649
+ apiKey: config.apiKey,
10650
+ setProviderToken: config.setProviderToken,
10651
+ removeProviderToken: config.removeProviderToken,
10652
+ getSessionContext: config.getSessionContext
10653
+ });
10654
+ const executionResult = await executeTrigger2(trigger, {
10655
+ triggers: config.triggers,
10656
+ getProviderToken: async (provider, email, ctx) => {
10657
+ return config.getProviderToken ? await config.getProviderToken(provider, email, ctx) : undefined;
10658
+ },
10659
+ handleToolCall: (toolBody, authHeader, integrationsHeader) => {
10660
+ return oauthHandler.handleToolCall(toolBody, authHeader, integrationsHeader);
10661
+ }
10662
+ }, triggerContext);
10663
+ return Response.json({
10664
+ success: executionResult.success,
10665
+ steps: executionResult.steps,
10666
+ error: executionResult.error
10667
+ });
10668
+ } catch (error) {
10669
+ logger32.error("[Trigger Notify] Error:", error);
10670
+ return Response.json({ error: error.message || "Failed to execute trigger" }, { status: 500 });
10671
+ }
10672
+ }
10487
10673
  if (segments.length >= 1 && segments[0] === "triggers") {
10488
10674
  if (!config.triggers) {
10489
10675
  return Response.json({ error: "Triggers not configured. Add triggers callbacks to createMCPServer config." }, { status: 501 });
@@ -10524,8 +10710,9 @@ function createMCPServer(config) {
10524
10710
  };
10525
10711
  const created = await config.triggers.create(trigger, context2);
10526
10712
  const schedulerUrl = config.schedulerUrl || config.serverUrl || "https://mcp.integrate.dev";
10527
- const callbackBaseUrl = process.env.INTEGRATE_URL || (typeof window !== "undefined" ? window.location.origin : "http://localhost:3000");
10713
+ const defaultCallbackBaseUrl = process.env.INTEGRATE_URL || (typeof window !== "undefined" ? window.location.origin : "http://localhost:3000");
10528
10714
  try {
10715
+ const callbackBaseUrl = config.triggers.getCallbackUrl ? await config.triggers.getCallbackUrl(context2) : defaultCallbackBaseUrl;
10529
10716
  await fetch(`${schedulerUrl}/scheduler/register`, {
10530
10717
  method: "POST",
10531
10718
  headers: {
@@ -10535,8 +10722,7 @@ function createMCPServer(config) {
10535
10722
  body: JSON.stringify({
10536
10723
  triggerId: created.id,
10537
10724
  schedule: created.schedule,
10538
- callbackUrl: `${callbackBaseUrl}/api/integrate/triggers/${created.id}/execute`,
10539
- completeUrl: `${callbackBaseUrl}/api/integrate/triggers/${created.id}/complete`,
10725
+ callbackUrl: `${callbackBaseUrl}/api/integrate/triggers/notify`,
10540
10726
  metadata: {
10541
10727
  userId: context2?.userId,
10542
10728
  provider: created.provider
@@ -10544,7 +10730,7 @@ function createMCPServer(config) {
10544
10730
  })
10545
10731
  });
10546
10732
  } catch (scheduleError) {
10547
- logger31.error("[Trigger] Failed to register with scheduler:", scheduleError);
10733
+ logger32.error("[Trigger] Failed to register with scheduler:", scheduleError);
10548
10734
  }
10549
10735
  return Response.json(created, { status: 201 });
10550
10736
  }
@@ -10579,7 +10765,7 @@ function createMCPServer(config) {
10579
10765
  body: JSON.stringify({ triggerId })
10580
10766
  });
10581
10767
  } catch (error) {
10582
- logger31.error("[Trigger] Failed to pause in scheduler:", error);
10768
+ logger32.error("[Trigger] Failed to pause in scheduler:", error);
10583
10769
  }
10584
10770
  return Response.json(updated);
10585
10771
  } else if (subAction === "resume" && method === "POST") {
@@ -10607,7 +10793,7 @@ function createMCPServer(config) {
10607
10793
  body: JSON.stringify({ triggerId })
10608
10794
  });
10609
10795
  } catch (error) {
10610
- logger31.error("[Trigger] Failed to resume in scheduler:", error);
10796
+ logger32.error("[Trigger] Failed to resume in scheduler:", error);
10611
10797
  }
10612
10798
  return Response.json(updated);
10613
10799
  } else if (subAction === "run" && method === "POST") {
@@ -10618,10 +10804,7 @@ function createMCPServer(config) {
10618
10804
  if (!trigger.provider) {
10619
10805
  return Response.json({ error: "Trigger has no provider configured" }, { status: 400 });
10620
10806
  }
10621
- const providerToken = config.getProviderToken ? await config.getProviderToken(trigger.provider, undefined, context2) : undefined;
10622
- if (!providerToken) {
10623
- return Response.json({ error: "No OAuth token available for this trigger" }, { status: 401 });
10624
- }
10807
+ const { executeTrigger: executeTrigger2 } = await Promise.resolve().then(() => (init_executor(), exports_executor));
10625
10808
  const { OAuthHandler: OAuthHandler2 } = await Promise.resolve().then(() => (init_base_handler(), exports_base_handler));
10626
10809
  const oauthHandler = new OAuthHandler2({
10627
10810
  providers,
@@ -10631,145 +10814,23 @@ function createMCPServer(config) {
10631
10814
  removeProviderToken: config.removeProviderToken,
10632
10815
  getSessionContext: config.getSessionContext
10633
10816
  });
10634
- const startTime = Date.now();
10635
- try {
10636
- const result = await oauthHandler.handleToolCall({ name: trigger.toolName, arguments: trigger.toolArguments }, `Bearer ${providerToken.accessToken}`, null);
10637
- const duration = Date.now() - startTime;
10638
- const executionResult = {
10639
- success: true,
10640
- result,
10641
- executedAt: new Date().toISOString(),
10642
- duration
10643
- };
10644
- await config.triggers.update(triggerId, {
10645
- lastRunAt: executionResult.executedAt,
10646
- runCount: (trigger.runCount || 0) + 1,
10647
- lastResult: result,
10648
- lastError: undefined
10649
- }, context2);
10650
- return Response.json(executionResult);
10651
- } catch (error) {
10652
- const duration = Date.now() - startTime;
10653
- const executionResult = {
10654
- success: false,
10655
- error: error.message || "Tool execution failed",
10656
- executedAt: new Date().toISOString(),
10657
- duration
10658
- };
10659
- await config.triggers.update(triggerId, {
10660
- lastRunAt: executionResult.executedAt,
10661
- runCount: (trigger.runCount || 0) + 1,
10662
- lastError: error.message,
10663
- status: "failed"
10664
- }, context2);
10665
- return Response.json(executionResult, { status: 500 });
10666
- }
10667
- } else if (subAction === "execute" && method === "GET") {
10668
- const apiKey = webRequest.headers.get("x-api-key");
10669
- if (!apiKey || apiKey !== config.apiKey) {
10670
- return Response.json({ error: "Unauthorized" }, { status: 401 });
10671
- }
10672
- const trigger = await config.triggers.get(triggerId, context2);
10673
- if (!trigger) {
10674
- return Response.json({ error: "Trigger not found" }, { status: 404 });
10675
- }
10676
- if (!trigger.provider) {
10677
- return Response.json({ error: "Trigger has no provider configured" }, { status: 400 });
10678
- }
10679
- const providerToken = config.getProviderToken ? await config.getProviderToken(trigger.provider, undefined, context2) : undefined;
10680
- if (!providerToken) {
10681
- return Response.json({ error: "No OAuth token available for this trigger" }, { status: 401 });
10682
- }
10683
- return Response.json({
10684
- trigger: {
10685
- id: trigger.id,
10686
- toolName: trigger.toolName,
10687
- toolArguments: trigger.toolArguments,
10688
- provider: trigger.provider
10817
+ const executionResult = await executeTrigger2(trigger, {
10818
+ triggers: config.triggers,
10819
+ getProviderToken: async (provider, email, ctx) => {
10820
+ return config.getProviderToken ? await config.getProviderToken(provider, email, ctx) : undefined;
10689
10821
  },
10690
- accessToken: providerToken.accessToken,
10691
- tokenType: providerToken.tokenType || "Bearer"
10692
- });
10693
- } else if (subAction === "complete" && method === "POST") {
10694
- const apiKey = webRequest.headers.get("x-api-key");
10695
- if (!apiKey || apiKey !== config.apiKey) {
10696
- return Response.json({ error: "Unauthorized" }, { status: 401 });
10697
- }
10698
- const body = await webRequest.json();
10699
- const trigger = await config.triggers.get(triggerId, context2);
10700
- if (!trigger) {
10701
- return Response.json({ error: "Trigger not found" }, { status: 404 });
10702
- }
10703
- if (body.stepIndex != null) {
10704
- const { validateStepLimit: validateStepLimit2 } = await Promise.resolve().then(() => (init_utils2(), exports_utils));
10705
- const { MAX_TRIGGER_STEPS: MAX_TRIGGER_STEPS2 } = await Promise.resolve().then(() => exports_types);
10706
- const stepValidation = validateStepLimit2(body.stepIndex, MAX_TRIGGER_STEPS2);
10707
- if (!stepValidation.valid) {
10708
- return Response.json({ error: stepValidation.error }, { status: 400 });
10822
+ handleToolCall: (toolBody, authHeader, integrationsHeader) => {
10823
+ return oauthHandler.handleToolCall(toolBody, authHeader, integrationsHeader);
10709
10824
  }
10710
- }
10711
- if (config.triggers.onComplete) {
10712
- try {
10713
- const completeResponse = await config.triggers.onComplete({
10714
- trigger,
10715
- request: body,
10716
- context: context2
10717
- });
10718
- if (completeResponse.hasMore) {
10719
- return Response.json(completeResponse);
10720
- }
10721
- const updates2 = {
10722
- lastRunAt: body.executedAt,
10723
- runCount: (trigger.runCount || 0) + 1
10724
- };
10725
- if (body.success) {
10726
- updates2.lastResult = body.result;
10727
- updates2.lastError = undefined;
10728
- if (trigger.schedule.type === "once") {
10729
- updates2.status = "completed";
10730
- }
10731
- } else {
10732
- updates2.lastError = body.error;
10733
- updates2.status = "failed";
10734
- }
10735
- await config.triggers.update(triggerId, updates2, context2);
10736
- if (completeResponse.webhooks && completeResponse.webhooks.length > 0) {
10737
- const { deliverWebhooks: deliverWebhooks2 } = await Promise.resolve().then(() => (init_webhooks(), exports_webhooks));
10738
- const { WEBHOOK_DELIVERY_TIMEOUT_MS: WEBHOOK_DELIVERY_TIMEOUT_MS2 } = await Promise.resolve().then(() => exports_types);
10739
- const steps = body.previousResults || [];
10740
- const totalDuration = steps.reduce((sum, s) => sum + (s.duration || 0), 0);
10741
- const payload = {
10742
- triggerId,
10743
- success: body.success,
10744
- steps,
10745
- totalSteps: steps.length,
10746
- totalDuration,
10747
- executedAt: body.executedAt
10748
- };
10749
- deliverWebhooks2(completeResponse.webhooks, payload, WEBHOOK_DELIVERY_TIMEOUT_MS2).catch(() => {});
10750
- }
10751
- return Response.json(completeResponse);
10752
- } catch (error) {
10753
- logger31.error("onComplete callback error:", error);
10754
- return Response.json({ error: "Internal server error in onComplete callback" }, { status: 500 });
10755
- }
10756
- }
10757
- const updates = {
10758
- lastRunAt: body.executedAt,
10759
- runCount: (trigger.runCount || 0) + 1
10760
- };
10761
- if (body.success) {
10762
- updates.lastResult = body.result;
10763
- updates.lastError = undefined;
10764
- if (trigger.schedule.type === "once") {
10765
- updates.status = "completed";
10766
- }
10767
- } else {
10768
- updates.lastError = body.error;
10769
- updates.status = "failed";
10770
- }
10771
- await config.triggers.update(triggerId, updates, context2);
10772
- return Response.json({ success: true });
10825
+ }, context2);
10826
+ return Response.json({
10827
+ success: executionResult.success,
10828
+ result: executionResult.steps[0]?.result,
10829
+ executedAt: executionResult.steps[0]?.executedAt || new Date().toISOString(),
10830
+ duration: executionResult.steps[0]?.duration,
10831
+ error: executionResult.error,
10832
+ steps: executionResult.steps
10833
+ }, { status: executionResult.success ? 200 : 500 });
10773
10834
  } else if (!subAction && method === "GET") {
10774
10835
  const trigger = await config.triggers.get(triggerId, context2);
10775
10836
  if (!trigger) {
@@ -10802,7 +10863,7 @@ function createMCPServer(config) {
10802
10863
  })
10803
10864
  });
10804
10865
  } catch (error) {
10805
- logger31.error("[Trigger] Failed to update scheduler:", error);
10866
+ logger32.error("[Trigger] Failed to update scheduler:", error);
10806
10867
  }
10807
10868
  }
10808
10869
  return Response.json(updated);
@@ -10819,14 +10880,14 @@ function createMCPServer(config) {
10819
10880
  body: JSON.stringify({ triggerId })
10820
10881
  });
10821
10882
  } catch (error) {
10822
- logger31.error("[Trigger] Failed to unregister from scheduler:", error);
10883
+ logger32.error("[Trigger] Failed to unregister from scheduler:", error);
10823
10884
  }
10824
10885
  return new Response(null, { status: 204 });
10825
10886
  }
10826
10887
  }
10827
10888
  return Response.json({ error: "Invalid trigger route or method" }, { status: 404 });
10828
10889
  } catch (error) {
10829
- logger31.error("[Trigger] Error:", error);
10890
+ logger32.error("[Trigger] Error:", error);
10830
10891
  return Response.json({ error: error.message || "Failed to process trigger request" }, { status: error.statusCode || 500 });
10831
10892
  }
10832
10893
  }
@@ -10852,11 +10913,11 @@ function createMCPServer(config) {
10852
10913
  const errorRedirectUrl = "/auth-error";
10853
10914
  if (error) {
10854
10915
  const errorMsg = errorDescription || error;
10855
- logger31.error("[OAuth Redirect] Error:", errorMsg);
10916
+ logger32.error("[OAuth Redirect] Error:", errorMsg);
10856
10917
  return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent(errorMsg)}`, webRequest.url));
10857
10918
  }
10858
10919
  if (!code || !state) {
10859
- logger31.error("[OAuth Redirect] Missing code or state parameter");
10920
+ logger32.error("[OAuth Redirect] Missing code or state parameter");
10860
10921
  return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent("Invalid OAuth callback")}`, webRequest.url));
10861
10922
  }
10862
10923
  let returnUrl = defaultRedirectUrl;
@@ -10932,7 +10993,7 @@ function createMCPServer(config) {
10932
10993
  frontendUrl.hash = `oauth_callback=${encodeURIComponent(JSON.stringify({ code, state, tokenData }))}`;
10933
10994
  return Response.redirect(frontendUrl);
10934
10995
  } catch (error2) {
10935
- logger31.error("[OAuth Backend Callback] Error:", error2);
10996
+ logger32.error("[OAuth Backend Callback] Error:", error2);
10936
10997
  return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent(error2.message || "Failed to exchange token")}`, webRequest.url));
10937
10998
  }
10938
10999
  } else {
@@ -11151,7 +11212,7 @@ function toSvelteKitHandler(clientOrHandlerOrOptions, _redirectOptions) {
11151
11212
  }
11152
11213
  };
11153
11214
  }
11154
- var SERVER_LOG_CONTEXT2 = "server", logger31, globalServerConfig = null, codeVerifierStorage, POST = async (req, context) => {
11215
+ var SERVER_LOG_CONTEXT2 = "server", logger32, globalServerConfig = null, codeVerifierStorage, POST = async (req, context) => {
11155
11216
  if (!globalServerConfig) {
11156
11217
  return Response.json({ error: "OAuth not configured. Call createMCPServer() in your server initialization file first." }, { status: 500 });
11157
11218
  }
@@ -11199,7 +11260,7 @@ var init_server = __esm(() => {
11199
11260
  init_anthropic();
11200
11261
  init_google();
11201
11262
  init_ai();
11202
- logger31 = createLogger("MCPServer", SERVER_LOG_CONTEXT2);
11263
+ logger32 = createLogger("MCPServer", SERVER_LOG_CONTEXT2);
11203
11264
  codeVerifierStorage = new Map;
11204
11265
  });
11205
11266
 
@@ -11550,7 +11611,7 @@ class OAuthHandler {
11550
11611
  url.searchParams.set("state", authorizeRequest.state);
11551
11612
  url.searchParams.set("code_challenge", authorizeRequest.codeChallenge);
11552
11613
  url.searchParams.set("code_challenge_method", authorizeRequest.codeChallengeMethod);
11553
- const redirectUri = authorizeRequest.redirectUri || providerConfig.redirectUri;
11614
+ const redirectUri = providerConfig.redirectUri;
11554
11615
  if (redirectUri) {
11555
11616
  url.searchParams.set("redirect_uri", redirectUri);
11556
11617
  }
@@ -11662,7 +11723,7 @@ class OAuthHandler {
11662
11723
  tokenType: result.tokenType,
11663
11724
  expiresIn: result.expiresIn,
11664
11725
  expiresAt: result.expiresAt,
11665
- scopes: result.scopes
11726
+ scopes: result.scopes ? result.scopes.flatMap((s) => s.split(" ").filter(Boolean)) : result.scopes
11666
11727
  };
11667
11728
  await this.config.setProviderToken(callbackRequest.provider, tokenData, undefined, context);
11668
11729
  } catch (error) {}
@@ -11712,11 +11773,11 @@ class OAuthHandler {
11712
11773
  try {
11713
11774
  await this.config.removeProviderToken(request.provider, undefined, context);
11714
11775
  } catch (error) {
11715
- logger32.error(`Failed to delete token for ${request.provider} from database via removeProviderToken:`, error);
11776
+ logger33.error(`Failed to delete token for ${request.provider} from database via removeProviderToken:`, error);
11716
11777
  }
11717
11778
  }
11718
11779
  } catch (error) {
11719
- logger32.error(`Failed to extract context for disconnect:`, error);
11780
+ logger33.error(`Failed to extract context for disconnect:`, error);
11720
11781
  }
11721
11782
  }
11722
11783
  const url = new URL("/oauth/disconnect", this.serverUrl);
@@ -11776,17 +11837,17 @@ class OAuthHandler {
11776
11837
  return jsonRpcResponse.result;
11777
11838
  }
11778
11839
  }
11779
- var SERVER_LOG_CONTEXT3 = "server", logger32, MCP_SERVER_URL2 = "https://mcp.integrate.dev/api/v1/mcp";
11840
+ var SERVER_LOG_CONTEXT3 = "server", logger33, MCP_SERVER_URL2 = "https://mcp.integrate.dev/api/v1/mcp";
11780
11841
  var init_base_handler = __esm(() => {
11781
11842
  init_logger();
11782
- logger32 = createLogger("OAuthHandler", SERVER_LOG_CONTEXT3);
11843
+ logger33 = createLogger("OAuthHandler", SERVER_LOG_CONTEXT3);
11783
11844
  });
11784
11845
 
11785
11846
  // src/adapters/auto-routes.ts
11786
11847
  init_base_handler();
11787
11848
  init_logger();
11788
11849
  var SERVER_LOG_CONTEXT4 = "server";
11789
- var logger33 = createLogger("AutoRoutes", SERVER_LOG_CONTEXT4);
11850
+ var logger34 = createLogger("AutoRoutes", SERVER_LOG_CONTEXT4);
11790
11851
  var globalOAuthConfig = null;
11791
11852
  async function POST2(req, context) {
11792
11853
  if (!globalOAuthConfig) {
@@ -11828,7 +11889,7 @@ async function POST2(req, context) {
11828
11889
  }
11829
11890
  return createErrorResponse(`Unknown action: ${action}`, 404);
11830
11891
  } catch (error) {
11831
- logger33.error(`[OAuth ${action}] Error:`, error);
11892
+ logger34.error(`[OAuth ${action}] Error:`, error);
11832
11893
  return createErrorResponse(error.message, 500);
11833
11894
  }
11834
11895
  }
@@ -11856,7 +11917,7 @@ async function GET2(req, context) {
11856
11917
  }
11857
11918
  return createErrorResponse(`Unknown action: ${action}`, 404);
11858
11919
  } catch (error) {
11859
- logger33.error(`[OAuth ${action}] Error:`, error);
11920
+ logger34.error(`[OAuth ${action}] Error:`, error);
11860
11921
  return createErrorResponse(error.message, 500);
11861
11922
  }
11862
11923
  }