integrate-sdk 0.9.5-dev.0 → 0.9.8-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 +69 -9
- package/dist/adapters/index.js +69 -9
- package/dist/adapters/nextjs.js +69 -9
- package/dist/adapters/node.js +69 -9
- package/dist/adapters/svelte-kit.js +69 -9
- package/dist/adapters/tanstack-start.js +69 -9
- package/dist/ai/anthropic.d.ts +2 -2
- package/dist/ai/anthropic.d.ts.map +1 -1
- package/dist/ai/anthropic.js +38 -2
- package/dist/ai/google.d.ts +2 -2
- package/dist/ai/google.d.ts.map +1 -1
- package/dist/ai/google.js +38 -2
- package/dist/ai/index.js +44 -8
- package/dist/ai/openai.d.ts +2 -2
- package/dist/ai/openai.d.ts.map +1 -1
- package/dist/ai/openai.js +38 -2
- package/dist/ai/vercel-ai.d.ts +2 -2
- package/dist/ai/vercel-ai.d.ts.map +1 -1
- package/dist/ai/vercel-ai.js +38 -2
- package/dist/code-mode/executor.d.ts +5 -0
- package/dist/code-mode/executor.d.ts.map +1 -1
- package/dist/code-mode/executor.js +35 -0
- package/dist/code-mode/index.d.ts +1 -1
- package/dist/code-mode/index.d.ts.map +1 -1
- package/dist/code-mode/index.js +43 -0
- package/dist/code-mode/runtime-stub.d.ts +1 -1
- package/dist/code-mode/runtime-stub.d.ts.map +1 -1
- package/dist/code-mode/runtime-stub.js +2 -0
- package/dist/code-mode/tool-builder.d.ts +1 -0
- package/dist/code-mode/tool-builder.d.ts.map +1 -1
- package/dist/code-mode/tool-builder.js +43 -0
- package/dist/index.js +69 -9
- package/dist/oauth.js +69 -9
- package/dist/server.js +69 -9
- package/dist/src/ai/anthropic.d.ts +2 -2
- package/dist/src/ai/anthropic.d.ts.map +1 -1
- package/dist/src/ai/google.d.ts +2 -2
- package/dist/src/ai/google.d.ts.map +1 -1
- package/dist/src/ai/openai.d.ts +2 -2
- package/dist/src/ai/openai.d.ts.map +1 -1
- package/dist/src/ai/vercel-ai.d.ts +2 -2
- package/dist/src/ai/vercel-ai.d.ts.map +1 -1
- package/dist/src/code-mode/executor.d.ts +5 -0
- package/dist/src/code-mode/executor.d.ts.map +1 -1
- package/dist/src/code-mode/index.d.ts +1 -1
- package/dist/src/code-mode/index.d.ts.map +1 -1
- package/dist/src/code-mode/runtime-stub.d.ts +1 -1
- package/dist/src/code-mode/runtime-stub.d.ts.map +1 -1
- package/dist/src/code-mode/tool-builder.d.ts +1 -0
- package/dist/src/code-mode/tool-builder.d.ts.map +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/package.json +3 -6
package/dist/code-mode/index.js
CHANGED
|
@@ -217,6 +217,7 @@ function pascalCase(id) {
|
|
|
217
217
|
var RUNTIME_STUB_SOURCE = `// runtime.mjs — generated by integrate-sdk code mode
|
|
218
218
|
const MCP_URL = process.env.INTEGRATE_MCP_URL;
|
|
219
219
|
const SESSION_TOKEN = process.env.INTEGRATE_SESSION_TOKEN;
|
|
220
|
+
const API_KEY = process.env.INTEGRATE_API_KEY || '';
|
|
220
221
|
const PROVIDER_TOKENS = process.env.INTEGRATE_PROVIDER_TOKENS || '';
|
|
221
222
|
const INTEGRATIONS_HEADER = process.env.INTEGRATE_INTEGRATIONS || '';
|
|
222
223
|
const CONTEXT_JSON = process.env.INTEGRATE_CONTEXT || '';
|
|
@@ -235,6 +236,7 @@ async function callTool(toolName, args) {
|
|
|
235
236
|
'x-integrate-code-mode': '1',
|
|
236
237
|
};
|
|
237
238
|
if (SESSION_TOKEN) headers['Authorization'] = 'Bearer ' + SESSION_TOKEN;
|
|
239
|
+
if (API_KEY) headers['x-integrate-api-key'] = API_KEY;
|
|
238
240
|
if (PROVIDER_TOKENS) headers['x-integrate-tokens'] = PROVIDER_TOKENS;
|
|
239
241
|
if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;
|
|
240
242
|
if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;
|
|
@@ -285,8 +287,37 @@ export { callTool };
|
|
|
285
287
|
|
|
286
288
|
// executor.ts
|
|
287
289
|
var sandboxFactoryOverride = null;
|
|
290
|
+
var _sandboxAvailableCache = null;
|
|
291
|
+
var _sandboxForcedUnavailableForTests = false;
|
|
288
292
|
function __setSandboxFactoryForTests(factory) {
|
|
289
293
|
sandboxFactoryOverride = factory;
|
|
294
|
+
_sandboxForcedUnavailableForTests = false;
|
|
295
|
+
_sandboxAvailableCache = null;
|
|
296
|
+
}
|
|
297
|
+
function __setSandboxUnavailableForTests(force) {
|
|
298
|
+
_sandboxForcedUnavailableForTests = force;
|
|
299
|
+
_sandboxAvailableCache = null;
|
|
300
|
+
}
|
|
301
|
+
async function isSandboxAvailable() {
|
|
302
|
+
if (_sandboxAvailableCache !== null)
|
|
303
|
+
return _sandboxAvailableCache;
|
|
304
|
+
if (_sandboxForcedUnavailableForTests) {
|
|
305
|
+
_sandboxAvailableCache = false;
|
|
306
|
+
return false;
|
|
307
|
+
}
|
|
308
|
+
if (sandboxFactoryOverride) {
|
|
309
|
+
_sandboxAvailableCache = true;
|
|
310
|
+
return true;
|
|
311
|
+
}
|
|
312
|
+
try {
|
|
313
|
+
const dynamicImport = new Function("specifier", "return import(specifier)");
|
|
314
|
+
await dynamicImport("@" + "vercel/sandbox");
|
|
315
|
+
_sandboxAvailableCache = true;
|
|
316
|
+
return true;
|
|
317
|
+
} catch {
|
|
318
|
+
_sandboxAvailableCache = false;
|
|
319
|
+
return false;
|
|
320
|
+
}
|
|
290
321
|
}
|
|
291
322
|
async function loadSandboxFactory() {
|
|
292
323
|
if (sandboxFactoryOverride)
|
|
@@ -374,6 +405,8 @@ async function executeSandboxCode(options) {
|
|
|
374
405
|
const env = {
|
|
375
406
|
INTEGRATE_MCP_URL: options.mcpUrl
|
|
376
407
|
};
|
|
408
|
+
if (options.apiKey)
|
|
409
|
+
env.INTEGRATE_API_KEY = options.apiKey;
|
|
377
410
|
if (options.sessionToken)
|
|
378
411
|
env.INTEGRATE_SESSION_TOKEN = options.sessionToken;
|
|
379
412
|
if (options.providerTokens && Object.keys(options.providerTokens).length > 0) {
|
|
@@ -465,6 +498,13 @@ function resolveCodeModeClientConfig(client) {
|
|
|
465
498
|
const oauthConfig = client.__oauthConfig;
|
|
466
499
|
return oauthConfig?.codeMode ?? {};
|
|
467
500
|
}
|
|
501
|
+
async function canUseCodeMode(client) {
|
|
502
|
+
if (!await isSandboxAvailable())
|
|
503
|
+
return false;
|
|
504
|
+
const serverConfig = resolveCodeModeClientConfig(client);
|
|
505
|
+
const publicUrl = serverConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
|
|
506
|
+
return !!publicUrl;
|
|
507
|
+
}
|
|
468
508
|
function buildCodeModeTool(client, options) {
|
|
469
509
|
const { tools, providerTokens, context, integrationIds } = options;
|
|
470
510
|
const generated = generateCodeModeTypes(tools);
|
|
@@ -477,6 +517,7 @@ ${generated.source}
|
|
|
477
517
|
\`\`\``;
|
|
478
518
|
const execute = async ({ code }) => {
|
|
479
519
|
const publicUrl = sandboxOverrides.publicUrl ?? serverCodeModeConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
|
|
520
|
+
const apiKey = client.__oauthConfig?.apiKey;
|
|
480
521
|
if (!publicUrl) {
|
|
481
522
|
return {
|
|
482
523
|
success: false,
|
|
@@ -491,6 +532,7 @@ ${generated.source}
|
|
|
491
532
|
return executeSandboxCode({
|
|
492
533
|
code,
|
|
493
534
|
mcpUrl,
|
|
535
|
+
apiKey,
|
|
494
536
|
providerTokens,
|
|
495
537
|
context,
|
|
496
538
|
integrationsHeader: integrationIds && integrationIds.length > 0 ? integrationIds.join(",") : undefined,
|
|
@@ -520,6 +562,7 @@ ${generated.source}
|
|
|
520
562
|
export {
|
|
521
563
|
generateCodeModeTypes,
|
|
522
564
|
executeSandboxCode,
|
|
565
|
+
canUseCodeMode,
|
|
523
566
|
buildCodeModeTool,
|
|
524
567
|
__setSandboxFactoryForTests,
|
|
525
568
|
RUNTIME_STUB_SOURCE,
|
|
@@ -12,5 +12,5 @@
|
|
|
12
12
|
* dependencies. It is NOT imported by the host SDK — it only ships as a
|
|
13
13
|
* literal payload to the sandbox.
|
|
14
14
|
*/
|
|
15
|
-
export declare const RUNTIME_STUB_SOURCE = "// runtime.mjs \u2014 generated by integrate-sdk code mode\nconst MCP_URL = process.env.INTEGRATE_MCP_URL;\nconst SESSION_TOKEN = process.env.INTEGRATE_SESSION_TOKEN;\nconst PROVIDER_TOKENS = process.env.INTEGRATE_PROVIDER_TOKENS || '';\nconst INTEGRATIONS_HEADER = process.env.INTEGRATE_INTEGRATIONS || '';\nconst CONTEXT_JSON = process.env.INTEGRATE_CONTEXT || '';\n\nif (!MCP_URL) {\n throw new Error('INTEGRATE_MCP_URL is not set \u2014 the sandbox cannot reach the MCP route.');\n}\n\nfunction camelToSnake(str) {\n return str.replace(/[A-Z]/g, (letter) => '_' + letter.toLowerCase());\n}\n\nasync function callTool(toolName, args) {\n const headers = {\n 'Content-Type': 'application/json',\n 'x-integrate-code-mode': '1',\n };\n if (SESSION_TOKEN) headers['Authorization'] = 'Bearer ' + SESSION_TOKEN;\n if (PROVIDER_TOKENS) headers['x-integrate-tokens'] = PROVIDER_TOKENS;\n if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;\n if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;\n\n const res = await fetch(MCP_URL, {\n method: 'POST',\n headers,\n body: JSON.stringify({ name: toolName, arguments: args || {} }),\n });\n\n const text = await res.text();\n let payload;\n try {\n payload = text ? JSON.parse(text) : null;\n } catch {\n payload = { content: [{ type: 'text', text }] };\n }\n\n if (!res.ok) {\n const message = (payload && (payload.error || payload.message)) || 'Tool call failed: HTTP ' + res.status;\n const err = new Error(message);\n err.status = res.status;\n err.toolName = toolName;\n throw err;\n }\n\n return payload;\n}\n\nfunction createIntegrationProxy(integrationId) {\n return new Proxy({}, {\n get(_target, methodName) {\n if (typeof methodName !== 'string') return undefined;\n return (args) => callTool(integrationId + '_' + camelToSnake(methodName), args);\n },\n });\n}\n\nexport const client = new Proxy({}, {\n get(_target, integrationId) {\n if (typeof integrationId !== 'string') return undefined;\n return createIntegrationProxy(integrationId);\n },\n});\n\nexport { callTool };\n";
|
|
15
|
+
export declare const RUNTIME_STUB_SOURCE = "// runtime.mjs \u2014 generated by integrate-sdk code mode\nconst MCP_URL = process.env.INTEGRATE_MCP_URL;\nconst SESSION_TOKEN = process.env.INTEGRATE_SESSION_TOKEN;\nconst API_KEY = process.env.INTEGRATE_API_KEY || '';\nconst PROVIDER_TOKENS = process.env.INTEGRATE_PROVIDER_TOKENS || '';\nconst INTEGRATIONS_HEADER = process.env.INTEGRATE_INTEGRATIONS || '';\nconst CONTEXT_JSON = process.env.INTEGRATE_CONTEXT || '';\n\nif (!MCP_URL) {\n throw new Error('INTEGRATE_MCP_URL is not set \u2014 the sandbox cannot reach the MCP route.');\n}\n\nfunction camelToSnake(str) {\n return str.replace(/[A-Z]/g, (letter) => '_' + letter.toLowerCase());\n}\n\nasync function callTool(toolName, args) {\n const headers = {\n 'Content-Type': 'application/json',\n 'x-integrate-code-mode': '1',\n };\n if (SESSION_TOKEN) headers['Authorization'] = 'Bearer ' + SESSION_TOKEN;\n if (API_KEY) headers['x-integrate-api-key'] = API_KEY;\n if (PROVIDER_TOKENS) headers['x-integrate-tokens'] = PROVIDER_TOKENS;\n if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;\n if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;\n\n const res = await fetch(MCP_URL, {\n method: 'POST',\n headers,\n body: JSON.stringify({ name: toolName, arguments: args || {} }),\n });\n\n const text = await res.text();\n let payload;\n try {\n payload = text ? JSON.parse(text) : null;\n } catch {\n payload = { content: [{ type: 'text', text }] };\n }\n\n if (!res.ok) {\n const message = (payload && (payload.error || payload.message)) || 'Tool call failed: HTTP ' + res.status;\n const err = new Error(message);\n err.status = res.status;\n err.toolName = toolName;\n throw err;\n }\n\n return payload;\n}\n\nfunction createIntegrationProxy(integrationId) {\n return new Proxy({}, {\n get(_target, methodName) {\n if (typeof methodName !== 'string') return undefined;\n return (args) => callTool(integrationId + '_' + camelToSnake(methodName), args);\n },\n });\n}\n\nexport const client = new Proxy({}, {\n get(_target, integrationId) {\n if (typeof integrationId !== 'string') return undefined;\n return createIntegrationProxy(integrationId);\n },\n});\n\nexport { callTool };\n";
|
|
16
16
|
//# sourceMappingURL=runtime-stub.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-stub.d.ts","sourceRoot":"","sources":["../../../src/code-mode/runtime-stub.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"runtime-stub.d.ts","sourceRoot":"","sources":["../../../src/code-mode/runtime-stub.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,mBAAmB,qtEAqE/B,CAAC"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
var RUNTIME_STUB_SOURCE = `// runtime.mjs — generated by integrate-sdk code mode
|
|
3
3
|
const MCP_URL = process.env.INTEGRATE_MCP_URL;
|
|
4
4
|
const SESSION_TOKEN = process.env.INTEGRATE_SESSION_TOKEN;
|
|
5
|
+
const API_KEY = process.env.INTEGRATE_API_KEY || '';
|
|
5
6
|
const PROVIDER_TOKENS = process.env.INTEGRATE_PROVIDER_TOKENS || '';
|
|
6
7
|
const INTEGRATIONS_HEADER = process.env.INTEGRATE_INTEGRATIONS || '';
|
|
7
8
|
const CONTEXT_JSON = process.env.INTEGRATE_CONTEXT || '';
|
|
@@ -20,6 +21,7 @@ async function callTool(toolName, args) {
|
|
|
20
21
|
'x-integrate-code-mode': '1',
|
|
21
22
|
};
|
|
22
23
|
if (SESSION_TOKEN) headers['Authorization'] = 'Bearer ' + SESSION_TOKEN;
|
|
24
|
+
if (API_KEY) headers['x-integrate-api-key'] = API_KEY;
|
|
23
25
|
if (PROVIDER_TOKENS) headers['x-integrate-tokens'] = PROVIDER_TOKENS;
|
|
24
26
|
if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;
|
|
25
27
|
if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;
|
|
@@ -74,6 +74,7 @@ export declare function resolveCodeModeClientConfig(client: MCPClient<any>): {
|
|
|
74
74
|
};
|
|
75
75
|
};
|
|
76
76
|
};
|
|
77
|
+
export declare function canUseCodeMode(client: MCPClient<any>): Promise<boolean>;
|
|
77
78
|
/**
|
|
78
79
|
* Build the `execute_code` tool definition. The returned `execute` function
|
|
79
80
|
* is what the AI provider SDK ultimately invokes when the model picks the
|
|
@@ -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":"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,EAGL,KAAK,wBAAwB,EAC9B,MAAM,eAAe,CAAC;AAGvB,eAAO,MAAM,mBAAmB,iBAAiB,CAAC;AAElD,MAAM,WAAW,mBAAmB;IAClC,yDAAyD;IACzD,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,iCAAiC;IACjC,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;OAIG;IACH,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,aAAa,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG;YAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,OAAO,CAAC,EAAE;gBAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;gBAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;aAAE,CAAA;SAAE,CAAC;KAClH,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE;YACV,IAAI,EAAE;gBAAE,IAAI,EAAE,QAAQ,CAAC;gBAAC,WAAW,EAAE,MAAM,CAAA;aAAE,CAAC;SAC/C,CAAC;QACF,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;QACnB,oBAAoB,EAAE,KAAK,CAAC;KAC7B,CAAC;IACF,OAAO,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;CACzE;AAuBD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAA;KAAE,CAAC;CAClH,CAGA;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAK7E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,EAAE,mBAAmB,GAC3B,sBAAsB,CA+DxB"}
|
|
@@ -217,6 +217,7 @@ function pascalCase(id) {
|
|
|
217
217
|
var RUNTIME_STUB_SOURCE = `// runtime.mjs — generated by integrate-sdk code mode
|
|
218
218
|
const MCP_URL = process.env.INTEGRATE_MCP_URL;
|
|
219
219
|
const SESSION_TOKEN = process.env.INTEGRATE_SESSION_TOKEN;
|
|
220
|
+
const API_KEY = process.env.INTEGRATE_API_KEY || '';
|
|
220
221
|
const PROVIDER_TOKENS = process.env.INTEGRATE_PROVIDER_TOKENS || '';
|
|
221
222
|
const INTEGRATIONS_HEADER = process.env.INTEGRATE_INTEGRATIONS || '';
|
|
222
223
|
const CONTEXT_JSON = process.env.INTEGRATE_CONTEXT || '';
|
|
@@ -235,6 +236,7 @@ async function callTool(toolName, args) {
|
|
|
235
236
|
'x-integrate-code-mode': '1',
|
|
236
237
|
};
|
|
237
238
|
if (SESSION_TOKEN) headers['Authorization'] = 'Bearer ' + SESSION_TOKEN;
|
|
239
|
+
if (API_KEY) headers['x-integrate-api-key'] = API_KEY;
|
|
238
240
|
if (PROVIDER_TOKENS) headers['x-integrate-tokens'] = PROVIDER_TOKENS;
|
|
239
241
|
if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;
|
|
240
242
|
if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;
|
|
@@ -285,8 +287,37 @@ export { callTool };
|
|
|
285
287
|
|
|
286
288
|
// executor.ts
|
|
287
289
|
var sandboxFactoryOverride = null;
|
|
290
|
+
var _sandboxAvailableCache = null;
|
|
291
|
+
var _sandboxForcedUnavailableForTests = false;
|
|
288
292
|
function __setSandboxFactoryForTests(factory) {
|
|
289
293
|
sandboxFactoryOverride = factory;
|
|
294
|
+
_sandboxForcedUnavailableForTests = false;
|
|
295
|
+
_sandboxAvailableCache = null;
|
|
296
|
+
}
|
|
297
|
+
function __setSandboxUnavailableForTests(force) {
|
|
298
|
+
_sandboxForcedUnavailableForTests = force;
|
|
299
|
+
_sandboxAvailableCache = null;
|
|
300
|
+
}
|
|
301
|
+
async function isSandboxAvailable() {
|
|
302
|
+
if (_sandboxAvailableCache !== null)
|
|
303
|
+
return _sandboxAvailableCache;
|
|
304
|
+
if (_sandboxForcedUnavailableForTests) {
|
|
305
|
+
_sandboxAvailableCache = false;
|
|
306
|
+
return false;
|
|
307
|
+
}
|
|
308
|
+
if (sandboxFactoryOverride) {
|
|
309
|
+
_sandboxAvailableCache = true;
|
|
310
|
+
return true;
|
|
311
|
+
}
|
|
312
|
+
try {
|
|
313
|
+
const dynamicImport = new Function("specifier", "return import(specifier)");
|
|
314
|
+
await dynamicImport("@" + "vercel/sandbox");
|
|
315
|
+
_sandboxAvailableCache = true;
|
|
316
|
+
return true;
|
|
317
|
+
} catch {
|
|
318
|
+
_sandboxAvailableCache = false;
|
|
319
|
+
return false;
|
|
320
|
+
}
|
|
290
321
|
}
|
|
291
322
|
async function loadSandboxFactory() {
|
|
292
323
|
if (sandboxFactoryOverride)
|
|
@@ -374,6 +405,8 @@ async function executeSandboxCode(options) {
|
|
|
374
405
|
const env = {
|
|
375
406
|
INTEGRATE_MCP_URL: options.mcpUrl
|
|
376
407
|
};
|
|
408
|
+
if (options.apiKey)
|
|
409
|
+
env.INTEGRATE_API_KEY = options.apiKey;
|
|
377
410
|
if (options.sessionToken)
|
|
378
411
|
env.INTEGRATE_SESSION_TOKEN = options.sessionToken;
|
|
379
412
|
if (options.providerTokens && Object.keys(options.providerTokens).length > 0) {
|
|
@@ -465,6 +498,13 @@ function resolveCodeModeClientConfig(client) {
|
|
|
465
498
|
const oauthConfig = client.__oauthConfig;
|
|
466
499
|
return oauthConfig?.codeMode ?? {};
|
|
467
500
|
}
|
|
501
|
+
async function canUseCodeMode(client) {
|
|
502
|
+
if (!await isSandboxAvailable())
|
|
503
|
+
return false;
|
|
504
|
+
const serverConfig = resolveCodeModeClientConfig(client);
|
|
505
|
+
const publicUrl = serverConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
|
|
506
|
+
return !!publicUrl;
|
|
507
|
+
}
|
|
468
508
|
function buildCodeModeTool(client, options) {
|
|
469
509
|
const { tools, providerTokens, context, integrationIds } = options;
|
|
470
510
|
const generated = generateCodeModeTypes(tools);
|
|
@@ -477,6 +517,7 @@ ${generated.source}
|
|
|
477
517
|
\`\`\``;
|
|
478
518
|
const execute = async ({ code }) => {
|
|
479
519
|
const publicUrl = sandboxOverrides.publicUrl ?? serverCodeModeConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
|
|
520
|
+
const apiKey = client.__oauthConfig?.apiKey;
|
|
480
521
|
if (!publicUrl) {
|
|
481
522
|
return {
|
|
482
523
|
success: false,
|
|
@@ -491,6 +532,7 @@ ${generated.source}
|
|
|
491
532
|
return executeSandboxCode({
|
|
492
533
|
code,
|
|
493
534
|
mcpUrl,
|
|
535
|
+
apiKey,
|
|
494
536
|
providerTokens,
|
|
495
537
|
context,
|
|
496
538
|
integrationsHeader: integrationIds && integrationIds.length > 0 ? integrationIds.join(",") : undefined,
|
|
@@ -519,6 +561,7 @@ ${generated.source}
|
|
|
519
561
|
}
|
|
520
562
|
export {
|
|
521
563
|
resolveCodeModeClientConfig,
|
|
564
|
+
canUseCodeMode,
|
|
522
565
|
buildCodeModeTool,
|
|
523
566
|
CODE_MODE_TOOL_NAME
|
|
524
567
|
};
|
package/dist/index.js
CHANGED
|
@@ -8943,6 +8943,7 @@ var init_type_generator = __esm(() => {
|
|
|
8943
8943
|
var RUNTIME_STUB_SOURCE = `// runtime.mjs — generated by integrate-sdk code mode
|
|
8944
8944
|
const MCP_URL = process.env.INTEGRATE_MCP_URL;
|
|
8945
8945
|
const SESSION_TOKEN = process.env.INTEGRATE_SESSION_TOKEN;
|
|
8946
|
+
const API_KEY = process.env.INTEGRATE_API_KEY || '';
|
|
8946
8947
|
const PROVIDER_TOKENS = process.env.INTEGRATE_PROVIDER_TOKENS || '';
|
|
8947
8948
|
const INTEGRATIONS_HEADER = process.env.INTEGRATE_INTEGRATIONS || '';
|
|
8948
8949
|
const CONTEXT_JSON = process.env.INTEGRATE_CONTEXT || '';
|
|
@@ -8961,6 +8962,7 @@ async function callTool(toolName, args) {
|
|
|
8961
8962
|
'x-integrate-code-mode': '1',
|
|
8962
8963
|
};
|
|
8963
8964
|
if (SESSION_TOKEN) headers['Authorization'] = 'Bearer ' + SESSION_TOKEN;
|
|
8965
|
+
if (API_KEY) headers['x-integrate-api-key'] = API_KEY;
|
|
8964
8966
|
if (PROVIDER_TOKENS) headers['x-integrate-tokens'] = PROVIDER_TOKENS;
|
|
8965
8967
|
if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;
|
|
8966
8968
|
if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;
|
|
@@ -9012,11 +9014,40 @@ export { callTool };
|
|
|
9012
9014
|
// src/code-mode/executor.ts
|
|
9013
9015
|
var exports_executor = {};
|
|
9014
9016
|
__export(exports_executor, {
|
|
9017
|
+
isSandboxAvailable: () => isSandboxAvailable,
|
|
9015
9018
|
executeSandboxCode: () => executeSandboxCode,
|
|
9019
|
+
__setSandboxUnavailableForTests: () => __setSandboxUnavailableForTests,
|
|
9016
9020
|
__setSandboxFactoryForTests: () => __setSandboxFactoryForTests
|
|
9017
9021
|
});
|
|
9018
9022
|
function __setSandboxFactoryForTests(factory) {
|
|
9019
9023
|
sandboxFactoryOverride = factory;
|
|
9024
|
+
_sandboxForcedUnavailableForTests = false;
|
|
9025
|
+
_sandboxAvailableCache = null;
|
|
9026
|
+
}
|
|
9027
|
+
function __setSandboxUnavailableForTests(force) {
|
|
9028
|
+
_sandboxForcedUnavailableForTests = force;
|
|
9029
|
+
_sandboxAvailableCache = null;
|
|
9030
|
+
}
|
|
9031
|
+
async function isSandboxAvailable() {
|
|
9032
|
+
if (_sandboxAvailableCache !== null)
|
|
9033
|
+
return _sandboxAvailableCache;
|
|
9034
|
+
if (_sandboxForcedUnavailableForTests) {
|
|
9035
|
+
_sandboxAvailableCache = false;
|
|
9036
|
+
return false;
|
|
9037
|
+
}
|
|
9038
|
+
if (sandboxFactoryOverride) {
|
|
9039
|
+
_sandboxAvailableCache = true;
|
|
9040
|
+
return true;
|
|
9041
|
+
}
|
|
9042
|
+
try {
|
|
9043
|
+
const dynamicImport = new Function("specifier", "return import(specifier)");
|
|
9044
|
+
await dynamicImport("@" + "vercel/sandbox");
|
|
9045
|
+
_sandboxAvailableCache = true;
|
|
9046
|
+
return true;
|
|
9047
|
+
} catch {
|
|
9048
|
+
_sandboxAvailableCache = false;
|
|
9049
|
+
return false;
|
|
9050
|
+
}
|
|
9020
9051
|
}
|
|
9021
9052
|
async function loadSandboxFactory() {
|
|
9022
9053
|
if (sandboxFactoryOverride)
|
|
@@ -9103,6 +9134,8 @@ async function executeSandboxCode(options) {
|
|
|
9103
9134
|
const env = {
|
|
9104
9135
|
INTEGRATE_MCP_URL: options.mcpUrl
|
|
9105
9136
|
};
|
|
9137
|
+
if (options.apiKey)
|
|
9138
|
+
env.INTEGRATE_API_KEY = options.apiKey;
|
|
9106
9139
|
if (options.sessionToken)
|
|
9107
9140
|
env.INTEGRATE_SESSION_TOKEN = options.sessionToken;
|
|
9108
9141
|
if (options.providerTokens && Object.keys(options.providerTokens).length > 0) {
|
|
@@ -9145,7 +9178,7 @@ async function executeSandboxCode(options) {
|
|
|
9145
9178
|
}
|
|
9146
9179
|
}
|
|
9147
9180
|
}
|
|
9148
|
-
var sandboxFactoryOverride = null, RESULT_SENTINEL = "__INTEGRATE_RESULT__";
|
|
9181
|
+
var sandboxFactoryOverride = null, _sandboxAvailableCache = null, _sandboxForcedUnavailableForTests = false, RESULT_SENTINEL = "__INTEGRATE_RESULT__";
|
|
9149
9182
|
var init_executor = () => {};
|
|
9150
9183
|
|
|
9151
9184
|
// src/code-mode/tool-builder.ts
|
|
@@ -9153,6 +9186,13 @@ function resolveCodeModeClientConfig(client) {
|
|
|
9153
9186
|
const oauthConfig = client.__oauthConfig;
|
|
9154
9187
|
return oauthConfig?.codeMode ?? {};
|
|
9155
9188
|
}
|
|
9189
|
+
async function canUseCodeMode(client) {
|
|
9190
|
+
if (!await isSandboxAvailable())
|
|
9191
|
+
return false;
|
|
9192
|
+
const serverConfig = resolveCodeModeClientConfig(client);
|
|
9193
|
+
const publicUrl = serverConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
|
|
9194
|
+
return !!publicUrl;
|
|
9195
|
+
}
|
|
9156
9196
|
function buildCodeModeTool(client, options) {
|
|
9157
9197
|
const { tools, providerTokens, context, integrationIds } = options;
|
|
9158
9198
|
const generated = generateCodeModeTypes(tools);
|
|
@@ -9165,6 +9205,7 @@ ${generated.source}
|
|
|
9165
9205
|
\`\`\``;
|
|
9166
9206
|
const execute = async ({ code }) => {
|
|
9167
9207
|
const publicUrl = sandboxOverrides.publicUrl ?? serverCodeModeConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
|
|
9208
|
+
const apiKey = client.__oauthConfig?.apiKey;
|
|
9168
9209
|
if (!publicUrl) {
|
|
9169
9210
|
return {
|
|
9170
9211
|
success: false,
|
|
@@ -9179,6 +9220,7 @@ ${generated.source}
|
|
|
9179
9220
|
return executeSandboxCode({
|
|
9180
9221
|
code,
|
|
9181
9222
|
mcpUrl,
|
|
9223
|
+
apiKey,
|
|
9182
9224
|
providerTokens,
|
|
9183
9225
|
context,
|
|
9184
9226
|
integrationsHeader: integrationIds && integrationIds.length > 0 ? integrationIds.join(",") : undefined,
|
|
@@ -9256,8 +9298,8 @@ async function getVercelAITools(client, options) {
|
|
|
9256
9298
|
await ensureClientConnected(client);
|
|
9257
9299
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
9258
9300
|
const vercelTools = {};
|
|
9259
|
-
const
|
|
9260
|
-
if (
|
|
9301
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
9302
|
+
if (effectiveMode === "code") {
|
|
9261
9303
|
const codeTool = buildCodeModeTool(client, {
|
|
9262
9304
|
tools: mcpTools,
|
|
9263
9305
|
providerTokens,
|
|
@@ -10715,8 +10757,8 @@ async function getOpenAITools(client, options) {
|
|
|
10715
10757
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
10716
10758
|
await ensureClientConnected(client);
|
|
10717
10759
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
10718
|
-
const
|
|
10719
|
-
const openaiTools =
|
|
10760
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
10761
|
+
const openaiTools = effectiveMode === "code" ? (() => {
|
|
10720
10762
|
const codeTool = buildCodeModeTool(client, {
|
|
10721
10763
|
tools: mcpTools,
|
|
10722
10764
|
providerTokens,
|
|
@@ -10895,8 +10937,8 @@ async function getAnthropicTools(client, options) {
|
|
|
10895
10937
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
10896
10938
|
await ensureClientConnected(client);
|
|
10897
10939
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
10898
|
-
const
|
|
10899
|
-
const anthropicTools =
|
|
10940
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
10941
|
+
const anthropicTools = effectiveMode === "code" ? (() => {
|
|
10900
10942
|
const codeTool = buildCodeModeTool(client, {
|
|
10901
10943
|
tools: mcpTools,
|
|
10902
10944
|
providerTokens,
|
|
@@ -11084,9 +11126,9 @@ async function getGoogleTools(client, options) {
|
|
|
11084
11126
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
11085
11127
|
await ensureClientConnected(client);
|
|
11086
11128
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
11087
|
-
const
|
|
11129
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
11088
11130
|
let googleTools;
|
|
11089
|
-
if (
|
|
11131
|
+
if (effectiveMode === "code") {
|
|
11090
11132
|
const TypeEnum = await getGoogleType();
|
|
11091
11133
|
const codeTool = buildCodeModeTool(client, {
|
|
11092
11134
|
tools: mcpTools,
|
|
@@ -11633,6 +11675,24 @@ function createMCPServer(config) {
|
|
|
11633
11675
|
} catch {}
|
|
11634
11676
|
}
|
|
11635
11677
|
}
|
|
11678
|
+
if (!authHeader && config.getProviderToken) {
|
|
11679
|
+
const codeModeHeader = webRequest.headers.get("x-integrate-code-mode");
|
|
11680
|
+
const contextHeader = webRequest.headers.get("x-integrate-context");
|
|
11681
|
+
const callbackApiKey = webRequest.headers.get("x-integrate-api-key");
|
|
11682
|
+
const toolName = typeof body?.name === "string" ? body.name : "";
|
|
11683
|
+
if (codeModeHeader === "1" && contextHeader && toolName && config.apiKey && callbackApiKey === config.apiKey) {
|
|
11684
|
+
try {
|
|
11685
|
+
const context2 = JSON.parse(contextHeader);
|
|
11686
|
+
const provider = toolName.split("_")[0];
|
|
11687
|
+
if (provider) {
|
|
11688
|
+
const tokenData = await config.getProviderToken(provider, undefined, context2);
|
|
11689
|
+
if (tokenData?.accessToken) {
|
|
11690
|
+
authHeader = `Bearer ${tokenData.accessToken}`;
|
|
11691
|
+
}
|
|
11692
|
+
}
|
|
11693
|
+
} catch {}
|
|
11694
|
+
}
|
|
11695
|
+
}
|
|
11636
11696
|
const { OAuthHandler: OAuthHandler2 } = await Promise.resolve().then(() => (init_base_handler(), exports_base_handler));
|
|
11637
11697
|
const oauthHandler = new OAuthHandler2({
|
|
11638
11698
|
providers,
|
package/dist/oauth.js
CHANGED
|
@@ -8777,6 +8777,7 @@ var init_type_generator = __esm(() => {
|
|
|
8777
8777
|
var RUNTIME_STUB_SOURCE = `// runtime.mjs — generated by integrate-sdk code mode
|
|
8778
8778
|
const MCP_URL = process.env.INTEGRATE_MCP_URL;
|
|
8779
8779
|
const SESSION_TOKEN = process.env.INTEGRATE_SESSION_TOKEN;
|
|
8780
|
+
const API_KEY = process.env.INTEGRATE_API_KEY || '';
|
|
8780
8781
|
const PROVIDER_TOKENS = process.env.INTEGRATE_PROVIDER_TOKENS || '';
|
|
8781
8782
|
const INTEGRATIONS_HEADER = process.env.INTEGRATE_INTEGRATIONS || '';
|
|
8782
8783
|
const CONTEXT_JSON = process.env.INTEGRATE_CONTEXT || '';
|
|
@@ -8795,6 +8796,7 @@ async function callTool(toolName, args) {
|
|
|
8795
8796
|
'x-integrate-code-mode': '1',
|
|
8796
8797
|
};
|
|
8797
8798
|
if (SESSION_TOKEN) headers['Authorization'] = 'Bearer ' + SESSION_TOKEN;
|
|
8799
|
+
if (API_KEY) headers['x-integrate-api-key'] = API_KEY;
|
|
8798
8800
|
if (PROVIDER_TOKENS) headers['x-integrate-tokens'] = PROVIDER_TOKENS;
|
|
8799
8801
|
if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;
|
|
8800
8802
|
if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;
|
|
@@ -8846,11 +8848,40 @@ export { callTool };
|
|
|
8846
8848
|
// src/code-mode/executor.ts
|
|
8847
8849
|
var exports_executor = {};
|
|
8848
8850
|
__export(exports_executor, {
|
|
8851
|
+
isSandboxAvailable: () => isSandboxAvailable,
|
|
8849
8852
|
executeSandboxCode: () => executeSandboxCode,
|
|
8853
|
+
__setSandboxUnavailableForTests: () => __setSandboxUnavailableForTests,
|
|
8850
8854
|
__setSandboxFactoryForTests: () => __setSandboxFactoryForTests
|
|
8851
8855
|
});
|
|
8852
8856
|
function __setSandboxFactoryForTests(factory) {
|
|
8853
8857
|
sandboxFactoryOverride = factory;
|
|
8858
|
+
_sandboxForcedUnavailableForTests = false;
|
|
8859
|
+
_sandboxAvailableCache = null;
|
|
8860
|
+
}
|
|
8861
|
+
function __setSandboxUnavailableForTests(force) {
|
|
8862
|
+
_sandboxForcedUnavailableForTests = force;
|
|
8863
|
+
_sandboxAvailableCache = null;
|
|
8864
|
+
}
|
|
8865
|
+
async function isSandboxAvailable() {
|
|
8866
|
+
if (_sandboxAvailableCache !== null)
|
|
8867
|
+
return _sandboxAvailableCache;
|
|
8868
|
+
if (_sandboxForcedUnavailableForTests) {
|
|
8869
|
+
_sandboxAvailableCache = false;
|
|
8870
|
+
return false;
|
|
8871
|
+
}
|
|
8872
|
+
if (sandboxFactoryOverride) {
|
|
8873
|
+
_sandboxAvailableCache = true;
|
|
8874
|
+
return true;
|
|
8875
|
+
}
|
|
8876
|
+
try {
|
|
8877
|
+
const dynamicImport = new Function("specifier", "return import(specifier)");
|
|
8878
|
+
await dynamicImport("@" + "vercel/sandbox");
|
|
8879
|
+
_sandboxAvailableCache = true;
|
|
8880
|
+
return true;
|
|
8881
|
+
} catch {
|
|
8882
|
+
_sandboxAvailableCache = false;
|
|
8883
|
+
return false;
|
|
8884
|
+
}
|
|
8854
8885
|
}
|
|
8855
8886
|
async function loadSandboxFactory() {
|
|
8856
8887
|
if (sandboxFactoryOverride)
|
|
@@ -8937,6 +8968,8 @@ async function executeSandboxCode(options) {
|
|
|
8937
8968
|
const env = {
|
|
8938
8969
|
INTEGRATE_MCP_URL: options.mcpUrl
|
|
8939
8970
|
};
|
|
8971
|
+
if (options.apiKey)
|
|
8972
|
+
env.INTEGRATE_API_KEY = options.apiKey;
|
|
8940
8973
|
if (options.sessionToken)
|
|
8941
8974
|
env.INTEGRATE_SESSION_TOKEN = options.sessionToken;
|
|
8942
8975
|
if (options.providerTokens && Object.keys(options.providerTokens).length > 0) {
|
|
@@ -8979,7 +9012,7 @@ async function executeSandboxCode(options) {
|
|
|
8979
9012
|
}
|
|
8980
9013
|
}
|
|
8981
9014
|
}
|
|
8982
|
-
var sandboxFactoryOverride = null, RESULT_SENTINEL = "__INTEGRATE_RESULT__";
|
|
9015
|
+
var sandboxFactoryOverride = null, _sandboxAvailableCache = null, _sandboxForcedUnavailableForTests = false, RESULT_SENTINEL = "__INTEGRATE_RESULT__";
|
|
8983
9016
|
var init_executor = () => {};
|
|
8984
9017
|
|
|
8985
9018
|
// src/code-mode/tool-builder.ts
|
|
@@ -8987,6 +9020,13 @@ function resolveCodeModeClientConfig(client) {
|
|
|
8987
9020
|
const oauthConfig = client.__oauthConfig;
|
|
8988
9021
|
return oauthConfig?.codeMode ?? {};
|
|
8989
9022
|
}
|
|
9023
|
+
async function canUseCodeMode(client) {
|
|
9024
|
+
if (!await isSandboxAvailable())
|
|
9025
|
+
return false;
|
|
9026
|
+
const serverConfig = resolveCodeModeClientConfig(client);
|
|
9027
|
+
const publicUrl = serverConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
|
|
9028
|
+
return !!publicUrl;
|
|
9029
|
+
}
|
|
8990
9030
|
function buildCodeModeTool(client, options) {
|
|
8991
9031
|
const { tools, providerTokens, context, integrationIds } = options;
|
|
8992
9032
|
const generated = generateCodeModeTypes(tools);
|
|
@@ -8999,6 +9039,7 @@ ${generated.source}
|
|
|
8999
9039
|
\`\`\``;
|
|
9000
9040
|
const execute = async ({ code }) => {
|
|
9001
9041
|
const publicUrl = sandboxOverrides.publicUrl ?? serverCodeModeConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
|
|
9042
|
+
const apiKey = client.__oauthConfig?.apiKey;
|
|
9002
9043
|
if (!publicUrl) {
|
|
9003
9044
|
return {
|
|
9004
9045
|
success: false,
|
|
@@ -9013,6 +9054,7 @@ ${generated.source}
|
|
|
9013
9054
|
return executeSandboxCode({
|
|
9014
9055
|
code,
|
|
9015
9056
|
mcpUrl,
|
|
9057
|
+
apiKey,
|
|
9016
9058
|
providerTokens,
|
|
9017
9059
|
context,
|
|
9018
9060
|
integrationsHeader: integrationIds && integrationIds.length > 0 ? integrationIds.join(",") : undefined,
|
|
@@ -9090,8 +9132,8 @@ async function getVercelAITools(client, options) {
|
|
|
9090
9132
|
await ensureClientConnected(client);
|
|
9091
9133
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
9092
9134
|
const vercelTools = {};
|
|
9093
|
-
const
|
|
9094
|
-
if (
|
|
9135
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
9136
|
+
if (effectiveMode === "code") {
|
|
9095
9137
|
const codeTool = buildCodeModeTool(client, {
|
|
9096
9138
|
tools: mcpTools,
|
|
9097
9139
|
providerTokens,
|
|
@@ -10549,8 +10591,8 @@ async function getOpenAITools(client, options) {
|
|
|
10549
10591
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
10550
10592
|
await ensureClientConnected(client);
|
|
10551
10593
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
10552
|
-
const
|
|
10553
|
-
const openaiTools =
|
|
10594
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
10595
|
+
const openaiTools = effectiveMode === "code" ? (() => {
|
|
10554
10596
|
const codeTool = buildCodeModeTool(client, {
|
|
10555
10597
|
tools: mcpTools,
|
|
10556
10598
|
providerTokens,
|
|
@@ -10729,8 +10771,8 @@ async function getAnthropicTools(client, options) {
|
|
|
10729
10771
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
10730
10772
|
await ensureClientConnected(client);
|
|
10731
10773
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
10732
|
-
const
|
|
10733
|
-
const anthropicTools =
|
|
10774
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
10775
|
+
const anthropicTools = effectiveMode === "code" ? (() => {
|
|
10734
10776
|
const codeTool = buildCodeModeTool(client, {
|
|
10735
10777
|
tools: mcpTools,
|
|
10736
10778
|
providerTokens,
|
|
@@ -10918,9 +10960,9 @@ async function getGoogleTools(client, options) {
|
|
|
10918
10960
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
10919
10961
|
await ensureClientConnected(client);
|
|
10920
10962
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
10921
|
-
const
|
|
10963
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
10922
10964
|
let googleTools;
|
|
10923
|
-
if (
|
|
10965
|
+
if (effectiveMode === "code") {
|
|
10924
10966
|
const TypeEnum = await getGoogleType();
|
|
10925
10967
|
const codeTool = buildCodeModeTool(client, {
|
|
10926
10968
|
tools: mcpTools,
|
|
@@ -11467,6 +11509,24 @@ function createMCPServer(config) {
|
|
|
11467
11509
|
} catch {}
|
|
11468
11510
|
}
|
|
11469
11511
|
}
|
|
11512
|
+
if (!authHeader && config.getProviderToken) {
|
|
11513
|
+
const codeModeHeader = webRequest.headers.get("x-integrate-code-mode");
|
|
11514
|
+
const contextHeader = webRequest.headers.get("x-integrate-context");
|
|
11515
|
+
const callbackApiKey = webRequest.headers.get("x-integrate-api-key");
|
|
11516
|
+
const toolName = typeof body?.name === "string" ? body.name : "";
|
|
11517
|
+
if (codeModeHeader === "1" && contextHeader && toolName && config.apiKey && callbackApiKey === config.apiKey) {
|
|
11518
|
+
try {
|
|
11519
|
+
const context2 = JSON.parse(contextHeader);
|
|
11520
|
+
const provider = toolName.split("_")[0];
|
|
11521
|
+
if (provider) {
|
|
11522
|
+
const tokenData = await config.getProviderToken(provider, undefined, context2);
|
|
11523
|
+
if (tokenData?.accessToken) {
|
|
11524
|
+
authHeader = `Bearer ${tokenData.accessToken}`;
|
|
11525
|
+
}
|
|
11526
|
+
}
|
|
11527
|
+
} catch {}
|
|
11528
|
+
}
|
|
11529
|
+
}
|
|
11470
11530
|
const { OAuthHandler: OAuthHandler2 } = await Promise.resolve().then(() => (init_base_handler(), exports_base_handler));
|
|
11471
11531
|
const oauthHandler = new OAuthHandler2({
|
|
11472
11532
|
providers,
|