integrate-sdk 0.8.23 → 0.8.26
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 +47 -7
- package/dist/adapters/base-handler.d.ts +5 -0
- package/dist/adapters/base-handler.d.ts.map +1 -1
- package/dist/adapters/index.js +47 -7
- package/dist/adapters/nextjs.d.ts.map +1 -1
- package/dist/adapters/nextjs.js +47 -7
- package/dist/adapters/node.js +47 -7
- package/dist/adapters/svelte-kit.js +47 -7
- package/dist/adapters/tanstack-start.js +47 -7
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +48 -9
- package/dist/oauth.js +47 -7
- package/dist/server.js +47 -7
- package/dist/src/adapters/base-handler.d.ts +5 -0
- package/dist/src/adapters/base-handler.d.ts.map +1 -1
- package/dist/src/adapters/nextjs.d.ts.map +1 -1
- package/dist/src/client.d.ts +1 -0
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/config/types.d.ts +0 -19
- package/dist/src/config/types.d.ts.map +1 -1
- package/dist/src/oauth/manager.d.ts +5 -1
- package/dist/src/oauth/manager.d.ts.map +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/index.ts +2 -6
- package/package.json +1 -1
|
@@ -651,7 +651,7 @@ class OAuthManager {
|
|
|
651
651
|
this.getTokenCallback = tokenCallbacks?.getProviderToken;
|
|
652
652
|
this.setTokenCallback = tokenCallbacks?.setProviderToken;
|
|
653
653
|
this.removeTokenCallback = tokenCallbacks?.removeProviderToken;
|
|
654
|
-
this.skipLocalStorage = tokenCallbacks?.
|
|
654
|
+
this.skipLocalStorage = !!(tokenCallbacks?.getProviderToken || tokenCallbacks?.setProviderToken);
|
|
655
655
|
this.cleanupExpiredPendingAuths();
|
|
656
656
|
}
|
|
657
657
|
async initiateFlow(provider, config, returnUrl) {
|
|
@@ -930,6 +930,9 @@ class OAuthManager {
|
|
|
930
930
|
if (this.getTokenCallback) {
|
|
931
931
|
return;
|
|
932
932
|
}
|
|
933
|
+
if (this.skipLocalStorage) {
|
|
934
|
+
return;
|
|
935
|
+
}
|
|
933
936
|
if (typeof window !== "undefined" && window.localStorage) {
|
|
934
937
|
try {
|
|
935
938
|
const key = `integrate_token_${provider}`;
|
|
@@ -1046,6 +1049,9 @@ class OAuthManager {
|
|
|
1046
1049
|
frontendOrigin: this.apiBaseUrl && this.flowConfig.mode === "redirect" && typeof window !== "undefined" ? window.location.origin : undefined
|
|
1047
1050
|
})
|
|
1048
1051
|
});
|
|
1052
|
+
if (response.headers.get("X-Integrate-Use-Database") === "true") {
|
|
1053
|
+
this.skipLocalStorage = true;
|
|
1054
|
+
}
|
|
1049
1055
|
if (!response.ok) {
|
|
1050
1056
|
const error = await response.text();
|
|
1051
1057
|
throw new Error(`Failed to get authorization URL: ${error}`);
|
|
@@ -1077,6 +1083,9 @@ class OAuthManager {
|
|
|
1077
1083
|
state
|
|
1078
1084
|
})
|
|
1079
1085
|
});
|
|
1086
|
+
if (response.headers.get("X-Integrate-Use-Database") === "true") {
|
|
1087
|
+
this.skipLocalStorage = true;
|
|
1088
|
+
}
|
|
1080
1089
|
if (!response.ok) {
|
|
1081
1090
|
const error = await response.text();
|
|
1082
1091
|
throw new Error(`Failed to exchange code for token: ${error}`);
|
|
@@ -1084,6 +1093,9 @@ class OAuthManager {
|
|
|
1084
1093
|
const data = await response.json();
|
|
1085
1094
|
return data;
|
|
1086
1095
|
}
|
|
1096
|
+
setSkipLocalStorage(value) {
|
|
1097
|
+
this.skipLocalStorage = value;
|
|
1098
|
+
}
|
|
1087
1099
|
close() {
|
|
1088
1100
|
this.windowManager.close();
|
|
1089
1101
|
}
|
|
@@ -1140,6 +1152,7 @@ class MCPClientBase {
|
|
|
1140
1152
|
eventEmitter = new SimpleEventEmitter;
|
|
1141
1153
|
apiRouteBase;
|
|
1142
1154
|
apiBaseUrl;
|
|
1155
|
+
databaseDetected = false;
|
|
1143
1156
|
oauthCallbackPromise;
|
|
1144
1157
|
server;
|
|
1145
1158
|
constructor(config) {
|
|
@@ -1173,8 +1186,7 @@ class MCPClientBase {
|
|
|
1173
1186
|
this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow, this.apiBaseUrl, {
|
|
1174
1187
|
getProviderToken: config.getProviderToken,
|
|
1175
1188
|
setProviderToken: config.setProviderToken,
|
|
1176
|
-
removeProviderToken: config.removeProviderToken
|
|
1177
|
-
skipLocalStorage: config.skipLocalStorage
|
|
1189
|
+
removeProviderToken: config.removeProviderToken
|
|
1178
1190
|
});
|
|
1179
1191
|
for (const integration of this.integrations) {
|
|
1180
1192
|
for (const toolName of integration.tools) {
|
|
@@ -1384,6 +1396,10 @@ class MCPClientBase {
|
|
|
1384
1396
|
arguments: args
|
|
1385
1397
|
})
|
|
1386
1398
|
});
|
|
1399
|
+
if (!this.databaseDetected && response.headers.get("X-Integrate-Use-Database") === "true") {
|
|
1400
|
+
this.oauthManager.setSkipLocalStorage(true);
|
|
1401
|
+
this.databaseDetected = true;
|
|
1402
|
+
}
|
|
1387
1403
|
if (!response.ok) {
|
|
1388
1404
|
let errorMessage = `Request failed: ${response.statusText}`;
|
|
1389
1405
|
const error = new Error(errorMessage);
|
|
@@ -6556,10 +6572,17 @@ function createMCPServer(config) {
|
|
|
6556
6572
|
const oauthHandler = new OAuthHandler({
|
|
6557
6573
|
providers,
|
|
6558
6574
|
serverUrl: config.serverUrl,
|
|
6559
|
-
apiKey: config.apiKey
|
|
6575
|
+
apiKey: config.apiKey,
|
|
6576
|
+
setProviderToken: config.setProviderToken,
|
|
6577
|
+
removeProviderToken: config.removeProviderToken,
|
|
6578
|
+
getSessionContext: config.getSessionContext
|
|
6560
6579
|
});
|
|
6561
6580
|
const result = await oauthHandler.handleToolCall(body, authHeader);
|
|
6562
|
-
|
|
6581
|
+
const response2 = Response.json(result);
|
|
6582
|
+
if (oauthHandler.hasDatabaseCallbacks()) {
|
|
6583
|
+
response2.headers.set("X-Integrate-Use-Database", "true");
|
|
6584
|
+
}
|
|
6585
|
+
return response2;
|
|
6563
6586
|
} catch (error) {
|
|
6564
6587
|
console.error("[MCP Tool Call] Error:", error);
|
|
6565
6588
|
return Response.json({ error: error.message || "Failed to execute tool call" }, { status: error.statusCode || 500 });
|
|
@@ -7215,6 +7238,9 @@ class OAuthHandler {
|
|
|
7215
7238
|
}
|
|
7216
7239
|
return headers;
|
|
7217
7240
|
}
|
|
7241
|
+
hasDatabaseCallbacks() {
|
|
7242
|
+
return !!this.config.setProviderToken;
|
|
7243
|
+
}
|
|
7218
7244
|
async handleAuthorize(request) {
|
|
7219
7245
|
let webRequest;
|
|
7220
7246
|
let authorizeRequest;
|
|
@@ -7495,6 +7521,9 @@ function createNextOAuthHandler(config) {
|
|
|
7495
7521
|
if (result.setCookie) {
|
|
7496
7522
|
response.headers.set("Set-Cookie", result.setCookie);
|
|
7497
7523
|
}
|
|
7524
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
7525
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
7526
|
+
}
|
|
7498
7527
|
return response;
|
|
7499
7528
|
} catch (error) {
|
|
7500
7529
|
console.error("[OAuth Authorize] Error:", error);
|
|
@@ -7508,6 +7537,9 @@ function createNextOAuthHandler(config) {
|
|
|
7508
7537
|
if (result.clearCookie) {
|
|
7509
7538
|
response.headers.set("Set-Cookie", result.clearCookie);
|
|
7510
7539
|
}
|
|
7540
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
7541
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
7542
|
+
}
|
|
7511
7543
|
return response;
|
|
7512
7544
|
} catch (error) {
|
|
7513
7545
|
console.error("[OAuth Callback] Error:", error);
|
|
@@ -7526,7 +7558,11 @@ function createNextOAuthHandler(config) {
|
|
|
7526
7558
|
}
|
|
7527
7559
|
const accessToken = authHeader.substring(7);
|
|
7528
7560
|
const result = await handler.handleStatus(provider, accessToken);
|
|
7529
|
-
|
|
7561
|
+
const response = Response.json(result);
|
|
7562
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
7563
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
7564
|
+
}
|
|
7565
|
+
return response;
|
|
7530
7566
|
} catch (error) {
|
|
7531
7567
|
console.error("[OAuth Status] Error:", error);
|
|
7532
7568
|
return Response.json({ error: error.message || "Failed to check authorization status" }, { status: 500 });
|
|
@@ -7545,7 +7581,11 @@ function createNextOAuthHandler(config) {
|
|
|
7545
7581
|
return Response.json({ error: "Missing provider in request body" }, { status: 400 });
|
|
7546
7582
|
}
|
|
7547
7583
|
const result = await handler.handleDisconnect({ provider }, accessToken, req);
|
|
7548
|
-
|
|
7584
|
+
const response = Response.json(result);
|
|
7585
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
7586
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
7587
|
+
}
|
|
7588
|
+
return response;
|
|
7549
7589
|
} catch (error) {
|
|
7550
7590
|
console.error("[OAuth Disconnect] Error:", error);
|
|
7551
7591
|
return Response.json({ error: error.message || "Failed to disconnect provider" }, { status: 500 });
|
|
@@ -192,6 +192,11 @@ export declare class OAuthHandler {
|
|
|
192
192
|
* Get headers with API key if configured
|
|
193
193
|
*/
|
|
194
194
|
private getHeaders;
|
|
195
|
+
/**
|
|
196
|
+
* Check if database callbacks are configured
|
|
197
|
+
* Used to determine if we should set X-Integrate-Use-Database header
|
|
198
|
+
*/
|
|
199
|
+
hasDatabaseCallbacks(): boolean;
|
|
195
200
|
/**
|
|
196
201
|
* Handle authorization URL request
|
|
197
202
|
* Gets authorization URL from MCP server with full OAuth credentials
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-handler.d.ts","sourceRoot":"","sources":["../../../src/adapters/base-handler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"base-handler.d.ts","sourceRoot":"","sources":["../../../src/adapters/base-handler.ts"],"names":[],"mappings":"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"}
|
package/dist/adapters/index.js
CHANGED
|
@@ -651,7 +651,7 @@ class OAuthManager {
|
|
|
651
651
|
this.getTokenCallback = tokenCallbacks?.getProviderToken;
|
|
652
652
|
this.setTokenCallback = tokenCallbacks?.setProviderToken;
|
|
653
653
|
this.removeTokenCallback = tokenCallbacks?.removeProviderToken;
|
|
654
|
-
this.skipLocalStorage = tokenCallbacks?.
|
|
654
|
+
this.skipLocalStorage = !!(tokenCallbacks?.getProviderToken || tokenCallbacks?.setProviderToken);
|
|
655
655
|
this.cleanupExpiredPendingAuths();
|
|
656
656
|
}
|
|
657
657
|
async initiateFlow(provider, config, returnUrl) {
|
|
@@ -930,6 +930,9 @@ class OAuthManager {
|
|
|
930
930
|
if (this.getTokenCallback) {
|
|
931
931
|
return;
|
|
932
932
|
}
|
|
933
|
+
if (this.skipLocalStorage) {
|
|
934
|
+
return;
|
|
935
|
+
}
|
|
933
936
|
if (typeof window !== "undefined" && window.localStorage) {
|
|
934
937
|
try {
|
|
935
938
|
const key = `integrate_token_${provider}`;
|
|
@@ -1046,6 +1049,9 @@ class OAuthManager {
|
|
|
1046
1049
|
frontendOrigin: this.apiBaseUrl && this.flowConfig.mode === "redirect" && typeof window !== "undefined" ? window.location.origin : undefined
|
|
1047
1050
|
})
|
|
1048
1051
|
});
|
|
1052
|
+
if (response.headers.get("X-Integrate-Use-Database") === "true") {
|
|
1053
|
+
this.skipLocalStorage = true;
|
|
1054
|
+
}
|
|
1049
1055
|
if (!response.ok) {
|
|
1050
1056
|
const error = await response.text();
|
|
1051
1057
|
throw new Error(`Failed to get authorization URL: ${error}`);
|
|
@@ -1077,6 +1083,9 @@ class OAuthManager {
|
|
|
1077
1083
|
state
|
|
1078
1084
|
})
|
|
1079
1085
|
});
|
|
1086
|
+
if (response.headers.get("X-Integrate-Use-Database") === "true") {
|
|
1087
|
+
this.skipLocalStorage = true;
|
|
1088
|
+
}
|
|
1080
1089
|
if (!response.ok) {
|
|
1081
1090
|
const error = await response.text();
|
|
1082
1091
|
throw new Error(`Failed to exchange code for token: ${error}`);
|
|
@@ -1084,6 +1093,9 @@ class OAuthManager {
|
|
|
1084
1093
|
const data = await response.json();
|
|
1085
1094
|
return data;
|
|
1086
1095
|
}
|
|
1096
|
+
setSkipLocalStorage(value) {
|
|
1097
|
+
this.skipLocalStorage = value;
|
|
1098
|
+
}
|
|
1087
1099
|
close() {
|
|
1088
1100
|
this.windowManager.close();
|
|
1089
1101
|
}
|
|
@@ -1140,6 +1152,7 @@ class MCPClientBase {
|
|
|
1140
1152
|
eventEmitter = new SimpleEventEmitter;
|
|
1141
1153
|
apiRouteBase;
|
|
1142
1154
|
apiBaseUrl;
|
|
1155
|
+
databaseDetected = false;
|
|
1143
1156
|
oauthCallbackPromise;
|
|
1144
1157
|
server;
|
|
1145
1158
|
constructor(config) {
|
|
@@ -1173,8 +1186,7 @@ class MCPClientBase {
|
|
|
1173
1186
|
this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow, this.apiBaseUrl, {
|
|
1174
1187
|
getProviderToken: config.getProviderToken,
|
|
1175
1188
|
setProviderToken: config.setProviderToken,
|
|
1176
|
-
removeProviderToken: config.removeProviderToken
|
|
1177
|
-
skipLocalStorage: config.skipLocalStorage
|
|
1189
|
+
removeProviderToken: config.removeProviderToken
|
|
1178
1190
|
});
|
|
1179
1191
|
for (const integration of this.integrations) {
|
|
1180
1192
|
for (const toolName of integration.tools) {
|
|
@@ -1384,6 +1396,10 @@ class MCPClientBase {
|
|
|
1384
1396
|
arguments: args
|
|
1385
1397
|
})
|
|
1386
1398
|
});
|
|
1399
|
+
if (!this.databaseDetected && response.headers.get("X-Integrate-Use-Database") === "true") {
|
|
1400
|
+
this.oauthManager.setSkipLocalStorage(true);
|
|
1401
|
+
this.databaseDetected = true;
|
|
1402
|
+
}
|
|
1387
1403
|
if (!response.ok) {
|
|
1388
1404
|
let errorMessage = `Request failed: ${response.statusText}`;
|
|
1389
1405
|
const error = new Error(errorMessage);
|
|
@@ -6556,10 +6572,17 @@ function createMCPServer(config) {
|
|
|
6556
6572
|
const oauthHandler = new OAuthHandler({
|
|
6557
6573
|
providers,
|
|
6558
6574
|
serverUrl: config.serverUrl,
|
|
6559
|
-
apiKey: config.apiKey
|
|
6575
|
+
apiKey: config.apiKey,
|
|
6576
|
+
setProviderToken: config.setProviderToken,
|
|
6577
|
+
removeProviderToken: config.removeProviderToken,
|
|
6578
|
+
getSessionContext: config.getSessionContext
|
|
6560
6579
|
});
|
|
6561
6580
|
const result = await oauthHandler.handleToolCall(body, authHeader);
|
|
6562
|
-
|
|
6581
|
+
const response2 = Response.json(result);
|
|
6582
|
+
if (oauthHandler.hasDatabaseCallbacks()) {
|
|
6583
|
+
response2.headers.set("X-Integrate-Use-Database", "true");
|
|
6584
|
+
}
|
|
6585
|
+
return response2;
|
|
6563
6586
|
} catch (error) {
|
|
6564
6587
|
console.error("[MCP Tool Call] Error:", error);
|
|
6565
6588
|
return Response.json({ error: error.message || "Failed to execute tool call" }, { status: error.statusCode || 500 });
|
|
@@ -7215,6 +7238,9 @@ class OAuthHandler {
|
|
|
7215
7238
|
}
|
|
7216
7239
|
return headers;
|
|
7217
7240
|
}
|
|
7241
|
+
hasDatabaseCallbacks() {
|
|
7242
|
+
return !!this.config.setProviderToken;
|
|
7243
|
+
}
|
|
7218
7244
|
async handleAuthorize(request) {
|
|
7219
7245
|
let webRequest;
|
|
7220
7246
|
let authorizeRequest;
|
|
@@ -7495,6 +7521,9 @@ function createNextOAuthHandler(config) {
|
|
|
7495
7521
|
if (result.setCookie) {
|
|
7496
7522
|
response.headers.set("Set-Cookie", result.setCookie);
|
|
7497
7523
|
}
|
|
7524
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
7525
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
7526
|
+
}
|
|
7498
7527
|
return response;
|
|
7499
7528
|
} catch (error) {
|
|
7500
7529
|
console.error("[OAuth Authorize] Error:", error);
|
|
@@ -7508,6 +7537,9 @@ function createNextOAuthHandler(config) {
|
|
|
7508
7537
|
if (result.clearCookie) {
|
|
7509
7538
|
response.headers.set("Set-Cookie", result.clearCookie);
|
|
7510
7539
|
}
|
|
7540
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
7541
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
7542
|
+
}
|
|
7511
7543
|
return response;
|
|
7512
7544
|
} catch (error) {
|
|
7513
7545
|
console.error("[OAuth Callback] Error:", error);
|
|
@@ -7526,7 +7558,11 @@ function createNextOAuthHandler(config) {
|
|
|
7526
7558
|
}
|
|
7527
7559
|
const accessToken = authHeader.substring(7);
|
|
7528
7560
|
const result = await handler.handleStatus(provider, accessToken);
|
|
7529
|
-
|
|
7561
|
+
const response = Response.json(result);
|
|
7562
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
7563
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
7564
|
+
}
|
|
7565
|
+
return response;
|
|
7530
7566
|
} catch (error) {
|
|
7531
7567
|
console.error("[OAuth Status] Error:", error);
|
|
7532
7568
|
return Response.json({ error: error.message || "Failed to check authorization status" }, { status: 500 });
|
|
@@ -7545,7 +7581,11 @@ function createNextOAuthHandler(config) {
|
|
|
7545
7581
|
return Response.json({ error: "Missing provider in request body" }, { status: 400 });
|
|
7546
7582
|
}
|
|
7547
7583
|
const result = await handler.handleDisconnect({ provider }, accessToken, req);
|
|
7548
|
-
|
|
7584
|
+
const response = Response.json(result);
|
|
7585
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
7586
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
7587
|
+
}
|
|
7588
|
+
return response;
|
|
7549
7589
|
} catch (error) {
|
|
7550
7590
|
console.error("[OAuth Disconnect] Error:", error);
|
|
7551
7591
|
return Response.json({ error: error.message || "Failed to disconnect provider" }, { status: 500 });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../../src/adapters/nextjs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG1E,KAAK,WAAW,GAAG,GAAG,CAAC;AACvB,KAAK,YAAY,GAAG,GAAG,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB;IAI7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCG;mBACkB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../../src/adapters/nextjs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG1E,KAAK,WAAW,GAAG,GAAG,CAAC;AACvB,KAAK,YAAY,GAAG,GAAG,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB;IAI7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCG;mBACkB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;kBACiB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;gBACe,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAsCrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuCG;oBACmB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAyCzD;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;;QAGC;;WAEG;kBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,GACpE,OAAO,CAAC,YAAY,CAAC;QA2BxB;;WAEG;iBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,GACpE,OAAO,CAAC,YAAY,CAAC;;IAiB5B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;aACY,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAelD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;qCAC8B;QAC/B,6DAA6D;QAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iEAAiE;QACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B;QAKG;;WAEG;kBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,GAAG,EAAE,MAAM,EAAE,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,GAAG,EAAE,MAAM,EAAE,CAAA;aAAE,CAAC,CAAA;SAAE,GAClE,OAAO,CAAC,YAAY,CAAC;QAsCxB;;WAEG;iBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,GAAG,EAAE,MAAM,EAAE,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,GAAG,EAAE,MAAM,EAAE,CAAA;aAAE,CAAC,CAAA;SAAE,GAClE,OAAO,CAAC,YAAY,CAAC;;EA+F/B"}
|
package/dist/adapters/nextjs.js
CHANGED
|
@@ -651,7 +651,7 @@ class OAuthManager {
|
|
|
651
651
|
this.getTokenCallback = tokenCallbacks?.getProviderToken;
|
|
652
652
|
this.setTokenCallback = tokenCallbacks?.setProviderToken;
|
|
653
653
|
this.removeTokenCallback = tokenCallbacks?.removeProviderToken;
|
|
654
|
-
this.skipLocalStorage = tokenCallbacks?.
|
|
654
|
+
this.skipLocalStorage = !!(tokenCallbacks?.getProviderToken || tokenCallbacks?.setProviderToken);
|
|
655
655
|
this.cleanupExpiredPendingAuths();
|
|
656
656
|
}
|
|
657
657
|
async initiateFlow(provider, config, returnUrl) {
|
|
@@ -930,6 +930,9 @@ class OAuthManager {
|
|
|
930
930
|
if (this.getTokenCallback) {
|
|
931
931
|
return;
|
|
932
932
|
}
|
|
933
|
+
if (this.skipLocalStorage) {
|
|
934
|
+
return;
|
|
935
|
+
}
|
|
933
936
|
if (typeof window !== "undefined" && window.localStorage) {
|
|
934
937
|
try {
|
|
935
938
|
const key = `integrate_token_${provider}`;
|
|
@@ -1046,6 +1049,9 @@ class OAuthManager {
|
|
|
1046
1049
|
frontendOrigin: this.apiBaseUrl && this.flowConfig.mode === "redirect" && typeof window !== "undefined" ? window.location.origin : undefined
|
|
1047
1050
|
})
|
|
1048
1051
|
});
|
|
1052
|
+
if (response.headers.get("X-Integrate-Use-Database") === "true") {
|
|
1053
|
+
this.skipLocalStorage = true;
|
|
1054
|
+
}
|
|
1049
1055
|
if (!response.ok) {
|
|
1050
1056
|
const error = await response.text();
|
|
1051
1057
|
throw new Error(`Failed to get authorization URL: ${error}`);
|
|
@@ -1077,6 +1083,9 @@ class OAuthManager {
|
|
|
1077
1083
|
state
|
|
1078
1084
|
})
|
|
1079
1085
|
});
|
|
1086
|
+
if (response.headers.get("X-Integrate-Use-Database") === "true") {
|
|
1087
|
+
this.skipLocalStorage = true;
|
|
1088
|
+
}
|
|
1080
1089
|
if (!response.ok) {
|
|
1081
1090
|
const error = await response.text();
|
|
1082
1091
|
throw new Error(`Failed to exchange code for token: ${error}`);
|
|
@@ -1084,6 +1093,9 @@ class OAuthManager {
|
|
|
1084
1093
|
const data = await response.json();
|
|
1085
1094
|
return data;
|
|
1086
1095
|
}
|
|
1096
|
+
setSkipLocalStorage(value) {
|
|
1097
|
+
this.skipLocalStorage = value;
|
|
1098
|
+
}
|
|
1087
1099
|
close() {
|
|
1088
1100
|
this.windowManager.close();
|
|
1089
1101
|
}
|
|
@@ -1140,6 +1152,7 @@ class MCPClientBase {
|
|
|
1140
1152
|
eventEmitter = new SimpleEventEmitter;
|
|
1141
1153
|
apiRouteBase;
|
|
1142
1154
|
apiBaseUrl;
|
|
1155
|
+
databaseDetected = false;
|
|
1143
1156
|
oauthCallbackPromise;
|
|
1144
1157
|
server;
|
|
1145
1158
|
constructor(config) {
|
|
@@ -1173,8 +1186,7 @@ class MCPClientBase {
|
|
|
1173
1186
|
this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow, this.apiBaseUrl, {
|
|
1174
1187
|
getProviderToken: config.getProviderToken,
|
|
1175
1188
|
setProviderToken: config.setProviderToken,
|
|
1176
|
-
removeProviderToken: config.removeProviderToken
|
|
1177
|
-
skipLocalStorage: config.skipLocalStorage
|
|
1189
|
+
removeProviderToken: config.removeProviderToken
|
|
1178
1190
|
});
|
|
1179
1191
|
for (const integration of this.integrations) {
|
|
1180
1192
|
for (const toolName of integration.tools) {
|
|
@@ -1384,6 +1396,10 @@ class MCPClientBase {
|
|
|
1384
1396
|
arguments: args
|
|
1385
1397
|
})
|
|
1386
1398
|
});
|
|
1399
|
+
if (!this.databaseDetected && response.headers.get("X-Integrate-Use-Database") === "true") {
|
|
1400
|
+
this.oauthManager.setSkipLocalStorage(true);
|
|
1401
|
+
this.databaseDetected = true;
|
|
1402
|
+
}
|
|
1387
1403
|
if (!response.ok) {
|
|
1388
1404
|
let errorMessage = `Request failed: ${response.statusText}`;
|
|
1389
1405
|
const error = new Error(errorMessage);
|
|
@@ -6556,10 +6572,17 @@ function createMCPServer(config) {
|
|
|
6556
6572
|
const oauthHandler = new OAuthHandler({
|
|
6557
6573
|
providers,
|
|
6558
6574
|
serverUrl: config.serverUrl,
|
|
6559
|
-
apiKey: config.apiKey
|
|
6575
|
+
apiKey: config.apiKey,
|
|
6576
|
+
setProviderToken: config.setProviderToken,
|
|
6577
|
+
removeProviderToken: config.removeProviderToken,
|
|
6578
|
+
getSessionContext: config.getSessionContext
|
|
6560
6579
|
});
|
|
6561
6580
|
const result = await oauthHandler.handleToolCall(body, authHeader);
|
|
6562
|
-
|
|
6581
|
+
const response2 = Response.json(result);
|
|
6582
|
+
if (oauthHandler.hasDatabaseCallbacks()) {
|
|
6583
|
+
response2.headers.set("X-Integrate-Use-Database", "true");
|
|
6584
|
+
}
|
|
6585
|
+
return response2;
|
|
6563
6586
|
} catch (error) {
|
|
6564
6587
|
console.error("[MCP Tool Call] Error:", error);
|
|
6565
6588
|
return Response.json({ error: error.message || "Failed to execute tool call" }, { status: error.statusCode || 500 });
|
|
@@ -7215,6 +7238,9 @@ class OAuthHandler {
|
|
|
7215
7238
|
}
|
|
7216
7239
|
return headers;
|
|
7217
7240
|
}
|
|
7241
|
+
hasDatabaseCallbacks() {
|
|
7242
|
+
return !!this.config.setProviderToken;
|
|
7243
|
+
}
|
|
7218
7244
|
async handleAuthorize(request) {
|
|
7219
7245
|
let webRequest;
|
|
7220
7246
|
let authorizeRequest;
|
|
@@ -7495,6 +7521,9 @@ function createNextOAuthHandler(config) {
|
|
|
7495
7521
|
if (result.setCookie) {
|
|
7496
7522
|
response.headers.set("Set-Cookie", result.setCookie);
|
|
7497
7523
|
}
|
|
7524
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
7525
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
7526
|
+
}
|
|
7498
7527
|
return response;
|
|
7499
7528
|
} catch (error) {
|
|
7500
7529
|
console.error("[OAuth Authorize] Error:", error);
|
|
@@ -7508,6 +7537,9 @@ function createNextOAuthHandler(config) {
|
|
|
7508
7537
|
if (result.clearCookie) {
|
|
7509
7538
|
response.headers.set("Set-Cookie", result.clearCookie);
|
|
7510
7539
|
}
|
|
7540
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
7541
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
7542
|
+
}
|
|
7511
7543
|
return response;
|
|
7512
7544
|
} catch (error) {
|
|
7513
7545
|
console.error("[OAuth Callback] Error:", error);
|
|
@@ -7526,7 +7558,11 @@ function createNextOAuthHandler(config) {
|
|
|
7526
7558
|
}
|
|
7527
7559
|
const accessToken = authHeader.substring(7);
|
|
7528
7560
|
const result = await handler.handleStatus(provider, accessToken);
|
|
7529
|
-
|
|
7561
|
+
const response = Response.json(result);
|
|
7562
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
7563
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
7564
|
+
}
|
|
7565
|
+
return response;
|
|
7530
7566
|
} catch (error) {
|
|
7531
7567
|
console.error("[OAuth Status] Error:", error);
|
|
7532
7568
|
return Response.json({ error: error.message || "Failed to check authorization status" }, { status: 500 });
|
|
@@ -7545,7 +7581,11 @@ function createNextOAuthHandler(config) {
|
|
|
7545
7581
|
return Response.json({ error: "Missing provider in request body" }, { status: 400 });
|
|
7546
7582
|
}
|
|
7547
7583
|
const result = await handler.handleDisconnect({ provider }, accessToken, req);
|
|
7548
|
-
|
|
7584
|
+
const response = Response.json(result);
|
|
7585
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
7586
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
7587
|
+
}
|
|
7588
|
+
return response;
|
|
7549
7589
|
} catch (error) {
|
|
7550
7590
|
console.error("[OAuth Disconnect] Error:", error);
|
|
7551
7591
|
return Response.json({ error: error.message || "Failed to disconnect provider" }, { status: 500 });
|
package/dist/adapters/node.js
CHANGED
|
@@ -651,7 +651,7 @@ class OAuthManager {
|
|
|
651
651
|
this.getTokenCallback = tokenCallbacks?.getProviderToken;
|
|
652
652
|
this.setTokenCallback = tokenCallbacks?.setProviderToken;
|
|
653
653
|
this.removeTokenCallback = tokenCallbacks?.removeProviderToken;
|
|
654
|
-
this.skipLocalStorage = tokenCallbacks?.
|
|
654
|
+
this.skipLocalStorage = !!(tokenCallbacks?.getProviderToken || tokenCallbacks?.setProviderToken);
|
|
655
655
|
this.cleanupExpiredPendingAuths();
|
|
656
656
|
}
|
|
657
657
|
async initiateFlow(provider, config, returnUrl) {
|
|
@@ -930,6 +930,9 @@ class OAuthManager {
|
|
|
930
930
|
if (this.getTokenCallback) {
|
|
931
931
|
return;
|
|
932
932
|
}
|
|
933
|
+
if (this.skipLocalStorage) {
|
|
934
|
+
return;
|
|
935
|
+
}
|
|
933
936
|
if (typeof window !== "undefined" && window.localStorage) {
|
|
934
937
|
try {
|
|
935
938
|
const key = `integrate_token_${provider}`;
|
|
@@ -1046,6 +1049,9 @@ class OAuthManager {
|
|
|
1046
1049
|
frontendOrigin: this.apiBaseUrl && this.flowConfig.mode === "redirect" && typeof window !== "undefined" ? window.location.origin : undefined
|
|
1047
1050
|
})
|
|
1048
1051
|
});
|
|
1052
|
+
if (response.headers.get("X-Integrate-Use-Database") === "true") {
|
|
1053
|
+
this.skipLocalStorage = true;
|
|
1054
|
+
}
|
|
1049
1055
|
if (!response.ok) {
|
|
1050
1056
|
const error = await response.text();
|
|
1051
1057
|
throw new Error(`Failed to get authorization URL: ${error}`);
|
|
@@ -1077,6 +1083,9 @@ class OAuthManager {
|
|
|
1077
1083
|
state
|
|
1078
1084
|
})
|
|
1079
1085
|
});
|
|
1086
|
+
if (response.headers.get("X-Integrate-Use-Database") === "true") {
|
|
1087
|
+
this.skipLocalStorage = true;
|
|
1088
|
+
}
|
|
1080
1089
|
if (!response.ok) {
|
|
1081
1090
|
const error = await response.text();
|
|
1082
1091
|
throw new Error(`Failed to exchange code for token: ${error}`);
|
|
@@ -1084,6 +1093,9 @@ class OAuthManager {
|
|
|
1084
1093
|
const data = await response.json();
|
|
1085
1094
|
return data;
|
|
1086
1095
|
}
|
|
1096
|
+
setSkipLocalStorage(value) {
|
|
1097
|
+
this.skipLocalStorage = value;
|
|
1098
|
+
}
|
|
1087
1099
|
close() {
|
|
1088
1100
|
this.windowManager.close();
|
|
1089
1101
|
}
|
|
@@ -1140,6 +1152,7 @@ class MCPClientBase {
|
|
|
1140
1152
|
eventEmitter = new SimpleEventEmitter;
|
|
1141
1153
|
apiRouteBase;
|
|
1142
1154
|
apiBaseUrl;
|
|
1155
|
+
databaseDetected = false;
|
|
1143
1156
|
oauthCallbackPromise;
|
|
1144
1157
|
server;
|
|
1145
1158
|
constructor(config) {
|
|
@@ -1173,8 +1186,7 @@ class MCPClientBase {
|
|
|
1173
1186
|
this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow, this.apiBaseUrl, {
|
|
1174
1187
|
getProviderToken: config.getProviderToken,
|
|
1175
1188
|
setProviderToken: config.setProviderToken,
|
|
1176
|
-
removeProviderToken: config.removeProviderToken
|
|
1177
|
-
skipLocalStorage: config.skipLocalStorage
|
|
1189
|
+
removeProviderToken: config.removeProviderToken
|
|
1178
1190
|
});
|
|
1179
1191
|
for (const integration of this.integrations) {
|
|
1180
1192
|
for (const toolName of integration.tools) {
|
|
@@ -1384,6 +1396,10 @@ class MCPClientBase {
|
|
|
1384
1396
|
arguments: args
|
|
1385
1397
|
})
|
|
1386
1398
|
});
|
|
1399
|
+
if (!this.databaseDetected && response.headers.get("X-Integrate-Use-Database") === "true") {
|
|
1400
|
+
this.oauthManager.setSkipLocalStorage(true);
|
|
1401
|
+
this.databaseDetected = true;
|
|
1402
|
+
}
|
|
1387
1403
|
if (!response.ok) {
|
|
1388
1404
|
let errorMessage = `Request failed: ${response.statusText}`;
|
|
1389
1405
|
const error = new Error(errorMessage);
|
|
@@ -6556,10 +6572,17 @@ function createMCPServer(config) {
|
|
|
6556
6572
|
const oauthHandler = new OAuthHandler({
|
|
6557
6573
|
providers,
|
|
6558
6574
|
serverUrl: config.serverUrl,
|
|
6559
|
-
apiKey: config.apiKey
|
|
6575
|
+
apiKey: config.apiKey,
|
|
6576
|
+
setProviderToken: config.setProviderToken,
|
|
6577
|
+
removeProviderToken: config.removeProviderToken,
|
|
6578
|
+
getSessionContext: config.getSessionContext
|
|
6560
6579
|
});
|
|
6561
6580
|
const result = await oauthHandler.handleToolCall(body, authHeader);
|
|
6562
|
-
|
|
6581
|
+
const response2 = Response.json(result);
|
|
6582
|
+
if (oauthHandler.hasDatabaseCallbacks()) {
|
|
6583
|
+
response2.headers.set("X-Integrate-Use-Database", "true");
|
|
6584
|
+
}
|
|
6585
|
+
return response2;
|
|
6563
6586
|
} catch (error) {
|
|
6564
6587
|
console.error("[MCP Tool Call] Error:", error);
|
|
6565
6588
|
return Response.json({ error: error.message || "Failed to execute tool call" }, { status: error.statusCode || 500 });
|
|
@@ -7215,6 +7238,9 @@ class OAuthHandler {
|
|
|
7215
7238
|
}
|
|
7216
7239
|
return headers;
|
|
7217
7240
|
}
|
|
7241
|
+
hasDatabaseCallbacks() {
|
|
7242
|
+
return !!this.config.setProviderToken;
|
|
7243
|
+
}
|
|
7218
7244
|
async handleAuthorize(request) {
|
|
7219
7245
|
let webRequest;
|
|
7220
7246
|
let authorizeRequest;
|
|
@@ -7495,6 +7521,9 @@ function createNextOAuthHandler(config) {
|
|
|
7495
7521
|
if (result.setCookie) {
|
|
7496
7522
|
response.headers.set("Set-Cookie", result.setCookie);
|
|
7497
7523
|
}
|
|
7524
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
7525
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
7526
|
+
}
|
|
7498
7527
|
return response;
|
|
7499
7528
|
} catch (error) {
|
|
7500
7529
|
console.error("[OAuth Authorize] Error:", error);
|
|
@@ -7508,6 +7537,9 @@ function createNextOAuthHandler(config) {
|
|
|
7508
7537
|
if (result.clearCookie) {
|
|
7509
7538
|
response.headers.set("Set-Cookie", result.clearCookie);
|
|
7510
7539
|
}
|
|
7540
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
7541
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
7542
|
+
}
|
|
7511
7543
|
return response;
|
|
7512
7544
|
} catch (error) {
|
|
7513
7545
|
console.error("[OAuth Callback] Error:", error);
|
|
@@ -7526,7 +7558,11 @@ function createNextOAuthHandler(config) {
|
|
|
7526
7558
|
}
|
|
7527
7559
|
const accessToken = authHeader.substring(7);
|
|
7528
7560
|
const result = await handler.handleStatus(provider, accessToken);
|
|
7529
|
-
|
|
7561
|
+
const response = Response.json(result);
|
|
7562
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
7563
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
7564
|
+
}
|
|
7565
|
+
return response;
|
|
7530
7566
|
} catch (error) {
|
|
7531
7567
|
console.error("[OAuth Status] Error:", error);
|
|
7532
7568
|
return Response.json({ error: error.message || "Failed to check authorization status" }, { status: 500 });
|
|
@@ -7545,7 +7581,11 @@ function createNextOAuthHandler(config) {
|
|
|
7545
7581
|
return Response.json({ error: "Missing provider in request body" }, { status: 400 });
|
|
7546
7582
|
}
|
|
7547
7583
|
const result = await handler.handleDisconnect({ provider }, accessToken, req);
|
|
7548
|
-
|
|
7584
|
+
const response = Response.json(result);
|
|
7585
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
7586
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
7587
|
+
}
|
|
7588
|
+
return response;
|
|
7549
7589
|
} catch (error) {
|
|
7550
7590
|
console.error("[OAuth Disconnect] Error:", error);
|
|
7551
7591
|
return Response.json({ error: error.message || "Failed to disconnect provider" }, { status: 500 });
|