# 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/sap` por **HTTPS** (certificado autofirmado en `certs/`), 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](https://cloudevents.io/). - Guarda cada notificación como: - un archivo `.json` en `data/events/` (uno por evento, nombrado por su `id`), y - una fila en Postgres (tabla `webhook_events`), para que [`sap-intercompany-worker`](../sap-intercompany-worker) la pueda procesar de forma asíncrona. - Soporta autenticación `None` (default) o `HMAC` (`X-B1-Webhook-Signature`, HMAC-SHA256), activable/desactivable con un script que sincroniza SAP y la propia API — ver `docs/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 ```bash 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://: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 modo `None` y en modo `HMAC`. - `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.