Nextfy Monitor

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.