integrate-sdk 0.9.9-dev.0 → 0.9.13-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 (37) hide show
  1. package/dist/adapters/auto-routes.js +32750 -281
  2. package/dist/adapters/context-cookie.js +18 -0
  3. package/dist/adapters/index.js +32752 -283
  4. package/dist/adapters/nextjs-oauth-redirect.js +18 -0
  5. package/dist/adapters/nextjs.js +32750 -281
  6. package/dist/adapters/node.js +32750 -281
  7. package/dist/adapters/session-detector.js +18 -0
  8. package/dist/adapters/solid-start.js +18 -0
  9. package/dist/adapters/svelte-kit.js +32750 -281
  10. package/dist/adapters/tanstack-start.js +32752 -283
  11. package/dist/ai/anthropic.js +47 -15
  12. package/dist/ai/google.js +47 -15
  13. package/dist/ai/index.js +47 -15
  14. package/dist/ai/openai.js +47 -15
  15. package/dist/ai/trigger-tools.js +17 -0
  16. package/dist/ai/utils.js +17 -0
  17. package/dist/ai/vercel-ai.js +47 -15
  18. package/dist/code-mode/executor.d.ts +8 -0
  19. package/dist/code-mode/executor.d.ts.map +1 -1
  20. package/dist/code-mode/executor.js +35 -7
  21. package/dist/code-mode/index.js +51 -15
  22. package/dist/code-mode/runtime-stub.js +19 -0
  23. package/dist/code-mode/tool-builder.d.ts +9 -1
  24. package/dist/code-mode/tool-builder.d.ts.map +1 -1
  25. package/dist/code-mode/tool-builder.js +52 -15
  26. package/dist/code-mode/type-generator.js +19 -0
  27. package/dist/index.js +76 -19
  28. package/dist/oauth.js +71 -19
  29. package/dist/react.js +22 -0
  30. package/dist/server.js +71 -19
  31. package/dist/src/code-mode/executor.d.ts +8 -0
  32. package/dist/src/code-mode/executor.d.ts.map +1 -1
  33. package/dist/src/code-mode/tool-builder.d.ts +9 -1
  34. package/dist/src/code-mode/tool-builder.d.ts.map +1 -1
  35. package/dist/src/config/types.d.ts +2 -2
  36. package/dist/src/server.d.ts.map +1 -1
  37. package/package.json +2 -2
