refreshToken method
Refresh authentication token
Implementation
Future<SessionData> refreshToken() async {
final refreshToken = await _getRefreshToken();
if (refreshToken == null) {
throw AuthException.required();
}
try {
final response = await _apiClient.post<Map<String, dynamic>>(
'/api/v1/auth/refresh',
data: {
'refreshToken': refreshToken,
},
);
final refreshResponse = LoginOTPResponse.fromJson(response);
if (refreshResponse.success && refreshResponse.data != null) {
// Update stored tokens
await _storeTokens(
accessToken: refreshResponse.data!.session.accessToken,
refreshToken: refreshResponse.data!.refreshToken,
expiresAt: refreshResponse.data!.session.expiresAt,
);
// Update API client authorization header
_apiClient.setAuthToken(refreshResponse.data!.session.accessToken);
return refreshResponse.data!.session;
} else {
throw AuthException.refreshFailed();
}
} catch (e) {
if (e is ApiException && e.statusCode == 401) {
// Refresh token is invalid, user needs to login again
await logout();
throw AuthException.refreshFailed();
}
rethrow;
}
}