fetchFromServer method
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;
}
}