commit e1d407387158a606a68ef30f7cdbe59e9cae7dd8
parent 72e638c79da1d0f420ac742bb29375ab5ccf1f2c
Author: triesap <tyson@radroots.org>
Date: Tue, 16 Jun 2026 14:18:21 -0700
sdk: use localhost relay policy
Diffstat:
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]