getApp method

Future<SoftwareApp?> getApp({
  1. required SoftwareAppRef app,
  2. Iterable<String>? relays,
  3. Duration? timeout,
})

Implementation

Future<SoftwareApp?> getApp({
  required SoftwareAppRef app,
  Iterable<String>? relays,
  Duration? timeout,
}) async {
  final response = _requests.query(
    filter: Filter(
      authors: [app.publisher],
      kinds: const [softwareApplicationKind],
      dTags: [app.identifier],
      limit: 1,
    ),
    explicitRelays: relays,
    timeout: timeout,
    name: 'software-app',
  );
  final events = await response.future;
  if (events.isEmpty &&
      !response.relayOutcomes.values.any(
        (outcome) => outcome.status == RelayRequestStatus.eose,
      )) {
    throw const SoftwareDiscoveryException(
      'No relay completed software application discovery',
    );
  }
  final parsed = events
      .map(_parseApp)
      .whereType<SoftwareApp>()
      .where((candidate) => candidate.ref.identifier == app.identifier)
      .toList();
  parsed.sort((a, b) => b.event.createdAt.compareTo(a.event.createdAt));
  return parsed.firstOrNull;
}