commit c359ef395697769fa7806e77454f7f2a7b122aa9
parent c54c08d1a494d854f002c5abcee3d0e9cb5d1da1
Author: triesap <tyson@radroots.org>
Date: Sat, 11 Jul 2026 08:01:18 +0000
sdk: route Nostr push through transport facade
- replace SDK adapter-shaped push helper with generic transport dispatch
- route Nostr product push through RadrootsNostrTransport
- update examples, README, and tests for transport-shaped sync
- preserve scoped target receipts, URL policy, and retry semantics
Diffstat:
10 files changed, 124 insertions(+), 68 deletions(-)
diff --git a/crates/sdk/README b/crates/sdk/README
@@ -42,8 +42,8 @@ queued outbox event, so already queued work does not require a configured builde
preview work reports explicit preview-unavailable or deferred receipt state with zero network
attempts; it does not deliver and does not fall back to another transport. Nostr transport publishing
and the `radrootsd-proxy` Publish Proxy transport consume signed outbox events; neither transport
-owns signing. `push_outbox_with_adapter(...)` remains available for tests and controlled
-adapter-level substrate checks. `radrootsd-proxy` adds daemon-resolved publishing through
+owns signing. `push_outbox_with_transport(...)` remains available for tests and controlled
+transport-level substrate checks. `radrootsd-proxy` adds daemon-resolved publishing through
`publish.event`.
`sdk.trades()` exposes the local trade runtime surface. With `runtime`, callers can ingest local trade
@@ -98,7 +98,7 @@ cargo check -p radroots_sdk --example sdk_v1_myc_nip46_signer_setup --features r
preparation, signed-event verification, decoded event matching, and manifest hash access without
local runtime storage.
`sdk_v1_local_enqueue_and_mock_sync` shows localhost Nostr target selection, configured local-key
-signing, prepared listing enqueue, `push_outbox_with_adapter(...)` with a mock relay adapter, and
+signing, prepared listing enqueue, `push_outbox_with_transport(...)` with a Nostr transport facade, and
`TradeStatusRequest`. `sdk_v1_myc_nip46_signer_setup` shows Myc NIP-46 signer provider setup and
product permission derivation at the SDK boundary. The examples stay on product APIs and do not use
wire-event internals.
diff --git a/crates/sdk/examples/sdk_v1_local_enqueue_and_mock_sync.rs b/crates/sdk/examples/sdk_v1_local_enqueue_and_mock_sync.rs
@@ -13,7 +13,7 @@ use radroots_sdk::{
RadrootsSdkLocalKeySigner, RadrootsSdkSignerProvider, RadrootsSdkTimestamp, SdkIdempotencyKey,
TargetPolicy, TargetSet, TradeStatusRequest,
};
-use radroots_transport_nostr::RadrootsMockRelayPublishAdapter;
+use radroots_transport_nostr::{RadrootsMockRelayPublishAdapter, RadrootsNostrTransport};
const LOCAL_RELAY: &str = "ws://localhost:7777";
@@ -47,9 +47,10 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
)
.await?;
let adapter = RadrootsMockRelayPublishAdapter::new();
+ let transport = RadrootsNostrTransport::new(&adapter);
let push = sdk
.sync()
- .push_outbox_with_adapter(&adapter, PushOutboxRequest::new().with_limit(1))
+ .push_outbox_with_transport(&transport, PushOutboxRequest::new().with_limit(1))
.await?;
let order_status = sdk
.trades()
diff --git a/crates/sdk/src/sync_runtime.rs b/crates/sdk/src/sync_runtime.rs
@@ -42,11 +42,11 @@ use radroots_transport::{
#[cfg(all(feature = "runtime", feature = "radrootsd-proxy"))]
use radroots_transport::{RadrootsTransportSatisfactionClass, RadrootsTransportSatisfactionPolicy};
#[cfg(all(feature = "runtime", feature = "transport-nostr-runtime"))]
-use radroots_transport_nostr::RadrootsNostrClientPublishAdapter;
+use radroots_transport_nostr::{RadrootsNostrClientPublishAdapter, RadrootsNostrTransport};
#[cfg(feature = "runtime")]
use radroots_transport_nostr::{
RadrootsOutboxPublishPolicy, RadrootsOutboxPublishReceipt, RadrootsOutboxPublishTargetReceipt,
- RadrootsRelayOutcomeKind, RadrootsRelayPublishAdapter, publish_claimed_outbox_event,
+ RadrootsRelayOutcomeKind, publish_claimed_outbox_event_with_transport,
};
#[cfg(all(feature = "runtime", feature = "radrootsd-proxy"))]
use radroots_transport_publish_protocol::{
@@ -712,7 +712,8 @@ impl<'sdk> SyncClient<'sdk> {
let adapter = RadrootsNostrClientPublishAdapter::new(
RadrootsNostrClient::new_signerless(),
);
- self.push_outbox_with_adapter(&adapter, request).await
+ let transport = RadrootsNostrTransport::new(adapter);
+ self.push_outbox_with_transport(&transport, request).await
}
#[cfg(not(feature = "transport-nostr-runtime"))]
@@ -779,13 +780,13 @@ impl<'sdk> SyncClient<'sdk> {
Ok(summary.ready_signed_events == 0)
}
- pub async fn push_outbox_with_adapter<A>(
+ pub async fn push_outbox_with_transport<T>(
&self,
- adapter: &A,
+ transport: &T,
request: PushOutboxRequest,
) -> Result<PushOutboxReceipt, RadrootsSdkError>
where
- A: RadrootsRelayPublishAdapter,
+ T: radroots_transport::RadrootsTransport + ?Sized,
{
request.validate()?;
let recovery_now_ms = sdk_now_ms(self.sdk)?;
@@ -814,10 +815,10 @@ impl<'sdk> SyncClient<'sdk> {
)
.republish_accepted_relays(request.republish_accepted_targets)
.relay_url_policy(request.nostr_relay_url_policy.nostr_transport_policy());
- let publish = publish_claimed_outbox_event(
+ let publish = publish_claimed_outbox_event_with_transport(
&self.sdk._outbox,
&self.sdk._event_store,
- adapter,
+ transport,
&claimed,
policy,
publish_now_ms,
diff --git a/crates/sdk/tests/farms_runtime.rs b/crates/sdk/tests/farms_runtime.rs
@@ -27,7 +27,7 @@ use radroots_sdk::{
SdkMutationState, SdkPublicLocality, StorageStatusRequest, TargetPolicy, TargetSet,
TransportProfile,
};
-use radroots_transport_nostr::RadrootsMockRelayPublishAdapter;
+use radroots_transport_nostr::{RadrootsMockRelayPublishAdapter, RadrootsNostrTransport};
use sqlx::sqlite::{SqliteConnectOptions, SqlitePoolOptions};
#[path = "support/serializer_failure.rs"]
@@ -807,7 +807,10 @@ async fn farm_enqueue_publish_pushes_queued_event_with_mock_relay_sync() {
let push_receipt = sdk
.sync()
- .push_outbox_with_adapter(&adapter, PushOutboxRequest::new().with_limit(1))
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(&adapter),
+ PushOutboxRequest::new().with_limit(1),
+ )
.await
.expect("push");
@@ -864,7 +867,10 @@ async fn farm_hybrid_profile_publishes_after_nostr_success_and_retains_reticulum
let push_receipt = sdk
.sync()
- .push_outbox_with_adapter(&adapter, PushOutboxRequest::new().with_limit(1))
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(&adapter),
+ PushOutboxRequest::new().with_limit(1),
+ )
.await
.expect("push");
diff --git a/crates/sdk/tests/listings_runtime.rs b/crates/sdk/tests/listings_runtime.rs
@@ -28,7 +28,7 @@ use radroots_sdk::{
SdkMutationState, TargetPolicy, TargetSet, TransportProfile,
};
use radroots_trade::listing::RadrootsListingDraftDocumentV1;
-use radroots_transport_nostr::RadrootsMockRelayPublishAdapter;
+use radroots_transport_nostr::{RadrootsMockRelayPublishAdapter, RadrootsNostrTransport};
#[path = "support/serializer_failure.rs"]
mod serializer_failure;
@@ -832,7 +832,10 @@ async fn listing_hybrid_profile_publishes_after_nostr_success_and_retains_reticu
let push_receipt = sdk
.sync()
- .push_outbox_with_adapter(&adapter, PushOutboxRequest::new().with_limit(1))
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(&adapter),
+ PushOutboxRequest::new().with_limit(1),
+ )
.await
.expect("push");
diff --git a/crates/sdk/tests/orders_runtime.rs b/crates/sdk/tests/orders_runtime.rs
@@ -3485,7 +3485,10 @@ async fn order_submit_enqueue_pushes_queued_event_with_mock_relay_sync() {
let push_receipt = sdk
.sync()
- .push_outbox_with_adapter(&adapter, PushOutboxRequest::new().with_limit(1))
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(&adapter),
+ PushOutboxRequest::new().with_limit(1),
+ )
.await
.expect("push");
diff --git a/crates/sdk/tests/runtime_foundation.rs b/crates/sdk/tests/runtime_foundation.rs
@@ -1067,7 +1067,7 @@ fn sdk_examples_stay_on_product_api_boundary() {
assert!(local_enqueue.contains("RadrootsSdkSignerProvider::LocalKey"));
assert!(local_enqueue.contains("enqueue_prepared_publish"));
assert!(!local_enqueue.contains("enqueue_prepared_publish_with_explicit_signer"));
- assert!(local_enqueue.contains("push_outbox_with_adapter"));
+ assert!(local_enqueue.contains("push_outbox_with_transport"));
assert!(local_enqueue.contains("TradeStatusRequest"));
let myc_setup = include_str!("../examples/sdk_v1_myc_nip46_signer_setup.rs");
diff --git a/crates/sdk/tests/source_boundary.rs b/crates/sdk/tests/source_boundary.rs
@@ -1747,7 +1747,7 @@ fn sdk_direct_nostr_push_receipts_preserve_outbox_target_metadata() {
let sync_runtime_test_source =
read_source(manifest_dir.join("tests/sync_runtime.rs").as_path());
for required in [
- "push_outbox_with_adapter_preserves_scoped_duplicate_target_metadata",
+ "push_outbox_with_transport_preserves_scoped_duplicate_target_metadata",
"push_outbox_adapter_transport_failure_preserves_scoped_target_metadata",
"target.target_scope.as_deref() == Some(\"farm.a\")",
"target.target_scope.as_deref() == Some(\"farm.b\")",
diff --git a/crates/sdk/tests/sync_runtime.rs b/crates/sdk/tests/sync_runtime.rs
@@ -38,8 +38,9 @@ use radroots_transport::{
RadrootsTransportSatisfactionPolicy, RadrootsTransportTarget, RadrootsTransportTargetLabel,
};
use radroots_transport_nostr::{
- RadrootsMockRelayPublishAdapter, RadrootsRelayOutcome, RadrootsRelayPublishAdapter,
- RadrootsRelayPublishRelayReceipt, RadrootsRelayPublishRequest, RadrootsRelayTransportError,
+ RadrootsMockRelayPublishAdapter, RadrootsNostrTransport, RadrootsRelayOutcome,
+ RadrootsRelayPublishAdapter, RadrootsRelayPublishRelayReceipt, RadrootsRelayPublishRequest,
+ RadrootsRelayTransportError,
};
#[cfg(feature = "radrootsd-proxy")]
use std::io::{Read, Write};
@@ -849,8 +850,8 @@ async fn sync_status_reports_pending_retryable_terminal_and_last_attempt_metadat
let retryable_event_id =
enqueue_listing(&sdk, LISTING_A_D_TAG, "Retryable Coffee", &[RELAY_A]).await;
sdk.sync()
- .push_outbox_with_adapter(
- &TransportFailurePublishAdapter,
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(TransportFailurePublishAdapter),
PushOutboxRequest::new().with_limit(1),
)
.await
@@ -858,8 +859,8 @@ async fn sync_status_reports_pending_retryable_terminal_and_last_attempt_metadat
let published_event_id =
enqueue_listing(&sdk, LISTING_B_D_TAG, "Published Coffee", &[RELAY_B]).await;
sdk.sync()
- .push_outbox_with_adapter(
- &RadrootsMockRelayPublishAdapter::new(),
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(RadrootsMockRelayPublishAdapter::new()),
PushOutboxRequest::new().with_limit(1),
)
.await
@@ -1699,7 +1700,7 @@ async fn push_outbox_empty_queue_returns_zero_counts() {
let receipt = sdk
.sync()
- .push_outbox_with_adapter(&adapter, request)
+ .push_outbox_with_transport(&RadrootsNostrTransport::new(&adapter), request)
.await
.expect("push");
@@ -2369,26 +2370,32 @@ async fn push_outbox_rejects_invalid_limits_before_claiming() {
let zero = sdk
.sync()
- .push_outbox_with_adapter(&adapter, PushOutboxRequest::new().with_limit(0))
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(&adapter),
+ PushOutboxRequest::new().with_limit(0),
+ )
.await
.expect_err("zero limit");
let too_large = sdk
.sync()
- .push_outbox_with_adapter(
- &adapter,
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(&adapter),
PushOutboxRequest::new().with_limit(PUSH_OUTBOX_MAX_LIMIT + 1),
)
.await
.expect_err("too large");
let zero_ttl = sdk
.sync()
- .push_outbox_with_adapter(&adapter, PushOutboxRequest::new().with_claim_ttl_ms(0))
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(&adapter),
+ PushOutboxRequest::new().with_claim_ttl_ms(0),
+ )
.await
.expect_err("zero ttl");
let zero_delay = sdk
.sync()
- .push_outbox_with_adapter(
- &adapter,
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(&adapter),
PushOutboxRequest::new().with_next_attempt_delay_ms(0),
)
.await
@@ -2405,14 +2412,17 @@ async fn push_outbox_rejects_invalid_limits_before_claiming() {
}
#[tokio::test]
-async fn push_outbox_with_adapter_uses_queued_targets_without_builder_relays() {
+async fn push_outbox_with_transport_uses_queued_targets_without_builder_relays() {
let (_tempdir, sdk) = directory_sdk(&[]).await;
let outbox_event_id = enqueue_listing(&sdk, LISTING_A_D_TAG, "Coffee", &[RELAY_A]).await;
let adapter = RadrootsMockRelayPublishAdapter::new();
let receipt = sdk
.sync()
- .push_outbox_with_adapter(&adapter, PushOutboxRequest::new().with_limit(1))
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(&adapter),
+ PushOutboxRequest::new().with_limit(1),
+ )
.await
.expect("push");
@@ -2449,7 +2459,7 @@ async fn push_outbox_with_adapter_uses_queued_targets_without_builder_relays() {
}
#[tokio::test]
-async fn push_outbox_with_adapter_preserves_scoped_duplicate_target_metadata() {
+async fn push_outbox_with_transport_preserves_scoped_duplicate_target_metadata() {
let (_tempdir, sdk) = directory_sdk(&[]).await;
let outbox_event_id =
enqueue_scoped_duplicate_listing(&sdk, LISTING_A_D_TAG, "Scoped Coffee").await;
@@ -2457,7 +2467,10 @@ async fn push_outbox_with_adapter_preserves_scoped_duplicate_target_metadata() {
let receipt = sdk
.sync()
- .push_outbox_with_adapter(&adapter, PushOutboxRequest::new().with_limit(1))
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(&adapter),
+ PushOutboxRequest::new().with_limit(1),
+ )
.await
.expect("push");
@@ -2525,8 +2538,8 @@ async fn push_outbox_adapter_transport_failure_preserves_scoped_target_metadata(
let receipt = sdk
.sync()
- .push_outbox_with_adapter(
- &TransportFailurePublishAdapter,
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(TransportFailurePublishAdapter),
PushOutboxRequest::new().with_limit(1),
)
.await
@@ -2592,7 +2605,7 @@ async fn push_outbox_adapter_transport_failure_preserves_scoped_target_metadata(
}
#[tokio::test]
-async fn push_outbox_with_adapter_recovers_expired_publishing_claim_before_selecting_work() {
+async fn push_outbox_with_transport_recovers_expired_publishing_claim_before_selecting_work() {
let tempdir = tempfile::tempdir().expect("tempdir");
let storage = tempdir.path().join("sdk");
let sdk = RadrootsClient::builder()
@@ -2642,7 +2655,10 @@ async fn push_outbox_with_adapter_recovers_expired_publishing_claim_before_selec
let receipt = sdk
.sync()
- .push_outbox_with_adapter(&adapter, PushOutboxRequest::new().with_limit(1))
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(&adapter),
+ PushOutboxRequest::new().with_limit(1),
+ )
.await
.expect("recovered push");
@@ -2670,7 +2686,7 @@ async fn push_outbox_with_adapter_recovers_expired_publishing_claim_before_selec
}
#[tokio::test]
-async fn push_outbox_with_adapter_scopes_duplicate_endpoint_sibling_plans() {
+async fn push_outbox_with_transport_scopes_duplicate_endpoint_sibling_plans() {
let tempdir = tempfile::tempdir().expect("tempdir");
let storage = tempdir.path().join("sdk");
let sdk = RadrootsClient::builder()
@@ -2760,8 +2776,8 @@ async fn push_outbox_with_adapter_scopes_duplicate_endpoint_sibling_plans() {
let first_receipt = sdk
.sync()
- .push_outbox_with_adapter(
- &adapter,
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(&adapter),
PushOutboxRequest::new()
.with_limit(1)
.with_next_attempt_delay_ms(1),
@@ -2804,7 +2820,10 @@ async fn push_outbox_with_adapter_scopes_duplicate_endpoint_sibling_plans() {
let second_receipt = sdk
.sync()
- .push_outbox_with_adapter(&adapter, PushOutboxRequest::new().with_limit(1))
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(&adapter),
+ PushOutboxRequest::new().with_limit(1),
+ )
.await
.expect("second push");
@@ -2847,7 +2866,7 @@ async fn push_outbox_with_adapter_scopes_duplicate_endpoint_sibling_plans() {
}
#[tokio::test]
-async fn push_outbox_with_adapter_can_publish_targeted_ready_event() {
+async fn push_outbox_with_transport_can_publish_targeted_ready_event() {
let (_tempdir, sdk) = directory_sdk(&[]).await;
let older_outbox_event_id =
enqueue_listing(&sdk, LISTING_A_D_TAG, "Earlier Coffee", &[RELAY_A]).await;
@@ -2857,8 +2876,8 @@ async fn push_outbox_with_adapter_can_publish_targeted_ready_event() {
let receipt = sdk
.sync()
- .push_outbox_with_adapter(
- &adapter,
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(&adapter),
PushOutboxRequest::new().with_outbox_event_id(targeted_outbox_event_id),
)
.await
@@ -2901,7 +2920,10 @@ async fn push_outbox_default_public_policy_rejects_queued_localhost_ws_targets()
let error = sdk
.sync()
- .push_outbox_with_adapter(&adapter, PushOutboxRequest::new().with_limit(1))
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(&adapter),
+ PushOutboxRequest::new().with_limit(1),
+ )
.await
.expect_err("public push should reject ws target");
@@ -2910,7 +2932,7 @@ async fn push_outbox_default_public_policy_rejects_queued_localhost_ws_targets()
}
#[tokio::test]
-async fn push_outbox_with_adapter_accepts_explicit_queued_localhost_ws_targets() {
+async fn push_outbox_with_transport_accepts_explicit_queued_localhost_ws_targets() {
let (_tempdir, sdk) = directory_sdk(&[]).await;
let outbox_event_id = enqueue_listing_with_policy(
&sdk,
@@ -2924,8 +2946,8 @@ async fn push_outbox_with_adapter_accepts_explicit_queued_localhost_ws_targets()
let receipt = sdk
.sync()
- .push_outbox_with_adapter(
- &adapter,
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(&adapter),
PushOutboxRequest::new()
.with_limit(1)
.with_nostr_relay_url_policy(NostrRelayUrlPolicy::Localhost),
@@ -3015,7 +3037,10 @@ async fn push_outbox_preserves_retryable_and_terminal_relay_outcomes() {
let receipt = sdk
.sync()
- .push_outbox_with_adapter(&adapter, PushOutboxRequest::new().with_limit(1))
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(&adapter),
+ PushOutboxRequest::new().with_limit(1),
+ )
.await
.expect("push");
@@ -3071,8 +3096,8 @@ async fn push_outbox_continues_after_adapter_transport_failure_and_releases_clai
let receipt = sdk
.sync()
- .push_outbox_with_adapter(
- &TransportFailurePublishAdapter,
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(TransportFailurePublishAdapter),
PushOutboxRequest::new().with_limit(2),
)
.await
@@ -3129,10 +3154,12 @@ async fn concurrent_push_outbox_claims_do_not_publish_the_same_event_twice() {
let adapter = RecordingPublishAdapter::new(Duration::from_millis(50));
let request = PushOutboxRequest::new().with_limit(1);
let sync = sdk.sync();
+ let left_transport = RadrootsNostrTransport::new(&adapter);
+ let right_transport = RadrootsNostrTransport::new(&adapter);
let (left, right) = tokio::join!(
- sync.push_outbox_with_adapter(&adapter, request.clone()),
- sync.push_outbox_with_adapter(&adapter, request)
+ sync.push_outbox_with_transport(&left_transport, request.clone()),
+ sync.push_outbox_with_transport(&right_transport, request)
);
let left = left.expect("left push");
let right = right.expect("right push");
@@ -3151,7 +3178,10 @@ async fn push_outbox_computes_publish_time_for_each_iteration() {
let receipt = sdk
.sync()
- .push_outbox_with_adapter(&adapter, PushOutboxRequest::new().with_limit(2))
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(&adapter),
+ PushOutboxRequest::new().with_limit(2),
+ )
.await
.expect("push");
@@ -3186,7 +3216,10 @@ async fn push_outbox_returns_fatal_error_for_malformed_signed_event_data() {
let error = sdk
.sync()
- .push_outbox_with_adapter(&adapter, PushOutboxRequest::new().with_limit(2))
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(&adapter),
+ PushOutboxRequest::new().with_limit(2),
+ )
.await
.expect_err("fatal malformed outbox data");
@@ -3227,7 +3260,10 @@ async fn push_outbox_does_not_claim_unsigned_outbox_work() {
let receipt = sdk
.sync()
- .push_outbox_with_adapter(&adapter, PushOutboxRequest::new().with_limit(1))
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(&adapter),
+ PushOutboxRequest::new().with_limit(1),
+ )
.await
.expect("push");
diff --git a/crates/sdk/tests/unit/sync_runtime_tests.rs b/crates/sdk/tests/unit/sync_runtime_tests.rs
@@ -47,14 +47,17 @@ use radroots_outbox::{
};
#[cfg(feature = "radrootsd-proxy")]
use radroots_transport::{
- RADROOTS_RETICULUM_PREVIEW_ENDPOINT_URI, RadrootsTransportKind, RadrootsTransportMeshScopeId,
- RadrootsTransportSatisfactionClass, RadrootsTransportSatisfactionPolicy,
- RadrootsTransportTarget, RadrootsTransportTargetLabel,
+ RADROOTS_RETICULUM_PREVIEW_ENDPOINT_URI, RadrootsTransportSatisfactionClass,
+ RadrootsTransportSatisfactionPolicy,
+};
+use radroots_transport::{
+ RadrootsTransportKind, RadrootsTransportMeshScopeId, RadrootsTransportTarget,
+ RadrootsTransportTargetLabel,
};
use radroots_transport_nostr::{
- RadrootsOutboxPublishReceipt, RadrootsOutboxPublishTargetReceipt, RadrootsRelayOutcomeKind,
- RadrootsRelayPublishAdapter, RadrootsRelayPublishRelayReceipt, RadrootsRelayPublishRequest,
- RadrootsRelayTransportError,
+ RadrootsNostrTransport, RadrootsOutboxPublishReceipt, RadrootsOutboxPublishTargetReceipt,
+ RadrootsRelayOutcomeKind, RadrootsRelayPublishAdapter, RadrootsRelayPublishRelayReceipt,
+ RadrootsRelayPublishRequest, RadrootsRelayTransportError,
};
#[cfg(feature = "radrootsd-proxy")]
use radroots_transport_publish_protocol::{
@@ -792,7 +795,10 @@ async fn sync_runtime_reports_clock_errors_before_store_or_relay_work() {
));
assert!(matches!(
sdk.sync()
- .push_outbox_with_adapter(&UnusedPublishAdapter, super::PushOutboxRequest::new())
+ .push_outbox_with_transport(
+ &RadrootsNostrTransport::new(UnusedPublishAdapter),
+ super::PushOutboxRequest::new()
+ )
.await,
Err(RadrootsSdkError::ClockBeforeUnixEpoch)
));