Ir al contenido
angel.library

Webhooks, SSE y WebSockets

Estas técnicas resuelven direcciones diferentes:

TécnicaDirecciónCaso
WebhookServidor externo → tu servidorPago confirmado
SSEServidor → navegador sobre HTTPProgreso o tokens de IA
WebSocketBidireccional y persistenteColaboración o juego

Un webhook se considera una entrada no confiable. Verifica su firma sobre el cuerpo crudo, fecha y secreto compartido antes de parsear o procesar.

const expected = createHmac("sha256", secret)
.update(`${timestamp}.${rawBody}`)
.digest("hex")
if (!timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
throw new UnauthorizedError()
}

Comprueba tolerancia de tiempo para reducir replay, conserva el identificador del evento para deduplicar y responde rápido. El procesamiento largo se envía a una cola. No confíes únicamente en IPs porque pueden cambiar o atravesar proxies.

SSE (Server-Sent Events) envía eventos de texto por una respuesta HTTP mantenida abierta:

Content-Type: text/event-stream
Cache-Control: no-cache
id: 42
event: progress
data: {"percent":60}

Define heartbeat, cancelación y reconexión. Last-Event-ID puede ayudar a reanudar cuando los eventos se conservan. Algunos proxies agrupan buffers; comprueba la infraestructura real.

WebSocket permite mensajes en ambos sentidos, pero exige autenticar la conexión, autorizar cada canal, limitar tamaño y frecuencia, gestionar presencia y manejar múltiples instancias mediante un sistema compartido. No lo elijas solo por ser “tiempo real”: para notificaciones unidireccionales, SSE suele ser más simple.