From 565715adf14cafd0f0155d553f583581334a8dac Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Fri, 19 Dec 2025 13:56:25 +0000 Subject: sync: fix autoclose on EOSE for historic filters --- src/sync/relay_connection.rs | 47 +++++++++++++------------------------------- 1 file changed, 14 insertions(+), 33 deletions(-) (limited to 'src/sync/relay_connection.rs') diff --git a/src/sync/relay_connection.rs b/src/sync/relay_connection.rs index fa229c4..37094be 100644 --- a/src/sync/relay_connection.rs +++ b/src/sync/relay_connection.rs @@ -307,21 +307,33 @@ impl RelayConnection { /// /// # Arguments /// * `filter` - The filter to subscribe to + /// * `auto_close` - If true, subscription automatically closes after EOSE (for historic sync). If false, stays open for new events (for live sync). /// /// # Returns /// * `Ok(SubscriptionId)` - The subscription ID on success /// * `Err(String)` - Error description on failure - pub async fn subscribe_filter(&self, filter: Filter) -> Result { + pub async fn subscribe_filter( + &self, + filter: Filter, + auto_close: bool, + ) -> Result { // DEBUG TRACING: Log the filter being subscribed to tracing::debug!( relay = %self.url, filter = ?filter, + auto_close = auto_close, "subscribe_filter called with filter" ); + let opts = if auto_close { + Some(SubscribeAutoCloseOptions::default().exit_policy(ReqExitPolicy::ExitOnEOSE)) + } else { + None + }; + let output = self .client - .subscribe(filter, None) + .subscribe(filter, opts) .await .map_err(|e| format!("Failed to subscribe on {}: {}", self.url, e))?; @@ -334,37 +346,6 @@ impl RelayConnection { Ok(output.val) } - /// Subscribe to multiple filters at once - /// - /// Each filter creates its own subscription. Returns when all subscriptions - /// are established. This is useful for Layer 2 + 3 filters together. - /// - /// # Arguments - /// * `filters` - Vec of filters to subscribe to - /// - /// # Returns - /// * `Ok(Vec)` - The subscription IDs on success - /// * `Err(String)` - Error description on failure - pub async fn subscribe_filters( - &self, - filters: Vec, - ) -> Result, String> { - if filters.is_empty() { - return Ok(vec![]); - } - - let mut sub_ids = Vec::with_capacity(filters.len()); - for filter in filters { - let output = self - .client - .subscribe(filter, None) - .await - .map_err(|e| format!("Failed to subscribe on {}: {}", self.url, e))?; - sub_ids.push(output.val); - } - Ok(sub_ids) - } - /// Get the relay URL pub fn url(&self) -> &str { &self.url -- cgit v1.2.3