fetch method

  1. @override
Future<TokenSourceResponse> fetch(
  1. TokenRequestOptions options
)
override

Implementation

@override
Future<TokenSourceResponse> fetch(TokenRequestOptions options) async {
  final requestBody = jsonEncode(options.toRequest().toJson());
  final requestHeaders = {
    'Content-Type': 'application/json',
    ...headers,
  };

  final httpClient = client ?? http.Client();
  final shouldCloseClient = client == null;
  late final http.Response response;

  try {
    final request = http.Request(method, uri);
    request.headers.addAll(requestHeaders);
    request.body = requestBody;
    final streamedResponse = await httpClient.send(request);
    response = await http.Response.fromStream(streamedResponse);
  } finally {
    if (shouldCloseClient) {
      httpClient.close();
    }
  }

  if (response.statusCode < 200 || response.statusCode >= 300) {
    throw TokenSourceHttpException(
      uri: uri,
      statusCode: response.statusCode,
      body: response.body,
    );
  }

  final responseBody = jsonDecode(response.body) as Map<String, dynamic>;
  return TokenSourceResponse.fromJson(responseBody);
}