Webhooks de saída
Eventos assinados, retry controlado, comportamento fail-closed e proteções contra SSRF.
Como interpretar este documento
Este conteúdo descreve o comportamento técnico e metodológico implementado ou explicitamente planejado no produto. Quando um controle depende de configuração, provider, secret, contrato ou aprovação jurídica, essa dependência deve permanecer visível.
Eventos
Os eventos atuais incluem measurement.completed, measurement.failed, recommendation.updated, alert.updated e billing.invoice.paid.
Assinatura
Com WEBHOOK_SIGNING_SECRET configurado, o secret do endpoint é derivado do secret mestre de runtime e do ID do endpoint. A assinatura usa HMAC-SHA256 sobre timestamp + payload.
Fail-closed
Sem WEBHOOK_SIGNING_SECRET, o registro de novos webhooks permanece bloqueado em vez de entregar callbacks sem assinatura.
Proteção SSRF
Endpoints exigem HTTPS; localhost, ranges privados, nomes .local e DNS que resolve para IPv4 privado são rejeitados; redirects são desabilitados.
Retry
O worker usa número limitado de tentativas e backoff. O corpo de resposta do receptor não é persistido, reduzindo ingestão acidental de dados externos.
Idempotência
WebhookDelivery usa chave derivada de endpoint, tipo de evento e ID do evento para evitar enfileiramento duplicado para o mesmo destino.