/// Events, die der `KeycloakOidcTokenProvider` über seinen /// Broadcast-Stream auswirft. Der AuthBloc abonniert diesen Stream /// und reagiert mit eigenen Zustands-Übergängen. /// /// Bewusst eigene Events (statt direkter Bloc-Aufrufe), damit der /// Token-Provider keine Abhängigkeit auf die Bloc-Schicht braucht. sealed class AuthSessionEvent { const AuthSessionEvent(); } /// Erfolgreicher Login (frisch oder restauriert). final class AuthLoggedIn extends AuthSessionEvent { const AuthLoggedIn(this.claims); final Map claims; } /// Sauberer Logout durch den Nutzer. final class AuthLoggedOut extends AuthSessionEvent { const AuthLoggedOut(); } /// Refresh fehlgeschlagen oder Server lehnt Token ab — die App muss /// zurück zur Login-Page. final class AuthSessionExpired extends AuthSessionEvent { const AuthSessionExpired(); }