import 'package:dio/dio.dart'; import '../../../errors/auth_exception.dart'; import '../../auth/token_storage.dart'; import '../../marianumconnect_api.dart'; import '../../marianumconnect_query.dart'; import '../auth_login/auth_login_response.dart'; /// Probes that the stored bearer token is still accepted. Used for accounts /// without a password (guardians), whose token cannot be renewed silently. /// /// Bypasses the shared dio singleton so the auth interceptor does not react /// to the 401 this probe is meant to observe. class AuthMe extends MarianumConnectQuery { final MarianumConnectTokenStorage _tokenStorage; AuthMe({ MarianumConnectTokenStorage tokenStorage = const MarianumConnectTokenStorage(), Dio? dio, }) : _tokenStorage = tokenStorage, super(dio: dio ?? MarianumConnectApi.plainDio()); /// Throws [AuthException] when the token is missing or rejected. Future run() async { await user(); } /// The signed-in user (names, type). Throws like [run]. Future user() async { final options = await _tokenStorage.requireBearerOptions('AuthMe'); return guard(() async { final response = await dio.get>( endpoint('auth/me'), options: options, ); return AuthLoginUser.fromJson(response.data!); }); } }