import type { Request } from 'express' import { ValidationError } from './errors' export function getRawBodyString(req: Request) { if (!Buffer.isBuffer(req.body)) { throw new ValidationError('Webhook route must be mounted with express.raw before JSON parsing') } return req.body.toString('utf8') } export function parseRawJsonBody(req: Request): T { const rawBody = getRawBodyString(req) try { return JSON.parse(rawBody) as T } catch { throw new ValidationError('Malformed webhook JSON') } }