diff --git a/edge-functions/api/[[default]].js b/edge-functions/api/[[default]].js index ab564b3..0f1c2ea 100644 --- a/edge-functions/api/[[default]].js +++ b/edge-functions/api/[[default]].js @@ -73,10 +73,22 @@ function getWebhookToken(env = {}) { 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) { - const auth = request.headers.get("authorization") || ""; + const auth = getHeader(request, "authorization"); 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 = "") { @@ -113,10 +125,10 @@ function isAuthorized(request, url, env) { } async function readBody(request) { - const raw = (await request.text()).trim(); + const raw = typeof request.text === "function" ? (await request.text()).trim() : ""; 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/x-www-form-urlencoded")) { return Object.fromEntries(new URLSearchParams(raw));