Integrações
Webhooks assinados
Receba eventos de indisponibilidade e recuperação com autenticidade, janela temporal e idempotência.
Headers
- X-Nextfy-Signature
- HMAC SHA-256 do timestamp e corpo bruto.
- X-Nextfy-Timestamp
- Epoch usado para bloquear replay antigo.
- X-Nextfy-Delivery
- Identificador estável para deduplicação.
Validação segura
Leia o corpo bruto, rejeite timestamps com mais de cinco minutos, compare a assinatura em tempo constante e deduplique o delivery. Responda 2xx somente depois de persistir o recebimento.
Node.js
import { createHmac, timingSafeEqual } from 'node:crypto';
const timestamp = request.headers.get('x-nextfy-timestamp');
const signature = request.headers.get('x-nextfy-signature');
const delivery = request.headers.get('x-nextfy-delivery');
const rawBody = await request.text();
if (!timestamp || !signature || !delivery) throw new Error('missing_headers');
if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) throw new Error('stale_request');
const expected = createHmac('sha256', process.env.NEXTFY_WEBHOOK_SECRET)
.update(timestamp + '.' + rawBody)
.digest('hex');
const received = signature.replace(/^sha256=/, '');
if (expected.length !== received.length ||
!timingSafeEqual(Buffer.from(expected), Buffer.from(received))) {
throw new Error('invalid_signature');
}
// Grave delivery com chave única antes de processar para garantir idempotência.Operação
O Nextfy Monitor tenta novamente falhas transitórias mantendo o mesmo delivery. Seu endpoint deve aceitar repetição sem duplicar efeitos. Nunca registre o secret ou headers de autenticação.