makeRequest function

Future<Request> makeRequest()

Makes new requests

Throws RateLimitException if rate limit was exceeded and you need to wait to make new requests Throws an ApiUnavailableException if API is currently unavailable

Uses stateStream under the hood

Implementation

Future<Request> makeRequest() async {
  final url = Uri.parse(API_BASE_URL + 'roll/');
  final rollRes = await http.get(url, headers: HEADERS);
  if (rollRes.statusCode >= 200 && rollRes.statusCode < 300) {
    final uuid = rollRes.body;
    return Request(uuid, stateStream(uuid));
  } else if (rollRes.statusCode == 429) {
    final resetEp = rollRes.headers['x-ratelimit-reset'];
    final reset = resetEp != null
        ? DateTime.fromMillisecondsSinceEpoch(
            (num.parse(resetEp) * 1000).toInt(),
          )
        : null;
    throw RateLimitException(
        '$url : ${rollRes.statusCode} : ${rollRes.body}', reset);
  } else if (rollRes.statusCode == 502) {
    throw ApiUnavailableException(
        '$url : ${rollRes.statusCode} ${rollRes.body}');
  } else {
    throw ApiException('$url : ${rollRes.statusCode} : ${rollRes.body}');
  }
}