integrate-sdk 0.9.4-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 +76 -16
- package/dist/adapters/index.js +76 -16
- package/dist/adapters/nextjs.js +76 -16
- package/dist/adapters/node.js +76 -16
- package/dist/adapters/svelte-kit.js +76 -16
- package/dist/adapters/tanstack-start.js +76 -16
- package/dist/ai/anthropic.d.ts +2 -2
- package/dist/ai/anthropic.d.ts.map +1 -1
- package/dist/ai/anthropic.js +45 -9
- package/dist/ai/google.d.ts +2 -2
- package/dist/ai/google.d.ts.map +1 -1
- package/dist/ai/google.js +45 -9
- package/dist/ai/index.js +51 -15
- package/dist/ai/openai.d.ts +2 -2
- package/dist/ai/openai.d.ts.map +1 -1
- package/dist/ai/openai.js +45 -9
- package/dist/ai/trigger-tools.d.ts +7 -7
- package/dist/ai/trigger-tools.js +7 -7
- 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 +45 -9
- 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 +76 -16
- package/dist/oauth.js +76 -16
- package/dist/server.js +76 -16
- 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/trigger-tools.d.ts +7 -7
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vercel-ai.d.ts","sourceRoot":"","sources":["../../../src/ai/vercel-ai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"vercel-ai.d.ts","sourceRoot":"","sources":["../../../src/ai/vercel-ai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAQpB;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACrD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,kDAAkD;IAClD,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AA+BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,oBAAoB,gCA0D/B"}
|
package/dist/ai/vercel-ai.js
CHANGED
|
@@ -4251,7 +4251,7 @@ function calculateHasMore(offset, returnedCount, total) {
|
|
|
4251
4251
|
function createTriggerTools(config, context) {
|
|
4252
4252
|
const { callbacks } = config;
|
|
4253
4253
|
return {
|
|
4254
|
-
|
|
4254
|
+
trigger_create: {
|
|
4255
4255
|
description: "Schedule a tool to run at a specific time or on a recurring schedule. Use this when the user wants to do something later.",
|
|
4256
4256
|
inputSchema: exports_external.object({
|
|
4257
4257
|
name: exports_external.string().optional().describe("Human-readable trigger name"),
|
|
@@ -4285,7 +4285,7 @@ function createTriggerTools(config, context) {
|
|
|
4285
4285
|
return callbacks.create(trigger, context);
|
|
4286
4286
|
}
|
|
4287
4287
|
},
|
|
4288
|
-
|
|
4288
|
+
trigger_list: {
|
|
4289
4289
|
description: "List all scheduled triggers with optional filtering by status or tool name",
|
|
4290
4290
|
inputSchema: exports_external.object({
|
|
4291
4291
|
status: exports_external.enum(["active", "paused", "completed", "failed"]).optional().describe("Filter by trigger status"),
|
|
@@ -4309,7 +4309,7 @@ function createTriggerTools(config, context) {
|
|
|
4309
4309
|
};
|
|
4310
4310
|
}
|
|
4311
4311
|
},
|
|
4312
|
-
|
|
4312
|
+
trigger_get: {
|
|
4313
4313
|
description: "Get details of a specific trigger by its ID",
|
|
4314
4314
|
inputSchema: exports_external.object({
|
|
4315
4315
|
triggerId: exports_external.string().describe("The trigger ID to retrieve")
|
|
@@ -4322,7 +4322,7 @@ function createTriggerTools(config, context) {
|
|
|
4322
4322
|
return trigger;
|
|
4323
4323
|
}
|
|
4324
4324
|
},
|
|
4325
|
-
|
|
4325
|
+
trigger_update: {
|
|
4326
4326
|
description: "Update a trigger's properties like name, description, arguments, or schedule",
|
|
4327
4327
|
inputSchema: exports_external.object({
|
|
4328
4328
|
triggerId: exports_external.string().describe("The trigger ID to update"),
|
|
@@ -4349,7 +4349,7 @@ function createTriggerTools(config, context) {
|
|
|
4349
4349
|
return callbacks.update(triggerId, updatesWithTimestamp, context);
|
|
4350
4350
|
}
|
|
4351
4351
|
},
|
|
4352
|
-
|
|
4352
|
+
trigger_delete: {
|
|
4353
4353
|
description: "Delete a trigger permanently. This cannot be undone.",
|
|
4354
4354
|
inputSchema: exports_external.object({
|
|
4355
4355
|
triggerId: exports_external.string().describe("The trigger ID to delete")
|
|
@@ -4359,7 +4359,7 @@ function createTriggerTools(config, context) {
|
|
|
4359
4359
|
return { success: true, message: `Trigger ${args.triggerId} deleted` };
|
|
4360
4360
|
}
|
|
4361
4361
|
},
|
|
4362
|
-
|
|
4362
|
+
trigger_pause: {
|
|
4363
4363
|
description: "Pause a trigger to temporarily stop it from executing. Can be resumed later.",
|
|
4364
4364
|
inputSchema: exports_external.object({
|
|
4365
4365
|
triggerId: exports_external.string().describe("The trigger ID to pause")
|
|
@@ -4379,7 +4379,7 @@ function createTriggerTools(config, context) {
|
|
|
4379
4379
|
}, context);
|
|
4380
4380
|
}
|
|
4381
4381
|
},
|
|
4382
|
-
|
|
4382
|
+
trigger_resume: {
|
|
4383
4383
|
description: "Resume a paused trigger to start executing it again on schedule",
|
|
4384
4384
|
inputSchema: exports_external.object({
|
|
4385
4385
|
triggerId: exports_external.string().describe("The trigger ID to resume")
|
|
@@ -4621,6 +4621,7 @@ function pascalCase(id) {
|
|
|
4621
4621
|
var RUNTIME_STUB_SOURCE = `// runtime.mjs — generated by integrate-sdk code mode
|
|
4622
4622
|
const MCP_URL = process.env.INTEGRATE_MCP_URL;
|
|
4623
4623
|
const SESSION_TOKEN = process.env.INTEGRATE_SESSION_TOKEN;
|
|
4624
|
+
const API_KEY = process.env.INTEGRATE_API_KEY || '';
|
|
4624
4625
|
const PROVIDER_TOKENS = process.env.INTEGRATE_PROVIDER_TOKENS || '';
|
|
4625
4626
|
const INTEGRATIONS_HEADER = process.env.INTEGRATE_INTEGRATIONS || '';
|
|
4626
4627
|
const CONTEXT_JSON = process.env.INTEGRATE_CONTEXT || '';
|
|
@@ -4639,6 +4640,7 @@ async function callTool(toolName, args) {
|
|
|
4639
4640
|
'x-integrate-code-mode': '1',
|
|
4640
4641
|
};
|
|
4641
4642
|
if (SESSION_TOKEN) headers['Authorization'] = 'Bearer ' + SESSION_TOKEN;
|
|
4643
|
+
if (API_KEY) headers['x-integrate-api-key'] = API_KEY;
|
|
4642
4644
|
if (PROVIDER_TOKENS) headers['x-integrate-tokens'] = PROVIDER_TOKENS;
|
|
4643
4645
|
if (INTEGRATIONS_HEADER) headers['x-integrations'] = INTEGRATIONS_HEADER;
|
|
4644
4646
|
if (CONTEXT_JSON) headers['x-integrate-context'] = CONTEXT_JSON;
|
|
@@ -4689,6 +4691,29 @@ export { callTool };
|
|
|
4689
4691
|
|
|
4690
4692
|
// ../code-mode/executor.ts
|
|
4691
4693
|
var sandboxFactoryOverride = null;
|
|
4694
|
+
var _sandboxAvailableCache = null;
|
|
4695
|
+
var _sandboxForcedUnavailableForTests = false;
|
|
4696
|
+
async function isSandboxAvailable() {
|
|
4697
|
+
if (_sandboxAvailableCache !== null)
|
|
4698
|
+
return _sandboxAvailableCache;
|
|
4699
|
+
if (_sandboxForcedUnavailableForTests) {
|
|
4700
|
+
_sandboxAvailableCache = false;
|
|
4701
|
+
return false;
|
|
4702
|
+
}
|
|
4703
|
+
if (sandboxFactoryOverride) {
|
|
4704
|
+
_sandboxAvailableCache = true;
|
|
4705
|
+
return true;
|
|
4706
|
+
}
|
|
4707
|
+
try {
|
|
4708
|
+
const dynamicImport = new Function("specifier", "return import(specifier)");
|
|
4709
|
+
await dynamicImport("@" + "vercel/sandbox");
|
|
4710
|
+
_sandboxAvailableCache = true;
|
|
4711
|
+
return true;
|
|
4712
|
+
} catch {
|
|
4713
|
+
_sandboxAvailableCache = false;
|
|
4714
|
+
return false;
|
|
4715
|
+
}
|
|
4716
|
+
}
|
|
4692
4717
|
async function loadSandboxFactory() {
|
|
4693
4718
|
if (sandboxFactoryOverride)
|
|
4694
4719
|
return sandboxFactoryOverride;
|
|
@@ -4775,6 +4800,8 @@ async function executeSandboxCode(options) {
|
|
|
4775
4800
|
const env = {
|
|
4776
4801
|
INTEGRATE_MCP_URL: options.mcpUrl
|
|
4777
4802
|
};
|
|
4803
|
+
if (options.apiKey)
|
|
4804
|
+
env.INTEGRATE_API_KEY = options.apiKey;
|
|
4778
4805
|
if (options.sessionToken)
|
|
4779
4806
|
env.INTEGRATE_SESSION_TOKEN = options.sessionToken;
|
|
4780
4807
|
if (options.providerTokens && Object.keys(options.providerTokens).length > 0) {
|
|
@@ -4866,6 +4893,13 @@ function resolveCodeModeClientConfig(client) {
|
|
|
4866
4893
|
const oauthConfig = client.__oauthConfig;
|
|
4867
4894
|
return oauthConfig?.codeMode ?? {};
|
|
4868
4895
|
}
|
|
4896
|
+
async function canUseCodeMode(client) {
|
|
4897
|
+
if (!await isSandboxAvailable())
|
|
4898
|
+
return false;
|
|
4899
|
+
const serverConfig = resolveCodeModeClientConfig(client);
|
|
4900
|
+
const publicUrl = serverConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
|
|
4901
|
+
return !!publicUrl;
|
|
4902
|
+
}
|
|
4869
4903
|
function buildCodeModeTool(client, options) {
|
|
4870
4904
|
const { tools, providerTokens, context, integrationIds } = options;
|
|
4871
4905
|
const generated = generateCodeModeTypes(tools);
|
|
@@ -4878,6 +4912,7 @@ ${generated.source}
|
|
|
4878
4912
|
\`\`\``;
|
|
4879
4913
|
const execute = async ({ code }) => {
|
|
4880
4914
|
const publicUrl = sandboxOverrides.publicUrl ?? serverCodeModeConfig.publicUrl ?? getEnv("INTEGRATE_PUBLIC_URL");
|
|
4915
|
+
const apiKey = client.__oauthConfig?.apiKey;
|
|
4881
4916
|
if (!publicUrl) {
|
|
4882
4917
|
return {
|
|
4883
4918
|
success: false,
|
|
@@ -4892,6 +4927,7 @@ ${generated.source}
|
|
|
4892
4927
|
return executeSandboxCode({
|
|
4893
4928
|
code,
|
|
4894
4929
|
mcpUrl,
|
|
4930
|
+
apiKey,
|
|
4895
4931
|
providerTokens,
|
|
4896
4932
|
context,
|
|
4897
4933
|
integrationsHeader: integrationIds && integrationIds.length > 0 ? integrationIds.join(",") : undefined,
|
|
@@ -4943,8 +4979,8 @@ async function getVercelAITools(client, options) {
|
|
|
4943
4979
|
await ensureClientConnected(client);
|
|
4944
4980
|
const mcpTools = await client.getEnabledToolsAsync();
|
|
4945
4981
|
const vercelTools = {};
|
|
4946
|
-
const
|
|
4947
|
-
if (
|
|
4982
|
+
const effectiveMode = options?.mode !== undefined ? options.mode : await canUseCodeMode(client) ? "code" : "tools";
|
|
4983
|
+
if (effectiveMode === "code") {
|
|
4948
4984
|
const codeTool = buildCodeModeTool(client, {
|
|
4949
4985
|
tools: mcpTools,
|
|
4950
4986
|
providerTokens,
|
|
@@ -43,11 +43,16 @@ interface SandboxFactory {
|
|
|
43
43
|
}
|
|
44
44
|
/** @internal — used by unit tests to stub the sandbox SDK. */
|
|
45
45
|
export declare function __setSandboxFactoryForTests(factory: SandboxFactory | null): void;
|
|
46
|
+
/** @internal — used by unit tests to simulate missing @vercel/sandbox. */
|
|
47
|
+
export declare function __setSandboxUnavailableForTests(force: boolean): void;
|
|
48
|
+
export declare function isSandboxAvailable(): Promise<boolean>;
|
|
46
49
|
export interface ExecuteSandboxCodeOptions {
|
|
47
50
|
/** Source code the LLM produced. Treated as an async function body. */
|
|
48
51
|
code: string;
|
|
49
52
|
/** Fully-qualified MCP route URL, e.g. `https://myapp.com/api/integrate/mcp`. */
|
|
50
53
|
mcpUrl: string;
|
|
54
|
+
/** Server API key forwarded to trusted sandbox callbacks. */
|
|
55
|
+
apiKey?: string;
|
|
51
56
|
/** Session token forwarded as `Authorization: Bearer <token>` by the stub. */
|
|
52
57
|
sessionToken?: string;
|
|
53
58
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/code-mode/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD;;;;GAIG;AACH,UAAU,WAAW;IACnB,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,UAAU,CACR,MAAM,EAAE;QACN,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,GACA,OAAO,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;KAC3B,CAAC,CAAC;IACH,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1B;AAED,UAAU,cAAc;IACtB,MAAM,CAAC,OAAO,EAAE;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAC1B;
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/code-mode/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD;;;;GAIG;AACH,UAAU,WAAW;IACnB,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,UAAU,CACR,MAAM,EAAE;QACN,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,GACA,OAAO,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;KAC3B,CAAC,CAAC;IACH,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1B;AAED,UAAU,cAAc;IACtB,MAAM,CAAC,OAAO,EAAE;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAC1B;AAUD,8DAA8D;AAC9D,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAIhF;AAED,0EAA0E;AAC1E,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAGpE;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAmB3D;AAkBD,MAAM,WAAW,yBAAyB;IACxC,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,uEAAuE;IACvE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,8EAA8E;IAC9E,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,qDAAqD;IACrD,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC9B,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,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;AAED,MAAM,WAAW,wBAAwB;IACvC,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAC;IACjB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA4DD;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAsE9G"}
|
|
@@ -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;
|
|
@@ -70,8 +72,37 @@ export { callTool };
|
|
|
70
72
|
|
|
71
73
|
// executor.ts
|
|
72
74
|
var sandboxFactoryOverride = null;
|
|
75
|
+
var _sandboxAvailableCache = null;
|
|
76
|
+
var _sandboxForcedUnavailableForTests = false;
|
|
73
77
|
function __setSandboxFactoryForTests(factory) {
|
|
74
78
|
sandboxFactoryOverride = factory;
|
|
79
|
+
_sandboxForcedUnavailableForTests = false;
|
|
80
|
+
_sandboxAvailableCache = null;
|
|
81
|
+
}
|
|
82
|
+
function __setSandboxUnavailableForTests(force) {
|
|
83
|
+
_sandboxForcedUnavailableForTests = force;
|
|
84
|
+
_sandboxAvailableCache = null;
|
|
85
|
+
}
|
|
86
|
+
async function isSandboxAvailable() {
|
|
87
|
+
if (_sandboxAvailableCache !== null)
|
|
88
|
+
return _sandboxAvailableCache;
|
|
89
|
+
if (_sandboxForcedUnavailableForTests) {
|
|
90
|
+
_sandboxAvailableCache = false;
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
if (sandboxFactoryOverride) {
|
|
94
|
+
_sandboxAvailableCache = true;
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
const dynamicImport = new Function("specifier", "return import(specifier)");
|
|
99
|
+
await dynamicImport("@" + "vercel/sandbox");
|
|
100
|
+
_sandboxAvailableCache = true;
|
|
101
|
+
return true;
|
|
102
|
+
} catch {
|
|
103
|
+
_sandboxAvailableCache = false;
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
75
106
|
}
|
|
76
107
|
async function loadSandboxFactory() {
|
|
77
108
|
if (sandboxFactoryOverride)
|
|
@@ -159,6 +190,8 @@ async function executeSandboxCode(options) {
|
|
|
159
190
|
const env = {
|
|
160
191
|
INTEGRATE_MCP_URL: options.mcpUrl
|
|
161
192
|
};
|
|
193
|
+
if (options.apiKey)
|
|
194
|
+
env.INTEGRATE_API_KEY = options.apiKey;
|
|
162
195
|
if (options.sessionToken)
|
|
163
196
|
env.INTEGRATE_SESSION_TOKEN = options.sessionToken;
|
|
164
197
|
if (options.providerTokens && Object.keys(options.providerTokens).length > 0) {
|
|
@@ -202,6 +235,8 @@ async function executeSandboxCode(options) {
|
|
|
202
235
|
}
|
|
203
236
|
}
|
|
204
237
|
export {
|
|
238
|
+
isSandboxAvailable,
|
|
205
239
|
executeSandboxCode,
|
|
240
|
+
__setSandboxUnavailableForTests,
|
|
206
241
|
__setSandboxFactoryForTests
|
|
207
242
|
};
|
|
@@ -8,5 +8,5 @@
|
|
|
8
8
|
export { generateCodeModeTypes, type GeneratedTypes, } from "./type-generator.js";
|
|
9
9
|
export { executeSandboxCode, __setSandboxFactoryForTests, type ExecuteSandboxCodeOptions, type ExecuteSandboxCodeResult, } from "./executor.js";
|
|
10
10
|
export { RUNTIME_STUB_SOURCE } from "./runtime-stub.js";
|
|
11
|
-
export { buildCodeModeTool, CODE_MODE_TOOL_NAME, type CodeModeToolOptions, type CodeModeToolDefinition, } from "./tool-builder.js";
|
|
11
|
+
export { buildCodeModeTool, canUseCodeMode, CODE_MODE_TOOL_NAME, type CodeModeToolOptions, type CodeModeToolDefinition, } from "./tool-builder.js";
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/code-mode/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,qBAAqB,EACrB,KAAK,cAAc,GACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,GAC9B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,GAC5B,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/code-mode/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,qBAAqB,EACrB,KAAK,cAAc,GACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,GAC9B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,GAC5B,MAAM,mBAAmB,CAAC"}
|
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
|
};
|