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

@ -14,6 +14,25 @@ export function cfEnv(event: H3Event): Env {
return env;
}
/**
* The raw web `Request` for this event. On the Cloudflare module preset it
* lives in `event.context.cloudflare.request`; on other web runtimes h3
* exposes it as `event.web.request`.
*
* NOTE: nitro pre-reads the request body into its internal buffers, so the
* returned Request's body stream is already consumed use `readRawBody()`
* (or `readBody()`) to get the payload instead of `request.text()`.
*/
export function rawRequest(event: H3Event): Request {
const cf = (event.context.cloudflare as { request?: Request } | undefined)?.request;
const web = event.web?.request;
const req = cf ?? web;
if (!req) {
throw new Error("Raw request unavailable — run via wrangler dev/deploy");
}
return req;
}
/** `waitUntil` from the CF execution context (no-op outside workers). */
export function cfWaitUntil(event: H3Event): (promise: Promise<unknown>) => void {
const cloudflare = event.context.cloudflare as