sdk

Radroots SDK and bindings
git clone https://radroots.dev/git/sdk.git
Log | Files | Refs | README

commit e1d407387158a606a68ef30f7cdbe59e9cae7dd8
parent 72e638c79da1d0f420ac742bb29375ab5ccf1f2c
Author: triesap <tyson@radroots.org>
Date:   Tue, 16 Jun 2026 14:18:21 -0700

sdk: use localhost relay policy

Diffstat:
Mcrates/sdk/src/error.rs | 2+-
Mcrates/sdk/src/relay_targets.rs | 2+-
Mcrates/sdk/src/sync_runtime.rs | 2+-
Mcrates/sdk/tests/runtime_foundation.rs | 11+++++++++++
Mcrates/sdk/tests/sync_runtime.rs | 11+++++++++++
5 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/crates/sdk/src/error.rs b/crates/sdk/src/error.rs @@ -377,7 +377,7 @@ impl From<radroots_relay_transport::RadrootsRelayTransportError> for RadrootsSdk url, reason, } => Self::invalid_relay_url(url, reason), - radroots_relay_transport::RadrootsRelayTransportError::WsRequiresLocalPolicy { + radroots_relay_transport::RadrootsRelayTransportError::WsRequiresLocalhostPolicy { url, } => Self::invalid_relay_url(url, "ws relay URL requires localhost policy"), radroots_relay_transport::RadrootsRelayTransportError::UnsupportedRelayScheme { diff --git a/crates/sdk/src/relay_targets.rs b/crates/sdk/src/relay_targets.rs @@ -14,7 +14,7 @@ impl SdkRelayUrlPolicy { fn relay_transport_policy(self) -> RadrootsRelayUrlPolicy { match self { Self::Public => RadrootsRelayUrlPolicy::Public, - Self::Localhost => RadrootsRelayUrlPolicy::LocalDev, + Self::Localhost => RadrootsRelayUrlPolicy::Localhost, } } } diff --git a/crates/sdk/src/sync_runtime.rs b/crates/sdk/src/sync_runtime.rs @@ -238,7 +238,7 @@ impl<'sdk> SyncClient<'sdk> { let policy = RadrootsOutboxPublishPolicy::new(now_ms.saturating_add(NEXT_ATTEMPT_DELAY_MS)) .republish_accepted_relays(request.republish_accepted_relays) - .relay_url_policy(RadrootsRelayUrlPolicy::LocalDev); + .relay_url_policy(RadrootsRelayUrlPolicy::Localhost); let publish = publish_claimed_outbox_event( &self.sdk._outbox, &self.sdk._event_store, diff --git a/crates/sdk/tests/runtime_foundation.rs b/crates/sdk/tests/runtime_foundation.rs @@ -86,6 +86,17 @@ async fn sdk_builder_allows_only_local_ws_targets_with_localhost_policy() { result, Err(RadrootsSdkError::InvalidRelayUrl { .. }) )); + + let result = RadrootsSdk::builder() + .relay_url_policy(SdkRelayUrlPolicy::Localhost) + .relay_url("ws://192.168.1.10:8080") + .build() + .await; + + assert!(matches!( + result, + Err(RadrootsSdkError::InvalidRelayUrl { .. }) + )); } #[tokio::test] diff --git a/crates/sdk/tests/sync_runtime.rs b/crates/sdk/tests/sync_runtime.rs @@ -39,6 +39,7 @@ const LOCAL_RELAY_A: &str = "ws://localhost:8080"; const LOCAL_RELAY_B: &str = "ws://127.0.0.1:8081"; const LOCAL_RELAY_C: &str = "ws://[::1]:8082"; const NONLOCAL_WS_RELAY: &str = "ws://relay.example.com"; +const PRIVATE_LAN_WS_RELAY: &str = "ws://192.168.1.10:8080"; #[derive(Clone)] struct FixtureSigner { @@ -388,6 +389,16 @@ fn enqueue_publish_rejects_nonlocal_ws_relay_targets() { .expect_err("nonlocal ws relay target"); assert!(matches!(error, RadrootsSdkError::InvalidRelayUrl { .. })); + + let error = ListingEnqueuePublishRequest::new( + actor(), + listing(LISTING_C_D_TAG, "Private LAN Coffee"), + SdkRelayTargetPolicy::UseConfiguredRelays, + ) + .try_with_target_relays([PRIVATE_LAN_WS_RELAY], SdkRelayUrlPolicy::Localhost) + .expect_err("private LAN ws relay target"); + + assert!(matches!(error, RadrootsSdkError::InvalidRelayUrl { .. })); } #[tokio::test]