Receptor de prueba para sap-legacy-webhook-emulator sin depender de sap-webhook-api: recibe el POST con el CloudEvent y guarda cada notificacion en data/events/. Sin framework, HTTP o HTTPS autodetectado. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
sap-test-legacy-webhook
Receptor de prueba para probar sap-legacy-webhook-emulator
sin necesitar una instancia real de sap-webhook-api — mismo comportamiento
núcleo (recibe el POST con el CloudEvent, guarda cada notificación como
.json en data/events/), pero sin framework y sin autenticación por
ahora.
✅ Verificado de punta a punta contra un SAP Business One sobre HANA real:
capturó y guardó correctamente un evento real de Items
(sap.b1.Items.Updated.v1), tanto en HTTP como en HTTPS con certificado
autofirmado.
Quick start
npm install
cp .env.example .env # PORT, default 4100
npm start
Después, dar de alta una suscripción en sap-legacy-webhook-emulator
apuntando acá:
cd ../sap-legacy-webhook-emulator
npx tsx scripts/manage-subscriptions.ts subscription:add <webhookId> http://127.0.0.1:4100/webhooks/sap
npx tsx scripts/manage-subscriptions.ts filter:add <webhookId> <BizObject> <TransType> <ObjectType>
npm run run-once
Los eventos recibidos quedan en data/events/<id>.json (uno por
notificación, nombrado por el id del CloudEvent).
HTTP / HTTPS
npm start # autodetecta: HTTPS si existen certs/*.pem, si no HTTP
npm run start:http # fuerza HTTP, ignora los certs aunque existan
npm run start:https # fuerza HTTPS — error claro si faltan los certs
HTTPS usa un certificado autofirmado. Sirve para probar el caso real (SAP
suele usar certificados autofirmados) y confirmar que el dispatcher los
acepta bien (ya ignora la validación de certificado —
rejectUnauthorized: false, ver
sap-legacy-webhook-emulator/src/dispatcher/send-webhook.ts).
Regenerar el certificado:
openssl req -x509 -newkey rsa:2048 -keyout certs/key.pem -out certs/cert.pem \
-days 3650 -nodes -subj "/CN=127.0.0.1" \
-addext "subjectAltName=DNS:localhost,IP:127.0.0.1"
Con HTTPS activo, la suscripción apunta a https://127.0.0.1:4100/webhooks/sap
en vez de http://.... Para cambiar la URL de una suscripción que ya
existe (sin recrearla) al pasar de HTTP a HTTPS o viceversa:
cd ../sap-legacy-webhook-emulator
npx tsx scripts/manage-subscriptions.ts subscription:update-url <webhookId> https://127.0.0.1:4100/webhooks/sap
Pendiente (a propósito, no es un olvido)
Sin autenticación por ahora. Si más adelante hace falta probar HMAC,
agregar en src/server.ts la misma verificación que ya tiene
sap-webhook-api/src/webhooks/webhooks.controller.ts (X-B1-Webhook-Signature,
HMAC-SHA256 sobre el body crudo, activada solo si existe
HMAC_SECRET_KEY).
Stack
Node/TypeScript puro (node:http, sin framework), ejecutado con tsx —
mismo criterio de simplicidad que el resto de los proyectos de prueba de
este workspace.