Files
sap-webhook-api/README.md
T

66 lines
2.6 KiB
Markdown
Raw Normal View History

2026-09-16 07:41:25 -05:00
# 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.