Powiadomienia
Libre WebUI utrzymuje trwałą skrzynkę dla każdego użytkownika, dzięki czemu aktywność zespołu — wzmianki, wiadomości bezpośrednie, udostępnienia, błędy automatyzacji i przypomnienia kalendarza — dociera do ludzi nawet po zamknięciu strony.
Skrzynka
Powiadomienia są przede wszystkim wierszami bazy: tytuł i treść są szyfrowane w spoczynku, limit wynosi 500 na użytkownika (najstarsze są usuwane), a opcjonalny klucz źródła deduplikuje powtórne publikacje w jedną pozycję. Powierzchnia RESTful wyświetla, liczy nieprzeczytane, oznacza jedno lub wszystkie jako przeczytane i usuwa.
Dostarczanie na żywo korzysta z trwałego strumienia per użytkownik notify:<userId> przez GET /api/notifications/events (SSE). Tożsamość pochodzi z uwierzytelnionej sesji, nigdy z wejścia klienta, a skrzynka SQL pozostaje źródłem prawdy: pominięte zdarzenie odzyskuje się z listy, nie przez odtwarzanie strumienia.
Co tworzy powiadomienia
| Typ | Kiedy powstaje |
|---|---|
channel-dm | Ktoś wysyła wiadomość bezpośrednią |
channel-mention | Ktoś @mentions Cię w kanale lub odpowiada na Twoją wiadomość |
channel-invite | Zostajesz dodany do kanału |
share | Ktoś udostępnia Ci zasób |
automation-failed | Twoja automatyzacja kończy się błędem, chyba że wyłączyła powiadamianie |
calendar-reminder | Zdarzenie osiąga czas przypomnienia |
work-run-finished | Wynajęty agent Work kończy uruchomienie |
work-run-attention | Agent zatrzymuje się po dane lub napotyka błąd |
work-takeover | Agent Work prosi o przejęcie ekranu |
work-approval | Uruchomienie Work czeka na zatwierdzenie działania ze skutkami ubocznymi |
system | Ogłoszenia na poziomie instancji |
Powiadomienie jest zawsze publikowane tylko do zainteresowanego użytkownika; wzmianka osoby spoza kanału nie tworzy niczego.
Wychodzące webhooki
Administratorzy mogą rejestrować cele webhooków odbierające zdarzenia zespołowe.
- Chroniony ruch wychodzący. Cele podlegają tej samej polityce co serwery narzędzi: dokładny URL, brak przekierowań i adresów prywatnych/link-local, chyba że administrator jawnie dopuści host przez
TOOLS_PRIVATE_NETWORK_ALLOWLIST. Nazwy są ponownie rozwiązywane i sprawdzane przy każdej dostawie. - Podpisane. Przy skonfigurowanym sekrecie każda dostawa ma
X-Libre-Signature: sha256=<hmac>obliczony z dokładnej treści. - Zredagowane. Obwiednia zawiera rodzaj zdarzenia, typ powiadomienia, tytuł, identyfikatory i znaczniki czasu. Treść powiadomień, wiadomości, prompty i dokumenty nigdy nie opuszczają instancji.
- Trwałe. Dostawy działają jako trwałe zadania z ograniczonymi próbami; 5xx jest ponawiany, a 4xx traktowany jako werdykt odbiorcy.
- Ograniczone zakresem. Cel subskrybuje konkretne typy lub
*.
Powiadomienia push przeglądarki
Ustawienia → Powiadomienia rejestruje przeglądarkę w Web Push, aby wzmianki, udostępnienia, przypomnienia i zakończona praca dotarły także przy zamkniętej karcie. Implementacja jest standardowa i samodzielna:
- VAPID (RFC 8292). Serwer podpisuje dostawy parą kluczy ES256 wygenerowaną raz i zaszyfrowaną albo ustawioną przez
VAPID_PUBLIC_KEY/VAPID_PRIVATE_KEY(VAPID_SUBJECTustawia kontakt). Poza punktem push dostawcy przeglądarki nie uczestniczy zewnętrzna biblioteka ani konto usługi. - Szyfrowane ładunki (RFC 8291). Każda wiadomość jest szyfrowana aes128gcm dla kluczy urządzenia przed opuszczeniem instancji; usługa przekazuje nieczytelny szyfrogram.
- Per urządzenie i sesję. Subskrypcja należy do przeglądarki i jej sesji uwierzytelniania; wylogowanie (lub „wyloguj inne sesje”) usuwa rejestrację push. Punkty są szyfrowane z kluczem wyszukiwania i muszą być publicznymi celami HTTPS, z taką samą ochroną ruchu jak webhooki.
- Trwałe. Dostawy push są trwałymi zadaniami z ograniczonymi próbami; odpowiedź 404/410 usuwa wygasłą subskrypcję.
- Ładunek zawiera tytuł, opcjonalną treść, typ i link docelowy — z taką samą redakcją jak skrzynka.
Push wymaga aplikacji produkcyjnej (service worker rejestruje się tylko tam) i bezpiecznego pochodzenia. Powłoka offline i instalowalność pochodzą z tego samego workera: manifest umożliwia instalację, nawigacja offline używa buforowanej powłoki, a zasoby z hashem są buforowane niezmiennie. Ruch API nigdy nie trafia do pamięci podręcznej.
Granice
- Preferencje użytkownika per typ nie są jeszcze dostępne; automatyzacje respektują własne ustawienie, a opuszczenie kanału zatrzymuje jego powiadomienia.