Notificări
Libre WebUI păstrează un inbox persistent per utilizator, astfel încât activitatea echipei — mențiuni, mesaje directe, partajări, automatizări eșuate și mementouri — să ajungă chiar dacă pagina relevantă este închisă.
Inbox-ul
Notificările sunt rânduri de bază de date: titlu și corp criptate, limită 500 per utilizator (cele vechi eliminate) și cheie sursă opțională pentru deduplicare. Suprafața REST listează, numără necitite, marchează una/toate și șterge.
Livrarea live folosește fluxul persistent notify:<userId> prin
GET /api/notifications/events (SSE). Identitatea vine din sesiunea autentificată,
niciodată din client, iar inbox-ul SQL rămâne sursa adevărului. Un eveniment ratat se
recuperează citind lista, nu reluând fluxul.
Surse de notificări
| Tip | Când se produce |
|---|---|
channel-dm | Cineva trimite mesaj direct |
channel-mention | Cineva vă @mentions sau răspunde mesajului |
channel-invite | Sunteți adăugat într-un canal |
share | Cineva partajează o resursă |
automation-failed | O automatizare eșuează, dacă nu a renunțat la notificare |
calendar-reminder | Un eveniment ajunge la momentul mementoului |
work-run-finished | Un agent Work angajat termină |
work-run-attention | Agentul cere input sau întâlnește o eroare |
work-takeover | Agentul cere preluarea ecranului |
work-approval | O execuție Work așteaptă aprobarea unei acțiuni cu efect secundar |
system | Anunț la nivel de instanță |
Se publică numai utilizatorului afectat. O mențiune pentru cineva care nu este membru nu produce nimic.
Webhook-uri de ieșire
Administratorii pot înregistra ținte pentru evenimente de echipă.
- Ieșire protejată. Aceeași politică precum serverele de unelte: URL exact, fără
redirect și fără adrese private/link-local, exceptând host-uri permise explicit prin
TOOLS_PRIVATE_NETWORK_ALLOWLIST. DNS se rezolvă și verifică la fiecare livrare. - Semnate. Cu secret, fiecare livrare are
X-Libre-Signature: sha256=<hmac>calculat pe corpul exact. - Redactate. Învelișul conține tipul, titlul, ID-uri și timestamp-uri. Corpurile, mesajele, prompturile și documentele nu părăsesc instanța.
- Persistente. Job-uri durabile cu retry limitat; 5xx se repetă, 4xx este verdict final.
- Limitate. Fiecare țintă se abonează la tipuri specifice sau
*.
Push în browser
Settings → Notifications înregistrează browserul pentru Web Push, astfel încât mențiunile și mementourile ajung cu fila închisă.
- VAPID (RFC 8292). Serverul semnează cu o pereche ES256 creată o dată și criptată
sau fixată prin
VAPID_PUBLIC_KEY/VAPID_PRIVATE_KEY(VAPID_SUBJECTpentru contact). - Payload criptat (RFC 8291). Fiecare mesaj se criptează aes128gcm pentru cheile dispozitivului; serviciul retransmite ciphertext ilizibil.
- Per dispozitiv și sesiune. Abonamentul aparține browserului și sesiunii. Logout sau "sign out other sessions" elimină înregistrarea. Endpoint-urile sunt criptate cu token de căutare și trebuie să fie HTTPS publice.
- Persistent. Livrarea are retry; 404/410 elimină abonamentul.
- Payload-ul include titlu, corp opțional, tip și link, cu aceeași redactare.
Push necesită aplicația de producție și origin sigur. Același service worker oferă offline shell și instalare: manifestul face Libre instalabil, navigarea offline folosește shell-ul din cache și asset-urile hash sunt imuabile. Traficul API nu se cachează.
Limite
- Preferințele per tip nu sunt încă implementate. Automatizările își respectă setarea, iar ieșirea din canal oprește notificările sale.