From e62e2abd32c35c704a7eacfbb27b04a7625653ac Mon Sep 17 00:00:00 2001
From: Awiteb
Date: Fri, 21 Aug 2026 20:59:50 +0000
Subject: [PATCH] sdk(local_relay): add LocalRelay::connections_left
Returns the number of remaining connections the relay can handle.
Useful for relays that use `LocalRelay::take_connection` with an already
upgraded connection, avoiding CPU waste on connections that would be
rejected due to capacity limits.
Refs https://github.com/nostrdevkit/nostr/pull/1458
Pull-Request: https://github.com/nostrdevkit/nostr/pull/1459
Signed-off-by: Awiteb
---
nostr-sdk/CHANGELOG.md | 4 ++++
nostr-sdk/src/local_relay/local/inner.rs | 2 +-
nostr-sdk/src/local_relay/local/mod.rs | 6 ++++++
3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/nostr-sdk/CHANGELOG.md b/nostr-sdk/CHANGELOG.md
index 822d77b4f..9d8e05bcd 100644
--- a/nostr-sdk/CHANGELOG.md
+++ b/nostr-sdk/CHANGELOG.md
@@ -29,6 +29,10 @@
## Unreleased
+### Added
+
+- Add `LocalRelay::connections_left` (https://github.com/nostrdevkit/nostr/pull/1459)
+
### Deprecated
- Deprecate `LocalRelayBuilder::max_query_results` and `LocalRelayBuilder::default_filter_limit` (https://github.com/nostrdevkit/nostr/pull/1461)
diff --git a/nostr-sdk/src/local_relay/local/inner.rs b/nostr-sdk/src/local_relay/local/inner.rs
index 51b0d5102..e407e4e2d 100644
--- a/nostr-sdk/src/local_relay/local/inner.rs
+++ b/nostr-sdk/src/local_relay/local/inner.rs
@@ -59,7 +59,7 @@ pub(super) struct InnerLocalRelay {
auth_events_per_minute: u32,
messages_per_minute: u32,
pending_handshakes_limit: Arc,
- connections_limit: Arc,
+ pub(crate) connections_limit: Arc,
max_websocket_message_size: usize,
max_event_size: usize,
websocket_handshake_timeout: Duration,
diff --git a/nostr-sdk/src/local_relay/local/mod.rs b/nostr-sdk/src/local_relay/local/mod.rs
index 525d4acea..74f99e8b4 100644
--- a/nostr-sdk/src/local_relay/local/mod.rs
+++ b/nostr-sdk/src/local_relay/local/mod.rs
@@ -95,6 +95,12 @@ impl LocalRelay {
self.inner.url().await
}
+ /// Returns the remaining connection capacity before the limit is reached.
+ #[inline]
+ pub fn connections_left(&self) -> usize {
+ self.inner.connections_limit.available_permits()
+ }
+
/// Sync events with other relay(s).
#[inline]
pub async fn sync_with<'a, I, U>(