Initial commit: sap-webhook-api
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>
This commit is contained in:
commit
5e0df73477
28 files changed
+11773
No files matched your search
@@ -0,0 +1,66 @@
|
||||
# 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.
|
||||
Reference in new issue
Block a user