Der Webhook-Kanal
Der Webhook-Kanal informiert Ihre eigenen Systeme, wenn Dateien neu erzeugt wurden. Bei jeder Neuerzeugung sendet Sichta ein signiertes JSON-Payload per POST an eine URL Ihrer Wahl — mit Dateiliste, Hashes und einem Download-Link für das Paket.
Einrichtung
- In der App: Ihre Website → Kanal → Webhook.
- Endpunkt eintragen. Er muss
httpssein — die Signatur beweist, wer gesendet hat, aber nur TLS hält die Dateiliste unterwegs privat. - Speichern. Das Signaturgeheimnis wird einmal angezeigt; sichern Sie es, bevor Sie die Seite verlassen. Erneutes Speichern erzeugt ein neues Geheimnis — ein Webhook, der zu einem anderen Dienst umzieht, kann den alten Schlüssel nicht weiterverwenden.
Das Payload
{
"event": "artifact_set.created",
"site": { "hostname": "ihre-website.de" },
"artifactSet": {
"number": 7,
"createdAt": "2026-08-20T04:31:02.000Z",
"files": [{ "path": "llms.txt", "sha256": "…", "bytes": 1299 }]
},
"downloadUrl": "https://web.sichta.gigliotti.software/bundles/…"
}
Die downloadUrl ist signiert und 24 Stunden gültig. Sie funktioniert nicht mehr, wenn das Abonnement über die Nachfrist hinaus beendet ist — wie bei den verwalteten Routen.
Signatur prüfen
Jede Anfrage trägt Sichta-Signature: t=<unix>,v1=<hex>; v1 ist HMAC-SHA256 über <t>.<roher Body> mit Ihrem Geheimnis. Prüfen Sie gegen den rohen Body, vor dem JSON-Parsen — erneutes Serialisieren ändert die Bytes, und die Signatur passt dann nicht mehr.
import { createHmac, timingSafeEqual } from "node:crypto";
function verify(rawBody, header, secret) {
const parts = Object.fromEntries(header.split(",").map((kv) => kv.split("=")));
if (Math.abs(Date.now() / 1000 - Number(parts.t)) > 300) return false;
const expected = createHmac("sha256", secret).update(`${parts.t}.${rawBody}`).digest("hex");
const a = Buffer.from(expected, "hex");
const b = Buffer.from(parts.v1, "hex");
return a.length === b.length && timingSafeEqual(a, b);
}
Weisen Sie alles ab, was älter als fünf Minuten ist: Der Zeitstempel steckt genau deshalb im signierten Material, damit ein abgefangenes Payload nicht wiederholbar bleibt.
Wiederholungen
Eine fehlgeschlagene Zustellung wird dreimal wiederholt, im Abstand von einer Sekunde, jeweils verdoppelt. 5xx und Verbindungsfehler werden wiederholt, 4xx nicht — Ihr Endpunkt hat die Anfrage verstanden und abgelehnt; sie zu wiederholen wäre nur Lärm. Fehler werden auf der Kanal-Seite gemeldet.
Die Zustellung blockiert nie eine Neuerzeugung: Ist Ihr Endpunkt nicht erreichbar, existiert das neue Set trotzdem und bleibt in der App herunterladbar.