doNostrRequest method

Future<NostrRequest> doNostrRequest(
  1. NostrRequest nostrRequest,
  2. Filter filter,
  3. RelaySet relaySet, {
  4. bool splitRequestsByPubKeyMappings = true,
})

Implementation

Future<NostrRequest> doNostrRequest(NostrRequest nostrRequest, Filter filter,
    RelaySet relaySet,
    {bool splitRequestsByPubKeyMappings=true}) async {
  if (splitRequestsByPubKeyMappings) {
    relaySet.splitIntoRequests(filter,nostrRequest);

    print(
        "request for ${filter.authors != null
            ? filter.authors!.length
            : 0} authors with kinds: ${filter
            .kinds} made requests to ${nostrRequest.requests
            .length} relays");

    if (nostrRequest.requests.isEmpty && relaySet.fallbackToBootstrapRelays) {
      print(
          "making fallback requests to ${bootstrapRelays
              .length} bootstrap relays for ${filter.authors != null ? filter
              .authors!.length : 0} authors with kinds: ${filter.kinds}");
      for (var url in bootstrapRelays) {
        nostrRequest.addRequest(url, RelaySet.sliceFilterAuthors(filter));
      }
    }
  } else {
    for (var url in relaySet.urls) {
      nostrRequest.addRequest(url, RelaySet.sliceFilterAuthors(filter));
    }
  }
  nostrRequests[nostrRequest.id] = nostrRequest;
  Map<int?,int> kindsMap = {};
  nostrRequests.forEach((key, request) {
    int? kind;
    if (request.requests.isNotEmpty && request.requests.values.first.filters.first.kinds!=null && request.requests.values.first.filters.first.kinds!.isNotEmpty) {
      kind = request.requests.values.first.filters.first.kinds!.first;
    }
    int? count = kindsMap[kind];
    count ??= 0;
    count++;
    kindsMap[kind] = count;
  });
  print(
      "----------------NOSTR REQUESTS: ${nostrRequests.length} || $kindsMap");
  for(MapEntry<String,RelayRequest> entry in nostrRequest.requests.entries) {
    doRequest(nostrRequest.id, entry.value);
  }
  return nostrRequest;
}