Wait for relay OK ack before marking SENT
- Quartz: expose pendingPublishRelaysFor(eventId) on INostrClient - Worker: after publish(), poll pendingPublishRelaysFor every 500ms up to OK_TIMEOUT_SEC=30s - notify user when a scheduled post fires or fails
This commit is contained in:
+9
@@ -72,6 +72,13 @@ interface INostrClient : AutoCloseable {
|
||||
relayList: Set<NormalizedRelayUrl>,
|
||||
)
|
||||
|
||||
/**
|
||||
* Returns the relays that have not yet acknowledged [eventId] with an OK,
|
||||
* or null if the event is not tracked (never published, or already fully done).
|
||||
* Use to poll for delivery confirmation after [publish].
|
||||
*/
|
||||
fun pendingPublishRelaysFor(eventId: HexKey): Set<NormalizedRelayUrl>?
|
||||
|
||||
fun addConnectionListener(listener: RelayConnectionListener)
|
||||
|
||||
fun removeConnectionListener(listener: RelayConnectionListener)
|
||||
@@ -123,6 +130,8 @@ class EmptyNostrClient : INostrClient {
|
||||
relayList: Set<NormalizedRelayUrl>,
|
||||
) { }
|
||||
|
||||
override fun pendingPublishRelaysFor(eventId: HexKey): Set<NormalizedRelayUrl>? = null
|
||||
|
||||
override fun addConnectionListener(listener: RelayConnectionListener) {}
|
||||
|
||||
override fun removeConnectionListener(listener: RelayConnectionListener) {}
|
||||
|
||||
+2
@@ -358,6 +358,8 @@ class NostrClient(
|
||||
|
||||
override fun activeOutboxCache(url: NormalizedRelayUrl): Set<HexKey> = eventOutbox.activeOutboxCacheFor(url)
|
||||
|
||||
override fun pendingPublishRelaysFor(eventId: HexKey): Set<NormalizedRelayUrl>? = eventOutbox.pendingRelaysFor(eventId)
|
||||
|
||||
override fun getReqFiltersOrNull(subId: String): Map<NormalizedRelayUrl, List<Filter>>? = activeRequests.getSubscriptionFiltersOrNull(subId)
|
||||
|
||||
override fun getCountFiltersOrNull(subId: String): Map<NormalizedRelayUrl, List<Filter>>? = activeCounts.getSubscriptionFiltersOrNull(subId)
|
||||
|
||||
+8
@@ -90,6 +90,14 @@ class PoolEventOutbox {
|
||||
return myEvents
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the relays that have NOT yet acknowledged [eventId] with an OK, or
|
||||
* null if the event is not currently tracked (never sent or already fully done).
|
||||
* Callers can poll this after publish to detect when relays ack: the set shrinks
|
||||
* as OKs arrive, then the entry is removed from the outbox (returns null).
|
||||
*/
|
||||
fun pendingRelaysFor(eventId: HexKey): Set<NormalizedRelayUrl>? = eventOutbox[eventId]?.relaysLeft()
|
||||
|
||||
fun markAsSending(
|
||||
event: Event,
|
||||
relays: Set<NormalizedRelayUrl>,
|
||||
|
||||
Reference in New Issue
Block a user