executeTokenRefresh method

Future<void> executeTokenRefresh([
  1. RequestInterceptorHandler? handler
])

Implementation

Future<void> executeTokenRefresh([RequestInterceptorHandler? handler]) async {
  final newDioClient = Dio(BaseOptions()
    ..baseUrl = options.baseUrl
    ..contentType = Headers.jsonContentType);

  if (loggingOptions.logNetworkTraffic) {
    newDioClient.interceptors.add(
      PrettyDioLogger(
        responseBody: loggingOptions.responseBody,
        requestBody: loggingOptions.requestBody,
        requestHeader: loggingOptions.requestHeader,
        request: loggingOptions.request,
        responseHeader: loggingOptions.responseHeader,
        compact: loggingOptions.compact,
        error: loggingOptions.error,
      ),
    );
  }

  if (options.overrideBadCertificate && !kIsWeb) {
    (dio.httpClientAdapter as IOHttpClientAdapter).createHttpClient = () {
      final client = HttpClient();

      client.badCertificateCallback =
          (X509Certificate cert, String host, int port) => true;

      return client;
    };
  }

  final currentJwt = jwt;
  final currentRefreshToken = refreshToken;

  try {
    final response = await newDioClient.post(
      authOptions.refreshTokenEndpoint,
      options: Options(
        headers: authOptions.refreshTokenHeadersBuilder
                ?.call(currentJwt ?? '', currentRefreshToken ?? '') ??
            {
              RestApiClientKeys.authorization: 'Bearer $currentJwt',
            },
      ),
      data: authOptions.refreshTokenBodyBuilder
              ?.call(currentJwt ?? '', currentRefreshToken ?? '') ??
          {
            authOptions.refreshTokenParameterName: currentRefreshToken,
          },
    );

    final resolvedJwt = authOptions.resolveJwt!(response);
    final resolvedRefreshToken = authOptions.resolveRefreshToken!(response);

    await authorize(jwt: resolvedJwt, refreshToken: resolvedRefreshToken);
  } on DioException catch (error) {
    await exceptionHandler.handle(error);

    handler?.next(error.requestOptions);
  }
}