Make EdgeOne request parsing compatible

This commit is contained in:
zeer
2026-07-12 17:02:50 +08:00
parent a42f2234d4
commit c78c7eb00b

View File

@@ -73,10 +73,22 @@ function getWebhookToken(env = {}) {
return env.WEBHOOK_TOKEN || globalThis.WEBHOOK_TOKEN || ""; return env.WEBHOOK_TOKEN || globalThis.WEBHOOK_TOKEN || "";
} }
function getHeader(request, name) {
const headers = request.headers || {};
if (typeof headers.get === "function") return headers.get(name) || "";
const lowerName = name.toLowerCase();
for (const key of Object.keys(headers)) {
if (key.toLowerCase() === lowerName) return headers[key] || "";
}
return "";
}
function getRequestToken(request, url) { function getRequestToken(request, url) {
const auth = request.headers.get("authorization") || ""; const auth = getHeader(request, "authorization");
if (auth.toLowerCase().startsWith("bearer ")) return auth.slice(7).trim(); if (auth.toLowerCase().startsWith("bearer ")) return auth.slice(7).trim();
return request.headers.get("x-webhook-token") || url.searchParams.get("token") || ""; return getHeader(request, "x-webhook-token") || queryToObject(url.search).token || "";
} }
function queryToObject(search = "") { function queryToObject(search = "") {
@@ -113,10 +125,10 @@ function isAuthorized(request, url, env) {
} }
async function readBody(request) { async function readBody(request) {
const raw = (await request.text()).trim(); const raw = typeof request.text === "function" ? (await request.text()).trim() : "";
if (!raw) return {}; if (!raw) return {};
const contentType = request.headers.get("content-type") || ""; const contentType = getHeader(request, "content-type");
if (contentType.includes("application/json")) return JSON.parse(raw); if (contentType.includes("application/json")) return JSON.parse(raw);
if (contentType.includes("application/x-www-form-urlencoded")) { if (contentType.includes("application/x-www-form-urlencoded")) {
return Object.fromEntries(new URLSearchParams(raw)); return Object.fromEntries(new URLSearchParams(raw));