handleEventBroadcast method

  1. @override
NdkBroadcastResponse handleEventBroadcast({
  1. required Nip01Event nostrEvent,
  2. required EventSigner? signer,
  3. required Stream<List<RelayBroadcastResponse>> doneStream,
  4. 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 Stream<List<RelayBroadcastResponse>> doneStream,
  Iterable<String>? specificRelays,
}) {
  Future<void> asyncStuff() async {
    await relayManagerLight.seedRelaysConnected;

    final Nip01Event workingNostrEvent;
    if (signer != null) {
      workingNostrEvent = await signer.sign(nostrEvent);
    } else {
      workingNostrEvent = nostrEvent;
    }

    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,
  );
}