handleEventBroadcast method
NdkBroadcastResponse
handleEventBroadcast({
- required Nip01Event nostrEvent,
- required EventSigner? signer,
- required BroadcastState broadcastState,
- Iterable<
String> ? specificRelays,
override
broadcasts given event using inbox/outbox (gossip) if explicit relays are given they are used instead
nostrEvent event to publish
explicitRelays used instead of gossip if set
Implementation
@override
NdkBroadcastResponse handleEventBroadcast({
required Nip01Event nostrEvent,
required EventSigner? signer,
required BroadcastState broadcastState,
Iterable<String>? specificRelays,
}) {
final doneStream = broadcastState.stateUpdates
.map((state) => state.broadcasts.values.toList());
Future<void> asyncStuff() async {
await relayManagerLight.seedRelaysConnected;
final Nip01Event workingNostrEvent;
try {
if (signer != null) {
workingNostrEvent = await signer.sign(nostrEvent);
} else {
workingNostrEvent = nostrEvent;
}
} catch (e, stackTrace) {
broadcastState.addError(e, stackTrace);
return;
}
if (specificRelays != null) {
final cleanedSpecificRelays = cleanRelayUrls(specificRelays.toList());
return RelayJitBroadcastSpecificRelaysStrategy.broadcast(
specificRelays: cleanedSpecificRelays,
relayManager: relayManagerLight,
eventToPublish: workingNostrEvent,
connectedRelays: relayManagerLight.connectedRelays
.whereType<RelayConnectivity<JitEngineRelayConnectivityData>>()
.toList(),
);
}
// default publish to own outbox
RelayJitBroadcastOutboxStrategy.broadcast(
eventToPublish: workingNostrEvent,
connectedRelays: relayManagerLight.connectedRelays
.whereType<RelayConnectivity<JitEngineRelayConnectivityData>>()
.toList(),
cacheManager: cache,
relayManager: relayManagerLight,
bootstrapRelays: bootstrapRelays,
);
// check if we need to publish to others inboxes
if (workingNostrEvent.pTags.isNotEmpty &&
workingNostrEvent.kind != ContactList.kKind) {
RelayJitBroadcastOtherReadStrategy.broadcast(
eventToPublish: workingNostrEvent,
connectedRelays: relayManagerLight.connectedRelays
.whereType<RelayConnectivity<JitEngineRelayConnectivityData>>()
.toList(),
cacheManager: cache,
relayManager: relayManagerLight,
pubkeysOfInbox: workingNostrEvent.pTags,
);
}
}
asyncStuff();
return NdkBroadcastResponse(
publishEvent: nostrEvent,
broadcastDoneStream: doneStream,
);
}