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.
- package/dist/adapters/auto-routes.js +32750 -281
- package/dist/adapters/context-cookie.js +18 -0
- package/dist/adapters/index.js +32752 -283
- package/dist/adapters/nextjs-oauth-redirect.js +18 -0
- package/dist/adapters/nextjs.js +32750 -281
- package/dist/adapters/node.js +32750 -281
- package/dist/adapters/session-detector.js +18 -0
- package/dist/adapters/solid-start.js +18 -0
- package/dist/adapters/svelte-kit.js +32750 -281
- package/dist/adapters/tanstack-start.js +32752 -283
- package/dist/ai/anthropic.js +47 -15
- package/dist/ai/google.js +47 -15
- package/dist/ai/index.js +47 -15
- package/dist/ai/openai.js +47 -15
- package/dist/ai/trigger-tools.js +17 -0
- package/dist/ai/utils.js +17 -0
- package/dist/ai/vercel-ai.js +47 -15
- package/dist/code-mode/executor.d.ts +8 -0
- package/dist/code-mode/executor.d.ts.map +1 -1
- package/dist/code-mode/executor.js +35 -7
- package/dist/code-mode/index.js +51 -15
- package/dist/code-mode/runtime-stub.js +19 -0
- package/dist/code-mode/tool-builder.d.ts +9 -1
- package/dist/code-mode/tool-builder.d.ts.map +1 -1
- package/dist/code-mode/tool-builder.js +52 -15
- package/dist/code-mode/type-generator.js +19 -0
- package/dist/index.js +76 -19
- package/dist/oauth.js +71 -19
- package/dist/react.js +22 -0
- package/dist/server.js +71 -19
- package/dist/src/code-mode/executor.d.ts +8 -0
- package/dist/src/code-mode/executor.d.ts.map +1 -1
- package/dist/src/code-mode/tool-builder.d.ts +9 -1
- package/dist/src/code-mode/tool-builder.d.ts.map +1 -1
- package/dist/src/config/types.d.ts +2 -2
- package/dist/src/server.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/ai/vercel-ai.js
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
4908
|
-
|
|
4909
|
-
|
|
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(
|
|
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 =
|
|
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
|
|
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":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD;;;;GAIG;AACH,UAAU,WAAW;IACnB,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,UAAU,CACR,MAAM,EAAE;QACN,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,GACA,OAAO,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;KAC3B,CAAC,CAAC;IACH,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1B;AAED,UAAU,cAAc;IACtB,MAAM,CAAC,OAAO,EAAE;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAC1B;
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
package/dist/code-mode/index.js
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
516
|
-
|
|
517
|
-
|
|
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(
|
|
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 =
|
|
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
|
|
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 `
|
|
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":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
516
|
-
|
|
517
|
-
|
|
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(
|
|
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 =
|
|
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
|
|
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());
|