From a42f2234d4fbc3b2008204628c52783ef4a70751 Mon Sep 17 00:00:00 2001 From: zeer Date: Sun, 12 Jul 2026 17:01:20 +0800 Subject: [PATCH] Fix EdgeOne webhook query parsing --- edge-functions/api/[[default]].js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/edge-functions/api/[[default]].js b/edge-functions/api/[[default]].js index cf2341e..ab564b3 100644 --- a/edge-functions/api/[[default]].js +++ b/edge-functions/api/[[default]].js @@ -79,6 +79,22 @@ function getRequestToken(request, url) { return request.headers.get("x-webhook-token") || url.searchParams.get("token") || ""; } +function queryToObject(search = "") { + const query = {}; + const raw = String(search || "").replace(/^\?/, ""); + if (!raw) return query; + + for (const pair of raw.split("&")) { + if (!pair) continue; + const [key, ...valueParts] = pair.split("="); + const name = decodeURIComponent(key.replace(/\+/g, " ")); + const value = decodeURIComponent(valueParts.join("=").replace(/\+/g, " ")); + query[name] = value; + } + + return query; +} + function timingSafeEqual(a, b) { const left = String(a); const right = String(b); @@ -172,7 +188,7 @@ async function listServices(kv) { async function updateService(request, url, kv, idFromPath) { const body = request.method === "GET" ? {} : await readBody(request); - const query = Object.fromEntries(url.searchParams); + const query = queryToObject(url.search); const result = serviceFromWebhook(idFromPath, query, body); if (result.error) return json({ ok: false, error: result.error }, 400);