Integration fonctionnalités V1 ( resas + gestion machines

This commit is contained in:
bastien
2026-07-03 19:02:48 +02:00
parent 20f383dd62
commit bf191d6396
46 changed files with 4691 additions and 654 deletions
+26 -5
View File
@@ -9,7 +9,8 @@ class ApiClient {
ApiClient({
required this.baseUrl,
this.getAccessToken,
this.onUnauthorized,
this.onRefreshToken,
this.onSessionExpired,
}) : _dio = Dio(
BaseOptions(
baseUrl: baseUrl,
@@ -31,9 +32,27 @@ class ApiClient {
handler.next(options);
},
onError: (error, handler) async {
if (error.response?.statusCode == 401) {
await onUnauthorized?.call();
final response = error.response;
final alreadyRetried = error.requestOptions.extra['auth_retried'] == true;
if (response?.statusCode == 401 && !alreadyRetried && onRefreshToken != null) {
final newToken = await onRefreshToken!();
if (newToken != null && newToken.isNotEmpty) {
final request = error.requestOptions;
request.extra['auth_retried'] = true;
request.headers['Authorization'] = 'Bearer $newToken';
try {
final retryResponse = await _dio.fetch(request);
return handler.resolve(retryResponse);
} on DioException catch (retryError) {
return handler.next(retryError);
}
}
await onSessionExpired?.call();
}
handler.next(error);
},
),
@@ -42,7 +61,8 @@ class ApiClient {
final String baseUrl;
final Future<String?> Function()? getAccessToken;
final Future<void> Function()? onUnauthorized;
final Future<String?> Function()? onRefreshToken;
final Future<void> Function()? onSessionExpired;
final Dio _dio;
Dio get dio => _dio;
@@ -94,6 +114,7 @@ final apiClientProvider = Provider<ApiClient>((ref) {
return ApiClient(
baseUrl: kApiBaseUrl,
getAccessToken: () async => ref.read(authProvider).accessToken,
onUnauthorized: () async => authNotifier.logout(),
onRefreshToken: () => authNotifier.refreshAccessToken(),
onSessionExpired: () => authNotifier.sessionExpired(),
);
});