broadcast_queue_shim_for_ndk 0.2.1
broadcast_queue_shim_for_ndk: ^0.2.1 copied to clipboard
Offline-first wrapper around the ndk package's broadcast use case. Persists Nostr events to a local sembast queue and retries until every targeted relay has acknowledged delivery.
0.2.1 #
- Fix
int64overflow incomputeBackoffon native platforms (Android, iOS, Linux, macOS, Windows). After ~52 failed attempts (with the default 5s initial delay),pow(2, attempts)wrapped to a negative integer, causingdouble.clampto throwInvalid argument(s). The calculation now uses double arithmetic (pow(2.0, ...)) to avoid the overflow.
0.2.0 #
- Connectivity-aware periodic retries.
OfflineBroadcast.withNdk()now subscribes tondk.connectivity.relayConnectivityChangesand pauses the internal timer while no public relay is connected. Theoffline -> onlineedge triggers an immediate replay.retryNow()always bypasses the check. - Local/private hosts (loopback, RFC1918 IPv4, ULA/link-local IPv6, mDNS
.local) are filtered out when deriving the online signal, so a connected dev relay on localhost cannot mask a real outage. - The default constructor accepts an optional
Stream<bool> onlineSignalfor callers who want to wire their own connectivity source.
0.1.0 #
Initial release.
OfflineBroadcastwrapsndk.broadcastand persists every event to a caller-provided sembast database before attempting to send it.- Required
relayslist at broadcast time. No gossip-based auto-selection. - Per-relay acks are tracked monotonically. An entry is considered
deliveredonly when every targeted relay has acknowledged the event withbroadcastSuccessful: true; once set, the delivery timestamp is never cleared by the shim. - Records are kept after delivery. They are never auto-deleted.
rebroadcast(id)queues a one-shot push to every relay without touching the historical ack set.rebroadcast(id, relay: ...)queues a one-shot push to a specific relay, adding it to the entry's target list if absent.- Retries are driven by an internal periodic timer started via
start(), plus a publicretryNow()callers can wire to connectivity signals. - Backoff is exponential with full jitter, bounded by
initialBackoffandmaxBackoff. - The shim never signs events. Signing remains NDK's responsibility.