fetchFromServer method

Future<AppMetadata?> fetchFromServer(
  1. Client client,
  2. String serverId
)

FR-META-001, 002 — best-effort Online fetch.

Implementation

Future<AppMetadata?> fetchFromServer(Client client, String serverId) async {
  try {
    final result = await client.readResource(_wellKnownUri);
    if (result.contents.isEmpty) {
      _logger.debug('metadata.online.fetch.miss', {'serverId': serverId});
      return null;
    }
    final text = result.contents.first.text;
    if (text == null || text.isEmpty) {
      return null;
    }

    final decoded = jsonDecode(text);
    if (decoded is! Map<String, dynamic>) {
      _logger.warn('metadata.online.parse.fail', {
        'serverId': serverId,
        'reason': 'payload is not an object',
      });
      return null;
    }

    final metadata = _fromJson(serverId, decoded);
    _logger.info('metadata.online.fetch.success', {
      'serverId': serverId,
      'name': metadata.name,
    });
    return metadata;
  } catch (e) {
    _logger.debug('metadata.online.fetch.miss', {
      'serverId': serverId,
      'cause': e.toString(),
    });
    return null;
  }
}