doNostrRequestWithRelaySet method
Future<void>
doNostrRequestWithRelaySet(
- RequestState state, {
- bool splitRequestsByPubKeyMappings = true,
Implementation
Future<void> doNostrRequestWithRelaySet(RequestState state,
{bool splitRequestsByPubKeyMappings = true}) async {
if (state.unresolvedFilters.isEmpty || state.request.relaySet == null) {
return;
}
RelaySet relaySet = state.request.relaySet!;
for (final filter in state.unresolvedFilters) {
if (splitRequestsByPubKeyMappings) {
relaySet.splitIntoRequests(filter, state);
print(
"request for ${filter.authors != null ? filter.authors!.length : 0} authors with kinds: ${filter.kinds} made requests to ${state.requests.length} relays");
if (state.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 (final url in _bootstrapRelays) {
state.addRequest(url, RelaySet.sliceFilterAuthors(filter));
}
}
} else {
for (final url in relaySet.urls) {
state.addRequest(url, RelaySet.sliceFilterAuthors(filter));
}
}
}
_globalState.inFlightRequests[state.id] = state;
// Late auth for subscriptions with authenticateAs
if (state.request.authenticateAs != null &&
state.request.authenticateAs!.isNotEmpty) {
for (final relayUrl in state.requests.keys) {
_relayManager.authenticateIfNeeded(
relayUrl, state.request.authenticateAs!);
}
}
for (MapEntry<String, RelayRequestState> entry in state.requests.entries) {
doRelayRequest(state.id, entry.value);
}
}