import 'dart:developer'; import '../api/marianumconnect/queries/auth_logout/auth_logout.dart'; import '../auth_link/guardian_link_listener.dart'; import '../push/push_registration.dart'; import 'session_manager.dart'; abstract final class SessionLifecycle { /// Ordered teardown: unregister push and revoke the Nextcloud app passwords /// (while those credentials still exist), then revoke the MC bearer token, /// finally wipe the local session. Each step is best-effort so an offline /// sign-out still reaches a clean local state. static Future signOut() async { try { await PushRegistration().logoutCleanup(); } on Object catch (e) { log('Sign-out: push cleanup failed: $e'); } await AuthLogout().run(); await SessionManager().signOut(); // A login link that arrived while signed in must not be replayed on the // login screen that follows. GuardianLinkListener.clear(); } }