commit c320c4585c270afc31c3c93d4f5606ca9e5565ea
parent 76fe02a613a024605e2a89e9c3240d271d2d1394
Author: triesap <tyson@radroots.org>
Date: Fri, 10 Jul 2026 19:15:52 +0000
transport: remove SDK transport aliases
- export Radroots-prefixed transport core types directly from the SDK
- drop Transport-prefixed alias reexports from the transport module and root facade
- update TransportReceipt to accept the core satisfaction class type
- add source-boundary coverage against public transport alias reexports
Diffstat:
3 files changed, 37 insertions(+), 14 deletions(-)
diff --git a/crates/sdk/src/lib.rs b/crates/sdk/src/lib.rs
@@ -232,10 +232,11 @@ pub use crate::trade_storage::{
#[cfg(feature = "runtime")]
pub use crate::transport::{
HybridProfile, MeshScopeId, NostrProfile, NostrRelayUrlPolicy, ProxyAuth, ProxyProfile,
- PublishMode, ReticulumPreviewAgentEndpoint, ReticulumPreviewBehavior, ReticulumPreviewProfile,
- SDK_TRANSPORT_TARGET_MAX_COUNT, SatisfactionPolicy, TargetPolicy, TargetSet,
- TransportDeliveryReceipt, TransportDeliveryTargetStatus, TransportKind, TransportOutcome,
- TransportProfile, TransportReceipt, TransportSatisfactionClass, TransportTargetReceipt,
+ PublishMode, RadrootsTransportDeliveryReceipt, RadrootsTransportDeliveryTargetStatus,
+ RadrootsTransportKind, RadrootsTransportOutcome, RadrootsTransportSatisfactionClass,
+ RadrootsTransportTargetReceipt, ReticulumPreviewAgentEndpoint, ReticulumPreviewBehavior,
+ ReticulumPreviewProfile, SDK_TRANSPORT_TARGET_MAX_COUNT, SatisfactionPolicy, TargetPolicy,
+ TargetSet, TransportProfile, TransportReceipt,
};
#[cfg(feature = "runtime")]
pub use radroots_trade::dvm::RadrootsTradeInventoryBinWitnessDto;
diff --git a/crates/sdk/src/transport.rs b/crates/sdk/src/transport.rs
@@ -1,21 +1,17 @@
use crate::RadrootsSdkError;
use radroots_transport::{
RADROOTS_RETICULUM_PREVIEW_ENDPOINT_URI, RADROOTS_RETICULUM_UNAVAILABLE_MESSAGE,
- RadrootsTransportDeliveryReceipt, RadrootsTransportImplementationState, RadrootsTransportKind,
- RadrootsTransportMeshScopeId, RadrootsTransportSatisfactionClass,
+ RadrootsTransportImplementationState, RadrootsTransportMeshScopeId,
RadrootsTransportSatisfactionPolicy, RadrootsTransportStatus, RadrootsTransportTarget,
- RadrootsTransportTargetFingerprint, RadrootsTransportTargetReceipt, RadrootsTransportTargetSet,
+ RadrootsTransportTargetFingerprint, RadrootsTransportTargetSet,
};
use radroots_transport_nostr::{RadrootsRelayUrl, RadrootsRelayUrlPolicy};
use serde::ser::{SerializeStruct, Serializer};
use std::collections::BTreeSet;
pub use radroots_transport::{
- RadrootsTransportDeliveryReceipt as TransportDeliveryReceipt,
- RadrootsTransportDeliveryTargetStatus as TransportDeliveryTargetStatus,
- RadrootsTransportKind as TransportKind, RadrootsTransportOutcome as TransportOutcome,
- RadrootsTransportSatisfactionClass as TransportSatisfactionClass,
- RadrootsTransportTargetReceipt as TransportTargetReceipt,
+ RadrootsTransportDeliveryReceipt, RadrootsTransportDeliveryTargetStatus, RadrootsTransportKind,
+ RadrootsTransportOutcome, RadrootsTransportSatisfactionClass, RadrootsTransportTargetReceipt,
};
pub const SDK_TRANSPORT_TARGET_MAX_COUNT: usize = 20;
@@ -790,7 +786,10 @@ pub struct TransportReceipt {
}
impl TransportReceipt {
- pub fn satisfied_target_count(&self, satisfaction_class: TransportSatisfactionClass) -> usize {
+ pub fn satisfied_target_count(
+ &self,
+ satisfaction_class: RadrootsTransportSatisfactionClass,
+ ) -> usize {
self.target_receipts
.iter()
.filter(|receipt| receipt.status.counts_as_satisfied(satisfaction_class))
diff --git a/crates/sdk/tests/source_boundary.rs b/crates/sdk/tests/source_boundary.rs
@@ -583,6 +583,7 @@ fn sdk_transport_nostr_features_do_not_retain_relay_named_aliases() {
#[test]
fn sdk_transport_public_api_rejects_removed_relay_aliases_and_neutral_target_constructor() {
let manifest_dir = Path::new(env!("CARGO_MANIFEST_DIR"));
+ let lib_source = read_source(manifest_dir.join("src/lib.rs").as_path());
let nostr_adapter = read_source(manifest_dir.join("src/adapters/nostr.rs").as_path());
let transport_source = read_source(manifest_dir.join("src/transport.rs").as_path());
let target_set_impl = source_between(
@@ -597,11 +598,19 @@ fn sdk_transport_public_api_rejects_removed_relay_aliases_and_neutral_target_con
"RadrootsNostrError",
"RadrootsNostrEventId",
"RadrootsNostrOutput",
+ "RadrootsTransportDeliveryReceipt",
+ "RadrootsTransportDeliveryTargetStatus",
+ "RadrootsTransportKind",
+ "RadrootsTransportOutcome",
+ "RadrootsTransportSatisfactionClass",
+ "RadrootsTransportTargetReceipt",
"pub fn nostr_relays",
"pub fn transport_targets",
] {
assert!(
- nostr_adapter.contains(required) || transport_source.contains(required),
+ nostr_adapter.contains(required)
+ || transport_source.contains(required)
+ || lib_source.contains(required),
"SDK public transport API must retain explicit target-state witness `{required}`"
);
}
@@ -622,6 +631,20 @@ fn sdk_transport_public_api_rejects_removed_relay_aliases_and_neutral_target_con
);
}
+ for forbidden in [
+ "RadrootsTransportDeliveryReceipt as TransportDeliveryReceipt",
+ "RadrootsTransportDeliveryTargetStatus as TransportDeliveryTargetStatus",
+ "RadrootsTransportKind as TransportKind",
+ "RadrootsTransportOutcome as TransportOutcome",
+ "RadrootsTransportSatisfactionClass as TransportSatisfactionClass",
+ "RadrootsTransportTargetReceipt as TransportTargetReceipt",
+ ] {
+ assert!(
+ !transport_source.contains(forbidden) && !lib_source.contains(forbidden),
+ "SDK transport public API must not retain removed transport alias `{forbidden}`"
+ );
+ }
+
for relative_root in ["src", "tests", "examples"] {
let root = manifest_dir.join(relative_root);
if !root.exists() {