integrate-sdk 0.8.15 → 0.8.19
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 +93 -40
- package/dist/adapters/context-cookie.js +0 -17
- package/dist/adapters/index.js +95 -182
- package/dist/adapters/nextjs-oauth-redirect.js +0 -17
- package/dist/adapters/nextjs.js +93 -40
- package/dist/adapters/node.d.ts +12 -33
- package/dist/adapters/node.d.ts.map +1 -1
- package/dist/adapters/node.js +95 -41
- package/dist/adapters/session-detector.js +10 -7729
- package/dist/adapters/solid-start.js +0 -17
- package/dist/adapters/svelte-kit.js +93 -40
- package/dist/adapters/tanstack-start.js +93 -40
- package/dist/ai/anthropic.js +5 -18
- package/dist/ai/google.js +5 -18
- package/dist/ai/index.js +5 -18
- package/dist/ai/openai.js +5 -18
- package/dist/ai/utils.js +5 -18
- package/dist/ai/vercel-ai.js +5 -18
- package/dist/index.js +94 -186
- package/dist/oauth.js +93 -40
- package/dist/react.js +0 -22
- package/dist/server.js +95 -181
- 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/dist/src/utils/request-tokens.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,20 +1,4 @@
|
|
|
1
|
-
import { createRequire } from "node:module";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
4
1
|
var __defProp = Object.defineProperty;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __toESM = (mod, isNodeMode, target) => {
|
|
8
|
-
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
9
|
-
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
10
|
-
for (let key of __getOwnPropNames(mod))
|
|
11
|
-
if (!__hasOwnProp.call(to, key))
|
|
12
|
-
__defProp(to, key, {
|
|
13
|
-
get: () => mod[key],
|
|
14
|
-
enumerable: true
|
|
15
|
-
});
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
2
|
var __export = (target, all) => {
|
|
19
3
|
for (var name in all)
|
|
20
4
|
__defProp(target, name, {
|
|
@@ -25,7 +9,6 @@ var __export = (target, all) => {
|
|
|
25
9
|
});
|
|
26
10
|
};
|
|
27
11
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
28
|
-
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
29
12
|
|
|
30
13
|
// ../protocol/jsonrpc.ts
|
|
31
14
|
function parseMessage(message) {
|
|
@@ -1732,6 +1715,49 @@ function getEnv(key) {
|
|
|
1732
1715
|
return;
|
|
1733
1716
|
}
|
|
1734
1717
|
|
|
1718
|
+
// node.ts
|
|
1719
|
+
function fromNodeHeaders(nodeHeaders) {
|
|
1720
|
+
const webHeaders = new Headers;
|
|
1721
|
+
for (const [key, value] of Object.entries(nodeHeaders)) {
|
|
1722
|
+
if (value !== undefined) {
|
|
1723
|
+
if (Array.isArray(value)) {
|
|
1724
|
+
value.forEach((v) => webHeaders.append(key, v));
|
|
1725
|
+
} else {
|
|
1726
|
+
webHeaders.set(key, value);
|
|
1727
|
+
}
|
|
1728
|
+
}
|
|
1729
|
+
}
|
|
1730
|
+
return webHeaders;
|
|
1731
|
+
}
|
|
1732
|
+
async function toWebRequest(req) {
|
|
1733
|
+
const protocol = req.socket?.encrypted ? "https" : "http";
|
|
1734
|
+
const host = req.headers.host || "localhost";
|
|
1735
|
+
const url = `${protocol}://${host}${req.url || ""}`;
|
|
1736
|
+
const headers = fromNodeHeaders(req.headers);
|
|
1737
|
+
let body;
|
|
1738
|
+
if (req.method && ["POST", "PUT", "PATCH"].includes(req.method)) {
|
|
1739
|
+
body = await new Promise((resolve, reject) => {
|
|
1740
|
+
let data = "";
|
|
1741
|
+
req.on("data", (chunk) => data += chunk);
|
|
1742
|
+
req.on("end", () => resolve(data));
|
|
1743
|
+
req.on("error", reject);
|
|
1744
|
+
});
|
|
1745
|
+
}
|
|
1746
|
+
return new Request(url, {
|
|
1747
|
+
method: req.method,
|
|
1748
|
+
headers,
|
|
1749
|
+
body: body || undefined
|
|
1750
|
+
});
|
|
1751
|
+
}
|
|
1752
|
+
async function sendWebResponse(webRes, nodeRes) {
|
|
1753
|
+
nodeRes.statusCode = webRes.status;
|
|
1754
|
+
webRes.headers.forEach((value, key) => {
|
|
1755
|
+
nodeRes.setHeader(key, value);
|
|
1756
|
+
});
|
|
1757
|
+
const body = await webRes.text();
|
|
1758
|
+
nodeRes.end(body);
|
|
1759
|
+
}
|
|
1760
|
+
|
|
1735
1761
|
// ../integrations/github.ts
|
|
1736
1762
|
function githubIntegration(config = {}) {
|
|
1737
1763
|
const oauth = {
|
|
@@ -5858,7 +5884,11 @@ async function getProviderTokens(manualTokens) {
|
|
|
5858
5884
|
let tokensString = null;
|
|
5859
5885
|
if (!tokensString) {
|
|
5860
5886
|
try {
|
|
5861
|
-
const
|
|
5887
|
+
const getNextHeadersPath = () => {
|
|
5888
|
+
const parts = ["next", "/headers"];
|
|
5889
|
+
return parts.join("");
|
|
5890
|
+
};
|
|
5891
|
+
const nextHeaders = await import(getNextHeadersPath()).catch(() => null);
|
|
5862
5892
|
if (nextHeaders && typeof nextHeaders.headers === "function") {
|
|
5863
5893
|
const headersList = await Promise.resolve(nextHeaders.headers());
|
|
5864
5894
|
tokensString = headersList.get("x-integrate-tokens");
|
|
@@ -6471,14 +6501,30 @@ function createMCPServer(config) {
|
|
|
6471
6501
|
setProviderToken: config.setProviderToken,
|
|
6472
6502
|
removeProviderToken: config.removeProviderToken
|
|
6473
6503
|
});
|
|
6474
|
-
const handler = async (request, context) => {
|
|
6475
|
-
|
|
6504
|
+
const handler = async (request, contextOrRes, context) => {
|
|
6505
|
+
let nodeRes;
|
|
6506
|
+
let handlerContext;
|
|
6507
|
+
if (contextOrRes && "write" in contextOrRes && "end" in contextOrRes && "setHeader" in contextOrRes) {
|
|
6508
|
+
nodeRes = contextOrRes;
|
|
6509
|
+
handlerContext = context;
|
|
6510
|
+
} else {
|
|
6511
|
+
handlerContext = contextOrRes;
|
|
6512
|
+
}
|
|
6513
|
+
let webRequest;
|
|
6514
|
+
if (request instanceof Request) {
|
|
6515
|
+
webRequest = request;
|
|
6516
|
+
} else if (typeof request.url === "string" && typeof request.method === "string" && typeof request.headers?.get === "function") {
|
|
6517
|
+
webRequest = request;
|
|
6518
|
+
} else {
|
|
6519
|
+
webRequest = await toWebRequest(request);
|
|
6520
|
+
}
|
|
6521
|
+
const method = webRequest.method.toUpperCase();
|
|
6476
6522
|
let action;
|
|
6477
6523
|
let segments = [];
|
|
6478
|
-
if (
|
|
6479
|
-
action =
|
|
6480
|
-
} else if (
|
|
6481
|
-
const all =
|
|
6524
|
+
if (handlerContext?.params?.action) {
|
|
6525
|
+
action = handlerContext.params.action;
|
|
6526
|
+
} else if (handlerContext?.params?.all) {
|
|
6527
|
+
const all = handlerContext.params.all;
|
|
6482
6528
|
if (Array.isArray(all)) {
|
|
6483
6529
|
segments = all;
|
|
6484
6530
|
} else if (typeof all === "string") {
|
|
@@ -6496,7 +6542,7 @@ function createMCPServer(config) {
|
|
|
6496
6542
|
action = segments[segments.length - 1];
|
|
6497
6543
|
}
|
|
6498
6544
|
} else {
|
|
6499
|
-
const url = new URL(
|
|
6545
|
+
const url = new URL(webRequest.url);
|
|
6500
6546
|
const pathParts = url.pathname.split("/").filter(Boolean);
|
|
6501
6547
|
segments = pathParts;
|
|
6502
6548
|
const oauthIndex = pathParts.indexOf("oauth");
|
|
@@ -6510,8 +6556,8 @@ function createMCPServer(config) {
|
|
|
6510
6556
|
}
|
|
6511
6557
|
if (action === "mcp" && method === "POST") {
|
|
6512
6558
|
try {
|
|
6513
|
-
const body = await
|
|
6514
|
-
const authHeader =
|
|
6559
|
+
const body = await webRequest.json();
|
|
6560
|
+
const authHeader = webRequest.headers.get("authorization");
|
|
6515
6561
|
const { OAuthHandler } = await Promise.resolve().then(() => exports_base_handler);
|
|
6516
6562
|
const oauthHandler = new OAuthHandler({
|
|
6517
6563
|
providers,
|
|
@@ -6534,7 +6580,7 @@ function createMCPServer(config) {
|
|
|
6534
6580
|
}
|
|
6535
6581
|
}
|
|
6536
6582
|
if (method === "GET" && action === "callback") {
|
|
6537
|
-
const url = new URL(
|
|
6583
|
+
const url = new URL(webRequest.url);
|
|
6538
6584
|
const searchParams = url.searchParams;
|
|
6539
6585
|
const code = searchParams.get("code");
|
|
6540
6586
|
const state = searchParams.get("state");
|
|
@@ -6545,11 +6591,11 @@ function createMCPServer(config) {
|
|
|
6545
6591
|
if (error) {
|
|
6546
6592
|
const errorMsg = errorDescription || error;
|
|
6547
6593
|
console.error("[OAuth Redirect] Error:", errorMsg);
|
|
6548
|
-
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent(errorMsg)}`,
|
|
6594
|
+
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent(errorMsg)}`, webRequest.url));
|
|
6549
6595
|
}
|
|
6550
6596
|
if (!code || !state) {
|
|
6551
6597
|
console.error("[OAuth Redirect] Missing code or state parameter");
|
|
6552
|
-
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent("Invalid OAuth callback")}`,
|
|
6598
|
+
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent("Invalid OAuth callback")}`, webRequest.url));
|
|
6553
6599
|
}
|
|
6554
6600
|
let returnUrl = defaultRedirectUrl;
|
|
6555
6601
|
let frontendOrigin;
|
|
@@ -6566,10 +6612,10 @@ function createMCPServer(config) {
|
|
|
6566
6612
|
}
|
|
6567
6613
|
} catch (e) {
|
|
6568
6614
|
try {
|
|
6569
|
-
const referrer =
|
|
6615
|
+
const referrer = webRequest.headers.get("referer") || webRequest.headers.get("referrer");
|
|
6570
6616
|
if (referrer) {
|
|
6571
6617
|
const referrerUrl = new URL(referrer);
|
|
6572
|
-
const currentUrl = new URL(
|
|
6618
|
+
const currentUrl = new URL(webRequest.url);
|
|
6573
6619
|
if (referrerUrl.origin === currentUrl.origin) {
|
|
6574
6620
|
returnUrl = referrerUrl.pathname + referrerUrl.search;
|
|
6575
6621
|
}
|
|
@@ -6604,7 +6650,7 @@ function createMCPServer(config) {
|
|
|
6604
6650
|
if (storedFrontendOrigin) {
|
|
6605
6651
|
frontendOrigin = storedFrontendOrigin;
|
|
6606
6652
|
} else {
|
|
6607
|
-
const referer =
|
|
6653
|
+
const referer = webRequest.headers.get("referer") || webRequest.headers.get("referrer");
|
|
6608
6654
|
if (referer) {
|
|
6609
6655
|
try {
|
|
6610
6656
|
const refererUrl = new URL(referer);
|
|
@@ -6630,7 +6676,7 @@ function createMCPServer(config) {
|
|
|
6630
6676
|
return Response.redirect(frontendUrl);
|
|
6631
6677
|
} catch (error2) {
|
|
6632
6678
|
console.error("[OAuth Backend Callback] Error:", error2);
|
|
6633
|
-
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent(error2.message || "Failed to exchange token")}`,
|
|
6679
|
+
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent(error2.message || "Failed to exchange token")}`, webRequest.url));
|
|
6634
6680
|
}
|
|
6635
6681
|
} else {
|
|
6636
6682
|
let targetOrigin = frontendOrigin;
|
|
@@ -6640,7 +6686,7 @@ function createMCPServer(config) {
|
|
|
6640
6686
|
targetOrigin = returnUrlObj.origin;
|
|
6641
6687
|
returnUrl = returnUrlObj.pathname + returnUrlObj.search;
|
|
6642
6688
|
} catch {
|
|
6643
|
-
const referer =
|
|
6689
|
+
const referer = webRequest.headers.get("referer") || webRequest.headers.get("referrer");
|
|
6644
6690
|
if (referer) {
|
|
6645
6691
|
try {
|
|
6646
6692
|
const refererUrl = new URL(referer);
|
|
@@ -6651,21 +6697,28 @@ function createMCPServer(config) {
|
|
|
6651
6697
|
}
|
|
6652
6698
|
if (!targetOrigin) {
|
|
6653
6699
|
console.warn("[OAuth] Could not determine frontend origin for redirect. Using request origin as fallback.");
|
|
6654
|
-
targetOrigin = new URL(
|
|
6700
|
+
targetOrigin = new URL(webRequest.url).origin;
|
|
6655
6701
|
}
|
|
6656
6702
|
const targetUrl = new URL(returnUrl, targetOrigin);
|
|
6657
6703
|
targetUrl.hash = `oauth_callback=${encodeURIComponent(JSON.stringify({ code, state }))}`;
|
|
6658
6704
|
return Response.redirect(targetUrl);
|
|
6659
6705
|
}
|
|
6660
6706
|
}
|
|
6661
|
-
const
|
|
6707
|
+
const finalAction = action || "callback";
|
|
6708
|
+
const finalContext = { params: { action: finalAction } };
|
|
6709
|
+
let response;
|
|
6662
6710
|
if (method === "POST") {
|
|
6663
|
-
|
|
6711
|
+
response = await POST(webRequest, finalContext);
|
|
6664
6712
|
} else if (method === "GET") {
|
|
6665
|
-
|
|
6713
|
+
response = await GET(webRequest, finalContext);
|
|
6666
6714
|
} else {
|
|
6667
|
-
|
|
6715
|
+
response = Response.json({ error: `Method ${method} not allowed` }, { status: 405 });
|
|
6668
6716
|
}
|
|
6717
|
+
if (nodeRes) {
|
|
6718
|
+
await sendWebResponse(response, nodeRes);
|
|
6719
|
+
return;
|
|
6720
|
+
}
|
|
6721
|
+
return response;
|
|
6669
6722
|
};
|
|
6670
6723
|
const serverClient = client;
|
|
6671
6724
|
serverClient.handler = handler;
|
|
@@ -1,20 +1,4 @@
|
|
|
1
|
-
import { createRequire } from "node:module";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
4
1
|
var __defProp = Object.defineProperty;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __toESM = (mod, isNodeMode, target) => {
|
|
8
|
-
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
9
|
-
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
10
|
-
for (let key of __getOwnPropNames(mod))
|
|
11
|
-
if (!__hasOwnProp.call(to, key))
|
|
12
|
-
__defProp(to, key, {
|
|
13
|
-
get: () => mod[key],
|
|
14
|
-
enumerable: true
|
|
15
|
-
});
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
2
|
var __export = (target, all) => {
|
|
19
3
|
for (var name in all)
|
|
20
4
|
__defProp(target, name, {
|
|
@@ -25,7 +9,6 @@ var __export = (target, all) => {
|
|
|
25
9
|
});
|
|
26
10
|
};
|
|
27
11
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
28
|
-
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
29
12
|
|
|
30
13
|
// context-cookie.ts
|
|
31
14
|
var exports_context_cookie = {};
|
package/dist/adapters/index.js
CHANGED
|
@@ -1,20 +1,4 @@
|
|
|
1
|
-
import { createRequire } from "node:module";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
4
1
|
var __defProp = Object.defineProperty;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __toESM = (mod, isNodeMode, target) => {
|
|
8
|
-
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
9
|
-
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
10
|
-
for (let key of __getOwnPropNames(mod))
|
|
11
|
-
if (!__hasOwnProp.call(to, key))
|
|
12
|
-
__defProp(to, key, {
|
|
13
|
-
get: () => mod[key],
|
|
14
|
-
enumerable: true
|
|
15
|
-
});
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
2
|
var __export = (target, all) => {
|
|
19
3
|
for (var name in all)
|
|
20
4
|
__defProp(target, name, {
|
|
@@ -25,7 +9,6 @@ var __export = (target, all) => {
|
|
|
25
9
|
});
|
|
26
10
|
};
|
|
27
11
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
28
|
-
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
29
12
|
|
|
30
13
|
// ../protocol/jsonrpc.ts
|
|
31
14
|
function parseMessage(message) {
|
|
@@ -1732,6 +1715,49 @@ function getEnv(key) {
|
|
|
1732
1715
|
return;
|
|
1733
1716
|
}
|
|
1734
1717
|
|
|
1718
|
+
// node.ts
|
|
1719
|
+
function fromNodeHeaders(nodeHeaders) {
|
|
1720
|
+
const webHeaders = new Headers;
|
|
1721
|
+
for (const [key, value] of Object.entries(nodeHeaders)) {
|
|
1722
|
+
if (value !== undefined) {
|
|
1723
|
+
if (Array.isArray(value)) {
|
|
1724
|
+
value.forEach((v) => webHeaders.append(key, v));
|
|
1725
|
+
} else {
|
|
1726
|
+
webHeaders.set(key, value);
|
|
1727
|
+
}
|
|
1728
|
+
}
|
|
1729
|
+
}
|
|
1730
|
+
return webHeaders;
|
|
1731
|
+
}
|
|
1732
|
+
async function toWebRequest(req) {
|
|
1733
|
+
const protocol = req.socket?.encrypted ? "https" : "http";
|
|
1734
|
+
const host = req.headers.host || "localhost";
|
|
1735
|
+
const url = `${protocol}://${host}${req.url || ""}`;
|
|
1736
|
+
const headers = fromNodeHeaders(req.headers);
|
|
1737
|
+
let body;
|
|
1738
|
+
if (req.method && ["POST", "PUT", "PATCH"].includes(req.method)) {
|
|
1739
|
+
body = await new Promise((resolve, reject) => {
|
|
1740
|
+
let data = "";
|
|
1741
|
+
req.on("data", (chunk) => data += chunk);
|
|
1742
|
+
req.on("end", () => resolve(data));
|
|
1743
|
+
req.on("error", reject);
|
|
1744
|
+
});
|
|
1745
|
+
}
|
|
1746
|
+
return new Request(url, {
|
|
1747
|
+
method: req.method,
|
|
1748
|
+
headers,
|
|
1749
|
+
body: body || undefined
|
|
1750
|
+
});
|
|
1751
|
+
}
|
|
1752
|
+
async function sendWebResponse(webRes, nodeRes) {
|
|
1753
|
+
nodeRes.statusCode = webRes.status;
|
|
1754
|
+
webRes.headers.forEach((value, key) => {
|
|
1755
|
+
nodeRes.setHeader(key, value);
|
|
1756
|
+
});
|
|
1757
|
+
const body = await webRes.text();
|
|
1758
|
+
nodeRes.end(body);
|
|
1759
|
+
}
|
|
1760
|
+
|
|
1735
1761
|
// ../integrations/github.ts
|
|
1736
1762
|
function githubIntegration(config = {}) {
|
|
1737
1763
|
const oauth = {
|
|
@@ -5858,7 +5884,11 @@ async function getProviderTokens(manualTokens) {
|
|
|
5858
5884
|
let tokensString = null;
|
|
5859
5885
|
if (!tokensString) {
|
|
5860
5886
|
try {
|
|
5861
|
-
const
|
|
5887
|
+
const getNextHeadersPath = () => {
|
|
5888
|
+
const parts = ["next", "/headers"];
|
|
5889
|
+
return parts.join("");
|
|
5890
|
+
};
|
|
5891
|
+
const nextHeaders = await import(getNextHeadersPath()).catch(() => null);
|
|
5862
5892
|
if (nextHeaders && typeof nextHeaders.headers === "function") {
|
|
5863
5893
|
const headersList = await Promise.resolve(nextHeaders.headers());
|
|
5864
5894
|
tokensString = headersList.get("x-integrate-tokens");
|
|
@@ -6471,14 +6501,30 @@ function createMCPServer(config) {
|
|
|
6471
6501
|
setProviderToken: config.setProviderToken,
|
|
6472
6502
|
removeProviderToken: config.removeProviderToken
|
|
6473
6503
|
});
|
|
6474
|
-
const handler = async (request, context) => {
|
|
6475
|
-
|
|
6504
|
+
const handler = async (request, contextOrRes, context) => {
|
|
6505
|
+
let nodeRes;
|
|
6506
|
+
let handlerContext;
|
|
6507
|
+
if (contextOrRes && "write" in contextOrRes && "end" in contextOrRes && "setHeader" in contextOrRes) {
|
|
6508
|
+
nodeRes = contextOrRes;
|
|
6509
|
+
handlerContext = context;
|
|
6510
|
+
} else {
|
|
6511
|
+
handlerContext = contextOrRes;
|
|
6512
|
+
}
|
|
6513
|
+
let webRequest;
|
|
6514
|
+
if (request instanceof Request) {
|
|
6515
|
+
webRequest = request;
|
|
6516
|
+
} else if (typeof request.url === "string" && typeof request.method === "string" && typeof request.headers?.get === "function") {
|
|
6517
|
+
webRequest = request;
|
|
6518
|
+
} else {
|
|
6519
|
+
webRequest = await toWebRequest(request);
|
|
6520
|
+
}
|
|
6521
|
+
const method = webRequest.method.toUpperCase();
|
|
6476
6522
|
let action;
|
|
6477
6523
|
let segments = [];
|
|
6478
|
-
if (
|
|
6479
|
-
action =
|
|
6480
|
-
} else if (
|
|
6481
|
-
const all =
|
|
6524
|
+
if (handlerContext?.params?.action) {
|
|
6525
|
+
action = handlerContext.params.action;
|
|
6526
|
+
} else if (handlerContext?.params?.all) {
|
|
6527
|
+
const all = handlerContext.params.all;
|
|
6482
6528
|
if (Array.isArray(all)) {
|
|
6483
6529
|
segments = all;
|
|
6484
6530
|
} else if (typeof all === "string") {
|
|
@@ -6496,7 +6542,7 @@ function createMCPServer(config) {
|
|
|
6496
6542
|
action = segments[segments.length - 1];
|
|
6497
6543
|
}
|
|
6498
6544
|
} else {
|
|
6499
|
-
const url = new URL(
|
|
6545
|
+
const url = new URL(webRequest.url);
|
|
6500
6546
|
const pathParts = url.pathname.split("/").filter(Boolean);
|
|
6501
6547
|
segments = pathParts;
|
|
6502
6548
|
const oauthIndex = pathParts.indexOf("oauth");
|
|
@@ -6510,8 +6556,8 @@ function createMCPServer(config) {
|
|
|
6510
6556
|
}
|
|
6511
6557
|
if (action === "mcp" && method === "POST") {
|
|
6512
6558
|
try {
|
|
6513
|
-
const body = await
|
|
6514
|
-
const authHeader =
|
|
6559
|
+
const body = await webRequest.json();
|
|
6560
|
+
const authHeader = webRequest.headers.get("authorization");
|
|
6515
6561
|
const { OAuthHandler } = await Promise.resolve().then(() => exports_base_handler);
|
|
6516
6562
|
const oauthHandler = new OAuthHandler({
|
|
6517
6563
|
providers,
|
|
@@ -6534,7 +6580,7 @@ function createMCPServer(config) {
|
|
|
6534
6580
|
}
|
|
6535
6581
|
}
|
|
6536
6582
|
if (method === "GET" && action === "callback") {
|
|
6537
|
-
const url = new URL(
|
|
6583
|
+
const url = new URL(webRequest.url);
|
|
6538
6584
|
const searchParams = url.searchParams;
|
|
6539
6585
|
const code = searchParams.get("code");
|
|
6540
6586
|
const state = searchParams.get("state");
|
|
@@ -6545,11 +6591,11 @@ function createMCPServer(config) {
|
|
|
6545
6591
|
if (error) {
|
|
6546
6592
|
const errorMsg = errorDescription || error;
|
|
6547
6593
|
console.error("[OAuth Redirect] Error:", errorMsg);
|
|
6548
|
-
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent(errorMsg)}`,
|
|
6594
|
+
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent(errorMsg)}`, webRequest.url));
|
|
6549
6595
|
}
|
|
6550
6596
|
if (!code || !state) {
|
|
6551
6597
|
console.error("[OAuth Redirect] Missing code or state parameter");
|
|
6552
|
-
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent("Invalid OAuth callback")}`,
|
|
6598
|
+
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent("Invalid OAuth callback")}`, webRequest.url));
|
|
6553
6599
|
}
|
|
6554
6600
|
let returnUrl = defaultRedirectUrl;
|
|
6555
6601
|
let frontendOrigin;
|
|
@@ -6566,10 +6612,10 @@ function createMCPServer(config) {
|
|
|
6566
6612
|
}
|
|
6567
6613
|
} catch (e) {
|
|
6568
6614
|
try {
|
|
6569
|
-
const referrer =
|
|
6615
|
+
const referrer = webRequest.headers.get("referer") || webRequest.headers.get("referrer");
|
|
6570
6616
|
if (referrer) {
|
|
6571
6617
|
const referrerUrl = new URL(referrer);
|
|
6572
|
-
const currentUrl = new URL(
|
|
6618
|
+
const currentUrl = new URL(webRequest.url);
|
|
6573
6619
|
if (referrerUrl.origin === currentUrl.origin) {
|
|
6574
6620
|
returnUrl = referrerUrl.pathname + referrerUrl.search;
|
|
6575
6621
|
}
|
|
@@ -6604,7 +6650,7 @@ function createMCPServer(config) {
|
|
|
6604
6650
|
if (storedFrontendOrigin) {
|
|
6605
6651
|
frontendOrigin = storedFrontendOrigin;
|
|
6606
6652
|
} else {
|
|
6607
|
-
const referer =
|
|
6653
|
+
const referer = webRequest.headers.get("referer") || webRequest.headers.get("referrer");
|
|
6608
6654
|
if (referer) {
|
|
6609
6655
|
try {
|
|
6610
6656
|
const refererUrl = new URL(referer);
|
|
@@ -6630,7 +6676,7 @@ function createMCPServer(config) {
|
|
|
6630
6676
|
return Response.redirect(frontendUrl);
|
|
6631
6677
|
} catch (error2) {
|
|
6632
6678
|
console.error("[OAuth Backend Callback] Error:", error2);
|
|
6633
|
-
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent(error2.message || "Failed to exchange token")}`,
|
|
6679
|
+
return Response.redirect(new URL(`${errorRedirectUrl}?error=${encodeURIComponent(error2.message || "Failed to exchange token")}`, webRequest.url));
|
|
6634
6680
|
}
|
|
6635
6681
|
} else {
|
|
6636
6682
|
let targetOrigin = frontendOrigin;
|
|
@@ -6640,7 +6686,7 @@ function createMCPServer(config) {
|
|
|
6640
6686
|
targetOrigin = returnUrlObj.origin;
|
|
6641
6687
|
returnUrl = returnUrlObj.pathname + returnUrlObj.search;
|
|
6642
6688
|
} catch {
|
|
6643
|
-
const referer =
|
|
6689
|
+
const referer = webRequest.headers.get("referer") || webRequest.headers.get("referrer");
|
|
6644
6690
|
if (referer) {
|
|
6645
6691
|
try {
|
|
6646
6692
|
const refererUrl = new URL(referer);
|
|
@@ -6651,21 +6697,28 @@ function createMCPServer(config) {
|
|
|
6651
6697
|
}
|
|
6652
6698
|
if (!targetOrigin) {
|
|
6653
6699
|
console.warn("[OAuth] Could not determine frontend origin for redirect. Using request origin as fallback.");
|
|
6654
|
-
targetOrigin = new URL(
|
|
6700
|
+
targetOrigin = new URL(webRequest.url).origin;
|
|
6655
6701
|
}
|
|
6656
6702
|
const targetUrl = new URL(returnUrl, targetOrigin);
|
|
6657
6703
|
targetUrl.hash = `oauth_callback=${encodeURIComponent(JSON.stringify({ code, state }))}`;
|
|
6658
6704
|
return Response.redirect(targetUrl);
|
|
6659
6705
|
}
|
|
6660
6706
|
}
|
|
6661
|
-
const
|
|
6707
|
+
const finalAction = action || "callback";
|
|
6708
|
+
const finalContext = { params: { action: finalAction } };
|
|
6709
|
+
let response;
|
|
6662
6710
|
if (method === "POST") {
|
|
6663
|
-
|
|
6711
|
+
response = await POST(webRequest, finalContext);
|
|
6664
6712
|
} else if (method === "GET") {
|
|
6665
|
-
|
|
6713
|
+
response = await GET(webRequest, finalContext);
|
|
6666
6714
|
} else {
|
|
6667
|
-
|
|
6715
|
+
response = Response.json({ error: `Method ${method} not allowed` }, { status: 405 });
|
|
6716
|
+
}
|
|
6717
|
+
if (nodeRes) {
|
|
6718
|
+
await sendWebResponse(response, nodeRes);
|
|
6719
|
+
return;
|
|
6668
6720
|
}
|
|
6721
|
+
return response;
|
|
6669
6722
|
};
|
|
6670
6723
|
const serverClient = client;
|
|
6671
6724
|
serverClient.handler = handler;
|
|
@@ -7631,147 +7684,6 @@ function createNextOAuthHandler(config) {
|
|
|
7631
7684
|
}
|
|
7632
7685
|
var init_nextjs = () => {};
|
|
7633
7686
|
|
|
7634
|
-
// node.ts
|
|
7635
|
-
function fromNodeHeaders(nodeHeaders) {
|
|
7636
|
-
const webHeaders = new Headers;
|
|
7637
|
-
for (const [key, value] of Object.entries(nodeHeaders)) {
|
|
7638
|
-
if (value !== undefined) {
|
|
7639
|
-
if (Array.isArray(value)) {
|
|
7640
|
-
value.forEach((v) => webHeaders.append(key, v));
|
|
7641
|
-
} else {
|
|
7642
|
-
webHeaders.set(key, value);
|
|
7643
|
-
}
|
|
7644
|
-
}
|
|
7645
|
-
}
|
|
7646
|
-
return webHeaders;
|
|
7647
|
-
}
|
|
7648
|
-
async function toWebRequest(req) {
|
|
7649
|
-
const protocol = req.socket.encrypted ? "https" : "http";
|
|
7650
|
-
const host = req.headers.host || "localhost";
|
|
7651
|
-
const url = `${protocol}://${host}${req.url}`;
|
|
7652
|
-
const headers = fromNodeHeaders(req.headers);
|
|
7653
|
-
let body;
|
|
7654
|
-
if (req.method && ["POST", "PUT", "PATCH"].includes(req.method)) {
|
|
7655
|
-
body = await new Promise((resolve, reject) => {
|
|
7656
|
-
let data = "";
|
|
7657
|
-
req.on("data", (chunk) => data += chunk);
|
|
7658
|
-
req.on("end", () => resolve(data));
|
|
7659
|
-
req.on("error", reject);
|
|
7660
|
-
});
|
|
7661
|
-
}
|
|
7662
|
-
return new Request(url, {
|
|
7663
|
-
method: req.method,
|
|
7664
|
-
headers,
|
|
7665
|
-
body: body || undefined
|
|
7666
|
-
});
|
|
7667
|
-
}
|
|
7668
|
-
async function sendWebResponse(webRes, nodeRes) {
|
|
7669
|
-
nodeRes.statusCode = webRes.status;
|
|
7670
|
-
webRes.headers.forEach((value, key) => {
|
|
7671
|
-
nodeRes.setHeader(key, value);
|
|
7672
|
-
});
|
|
7673
|
-
const body = await webRes.text();
|
|
7674
|
-
nodeRes.end(body);
|
|
7675
|
-
}
|
|
7676
|
-
function toNodeHandler(config) {
|
|
7677
|
-
const oauthHandler = new OAuthHandler(config);
|
|
7678
|
-
return async (req, res) => {
|
|
7679
|
-
try {
|
|
7680
|
-
const webReq = await toWebRequest(req);
|
|
7681
|
-
const url = new URL(webReq.url);
|
|
7682
|
-
const segments = url.pathname.split("/").filter(Boolean);
|
|
7683
|
-
const action = segments[segments.length - 1];
|
|
7684
|
-
let webRes;
|
|
7685
|
-
if (req.method === "POST") {
|
|
7686
|
-
if (action === "authorize") {
|
|
7687
|
-
const result = await oauthHandler.handleAuthorize(webReq);
|
|
7688
|
-
const headers = { "Content-Type": "application/json" };
|
|
7689
|
-
if (result.setCookie) {
|
|
7690
|
-
headers["Set-Cookie"] = result.setCookie;
|
|
7691
|
-
}
|
|
7692
|
-
webRes = new Response(JSON.stringify(result), {
|
|
7693
|
-
status: 200,
|
|
7694
|
-
headers
|
|
7695
|
-
});
|
|
7696
|
-
} else if (action === "callback") {
|
|
7697
|
-
const result = await oauthHandler.handleCallback(webReq);
|
|
7698
|
-
const headers = { "Content-Type": "application/json" };
|
|
7699
|
-
if (result.clearCookie) {
|
|
7700
|
-
headers["Set-Cookie"] = result.clearCookie;
|
|
7701
|
-
}
|
|
7702
|
-
webRes = new Response(JSON.stringify(result), {
|
|
7703
|
-
status: 200,
|
|
7704
|
-
headers
|
|
7705
|
-
});
|
|
7706
|
-
} else if (action === "disconnect") {
|
|
7707
|
-
const authHeader = webReq.headers.get("authorization");
|
|
7708
|
-
if (!authHeader || !authHeader.startsWith("Bearer ")) {
|
|
7709
|
-
webRes = new Response(JSON.stringify({ error: "Missing or invalid Authorization header" }), {
|
|
7710
|
-
status: 400,
|
|
7711
|
-
headers: { "Content-Type": "application/json" }
|
|
7712
|
-
});
|
|
7713
|
-
} else {
|
|
7714
|
-
const accessToken = authHeader.substring(7);
|
|
7715
|
-
const body = await webReq.json();
|
|
7716
|
-
const { provider } = body;
|
|
7717
|
-
if (!provider) {
|
|
7718
|
-
webRes = new Response(JSON.stringify({ error: "Missing provider in request body" }), {
|
|
7719
|
-
status: 400,
|
|
7720
|
-
headers: { "Content-Type": "application/json" }
|
|
7721
|
-
});
|
|
7722
|
-
} else {
|
|
7723
|
-
const result = await oauthHandler.handleDisconnect({ provider }, accessToken, webReq);
|
|
7724
|
-
webRes = new Response(JSON.stringify(result), {
|
|
7725
|
-
status: 200,
|
|
7726
|
-
headers: { "Content-Type": "application/json" }
|
|
7727
|
-
});
|
|
7728
|
-
}
|
|
7729
|
-
}
|
|
7730
|
-
} else {
|
|
7731
|
-
webRes = new Response(JSON.stringify({ error: `Unknown action: ${action}` }), {
|
|
7732
|
-
status: 404,
|
|
7733
|
-
headers: { "Content-Type": "application/json" }
|
|
7734
|
-
});
|
|
7735
|
-
}
|
|
7736
|
-
} else if (req.method === "GET" && action === "status") {
|
|
7737
|
-
const provider = url.searchParams.get("provider");
|
|
7738
|
-
const authHeader = webReq.headers.get("authorization");
|
|
7739
|
-
if (!provider) {
|
|
7740
|
-
webRes = new Response(JSON.stringify({ error: "Missing provider query parameter" }), {
|
|
7741
|
-
status: 400,
|
|
7742
|
-
headers: { "Content-Type": "application/json" }
|
|
7743
|
-
});
|
|
7744
|
-
} else if (!authHeader || !authHeader.startsWith("Bearer ")) {
|
|
7745
|
-
webRes = new Response(JSON.stringify({ error: "Missing or invalid Authorization header" }), {
|
|
7746
|
-
status: 400,
|
|
7747
|
-
headers: { "Content-Type": "application/json" }
|
|
7748
|
-
});
|
|
7749
|
-
} else {
|
|
7750
|
-
const accessToken = authHeader.substring(7);
|
|
7751
|
-
const result = await oauthHandler.handleStatus(provider, accessToken);
|
|
7752
|
-
webRes = new Response(JSON.stringify(result), {
|
|
7753
|
-
status: 200,
|
|
7754
|
-
headers: { "Content-Type": "application/json" }
|
|
7755
|
-
});
|
|
7756
|
-
}
|
|
7757
|
-
} else {
|
|
7758
|
-
webRes = new Response(JSON.stringify({ error: `Unknown action: ${action}` }), {
|
|
7759
|
-
status: 404,
|
|
7760
|
-
headers: { "Content-Type": "application/json" }
|
|
7761
|
-
});
|
|
7762
|
-
}
|
|
7763
|
-
await sendWebResponse(webRes, res);
|
|
7764
|
-
} catch (error) {
|
|
7765
|
-
console.error("[OAuth Handler] Error:", error);
|
|
7766
|
-
const errorRes = new Response(JSON.stringify({ error: error.message || "Internal server error" }), {
|
|
7767
|
-
status: 500,
|
|
7768
|
-
headers: { "Content-Type": "application/json" }
|
|
7769
|
-
});
|
|
7770
|
-
await sendWebResponse(errorRes, res);
|
|
7771
|
-
}
|
|
7772
|
-
};
|
|
7773
|
-
}
|
|
7774
|
-
|
|
7775
7687
|
// solid-start.ts
|
|
7776
7688
|
init_server();
|
|
7777
7689
|
|
|
@@ -7806,11 +7718,12 @@ var createTanStackOAuthHandler = toTanStackStartHandler;
|
|
|
7806
7718
|
// index.ts
|
|
7807
7719
|
init_nextjs();
|
|
7808
7720
|
export {
|
|
7721
|
+
toWebRequest,
|
|
7809
7722
|
toTanStackStartHandler,
|
|
7810
7723
|
toSvelteKitHandler,
|
|
7811
7724
|
toSolidStartHandler,
|
|
7812
|
-
toNodeHandler,
|
|
7813
7725
|
svelteKitHandler,
|
|
7726
|
+
sendWebResponse,
|
|
7814
7727
|
fromNodeHeaders,
|
|
7815
7728
|
createTanStackOAuthHandler,
|
|
7816
7729
|
createNextOAuthHandler,
|