diff --git a/packages/ndk/lib/domain_layer/usecases/broadcast/broadcast.dart b/packages/ndk/lib/domain_layer/usecases/broadcast/broadcast.dart index 6b0a3f12..bc705adc 100644 --- a/packages/ndk/lib/domain_layer/usecases/broadcast/broadcast.dart +++ b/packages/ndk/lib/domain_layer/usecases/broadcast/broadcast.dart @@ -1,6 +1,5 @@ import 'package:ndk/ndk.dart'; -import '../../../config/broadcast_defaults.dart'; import '../../../shared/nips/nip09/deletion.dart'; import '../../../shared/nips/nip25/reactions.dart'; import '../../entities/broadcast_state.dart'; @@ -14,6 +13,8 @@ class Broadcast { final Accounts _accounts; final CacheManager _cacheManager; final GlobalState _globalState; + final double _considerDonePercent; + final Duration _timeout; /// creates a new [Broadcast] instance /// @@ -22,10 +23,14 @@ class Broadcast { required CacheManager cacheManager, required NetworkEngine networkEngine, required Accounts accounts, + required double considerDonePercent, + required Duration timeout, }) : _accounts = accounts, _cacheManager = cacheManager, _engine = networkEngine, - _globalState = globalState; + _globalState = globalState, + _considerDonePercent = considerDonePercent, + _timeout = timeout; /// [throws] if the default signer and the custom signer are null \ /// [returns] the signer that is not null, if both are provided returns [customSigner] @@ -39,18 +44,22 @@ class Broadcast { /// low level nostr broadcast using inbox/outbox (gossip) \ /// [specificRelays] disables inbox/outbox (gossip) and broadcasts to the relays specified. Useful for NostrWalletConnect \ /// [customSigner] if you want to use a different signer than the one from currently logged in user in [Accounts] \ - /// [considerDonePercent] the percentage (0.0, 1.0) of relays that need to respond with "OK" for the broadcast to be considered done \ + /// [considerDonePercent] the percentage (0.0, 1.0) of relays that need to respond with "OK" for the broadcast to be considered done (overrides the default value) \ + /// [timeout] the timeout for the broadcast (overrides the default timeout) \ /// [returns] a [NdkBroadcastResponse] object containing the result => success per relay NdkBroadcastResponse broadcast({ required Nip01Event nostrEvent, Iterable? specificRelays, EventSigner? customSigner, - double considerDonePercent = BroadcastDefaults.CONSIDER_DONE_PERCENT, - Duration timeout = BroadcastDefaults.TIMEOUT, + double? considerDonePercent, + Duration? timeout, }) { + final myConsiderDonePercent = considerDonePercent ?? _considerDonePercent; + final myTimeout = timeout ?? _timeout; + final broadcastState = BroadcastState( - considerDonePercent: considerDonePercent, - timeout: timeout, + considerDonePercent: myConsiderDonePercent, + timeout: myTimeout, ); // register broadcast state _globalState.inFlightBroadcasts[nostrEvent.id] = broadcastState; diff --git a/packages/ndk/lib/domain_layer/usecases/user_relay_lists/user_relay_lists.dart b/packages/ndk/lib/domain_layer/usecases/user_relay_lists/user_relay_lists.dart index 803bdb7f..c9f76afb 100644 --- a/packages/ndk/lib/domain_layer/usecases/user_relay_lists/user_relay_lists.dart +++ b/packages/ndk/lib/domain_layer/usecases/user_relay_lists/user_relay_lists.dart @@ -189,6 +189,8 @@ class UserRelayLists { required String relayUrl, required ReadWriteMarker marker, required Iterable broadcastRelays, + double? considerDonePercent, + Duration? timeout, }) async { UserRelayList? userRelayList = await _ensureUpToDateUserRelayList(); if (userRelayList == null) { @@ -221,8 +223,10 @@ class UserRelayLists { /// [newUserRelayList] the new user relay list /// [returns] the new user relay list Future setInitialUserRelayList( - UserRelayList newUserRelayList, - ) async { + UserRelayList newUserRelayList, { + double? considerDonePercent, + Duration? timeout, + }) async { final now = DateTime.now().millisecondsSinceEpoch ~/ 1000; // set created at and refreshed timestamp newUserRelayList.refreshedTimestamp = now; @@ -245,6 +249,8 @@ class UserRelayLists { Future broadcastRemoveNip65Relay({ required String relayUrl, required Iterable broadcastRelays, + double? considerDonePercent, + Duration? timeout, }) async { UserRelayList? userRelayList = await _ensureUpToDateUserRelayList(); diff --git a/packages/ndk/lib/presentation_layer/init.dart b/packages/ndk/lib/presentation_layer/init.dart index 87984cac..582af703 100644 --- a/packages/ndk/lib/presentation_layer/init.dart +++ b/packages/ndk/lib/presentation_layer/init.dart @@ -147,6 +147,8 @@ class Initialization { networkEngine: engine, cacheManager: _ndkConfig.cache, accounts: accounts, + considerDonePercent: _ndkConfig.defaultBroadcastConsiderDonePercent, + timeout: _ndkConfig.defaultBroadcastTimeout, ); follows = Follows( diff --git a/packages/ndk/lib/presentation_layer/ndk_config.dart b/packages/ndk/lib/presentation_layer/ndk_config.dart index 3fd0dc0c..978a1a26 100644 --- a/packages/ndk/lib/presentation_layer/ndk_config.dart +++ b/packages/ndk/lib/presentation_layer/ndk_config.dart @@ -1,3 +1,5 @@ +import 'package:ndk/config/broadcast_defaults.dart'; + import '../config/bootstrap_relays.dart'; import '../config/logger_defaults.dart'; import '../config/request_defaults.dart'; @@ -38,6 +40,13 @@ class NdkConfig { /// this value is used if no individual timeout is set for a query Duration defaultQueryTimeout; + /// timeout for broadcasts + Duration defaultBroadcastTimeout; + + /// percentage of relays that need to respond with "OK" for the broadcast to be considered done \ + /// value between 0.0 and 1.0 + double defaultBroadcastConsiderDonePercent; + /// log level lib_logger.Level logLevel; @@ -59,8 +68,9 @@ class NdkConfig { this.bootstrapRelays = DEFAULT_BOOTSTRAP_RELAYS, this.eventOutFilters = const [], this.defaultQueryTimeout = RequestDefaults.DEFAULT_QUERY_TIMEOUT, - - /// test + this.defaultBroadcastTimeout = BroadcastDefaults.TIMEOUT, + this.defaultBroadcastConsiderDonePercent = + BroadcastDefaults.CONSIDER_DONE_PERCENT, this.logLevel = defaultLogLevel, }); }