fix: read raw request + body via h3 context for discord/telegram webhooks

This commit is contained in:
RhenCloud 2026-08-13 18:13:55 +08:00
parent b139712a91
commit 2106aad3b8
No known key found for this signature in database
GPG key ID: A574A617378C4E0B
3 changed files with 47 additions and 8 deletions

View file

@ -1,6 +1,18 @@
import { readRawBody } from "h3";
import { handleInteractionRequest } from "../../lib/drivers/discord/interactions";
import { cfEnv } from "../../lib/cf";
import { cfEnv, rawRequest } from "../../lib/cf";
export default defineEventHandler((event) =>
handleInteractionRequest(event.web!.request!, cfEnv(event)),
);
export default defineEventHandler(async (event) => {
// The raw Request is provided for headers/URL, but nitro consumes its body
// while buffering the payload — rebuild a fresh Request with the body from
// h3's internal buffers so the handler can read it (signature verification
// needs the exact raw bytes).
const source = rawRequest(event);
const body = await readRawBody(event, "utf8");
const request = new Request(source.url, {
method: source.method,
headers: source.headers,
body,
});
return handleInteractionRequest(request, cfEnv(event));
});