/// Events des AuthBloc. /// /// Eingehende Events (Trigger): `LoginRequested`, `LogoutRequested`, /// `RestoreSessionRequested`. /// /// Stream-Events vom `KeycloakOidcTokenProvider` werden über /// `ProviderSessionChanged` in den Bloc-Bus übersetzt — damit alles /// in der `on<...>`-Maschinerie des Blocs verarbeitet werden kann. sealed class AuthEvent { const AuthEvent(); } /// Vom UI ausgelöst — startet den PKCE-Login-Flow. final class LoginRequested extends AuthEvent { const LoginRequested(); } /// Vom UI ausgelöst — beendet die Session. final class LogoutRequested extends AuthEvent { const LogoutRequested(); } /// Vom App-Bootstrap ausgelöst — prüft, ob es einen persistierten /// Refresh-Token gibt, und stellt die Session ggf. wieder her. final class RestoreSessionRequested extends AuthEvent { const RestoreSessionRequested(); } /// Interner Event-Typ — Brücke vom Token-Provider-Stream in die /// Bloc-Maschine. final class ProviderSessionChanged extends AuthEvent { const ProviderSessionChanged(this.kind, {this.claims, this.accessToken}); final ProviderEventKind kind; final Map? claims; final String? accessToken; } enum ProviderEventKind { loggedIn, loggedOut, sessionExpired } /// Legacy-Event: Wird von den alten ERPframe-Repositories gefeuert, /// wenn der Server mit 401 antwortet. Mit Phase D fliegt das raus, /// weil 401 dann direkt vom `HolzleitnerAuthInterceptor` ausgewertet /// und an den Provider gemeldet wird. final class SessionExpiredEvent extends AuthEvent { const SessionExpiredEvent(); }