lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README

commit ad894de3982f245a838cb2512f36e7e4f3dbafb4
parent b42e6c6fe414c7ad15435c7c19e590f37a690b2d
Author: triesap <tyson@radroots.org>
Date:   Thu,  9 Jul 2026 17:24:21 +0000

transport: allow explicit Reticulum preview scope

- add a direct ReticulumPreviewProfile scope setter

- cover explicit scope and inert agent endpoint serialization

Diffstat:
Mcrates/sdk/src/transport.rs | 5+++++
Mcrates/sdk/tests/unit/transport_tests.rs | 29+++++++++++++++++++++++++++--
2 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/crates/sdk/src/transport.rs b/crates/sdk/src/transport.rs @@ -361,6 +361,11 @@ impl ReticulumPreviewProfile { self } + pub fn with_scope(mut self, scope: MeshScopeId) -> Self { + self.scope = scope; + self + } + pub fn behavior(&self) -> ReticulumPreviewBehavior { self.behavior } diff --git a/crates/sdk/tests/unit/transport_tests.rs b/crates/sdk/tests/unit/transport_tests.rs @@ -1,6 +1,7 @@ use super::{ - NostrProfile, NostrRelayUrlPolicy, PublishMode, ReticulumPreviewBehavior, - ReticulumPreviewProfile, SatisfactionPolicy, TargetPolicy, TargetSet, TransportProfile, + MeshScopeId, NostrProfile, NostrRelayUrlPolicy, PublishMode, ReticulumPreviewAgentEndpoint, + ReticulumPreviewBehavior, ReticulumPreviewProfile, SatisfactionPolicy, TargetPolicy, TargetSet, + TransportProfile, }; use crate::{RadrootsSdkError, SDK_TRANSPORT_TARGET_MAX_COUNT}; use radroots_transport::{ @@ -237,6 +238,30 @@ fn reticulum_preview_profile_uses_canonical_endpoint_and_behavior_names() { } #[test] +fn reticulum_preview_profile_preserves_explicit_scope_and_agent_endpoint() { + let profile = ReticulumPreviewProfile::preview_unavailable() + .with_scope(MeshScopeId::parse("farmers_market").expect("scope")) + .with_agent_endpoint( + ReticulumPreviewAgentEndpoint::parse("reticulum-agent:local").expect("agent endpoint"), + ); + + assert_eq!(profile.scope().as_str(), "farmers_market"); + assert_eq!( + profile.agent_endpoint().expect("agent endpoint").as_str(), + "reticulum-agent:local" + ); + assert_eq!( + serde_json::to_value(profile).expect("profile json"), + serde_json::json!({ + "endpoint_uri": "reticulum:preview-unavailable", + "scope": "farmers_market", + "agent_endpoint": "reticulum-agent:local", + "behavior": "reject_delivery_attempts" + }) + ); +} + +#[test] fn explicit_target_sets_reject_noncanonical_reticulum_preview_endpoints() { for invalid in [ " reticulum:preview-unavailable",