Verificar webhooks

Valida el cuerpo original y recibe un evento con tipos discriminados.

Verifica antes de procesar

Verificación en tu servidor
import {
  verifyWebhook,
  WebhookVerificationError,
} from "@boelabs/billete-sdk/webhooks";

export async function readBilleteEvent(request: Request, secret: string) {
  return verifyWebhook({
    payload: await request.text(),
    headers: request.headers,
    secret,
  });
}

Obtén secret desde la configuración privada de tu servidor. No hagas request.json() ni serialices de nuevo el cuerpo antes de verificarlo.

Maneja firmas inválidas

verifyWebhook lanza WebhookVerificationError si no puede validar la entrega. En tu handler HTTP, devuelve un error 400 para ese caso. Los errores de procesamiento deben seguir siendo errores para permitir un nuevo intento.

La tolerancia temporal predeterminada es de cinco minutos, configurable con toleranceSeconds. Mantén sincronizado el reloj de tu servidor.

Usa el evento tipado

Después de verificar
if (event.type === "checkout.completed") {
  const checkout = event.data;
  // Persist the event and fulfillment job atomically.
}

if (event.type === "subscription.renewed") {
  const subscription = event.data;
  // Update access from the confirmed subscription.
}

event.data se estrecha según event.type. La firma demuestra autenticidad, pero no sustituye tu deduplicación por event.id.

Antes de responder 2xx

Comprueba el entorno esperado y guarda de forma duradera el evento y el trabajo que realizará tu aplicación. Procesa cada efecto una sola vez, aunque el webhook vuelva a llegar.

También puedes usar billete.webhooks.verify(payload, headers, secret) con el cliente de servidor. Consulta el catálogo de eventos.