refreshToken method

  1. @override
Future<bool> refreshToken()
override

Refresh the access token using the refresh token.

Returns true if refresh was successful. Called automatically by interceptor on 401 responses.

Implementation

@override
Future<bool> refreshToken() async {
  if (refreshEndpoint == null || refreshTokenKey == null) {
    return false;
  }

  final refreshTokenValue = await getRefreshToken();
  if (refreshTokenValue == null) {
    Log.warning('Auth: No refresh token available');
    return false;
  }

  try {
    final response = await Http.post(
      refreshEndpoint!,
      data: {'refresh_token': refreshTokenValue},
    );

    if (!response.successful) {
      Log.warning('Auth: Token refresh failed');
      return false;
    }

    // Extract new tokens from response
    final data = response.data;
    final newToken =
        data?['token'] ??
        data?['access_token'] ??
        data?['data']?['token'] ??
        data?['data']?['access_token'];
    final newRefreshToken =
        data?['refresh_token'] ?? data?['data']?['refresh_token'];

    if (newToken is String) {
      await storeToken(newToken, newRefreshToken as String?);
      Log.info('Auth: Token refreshed');
      return true;
    }

    return false;
  } catch (e) {
    Log.error('Auth: Token refresh error: $e');
    return false;
  }
}