@@ -1,4 +1,20 @@
1
+ import { createRequire } from "node:module";
2
+ var __create = Object.create;
3
+ var __getProtoOf = Object.getPrototypeOf;
1
4
  var __defProp = Object.defineProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __toESM = (mod, isNodeMode, target) => {
8
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
9
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
+ for (let key of __getOwnPropNames(mod))
11
+ if (!__hasOwnProp.call(to, key))
12
+ __defProp(to, key, {
13
+ get: () => mod[key],
14
+ enumerable: true
15
+ });
16
+ return to;
17
+ };
2
18
  var __export = (target, all) => {
3
19
  for (var name in all)
4
20
  __defProp(target, name, {
@@ -8,6 +24,7 @@ var __export = (target, all) => {
8
24
  set: (newValue) => all[name] = () => newValue
9
25
  });
10
26
  };
27
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
11
28
 
12
29
  // ../../node_modules/zod/v3/external.js
13
30
  var exports_external = {};
@@ -4692,7 +4709,11 @@ export { callTool };
4692
4709
  // ../code-mode/executor.ts
4693
4710
  var sandboxFactoryOverride = null;
4694
4711
  var _sandboxAvailableCache = null;
4712
+ var _sandboxImportError = null;
4695
4713
  var _sandboxForcedUnavailableForTests = false;
4714
+ function getSandboxImportError() {
4715
+ return _sandboxImportError;
4716
+ }
4696
4717
  async function isSandboxAvailable() {
4697
4718
  if (_sandboxAvailableCache !== null)
4698
4719
  return _sandboxAvailableCache;
@@ -4702,15 +4723,17 @@ async function isSandboxAvailable() {
4702
4723
  }
4703
4724
  if (sandboxFactoryOverride) {
4704
4725
  _sandboxAvailableCache = true;
4726
+ _sandboxImportError = null;
4705
4727
  return true;
4706
4728
  }
4707
4729
  try {
4708
- const dynamicImport = new Function("specifier", "return import(specifier)");
4709
- await dynamicImport("@" + "vercel/sandbox");
4730
+ await import("@vercel/sandbox");
4710
4731
  _sandboxAvailableCache = true;
4732
+ _sandboxImportError = null;
4711
4733
  return true;
4712
- } catch {
4734
+ } catch (err) {
4713
4735
  _sandboxAvailableCache = false;
4736
+ _sandboxImportError = err;
4714
4737
  return false;
4715
4738
  }
4716
4739
  }
@@ -4718,12 +4741,12 @@ async function loadSandboxFactory() {
4718
4741
  if (sandboxFactoryOverride)
4719
4742
  return sandboxFactoryOverride;
4720
4743
  try {
4721
- const dynamicImport = new Function("specifier", "return import(specifier)");
4722
- const pkg = "@" + "vercel/sandbox";
4723
- const mod = await dynamicImport(pkg);
4744
+ const mod = await import("@vercel/sandbox");
4724
4745
  return mod.Sandbox ?? mod.default?.Sandbox ?? mod;
4725
4746
  } catch (err) {
4726
- throw new Error("Code Mode requires the optional peer dependency `@vercel/sandbox`. " + "Install it with `npm install @vercel/sandbox` (or `bun add @vercel/sandbox`).");
4747
+ _sandboxImportError = err;
4748
+ const detail = err instanceof Error ? `: ${err.message}` : "";
4749
+ throw new Error("Code Mode failed to load `@vercel/sandbox`" + detail + ". Ensure the package is installed and reachable at runtime. On Next.js/Vercel, confirm it is listed in `dependencies` (not only `devDependencies`) and that the route using Code Mode runs in the Node.js runtime (not Edge).");
4727
4750
  }
4728
4751
  }
4729
4752
  var RESULT_SENTINEL = "__INTEGRATE_RESULT__";
@@ -4893,27 +4916,34 @@ function resolveCodeModeClientConfig(client) {
4893
4916
  const oauthConfig = client.__oauthConfig;
4894
4917
  return oauthConfig?.codeMode ?? {};
4895
4918
  }
4919
+ function resolveCodeModePublicUrl(serverConfig = {}) {
4920
+ return serverConfig.publicUrl ?? getEnv("INTEGRATE_URL");
4921
+ }
4896
4922
  async function diagnoseCodeMode(client) {
4897
4923
  if (!await isSandboxAvailable()) {
4898
4924
  return { available: false, reason: "sandbox-missing" };
4899
4925
  }
4900
4926
  const serverConfig = resolveCodeModeClientConfig(client);
4901
- const publicUrl = serverConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
4927
+ const publicUrl = resolveCodeModePublicUrl(serverConfig);
4902
4928
  if (!publicUrl) {
4903
4929
  return { available: false, reason: "no-public-url" };
4904
4930
  }
4905
4931
  return { available: true };
4906
4932
  }
4907
- var CODE_MODE_UNAVAILABLE_MESSAGES = {
4908
- "sandbox-missing": "[integrate-sdk] Code Mode unavailable (reason: sandbox-missing) — falling back to tool mode. " + "Install `@vercel/sandbox` (e.g. `bun add @vercel/sandbox`) to enable Code Mode.",
4909
- "no-public-url": "[integrate-sdk] Code Mode unavailable (reason: no-public-url) — falling back to tool mode. " + "Set `codeMode.publicUrl` on your server config or the `INTEGRATE_PUBLIC_URL` env var."
4910
- };
4933
+ function buildFallbackMessage(reason) {
4934
+ if (reason === "no-public-url") {
4935
+ return "[integrate-sdk] Code Mode unavailable (reason: no-public-url) — falling back to tool mode. " + "Set `codeMode.publicUrl` on your server config or the `INTEGRATE_URL` env var.";
4936
+ }
4937
+ const importError = getSandboxImportError();
4938
+ const detail = importError instanceof Error ? ` Underlying import error: ${importError.message}` : importError ? ` Underlying import error: ${String(importError)}` : "";
4939
+ return "[integrate-sdk] Code Mode unavailable (reason: sandbox-missing) — falling back to tool mode. " + "Ensure `@vercel/sandbox` is in `dependencies` and the route runs in the Node.js runtime (not Edge)." + detail;
4940
+ }
4911
4941
  var warnedCodeModeReasons = new Set;
4912
4942
  function warnCodeModeFallback(reason) {
4913
4943
  if (warnedCodeModeReasons.has(reason))
4914
4944
  return;
4915
4945
  warnedCodeModeReasons.add(reason);
4916
- console.warn(CODE_MODE_UNAVAILABLE_MESSAGES[reason]);
4946
+ console.warn(buildFallbackMessage(reason));
4917
4947
  }
4918
4948
  function buildCodeModeTool(client, options) {
4919
4949
  const { tools, providerTokens, context, integrationIds } = options;
@@ -4926,7 +4956,9 @@ function buildCodeModeTool(client, options) {
4926
4956
  ${generated.source}
4927
4957
  \`\`\``;
4928
4958
  const execute = async ({ code }) => {
4929
- const publicUrl = sandboxOverrides.publicUrl ?? serverCodeModeConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
4959
+ const publicUrl = resolveCodeModePublicUrl({
4960
+ publicUrl: sandboxOverrides.publicUrl ?? serverCodeModeConfig.publicUrl
4961
+ });
4930
4962
  const apiKey = client.__oauthConfig?.apiKey;
4931
4963
  if (!publicUrl) {
4932
4964
  return {
@@ -4935,7 +4967,7 @@ ${generated.source}
4935
4967
  stdout: "",
4936
4968
  stderr: "",
4937
4969
  durationMs: 0,
4938
- error: "Code Mode requires `codeMode.publicUrl` in createMCPServer config (or the INTEGRATE_PUBLIC_URL env var). " + "The sandbox uses it to call back into /api/integrate/mcp."
4970
+ error: "Code Mode requires `codeMode.publicUrl` in createMCPServer config (or the INTEGRATE_URL env var). " + "The sandbox uses it to call back into /api/integrate/mcp."
4939
4971
  };
4940
4972
  }
4941
4973
  const mcpUrl = publicUrl.replace(/\/$/, "") + "/api/integrate/mcp";
@@ -45,6 +45,14 @@ interface SandboxFactory {
45
45
  export declare function __setSandboxFactoryForTests(factory: SandboxFactory | null): void;
46
46
  /** @internal — used by unit tests to simulate missing @vercel/sandbox. */
47
47
  export declare function __setSandboxUnavailableForTests(force: boolean): void;
48
+ /**
49
+ * Returns the most recent error observed while attempting to import
50
+ * `@vercel/sandbox`. Useful for surfacing the root cause when the availability
51
+ * check returns `false` — the warning in `tool-builder.ts` pipes this through
52
+ * to the user so they don't have to guess whether it's a missing package, a
53
+ * bundler issue, or a runtime restriction.
54
+ */
55
+ export declare function getSandboxImportError(): unknown;
48
56
  export declare function isSandboxAvailable(): Promise<boolean>;
49
57
  export interface ExecuteSandboxCodeOptions {
50
58
  /** Source code the LLM produced. Treated as an async function body. */
@@ -1 +1 @@
1
- {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/code-mode/executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/code-mode/executor.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,22 @@
1
+ import { createRequire } from "node:module";
2
+ var __create = Object.create;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __toESM = (mod, isNodeMode, target) => {
8
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
9
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
+ for (let key of __getOwnPropNames(mod))
11
+ if (!__hasOwnProp.call(to, key))
12
+ __defProp(to, key, {
13
+ get: () => mod[key],
14
+ enumerable: true
15
+ });
16
+ return to;
17
+ };
18
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
19
+
1
20
  // runtime-stub.ts
2
21
  var RUNTIME_STUB_SOURCE = `// runtime.mjs — generated by integrate-sdk code mode
3
22
  const MCP_URL = process.env.INTEGRATE_MCP_URL;
@@ -73,15 +92,21 @@ export { callTool };
73
92
  // executor.ts
74
93
  var sandboxFactoryOverride = null;
75
94
  var _sandboxAvailableCache = null;
95
+ var _sandboxImportError = null;
76
96
  var _sandboxForcedUnavailableForTests = false;
77
97
  function __setSandboxFactoryForTests(factory) {
78
98
  sandboxFactoryOverride = factory;
79
99
  _sandboxForcedUnavailableForTests = false;
80
100
  _sandboxAvailableCache = null;
101
+ _sandboxImportError = null;
81
102
  }
82
103
  function __setSandboxUnavailableForTests(force) {
83
104
  _sandboxForcedUnavailableForTests = force;
84
105
  _sandboxAvailableCache = null;
106
+ _sandboxImportError = force ? new Error("Sandbox forced unavailable by test seam.") : null;
107
+ }
108
+ function getSandboxImportError() {
109
+ return _sandboxImportError;
85
110
  }
86
111
  async function isSandboxAvailable() {
87
112
  if (_sandboxAvailableCache !== null)
@@ -92,15 +117,17 @@ async function isSandboxAvailable() {
92
117
  }
93
118
  if (sandboxFactoryOverride) {
94
119
  _sandboxAvailableCache = true;
120
+ _sandboxImportError = null;
95
121
  return true;
96
122
  }
97
123
  try {
98
- const dynamicImport = new Function("specifier", "return import(specifier)");
99
- await dynamicImport("@" + "vercel/sandbox");
124
+ await import("@vercel/sandbox");
100
125
  _sandboxAvailableCache = true;
126
+ _sandboxImportError = null;
101
127
  return true;
102
- } catch {
128
+ } catch (err) {
103
129
  _sandboxAvailableCache = false;
130
+ _sandboxImportError = err;
104
131
  return false;
105
132
  }
106
133
  }
@@ -108,12 +135,12 @@ async function loadSandboxFactory() {
108
135
  if (sandboxFactoryOverride)
109
136
  return sandboxFactoryOverride;
110
137
  try {
111
- const dynamicImport = new Function("specifier", "return import(specifier)");
112
- const pkg = "@" + "vercel/sandbox";
113
- const mod = await dynamicImport(pkg);
138
+ const mod = await import("@vercel/sandbox");
114
139
  return mod.Sandbox ?? mod.default?.Sandbox ?? mod;
115
140
  } catch (err) {
116
- throw new Error("Code Mode requires the optional peer dependency `@vercel/sandbox`. " + "Install it with `npm install @vercel/sandbox` (or `bun add @vercel/sandbox`).");
141
+ _sandboxImportError = err;
142
+ const detail = err instanceof Error ? `: ${err.message}` : "";
143
+ throw new Error("Code Mode failed to load `@vercel/sandbox`" + detail + ". Ensure the package is installed and reachable at runtime. On Next.js/Vercel, confirm it is listed in `dependencies` (not only `devDependencies`) and that the route using Code Mode runs in the Node.js runtime (not Edge).");
117
144
  }
118
145
  }
119
146
  var RESULT_SENTINEL = "__INTEGRATE_RESULT__";
@@ -236,6 +263,7 @@ async function executeSandboxCode(options) {
236
263
  }
237
264
  export {
238
265
  isSandboxAvailable,
266
+ getSandboxImportError,
239
267
  executeSandboxCode,
240
268
  __setSandboxUnavailableForTests,
241
269
  __setSandboxFactoryForTests
@@ -1,3 +1,22 @@
1
+ import { createRequire } from "node:module";
2
+ var __create = Object.create;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __toESM = (mod, isNodeMode, target) => {
8
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
9
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
+ for (let key of __getOwnPropNames(mod))
11
+ if (!__hasOwnProp.call(to, key))
12
+ __defProp(to, key, {
13
+ get: () => mod[key],
14
+ enumerable: true
15
+ });
16
+ return to;
17
+ };
18
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
19
+
1
20
  // ../utils/naming.ts
2
21
  function snakeToCamel(str) {
3
22
  return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
@@ -288,15 +307,21 @@ export { callTool };
288
307
  // executor.ts
289
308
  var sandboxFactoryOverride = null;
290
309
  var _sandboxAvailableCache = null;
310
+ var _sandboxImportError = null;
291
311
  var _sandboxForcedUnavailableForTests = false;
292
312
  function __setSandboxFactoryForTests(factory) {
293
313
  sandboxFactoryOverride = factory;
294
314
  _sandboxForcedUnavailableForTests = false;
295
315
  _sandboxAvailableCache = null;
316
+ _sandboxImportError = null;
296
317
  }
297
318
  function __setSandboxUnavailableForTests(force) {
298
319
  _sandboxForcedUnavailableForTests = force;
299
320
  _sandboxAvailableCache = null;
321
+ _sandboxImportError = force ? new Error("Sandbox forced unavailable by test seam.") : null;
322
+ }
323
+ function getSandboxImportError() {
324
+ return _sandboxImportError;
300
325
  }
301
326
  async function isSandboxAvailable() {
302
327
  if (_sandboxAvailableCache !== null)
@@ -307,15 +332,17 @@ async function isSandboxAvailable() {
307
332
  }
308
333
  if (sandboxFactoryOverride) {
309
334
  _sandboxAvailableCache = true;
335
+ _sandboxImportError = null;
310
336
  return true;
311
337
  }
312
338
  try {
313
- const dynamicImport = new Function("specifier", "return import(specifier)");
314
- await dynamicImport("@" + "vercel/sandbox");
339
+ await import("@vercel/sandbox");
315
340
  _sandboxAvailableCache = true;
341
+ _sandboxImportError = null;
316
342
  return true;
317
- } catch {
343
+ } catch (err) {
318
344
  _sandboxAvailableCache = false;
345
+ _sandboxImportError = err;
319
346
  return false;
320
347
  }
321
348
  }
@@ -323,12 +350,12 @@ async function loadSandboxFactory() {
323
350
  if (sandboxFactoryOverride)
324
351
  return sandboxFactoryOverride;
325
352
  try {
326
- const dynamicImport = new Function("specifier", "return import(specifier)");
327
- const pkg = "@" + "vercel/sandbox";
328
- const mod = await dynamicImport(pkg);
353
+ const mod = await import("@vercel/sandbox");
329
354
  return mod.Sandbox ?? mod.default?.Sandbox ?? mod;
330
355
  } catch (err) {
331
- throw new Error("Code Mode requires the optional peer dependency `@vercel/sandbox`. " + "Install it with `npm install @vercel/sandbox` (or `bun add @vercel/sandbox`).");
356
+ _sandboxImportError = err;
357
+ const detail = err instanceof Error ? `: ${err.message}` : "";
358
+ throw new Error("Code Mode failed to load `@vercel/sandbox`" + detail + ". Ensure the package is installed and reachable at runtime. On Next.js/Vercel, confirm it is listed in `dependencies` (not only `devDependencies`) and that the route using Code Mode runs in the Node.js runtime (not Edge).");
332
359
  }
333
360
  }
334
361
  var RESULT_SENTINEL = "__INTEGRATE_RESULT__";
@@ -498,12 +525,15 @@ function resolveCodeModeClientConfig(client) {
498
525
  const oauthConfig = client.__oauthConfig;
499
526
  return oauthConfig?.codeMode ?? {};
500
527
  }
528
+ function resolveCodeModePublicUrl(serverConfig = {}) {
529
+ return serverConfig.publicUrl ?? getEnv("INTEGRATE_URL");
530
+ }
501
531
  async function diagnoseCodeMode(client) {
502
532
  if (!await isSandboxAvailable()) {
503
533
  return { available: false, reason: "sandbox-missing" };
504
534
  }
505
535
  const serverConfig = resolveCodeModeClientConfig(client);
506
- const publicUrl = serverConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
536
+ const publicUrl = resolveCodeModePublicUrl(serverConfig);
507
537
  if (!publicUrl) {
508
538
  return { available: false, reason: "no-public-url" };
509
539
  }
@@ -512,10 +542,14 @@ async function diagnoseCodeMode(client) {
512
542
  async function canUseCodeMode(client) {
513
543
  return (await diagnoseCodeMode(client)).available;
514
544
  }
515
- var CODE_MODE_UNAVAILABLE_MESSAGES = {
516
- "sandbox-missing": "[integrate-sdk] Code Mode unavailable (reason: sandbox-missing) — falling back to tool mode. " + "Install `@vercel/sandbox` (e.g. `bun add @vercel/sandbox`) to enable Code Mode.",
517
- "no-public-url": "[integrate-sdk] Code Mode unavailable (reason: no-public-url) — falling back to tool mode. " + "Set `codeMode.publicUrl` on your server config or the `INTEGRATE_PUBLIC_URL` env var."
518
- };
545
+ function buildFallbackMessage(reason) {
546
+ if (reason === "no-public-url") {
547
+ return "[integrate-sdk] Code Mode unavailable (reason: no-public-url) — falling back to tool mode. " + "Set `codeMode.publicUrl` on your server config or the `INTEGRATE_URL` env var.";
548
+ }
549
+ const importError = getSandboxImportError();
550
+ const detail = importError instanceof Error ? ` Underlying import error: ${importError.message}` : importError ? ` Underlying import error: ${String(importError)}` : "";
551
+ return "[integrate-sdk] Code Mode unavailable (reason: sandbox-missing) — falling back to tool mode. " + "Ensure `@vercel/sandbox` is in `dependencies` and the route runs in the Node.js runtime (not Edge)." + detail;
552
+ }
519
553
  var warnedCodeModeReasons = new Set;
520
554
  function __resetCodeModeFallbackWarnings() {
521
555
  warnedCodeModeReasons.clear();
@@ -524,7 +558,7 @@ function warnCodeModeFallback(reason) {
524
558
  if (warnedCodeModeReasons.has(reason))
525
559
  return;
526
560
  warnedCodeModeReasons.add(reason);
527
- console.warn(CODE_MODE_UNAVAILABLE_MESSAGES[reason]);
561
+ console.warn(buildFallbackMessage(reason));
528
562
  }
529
563
  function buildCodeModeTool(client, options) {
530
564
  const { tools, providerTokens, context, integrationIds } = options;
@@ -537,7 +571,9 @@ function buildCodeModeTool(client, options) {
537
571
  ${generated.source}
538
572
  \`\`\``;
539
573
  const execute = async ({ code }) => {
540
- const publicUrl = sandboxOverrides.publicUrl ?? serverCodeModeConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
574
+ const publicUrl = resolveCodeModePublicUrl({
575
+ publicUrl: sandboxOverrides.publicUrl ?? serverCodeModeConfig.publicUrl
576
+ });
541
577
  const apiKey = client.__oauthConfig?.apiKey;
542
578
  if (!publicUrl) {
543
579
  return {
@@ -546,7 +582,7 @@ ${generated.source}
546
582
  stdout: "",
547
583
  stderr: "",
548
584
  durationMs: 0,
549
- error: "Code Mode requires `codeMode.publicUrl` in createMCPServer config (or the INTEGRATE_PUBLIC_URL env var). " + "The sandbox uses it to call back into /api/integrate/mcp."
585
+ error: "Code Mode requires `codeMode.publicUrl` in createMCPServer config (or the INTEGRATE_URL env var). " + "The sandbox uses it to call back into /api/integrate/mcp."
550
586
  };
551
587
  }
552
588
  const mcpUrl = publicUrl.replace(/\/$/, "") + "/api/integrate/mcp";
@@ -1,3 +1,22 @@
1
+ import { createRequire } from "node:module";
2
+ var __create = Object.create;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __toESM = (mod, isNodeMode, target) => {
8
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
9
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
+ for (let key of __getOwnPropNames(mod))
11
+ if (!__hasOwnProp.call(to, key))
12
+ __defProp(to, key, {
13
+ get: () => mod[key],
14
+ enumerable: true
15
+ });
16
+ return to;
17
+ };
18
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
19
+
1
20
  // runtime-stub.ts
2
21
  var RUNTIME_STUB_SOURCE = `// runtime.mjs — generated by integrate-sdk code mode
3
22
  const MCP_URL = process.env.INTEGRATE_MCP_URL;
@@ -27,7 +27,7 @@ export interface CodeModeToolOptions {
27
27
  /**
28
28
  * Sandbox + callback overrides. Everything is optional — defaults come
29
29
  * from the server client's `__oauthConfig.codeMode` block (set by
30
- * `createMCPServer`) or from `INTEGRATE_PUBLIC_URL`.
30
+ * `createMCPServer`) or from `INTEGRATE_URL`.
31
31
  */
32
32
  sandbox?: {
33
33
  publicUrl?: string;
@@ -81,6 +81,14 @@ export type CodeModeDiagnosis = {
81
81
  available: false;
82
82
  reason: CodeModeUnavailableReason;
83
83
  };
84
+ /**
85
+ * Resolve the public URL the sandbox should call back into. Precedence:
86
+ * 1. Explicit `codeMode.publicUrl` on the server config
87
+ * 2. `INTEGRATE_URL` env var (same variable used for OAuth redirect auto-detect)
88
+ */
89
+ export declare function resolveCodeModePublicUrl(serverConfig?: {
90
+ publicUrl?: string;
91
+ }): string | undefined;
84
92
  export declare function diagnoseCodeMode(client: MCPClient<any>): Promise<CodeModeDiagnosis>;
85
93
  export declare function canUseCodeMode(client: MCPClient<any>): Promise<boolean>;
86
94
  /** @internal — used by unit tests to reset the warn-once throttle. */
@@ -1 +1 @@
1
- {"version":3,"file":"tool-builder.d.ts","sourceRoot":"","sources":["../../../src/code-mode/tool-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-builder.d.ts","sourceRoot":"","sources":["../../../src/code-mode/tool-builder.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,22 @@
1
+ import { createRequire } from "node:module";
2
+ var __create = Object.create;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __toESM = (mod, isNodeMode, target) => {
8
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
9
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
+ for (let key of __getOwnPropNames(mod))
11
+ if (!__hasOwnProp.call(to, key))
12
+ __defProp(to, key, {
13
+ get: () => mod[key],
14
+ enumerable: true
15
+ });
16
+ return to;
17
+ };
18
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
19
+
1
20
  // ../utils/naming.ts
2
21
  function snakeToCamel(str) {
3
22
  return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
@@ -288,15 +307,21 @@ export { callTool };
288
307
  // executor.ts
289
308
  var sandboxFactoryOverride = null;
290
309
  var _sandboxAvailableCache = null;
310
+ var _sandboxImportError = null;
291
311
  var _sandboxForcedUnavailableForTests = false;
292
312
  function __setSandboxFactoryForTests(factory) {
293
313
  sandboxFactoryOverride = factory;
294
314
  _sandboxForcedUnavailableForTests = false;
295
315
  _sandboxAvailableCache = null;
316
+ _sandboxImportError = null;
296
317
  }
297
318
  function __setSandboxUnavailableForTests(force) {
298
319
  _sandboxForcedUnavailableForTests = force;
299
320
  _sandboxAvailableCache = null;
321
+ _sandboxImportError = force ? new Error("Sandbox forced unavailable by test seam.") : null;
322
+ }
323
+ function getSandboxImportError() {
324
+ return _sandboxImportError;
300
325
  }
301
326
  async function isSandboxAvailable() {
302
327
  if (_sandboxAvailableCache !== null)
@@ -307,15 +332,17 @@ async function isSandboxAvailable() {
307
332
  }
308
333
  if (sandboxFactoryOverride) {
309
334
  _sandboxAvailableCache = true;
335
+ _sandboxImportError = null;
310
336
  return true;
311
337
  }
312
338
  try {
313
- const dynamicImport = new Function("specifier", "return import(specifier)");
314
- await dynamicImport("@" + "vercel/sandbox");
339
+ await import("@vercel/sandbox");
315
340
  _sandboxAvailableCache = true;
341
+ _sandboxImportError = null;
316
342
  return true;
317
- } catch {
343
+ } catch (err) {
318
344
  _sandboxAvailableCache = false;
345
+ _sandboxImportError = err;
319
346
  return false;
320
347
  }
321
348
  }
@@ -323,12 +350,12 @@ async function loadSandboxFactory() {
323
350
  if (sandboxFactoryOverride)
324
351
  return sandboxFactoryOverride;
325
352
  try {
326
- const dynamicImport = new Function("specifier", "return import(specifier)");
327
- const pkg = "@" + "vercel/sandbox";
328
- const mod = await dynamicImport(pkg);
353
+ const mod = await import("@vercel/sandbox");
329
354
  return mod.Sandbox ?? mod.default?.Sandbox ?? mod;
330
355
  } catch (err) {
331
- throw new Error("Code Mode requires the optional peer dependency `@vercel/sandbox`. " + "Install it with `npm install @vercel/sandbox` (or `bun add @vercel/sandbox`).");
356
+ _sandboxImportError = err;
357
+ const detail = err instanceof Error ? `: ${err.message}` : "";
358
+ throw new Error("Code Mode failed to load `@vercel/sandbox`" + detail + ". Ensure the package is installed and reachable at runtime. On Next.js/Vercel, confirm it is listed in `dependencies` (not only `devDependencies`) and that the route using Code Mode runs in the Node.js runtime (not Edge).");
332
359
  }
333
360
  }
334
361
  var RESULT_SENTINEL = "__INTEGRATE_RESULT__";
@@ -498,12 +525,15 @@ function resolveCodeModeClientConfig(client) {
498
525
  const oauthConfig = client.__oauthConfig;
499
526
  return oauthConfig?.codeMode ?? {};
500
527
  }
528
+ function resolveCodeModePublicUrl(serverConfig = {}) {
529
+ return serverConfig.publicUrl ?? getEnv("INTEGRATE_URL");
530
+ }
501
531
  async function diagnoseCodeMode(client) {
502
532
  if (!await isSandboxAvailable()) {
503
533
  return { available: false, reason: "sandbox-missing" };
504
534
  }
505
535
  const serverConfig = resolveCodeModeClientConfig(client);
506
- const publicUrl = serverConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
536
+ const publicUrl = resolveCodeModePublicUrl(serverConfig);
507
537
  if (!publicUrl) {
508
538
  return { available: false, reason: "no-public-url" };
509
539
  }
@@ -512,10 +542,14 @@ async function diagnoseCodeMode(client) {
512
542
  async function canUseCodeMode(client) {
513
543
  return (await diagnoseCodeMode(client)).available;
514
544
  }
515
- var CODE_MODE_UNAVAILABLE_MESSAGES = {
516
- "sandbox-missing": "[integrate-sdk] Code Mode unavailable (reason: sandbox-missing) — falling back to tool mode. " + "Install `@vercel/sandbox` (e.g. `bun add @vercel/sandbox`) to enable Code Mode.",
517
- "no-public-url": "[integrate-sdk] Code Mode unavailable (reason: no-public-url) — falling back to tool mode. " + "Set `codeMode.publicUrl` on your server config or the `INTEGRATE_PUBLIC_URL` env var."
518
- };
545
+ function buildFallbackMessage(reason) {
546
+ if (reason === "no-public-url") {
547
+ return "[integrate-sdk] Code Mode unavailable (reason: no-public-url) — falling back to tool mode. " + "Set `codeMode.publicUrl` on your server config or the `INTEGRATE_URL` env var.";
548
+ }
549
+ const importError = getSandboxImportError();
550
+ const detail = importError instanceof Error ? ` Underlying import error: ${importError.message}` : importError ? ` Underlying import error: ${String(importError)}` : "";
551
+ return "[integrate-sdk] Code Mode unavailable (reason: sandbox-missing) — falling back to tool mode. " + "Ensure `@vercel/sandbox` is in `dependencies` and the route runs in the Node.js runtime (not Edge)." + detail;
552
+ }
519
553
  var warnedCodeModeReasons = new Set;
520
554
  function __resetCodeModeFallbackWarnings() {
521
555
  warnedCodeModeReasons.clear();
@@ -524,7 +558,7 @@ function warnCodeModeFallback(reason) {
524
558
  if (warnedCodeModeReasons.has(reason))
525
559
  return;
526
560
  warnedCodeModeReasons.add(reason);
527
- console.warn(CODE_MODE_UNAVAILABLE_MESSAGES[reason]);
561
+ console.warn(buildFallbackMessage(reason));
528
562
  }
529
563
  function buildCodeModeTool(client, options) {
530
564
  const { tools, providerTokens, context, integrationIds } = options;
@@ -537,7 +571,9 @@ function buildCodeModeTool(client, options) {
537
571
  ${generated.source}
538
572
  \`\`\``;
539
573
  const execute = async ({ code }) => {
540
- const publicUrl = sandboxOverrides.publicUrl ?? serverCodeModeConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
574
+ const publicUrl = resolveCodeModePublicUrl({
575
+ publicUrl: sandboxOverrides.publicUrl ?? serverCodeModeConfig.publicUrl
576
+ });
541
577
  const apiKey = client.__oauthConfig?.apiKey;
542
578
  if (!publicUrl) {
543
579
  return {
@@ -546,7 +582,7 @@ ${generated.source}
546
582
  stdout: "",
547
583
  stderr: "",
548
584
  durationMs: 0,
549
- error: "Code Mode requires `codeMode.publicUrl` in createMCPServer config (or the INTEGRATE_PUBLIC_URL env var). " + "The sandbox uses it to call back into /api/integrate/mcp."
585
+ error: "Code Mode requires `codeMode.publicUrl` in createMCPServer config (or the INTEGRATE_URL env var). " + "The sandbox uses it to call back into /api/integrate/mcp."
550
586
  };
551
587
  }
552
588
  const mcpUrl = publicUrl.replace(/\/$/, "") + "/api/integrate/mcp";
@@ -582,6 +618,7 @@ ${generated.source}
582
618
  }
583
619
  export {
584
620
  warnCodeModeFallback,
621
+ resolveCodeModePublicUrl,
585
622
  resolveCodeModeClientConfig,
586
623
  diagnoseCodeMode,
587
624
  canUseCodeMode,
@@ -1,3 +1,22 @@
1
+ import { createRequire } from "node:module";
2
+ var __create = Object.create;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __toESM = (mod, isNodeMode, target) => {
8
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
9
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
+ for (let key of __getOwnPropNames(mod))
11
+ if (!__hasOwnProp.call(to, key))
12
+ __defProp(to, key, {
13
+ get: () => mod[key],
14
+ enumerable: true
15
+ });
16
+ return to;
17
+ };
18
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
19
+
1
20
  // ../utils/naming.ts
2
21
  function snakeToCamel(str) {
3
22
  return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());