integrate-sdk 0.9.19-dev.0 → 0.9.20-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/ai/anthropic.js +50 -0
- package/dist/ai/google.js +50 -0
- package/dist/ai/index.js +50 -0
- package/dist/ai/openai.js +50 -0
- package/dist/ai/vercel-ai.js +50 -0
- package/dist/code-mode/executor.d.ts.map +1 -1
- package/dist/code-mode/executor.js +33 -0
- package/dist/code-mode/index.js +103 -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 +23 -0
- package/dist/code-mode/tool-builder.d.ts.map +1 -1
- package/dist/code-mode/tool-builder.js +103 -0
- package/dist/server.js +120 -53
- package/dist/src/code-mode/executor.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.map +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/ai/anthropic.js
CHANGED
|
@@ -4677,6 +4677,19 @@ if (!MCP_URL) {
|
|
|
4677
4677
|
throw new Error('INTEGRATE_MCP_URL is not set — the sandbox cannot reach the MCP route.');
|
|
4678
4678
|
}
|
|
4679
4679
|
|
|
4680
|
+
// Diagnostic: log sandbox env summary to stderr so it shows up in the
|
|
4681
|
+
// execute_code result's stderr field for debugging auth issues.
|
|
4682
|
+
console.error('[sandbox-diag] MCP_URL=' + MCP_URL);
|
|
4683
|
+
console.error('[sandbox-diag] HAS_API_KEY=' + !!API_KEY);
|
|
4684
|
+
console.error('[sandbox-diag] HAS_SESSION_TOKEN=' + !!SESSION_TOKEN);
|
|
4685
|
+
console.error('[sandbox-diag] HAS_PROVIDER_TOKENS=' + !!PROVIDER_TOKENS);
|
|
4686
|
+
if (PROVIDER_TOKENS) {
|
|
4687
|
+
try {
|
|
4688
|
+
const _keys = Object.keys(JSON.parse(PROVIDER_TOKENS));
|
|
4689
|
+
console.error('[sandbox-diag] PROVIDER_TOKEN_KEYS=' + _keys.join(','));
|
|
4690
|
+
} catch { console.error('[sandbox-diag] PROVIDER_TOKENS is not valid JSON'); }
|
|
4691
|
+
}
|
|
4692
|
+
|
|
4680
4693
|
function camelToSnake(str) {
|
|
4681
4694
|
return str.replace(/[A-Z]/g, (letter) => '_' + letter.toLowerCase());
|
|
4682
4695
|
}
|
|
@@ -4692,6 +4705,14 @@ async function callTool(toolName, args) {
|
|
|
4692
4705
|
if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;
|
|
4693
4706
|
if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;
|
|
4694
4707
|
|
|
4708
|
+
console.error('[sandbox-diag] callTool: ' + toolName + ' → ' + MCP_URL);
|
|
4709
|
+
console.error('[sandbox-diag] headers: ' + JSON.stringify({
|
|
4710
|
+
hasAuth: !!headers['Authorization'],
|
|
4711
|
+
hasApiKey: !!headers['x-integrate-api-key'],
|
|
4712
|
+
hasTokens: !!headers['x-integrate-tokens'],
|
|
4713
|
+
hasCodeMode: !!headers['x-integrate-code-mode'],
|
|
4714
|
+
}));
|
|
4715
|
+
|
|
4695
4716
|
const res = await fetch(MCP_URL, {
|
|
4696
4717
|
method: 'POST',
|
|
4697
4718
|
headers,
|
|
@@ -4699,6 +4720,8 @@ async function callTool(toolName, args) {
|
|
|
4699
4720
|
});
|
|
4700
4721
|
|
|
4701
4722
|
const text = await res.text();
|
|
4723
|
+
console.error('[sandbox-diag] response: HTTP ' + res.status + ' len=' + text.length);
|
|
4724
|
+
|
|
4702
4725
|
let payload;
|
|
4703
4726
|
try {
|
|
4704
4727
|
payload = text ? JSON.parse(text) : null;
|
|
@@ -4876,6 +4899,16 @@ async function executeSandboxCode(options) {
|
|
|
4876
4899
|
env.INTEGRATE_INTEGRATIONS = options.integrationsHeader;
|
|
4877
4900
|
if (options.context)
|
|
4878
4901
|
env.INTEGRATE_CONTEXT = JSON.stringify(options.context);
|
|
4902
|
+
console.debug("[integrate-sdk] Sandbox env:", JSON.stringify({
|
|
4903
|
+
mcpUrl: options.mcpUrl,
|
|
4904
|
+
hasApiKey: !!options.apiKey,
|
|
4905
|
+
hasSessionToken: !!options.sessionToken,
|
|
4906
|
+
providerTokenKeys: options.providerTokens ? Object.keys(options.providerTokens) : [],
|
|
4907
|
+
hasIntegrations: !!options.integrationsHeader,
|
|
4908
|
+
hasContext: !!options.context,
|
|
4909
|
+
runtime,
|
|
4910
|
+
timeoutMs
|
|
4911
|
+
}));
|
|
4879
4912
|
const cmd = await sandbox.runCommand({
|
|
4880
4913
|
cmd: "node",
|
|
4881
4914
|
args: ["user.mjs"],
|
|
@@ -5002,6 +5035,15 @@ ${generated.compact}`;
|
|
|
5002
5035
|
}
|
|
5003
5036
|
const mcpUrl = publicUrl.replace(/\/$/, "") + "/api/integrate/mcp";
|
|
5004
5037
|
let resolvedTokens = providerTokens;
|
|
5038
|
+
let tokenSource = resolvedTokens && Object.keys(resolvedTokens).length > 0 ? "build-time" : "none";
|
|
5039
|
+
if (!resolvedTokens || Object.keys(resolvedTokens).length === 0) {
|
|
5040
|
+
try {
|
|
5041
|
+
resolvedTokens = await getProviderTokens();
|
|
5042
|
+
if (resolvedTokens && Object.keys(resolvedTokens).length > 0) {
|
|
5043
|
+
tokenSource = "request-header";
|
|
5044
|
+
}
|
|
5045
|
+
} catch {}
|
|
5046
|
+
}
|
|
5005
5047
|
if (!resolvedTokens || Object.keys(resolvedTokens).length === 0) {
|
|
5006
5048
|
const oauthManager = client.oauthManager;
|
|
5007
5049
|
if (oauthManager) {
|
|
@@ -5020,9 +5062,17 @@ ${generated.compact}`;
|
|
|
5020
5062
|
}
|
|
5021
5063
|
if (Object.keys(resolvedTokens).length === 0) {
|
|
5022
5064
|
resolvedTokens = undefined;
|
|
5065
|
+
} else {
|
|
5066
|
+
tokenSource = "oauthManager";
|
|
5023
5067
|
}
|
|
5024
5068
|
}
|
|
5025
5069
|
}
|
|
5070
|
+
console.debug("[integrate-sdk] execute_code token resolution:", JSON.stringify({
|
|
5071
|
+
source: tokenSource,
|
|
5072
|
+
keys: resolvedTokens ? Object.keys(resolvedTokens) : [],
|
|
5073
|
+
hasApiKey: !!apiKey,
|
|
5074
|
+
mcpUrl
|
|
5075
|
+
}));
|
|
5026
5076
|
return executeSandboxCode({
|
|
5027
5077
|
code,
|
|
5028
5078
|
mcpUrl,
|
package/dist/ai/google.js
CHANGED
|
@@ -4677,6 +4677,19 @@ if (!MCP_URL) {
|
|
|
4677
4677
|
throw new Error('INTEGRATE_MCP_URL is not set — the sandbox cannot reach the MCP route.');
|
|
4678
4678
|
}
|
|
4679
4679
|
|
|
4680
|
+
// Diagnostic: log sandbox env summary to stderr so it shows up in the
|
|
4681
|
+
// execute_code result's stderr field for debugging auth issues.
|
|
4682
|
+
console.error('[sandbox-diag] MCP_URL=' + MCP_URL);
|
|
4683
|
+
console.error('[sandbox-diag] HAS_API_KEY=' + !!API_KEY);
|
|
4684
|
+
console.error('[sandbox-diag] HAS_SESSION_TOKEN=' + !!SESSION_TOKEN);
|
|
4685
|
+
console.error('[sandbox-diag] HAS_PROVIDER_TOKENS=' + !!PROVIDER_TOKENS);
|
|
4686
|
+
if (PROVIDER_TOKENS) {
|
|
4687
|
+
try {
|
|
4688
|
+
const _keys = Object.keys(JSON.parse(PROVIDER_TOKENS));
|
|
4689
|
+
console.error('[sandbox-diag] PROVIDER_TOKEN_KEYS=' + _keys.join(','));
|
|
4690
|
+
} catch { console.error('[sandbox-diag] PROVIDER_TOKENS is not valid JSON'); }
|
|
4691
|
+
}
|
|
4692
|
+
|
|
4680
4693
|
function camelToSnake(str) {
|
|
4681
4694
|
return str.replace(/[A-Z]/g, (letter) => '_' + letter.toLowerCase());
|
|
4682
4695
|
}
|
|
@@ -4692,6 +4705,14 @@ async function callTool(toolName, args) {
|
|
|
4692
4705
|
if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;
|
|
4693
4706
|
if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;
|
|
4694
4707
|
|
|
4708
|
+
console.error('[sandbox-diag] callTool: ' + toolName + ' → ' + MCP_URL);
|
|
4709
|
+
console.error('[sandbox-diag] headers: ' + JSON.stringify({
|
|
4710
|
+
hasAuth: !!headers['Authorization'],
|
|
4711
|
+
hasApiKey: !!headers['x-integrate-api-key'],
|
|
4712
|
+
hasTokens: !!headers['x-integrate-tokens'],
|
|
4713
|
+
hasCodeMode: !!headers['x-integrate-code-mode'],
|
|
4714
|
+
}));
|
|
4715
|
+
|
|
4695
4716
|
const res = await fetch(MCP_URL, {
|
|
4696
4717
|
method: 'POST',
|
|
4697
4718
|
headers,
|
|
@@ -4699,6 +4720,8 @@ async function callTool(toolName, args) {
|
|
|
4699
4720
|
});
|
|
4700
4721
|
|
|
4701
4722
|
const text = await res.text();
|
|
4723
|
+
console.error('[sandbox-diag] response: HTTP ' + res.status + ' len=' + text.length);
|
|
4724
|
+
|
|
4702
4725
|
let payload;
|
|
4703
4726
|
try {
|
|
4704
4727
|
payload = text ? JSON.parse(text) : null;
|
|
@@ -4876,6 +4899,16 @@ async function executeSandboxCode(options) {
|
|
|
4876
4899
|
env.INTEGRATE_INTEGRATIONS = options.integrationsHeader;
|
|
4877
4900
|
if (options.context)
|
|
4878
4901
|
env.INTEGRATE_CONTEXT = JSON.stringify(options.context);
|
|
4902
|
+
console.debug("[integrate-sdk] Sandbox env:", JSON.stringify({
|
|
4903
|
+
mcpUrl: options.mcpUrl,
|
|
4904
|
+
hasApiKey: !!options.apiKey,
|
|
4905
|
+
hasSessionToken: !!options.sessionToken,
|
|
4906
|
+
providerTokenKeys: options.providerTokens ? Object.keys(options.providerTokens) : [],
|
|
4907
|
+
hasIntegrations: !!options.integrationsHeader,
|
|
4908
|
+
hasContext: !!options.context,
|
|
4909
|
+
runtime,
|
|
4910
|
+
timeoutMs
|
|
4911
|
+
}));
|
|
4879
4912
|
const cmd = await sandbox.runCommand({
|
|
4880
4913
|
cmd: "node",
|
|
4881
4914
|
args: ["user.mjs"],
|
|
@@ -5002,6 +5035,15 @@ ${generated.compact}`;
|
|
|
5002
5035
|
}
|
|
5003
5036
|
const mcpUrl = publicUrl.replace(/\/$/, "") + "/api/integrate/mcp";
|
|
5004
5037
|
let resolvedTokens = providerTokens;
|
|
5038
|
+
let tokenSource = resolvedTokens && Object.keys(resolvedTokens).length > 0 ? "build-time" : "none";
|
|
5039
|
+
if (!resolvedTokens || Object.keys(resolvedTokens).length === 0) {
|
|
5040
|
+
try {
|
|
5041
|
+
resolvedTokens = await getProviderTokens();
|
|
5042
|
+
if (resolvedTokens && Object.keys(resolvedTokens).length > 0) {
|
|
5043
|
+
tokenSource = "request-header";
|
|
5044
|
+
}
|
|
5045
|
+
} catch {}
|
|
5046
|
+
}
|
|
5005
5047
|
if (!resolvedTokens || Object.keys(resolvedTokens).length === 0) {
|
|
5006
5048
|
const oauthManager = client.oauthManager;
|
|
5007
5049
|
if (oauthManager) {
|
|
@@ -5020,9 +5062,17 @@ ${generated.compact}`;
|
|
|
5020
5062
|
}
|
|
5021
5063
|
if (Object.keys(resolvedTokens).length === 0) {
|
|
5022
5064
|
resolvedTokens = undefined;
|
|
5065
|
+
} else {
|
|
5066
|
+
tokenSource = "oauthManager";
|
|
5023
5067
|
}
|
|
5024
5068
|
}
|
|
5025
5069
|
}
|
|
5070
|
+
console.debug("[integrate-sdk] execute_code token resolution:", JSON.stringify({
|
|
5071
|
+
source: tokenSource,
|
|
5072
|
+
keys: resolvedTokens ? Object.keys(resolvedTokens) : [],
|
|
5073
|
+
hasApiKey: !!apiKey,
|
|
5074
|
+
mcpUrl
|
|
5075
|
+
}));
|
|
5026
5076
|
return executeSandboxCode({
|
|
5027
5077
|
code,
|
|
5028
5078
|
mcpUrl,
|
package/dist/ai/index.js
CHANGED
|
@@ -4677,6 +4677,19 @@ if (!MCP_URL) {
|
|
|
4677
4677
|
throw new Error('INTEGRATE_MCP_URL is not set — the sandbox cannot reach the MCP route.');
|
|
4678
4678
|
}
|
|
4679
4679
|
|
|
4680
|
+
// Diagnostic: log sandbox env summary to stderr so it shows up in the
|
|
4681
|
+
// execute_code result's stderr field for debugging auth issues.
|
|
4682
|
+
console.error('[sandbox-diag] MCP_URL=' + MCP_URL);
|
|
4683
|
+
console.error('[sandbox-diag] HAS_API_KEY=' + !!API_KEY);
|
|
4684
|
+
console.error('[sandbox-diag] HAS_SESSION_TOKEN=' + !!SESSION_TOKEN);
|
|
4685
|
+
console.error('[sandbox-diag] HAS_PROVIDER_TOKENS=' + !!PROVIDER_TOKENS);
|
|
4686
|
+
if (PROVIDER_TOKENS) {
|
|
4687
|
+
try {
|
|
4688
|
+
const _keys = Object.keys(JSON.parse(PROVIDER_TOKENS));
|
|
4689
|
+
console.error('[sandbox-diag] PROVIDER_TOKEN_KEYS=' + _keys.join(','));
|
|
4690
|
+
} catch { console.error('[sandbox-diag] PROVIDER_TOKENS is not valid JSON'); }
|
|
4691
|
+
}
|
|
4692
|
+
|
|
4680
4693
|
function camelToSnake(str) {
|
|
4681
4694
|
return str.replace(/[A-Z]/g, (letter) => '_' + letter.toLowerCase());
|
|
4682
4695
|
}
|
|
@@ -4692,6 +4705,14 @@ async function callTool(toolName, args) {
|
|
|
4692
4705
|
if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;
|
|
4693
4706
|
if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;
|
|
4694
4707
|
|
|
4708
|
+
console.error('[sandbox-diag] callTool: ' + toolName + ' → ' + MCP_URL);
|
|
4709
|
+
console.error('[sandbox-diag] headers: ' + JSON.stringify({
|
|
4710
|
+
hasAuth: !!headers['Authorization'],
|
|
4711
|
+
hasApiKey: !!headers['x-integrate-api-key'],
|
|
4712
|
+
hasTokens: !!headers['x-integrate-tokens'],
|
|
4713
|
+
hasCodeMode: !!headers['x-integrate-code-mode'],
|
|
4714
|
+
}));
|
|
4715
|
+
|
|
4695
4716
|
const res = await fetch(MCP_URL, {
|
|
4696
4717
|
method: 'POST',
|
|
4697
4718
|
headers,
|
|
@@ -4699,6 +4720,8 @@ async function callTool(toolName, args) {
|
|
|
4699
4720
|
});
|
|
4700
4721
|
|
|
4701
4722
|
const text = await res.text();
|
|
4723
|
+
console.error('[sandbox-diag] response: HTTP ' + res.status + ' len=' + text.length);
|
|
4724
|
+
|
|
4702
4725
|
let payload;
|
|
4703
4726
|
try {
|
|
4704
4727
|
payload = text ? JSON.parse(text) : null;
|
|
@@ -4876,6 +4899,16 @@ async function executeSandboxCode(options) {
|
|
|
4876
4899
|
env.INTEGRATE_INTEGRATIONS = options.integrationsHeader;
|
|
4877
4900
|
if (options.context)
|
|
4878
4901
|
env.INTEGRATE_CONTEXT = JSON.stringify(options.context);
|
|
4902
|
+
console.debug("[integrate-sdk] Sandbox env:", JSON.stringify({
|
|
4903
|
+
mcpUrl: options.mcpUrl,
|
|
4904
|
+
hasApiKey: !!options.apiKey,
|
|
4905
|
+
hasSessionToken: !!options.sessionToken,
|
|
4906
|
+
providerTokenKeys: options.providerTokens ? Object.keys(options.providerTokens) : [],
|
|
4907
|
+
hasIntegrations: !!options.integrationsHeader,
|
|
4908
|
+
hasContext: !!options.context,
|
|
4909
|
+
runtime,
|
|
4910
|
+
timeoutMs
|
|
4911
|
+
}));
|
|
4879
4912
|
const cmd = await sandbox.runCommand({
|
|
4880
4913
|
cmd: "node",
|
|
4881
4914
|
args: ["user.mjs"],
|
|
@@ -5002,6 +5035,15 @@ ${generated.compact}`;
|
|
|
5002
5035
|
}
|
|
5003
5036
|
const mcpUrl = publicUrl.replace(/\/$/, "") + "/api/integrate/mcp";
|
|
5004
5037
|
let resolvedTokens = providerTokens;
|
|
5038
|
+
let tokenSource = resolvedTokens && Object.keys(resolvedTokens).length > 0 ? "build-time" : "none";
|
|
5039
|
+
if (!resolvedTokens || Object.keys(resolvedTokens).length === 0) {
|
|
5040
|
+
try {
|
|
5041
|
+
resolvedTokens = await getProviderTokens();
|
|
5042
|
+
if (resolvedTokens && Object.keys(resolvedTokens).length > 0) {
|
|
5043
|
+
tokenSource = "request-header";
|
|
5044
|
+
}
|
|
5045
|
+
} catch {}
|
|
5046
|
+
}
|
|
5005
5047
|
if (!resolvedTokens || Object.keys(resolvedTokens).length === 0) {
|
|
5006
5048
|
const oauthManager = client.oauthManager;
|
|
5007
5049
|
if (oauthManager) {
|
|
@@ -5020,9 +5062,17 @@ ${generated.compact}`;
|
|
|
5020
5062
|
}
|
|
5021
5063
|
if (Object.keys(resolvedTokens).length === 0) {
|
|
5022
5064
|
resolvedTokens = undefined;
|
|
5065
|
+
} else {
|
|
5066
|
+
tokenSource = "oauthManager";
|
|
5023
5067
|
}
|
|
5024
5068
|
}
|
|
5025
5069
|
}
|
|
5070
|
+
console.debug("[integrate-sdk] execute_code token resolution:", JSON.stringify({
|
|
5071
|
+
source: tokenSource,
|
|
5072
|
+
keys: resolvedTokens ? Object.keys(resolvedTokens) : [],
|
|
5073
|
+
hasApiKey: !!apiKey,
|
|
5074
|
+
mcpUrl
|
|
5075
|
+
}));
|
|
5026
5076
|
return executeSandboxCode({
|
|
5027
5077
|
code,
|
|
5028
5078
|
mcpUrl,
|
package/dist/ai/openai.js
CHANGED
|
@@ -4677,6 +4677,19 @@ if (!MCP_URL) {
|
|
|
4677
4677
|
throw new Error('INTEGRATE_MCP_URL is not set — the sandbox cannot reach the MCP route.');
|
|
4678
4678
|
}
|
|
4679
4679
|
|
|
4680
|
+
// Diagnostic: log sandbox env summary to stderr so it shows up in the
|
|
4681
|
+
// execute_code result's stderr field for debugging auth issues.
|
|
4682
|
+
console.error('[sandbox-diag] MCP_URL=' + MCP_URL);
|
|
4683
|
+
console.error('[sandbox-diag] HAS_API_KEY=' + !!API_KEY);
|
|
4684
|
+
console.error('[sandbox-diag] HAS_SESSION_TOKEN=' + !!SESSION_TOKEN);
|
|
4685
|
+
console.error('[sandbox-diag] HAS_PROVIDER_TOKENS=' + !!PROVIDER_TOKENS);
|
|
4686
|
+
if (PROVIDER_TOKENS) {
|
|
4687
|
+
try {
|
|
4688
|
+
const _keys = Object.keys(JSON.parse(PROVIDER_TOKENS));
|
|
4689
|
+
console.error('[sandbox-diag] PROVIDER_TOKEN_KEYS=' + _keys.join(','));
|
|
4690
|
+
} catch { console.error('[sandbox-diag] PROVIDER_TOKENS is not valid JSON'); }
|
|
4691
|
+
}
|
|
4692
|
+
|
|
4680
4693
|
function camelToSnake(str) {
|
|
4681
4694
|
return str.replace(/[A-Z]/g, (letter) => '_' + letter.toLowerCase());
|
|
4682
4695
|
}
|
|
@@ -4692,6 +4705,14 @@ async function callTool(toolName, args) {
|
|
|
4692
4705
|
if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;
|
|
4693
4706
|
if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;
|
|
4694
4707
|
|
|
4708
|
+
console.error('[sandbox-diag] callTool: ' + toolName + ' → ' + MCP_URL);
|
|
4709
|
+
console.error('[sandbox-diag] headers: ' + JSON.stringify({
|
|
4710
|
+
hasAuth: !!headers['Authorization'],
|
|
4711
|
+
hasApiKey: !!headers['x-integrate-api-key'],
|
|
4712
|
+
hasTokens: !!headers['x-integrate-tokens'],
|
|
4713
|
+
hasCodeMode: !!headers['x-integrate-code-mode'],
|
|
4714
|
+
}));
|
|
4715
|
+
|
|
4695
4716
|
const res = await fetch(MCP_URL, {
|
|
4696
4717
|
method: 'POST',
|
|
4697
4718
|
headers,
|
|
@@ -4699,6 +4720,8 @@ async function callTool(toolName, args) {
|
|
|
4699
4720
|
});
|
|
4700
4721
|
|
|
4701
4722
|
const text = await res.text();
|
|
4723
|
+
console.error('[sandbox-diag] response: HTTP ' + res.status + ' len=' + text.length);
|
|
4724
|
+
|
|
4702
4725
|
let payload;
|
|
4703
4726
|
try {
|
|
4704
4727
|
payload = text ? JSON.parse(text) : null;
|
|
@@ -4876,6 +4899,16 @@ async function executeSandboxCode(options) {
|
|
|
4876
4899
|
env.INTEGRATE_INTEGRATIONS = options.integrationsHeader;
|
|
4877
4900
|
if (options.context)
|
|
4878
4901
|
env.INTEGRATE_CONTEXT = JSON.stringify(options.context);
|
|
4902
|
+
console.debug("[integrate-sdk] Sandbox env:", JSON.stringify({
|
|
4903
|
+
mcpUrl: options.mcpUrl,
|
|
4904
|
+
hasApiKey: !!options.apiKey,
|
|
4905
|
+
hasSessionToken: !!options.sessionToken,
|
|
4906
|
+
providerTokenKeys: options.providerTokens ? Object.keys(options.providerTokens) : [],
|
|
4907
|
+
hasIntegrations: !!options.integrationsHeader,
|
|
4908
|
+
hasContext: !!options.context,
|
|
4909
|
+
runtime,
|
|
4910
|
+
timeoutMs
|
|
4911
|
+
}));
|
|
4879
4912
|
const cmd = await sandbox.runCommand({
|
|
4880
4913
|
cmd: "node",
|
|
4881
4914
|
args: ["user.mjs"],
|
|
@@ -5002,6 +5035,15 @@ ${generated.compact}`;
|
|
|
5002
5035
|
}
|
|
5003
5036
|
const mcpUrl = publicUrl.replace(/\/$/, "") + "/api/integrate/mcp";
|
|
5004
5037
|
let resolvedTokens = providerTokens;
|
|
5038
|
+
let tokenSource = resolvedTokens && Object.keys(resolvedTokens).length > 0 ? "build-time" : "none";
|
|
5039
|
+
if (!resolvedTokens || Object.keys(resolvedTokens).length === 0) {
|
|
5040
|
+
try {
|
|
5041
|
+
resolvedTokens = await getProviderTokens();
|
|
5042
|
+
if (resolvedTokens && Object.keys(resolvedTokens).length > 0) {
|
|
5043
|
+
tokenSource = "request-header";
|
|
5044
|
+
}
|
|
5045
|
+
} catch {}
|
|
5046
|
+
}
|
|
5005
5047
|
if (!resolvedTokens || Object.keys(resolvedTokens).length === 0) {
|
|
5006
5048
|
const oauthManager = client.oauthManager;
|
|
5007
5049
|
if (oauthManager) {
|
|
@@ -5020,9 +5062,17 @@ ${generated.compact}`;
|
|
|
5020
5062
|
}
|
|
5021
5063
|
if (Object.keys(resolvedTokens).length === 0) {
|
|
5022
5064
|
resolvedTokens = undefined;
|
|
5065
|
+
} else {
|
|
5066
|
+
tokenSource = "oauthManager";
|
|
5023
5067
|
}
|
|
5024
5068
|
}
|
|
5025
5069
|
}
|
|
5070
|
+
console.debug("[integrate-sdk] execute_code token resolution:", JSON.stringify({
|
|
5071
|
+
source: tokenSource,
|
|
5072
|
+
keys: resolvedTokens ? Object.keys(resolvedTokens) : [],
|
|
5073
|
+
hasApiKey: !!apiKey,
|
|
5074
|
+
mcpUrl
|
|
5075
|
+
}));
|
|
5026
5076
|
return executeSandboxCode({
|
|
5027
5077
|
code,
|
|
5028
5078
|
mcpUrl,
|
package/dist/ai/vercel-ai.js
CHANGED
|
@@ -4677,6 +4677,19 @@ if (!MCP_URL) {
|
|
|
4677
4677
|
throw new Error('INTEGRATE_MCP_URL is not set — the sandbox cannot reach the MCP route.');
|
|
4678
4678
|
}
|
|
4679
4679
|
|
|
4680
|
+
// Diagnostic: log sandbox env summary to stderr so it shows up in the
|
|
4681
|
+
// execute_code result's stderr field for debugging auth issues.
|
|
4682
|
+
console.error('[sandbox-diag] MCP_URL=' + MCP_URL);
|
|
4683
|
+
console.error('[sandbox-diag] HAS_API_KEY=' + !!API_KEY);
|
|
4684
|
+
console.error('[sandbox-diag] HAS_SESSION_TOKEN=' + !!SESSION_TOKEN);
|
|
4685
|
+
console.error('[sandbox-diag] HAS_PROVIDER_TOKENS=' + !!PROVIDER_TOKENS);
|
|
4686
|
+
if (PROVIDER_TOKENS) {
|
|
4687
|
+
try {
|
|
4688
|
+
const _keys = Object.keys(JSON.parse(PROVIDER_TOKENS));
|
|
4689
|
+
console.error('[sandbox-diag] PROVIDER_TOKEN_KEYS=' + _keys.join(','));
|
|
4690
|
+
} catch { console.error('[sandbox-diag] PROVIDER_TOKENS is not valid JSON'); }
|
|
4691
|
+
}
|
|
4692
|
+
|
|
4680
4693
|
function camelToSnake(str) {
|
|
4681
4694
|
return str.replace(/[A-Z]/g, (letter) => '_' + letter.toLowerCase());
|
|
4682
4695
|
}
|
|
@@ -4692,6 +4705,14 @@ async function callTool(toolName, args) {
|
|
|
4692
4705
|
if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;
|
|
4693
4706
|
if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;
|
|
4694
4707
|
|
|
4708
|
+
console.error('[sandbox-diag] callTool: ' + toolName + ' → ' + MCP_URL);
|
|
4709
|
+
console.error('[sandbox-diag] headers: ' + JSON.stringify({
|
|
4710
|
+
hasAuth: !!headers['Authorization'],
|
|
4711
|
+
hasApiKey: !!headers['x-integrate-api-key'],
|
|
4712
|
+
hasTokens: !!headers['x-integrate-tokens'],
|
|
4713
|
+
hasCodeMode: !!headers['x-integrate-code-mode'],
|
|
4714
|
+
}));
|
|
4715
|
+
|
|
4695
4716
|
const res = await fetch(MCP_URL, {
|
|
4696
4717
|
method: 'POST',
|
|
4697
4718
|
headers,
|
|
@@ -4699,6 +4720,8 @@ async function callTool(toolName, args) {
|
|
|
4699
4720
|
});
|
|
4700
4721
|
|
|
4701
4722
|
const text = await res.text();
|
|
4723
|
+
console.error('[sandbox-diag] response: HTTP ' + res.status + ' len=' + text.length);
|
|
4724
|
+
|
|
4702
4725
|
let payload;
|
|
4703
4726
|
try {
|
|
4704
4727
|
payload = text ? JSON.parse(text) : null;
|
|
@@ -4876,6 +4899,16 @@ async function executeSandboxCode(options) {
|
|
|
4876
4899
|
env.INTEGRATE_INTEGRATIONS = options.integrationsHeader;
|
|
4877
4900
|
if (options.context)
|
|
4878
4901
|
env.INTEGRATE_CONTEXT = JSON.stringify(options.context);
|
|
4902
|
+
console.debug("[integrate-sdk] Sandbox env:", JSON.stringify({
|
|
4903
|
+
mcpUrl: options.mcpUrl,
|
|
4904
|
+
hasApiKey: !!options.apiKey,
|
|
4905
|
+
hasSessionToken: !!options.sessionToken,
|
|
4906
|
+
providerTokenKeys: options.providerTokens ? Object.keys(options.providerTokens) : [],
|
|
4907
|
+
hasIntegrations: !!options.integrationsHeader,
|
|
4908
|
+
hasContext: !!options.context,
|
|
4909
|
+
runtime,
|
|
4910
|
+
timeoutMs
|
|
4911
|
+
}));
|
|
4879
4912
|
const cmd = await sandbox.runCommand({
|
|
4880
4913
|
cmd: "node",
|
|
4881
4914
|
args: ["user.mjs"],
|
|
@@ -5002,6 +5035,15 @@ ${generated.compact}`;
|
|
|
5002
5035
|
}
|
|
5003
5036
|
const mcpUrl = publicUrl.replace(/\/$/, "") + "/api/integrate/mcp";
|
|
5004
5037
|
let resolvedTokens = providerTokens;
|
|
5038
|
+
let tokenSource = resolvedTokens && Object.keys(resolvedTokens).length > 0 ? "build-time" : "none";
|
|
5039
|
+
if (!resolvedTokens || Object.keys(resolvedTokens).length === 0) {
|
|
5040
|
+
try {
|
|
5041
|
+
resolvedTokens = await getProviderTokens();
|
|
5042
|
+
if (resolvedTokens && Object.keys(resolvedTokens).length > 0) {
|
|
5043
|
+
tokenSource = "request-header";
|
|
5044
|
+
}
|
|
5045
|
+
} catch {}
|
|
5046
|
+
}
|
|
5005
5047
|
if (!resolvedTokens || Object.keys(resolvedTokens).length === 0) {
|
|
5006
5048
|
const oauthManager = client.oauthManager;
|
|
5007
5049
|
if (oauthManager) {
|
|
@@ -5020,9 +5062,17 @@ ${generated.compact}`;
|
|
|
5020
5062
|
}
|
|
5021
5063
|
if (Object.keys(resolvedTokens).length === 0) {
|
|
5022
5064
|
resolvedTokens = undefined;
|
|
5065
|
+
} else {
|
|
5066
|
+
tokenSource = "oauthManager";
|
|
5023
5067
|
}
|
|
5024
5068
|
}
|
|
5025
5069
|
}
|
|
5070
|
+
console.debug("[integrate-sdk] execute_code token resolution:", JSON.stringify({
|
|
5071
|
+
source: tokenSource,
|
|
5072
|
+
keys: resolvedTokens ? Object.keys(resolvedTokens) : [],
|
|
5073
|
+
hasApiKey: !!apiKey,
|
|
5074
|
+
mcpUrl
|
|
5075
|
+
}));
|
|
5026
5076
|
return executeSandboxCode({
|
|
5027
5077
|
code,
|
|
5028
5078
|
mcpUrl,
|
|
@@ -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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"}
|
|
@@ -30,6 +30,19 @@ if (!MCP_URL) {
|
|
|
30
30
|
throw new Error('INTEGRATE_MCP_URL is not set — the sandbox cannot reach the MCP route.');
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
// Diagnostic: log sandbox env summary to stderr so it shows up in the
|
|
34
|
+
// execute_code result's stderr field for debugging auth issues.
|
|
35
|
+
console.error('[sandbox-diag] MCP_URL=' + MCP_URL);
|
|
36
|
+
console.error('[sandbox-diag] HAS_API_KEY=' + !!API_KEY);
|
|
37
|
+
console.error('[sandbox-diag] HAS_SESSION_TOKEN=' + !!SESSION_TOKEN);
|
|
38
|
+
console.error('[sandbox-diag] HAS_PROVIDER_TOKENS=' + !!PROVIDER_TOKENS);
|
|
39
|
+
if (PROVIDER_TOKENS) {
|
|
40
|
+
try {
|
|
41
|
+
const _keys = Object.keys(JSON.parse(PROVIDER_TOKENS));
|
|
42
|
+
console.error('[sandbox-diag] PROVIDER_TOKEN_KEYS=' + _keys.join(','));
|
|
43
|
+
} catch { console.error('[sandbox-diag] PROVIDER_TOKENS is not valid JSON'); }
|
|
44
|
+
}
|
|
45
|
+
|
|
33
46
|
function camelToSnake(str) {
|
|
34
47
|
return str.replace(/[A-Z]/g, (letter) => '_' + letter.toLowerCase());
|
|
35
48
|
}
|
|
@@ -45,6 +58,14 @@ async function callTool(toolName, args) {
|
|
|
45
58
|
if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;
|
|
46
59
|
if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;
|
|
47
60
|
|
|
61
|
+
console.error('[sandbox-diag] callTool: ' + toolName + ' → ' + MCP_URL);
|
|
62
|
+
console.error('[sandbox-diag] headers: ' + JSON.stringify({
|
|
63
|
+
hasAuth: !!headers['Authorization'],
|
|
64
|
+
hasApiKey: !!headers['x-integrate-api-key'],
|
|
65
|
+
hasTokens: !!headers['x-integrate-tokens'],
|
|
66
|
+
hasCodeMode: !!headers['x-integrate-code-mode'],
|
|
67
|
+
}));
|
|
68
|
+
|
|
48
69
|
const res = await fetch(MCP_URL, {
|
|
49
70
|
method: 'POST',
|
|
50
71
|
headers,
|
|
@@ -52,6 +73,8 @@ async function callTool(toolName, args) {
|
|
|
52
73
|
});
|
|
53
74
|
|
|
54
75
|
const text = await res.text();
|
|
76
|
+
console.error('[sandbox-diag] response: HTTP ' + res.status + ' len=' + text.length);
|
|
77
|
+
|
|
55
78
|
let payload;
|
|
56
79
|
try {
|
|
57
80
|
payload = text ? JSON.parse(text) : null;
|
|
@@ -240,6 +263,16 @@ async function executeSandboxCode(options) {
|
|
|
240
263
|
env.INTEGRATE_INTEGRATIONS = options.integrationsHeader;
|
|
241
264
|
if (options.context)
|
|
242
265
|
env.INTEGRATE_CONTEXT = JSON.stringify(options.context);
|
|
266
|
+
console.debug("[integrate-sdk] Sandbox env:", JSON.stringify({
|
|
267
|
+
mcpUrl: options.mcpUrl,
|
|
268
|
+
hasApiKey: !!options.apiKey,
|
|
269
|
+
hasSessionToken: !!options.sessionToken,
|
|
270
|
+
providerTokenKeys: options.providerTokens ? Object.keys(options.providerTokens) : [],
|
|
271
|
+
hasIntegrations: !!options.integrationsHeader,
|
|
272
|
+
hasContext: !!options.context,
|
|
273
|
+
runtime,
|
|
274
|
+
timeoutMs
|
|
275
|
+
}));
|
|
243
276
|
const cmd = await sandbox.runCommand({
|
|
244
277
|
cmd: "node",
|
|
245
278
|
args: ["user.mjs"],
|
package/dist/code-mode/index.js
CHANGED
|
@@ -275,6 +275,19 @@ if (!MCP_URL) {
|
|
|
275
275
|
throw new Error('INTEGRATE_MCP_URL is not set — the sandbox cannot reach the MCP route.');
|
|
276
276
|
}
|
|
277
277
|
|
|
278
|
+
// Diagnostic: log sandbox env summary to stderr so it shows up in the
|
|
279
|
+
// execute_code result's stderr field for debugging auth issues.
|
|
280
|
+
console.error('[sandbox-diag] MCP_URL=' + MCP_URL);
|
|
281
|
+
console.error('[sandbox-diag] HAS_API_KEY=' + !!API_KEY);
|
|
282
|
+
console.error('[sandbox-diag] HAS_SESSION_TOKEN=' + !!SESSION_TOKEN);
|
|
283
|
+
console.error('[sandbox-diag] HAS_PROVIDER_TOKENS=' + !!PROVIDER_TOKENS);
|
|
284
|
+
if (PROVIDER_TOKENS) {
|
|
285
|
+
try {
|
|
286
|
+
const _keys = Object.keys(JSON.parse(PROVIDER_TOKENS));
|
|
287
|
+
console.error('[sandbox-diag] PROVIDER_TOKEN_KEYS=' + _keys.join(','));
|
|
288
|
+
} catch { console.error('[sandbox-diag] PROVIDER_TOKENS is not valid JSON'); }
|
|
289
|
+
}
|
|
290
|
+
|
|
278
291
|
function camelToSnake(str) {
|
|
279
292
|
return str.replace(/[A-Z]/g, (letter) => '_' + letter.toLowerCase());
|
|
280
293
|
}
|
|
@@ -290,6 +303,14 @@ async function callTool(toolName, args) {
|
|
|
290
303
|
if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;
|
|
291
304
|
if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;
|
|
292
305
|
|
|
306
|
+
console.error('[sandbox-diag] callTool: ' + toolName + ' → ' + MCP_URL);
|
|
307
|
+
console.error('[sandbox-diag] headers: ' + JSON.stringify({
|
|
308
|
+
hasAuth: !!headers['Authorization'],
|
|
309
|
+
hasApiKey: !!headers['x-integrate-api-key'],
|
|
310
|
+
hasTokens: !!headers['x-integrate-tokens'],
|
|
311
|
+
hasCodeMode: !!headers['x-integrate-code-mode'],
|
|
312
|
+
}));
|
|
313
|
+
|
|
293
314
|
const res = await fetch(MCP_URL, {
|
|
294
315
|
method: 'POST',
|
|
295
316
|
headers,
|
|
@@ -297,6 +318,8 @@ async function callTool(toolName, args) {
|
|
|
297
318
|
});
|
|
298
319
|
|
|
299
320
|
const text = await res.text();
|
|
321
|
+
console.error('[sandbox-diag] response: HTTP ' + res.status + ' len=' + text.length);
|
|
322
|
+
|
|
300
323
|
let payload;
|
|
301
324
|
try {
|
|
302
325
|
payload = text ? JSON.parse(text) : null;
|
|
@@ -485,6 +508,16 @@ async function executeSandboxCode(options) {
|
|
|
485
508
|
env.INTEGRATE_INTEGRATIONS = options.integrationsHeader;
|
|
486
509
|
if (options.context)
|
|
487
510
|
env.INTEGRATE_CONTEXT = JSON.stringify(options.context);
|
|
511
|
+
console.debug("[integrate-sdk] Sandbox env:", JSON.stringify({
|
|
512
|
+
mcpUrl: options.mcpUrl,
|
|
513
|
+
hasApiKey: !!options.apiKey,
|
|
514
|
+
hasSessionToken: !!options.sessionToken,
|
|
515
|
+
providerTokenKeys: options.providerTokens ? Object.keys(options.providerTokens) : [],
|
|
516
|
+
hasIntegrations: !!options.integrationsHeader,
|
|
517
|
+
hasContext: !!options.context,
|
|
518
|
+
runtime,
|
|
519
|
+
timeoutMs
|
|
520
|
+
}));
|
|
488
521
|
const cmd = await sandbox.runCommand({
|
|
489
522
|
cmd: "node",
|
|
490
523
|
args: ["user.mjs"],
|
|
@@ -540,6 +573,59 @@ function getEnv(key) {
|
|
|
540
573
|
return;
|
|
541
574
|
}
|
|
542
575
|
|
|
576
|
+
// ../utils/request-tokens.ts
|
|
577
|
+
async function getProviderTokens(manualTokens) {
|
|
578
|
+
if (manualTokens) {
|
|
579
|
+
return manualTokens;
|
|
580
|
+
}
|
|
581
|
+
let tokensString = null;
|
|
582
|
+
if (!tokensString) {
|
|
583
|
+
try {
|
|
584
|
+
const getNextHeadersPath = () => {
|
|
585
|
+
const parts = ["next", "/headers"];
|
|
586
|
+
return parts.join("");
|
|
587
|
+
};
|
|
588
|
+
const nextHeaders = await import(getNextHeadersPath()).catch(() => null);
|
|
589
|
+
if (nextHeaders && typeof nextHeaders.headers === "function") {
|
|
590
|
+
const headersList = await Promise.resolve(nextHeaders.headers());
|
|
591
|
+
tokensString = headersList.get("x-integrate-tokens");
|
|
592
|
+
}
|
|
593
|
+
} catch {}
|
|
594
|
+
}
|
|
595
|
+
if (!tokensString) {
|
|
596
|
+
try {
|
|
597
|
+
const getNuxtHeaders = new Function(`
|
|
598
|
+
try {
|
|
599
|
+
if (typeof useRequestHeaders === 'function') {
|
|
600
|
+
return useRequestHeaders();
|
|
601
|
+
}
|
|
602
|
+
} catch {}
|
|
603
|
+
return null;
|
|
604
|
+
`);
|
|
605
|
+
const headers = getNuxtHeaders();
|
|
606
|
+
if (headers && typeof headers === "object") {
|
|
607
|
+
tokensString = headers["x-integrate-tokens"];
|
|
608
|
+
}
|
|
609
|
+
} catch {}
|
|
610
|
+
}
|
|
611
|
+
if (!tokensString) {
|
|
612
|
+
if (typeof process !== "undefined" && process.env) {
|
|
613
|
+
tokensString = process.env.PROVIDER_TOKENS;
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
if (tokensString) {
|
|
617
|
+
try {
|
|
618
|
+
const parsed = JSON.parse(tokensString);
|
|
619
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
620
|
+
return parsed;
|
|
621
|
+
}
|
|
622
|
+
} catch (error) {
|
|
623
|
+
throw new Error(`Failed to parse provider tokens: ${error instanceof Error ? error.message : "Invalid JSON"}`);
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
throw new Error("Provider tokens not found. Please pass tokens manually via options.providerTokens or set the x-integrate-tokens header in your request.");
|
|
627
|
+
}
|
|
628
|
+
|
|
543
629
|
// tool-builder.ts
|
|
544
630
|
var CODE_MODE_TOOL_NAME = "execute_code";
|
|
545
631
|
var TYPES_TOOL_NAME = "get_integration_types";
|
|
@@ -617,6 +703,15 @@ ${generated.compact}`;
|
|
|
617
703
|
}
|
|
618
704
|
const mcpUrl = publicUrl.replace(/\/$/, "") + "/api/integrate/mcp";
|
|
619
705
|
let resolvedTokens = providerTokens;
|
|
706
|
+
let tokenSource = resolvedTokens && Object.keys(resolvedTokens).length > 0 ? "build-time" : "none";
|
|
707
|
+
if (!resolvedTokens || Object.keys(resolvedTokens).length === 0) {
|
|
708
|
+
try {
|
|
709
|
+
resolvedTokens = await getProviderTokens();
|
|
710
|
+
if (resolvedTokens && Object.keys(resolvedTokens).length > 0) {
|
|
711
|
+
tokenSource = "request-header";
|
|
712
|
+
}
|
|
713
|
+
} catch {}
|
|
714
|
+
}
|
|
620
715
|
if (!resolvedTokens || Object.keys(resolvedTokens).length === 0) {
|
|
621
716
|
const oauthManager = client.oauthManager;
|
|
622
717
|
if (oauthManager) {
|
|
@@ -635,9 +730,17 @@ ${generated.compact}`;
|
|
|
635
730
|
}
|
|
636
731
|
if (Object.keys(resolvedTokens).length === 0) {
|
|
637
732
|
resolvedTokens = undefined;
|
|
733
|
+
} else {
|
|
734
|
+
tokenSource = "oauthManager";
|
|
638
735
|
}
|
|
639
736
|
}
|
|
640
737
|
}
|
|
738
|
+
console.debug("[integrate-sdk] execute_code token resolution:", JSON.stringify({
|
|
739
|
+
source: tokenSource,
|
|
740
|
+
keys: resolvedTokens ? Object.keys(resolvedTokens) : [],
|
|
741
|
+
hasApiKey: !!apiKey,
|
|
742
|
+
mcpUrl
|
|
743
|
+
}));
|
|
641
744
|
return executeSandboxCode({
|
|
642
745
|
code,
|
|
643
746
|
mcpUrl,
|
|
@@ -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 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 let message = (payload && (payload.error || payload.message)) || 'Tool call failed: HTTP ' + res.status;\n if ((res.status === 401 || res.status === 403) && typeof text === 'string' && text.indexOf('Authorization header') !== -1) {\n message =\n 'Code Mode callback was rejected by the MCP server (HTTP ' + res.status + '). ' +\n 'The SDK route could not synthesize an Authorization header. Check the host-side ' +\n 'createMCPServer config (apiKey, getProviderToken) or pass providerTokens to the ' +\n 'AI helper. Original upstream message: ' + text;\n }\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\n// Diagnostic: log sandbox env summary to stderr so it shows up in the\n// execute_code result's stderr field for debugging auth issues.\nconsole.error('[sandbox-diag] MCP_URL=' + MCP_URL);\nconsole.error('[sandbox-diag] HAS_API_KEY=' + !!API_KEY);\nconsole.error('[sandbox-diag] HAS_SESSION_TOKEN=' + !!SESSION_TOKEN);\nconsole.error('[sandbox-diag] HAS_PROVIDER_TOKENS=' + !!PROVIDER_TOKENS);\nif (PROVIDER_TOKENS) {\n try {\n const _keys = Object.keys(JSON.parse(PROVIDER_TOKENS));\n console.error('[sandbox-diag] PROVIDER_TOKEN_KEYS=' + _keys.join(','));\n } catch { console.error('[sandbox-diag] PROVIDER_TOKENS is not valid JSON'); }\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 console.error('[sandbox-diag] callTool: ' + toolName + ' \u2192 ' + MCP_URL);\n console.error('[sandbox-diag] headers: ' + JSON.stringify({\n hasAuth: !!headers['Authorization'],\n hasApiKey: !!headers['x-integrate-api-key'],\n hasTokens: !!headers['x-integrate-tokens'],\n hasCodeMode: !!headers['x-integrate-code-mode'],\n }));\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 console.error('[sandbox-diag] response: HTTP ' + res.status + ' len=' + text.length);\n\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 let message = (payload && (payload.error || payload.message)) || 'Tool call failed: HTTP ' + res.status;\n if ((res.status === 401 || res.status === 403) && typeof text === 'string' && text.indexOf('Authorization header') !== -1) {\n message =\n 'Code Mode callback was rejected by the MCP server (HTTP ' + res.status + '). ' +\n 'The SDK route could not synthesize an Authorization header. Check the host-side ' +\n 'createMCPServer config (apiKey, getProviderToken) or pass providerTokens to the ' +\n 'AI helper. Original upstream message: ' + text;\n }\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,owHAmG/B,CAAC"}
|
|
@@ -30,6 +30,19 @@ if (!MCP_URL) {
|
|
|
30
30
|
throw new Error('INTEGRATE_MCP_URL is not set — the sandbox cannot reach the MCP route.');
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
// Diagnostic: log sandbox env summary to stderr so it shows up in the
|
|
34
|
+
// execute_code result's stderr field for debugging auth issues.
|
|
35
|
+
console.error('[sandbox-diag] MCP_URL=' + MCP_URL);
|
|
36
|
+
console.error('[sandbox-diag] HAS_API_KEY=' + !!API_KEY);
|
|
37
|
+
console.error('[sandbox-diag] HAS_SESSION_TOKEN=' + !!SESSION_TOKEN);
|
|
38
|
+
console.error('[sandbox-diag] HAS_PROVIDER_TOKENS=' + !!PROVIDER_TOKENS);
|
|
39
|
+
if (PROVIDER_TOKENS) {
|
|
40
|
+
try {
|
|
41
|
+
const _keys = Object.keys(JSON.parse(PROVIDER_TOKENS));
|
|
42
|
+
console.error('[sandbox-diag] PROVIDER_TOKEN_KEYS=' + _keys.join(','));
|
|
43
|
+
} catch { console.error('[sandbox-diag] PROVIDER_TOKENS is not valid JSON'); }
|
|
44
|
+
}
|
|
45
|
+
|
|
33
46
|
function camelToSnake(str) {
|
|
34
47
|
return str.replace(/[A-Z]/g, (letter) => '_' + letter.toLowerCase());
|
|
35
48
|
}
|
|
@@ -45,6 +58,14 @@ async function callTool(toolName, args) {
|
|
|
45
58
|
if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;
|
|
46
59
|
if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;
|
|
47
60
|
|
|
61
|
+
console.error('[sandbox-diag] callTool: ' + toolName + ' → ' + MCP_URL);
|
|
62
|
+
console.error('[sandbox-diag] headers: ' + JSON.stringify({
|
|
63
|
+
hasAuth: !!headers['Authorization'],
|
|
64
|
+
hasApiKey: !!headers['x-integrate-api-key'],
|
|
65
|
+
hasTokens: !!headers['x-integrate-tokens'],
|
|
66
|
+
hasCodeMode: !!headers['x-integrate-code-mode'],
|
|
67
|
+
}));
|
|
68
|
+
|
|
48
69
|
const res = await fetch(MCP_URL, {
|
|
49
70
|
method: 'POST',
|
|
50
71
|
headers,
|
|
@@ -52,6 +73,8 @@ async function callTool(toolName, args) {
|
|
|
52
73
|
});
|
|
53
74
|
|
|
54
75
|
const text = await res.text();
|
|
76
|
+
console.error('[sandbox-diag] response: HTTP ' + res.status + ' len=' + text.length);
|
|
77
|
+
|
|
55
78
|
let payload;
|
|
56
79
|
try {
|
|
57
80
|
payload = text ? JSON.parse(text) : null;
|
|
@@ -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,EAIL,KAAK,wBAAwB,EAC9B,MAAM,eAAe,CAAC;
|
|
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,EAIL,KAAK,wBAAwB,EAC9B,MAAM,eAAe,CAAC;AAIvB,eAAO,MAAM,mBAAmB,iBAAiB,CAAC;AAClD,eAAO,MAAM,eAAe,0BAA0B,CAAC;AAEvD,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;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE;YACV,WAAW,EAAE;gBAAE,IAAI,EAAE,QAAQ,CAAC;gBAAC,WAAW,EAAE,MAAM,CAAA;aAAE,CAAC;SACtD,CAAC;QACF,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC;QAC1B,oBAAoB,EAAE,KAAK,CAAC;KAC7B,CAAC;IACF,OAAO,EAAE,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,KAAK;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACzG;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,sBAAsB,CAAC;IACjC,SAAS,EAAE,mBAAmB,CAAC;CAChC;AAaD,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,MAAM,MAAM,yBAAyB,GAAG,iBAAiB,GAAG,eAAe,CAAC;AAE5E,MAAM,MAAM,iBAAiB,GACzB;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,GACnB;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,yBAAyB,CAAA;CAAE,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACxC,MAAM,GAAG,SAAS,CAEpB;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAUzF;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAE7E;AAwBD,sEAAsE;AACtE,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,yBAAyB,GAAG,IAAI,CAI5E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,EAAE,mBAAmB,GAC3B,aAAa,CAuJf"}
|
|
@@ -275,6 +275,19 @@ if (!MCP_URL) {
|
|
|
275
275
|
throw new Error('INTEGRATE_MCP_URL is not set — the sandbox cannot reach the MCP route.');
|
|
276
276
|
}
|
|
277
277
|
|
|
278
|
+
// Diagnostic: log sandbox env summary to stderr so it shows up in the
|
|
279
|
+
// execute_code result's stderr field for debugging auth issues.
|
|
280
|
+
console.error('[sandbox-diag] MCP_URL=' + MCP_URL);
|
|
281
|
+
console.error('[sandbox-diag] HAS_API_KEY=' + !!API_KEY);
|
|
282
|
+
console.error('[sandbox-diag] HAS_SESSION_TOKEN=' + !!SESSION_TOKEN);
|
|
283
|
+
console.error('[sandbox-diag] HAS_PROVIDER_TOKENS=' + !!PROVIDER_TOKENS);
|
|
284
|
+
if (PROVIDER_TOKENS) {
|
|
285
|
+
try {
|
|
286
|
+
const _keys = Object.keys(JSON.parse(PROVIDER_TOKENS));
|
|
287
|
+
console.error('[sandbox-diag] PROVIDER_TOKEN_KEYS=' + _keys.join(','));
|
|
288
|
+
} catch { console.error('[sandbox-diag] PROVIDER_TOKENS is not valid JSON'); }
|
|
289
|
+
}
|
|
290
|
+
|
|
278
291
|
function camelToSnake(str) {
|
|
279
292
|
return str.replace(/[A-Z]/g, (letter) => '_' + letter.toLowerCase());
|
|
280
293
|
}
|
|
@@ -290,6 +303,14 @@ async function callTool(toolName, args) {
|
|
|
290
303
|
if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;
|
|
291
304
|
if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;
|
|
292
305
|
|
|
306
|
+
console.error('[sandbox-diag] callTool: ' + toolName + ' → ' + MCP_URL);
|
|
307
|
+
console.error('[sandbox-diag] headers: ' + JSON.stringify({
|
|
308
|
+
hasAuth: !!headers['Authorization'],
|
|
309
|
+
hasApiKey: !!headers['x-integrate-api-key'],
|
|
310
|
+
hasTokens: !!headers['x-integrate-tokens'],
|
|
311
|
+
hasCodeMode: !!headers['x-integrate-code-mode'],
|
|
312
|
+
}));
|
|
313
|
+
|
|
293
314
|
const res = await fetch(MCP_URL, {
|
|
294
315
|
method: 'POST',
|
|
295
316
|
headers,
|
|
@@ -297,6 +318,8 @@ async function callTool(toolName, args) {
|
|
|
297
318
|
});
|
|
298
319
|
|
|
299
320
|
const text = await res.text();
|
|
321
|
+
console.error('[sandbox-diag] response: HTTP ' + res.status + ' len=' + text.length);
|
|
322
|
+
|
|
300
323
|
let payload;
|
|
301
324
|
try {
|
|
302
325
|
payload = text ? JSON.parse(text) : null;
|
|
@@ -485,6 +508,16 @@ async function executeSandboxCode(options) {
|
|
|
485
508
|
env.INTEGRATE_INTEGRATIONS = options.integrationsHeader;
|
|
486
509
|
if (options.context)
|
|
487
510
|
env.INTEGRATE_CONTEXT = JSON.stringify(options.context);
|
|
511
|
+
console.debug("[integrate-sdk] Sandbox env:", JSON.stringify({
|
|
512
|
+
mcpUrl: options.mcpUrl,
|
|
513
|
+
hasApiKey: !!options.apiKey,
|
|
514
|
+
hasSessionToken: !!options.sessionToken,
|
|
515
|
+
providerTokenKeys: options.providerTokens ? Object.keys(options.providerTokens) : [],
|
|
516
|
+
hasIntegrations: !!options.integrationsHeader,
|
|
517
|
+
hasContext: !!options.context,
|
|
518
|
+
runtime,
|
|
519
|
+
timeoutMs
|
|
520
|
+
}));
|
|
488
521
|
const cmd = await sandbox.runCommand({
|
|
489
522
|
cmd: "node",
|
|
490
523
|
args: ["user.mjs"],
|
|
@@ -540,6 +573,59 @@ function getEnv(key) {
|
|
|
540
573
|
return;
|
|
541
574
|
}
|
|
542
575
|
|
|
576
|
+
// ../utils/request-tokens.ts
|
|
577
|
+
async function getProviderTokens(manualTokens) {
|
|
578
|
+
if (manualTokens) {
|
|
579
|
+
return manualTokens;
|
|
580
|
+
}
|
|
581
|
+
let tokensString = null;
|
|
582
|
+
if (!tokensString) {
|
|
583
|
+
try {
|
|
584
|
+
const getNextHeadersPath = () => {
|
|
585
|
+
const parts = ["next", "/headers"];
|
|
586
|
+
return parts.join("");
|
|
587
|
+
};
|
|
588
|
+
const nextHeaders = await import(getNextHeadersPath()).catch(() => null);
|
|
589
|
+
if (nextHeaders && typeof nextHeaders.headers === "function") {
|
|
590
|
+
const headersList = await Promise.resolve(nextHeaders.headers());
|
|
591
|
+
tokensString = headersList.get("x-integrate-tokens");
|
|
592
|
+
}
|
|
593
|
+
} catch {}
|
|
594
|
+
}
|
|
595
|
+
if (!tokensString) {
|
|
596
|
+
try {
|
|
597
|
+
const getNuxtHeaders = new Function(`
|
|
598
|
+
try {
|
|
599
|
+
if (typeof useRequestHeaders === 'function') {
|
|
600
|
+
return useRequestHeaders();
|
|
601
|
+
}
|
|
602
|
+
} catch {}
|
|
603
|
+
return null;
|
|
604
|
+
`);
|
|
605
|
+
const headers = getNuxtHeaders();
|
|
606
|
+
if (headers && typeof headers === "object") {
|
|
607
|
+
tokensString = headers["x-integrate-tokens"];
|
|
608
|
+
}
|
|
609
|
+
} catch {}
|
|
610
|
+
}
|
|
611
|
+
if (!tokensString) {
|
|
612
|
+
if (typeof process !== "undefined" && process.env) {
|
|
613
|
+
tokensString = process.env.PROVIDER_TOKENS;
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
if (tokensString) {
|
|
617
|
+
try {
|
|
618
|
+
const parsed = JSON.parse(tokensString);
|
|
619
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
620
|
+
return parsed;
|
|
621
|
+
}
|
|
622
|
+
} catch (error) {
|
|
623
|
+
throw new Error(`Failed to parse provider tokens: ${error instanceof Error ? error.message : "Invalid JSON"}`);
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
throw new Error("Provider tokens not found. Please pass tokens manually via options.providerTokens or set the x-integrate-tokens header in your request.");
|
|
627
|
+
}
|
|
628
|
+
|
|
543
629
|
// tool-builder.ts
|
|
544
630
|
var CODE_MODE_TOOL_NAME = "execute_code";
|
|
545
631
|
var TYPES_TOOL_NAME = "get_integration_types";
|
|
@@ -617,6 +703,15 @@ ${generated.compact}`;
|
|
|
617
703
|
}
|
|
618
704
|
const mcpUrl = publicUrl.replace(/\/$/, "") + "/api/integrate/mcp";
|
|
619
705
|
let resolvedTokens = providerTokens;
|
|
706
|
+
let tokenSource = resolvedTokens && Object.keys(resolvedTokens).length > 0 ? "build-time" : "none";
|
|
707
|
+
if (!resolvedTokens || Object.keys(resolvedTokens).length === 0) {
|
|
708
|
+
try {
|
|
709
|
+
resolvedTokens = await getProviderTokens();
|
|
710
|
+
if (resolvedTokens && Object.keys(resolvedTokens).length > 0) {
|
|
711
|
+
tokenSource = "request-header";
|
|
712
|
+
}
|
|
713
|
+
} catch {}
|
|
714
|
+
}
|
|
620
715
|
if (!resolvedTokens || Object.keys(resolvedTokens).length === 0) {
|
|
621
716
|
const oauthManager = client.oauthManager;
|
|
622
717
|
if (oauthManager) {
|
|
@@ -635,9 +730,17 @@ ${generated.compact}`;
|
|
|
635
730
|
}
|
|
636
731
|
if (Object.keys(resolvedTokens).length === 0) {
|
|
637
732
|
resolvedTokens = undefined;
|
|
733
|
+
} else {
|
|
734
|
+
tokenSource = "oauthManager";
|
|
638
735
|
}
|
|
639
736
|
}
|
|
640
737
|
}
|
|
738
|
+
console.debug("[integrate-sdk] execute_code token resolution:", JSON.stringify({
|
|
739
|
+
source: tokenSource,
|
|
740
|
+
keys: resolvedTokens ? Object.keys(resolvedTokens) : [],
|
|
741
|
+
hasApiKey: !!apiKey,
|
|
742
|
+
mcpUrl
|
|
743
|
+
}));
|
|
641
744
|
return executeSandboxCode({
|
|
642
745
|
code,
|
|
643
746
|
mcpUrl,
|
package/dist/server.js
CHANGED
|
@@ -1154,6 +1154,59 @@ function getEnv(key) {
|
|
|
1154
1154
|
return;
|
|
1155
1155
|
}
|
|
1156
1156
|
|
|
1157
|
+
// src/utils/request-tokens.ts
|
|
1158
|
+
async function getProviderTokens(manualTokens) {
|
|
1159
|
+
if (manualTokens) {
|
|
1160
|
+
return manualTokens;
|
|
1161
|
+
}
|
|
1162
|
+
let tokensString = null;
|
|
1163
|
+
if (!tokensString) {
|
|
1164
|
+
try {
|
|
1165
|
+
const getNextHeadersPath = () => {
|
|
1166
|
+
const parts = ["next", "/headers"];
|
|
1167
|
+
return parts.join("");
|
|
1168
|
+
};
|
|
1169
|
+
const nextHeaders = await import(getNextHeadersPath()).catch(() => null);
|
|
1170
|
+
if (nextHeaders && typeof nextHeaders.headers === "function") {
|
|
1171
|
+
const headersList = await Promise.resolve(nextHeaders.headers());
|
|
1172
|
+
tokensString = headersList.get("x-integrate-tokens");
|
|
1173
|
+
}
|
|
1174
|
+
} catch {}
|
|
1175
|
+
}
|
|
1176
|
+
if (!tokensString) {
|
|
1177
|
+
try {
|
|
1178
|
+
const getNuxtHeaders = new Function(`
|
|
1179
|
+
try {
|
|
1180
|
+
if (typeof useRequestHeaders === 'function') {
|
|
1181
|
+
return useRequestHeaders();
|
|
1182
|
+
}
|
|
1183
|
+
} catch {}
|
|
1184
|
+
return null;
|
|
1185
|
+
`);
|
|
1186
|
+
const headers = getNuxtHeaders();
|
|
1187
|
+
if (headers && typeof headers === "object") {
|
|
1188
|
+
tokensString = headers["x-integrate-tokens"];
|
|
1189
|
+
}
|
|
1190
|
+
} catch {}
|
|
1191
|
+
}
|
|
1192
|
+
if (!tokensString) {
|
|
1193
|
+
if (typeof process !== "undefined" && process.env) {
|
|
1194
|
+
tokensString = process.env.PROVIDER_TOKENS;
|
|
1195
|
+
}
|
|
1196
|
+
}
|
|
1197
|
+
if (tokensString) {
|
|
1198
|
+
try {
|
|
1199
|
+
const parsed = JSON.parse(tokensString);
|
|
1200
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
1201
|
+
return parsed;
|
|
1202
|
+
}
|
|
1203
|
+
} catch (error) {
|
|
1204
|
+
throw new Error(`Failed to parse provider tokens: ${error instanceof Error ? error.message : "Invalid JSON"}`);
|
|
1205
|
+
}
|
|
1206
|
+
}
|
|
1207
|
+
throw new Error("Provider tokens not found. Please pass tokens manually via options.providerTokens or set the x-integrate-tokens header in your request.");
|
|
1208
|
+
}
|
|
1209
|
+
|
|
1157
1210
|
// node_modules/nanoid/url-alphabet/index.js
|
|
1158
1211
|
var urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
|
|
1159
1212
|
var init_url_alphabet = () => {};
|
|
@@ -1481,6 +1534,19 @@ if (!MCP_URL) {
|
|
|
1481
1534
|
throw new Error('INTEGRATE_MCP_URL is not set — the sandbox cannot reach the MCP route.');
|
|
1482
1535
|
}
|
|
1483
1536
|
|
|
1537
|
+
// Diagnostic: log sandbox env summary to stderr so it shows up in the
|
|
1538
|
+
// execute_code result's stderr field for debugging auth issues.
|
|
1539
|
+
console.error('[sandbox-diag] MCP_URL=' + MCP_URL);
|
|
1540
|
+
console.error('[sandbox-diag] HAS_API_KEY=' + !!API_KEY);
|
|
1541
|
+
console.error('[sandbox-diag] HAS_SESSION_TOKEN=' + !!SESSION_TOKEN);
|
|
1542
|
+
console.error('[sandbox-diag] HAS_PROVIDER_TOKENS=' + !!PROVIDER_TOKENS);
|
|
1543
|
+
if (PROVIDER_TOKENS) {
|
|
1544
|
+
try {
|
|
1545
|
+
const _keys = Object.keys(JSON.parse(PROVIDER_TOKENS));
|
|
1546
|
+
console.error('[sandbox-diag] PROVIDER_TOKEN_KEYS=' + _keys.join(','));
|
|
1547
|
+
} catch { console.error('[sandbox-diag] PROVIDER_TOKENS is not valid JSON'); }
|
|
1548
|
+
}
|
|
1549
|
+
|
|
1484
1550
|
function camelToSnake(str) {
|
|
1485
1551
|
return str.replace(/[A-Z]/g, (letter) => '_' + letter.toLowerCase());
|
|
1486
1552
|
}
|
|
@@ -1496,6 +1562,14 @@ async function callTool(toolName, args) {
|
|
|
1496
1562
|
if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;
|
|
1497
1563
|
if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;
|
|
1498
1564
|
|
|
1565
|
+
console.error('[sandbox-diag] callTool: ' + toolName + ' → ' + MCP_URL);
|
|
1566
|
+
console.error('[sandbox-diag] headers: ' + JSON.stringify({
|
|
1567
|
+
hasAuth: !!headers['Authorization'],
|
|
1568
|
+
hasApiKey: !!headers['x-integrate-api-key'],
|
|
1569
|
+
hasTokens: !!headers['x-integrate-tokens'],
|
|
1570
|
+
hasCodeMode: !!headers['x-integrate-code-mode'],
|
|
1571
|
+
}));
|
|
1572
|
+
|
|
1499
1573
|
const res = await fetch(MCP_URL, {
|
|
1500
1574
|
method: 'POST',
|
|
1501
1575
|
headers,
|
|
@@ -1503,6 +1577,8 @@ async function callTool(toolName, args) {
|
|
|
1503
1577
|
});
|
|
1504
1578
|
|
|
1505
1579
|
const text = await res.text();
|
|
1580
|
+
console.error('[sandbox-diag] response: HTTP ' + res.status + ' len=' + text.length);
|
|
1581
|
+
|
|
1506
1582
|
let payload;
|
|
1507
1583
|
try {
|
|
1508
1584
|
payload = text ? JSON.parse(text) : null;
|
|
@@ -1694,6 +1770,16 @@ async function executeSandboxCode(options) {
|
|
|
1694
1770
|
env.INTEGRATE_INTEGRATIONS = options.integrationsHeader;
|
|
1695
1771
|
if (options.context)
|
|
1696
1772
|
env.INTEGRATE_CONTEXT = JSON.stringify(options.context);
|
|
1773
|
+
console.debug("[integrate-sdk] Sandbox env:", JSON.stringify({
|
|
1774
|
+
mcpUrl: options.mcpUrl,
|
|
1775
|
+
hasApiKey: !!options.apiKey,
|
|
1776
|
+
hasSessionToken: !!options.sessionToken,
|
|
1777
|
+
providerTokenKeys: options.providerTokens ? Object.keys(options.providerTokens) : [],
|
|
1778
|
+
hasIntegrations: !!options.integrationsHeader,
|
|
1779
|
+
hasContext: !!options.context,
|
|
1780
|
+
runtime,
|
|
1781
|
+
timeoutMs
|
|
1782
|
+
}));
|
|
1697
1783
|
const cmd = await sandbox.runCommand({
|
|
1698
1784
|
cmd: "node",
|
|
1699
1785
|
args: ["user.mjs"],
|
|
@@ -1805,6 +1891,15 @@ ${generated.compact}`;
|
|
|
1805
1891
|
}
|
|
1806
1892
|
const mcpUrl = publicUrl.replace(/\/$/, "") + "/api/integrate/mcp";
|
|
1807
1893
|
let resolvedTokens = providerTokens;
|
|
1894
|
+
let tokenSource = resolvedTokens && Object.keys(resolvedTokens).length > 0 ? "build-time" : "none";
|
|
1895
|
+
if (!resolvedTokens || Object.keys(resolvedTokens).length === 0) {
|
|
1896
|
+
try {
|
|
1897
|
+
resolvedTokens = await getProviderTokens();
|
|
1898
|
+
if (resolvedTokens && Object.keys(resolvedTokens).length > 0) {
|
|
1899
|
+
tokenSource = "request-header";
|
|
1900
|
+
}
|
|
1901
|
+
} catch {}
|
|
1902
|
+
}
|
|
1808
1903
|
if (!resolvedTokens || Object.keys(resolvedTokens).length === 0) {
|
|
1809
1904
|
const oauthManager = client.oauthManager;
|
|
1810
1905
|
if (oauthManager) {
|
|
@@ -1823,9 +1918,17 @@ ${generated.compact}`;
|
|
|
1823
1918
|
}
|
|
1824
1919
|
if (Object.keys(resolvedTokens).length === 0) {
|
|
1825
1920
|
resolvedTokens = undefined;
|
|
1921
|
+
} else {
|
|
1922
|
+
tokenSource = "oauthManager";
|
|
1826
1923
|
}
|
|
1827
1924
|
}
|
|
1828
1925
|
}
|
|
1926
|
+
console.debug("[integrate-sdk] execute_code token resolution:", JSON.stringify({
|
|
1927
|
+
source: tokenSource,
|
|
1928
|
+
keys: resolvedTokens ? Object.keys(resolvedTokens) : [],
|
|
1929
|
+
hasApiKey: !!apiKey,
|
|
1930
|
+
mcpUrl
|
|
1931
|
+
}));
|
|
1829
1932
|
return executeSandboxCode({
|
|
1830
1933
|
code,
|
|
1831
1934
|
mcpUrl,
|
|
@@ -9705,59 +9808,6 @@ var coerce = {
|
|
|
9705
9808
|
date: (arg) => ZodDate.create({ ...arg, coerce: true })
|
|
9706
9809
|
};
|
|
9707
9810
|
var NEVER = INVALID;
|
|
9708
|
-
// src/utils/request-tokens.ts
|
|
9709
|
-
async function getProviderTokens(manualTokens) {
|
|
9710
|
-
if (manualTokens) {
|
|
9711
|
-
return manualTokens;
|
|
9712
|
-
}
|
|
9713
|
-
let tokensString = null;
|
|
9714
|
-
if (!tokensString) {
|
|
9715
|
-
try {
|
|
9716
|
-
const getNextHeadersPath = () => {
|
|
9717
|
-
const parts = ["next", "/headers"];
|
|
9718
|
-
return parts.join("");
|
|
9719
|
-
};
|
|
9720
|
-
const nextHeaders = await import(getNextHeadersPath()).catch(() => null);
|
|
9721
|
-
if (nextHeaders && typeof nextHeaders.headers === "function") {
|
|
9722
|
-
const headersList = await Promise.resolve(nextHeaders.headers());
|
|
9723
|
-
tokensString = headersList.get("x-integrate-tokens");
|
|
9724
|
-
}
|
|
9725
|
-
} catch {}
|
|
9726
|
-
}
|
|
9727
|
-
if (!tokensString) {
|
|
9728
|
-
try {
|
|
9729
|
-
const getNuxtHeaders = new Function(`
|
|
9730
|
-
try {
|
|
9731
|
-
if (typeof useRequestHeaders === 'function') {
|
|
9732
|
-
return useRequestHeaders();
|
|
9733
|
-
}
|
|
9734
|
-
} catch {}
|
|
9735
|
-
return null;
|
|
9736
|
-
`);
|
|
9737
|
-
const headers = getNuxtHeaders();
|
|
9738
|
-
if (headers && typeof headers === "object") {
|
|
9739
|
-
tokensString = headers["x-integrate-tokens"];
|
|
9740
|
-
}
|
|
9741
|
-
} catch {}
|
|
9742
|
-
}
|
|
9743
|
-
if (!tokensString) {
|
|
9744
|
-
if (typeof process !== "undefined" && process.env) {
|
|
9745
|
-
tokensString = process.env.PROVIDER_TOKENS;
|
|
9746
|
-
}
|
|
9747
|
-
}
|
|
9748
|
-
if (tokensString) {
|
|
9749
|
-
try {
|
|
9750
|
-
const parsed = JSON.parse(tokensString);
|
|
9751
|
-
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
9752
|
-
return parsed;
|
|
9753
|
-
}
|
|
9754
|
-
} catch (error) {
|
|
9755
|
-
throw new Error(`Failed to parse provider tokens: ${error instanceof Error ? error.message : "Invalid JSON"}`);
|
|
9756
|
-
}
|
|
9757
|
-
}
|
|
9758
|
-
throw new Error("Provider tokens not found. Please pass tokens manually via options.providerTokens or set the x-integrate-tokens header in your request.");
|
|
9759
|
-
}
|
|
9760
|
-
|
|
9761
9811
|
// src/ai/utils.ts
|
|
9762
9812
|
function getProviderForTool(client, toolName) {
|
|
9763
9813
|
return client.getProviderForTool?.(toolName);
|
|
@@ -12124,6 +12174,23 @@ function createMCPServer(config) {
|
|
|
12124
12174
|
const tokensHeader = webRequest.headers.get("x-integrate-tokens");
|
|
12125
12175
|
const toolName = typeof body?.name === "string" ? body.name : "";
|
|
12126
12176
|
let tokensResolvedProvider = null;
|
|
12177
|
+
if (codeModeHeader === "1") {
|
|
12178
|
+
logger33.debug("[MCP Code Mode Callback]", JSON.stringify({
|
|
12179
|
+
toolName,
|
|
12180
|
+
hasAuthHeader: !!authHeader,
|
|
12181
|
+
hasTokensHeader: !!tokensHeader,
|
|
12182
|
+
tokenKeys: tokensHeader ? (() => {
|
|
12183
|
+
try {
|
|
12184
|
+
return Object.keys(JSON.parse(tokensHeader));
|
|
12185
|
+
} catch {
|
|
12186
|
+
return "PARSE_ERROR";
|
|
12187
|
+
}
|
|
12188
|
+
})() : [],
|
|
12189
|
+
hasApiKey: !!callbackApiKey,
|
|
12190
|
+
hasContext: !!contextHeader,
|
|
12191
|
+
hasIntegrations: !!integrationsHeader
|
|
12192
|
+
}));
|
|
12193
|
+
}
|
|
12127
12194
|
if (codeModeHeader === "1" && tokensHeader && toolName) {
|
|
12128
12195
|
try {
|
|
12129
12196
|
const tokens = JSON.parse(tokensHeader);
|
|
@@ -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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"}
|
|
@@ -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 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 let message = (payload && (payload.error || payload.message)) || 'Tool call failed: HTTP ' + res.status;\n if ((res.status === 401 || res.status === 403) && typeof text === 'string' && text.indexOf('Authorization header') !== -1) {\n message =\n 'Code Mode callback was rejected by the MCP server (HTTP ' + res.status + '). ' +\n 'The SDK route could not synthesize an Authorization header. Check the host-side ' +\n 'createMCPServer config (apiKey, getProviderToken) or pass providerTokens to the ' +\n 'AI helper. Original upstream message: ' + text;\n }\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\n// Diagnostic: log sandbox env summary to stderr so it shows up in the\n// execute_code result's stderr field for debugging auth issues.\nconsole.error('[sandbox-diag] MCP_URL=' + MCP_URL);\nconsole.error('[sandbox-diag] HAS_API_KEY=' + !!API_KEY);\nconsole.error('[sandbox-diag] HAS_SESSION_TOKEN=' + !!SESSION_TOKEN);\nconsole.error('[sandbox-diag] HAS_PROVIDER_TOKENS=' + !!PROVIDER_TOKENS);\nif (PROVIDER_TOKENS) {\n try {\n const _keys = Object.keys(JSON.parse(PROVIDER_TOKENS));\n console.error('[sandbox-diag] PROVIDER_TOKEN_KEYS=' + _keys.join(','));\n } catch { console.error('[sandbox-diag] PROVIDER_TOKENS is not valid JSON'); }\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 console.error('[sandbox-diag] callTool: ' + toolName + ' \u2192 ' + MCP_URL);\n console.error('[sandbox-diag] headers: ' + JSON.stringify({\n hasAuth: !!headers['Authorization'],\n hasApiKey: !!headers['x-integrate-api-key'],\n hasTokens: !!headers['x-integrate-tokens'],\n hasCodeMode: !!headers['x-integrate-code-mode'],\n }));\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 console.error('[sandbox-diag] response: HTTP ' + res.status + ' len=' + text.length);\n\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 let message = (payload && (payload.error || payload.message)) || 'Tool call failed: HTTP ' + res.status;\n if ((res.status === 401 || res.status === 403) && typeof text === 'string' && text.indexOf('Authorization header') !== -1) {\n message =\n 'Code Mode callback was rejected by the MCP server (HTTP ' + res.status + '). ' +\n 'The SDK route could not synthesize an Authorization header. Check the host-side ' +\n 'createMCPServer config (apiKey, getProviderToken) or pass providerTokens to the ' +\n 'AI helper. Original upstream message: ' + text;\n }\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,owHAmG/B,CAAC"}
|
|
@@ -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,EAIL,KAAK,wBAAwB,EAC9B,MAAM,eAAe,CAAC;
|
|
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,EAIL,KAAK,wBAAwB,EAC9B,MAAM,eAAe,CAAC;AAIvB,eAAO,MAAM,mBAAmB,iBAAiB,CAAC;AAClD,eAAO,MAAM,eAAe,0BAA0B,CAAC;AAEvD,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;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE;YACV,WAAW,EAAE;gBAAE,IAAI,EAAE,QAAQ,CAAC;gBAAC,WAAW,EAAE,MAAM,CAAA;aAAE,CAAC;SACtD,CAAC;QACF,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC;QAC1B,oBAAoB,EAAE,KAAK,CAAC;KAC7B,CAAC;IACF,OAAO,EAAE,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,KAAK;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACzG;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,sBAAsB,CAAC;IACjC,SAAS,EAAE,mBAAmB,CAAC;CAChC;AAaD,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,MAAM,MAAM,yBAAyB,GAAG,iBAAiB,GAAG,eAAe,CAAC;AAE5E,MAAM,MAAM,iBAAiB,GACzB;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,GACnB;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,yBAAyB,CAAA;CAAE,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACxC,MAAM,GAAG,SAAS,CAEpB;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAUzF;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAE7E;AAwBD,sEAAsE;AACtE,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,yBAAyB,GAAG,IAAI,CAI5E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,EAAE,mBAAmB,GAC3B,aAAa,CAuJf"}
|
package/dist/src/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,KAAK,EAAc,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAU9D,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAO5D;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,aAAa,SAAS,SAAS,cAAc,EAAE,IAAI,SAAS,CAAC,aAAa,CAAC,GAAG;IACxG;+HAC2H;IAC3H,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,EAAE,YAAY,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;SAAE,CAAA;KAAE,GAAG,cAAc,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;SAAE,CAAA;KAAE,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAC1O,qDAAqD;IACrD,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE;QAAE,MAAM,EAAE;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7G,oDAAoD;IACpD,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE;QAAE,MAAM,EAAE;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC7G,CAAC;AAqEF,sEAAsE;AACtE,wBAAgB,sCAAsC,IAAI,IAAI,CAE7D;AAcD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAMtH;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAY9H;AA8BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AACH,wBAAgB,eAAe,CAAC,aAAa,SAAS,SAAS,cAAc,EAAE,EAC7E,MAAM,EAAE,eAAe,CAAC,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|