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>
67 lines
2.6 KiB
Markdown
67 lines
2.6 KiB
Markdown
# 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://<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 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.
|