API NestJS que recibe el Webhook Messenger de SAP Business One (CloudEvents), valida HMAC opcional y guarda cada notificacion local (data/events/) e inserta en Postgres (webhook_events). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2.6 KiB
2.6 KiB
sap-webhook-api
API en NestJS que escucha el Webhook Messenger de SAP Business One (Service Layer) y captura cada Event Notification que llega.
Qué hace
- Expone
POST /webhooks/sappor HTTPS (certificado autofirmado encerts/), pensado para responder rápido y no arriesgar el timeout de 10s que impone el Webhook Messenger de SAP. - Soporta el payload real de SAP: un array de eventos en formato CloudEvents.
- Guarda cada notificación como:
- un archivo
.jsonendata/events/(uno por evento, nombrado por suid), y - una fila en Postgres (tabla
webhook_events), para quesap-intercompany-workerla pueda procesar de forma asíncrona.
- un archivo
- Soporta autenticación
None(default) oHMAC(X-B1-Webhook-Signature, HMAC-SHA256), activable/desactivable con un script que sincroniza SAP y la propia API — verdocs/EJECUCION.md. - Expone también
GET /webhooks/sap(chequeo de vida / handshake) porque SAP lo usa para validar el endpoint antes de despachar eventos.
Quick start
npm install
cp .env.example .env # completar con los datos reales de tu Service Layer
# Postgres compartida con sap-intercompany-worker (una sola vez, desde la raíz del repo)
cd .. && docker compose up -d && cd sap-webhook-api
npm run start
La API queda escuchando en https://<tu-ip>:3000/webhooks/sap.
Estructura
src/
main.ts # bootstrap, HTTPS
webhooks/
webhooks.controller.ts # GET/POST /webhooks/sap
webhook-events.repository.ts # insert a Postgres (webhook_events)
certs/ # certificado autofirmado (key.pem / cert.pem)
data/events/ # cada notificación, como .json
scripts/ # enable/disable-hmac-auth.sh
tools/sl.http # requests de referencia contra el Service Layer
docs/ # bitácora, arquitectura, guía de ejecución
Documentación
docs/PASOS-REALIZADOS.md— bitácora paso a paso de cómo se armó el proyecto y se configuró la suscripción en SAP.docs/EJECUCION.md— cómo correr la API en modoNoney en modoHMAC.docs/ARQUITECTURA.md/docs/ARQUITECTURA.pdf— diagrama de arquitectura (servidores, puertos, certificados).tools/sl.http— requests de ejemplo (Login, EventSubscriptions, HMAC) para usar con la extensión REST Client / httpyac.
Para el diagnóstico del bug de SAP que bloqueaba la entrega de eventos
(DATEFORMAT), y el resto del contexto de la sesión, ver CLAUDE.md en la
raíz del repo.