- Markenrecht-Monitoring (Python) — täglich URLs capturen - Webhook-Receiver (Node.js Express) — capture.ready Events archivieren - WordPress-Plugin (PHP) — Captures aus dem WP-Backend
61 lines
1.8 KiB
Markdown
61 lines
1.8 KiB
Markdown
# Webhook-Receiver für hightrusted CAPTURE
|
|
|
|
Minimaler Express-Server, der `capture.ready` / `capture.failed` Events
|
|
entgegennimmt, die HMAC-Signatur verifiziert und das fertige PDF im Archiv
|
|
ablegt.
|
|
|
|
## Use-Case
|
|
|
|
Wenn du Captures mit `mode=webhook` anlegst, liefert hightrusted das fertige
|
|
Ergebnis per HTTP-POST aus — du musst nicht pollen. Dieser Server nimmt das
|
|
entgegen, prüft, archiviert.
|
|
|
|
## Setup
|
|
|
|
```bash
|
|
npm install
|
|
export HIGHTRUSTED_API_KEY=ht_live_...
|
|
export HIGHTRUSTED_WEBHOOK_SECRET=wh_secret_...
|
|
export ARCHIVE_DIR=./archiv
|
|
|
|
npm start
|
|
```
|
|
|
|
Der Server lauscht auf Port 8000 (per `PORT` änderbar). Der Endpoint heißt
|
|
`/webhooks/capture`.
|
|
|
|
## Public Reachability
|
|
|
|
Lokal läuft der Server auf `localhost`. Damit hightrusted's Server ihn erreichen,
|
|
brauchst du eine öffentlich erreichbare URL. Drei Optionen:
|
|
|
|
1. **Produktion:** hinter nginx auf einem öffentlichen Server, mit TLS
|
|
2. **Entwicklung:** [ngrok](https://ngrok.com) — `ngrok http 8000`
|
|
3. **Eigene Tunnel:** Cloudflare Tunnel, Tailscale Funnel, etc.
|
|
|
|
## Capture mit Webhook anlegen
|
|
|
|
```bash
|
|
curl -X POST https://capture.hightrusted.net/api/v1/captures \
|
|
-H "Authorization: Bearer ht_live_..." \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"url": "https://example.com",
|
|
"mode": "webhook",
|
|
"webhook_url": "https://your-domain.tld/webhooks/capture",
|
|
"reference": "case-001"
|
|
}'
|
|
```
|
|
|
|
## Sicherheit
|
|
|
|
- **Signatur immer prüfen** — sonst akzeptiert der Server gespoofte Callbacks.
|
|
- **Schnell mit 200 antworten** — der Server muss in <10 s antworten, sonst
|
|
retried hightrusted. Long-Running-Tasks (PDF herunterladen, in Archiv legen)
|
|
laufen asynchron, *nachdem* der 200 raus ist.
|
|
- **Idempotenz** — derselbe Event kann mehrfach kommen (bei Retry). In Produktion
|
|
solltest du eine Tabelle mit gesehenen `event_id`s pflegen.
|
|
|
|
## Lizenz
|
|
|
|
MIT.
|