getValidToken method

Future<String?> getValidToken()

Get valid access token, refreshing if needed

Implementation

Future<String?> getValidToken() async {
  // Check if we have a cached token first
  final cachedToken = _secureCache['com.runanywhere.sdk.accessToken'];

  if (!isAuthenticated() && cachedToken == null) {
    return null;
  }

  if (needsRefresh()) {
    _logger.debug('Token needs refresh');
    final result = await refreshToken();
    if (!result.isSuccess) {
      _logger.warning('Token refresh failed', metadata: {'error': result.error});
      // Return cached token anyway, server will reject if invalid
      return cachedToken ?? getAccessToken();
    }
    // Return new token from refresh result
    return result.data?.accessToken ?? getAccessToken() ?? cachedToken;
  }

  return getAccessToken() ?? cachedToken;
}