readJson method

Future<Object?> readJson(
  1. String reference
)

Loads a JSON document, rejecting oversized or non-successful responses.

Implementation

Future<Object?> readJson(String reference) async {
  final request = Request('GET', resolve(reference));
  request.headers['accept'] = 'application/json';
  final response = await _client.send(request);
  if (response.statusCode < 200 || response.statusCode >= 300) {
    throw ClientException(
      'IPFS gateway returned HTTP ${response.statusCode}.',
      request.url,
    );
  }

  final bytes = <int>[];
  await for (final chunk in response.stream) {
    if (bytes.length + chunk.length > maxResponseBytes) {
      throw ClientException(
        'IPFS response exceeds $maxResponseBytes bytes.',
        request.url,
      );
    }
    bytes.addAll(chunk);
  }
  return jsonDecode(utf8.decode(bytes));
}