integrate-sdk 0.8.14 → 0.8.18
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 +88 -22
- package/dist/adapters/index.js +90 -164
- package/dist/adapters/nextjs.js +88 -22
- package/dist/adapters/node.d.ts +12 -33
- package/dist/adapters/node.d.ts.map +1 -1
- package/dist/adapters/node.js +90 -23
- package/dist/adapters/session-detector.js +2 -7704
- package/dist/adapters/svelte-kit.js +88 -22
- package/dist/adapters/tanstack-start.js +88 -22
- package/dist/index.d.ts +3 -3
- package/dist/index.js +90 -164
- package/dist/oauth.js +88 -22
- package/dist/server.js +90 -163
- package/dist/src/adapters/node.d.ts +12 -33
- package/dist/src/adapters/node.d.ts.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/server.d.ts +10 -3
- package/dist/src/server.d.ts.map +1 -1
- package/index.ts +6 -6
- package/package.json +1 -1
package/dist/adapters/nextjs.js
CHANGED
|
@@ -1732,6 +1732,49 @@ function getEnv(key) {
|
|
|
1732
1732
|
return;
|
|
1733
1733
|
}
|
|
1734
1734
|
|
|
1735
|
+
// node.ts
|
|
1736
|
+
function fromNodeHeaders(nodeHeaders) {
|
|
1737
|
+
const webHeaders = new Headers;
|
|
1738
|
+
for (const [key, value] of Object.entries(nodeHeaders)) {
|
|
1739
|
+
if (value !== undefined) {
|
|
1740
|
+
if (Array.isArray(value)) {
|
|
1741
|
+
value.forEach((v) => webHeaders.append(key, v));
|
|
1742
|
+
} else {
|
|
1743
|
+
webHeaders.set(key, value);
|
|
1744
|
+
}
|
|
1745
|
+
}
|
|
1746
|
+
}
|
|
1747
|
+
return webHeaders;
|
|
1748
|
+
}
|
|
1749
|
+
async function toWebRequest(req) {
|
|
1750
|
+
const protocol = req.socket?.encrypted ? "https" : "http";
|
|
1751
|
+
const host = req.headers.host || "localhost";
|
|
1752
|
+
const url = `${protocol}://${host}${req.url || ""}`;
|
|
1753
|
+
const headers = fromNodeHeaders(req.headers);
|
|
1754
|
+
let body;
|
|
1755
|
+
if (req.method && ["POST", "PUT", "PATCH"].includes(req.method)) {
|
|
1756
|
+
body = await new Promise((resolve, reject) => {
|
|
1757
|
+
let data = "";
|
|
1758
|
+
req.on("data", (chunk) => data += chunk);
|
|
1759
|
+
req.on("end", () => resolve(data));
|
|
1760
|
+
req.on("error", reject);
|
|
1761
|
+
});
|
|
1762
|
+
}
|
|
1763
|
+
return new Request(url, {
|
|
1764
|
+
method: req.method,
|
|
1765
|
+
headers,
|
|
1766
|
+
body: body || undefined
|
|
1767
|
+
});
|
|
1768
|
+
}
|
|
1769
|
+
async function sendWebResponse(webRes, nodeRes) {
|
|
1770
|
+
nodeRes.statusCode = webRes.status;
|
|
1771
|
+
webRes.headers.forEach((value, key) => {
|
|
1772
|
+
nodeRes.setHeader(key, value);
|
|
1773
|
+
});
|
|
1774
|
+
const body = await webRes.text();
|
|
1775
|
+
nodeRes.end(body);
|
|
1776
|
+
}
|
|
1777
|
+
|
|
1735
1778
|
// ../integrations/github.ts
|
|
1736
1779
|
function githubIntegration(config = {}) {
|
|
1737
1780
|
const oauth = {
|
|
@@ -6471,14 +6514,30 @@ function createMCPServer(config) {
|
|
|
6471
6514
|
setProviderToken: config.setProviderToken,
|
|
6472
6515
|
removeProviderToken: config.removeProviderToken
|
|
6473
6516
|
});
|
|
6474
|
-
const handler = async (request, context) => {
|
|
6475
|
-
|
|
6517
|
+
const handler = async (request, contextOrRes, context) => {
|
|
6518
|
+
let nodeRes;
|
|
6519
|
+
let handlerContext;
|
|
6520
|
+
if (contextOrRes && "write" in contextOrRes && "end" in contextOrRes && "setHeader" in contextOrRes) {
|
|
6521
|
+
nodeRes = contextOrRes;
|
|
6522
|
+
handlerContext = context;
|
|
6523
|
+
} else {
|
|
6524
|
+
handlerContext = contextOrRes;
|
|
6525
|
+
}
|
|
6526
|
+
let webRequest;
|
|
6527
|
+
if (request instanceof Request) {
|
|
6528
|
+
webRequest = request;
|
|
6529
|
+
} else if (typeof request.url === "string" && typeof request.method === "string" && typeof request.headers?.get === "function") {
|
|
6530
|
+
webRequest = request;
|
|
6531
|
+
} else {
|
|
6532
|
+
webRequest = await toWebRequest(request);
|
|
6533
|
+
}
|
|
6534
|
+
const method = webRequest.method.toUpperCase();
|
|
6476
6535
|
let action;
|
|
6477
6536
|
let segments = [];
|
|
6478
|
-
if (
|
|
6479
|
-
action =
|
|
6480
|
-
} else if (
|
|
6481
|
-
const all =
|
|
6537
|
+
if (handlerContext?.params?.action) {
|
|
6538
|
+
action = handlerContext.params.action;
|
|
6539
|
+
} else if (handlerContext?.params?.all) {
|
|
6540
|
+
const all = handlerContext.params.all;
|
|
6482
6541
|
if (Array.isArray(all)) {
|
|
6483
6542
|
segments = all;
|
|
6484
6543
|
} else if (typeof all === "string") {
|
|
@@ -6496,7 +6555,7 @@ function createMCPServer(config) {
|
|
|
6496
6555
|
action = segments[segments.length - 1];
|
|
6497
6556
|
}
|
|
6498
6557
|
} else {
|
|
6499
|
-
const url = new URL(
|
|
6558
|
+
const url = new URL(webRequest.url);
|
|
6500
6559
|
const pathParts = url.pathname.split("/").filter(Boolean);
|
|
6501
6560
|
segments = pathParts;
|
|
6502
6561
|
const oauthIndex = pathParts.indexOf("oauth");
|
|
@@ -6510,8 +6569,8 @@ function createMCPServer(config) {
|
|
|
6510
6569
|
}
|
|
6511
6570
|
if (action === "mcp" && method === "POST") {
|
|
6512
6571
|
try {
|
|
6513
|
-
const body = await
|
|
6514
|
-
const authHeader =
|
|
6572
|
+
const body = await webRequest.json();
|
|
6573
|
+
const authHeader = webRequest.headers.get("authorization");
|
|
6515
6574
|
const { OAuthHandler } = await Promise.resolve().then(() => exports_base_handler);
|
|
6516
6575
|
const oauthHandler = new OAuthHandler({
|
|
6517
6576
|
providers,
|
|
@@ -6534,7 +6593,7 @@ function createMCPServer(config) {
|
|
|
6534
6593
|
}
|
|
6535
6594
|
}
|
|
6536
6595
|
if (method === "GET" && action === "callback") {
|
|
6537
|
-
const url = new URL(
|
|
6596
|
+
const url = new URL(webRequest.url);
|
|
6538
6597
|
const searchParams = url.searchParams;
|
|
6539
6598
|
const code = searchParams.get("code");
|
|
6540
6599
|
const state = searchParams.get("state");
|
|
@@ -6545,11 +6604,11 @@ function createMCPServer(config) {
|
|
|
6545
6604
|
if (error) {
|
|
6546
6605
|
const errorMsg = errorDescription || error;
|
|
6547
6606
|
console.error("[OAuth Redirect] Error:", errorMsg);
|
|
6548
|
-
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent(errorMsg)}`,
|
|
6607
|
+
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent(errorMsg)}`, webRequest.url));
|
|
6549
6608
|
}
|
|
6550
6609
|
if (!code || !state) {
|
|
6551
6610
|
console.error("[OAuth Redirect] Missing code or state parameter");
|
|
6552
|
-
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent("Invalid OAuth callback")}`,
|
|
6611
|
+
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent("Invalid OAuth callback")}`, webRequest.url));
|
|
6553
6612
|
}
|
|
6554
6613
|
let returnUrl = defaultRedirectUrl;
|
|
6555
6614
|
let frontendOrigin;
|
|
@@ -6566,10 +6625,10 @@ function createMCPServer(config) {
|
|
|
6566
6625
|
}
|
|
6567
6626
|
} catch (e) {
|
|
6568
6627
|
try {
|
|
6569
|
-
const referrer =
|
|
6628
|
+
const referrer = webRequest.headers.get("referer") || webRequest.headers.get("referrer");
|
|
6570
6629
|
if (referrer) {
|
|
6571
6630
|
const referrerUrl = new URL(referrer);
|
|
6572
|
-
const currentUrl = new URL(
|
|
6631
|
+
const currentUrl = new URL(webRequest.url);
|
|
6573
6632
|
if (referrerUrl.origin === currentUrl.origin) {
|
|
6574
6633
|
returnUrl = referrerUrl.pathname + referrerUrl.search;
|
|
6575
6634
|
}
|
|
@@ -6604,7 +6663,7 @@ function createMCPServer(config) {
|
|
|
6604
6663
|
if (storedFrontendOrigin) {
|
|
6605
6664
|
frontendOrigin = storedFrontendOrigin;
|
|
6606
6665
|
} else {
|
|
6607
|
-
const referer =
|
|
6666
|
+
const referer = webRequest.headers.get("referer") || webRequest.headers.get("referrer");
|
|
6608
6667
|
if (referer) {
|
|
6609
6668
|
try {
|
|
6610
6669
|
const refererUrl = new URL(referer);
|
|
@@ -6630,7 +6689,7 @@ function createMCPServer(config) {
|
|
|
6630
6689
|
return Response.redirect(frontendUrl);
|
|
6631
6690
|
} catch (error2) {
|
|
6632
6691
|
console.error("[OAuth Backend Callback] Error:", error2);
|
|
6633
|
-
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent(error2.message || "Failed to exchange token")}`,
|
|
6692
|
+
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent(error2.message || "Failed to exchange token")}`, webRequest.url));
|
|
6634
6693
|
}
|
|
6635
6694
|
} else {
|
|
6636
6695
|
let targetOrigin = frontendOrigin;
|
|
@@ -6640,7 +6699,7 @@ function createMCPServer(config) {
|
|
|
6640
6699
|
targetOrigin = returnUrlObj.origin;
|
|
6641
6700
|
returnUrl = returnUrlObj.pathname + returnUrlObj.search;
|
|
6642
6701
|
} catch {
|
|
6643
|
-
const referer =
|
|
6702
|
+
const referer = webRequest.headers.get("referer") || webRequest.headers.get("referrer");
|
|
6644
6703
|
if (referer) {
|
|
6645
6704
|
try {
|
|
6646
6705
|
const refererUrl = new URL(referer);
|
|
@@ -6651,21 +6710,28 @@ function createMCPServer(config) {
|
|
|
6651
6710
|
}
|
|
6652
6711
|
if (!targetOrigin) {
|
|
6653
6712
|
console.warn("[OAuth] Could not determine frontend origin for redirect. Using request origin as fallback.");
|
|
6654
|
-
targetOrigin = new URL(
|
|
6713
|
+
targetOrigin = new URL(webRequest.url).origin;
|
|
6655
6714
|
}
|
|
6656
6715
|
const targetUrl = new URL(returnUrl, targetOrigin);
|
|
6657
6716
|
targetUrl.hash = `oauth_callback=${encodeURIComponent(JSON.stringify({ code, state }))}`;
|
|
6658
6717
|
return Response.redirect(targetUrl);
|
|
6659
6718
|
}
|
|
6660
6719
|
}
|
|
6661
|
-
const
|
|
6720
|
+
const finalAction = action || "callback";
|
|
6721
|
+
const finalContext = { params: { action: finalAction } };
|
|
6722
|
+
let response;
|
|
6662
6723
|
if (method === "POST") {
|
|
6663
|
-
|
|
6724
|
+
response = await POST(webRequest, finalContext);
|
|
6664
6725
|
} else if (method === "GET") {
|
|
6665
|
-
|
|
6726
|
+
response = await GET(webRequest, finalContext);
|
|
6666
6727
|
} else {
|
|
6667
|
-
|
|
6728
|
+
response = Response.json({ error: `Method ${method} not allowed` }, { status: 405 });
|
|
6668
6729
|
}
|
|
6730
|
+
if (nodeRes) {
|
|
6731
|
+
await sendWebResponse(response, nodeRes);
|
|
6732
|
+
return;
|
|
6733
|
+
}
|
|
6734
|
+
return response;
|
|
6669
6735
|
};
|
|
6670
6736
|
const serverClient = client;
|
|
6671
6737
|
serverClient.handler = handler;
|
package/dist/adapters/node.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Node.js OAuth Route Adapter
|
|
3
|
-
* Provides
|
|
2
|
+
* Node.js OAuth Route Adapter Utilities
|
|
3
|
+
* Provides utility functions for converting Node.js request objects to Web API Request objects
|
|
4
4
|
*/
|
|
5
|
-
import { type OAuthHandlerConfig } from './base-handler.js';
|
|
6
5
|
import type { IncomingHttpHeaders, IncomingMessage, ServerResponse } from 'http';
|
|
7
6
|
/**
|
|
8
7
|
* Convert Node.js IncomingHttpHeaders to Web Headers
|
|
@@ -12,37 +11,17 @@ import type { IncomingHttpHeaders, IncomingMessage, ServerResponse } from 'http'
|
|
|
12
11
|
*/
|
|
13
12
|
export declare function fromNodeHeaders(nodeHeaders: IncomingHttpHeaders): Headers;
|
|
14
13
|
/**
|
|
15
|
-
*
|
|
14
|
+
* Convert Node.js IncomingMessage to Web Request
|
|
16
15
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```typescript
|
|
25
|
-
* import { createServer } from 'http';
|
|
26
|
-
* import { toNodeHandler } from 'integrate-sdk/adapters/node';
|
|
27
|
-
*
|
|
28
|
-
* const handler = toNodeHandler({
|
|
29
|
-
* providers: {
|
|
30
|
-
* github: {
|
|
31
|
-
* clientId: process.env.GITHUB_CLIENT_ID!,
|
|
32
|
-
* clientSecret: process.env.GITHUB_CLIENT_SECRET!,
|
|
33
|
-
* },
|
|
34
|
-
* },
|
|
35
|
-
* });
|
|
16
|
+
* @param req - Node.js request object
|
|
17
|
+
* @returns Web API Request object
|
|
18
|
+
*/
|
|
19
|
+
export declare function toWebRequest(req: IncomingMessage): Promise<Request>;
|
|
20
|
+
/**
|
|
21
|
+
* Send Web API Response to Node.js ServerResponse
|
|
36
22
|
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* await handler(req, res);
|
|
40
|
-
* } else {
|
|
41
|
-
* res.statusCode = 404;
|
|
42
|
-
* res.end('Not Found');
|
|
43
|
-
* }
|
|
44
|
-
* }).listen(3000);
|
|
45
|
-
* ```
|
|
23
|
+
* @param webRes - Web API Response object
|
|
24
|
+
* @param nodeRes - Node.js response object
|
|
46
25
|
*/
|
|
47
|
-
export declare function
|
|
26
|
+
export declare function sendWebResponse(webRes: Response, nodeRes: ServerResponse): Promise<void>;
|
|
48
27
|
//# sourceMappingURL=node.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/adapters/node.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/adapters/node.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAEjF;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,mBAAmB,GAAG,OAAO,CAYzE;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBzE;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAS9F"}
|
package/dist/adapters/node.js
CHANGED
|
@@ -1732,6 +1732,49 @@ function getEnv(key) {
|
|
|
1732
1732
|
return;
|
|
1733
1733
|
}
|
|
1734
1734
|
|
|
1735
|
+
// node.ts
|
|
1736
|
+
function fromNodeHeaders(nodeHeaders) {
|
|
1737
|
+
const webHeaders = new Headers;
|
|
1738
|
+
for (const [key, value] of Object.entries(nodeHeaders)) {
|
|
1739
|
+
if (value !== undefined) {
|
|
1740
|
+
if (Array.isArray(value)) {
|
|
1741
|
+
value.forEach((v) => webHeaders.append(key, v));
|
|
1742
|
+
} else {
|
|
1743
|
+
webHeaders.set(key, value);
|
|
1744
|
+
}
|
|
1745
|
+
}
|
|
1746
|
+
}
|
|
1747
|
+
return webHeaders;
|
|
1748
|
+
}
|
|
1749
|
+
async function toWebRequest(req) {
|
|
1750
|
+
const protocol = req.socket?.encrypted ? "https" : "http";
|
|
1751
|
+
const host = req.headers.host || "localhost";
|
|
1752
|
+
const url = `${protocol}://${host}${req.url || ""}`;
|
|
1753
|
+
const headers = fromNodeHeaders(req.headers);
|
|
1754
|
+
let body;
|
|
1755
|
+
if (req.method && ["POST", "PUT", "PATCH"].includes(req.method)) {
|
|
1756
|
+
body = await new Promise((resolve, reject) => {
|
|
1757
|
+
let data = "";
|
|
1758
|
+
req.on("data", (chunk) => data += chunk);
|
|
1759
|
+
req.on("end", () => resolve(data));
|
|
1760
|
+
req.on("error", reject);
|
|
1761
|
+
});
|
|
1762
|
+
}
|
|
1763
|
+
return new Request(url, {
|
|
1764
|
+
method: req.method,
|
|
1765
|
+
headers,
|
|
1766
|
+
body: body || undefined
|
|
1767
|
+
});
|
|
1768
|
+
}
|
|
1769
|
+
async function sendWebResponse(webRes, nodeRes) {
|
|
1770
|
+
nodeRes.statusCode = webRes.status;
|
|
1771
|
+
webRes.headers.forEach((value, key) => {
|
|
1772
|
+
nodeRes.setHeader(key, value);
|
|
1773
|
+
});
|
|
1774
|
+
const body = await webRes.text();
|
|
1775
|
+
nodeRes.end(body);
|
|
1776
|
+
}
|
|
1777
|
+
|
|
1735
1778
|
// ../integrations/github.ts
|
|
1736
1779
|
function githubIntegration(config = {}) {
|
|
1737
1780
|
const oauth = {
|
|
@@ -6471,14 +6514,30 @@ function createMCPServer(config) {
|
|
|
6471
6514
|
setProviderToken: config.setProviderToken,
|
|
6472
6515
|
removeProviderToken: config.removeProviderToken
|
|
6473
6516
|
});
|
|
6474
|
-
const handler = async (request, context) => {
|
|
6475
|
-
|
|
6517
|
+
const handler = async (request, contextOrRes, context) => {
|
|
6518
|
+
let nodeRes;
|
|
6519
|
+
let handlerContext;
|
|
6520
|
+
if (contextOrRes && "write" in contextOrRes && "end" in contextOrRes && "setHeader" in contextOrRes) {
|
|
6521
|
+
nodeRes = contextOrRes;
|
|
6522
|
+
handlerContext = context;
|
|
6523
|
+
} else {
|
|
6524
|
+
handlerContext = contextOrRes;
|
|
6525
|
+
}
|
|
6526
|
+
let webRequest;
|
|
6527
|
+
if (request instanceof Request) {
|
|
6528
|
+
webRequest = request;
|
|
6529
|
+
} else if (typeof request.url === "string" && typeof request.method === "string" && typeof request.headers?.get === "function") {
|
|
6530
|
+
webRequest = request;
|
|
6531
|
+
} else {
|
|
6532
|
+
webRequest = await toWebRequest(request);
|
|
6533
|
+
}
|
|
6534
|
+
const method = webRequest.method.toUpperCase();
|
|
6476
6535
|
let action;
|
|
6477
6536
|
let segments = [];
|
|
6478
|
-
if (
|
|
6479
|
-
action =
|
|
6480
|
-
} else if (
|
|
6481
|
-
const all =
|
|
6537
|
+
if (handlerContext?.params?.action) {
|
|
6538
|
+
action = handlerContext.params.action;
|
|
6539
|
+
} else if (handlerContext?.params?.all) {
|
|
6540
|
+
const all = handlerContext.params.all;
|
|
6482
6541
|
if (Array.isArray(all)) {
|
|
6483
6542
|
segments = all;
|
|
6484
6543
|
} else if (typeof all === "string") {
|
|
@@ -6496,7 +6555,7 @@ function createMCPServer(config) {
|
|
|
6496
6555
|
action = segments[segments.length - 1];
|
|
6497
6556
|
}
|
|
6498
6557
|
} else {
|
|
6499
|
-
const url = new URL(
|
|
6558
|
+
const url = new URL(webRequest.url);
|
|
6500
6559
|
const pathParts = url.pathname.split("/").filter(Boolean);
|
|
6501
6560
|
segments = pathParts;
|
|
6502
6561
|
const oauthIndex = pathParts.indexOf("oauth");
|
|
@@ -6510,8 +6569,8 @@ function createMCPServer(config) {
|
|
|
6510
6569
|
}
|
|
6511
6570
|
if (action === "mcp" && method === "POST") {
|
|
6512
6571
|
try {
|
|
6513
|
-
const body = await
|
|
6514
|
-
const authHeader =
|
|
6572
|
+
const body = await webRequest.json();
|
|
6573
|
+
const authHeader = webRequest.headers.get("authorization");
|
|
6515
6574
|
const { OAuthHandler } = await Promise.resolve().then(() => exports_base_handler);
|
|
6516
6575
|
const oauthHandler = new OAuthHandler({
|
|
6517
6576
|
providers,
|
|
@@ -6534,7 +6593,7 @@ function createMCPServer(config) {
|
|
|
6534
6593
|
}
|
|
6535
6594
|
}
|
|
6536
6595
|
if (method === "GET" && action === "callback") {
|
|
6537
|
-
const url = new URL(
|
|
6596
|
+
const url = new URL(webRequest.url);
|
|
6538
6597
|
const searchParams = url.searchParams;
|
|
6539
6598
|
const code = searchParams.get("code");
|
|
6540
6599
|
const state = searchParams.get("state");
|
|
@@ -6545,11 +6604,11 @@ function createMCPServer(config) {
|
|
|
6545
6604
|
if (error) {
|
|
6546
6605
|
const errorMsg = errorDescription || error;
|
|
6547
6606
|
console.error("[OAuth Redirect] Error:", errorMsg);
|
|
6548
|
-
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent(errorMsg)}`,
|
|
6607
|
+
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent(errorMsg)}`, webRequest.url));
|
|
6549
6608
|
}
|
|
6550
6609
|
if (!code || !state) {
|
|
6551
6610
|
console.error("[OAuth Redirect] Missing code or state parameter");
|
|
6552
|
-
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent("Invalid OAuth callback")}`,
|
|
6611
|
+
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent("Invalid OAuth callback")}`, webRequest.url));
|
|
6553
6612
|
}
|
|
6554
6613
|
let returnUrl = defaultRedirectUrl;
|
|
6555
6614
|
let frontendOrigin;
|
|
@@ -6566,10 +6625,10 @@ function createMCPServer(config) {
|
|
|
6566
6625
|
}
|
|
6567
6626
|
} catch (e) {
|
|
6568
6627
|
try {
|
|
6569
|
-
const referrer =
|
|
6628
|
+
const referrer = webRequest.headers.get("referer") || webRequest.headers.get("referrer");
|
|
6570
6629
|
if (referrer) {
|
|
6571
6630
|
const referrerUrl = new URL(referrer);
|
|
6572
|
-
const currentUrl = new URL(
|
|
6631
|
+
const currentUrl = new URL(webRequest.url);
|
|
6573
6632
|
if (referrerUrl.origin === currentUrl.origin) {
|
|
6574
6633
|
returnUrl = referrerUrl.pathname + referrerUrl.search;
|
|
6575
6634
|
}
|
|
@@ -6604,7 +6663,7 @@ function createMCPServer(config) {
|
|
|
6604
6663
|
if (storedFrontendOrigin) {
|
|
6605
6664
|
frontendOrigin = storedFrontendOrigin;
|
|
6606
6665
|
} else {
|
|
6607
|
-
const referer =
|
|
6666
|
+
const referer = webRequest.headers.get("referer") || webRequest.headers.get("referrer");
|
|
6608
6667
|
if (referer) {
|
|
6609
6668
|
try {
|
|
6610
6669
|
const refererUrl = new URL(referer);
|
|
@@ -6630,7 +6689,7 @@ function createMCPServer(config) {
|
|
|
6630
6689
|
return Response.redirect(frontendUrl);
|
|
6631
6690
|
} catch (error2) {
|
|
6632
6691
|
console.error("[OAuth Backend Callback] Error:", error2);
|
|
6633
|
-
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent(error2.message || "Failed to exchange token")}`,
|
|
6692
|
+
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent(error2.message || "Failed to exchange token")}`, webRequest.url));
|
|
6634
6693
|
}
|
|
6635
6694
|
} else {
|
|
6636
6695
|
let targetOrigin = frontendOrigin;
|
|
@@ -6640,7 +6699,7 @@ function createMCPServer(config) {
|
|
|
6640
6699
|
targetOrigin = returnUrlObj.origin;
|
|
6641
6700
|
returnUrl = returnUrlObj.pathname + returnUrlObj.search;
|
|
6642
6701
|
} catch {
|
|
6643
|
-
const referer =
|
|
6702
|
+
const referer = webRequest.headers.get("referer") || webRequest.headers.get("referrer");
|
|
6644
6703
|
if (referer) {
|
|
6645
6704
|
try {
|
|
6646
6705
|
const refererUrl = new URL(referer);
|
|
@@ -6651,21 +6710,28 @@ function createMCPServer(config) {
|
|
|
6651
6710
|
}
|
|
6652
6711
|
if (!targetOrigin) {
|
|
6653
6712
|
console.warn("[OAuth] Could not determine frontend origin for redirect. Using request origin as fallback.");
|
|
6654
|
-
targetOrigin = new URL(
|
|
6713
|
+
targetOrigin = new URL(webRequest.url).origin;
|
|
6655
6714
|
}
|
|
6656
6715
|
const targetUrl = new URL(returnUrl, targetOrigin);
|
|
6657
6716
|
targetUrl.hash = `oauth_callback=${encodeURIComponent(JSON.stringify({ code, state }))}`;
|
|
6658
6717
|
return Response.redirect(targetUrl);
|
|
6659
6718
|
}
|
|
6660
6719
|
}
|
|
6661
|
-
const
|
|
6720
|
+
const finalAction = action || "callback";
|
|
6721
|
+
const finalContext = { params: { action: finalAction } };
|
|
6722
|
+
let response;
|
|
6662
6723
|
if (method === "POST") {
|
|
6663
|
-
|
|
6724
|
+
response = await POST(webRequest, finalContext);
|
|
6664
6725
|
} else if (method === "GET") {
|
|
6665
|
-
|
|
6726
|
+
response = await GET(webRequest, finalContext);
|
|
6666
6727
|
} else {
|
|
6667
|
-
|
|
6728
|
+
response = Response.json({ error: `Method ${method} not allowed` }, { status: 405 });
|
|
6668
6729
|
}
|
|
6730
|
+
if (nodeRes) {
|
|
6731
|
+
await sendWebResponse(response, nodeRes);
|
|
6732
|
+
return;
|
|
6733
|
+
}
|
|
6734
|
+
return response;
|
|
6669
6735
|
};
|
|
6670
6736
|
const serverClient = client;
|
|
6671
6737
|
serverClient.handler = handler;
|
|
@@ -7631,6 +7697,7 @@ function createNextOAuthHandler(config) {
|
|
|
7631
7697
|
}
|
|
7632
7698
|
var init_nextjs = () => {};
|
|
7633
7699
|
export {
|
|
7634
|
-
|
|
7700
|
+
toWebRequest,
|
|
7701
|
+
sendWebResponse,
|
|
7635
7702
|
fromNodeHeaders
|
|
7636
7703
|
};
|