Webhooks — Zkrinet-plugin
På Zkrinet: lägg till blocket under Byggblock i panelen — ett klick, din egen kod rörs inte och en ögonblicksbild tas först. Installationsstegen nedan gäller om du kör PocketBase själv, till exempel efter en export.
När något skapas, ändras eller raderas i din app skickas ett signerat anrop till en adress du väljer — Slack, Zapier, Make, din egen server. Testat mot PocketBase 0.40.4. Det här finns inte i PocketBase.
#Installera
Kopiera pb_hooks/ och pb_migrations/ in i projektet och starta om.
#Lägg till en mottagare
I adminpanelen, samlingen zk_webhooks:
- url — dit anropet skickas (https)
- samling — namnet på samlingen, eller
*för alla - handelser —
create,update,delete - hemlighet — minst 16 tecken, används för signaturen
- aktiv — kryssa i
#Det som skickas
POST med JSON:
{ "id": "unikt-id", "handelse": "create", "samling": "anteckningar", "tid": "2026-11-07T06:00:00Z", "post": { ... } }
post är posten som en utomstående ser den: dolda fält, lösenord och e-post (om den inte är publik) skickas aldrig.
#Kontrollera signaturen (gör alltid det)
Huvudena X-Zk-Tid (unixtid) och X-Zk-Signatur (sha256=…). Signaturen är HMAC-SHA256 med din hemlighet över tid + "." + kroppen:
const vantad = "sha256=" + crypto.createHmac("sha256", HEMLIGHET).update(tid + "." + raKropp).digest("hex")
// jämför med X-Zk-Signatur, och neka om tid är äldre än 5 minuter
Samma id kan komma mer än en gång vid omförsök — spara de id du redan hanterat.
#Om mottagaren inte svarar
Anropet görs direkt (5 sekunders gräns). Svarar mottagaren inte med 2xx görs nya försök efter 1, 5, 30, 120 och 720 minuter — totalt 6 försök, med exakt samma kropp. Allt syns i zk_webhook_logg (levererad / väntar / gav upp).
#Säkerhet
- Anrop till privata nät blockeras: localhost, 10.x, 172.16–31.x, 192.168.x, 100.64.x, 169.254.x (molnens metadata-tjänst),
.local/.internal, och all IPv6 utom vanliga publika adresser — även IPv4 förklätt som IPv6. Testat mot kända knep. - Det skyddar inte mot ett värdnamn vars DNS pekar inåt. Det skyddet sitter i Zkrinets brandvägg, inte i pluginet.
- Mottagare och logg är bara läsbara för superuser.
#Begränsningar
- Anropet sker under själva sparningen: en långsam mottagare kan göra sparningen upp till 5 sekunder långsammare.