broadcast_queue_shim_for_ndk 0.2.1 copy "broadcast_queue_shim_for_ndk: ^0.2.1" to clipboard
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 int64 overflow in computeBackoff on 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, causing double.clamp to throw Invalid 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 to ndk.connectivity.relayConnectivityChanges and pauses the internal timer while no public relay is connected. The offline -> online edge 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> onlineSignal for callers who want to wire their own connectivity source.

0.1.0 #

Initial release.

  • OfflineBroadcast wraps ndk.broadcast and persists every event to a caller-provided sembast database before attempting to send it.
  • Required relays list at broadcast time. No gossip-based auto-selection.
  • Per-relay acks are tracked monotonically. An entry is considered delivered only when every targeted relay has acknowledged the event with broadcastSuccessful: 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 public retryNow() callers can wire to connectivity signals.
  • Backoff is exponential with full jitter, bounded by initialBackoff and maxBackoff.
  • The shim never signs events. Signing remains NDK's responsibility.
0
likes
160
points
91
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

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.

Repository (GitHub)
View/report issues

Topics

#nostr #ndk #offline-first #queue

License

MIT (license)

Dependencies

ndk, sembast

More

Packages that depend on broadcast_queue_shim_for_ndk