Meldingen
Libre WebUI houdt per gebruiker een duurzame meldingeninbox bij, zodat teamactiviteiten — vermeldingen, privéberichten, gedeelde bronnen, mislukte automatiseringen en agendaherinneringen — mensen ook bereiken wanneer de betreffende pagina is gesloten.
De inbox
Meldingen zijn allereerst databaserijen: titel en hoofdtekst worden versleuteld opgeslagen, het maximum is 500 per gebruiker (de oudste worden verwijderd) en een optionele bronsleutel ontdubbelt ze, zodat herhaald publiceren tot één vermelding wordt samengevoegd in plaats van de bel vol te spammen. Het RESTful-oppervlak vermeldt meldingen, telt ongelezen meldingen, markeert één of alle als gelezen en verwijdert ze.
Live levering gebruikt de duurzame gebeurtenissenstroom per gebruiker notify:<userId> via GET /api/notifications/events (SSE). De identiteit van de stroom komt uit de geverifieerde sessie, nooit uit clientinvoer, en de SQL-inbox blijft de bron van waarheid: een gemiste gebeurtenis wordt hersteld door de lijst te lezen, niet door de stroom opnieuw af te spelen.
Wat meldingen voortbrengt
| Type | Wordt geproduceerd wanneer |
|---|---|
channel-dm | Iemand je een privébericht stuurt |
channel-mention | Iemand je in een kanaal @mentions of op je bericht antwoordt |
channel-invite | Je aan een kanaal wordt toegevoegd |
share | Iemand een bron met je deelt |
automation-failed | Een van je automatiseringen mislukt, tenzij meldingen zijn uitgezet |
calendar-reminder | Een gebeurtenis met herinnering het herinneringstijdstip bereikt |
work-run-finished | Een van je ingehuurde Work-agenten een uitvoering voltooit |
work-run-attention | Een ingehuurde agent stopt voor invoer of een fout tegenkomt |
work-takeover | Een Work-agent je vraagt het scherm over te nemen |
work-approval | Een Work-uitvoering wacht tot je een actie met neveneffecten goedkeurt |
system | Er een aankondiging op instantieniveau is |
Meldingen worden altijd alleen voor de getroffen gebruiker gepubliceerd; een vermelding van een gebruikersnaam die geen lid van het kanaal is, levert niets op.
Uitgaande webhooks
Beheerders kunnen webhookdoelen registreren die teamgebeurtenissen ontvangen.
- Uitgaand verkeer bewaakt. Doelen volgen hetzelfde bestemmingsbeleid als toolservers: exacte URL, geen omleidingen en geen privé- of link-local-adressen, tenzij de beheerder een host expliciet toestaat via
TOOLS_PRIVATE_NETWORK_ALLOWLIST. Hostnamen worden voor elke levering opnieuw bepaald en gecontroleerd. - Ondertekend. Met een ingesteld geheim bevat elke levering
X-Libre-Signature: sha256=<hmac>, berekend over de exacte body. - Geredigeerd. De envelop bevat gebeurtenissoort, meldingstype, titel, ID's en tijdstempels. Hoofdteksten van meldingen, berichtinhoud, prompts en documenten verlaten de instantie nooit.
- Duurzaam. Leveringen worden uitgevoerd als duurzame taken met begrensde pogingen; een 5xx van de ontvanger wordt opnieuw geprobeerd, een 4xx geldt als het oordeel van de ontvanger en wordt afgehandeld.
- Afgebakend. Elk doel abonneert zich op specifieke meldingstypen of
*.
Browserpush
Instellingen → Meldingen registreert deze browser voor Web Push, zodat vermeldingen, gedeelde bronnen, herinneringen en voltooid werk het apparaat ook bereiken wanneer het tabblad is gesloten. De implementatie is standaard en zelfstandig:
- VAPID (RFC 8292). De server ondertekent elke levering met een ES256-sleutelpaar dat eenmaal wordt gegenereerd en versleuteld opgeslagen, of wordt vastgezet met
VAPID_PUBLIC_KEY/VAPID_PRIVATE_KEY(VAPID_SUBJECTstelt de contactclaim in). Naast het push-eindpunt van de browserleverancier is geen externe pushbibliotheek of serviceaccount betrokken. - Versleutelde payloads (RFC 8291). Elk bericht wordt met aes128gcm voor de eigen sleutels van het apparaat versleuteld voordat het de instantie verlaat; de pushservice stuurt versleutelde tekst door die deze niet kan lezen.
- Per apparaat, aan sessie gebonden. Een abonnement behoort tot de browser die het heeft gemaakt en tot de verificatiesessie van die browser. Afmelden bij de sessie (of „andere sessies afmelden”) verwijdert ook de pushregistratie. Eindpunten worden versleuteld opgeslagen met een op een sleutel gebaseerd opzoektoken en moeten openbare HTTPS-bestemmingen zijn, met dezelfde beveiliging voor uitgaand verkeer als webhooks.
- Duurzaam. Pushleveringen draaien als duurzame taken met begrensde pogingen; als een pushservice meldt dat het abonnement verdwenen is (404/410), wordt het verwijderd.
- De payload bevat de meldingstitel, optionele hoofdtekst, het type en de doellink, met dezelfde redactiehouding als de inbox.
Push vereist de productie-app (de serviceworker wordt alleen daar geregistreerd) en een veilige oorsprong. De offlineshell en installeerbaarheid komen van dezelfde serviceworker: het appmanifest maakt Libre WebUI installeerbaar, navigatie valt offline terug op de gecachte shell en buildmiddelen met hash worden onveranderlijk gecachet. API-verkeer wordt nooit gecachet.
Grenzen
- Gebruikersvoorkeuren per type zijn nog niet geïmplementeerd; automatiseringen volgen hun eigen meldingsinstelling en een kanaal verlaten stopt de bijbehorende meldingen.