lib

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

commit 0da30c9e42d3ac45365bb4c306129a9543f11bd4
parent a528f0fee4606c62ebaa15698dcbc6b5c9ca41a3
Author: triesap <tyson@radroots.org>
Date:   Mon,  6 Jul 2026 22:48:42 +0000

sdk: align workflow sync transport surfaces

Diffstat:
Mcrates/sdk/examples/runtime_local.rs | 6+++---
Mcrates/sdk/src/dvm_runtime.rs | 24++++++++++++------------
Mcrates/sdk/src/error.rs | 80++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mcrates/sdk/src/farms_runtime.rs | 28++++++++++++++--------------
Mcrates/sdk/src/idempotency.rs | 6+++---
Mcrates/sdk/src/lib.rs | 10+++++-----
Mcrates/sdk/src/listings_runtime.rs | 32++++++++++++++++----------------
Mcrates/sdk/src/orders_runtime.rs | 500++++++++++++++++++++++++++++++++++++++++---------------------------------------
Mcrates/sdk/src/runtime.rs | 4++--
Mcrates/sdk/src/sync_runtime.rs | 94++++++++++++++++++++++++++++++++++++++++---------------------------------------
Mcrates/sdk/src/transport.rs | 4++--
Mcrates/sdk/src/workflow_runtime.rs | 26+++++++++++++-------------
Mcrates/sdk/tests/dvm_runtime.rs | 10++++++++--
Mcrates/sdk/tests/farms_runtime.rs | 24++++++++++++------------
Mcrates/sdk/tests/listings_runtime.rs | 16++++++++--------
Mcrates/sdk/tests/market_runtime.rs | 2+-
Mcrates/sdk/tests/orders_runtime.rs | 132++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mcrates/sdk/tests/runtime_foundation.rs | 34+++++++++++++++++-----------------
Mcrates/sdk/tests/sync_runtime.rs | 137+++++++++++++++++++++++++++++++++++++++++--------------------------------------
Mcrates/sdk/tests/trade_product_publish_runtime.rs | 10+++++-----
Mcrates/sdk/tests/trade_public_api.rs | 4++--
Mcrates/sdk/tests/unit/dvm_runtime_tests.rs | 6+++---
Mcrates/sdk/tests/unit/error_tests.rs | 18+++++++++---------
Mcrates/sdk/tests/unit/farms_runtime_tests.rs | 18+++++++++---------
Mcrates/sdk/tests/unit/listings_runtime_tests.rs | 16++++++++--------
Mcrates/sdk/tests/unit/orders_runtime_tests.rs | 170++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mcrates/sdk/tests/unit/runtime_tests.rs | 4++--
Mcrates/sdk/tests/unit/sync_runtime_tests.rs | 98+++++++++++++++++++++++++++++++++++++------------------------------------------
Mcrates/sdk/tests/unit/transport_tests.rs | 10+++++-----
Mcrates/sdk/tests/unit/workflow_runtime_tests.rs | 18+++++++++---------
30 files changed, 777 insertions(+), 764 deletions(-)

diff --git a/crates/sdk/examples/runtime_local.rs b/crates/sdk/examples/runtime_local.rs @@ -29,7 +29,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> { let actor = RadrootsActorContext::test(seller.as_str(), [RadrootsActorRole::Seller])?; let listing = sample_listing(seller.as_str()); let prepare_request = ListingPreparePublishRequest::new(actor.clone(), listing); - let target_relays = TargetPolicy::try_nostr_relays([RELAY], NostrRelayUrlPolicy::Public)?; + let target_policy = TargetPolicy::try_nostr_relays([RELAY], NostrRelayUrlPolicy::Public)?; let idempotency_key = SdkIdempotencyKey::new("example-1")?; let prepared = sdk.listings().prepare_publish(prepare_request)?; @@ -38,7 +38,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> { .enqueue_prepared_publish( &actor, prepared.clone(), - target_relays, + target_policy, Some(idempotency_key), ) .await?; @@ -58,7 +58,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> { #[cfg(feature = "relay-runtime")] assert!(matches!( push, - Err(RadrootsSdkError::ProductSyncRelaySetupFailure { .. }) + Err(RadrootsSdkError::ProductSyncTransportSetupFailure { .. }) )); #[cfg(not(feature = "relay-runtime"))] assert!(matches!( diff --git a/crates/sdk/src/dvm_runtime.rs b/crates/sdk/src/dvm_runtime.rs @@ -174,7 +174,7 @@ impl DvmTradeTransitionProofPrepareRequest { pub struct DvmTradeTransitionProofEnqueueRequest { #[serde(flatten)] pub prepare: DvmTradeTransitionProofPrepareRequest, - pub target_relays: TargetPolicy, + pub target_policy: TargetPolicy, pub idempotency_key: Option<SdkIdempotencyKey>, } @@ -188,7 +188,7 @@ impl DvmTradeTransitionProofEnqueueRequest { request_event_id: RadrootsEventId, decision_event_id: RadrootsEventId, inventory_bins: Vec<RadrootsTradeInventoryBinWitnessDto>, - target_relays: TargetPolicy, + target_policy: TargetPolicy, ) -> Self { Self::from_prepare( DvmTradeTransitionProofPrepareRequest::new( @@ -200,31 +200,31 @@ impl DvmTradeTransitionProofEnqueueRequest { decision_event_id, inventory_bins, ), - target_relays, + target_policy, ) } pub fn from_prepare( prepare: DvmTradeTransitionProofPrepareRequest, - target_relays: TargetPolicy, + target_policy: TargetPolicy, ) -> Self { Self { prepare, - target_relays, + target_policy, idempotency_key: None, } } - pub fn try_with_target_relays<I, S>( + pub fn try_with_nostr_targets<I, S>( mut self, - target_relays: I, + target_policy: I, policy: NostrRelayUrlPolicy, ) -> Result<Self, RadrootsSdkError> where I: IntoIterator<Item = S>, S: AsRef<str>, { - self.target_relays = TargetPolicy::try_nostr_relays(target_relays, policy)?; + self.target_policy = TargetPolicy::try_nostr_relays(target_policy, policy)?; Ok(self) } @@ -420,7 +420,7 @@ impl<'sdk> DvmClient<'sdk> { request: DvmTradeTransitionProofEnqueueRequest, ) -> Result<DvmTradeTransitionProofReceipt, RadrootsSdkError> { let actor = request.prepare.actor.clone(); - let target_relays = request.target_relays.clone(); + let target_policy = request.target_policy.clone(); let idempotency_key = request.idempotency_key.clone(); let plan = self.prepare_trade_transition_proof_request(request.prepare)?; let enqueue = enqueue_configured_signed_workflow( @@ -429,7 +429,7 @@ impl<'sdk> DvmClient<'sdk> { operation_kind: DVM_TRADE_TRANSITION_PROOF_REQUEST_OPERATION_KIND, actor: &actor, frozen_draft: &plan.frozen_draft, - target_relays, + target_policy, satisfaction_policy: SatisfactionPolicy::AllTargets, idempotency_key, }, @@ -444,7 +444,7 @@ impl<'sdk> DvmClient<'sdk> { signer: &dyn RadrootsEventSigner, ) -> Result<DvmTradeTransitionProofReceipt, RadrootsSdkError> { let actor = request.prepare.actor.clone(); - let target_relays = request.target_relays.clone(); + let target_policy = request.target_policy.clone(); let idempotency_key = request.idempotency_key.clone(); let plan = self.prepare_trade_transition_proof_request(request.prepare)?; let enqueue = enqueue_signed_workflow( @@ -453,7 +453,7 @@ impl<'sdk> DvmClient<'sdk> { operation_kind: DVM_TRADE_TRANSITION_PROOF_REQUEST_OPERATION_KIND, actor: &actor, frozen_draft: &plan.frozen_draft, - target_relays, + target_policy, satisfaction_policy: SatisfactionPolicy::AllTargets, idempotency_key, }, diff --git a/crates/sdk/src/error.rs b/crates/sdk/src/error.rs @@ -32,7 +32,7 @@ pub enum RadrootsSdkRecoveryAction { InspectLocalStores, InspectGeoNamesAsset, RetryOperationWithSameIdempotencyKey, - ConfigureRelayTargets, + ConfigureTransportTargets, ConfigureGeoNamesCache, ConfigureSigner, FixRequest, @@ -126,10 +126,10 @@ pub enum RadrootsSdkError { operation: String, reason: String, }, - EmptyTargetRelays { + EmptyTransportTargets { operation: String, }, - RelayTargetLimitExceeded { + TransportTargetLimitExceeded { max: usize, actual: usize, }, @@ -166,7 +166,7 @@ pub enum RadrootsSdkError { operation: &'static str, required_feature: &'static str, }, - ProductSyncRelaySetupFailure { + ProductSyncTransportSetupFailure { message: String, }, Authority { @@ -194,7 +194,7 @@ pub enum RadrootsSdkError { kind: RadrootsSdkGeoNamesErrorKind, message: String, }, - RelayTransport { + Transport { message: String, }, Projection { @@ -219,8 +219,8 @@ impl RadrootsSdkError { Self::SignerTransport { .. } => "signer_transport", Self::SignerProtocol { .. } => "signer_protocol", Self::SignerReturnedEventDrift { .. } => "signer_returned_event_drift", - Self::EmptyTargetRelays { .. } => "empty_target_relays", - Self::RelayTargetLimitExceeded { .. } => "relay_target_limit_exceeded", + Self::EmptyTransportTargets { .. } => "empty_transport_targets", + Self::TransportTargetLimitExceeded { .. } => "transport_target_limit_exceeded", Self::InvalidRelayUrl { .. } => "invalid_relay_url", Self::IdempotencyConflict { .. } => "idempotency_conflict", Self::TradeStatusLimitInvalid { .. } => "trade_status_limit_invalid", @@ -228,7 +228,7 @@ impl RadrootsSdkError { Self::TradeAmbiguous { .. } => "trade_ambiguous", Self::PrivacyPreflight { .. } => "privacy_preflight", Self::ProductSyncUnsupported { .. } => "product_sync_unsupported", - Self::ProductSyncRelaySetupFailure { .. } => "product_sync_relay_setup_failure", + Self::ProductSyncTransportSetupFailure { .. } => "product_sync_transport_setup_failure", Self::Authority { .. } => "authority", Self::EventStore { .. } => "event_store", Self::InvalidRequest { .. } => "invalid_request", @@ -244,7 +244,7 @@ impl RadrootsSdkError { RadrootsSdkGeoNamesErrorKind::Schema => "geonames_schema", RadrootsSdkGeoNamesErrorKind::Lookup => "geonames_lookup", }, - Self::RelayTransport { .. } => "relay_transport", + Self::Transport { .. } => "transport", Self::Projection { .. } => "projection", Self::PartialLocalMutation(_) => "partial_local_mutation", } @@ -274,8 +274,8 @@ impl RadrootsSdkError { | Self::SignerReturnedEventDrift { .. } | Self::Authority { .. } => RadrootsSdkErrorClass::Authorization, Self::SignerUnavailable { .. } => RadrootsSdkErrorClass::Configuration, - Self::EmptyTargetRelays { .. } - | Self::RelayTargetLimitExceeded { .. } + Self::EmptyTransportTargets { .. } + | Self::TransportTargetLimitExceeded { .. } | Self::InvalidRelayUrl { .. } => RadrootsSdkErrorClass::Configuration, Self::IdempotencyConflict { .. } | Self::TradeStatusLimitInvalid { .. } @@ -288,8 +288,8 @@ impl RadrootsSdkError { | Self::ListingDraft { .. } | Self::ListingMutation { .. } => RadrootsSdkErrorClass::Request, Self::ProductSyncUnsupported { .. } => RadrootsSdkErrorClass::Unsupported, - Self::ProductSyncRelaySetupFailure { .. } - | Self::RelayTransport { .. } + Self::ProductSyncTransportSetupFailure { .. } + | Self::Transport { .. } | Self::SignerRequestTimedOut { .. } | Self::SignerTransport { .. } => RadrootsSdkErrorClass::Transport, Self::PartialLocalMutation(_) => RadrootsSdkErrorClass::LocalMutation, @@ -300,7 +300,7 @@ impl RadrootsSdkError { matches!( self, Self::Io { .. } - | Self::ProductSyncRelaySetupFailure { .. } + | Self::ProductSyncTransportSetupFailure { .. } | Self::EventStore { .. } | Self::Outbox { .. } | Self::PrivateStore { .. } @@ -309,7 +309,7 @@ impl RadrootsSdkError { | RadrootsSdkGeoNamesErrorKind::Download, .. } - | Self::RelayTransport { .. } + | Self::Transport { .. } | Self::SignerRequestTimedOut { .. } | Self::SignerTransport { .. } | Self::Projection { .. } @@ -344,10 +344,10 @@ impl RadrootsSdkError { | Self::SignerReturnedEventDrift { .. } | Self::Authority { .. } => vec![RadrootsSdkRecoveryAction::SelectAuthorizedActor], Self::SignerUnavailable { .. } => vec![RadrootsSdkRecoveryAction::ConfigureSigner], - Self::EmptyTargetRelays { .. } - | Self::RelayTargetLimitExceeded { .. } + Self::EmptyTransportTargets { .. } + | Self::TransportTargetLimitExceeded { .. } | Self::InvalidRelayUrl { .. } => { - vec![RadrootsSdkRecoveryAction::ConfigureRelayTargets] + vec![RadrootsSdkRecoveryAction::ConfigureTransportTargets] } Self::IdempotencyConflict { .. } => { vec![RadrootsSdkRecoveryAction::RetryOperationWithSameIdempotencyKey] @@ -357,7 +357,7 @@ impl RadrootsSdkError { Self::ProductSyncUnsupported { .. } => { vec![RadrootsSdkRecoveryAction::EnableRequiredFeature] } - Self::ProductSyncRelaySetupFailure { .. } | Self::RelayTransport { .. } => { + Self::ProductSyncTransportSetupFailure { .. } | Self::Transport { .. } => { vec![RadrootsSdkRecoveryAction::RetryAfterTransportFailure] } Self::SignerRequestTimedOut { .. } | Self::SignerTransport { .. } => { @@ -410,8 +410,8 @@ impl RadrootsSdkError { Self::SignerReturnedEventDrift { operation, reason } => { json!({ "operation": operation, "reason": reason }) } - Self::EmptyTargetRelays { operation } => json!({ "operation": operation }), - Self::RelayTargetLimitExceeded { max, actual } => { + Self::EmptyTransportTargets { operation } => json!({ "operation": operation }), + Self::TransportTargetLimitExceeded { max, actual } => { json!({ "max": max, "actual": actual }) } Self::InvalidRelayUrl { url, reason } => json!({ "url": url, "reason": reason }), @@ -454,7 +454,7 @@ impl RadrootsSdkError { operation, required_feature, } => json!({ "operation": operation, "required_feature": required_feature }), - Self::ProductSyncRelaySetupFailure { message } + Self::ProductSyncTransportSetupFailure { message } | Self::Authority { message } | Self::EventStore { message } | Self::InvalidRequest { message } @@ -462,7 +462,7 @@ impl RadrootsSdkError { | Self::ListingMutation { message } | Self::Outbox { message } | Self::PrivateStore { message } - | Self::RelayTransport { message } + | Self::Transport { message } | Self::Projection { message } => json!({ "message": message }), Self::GeoNames { kind, message } => json!({ "kind": kind, "message": message }), Self::PartialLocalMutation(error) => json!(error), @@ -513,14 +513,14 @@ impl RadrootsSdkError { }) } - pub(crate) fn empty_target_relays(operation: impl Into<String>) -> Self { - Self::EmptyTargetRelays { + pub(crate) fn empty_transport_targets(operation: impl Into<String>) -> Self { + Self::EmptyTransportTargets { operation: operation.into(), } } - pub(crate) fn relay_target_limit_exceeded(max: usize, actual: usize) -> Self { - Self::RelayTargetLimitExceeded { max, actual } + pub(crate) fn transport_target_limit_exceeded(max: usize, actual: usize) -> Self { + Self::TransportTargetLimitExceeded { max, actual } } pub(crate) fn invalid_relay_url(url: impl Into<String>, reason: impl Into<String>) -> Self { @@ -601,13 +601,13 @@ impl fmt::Display for RadrootsSdkError { "sdk signer returned event drift for {operation}: {reason}" ) } - Self::EmptyTargetRelays { operation } => { - write!(f, "sdk empty target relays for {operation}") + Self::EmptyTransportTargets { operation } => { + write!(f, "sdk empty transport targets for {operation}") } - Self::RelayTargetLimitExceeded { max, actual } => { + Self::TransportTargetLimitExceeded { max, actual } => { write!( f, - "sdk relay target limit exceeded: max={max}, actual={actual}" + "sdk transport target limit exceeded: max={max}, actual={actual}" ) } Self::InvalidRelayUrl { url, reason } => { @@ -655,8 +655,8 @@ impl fmt::Display for RadrootsSdkError { f, "sdk product sync operation {operation} requires feature `{required_feature}`" ), - Self::ProductSyncRelaySetupFailure { message } => { - write!(f, "sdk product sync relay setup failed: {message}") + Self::ProductSyncTransportSetupFailure { message } => { + write!(f, "sdk product sync transport setup failed: {message}") } Self::Authority { message } => write!(f, "sdk authority error: {message}"), Self::EventStore { message } => write!(f, "sdk event store error: {message}"), @@ -670,8 +670,8 @@ impl fmt::Display for RadrootsSdkError { Self::GeoNames { kind, message } => { write!(f, "sdk GeoNames {kind:?} error: {message}") } - Self::RelayTransport { message } => { - write!(f, "sdk relay transport error: {message}") + Self::Transport { message } => { + write!(f, "sdk transport error: {message}") } Self::Projection { message } => write!(f, "sdk projection error: {message}"), Self::PartialLocalMutation(error) => write!( @@ -824,7 +824,7 @@ impl From<radroots_outbox::RadrootsOutboxError> for RadrootsSdkError { fn from(error: radroots_outbox::RadrootsOutboxError) -> Self { match error { radroots_outbox::RadrootsOutboxError::EmptyDeliveryTargets => { - Self::empty_target_relays("outbox enqueue") + Self::empty_transport_targets("outbox enqueue") } radroots_outbox::RadrootsOutboxError::IdempotencyConflict { operation_kind, @@ -850,9 +850,9 @@ impl From<radroots_transport::RadrootsTransportError> for RadrootsSdkError { fn from(error: radroots_transport::RadrootsTransportError) -> Self { match error { radroots_transport::RadrootsTransportError::EmptyTargetSet => { - Self::empty_target_relays("transport target set") + Self::empty_transport_targets("transport target set") } - error => Self::RelayTransport { + error => Self::Transport { message: error.to_string(), }, } @@ -896,11 +896,11 @@ impl From<radroots_transport_nostr::RadrootsRelayTransportError> for RadrootsSdk format!("relay URL resolved to forbidden address `{address}`: {reason}"), ), radroots_transport_nostr::RadrootsRelayTransportError::EmptyTargetSet => { - Self::empty_target_relays("relay publish") + Self::empty_transport_targets("nostr relay publish") } #[cfg(feature = "runtime")] radroots_transport_nostr::RadrootsRelayTransportError::Outbox(error) => error.into(), - error => Self::RelayTransport { + error => Self::Transport { message: error.to_string(), }, } diff --git a/crates/sdk/src/farms_runtime.rs b/crates/sdk/src/farms_runtime.rs @@ -69,7 +69,7 @@ pub struct FarmEnqueuePublishRequest { #[serde(serialize_with = "crate::actor_json::serialize_actor_context")] pub actor: RadrootsActorContext, pub farm: RadrootsFarm, - pub target_relays: TargetPolicy, + pub target_policy: TargetPolicy, pub idempotency_key: Option<SdkIdempotencyKey>, pub created_at: Option<RadrootsSdkTimestamp>, } @@ -79,27 +79,27 @@ impl FarmEnqueuePublishRequest { pub fn new( actor: RadrootsActorContext, farm: RadrootsFarm, - target_relays: TargetPolicy, + target_policy: TargetPolicy, ) -> Self { Self { actor, farm, - target_relays, + target_policy, idempotency_key: None, created_at: None, } } - pub fn try_with_target_relays<I, S>( + pub fn try_with_nostr_targets<I, S>( mut self, - target_relays: I, + target_policy: I, policy: NostrRelayUrlPolicy, ) -> Result<Self, RadrootsSdkError> where I: IntoIterator<Item = S>, S: AsRef<str>, { - self.target_relays = TargetPolicy::try_nostr_relays(target_relays, policy)?; + self.target_policy = TargetPolicy::try_nostr_relays(target_policy, policy)?; Ok(self) } @@ -424,7 +424,7 @@ impl<'sdk> FarmsClient<'sdk> { let FarmEnqueuePublishRequest { actor, farm, - target_relays, + target_policy, idempotency_key, created_at, } = request; @@ -434,7 +434,7 @@ impl<'sdk> FarmsClient<'sdk> { created_at, }; let plan = self.prepare_publish(prepare_request)?; - self.enqueue_prepared_publish(&actor, plan, target_relays, idempotency_key) + self.enqueue_prepared_publish(&actor, plan, target_policy, idempotency_key) .await } @@ -446,7 +446,7 @@ impl<'sdk> FarmsClient<'sdk> { let FarmEnqueuePublishRequest { actor, farm, - target_relays, + target_policy, idempotency_key, created_at, } = request; @@ -459,7 +459,7 @@ impl<'sdk> FarmsClient<'sdk> { self.enqueue_prepared_publish_with_explicit_signer( &actor, plan, - target_relays, + target_policy, idempotency_key, signer, ) @@ -471,7 +471,7 @@ impl<'sdk> FarmsClient<'sdk> { &self, actor: &RadrootsActorContext, plan: FarmPublishPlan, - target_relays: TargetPolicy, + target_policy: TargetPolicy, idempotency_key: Option<SdkIdempotencyKey>, ) -> Result<FarmEnqueueReceipt, RadrootsSdkError> { let enqueue = enqueue_configured_signed_workflow( @@ -480,7 +480,7 @@ impl<'sdk> FarmsClient<'sdk> { operation_kind: FARM_PUBLISH_OPERATION_KIND, actor, frozen_draft: &plan.frozen_draft, - target_relays, + target_policy, satisfaction_policy: SatisfactionPolicy::AllTargets, idempotency_key, }, @@ -493,7 +493,7 @@ impl<'sdk> FarmsClient<'sdk> { &self, actor: &RadrootsActorContext, plan: FarmPublishPlan, - target_relays: TargetPolicy, + target_policy: TargetPolicy, idempotency_key: Option<SdkIdempotencyKey>, signer: &dyn RadrootsEventSigner, ) -> Result<FarmEnqueueReceipt, RadrootsSdkError> { @@ -503,7 +503,7 @@ impl<'sdk> FarmsClient<'sdk> { operation_kind: FARM_PUBLISH_OPERATION_KIND, actor, frozen_draft: &plan.frozen_draft, - target_relays, + target_policy, satisfaction_policy: SatisfactionPolicy::AllTargets, idempotency_key, }, diff --git a/crates/sdk/src/idempotency.rs b/crates/sdk/src/idempotency.rs @@ -45,13 +45,13 @@ impl SdkIdempotencyKey { operation_kind: &'static str, expected_event_id: &str, expected_pubkey: &str, - target_relays: &[String], + target_policy: &[String], ) -> Self { let input = SdkIdempotencyDerivationInput { operation_kind, expected_event_id, expected_pubkey, - target_relays, + target_policy, }; let bytes = serde_json::to_vec(&input).expect("idempotency derivation input serializes"); let digest = hex::encode(Sha256::digest(bytes)); @@ -86,7 +86,7 @@ struct SdkIdempotencyDerivationInput<'a> { operation_kind: &'static str, expected_event_id: &'a str, expected_pubkey: &'a str, - target_relays: &'a [String], + target_policy: &'a [String], } #[derive(Clone, Debug, PartialEq, Eq, serde::Serialize)] diff --git a/crates/sdk/src/lib.rs b/crates/sdk/src/lib.rs @@ -217,11 +217,11 @@ pub use crate::signer_provider::{ pub use crate::sync_runtime::{ PUSH_OUTBOX_DEFAULT_CLAIM_TTL_MS, PUSH_OUTBOX_DEFAULT_LIMIT, PUSH_OUTBOX_DEFAULT_NEXT_ATTEMPT_DELAY_MS, PUSH_OUTBOX_MAX_LIMIT, PushOutboxEventReceipt, - PushOutboxEventState, PushOutboxReceipt, PushOutboxRelayOutcomeKind, PushOutboxRelayReceipt, - PushOutboxRequest, SYNC_PROJECTION_REFRESH_DEFAULT_LIMIT, SYNC_PROJECTION_REFRESH_MAX_LIMIT, - SdkRelayAuthPolicy, SyncEventStoreStatus, SyncOutboxStatus, SyncProjectionRefreshReceipt, - SyncProjectionRefreshRequest, SyncRelayTargetSummary, SyncStatusReceipt, SyncStatusRequest, - SyncStatusSource, + PushOutboxEventState, PushOutboxReceipt, PushOutboxRequest, PushOutboxTargetOutcomeKind, + PushOutboxTargetReceipt, SYNC_PROJECTION_REFRESH_DEFAULT_LIMIT, + SYNC_PROJECTION_REFRESH_MAX_LIMIT, SdkRelayAuthPolicy, SyncEventStoreStatus, SyncOutboxStatus, + SyncProjectionRefreshReceipt, SyncProjectionRefreshRequest, SyncStatusReceipt, + SyncStatusRequest, SyncStatusSource, SyncTransportProfileSummary, }; #[cfg(feature = "runtime")] pub use crate::trade_storage::{ diff --git a/crates/sdk/src/listings_runtime.rs b/crates/sdk/src/listings_runtime.rs @@ -68,7 +68,7 @@ pub struct ListingEnqueuePublishRequest { #[serde(serialize_with = "crate::actor_json::serialize_actor_context")] pub actor: RadrootsActorContext, pub document: RadrootsListingDraftDocumentV1, - pub target_relays: TargetPolicy, + pub target_policy: TargetPolicy, pub idempotency_key: Option<SdkIdempotencyKey>, pub created_at: Option<RadrootsSdkTimestamp>, } @@ -78,39 +78,39 @@ impl ListingEnqueuePublishRequest { pub fn new( actor: RadrootsActorContext, listing: RadrootsListing, - target_relays: TargetPolicy, + target_policy: TargetPolicy, ) -> Self { Self::from_document( actor, RadrootsListingDraftDocumentV1::new(listing), - target_relays, + target_policy, ) } pub fn from_document( actor: RadrootsActorContext, document: RadrootsListingDraftDocumentV1, - target_relays: TargetPolicy, + target_policy: TargetPolicy, ) -> Self { Self { actor, document, - target_relays, + target_policy, idempotency_key: None, created_at: None, } } - pub fn try_with_target_relays<I, S>( + pub fn try_with_nostr_targets<I, S>( mut self, - target_relays: I, + target_policy: I, policy: NostrRelayUrlPolicy, ) -> Result<Self, RadrootsSdkError> where I: IntoIterator<Item = S>, S: AsRef<str>, { - self.target_relays = TargetPolicy::try_nostr_relays(target_relays, policy)?; + self.target_policy = TargetPolicy::try_nostr_relays(target_policy, policy)?; Ok(self) } @@ -194,7 +194,7 @@ impl<'sdk> ListingsClient<'sdk> { let ListingEnqueuePublishRequest { actor, document, - target_relays, + target_policy, idempotency_key, created_at, } = request; @@ -204,7 +204,7 @@ impl<'sdk> ListingsClient<'sdk> { created_at, }; let plan = self.prepare_publish(prepare_request)?; - self.enqueue_prepared_publish(&actor, plan, target_relays, idempotency_key) + self.enqueue_prepared_publish(&actor, plan, target_policy, idempotency_key) .await } @@ -216,7 +216,7 @@ impl<'sdk> ListingsClient<'sdk> { let ListingEnqueuePublishRequest { actor, document, - target_relays, + target_policy, idempotency_key, created_at, } = request; @@ -229,7 +229,7 @@ impl<'sdk> ListingsClient<'sdk> { self.enqueue_prepared_publish_with_explicit_signer( &actor, plan, - target_relays, + target_policy, idempotency_key, signer, ) @@ -241,7 +241,7 @@ impl<'sdk> ListingsClient<'sdk> { &self, actor: &RadrootsActorContext, plan: ListingPublishPlan, - target_relays: TargetPolicy, + target_policy: TargetPolicy, idempotency_key: Option<SdkIdempotencyKey>, ) -> Result<ListingEnqueueReceipt, RadrootsSdkError> { let enqueue = enqueue_configured_signed_workflow( @@ -250,7 +250,7 @@ impl<'sdk> ListingsClient<'sdk> { operation_kind: LISTING_PUBLISH_OPERATION_KIND, actor, frozen_draft: &plan.frozen_draft, - target_relays, + target_policy, satisfaction_policy: SatisfactionPolicy::AllTargets, idempotency_key, }, @@ -263,7 +263,7 @@ impl<'sdk> ListingsClient<'sdk> { &self, actor: &RadrootsActorContext, plan: ListingPublishPlan, - target_relays: TargetPolicy, + target_policy: TargetPolicy, idempotency_key: Option<SdkIdempotencyKey>, signer: &dyn RadrootsEventSigner, ) -> Result<ListingEnqueueReceipt, RadrootsSdkError> { @@ -273,7 +273,7 @@ impl<'sdk> ListingsClient<'sdk> { operation_kind: LISTING_PUBLISH_OPERATION_KIND, actor, frozen_draft: &plan.frozen_draft, - target_relays, + target_policy, satisfaction_policy: SatisfactionPolicy::AllTargets, idempotency_key, }, diff --git a/crates/sdk/src/orders_runtime.rs b/crates/sdk/src/orders_runtime.rs @@ -280,9 +280,9 @@ pub struct TradeSubmitEnqueueRequest { pub actor: RadrootsActorContext, pub listing_event: RadrootsNostrEventPtr, pub order: RadrootsOrderRequest, - pub target_relays: TargetPolicy, + pub target_policy: TargetPolicy, pub publish_mode: PublishMode, - pub ack_policy: SatisfactionPolicy, + pub satisfaction_policy: SatisfactionPolicy, pub idempotency_key: Option<SdkIdempotencyKey>, pub created_at: Option<RadrootsSdkTimestamp>, } @@ -294,32 +294,32 @@ impl TradeSubmitEnqueueRequest { actor: RadrootsActorContext, listing_event: RadrootsNostrEventPtr, order: RadrootsOrderRequest, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, ) -> Self { Self { actor, listing_event, order, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key: None, created_at: None, } } - pub fn try_with_target_relays<I, S>( + pub fn try_with_nostr_targets<I, S>( mut self, - target_relays: I, + target_policy: I, policy: NostrRelayUrlPolicy, ) -> Result<Self, RadrootsSdkError> where I: IntoIterator<Item = S>, S: AsRef<str>, { - self.target_relays = TargetPolicy::try_nostr_relays(target_relays, policy)?; + self.target_policy = TargetPolicy::try_nostr_relays(target_policy, policy)?; Ok(self) } @@ -486,9 +486,9 @@ pub struct TradeDecisionEnqueueRequest { pub actor: RadrootsActorContext, pub request_event: RadrootsNostrEventPtr, pub decision: RadrootsOrderDecision, - pub target_relays: TargetPolicy, + pub target_policy: TargetPolicy, pub publish_mode: PublishMode, - pub ack_policy: SatisfactionPolicy, + pub satisfaction_policy: SatisfactionPolicy, pub idempotency_key: Option<SdkIdempotencyKey>, pub created_at: Option<RadrootsSdkTimestamp>, } @@ -500,32 +500,32 @@ impl TradeDecisionEnqueueRequest { actor: RadrootsActorContext, request_event: RadrootsNostrEventPtr, decision: RadrootsOrderDecision, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, ) -> Self { Self { actor, request_event, decision, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key: None, created_at: None, } } - pub fn try_with_target_relays<I, S>( + pub fn try_with_nostr_targets<I, S>( mut self, - target_relays: I, + target_policy: I, policy: NostrRelayUrlPolicy, ) -> Result<Self, RadrootsSdkError> where I: IntoIterator<Item = S>, S: AsRef<str>, { - self.target_relays = TargetPolicy::try_nostr_relays(target_relays, policy)?; + self.target_policy = TargetPolicy::try_nostr_relays(target_policy, policy)?; Ok(self) } @@ -627,9 +627,9 @@ pub struct TradeRevisionProposalEnqueueRequest { pub root_event: RadrootsNostrEventPtr, pub previous_event: RadrootsNostrEventPtr, pub proposal: RadrootsOrderRevisionProposal, - pub target_relays: TargetPolicy, + pub target_policy: TargetPolicy, pub publish_mode: PublishMode, - pub ack_policy: SatisfactionPolicy, + pub satisfaction_policy: SatisfactionPolicy, pub idempotency_key: Option<SdkIdempotencyKey>, pub created_at: Option<RadrootsSdkTimestamp>, } @@ -642,33 +642,33 @@ impl TradeRevisionProposalEnqueueRequest { root_event: RadrootsNostrEventPtr, previous_event: RadrootsNostrEventPtr, proposal: RadrootsOrderRevisionProposal, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, ) -> Self { Self { actor, root_event, previous_event, proposal, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key: None, created_at: None, } } - pub fn try_with_target_relays<I, S>( + pub fn try_with_nostr_targets<I, S>( mut self, - target_relays: I, + target_policy: I, policy: NostrRelayUrlPolicy, ) -> Result<Self, RadrootsSdkError> where I: IntoIterator<Item = S>, S: AsRef<str>, { - self.target_relays = TargetPolicy::try_nostr_relays(target_relays, policy)?; + self.target_policy = TargetPolicy::try_nostr_relays(target_policy, policy)?; Ok(self) } @@ -772,9 +772,9 @@ pub struct TradeRevisionDecisionEnqueueRequest { pub root_event: RadrootsNostrEventPtr, pub previous_event: RadrootsNostrEventPtr, pub decision: RadrootsOrderRevisionDecision, - pub target_relays: TargetPolicy, + pub target_policy: TargetPolicy, pub publish_mode: PublishMode, - pub ack_policy: SatisfactionPolicy, + pub satisfaction_policy: SatisfactionPolicy, pub idempotency_key: Option<SdkIdempotencyKey>, pub created_at: Option<RadrootsSdkTimestamp>, } @@ -787,33 +787,33 @@ impl TradeRevisionDecisionEnqueueRequest { root_event: RadrootsNostrEventPtr, previous_event: RadrootsNostrEventPtr, decision: RadrootsOrderRevisionDecision, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, ) -> Self { Self { actor, root_event, previous_event, decision, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key: None, created_at: None, } } - pub fn try_with_target_relays<I, S>( + pub fn try_with_nostr_targets<I, S>( mut self, - target_relays: I, + target_policy: I, policy: NostrRelayUrlPolicy, ) -> Result<Self, RadrootsSdkError> where I: IntoIterator<Item = S>, S: AsRef<str>, { - self.target_relays = TargetPolicy::try_nostr_relays(target_relays, policy)?; + self.target_policy = TargetPolicy::try_nostr_relays(target_policy, policy)?; Ok(self) } @@ -917,9 +917,9 @@ pub struct TradeCancellationEnqueueRequest { pub root_event: RadrootsNostrEventPtr, pub previous_event: RadrootsNostrEventPtr, pub cancellation: RadrootsOrderCancellation, - pub target_relays: TargetPolicy, + pub target_policy: TargetPolicy, pub publish_mode: PublishMode, - pub ack_policy: SatisfactionPolicy, + pub satisfaction_policy: SatisfactionPolicy, pub idempotency_key: Option<SdkIdempotencyKey>, pub created_at: Option<RadrootsSdkTimestamp>, } @@ -932,33 +932,33 @@ impl TradeCancellationEnqueueRequest { root_event: RadrootsNostrEventPtr, previous_event: RadrootsNostrEventPtr, cancellation: RadrootsOrderCancellation, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, ) -> Self { Self { actor, root_event, previous_event, cancellation, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key: None, created_at: None, } } - pub fn try_with_target_relays<I, S>( + pub fn try_with_nostr_targets<I, S>( mut self, - target_relays: I, + target_policy: I, policy: NostrRelayUrlPolicy, ) -> Result<Self, RadrootsSdkError> where I: IntoIterator<Item = S>, S: AsRef<str>, { - self.target_relays = TargetPolicy::try_nostr_relays(target_relays, policy)?; + self.target_policy = TargetPolicy::try_nostr_relays(target_policy, policy)?; Ok(self) } @@ -1068,9 +1068,9 @@ pub struct TradeProposeRequest { pub items: Vec<RadrootsOrderItem>, pub economics: RadrootsOrderEconomics, pub public_note: Option<String>, - pub target_relays: TargetPolicy, + pub target_policy: TargetPolicy, pub publish_mode: PublishMode, - pub ack_policy: SatisfactionPolicy, + pub satisfaction_policy: SatisfactionPolicy, pub privacy_confirmation: PrivacyPreflightConfirmation, pub idempotency_key: Option<SdkIdempotencyKey>, pub created_at: Option<RadrootsSdkTimestamp>, @@ -1086,9 +1086,9 @@ impl TradeProposeRequest { seller_pubkey: RadrootsPublicKey, items: Vec<RadrootsOrderItem>, economics: RadrootsOrderEconomics, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, ) -> Self { Self { actor, @@ -1099,9 +1099,9 @@ impl TradeProposeRequest { items, economics, public_note: None, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, privacy_confirmation: PrivacyPreflightConfirmation::new(), idempotency_key: None, created_at: None, @@ -1148,9 +1148,9 @@ pub struct TradeAcceptRequest { pub actor: RadrootsActorContext, pub locator: RadrootsTradeLocator, pub inventory_commitments: Vec<RadrootsOrderInventoryCommitment>, - pub target_relays: TargetPolicy, + pub target_policy: TargetPolicy, pub publish_mode: PublishMode, - pub ack_policy: SatisfactionPolicy, + pub satisfaction_policy: SatisfactionPolicy, pub evidence_mode: TradeEvidenceMode, pub privacy_confirmation: PrivacyPreflightConfirmation, pub idempotency_key: Option<SdkIdempotencyKey>, @@ -1163,18 +1163,18 @@ impl TradeAcceptRequest { actor: RadrootsActorContext, locator: RadrootsTradeLocator, inventory_commitments: Vec<RadrootsOrderInventoryCommitment>, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, evidence_mode: TradeEvidenceMode, ) -> Self { Self { actor, locator, inventory_commitments, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, evidence_mode, privacy_confirmation: PrivacyPreflightConfirmation::new(), idempotency_key: None, @@ -1212,9 +1212,9 @@ pub struct TradeDeclineRequest { pub actor: RadrootsActorContext, pub locator: RadrootsTradeLocator, pub reason: String, - pub target_relays: TargetPolicy, + pub target_policy: TargetPolicy, pub publish_mode: PublishMode, - pub ack_policy: SatisfactionPolicy, + pub satisfaction_policy: SatisfactionPolicy, pub evidence_mode: TradeEvidenceMode, pub privacy_confirmation: PrivacyPreflightConfirmation, pub idempotency_key: Option<SdkIdempotencyKey>, @@ -1227,18 +1227,18 @@ impl TradeDeclineRequest { actor: RadrootsActorContext, locator: RadrootsTradeLocator, reason: impl Into<String>, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, evidence_mode: TradeEvidenceMode, ) -> Self { Self { actor, locator, reason: reason.into(), - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, evidence_mode, privacy_confirmation: PrivacyPreflightConfirmation::new(), idempotency_key: None, @@ -1276,9 +1276,9 @@ pub struct TradeCancelRequest { pub actor: RadrootsActorContext, pub locator: RadrootsTradeLocator, pub reason: String, - pub target_relays: TargetPolicy, + pub target_policy: TargetPolicy, pub publish_mode: PublishMode, - pub ack_policy: SatisfactionPolicy, + pub satisfaction_policy: SatisfactionPolicy, pub evidence_mode: TradeEvidenceMode, pub privacy_confirmation: PrivacyPreflightConfirmation, pub idempotency_key: Option<SdkIdempotencyKey>, @@ -1291,18 +1291,18 @@ impl TradeCancelRequest { actor: RadrootsActorContext, locator: RadrootsTradeLocator, reason: impl Into<String>, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, evidence_mode: TradeEvidenceMode, ) -> Self { Self { actor, locator, reason: reason.into(), - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, evidence_mode, privacy_confirmation: PrivacyPreflightConfirmation::new(), idempotency_key: None, @@ -1343,9 +1343,9 @@ pub struct TradeRevisionProposalRequest { pub items: Vec<RadrootsOrderItem>, pub economics: RadrootsOrderEconomics, pub reason: String, - pub target_relays: TargetPolicy, + pub target_policy: TargetPolicy, pub publish_mode: PublishMode, - pub ack_policy: SatisfactionPolicy, + pub satisfaction_policy: SatisfactionPolicy, pub evidence_mode: TradeEvidenceMode, pub privacy_confirmation: PrivacyPreflightConfirmation, pub idempotency_key: Option<SdkIdempotencyKey>, @@ -1361,9 +1361,9 @@ impl TradeRevisionProposalRequest { items: Vec<RadrootsOrderItem>, economics: RadrootsOrderEconomics, reason: impl Into<String>, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, evidence_mode: TradeEvidenceMode, ) -> Self { Self { @@ -1373,9 +1373,9 @@ impl TradeRevisionProposalRequest { items, economics, reason: reason.into(), - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, evidence_mode, privacy_confirmation: PrivacyPreflightConfirmation::new(), idempotency_key: None, @@ -1414,9 +1414,9 @@ pub struct TradeRevisionDecisionRequest { pub locator: RadrootsTradeLocator, pub revision_id: RadrootsOrderRevisionId, pub decision: RadrootsOrderRevisionOutcome, - pub target_relays: TargetPolicy, + pub target_policy: TargetPolicy, pub publish_mode: PublishMode, - pub ack_policy: SatisfactionPolicy, + pub satisfaction_policy: SatisfactionPolicy, pub evidence_mode: TradeEvidenceMode, pub privacy_confirmation: PrivacyPreflightConfirmation, pub idempotency_key: Option<SdkIdempotencyKey>, @@ -1430,9 +1430,9 @@ impl TradeRevisionDecisionRequest { locator: RadrootsTradeLocator, revision_id: RadrootsOrderRevisionId, decision: RadrootsOrderRevisionOutcome, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, evidence_mode: TradeEvidenceMode, ) -> Self { Self { @@ -1440,9 +1440,9 @@ impl TradeRevisionDecisionRequest { locator, revision_id, decision, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, evidence_mode, privacy_confirmation: PrivacyPreflightConfirmation::new(), idempotency_key: None, @@ -2572,13 +2572,13 @@ impl<'sdk> TradesClient<'sdk> { actor, listing_event, order, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, created_at, } = request; - validate_trade_enqueue_policy(publish_mode, ack_policy)?; + validate_trade_enqueue_policy(publish_mode, satisfaction_policy)?; let prepare_request = TradeSubmitPrepareRequest { actor: actor.clone(), listing_event, @@ -2589,9 +2589,9 @@ impl<'sdk> TradesClient<'sdk> { self.enqueue_prepared_submit( &actor, plan, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, ) .await @@ -2607,13 +2607,13 @@ impl<'sdk> TradesClient<'sdk> { actor, listing_event, order, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, created_at, } = request; - validate_trade_enqueue_policy(publish_mode, ack_policy)?; + validate_trade_enqueue_policy(publish_mode, satisfaction_policy)?; let prepare_request = TradeSubmitPrepareRequest { actor: actor.clone(), listing_event, @@ -2624,9 +2624,9 @@ impl<'sdk> TradesClient<'sdk> { self.enqueue_prepared_submit_with_explicit_signer( &actor, plan, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, signer, ) @@ -2638,20 +2638,20 @@ impl<'sdk> TradesClient<'sdk> { &self, actor: &RadrootsActorContext, plan: TradeSubmitPlan, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, idempotency_key: Option<SdkIdempotencyKey>, ) -> Result<TradeSubmitReceipt, RadrootsSdkError> { - validate_trade_enqueue_policy(publish_mode, ack_policy)?; + validate_trade_enqueue_policy(publish_mode, satisfaction_policy)?; let enqueue = enqueue_configured_signed_workflow( self.sdk, SdkWorkflowEnqueueRequest { operation_kind: TradeWorkflowKind::Submit.operation_kind(), actor, frozen_draft: &plan.frozen_draft, - target_relays: target_relays.workflow_target_policy(), - satisfaction_policy: ack_policy, + target_policy: target_policy.workflow_target_policy(), + satisfaction_policy: satisfaction_policy, idempotency_key, }, ) @@ -2664,21 +2664,21 @@ impl<'sdk> TradesClient<'sdk> { &self, actor: &RadrootsActorContext, plan: TradeSubmitPlan, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, idempotency_key: Option<SdkIdempotencyKey>, signer: &dyn RadrootsEventSigner, ) -> Result<TradeSubmitReceipt, RadrootsSdkError> { - validate_trade_enqueue_policy(publish_mode, ack_policy)?; + validate_trade_enqueue_policy(publish_mode, satisfaction_policy)?; let enqueue = enqueue_signed_workflow( self.sdk, SdkWorkflowEnqueueRequest { operation_kind: TradeWorkflowKind::Submit.operation_kind(), actor, frozen_draft: &plan.frozen_draft, - target_relays: target_relays.workflow_target_policy(), - satisfaction_policy: ack_policy, + target_policy: target_policy.workflow_target_policy(), + satisfaction_policy: satisfaction_policy, idempotency_key, }, signer, @@ -2711,13 +2711,13 @@ impl<'sdk> TradesClient<'sdk> { actor, request_event, decision, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, created_at, } = request; - validate_trade_enqueue_policy(publish_mode, ack_policy)?; + validate_trade_enqueue_policy(publish_mode, satisfaction_policy)?; let prepare_request = TradeDecisionPrepareRequest { actor: actor.clone(), request_event, @@ -2728,9 +2728,9 @@ impl<'sdk> TradesClient<'sdk> { self.enqueue_prepared_decision( &actor, plan, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, ) .await @@ -2746,13 +2746,13 @@ impl<'sdk> TradesClient<'sdk> { actor, request_event, decision, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, created_at, } = request; - validate_trade_enqueue_policy(publish_mode, ack_policy)?; + validate_trade_enqueue_policy(publish_mode, satisfaction_policy)?; let prepare_request = TradeDecisionPrepareRequest { actor: actor.clone(), request_event, @@ -2763,9 +2763,9 @@ impl<'sdk> TradesClient<'sdk> { self.enqueue_prepared_decision_with_explicit_signer( &actor, plan, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, signer, ) @@ -2777,12 +2777,12 @@ impl<'sdk> TradesClient<'sdk> { &self, actor: &RadrootsActorContext, plan: TradeDecisionPlan, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, idempotency_key: Option<SdkIdempotencyKey>, ) -> Result<TradeDecisionReceipt, RadrootsSdkError> { - validate_trade_enqueue_policy(publish_mode, ack_policy)?; + validate_trade_enqueue_policy(publish_mode, satisfaction_policy)?; if !self .prepared_order_event_exists(&plan.expected_event_id) .await? @@ -2795,8 +2795,8 @@ impl<'sdk> TradesClient<'sdk> { operation_kind: TradeWorkflowKind::Decision.operation_kind(), actor, frozen_draft: &plan.frozen_draft, - target_relays: target_relays.workflow_target_policy(), - satisfaction_policy: ack_policy, + target_policy: target_policy.workflow_target_policy(), + satisfaction_policy: satisfaction_policy, idempotency_key, }, ) @@ -2809,13 +2809,13 @@ impl<'sdk> TradesClient<'sdk> { &self, actor: &RadrootsActorContext, plan: TradeDecisionPlan, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, idempotency_key: Option<SdkIdempotencyKey>, signer: &dyn RadrootsEventSigner, ) -> Result<TradeDecisionReceipt, RadrootsSdkError> { - validate_trade_enqueue_policy(publish_mode, ack_policy)?; + validate_trade_enqueue_policy(publish_mode, satisfaction_policy)?; if !self .prepared_order_event_exists(&plan.expected_event_id) .await? @@ -2828,8 +2828,8 @@ impl<'sdk> TradesClient<'sdk> { operation_kind: TradeWorkflowKind::Decision.operation_kind(), actor, frozen_draft: &plan.frozen_draft, - target_relays: target_relays.workflow_target_policy(), - satisfaction_policy: ack_policy, + target_policy: target_policy.workflow_target_policy(), + satisfaction_policy: satisfaction_policy, idempotency_key, }, signer, @@ -2864,13 +2864,13 @@ impl<'sdk> TradesClient<'sdk> { root_event, previous_event, proposal, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, created_at, } = request; - validate_trade_enqueue_policy(publish_mode, ack_policy)?; + validate_trade_enqueue_policy(publish_mode, satisfaction_policy)?; let prepare_request = TradeRevisionProposalPrepareRequest { actor: actor.clone(), root_event, @@ -2882,9 +2882,9 @@ impl<'sdk> TradesClient<'sdk> { self.enqueue_prepared_revision_proposal( &actor, plan, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, ) .await @@ -2901,13 +2901,13 @@ impl<'sdk> TradesClient<'sdk> { root_event, previous_event, proposal, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, created_at, } = request; - validate_trade_enqueue_policy(publish_mode, ack_policy)?; + validate_trade_enqueue_policy(publish_mode, satisfaction_policy)?; let prepare_request = TradeRevisionProposalPrepareRequest { actor: actor.clone(), root_event, @@ -2919,9 +2919,9 @@ impl<'sdk> TradesClient<'sdk> { self.enqueue_prepared_revision_proposal_with_explicit_signer( &actor, plan, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, signer, ) @@ -2933,12 +2933,12 @@ impl<'sdk> TradesClient<'sdk> { &self, actor: &RadrootsActorContext, plan: TradeRevisionProposalPlan, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, idempotency_key: Option<SdkIdempotencyKey>, ) -> Result<TradeRevisionProposalReceipt, RadrootsSdkError> { - validate_trade_enqueue_policy(publish_mode, ack_policy)?; + validate_trade_enqueue_policy(publish_mode, satisfaction_policy)?; if !self .prepared_order_event_exists(&plan.expected_event_id) .await? @@ -2951,8 +2951,8 @@ impl<'sdk> TradesClient<'sdk> { operation_kind: TradeWorkflowKind::RevisionProposal.operation_kind(), actor, frozen_draft: &plan.frozen_draft, - target_relays: target_relays.workflow_target_policy(), - satisfaction_policy: ack_policy, + target_policy: target_policy.workflow_target_policy(), + satisfaction_policy: satisfaction_policy, idempotency_key, }, ) @@ -2965,13 +2965,13 @@ impl<'sdk> TradesClient<'sdk> { &self, actor: &RadrootsActorContext, plan: TradeRevisionProposalPlan, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, idempotency_key: Option<SdkIdempotencyKey>, signer: &dyn RadrootsEventSigner, ) -> Result<TradeRevisionProposalReceipt, RadrootsSdkError> { - validate_trade_enqueue_policy(publish_mode, ack_policy)?; + validate_trade_enqueue_policy(publish_mode, satisfaction_policy)?; if !self .prepared_order_event_exists(&plan.expected_event_id) .await? @@ -2984,8 +2984,8 @@ impl<'sdk> TradesClient<'sdk> { operation_kind: TradeWorkflowKind::RevisionProposal.operation_kind(), actor, frozen_draft: &plan.frozen_draft, - target_relays: target_relays.workflow_target_policy(), - satisfaction_policy: ack_policy, + target_policy: target_policy.workflow_target_policy(), + satisfaction_policy: satisfaction_policy, idempotency_key, }, signer, @@ -3020,13 +3020,13 @@ impl<'sdk> TradesClient<'sdk> { root_event, previous_event, decision, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, created_at, } = request; - validate_trade_enqueue_policy(publish_mode, ack_policy)?; + validate_trade_enqueue_policy(publish_mode, satisfaction_policy)?; let prepare_request = TradeRevisionDecisionPrepareRequest { actor: actor.clone(), root_event, @@ -3038,9 +3038,9 @@ impl<'sdk> TradesClient<'sdk> { self.enqueue_prepared_revision_decision( &actor, plan, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, ) .await @@ -3057,13 +3057,13 @@ impl<'sdk> TradesClient<'sdk> { root_event, previous_event, decision, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, created_at, } = request; - validate_trade_enqueue_policy(publish_mode, ack_policy)?; + validate_trade_enqueue_policy(publish_mode, satisfaction_policy)?; let prepare_request = TradeRevisionDecisionPrepareRequest { actor: actor.clone(), root_event, @@ -3075,9 +3075,9 @@ impl<'sdk> TradesClient<'sdk> { self.enqueue_prepared_revision_decision_with_explicit_signer( &actor, plan, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, signer, ) @@ -3089,12 +3089,12 @@ impl<'sdk> TradesClient<'sdk> { &self, actor: &RadrootsActorContext, plan: TradeRevisionDecisionPlan, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, idempotency_key: Option<SdkIdempotencyKey>, ) -> Result<TradeRevisionDecisionReceipt, RadrootsSdkError> { - validate_trade_enqueue_policy(publish_mode, ack_policy)?; + validate_trade_enqueue_policy(publish_mode, satisfaction_policy)?; if !self .prepared_order_event_exists(&plan.expected_event_id) .await? @@ -3107,8 +3107,8 @@ impl<'sdk> TradesClient<'sdk> { operation_kind: TradeWorkflowKind::RevisionDecision.operation_kind(), actor, frozen_draft: &plan.frozen_draft, - target_relays: target_relays.workflow_target_policy(), - satisfaction_policy: ack_policy, + target_policy: target_policy.workflow_target_policy(), + satisfaction_policy: satisfaction_policy, idempotency_key, }, ) @@ -3121,13 +3121,13 @@ impl<'sdk> TradesClient<'sdk> { &self, actor: &RadrootsActorContext, plan: TradeRevisionDecisionPlan, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, idempotency_key: Option<SdkIdempotencyKey>, signer: &dyn RadrootsEventSigner, ) -> Result<TradeRevisionDecisionReceipt, RadrootsSdkError> { - validate_trade_enqueue_policy(publish_mode, ack_policy)?; + validate_trade_enqueue_policy(publish_mode, satisfaction_policy)?; if !self .prepared_order_event_exists(&plan.expected_event_id) .await? @@ -3140,8 +3140,8 @@ impl<'sdk> TradesClient<'sdk> { operation_kind: TradeWorkflowKind::RevisionDecision.operation_kind(), actor, frozen_draft: &plan.frozen_draft, - target_relays: target_relays.workflow_target_policy(), - satisfaction_policy: ack_policy, + target_policy: target_policy.workflow_target_policy(), + satisfaction_policy: satisfaction_policy, idempotency_key, }, signer, @@ -3176,13 +3176,13 @@ impl<'sdk> TradesClient<'sdk> { root_event, previous_event, cancellation, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, created_at, } = request; - validate_trade_enqueue_policy(publish_mode, ack_policy)?; + validate_trade_enqueue_policy(publish_mode, satisfaction_policy)?; let prepare_request = TradeCancellationPrepareRequest { actor: actor.clone(), root_event, @@ -3194,9 +3194,9 @@ impl<'sdk> TradesClient<'sdk> { self.enqueue_prepared_cancellation( &actor, plan, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, ) .await @@ -3213,13 +3213,13 @@ impl<'sdk> TradesClient<'sdk> { root_event, previous_event, cancellation, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, created_at, } = request; - validate_trade_enqueue_policy(publish_mode, ack_policy)?; + validate_trade_enqueue_policy(publish_mode, satisfaction_policy)?; let prepare_request = TradeCancellationPrepareRequest { actor: actor.clone(), root_event, @@ -3231,9 +3231,9 @@ impl<'sdk> TradesClient<'sdk> { self.enqueue_prepared_cancellation_with_explicit_signer( &actor, plan, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, signer, ) @@ -3245,12 +3245,12 @@ impl<'sdk> TradesClient<'sdk> { &self, actor: &RadrootsActorContext, plan: TradeCancellationPlan, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, idempotency_key: Option<SdkIdempotencyKey>, ) -> Result<TradeCancellationReceipt, RadrootsSdkError> { - validate_trade_enqueue_policy(publish_mode, ack_policy)?; + validate_trade_enqueue_policy(publish_mode, satisfaction_policy)?; if !self .prepared_order_event_exists(&plan.expected_event_id) .await? @@ -3263,8 +3263,8 @@ impl<'sdk> TradesClient<'sdk> { operation_kind: TradeWorkflowKind::Cancellation.operation_kind(), actor, frozen_draft: &plan.frozen_draft, - target_relays: target_relays.workflow_target_policy(), - satisfaction_policy: ack_policy, + target_policy: target_policy.workflow_target_policy(), + satisfaction_policy: satisfaction_policy, idempotency_key, }, ) @@ -3277,13 +3277,13 @@ impl<'sdk> TradesClient<'sdk> { &self, actor: &RadrootsActorContext, plan: TradeCancellationPlan, - target_relays: TargetPolicy, + target_policy: TargetPolicy, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, idempotency_key: Option<SdkIdempotencyKey>, signer: &dyn RadrootsEventSigner, ) -> Result<TradeCancellationReceipt, RadrootsSdkError> { - validate_trade_enqueue_policy(publish_mode, ack_policy)?; + validate_trade_enqueue_policy(publish_mode, satisfaction_policy)?; if !self .prepared_order_event_exists(&plan.expected_event_id) .await? @@ -3296,8 +3296,8 @@ impl<'sdk> TradesClient<'sdk> { operation_kind: TradeWorkflowKind::Cancellation.operation_kind(), actor, frozen_draft: &plan.frozen_draft, - target_relays: target_relays.workflow_target_policy(), - satisfaction_policy: ack_policy, + target_policy: target_policy.workflow_target_policy(), + satisfaction_policy: satisfaction_policy, idempotency_key, }, signer, @@ -3618,14 +3618,14 @@ where { let relay_targets = sdk.configured_nostr_relay_urls().to_vec(); if relay_targets.is_empty() { - return Err(RadrootsSdkError::empty_target_relays(operation)); + return Err(RadrootsSdkError::empty_transport_targets(operation)); } let query_plan = trade_evidence_query_plan(locator, limit)?; let fetch_request = trade_evidence_fetch_request(sdk, &query_plan, &relay_targets)?; let fetch_receipt = fetch_and_ingest_relay_events(adapter, &sdk._event_store, fetch_request).await?; if trade_resync_total_relay_failure(&fetch_receipt, relay_targets.len()) { - return Err(RadrootsSdkError::ProductSyncRelaySetupFailure { + return Err(RadrootsSdkError::ProductSyncTransportSetupFailure { message: trade_resync_total_failure_message(operation, &fetch_receipt), }); } @@ -4300,7 +4300,7 @@ fn validation_receipt_relay_targets( ) -> Result<Vec<String>, RadrootsSdkError> { let relay_targets = sdk.configured_nostr_relay_urls().to_vec(); if relay_targets.is_empty() { - return Err(RadrootsSdkError::empty_target_relays(operation)); + return Err(RadrootsSdkError::empty_transport_targets(operation)); } Ok(relay_targets) } @@ -5292,7 +5292,7 @@ impl<'sdk> TradeBuyerClient<'sdk> { &self, request: TradeProposeRequest, ) -> Result<TradeMutationOutcome<TradeSubmitPlan, TradeSubmitReceipt>, RadrootsSdkError> { - validate_trade_product_publish_policy(request.publish_mode, request.ack_policy)?; + validate_trade_product_publish_policy(request.publish_mode, request.satisfaction_policy)?; require_trade_product_privacy_preflight( "trade.propose", trade_propose_privacy_fields(&request), @@ -5307,9 +5307,9 @@ impl<'sdk> TradeBuyerClient<'sdk> { items, economics, public_note: _, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, privacy_confirmation: _, idempotency_key, created_at, @@ -5336,16 +5336,16 @@ impl<'sdk> TradeBuyerClient<'sdk> { .enqueue_prepared_submit( &actor, plan, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, ) .await?; trade_product_post_enqueue_outcome( self.sdk, publish_mode, - ack_policy, + satisfaction_policy, receipt.outbox_event_id, receipt, ) @@ -5359,14 +5359,14 @@ impl<'sdk> TradeBuyerClient<'sdk> { TradeMutationOutcome<TradeCancellationPlan, TradeCancellationReceipt>, RadrootsSdkError, > { - validate_trade_product_publish_policy(request.publish_mode, request.ack_policy)?; + validate_trade_product_publish_policy(request.publish_mode, request.satisfaction_policy)?; let TradeCancelRequest { actor, locator, reason, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, evidence_mode, privacy_confirmation, idempotency_key, @@ -5401,16 +5401,16 @@ impl<'sdk> TradeBuyerClient<'sdk> { .enqueue_prepared_cancellation( &actor, plan, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, ) .await?; trade_product_post_enqueue_outcome( self.sdk, publish_mode, - ack_policy, + satisfaction_policy, receipt.outbox_event_id, receipt, ) @@ -5445,15 +5445,15 @@ impl<'sdk> TradeBuyerClient<'sdk> { TradeMutationOutcome<TradeRevisionDecisionPlan, TradeRevisionDecisionReceipt>, RadrootsSdkError, > { - validate_trade_product_publish_policy(request.publish_mode, request.ack_policy)?; + validate_trade_product_publish_policy(request.publish_mode, request.satisfaction_policy)?; let TradeRevisionDecisionRequest { actor, locator, revision_id, decision, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, evidence_mode, privacy_confirmation, idempotency_key, @@ -5497,16 +5497,16 @@ impl<'sdk> TradeBuyerClient<'sdk> { .enqueue_prepared_revision_decision( &actor, plan, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, ) .await?; trade_product_post_enqueue_outcome( self.sdk, publish_mode, - ack_policy, + satisfaction_policy, receipt.outbox_event_id, receipt, ) @@ -5594,14 +5594,14 @@ impl<'sdk> TradeSellerClient<'sdk> { request: TradeAcceptRequest, ) -> Result<TradeMutationOutcome<TradeDecisionPlan, TradeDecisionReceipt>, RadrootsSdkError> { - validate_trade_product_publish_policy(request.publish_mode, request.ack_policy)?; + validate_trade_product_publish_policy(request.publish_mode, request.satisfaction_policy)?; let TradeAcceptRequest { actor, locator, inventory_commitments, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, evidence_mode, privacy_confirmation, idempotency_key, @@ -5637,16 +5637,16 @@ impl<'sdk> TradeSellerClient<'sdk> { .enqueue_prepared_decision( &actor, plan, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, ) .await?; trade_product_post_enqueue_outcome( self.sdk, publish_mode, - ack_policy, + satisfaction_policy, receipt.outbox_event_id, receipt, ) @@ -5662,14 +5662,14 @@ impl<'sdk> TradeSellerClient<'sdk> { where A: RadrootsRelayFetchAdapter, { - validate_trade_product_publish_policy(request.publish_mode, request.ack_policy)?; + validate_trade_product_publish_policy(request.publish_mode, request.satisfaction_policy)?; let TradeAcceptRequest { actor, locator, inventory_commitments, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, evidence_mode, privacy_confirmation, idempotency_key, @@ -5711,16 +5711,16 @@ impl<'sdk> TradeSellerClient<'sdk> { .enqueue_prepared_decision( &actor, plan, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, ) .await?; trade_product_post_enqueue_outcome( self.sdk, publish_mode, - ack_policy, + satisfaction_policy, receipt.outbox_event_id, receipt, ) @@ -5733,14 +5733,14 @@ impl<'sdk> TradeSellerClient<'sdk> { request: TradeDeclineRequest, ) -> Result<TradeMutationOutcome<TradeDecisionPlan, TradeDecisionReceipt>, RadrootsSdkError> { - validate_trade_product_publish_policy(request.publish_mode, request.ack_policy)?; + validate_trade_product_publish_policy(request.publish_mode, request.satisfaction_policy)?; let TradeDeclineRequest { actor, locator, reason, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, evidence_mode, privacy_confirmation, idempotency_key, @@ -5774,16 +5774,16 @@ impl<'sdk> TradeSellerClient<'sdk> { .enqueue_prepared_decision( &actor, plan, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, ) .await?; trade_product_post_enqueue_outcome( self.sdk, publish_mode, - ack_policy, + satisfaction_policy, receipt.outbox_event_id, receipt, ) @@ -5798,7 +5798,7 @@ impl<'sdk> TradeSellerClient<'sdk> { TradeMutationOutcome<TradeRevisionProposalPlan, TradeRevisionProposalReceipt>, RadrootsSdkError, > { - validate_trade_product_publish_policy(request.publish_mode, request.ack_policy)?; + validate_trade_product_publish_policy(request.publish_mode, request.satisfaction_policy)?; let TradeRevisionProposalRequest { actor, locator, @@ -5806,9 +5806,9 @@ impl<'sdk> TradeSellerClient<'sdk> { items, economics, reason, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, evidence_mode, privacy_confirmation, idempotency_key, @@ -5849,16 +5849,16 @@ impl<'sdk> TradeSellerClient<'sdk> { .enqueue_prepared_revision_proposal( &actor, plan, - target_relays, + target_policy, publish_mode, - ack_policy, + satisfaction_policy, idempotency_key, ) .await?; trade_product_post_enqueue_outcome( self.sdk, publish_mode, - ack_policy, + satisfaction_policy, receipt.outbox_event_id, receipt, ) @@ -6120,7 +6120,7 @@ fn event_ptr(event_id: &RadrootsEventId) -> RadrootsNostrEventPtr { async fn trade_product_post_enqueue_outcome<Plan, Receipt>( sdk: &crate::RadrootsClient, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, outbox_event_id: i64, receipt: Receipt, ) -> Result<TradeMutationOutcome<Plan, Receipt>, RadrootsSdkError> { @@ -6132,7 +6132,10 @@ async fn trade_product_post_enqueue_outcome<Plan, Receipt>( PublishMode::EnqueueAndPublish => { let publish = sdk .sync() - .push_outbox(push_request_for_ack_policy(ack_policy, outbox_event_id)?) + .push_outbox(push_request_for_satisfaction_policy( + satisfaction_policy, + outbox_event_id, + )?) .await?; Ok(TradeMutationOutcome::Published { receipt, publish }) } @@ -6140,40 +6143,39 @@ async fn trade_product_post_enqueue_outcome<Plan, Receipt>( } #[cfg(feature = "signer-adapters")] -fn push_request_for_ack_policy( - ack_policy: SatisfactionPolicy, +fn push_request_for_satisfaction_policy( + satisfaction_policy: SatisfactionPolicy, outbox_event_id: i64, ) -> Result<PushOutboxRequest, RadrootsSdkError> { let request = PushOutboxRequest::new().with_outbox_event_id(outbox_event_id); - match ack_policy { + match satisfaction_policy { SatisfactionPolicy::NoWait => Err(RadrootsSdkError::InvalidRequest { - message: "trade enqueue-and-publish requires a relay acknowledgement policy".to_owned(), + message: "trade enqueue-and-publish requires a transport satisfaction policy" + .to_owned(), }), - SatisfactionPolicy::AtLeastOneTarget => Ok(request.with_accepted_quorum(1)), - SatisfactionPolicy::AllTargets => Ok(request), - SatisfactionPolicy::AtLeast { required } => { - Ok(request.with_accepted_quorum(usize::from(required))) - } + SatisfactionPolicy::AtLeastOneTarget + | SatisfactionPolicy::AllTargets + | SatisfactionPolicy::AtLeast { .. } => Ok(request), } } #[cfg(feature = "signer-adapters")] fn validate_trade_product_publish_policy( publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, ) -> Result<(), RadrootsSdkError> { match publish_mode { PublishMode::DryRun | PublishMode::EnqueueOnly - if ack_policy != SatisfactionPolicy::NoWait => + if satisfaction_policy != SatisfactionPolicy::NoWait => { Err(RadrootsSdkError::InvalidRequest { - message: "trade dry-run and enqueue-only modes require no-wait acknowledgement" + message: "trade dry-run and enqueue-only modes require no-wait satisfaction" .to_owned(), }) } - PublishMode::EnqueueAndPublish if ack_policy == SatisfactionPolicy::NoWait => { + PublishMode::EnqueueAndPublish if satisfaction_policy == SatisfactionPolicy::NoWait => { Err(RadrootsSdkError::InvalidRequest { - message: "trade enqueue-and-publish requires a relay acknowledgement policy" + message: "trade enqueue-and-publish requires a transport satisfaction policy" .to_owned(), }) } @@ -6277,22 +6279,26 @@ fn trade_reason_contains_private_coordination(reason: &str) -> bool { #[cfg(any(feature = "signer-adapters", test))] fn validate_trade_enqueue_policy( publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, ) -> Result<(), RadrootsSdkError> { if publish_mode == PublishMode::DryRun { return Err(RadrootsSdkError::InvalidRequest { message: "trade dry-run publish mode must use a prepare request".to_owned(), }); } - if publish_mode == PublishMode::EnqueueOnly && ack_policy != SatisfactionPolicy::NoWait { + if publish_mode == PublishMode::EnqueueOnly && satisfaction_policy != SatisfactionPolicy::NoWait + { return Err(RadrootsSdkError::InvalidRequest { - message: "trade enqueue-only publish mode only supports no-wait acknowledgement" + message: "trade enqueue-only publish mode only supports no-wait satisfaction" .to_owned(), }); } - if publish_mode == PublishMode::EnqueueAndPublish && ack_policy == SatisfactionPolicy::NoWait { + if publish_mode == PublishMode::EnqueueAndPublish + && satisfaction_policy == SatisfactionPolicy::NoWait + { return Err(RadrootsSdkError::InvalidRequest { - message: "trade enqueue-and-publish requires a relay acknowledgement policy".to_owned(), + message: "trade enqueue-and-publish requires a transport satisfaction policy" + .to_owned(), }); } Ok(()) diff --git a/crates/sdk/src/runtime.rs b/crates/sdk/src/runtime.rs @@ -212,7 +212,7 @@ pub struct SdkEventStoreStorageStatus { pub store: SdkSqliteStoreStatus, pub total_events: i64, pub projection_eligible_events: i64, - pub relay_observations: i64, + pub transport_observations: i64, pub last_event_seq: Option<i64>, pub last_event_updated_at_ms: Option<i64>, } @@ -616,7 +616,7 @@ impl RadrootsClient { store: event_store_status, total_events: event_summary.total_events, projection_eligible_events: event_summary.projection_eligible_events, - relay_observations: event_summary.transport_observations, + transport_observations: event_summary.transport_observations, last_event_seq: event_summary.last_event_seq, last_event_updated_at_ms: event_summary.last_event_updated_at_ms, }, diff --git a/crates/sdk/src/sync_runtime.rs b/crates/sdk/src/sync_runtime.rs @@ -30,8 +30,10 @@ use radroots_trade::projection::{ RadrootsProjectionRefreshReceipt, RadrootsProjectionRefreshRequest, refresh_product_projections, }; +#[cfg(feature = "runtime")] +use radroots_transport::RadrootsTransportKind; #[cfg(all(feature = "runtime", feature = "radrootsd-proxy"))] -use radroots_transport::{RadrootsTransportKind, RadrootsTransportSatisfactionPolicy}; +use radroots_transport::RadrootsTransportSatisfactionPolicy; #[cfg(all(feature = "runtime", feature = "relay-runtime"))] use radroots_transport_nostr::RadrootsNostrClientPublishAdapter; #[cfg(feature = "runtime")] @@ -75,7 +77,7 @@ pub struct SyncStatusReceipt { pub observed_at_ms: i64, pub event_store: SyncEventStoreStatus, pub outbox: SyncOutboxStatus, - pub relay_targets: SyncRelayTargetSummary, + pub transport_profile: SyncTransportProfileSummary, } #[cfg(feature = "runtime")] @@ -91,7 +93,7 @@ pub enum SyncStatusSource { pub struct SyncEventStoreStatus { pub total_events: i64, pub projection_eligible_events: i64, - pub relay_observations: i64, + pub transport_observations: i64, pub last_event_seq: Option<i64>, pub last_event_updated_at_ms: Option<i64>, } @@ -102,7 +104,7 @@ impl From<RadrootsEventStoreStatusSummary> for SyncEventStoreStatus { Self { total_events: summary.total_events, projection_eligible_events: summary.projection_eligible_events, - relay_observations: summary.transport_observations, + transport_observations: summary.transport_observations, last_event_seq: summary.last_event_seq, last_event_updated_at_ms: summary.last_event_updated_at_ms, } @@ -142,9 +144,10 @@ impl From<RadrootsOutboxStatusSummary> for SyncOutboxStatus { #[cfg(feature = "runtime")] #[derive(Clone, Debug, PartialEq, Eq, serde::Serialize)] -pub struct SyncRelayTargetSummary { - pub configured_count: usize, - pub configured_relays: Vec<String>, +pub struct SyncTransportProfileSummary { + pub transport_profile_id: String, + pub configured_nostr_relay_count: usize, + pub configured_nostr_relays: Vec<String>, } #[cfg(feature = "runtime")] @@ -185,7 +188,7 @@ pub struct SyncProjectionRefreshReceipt { pub listing_upserts: usize, pub trade_upserts: usize, pub validation_receipts: usize, - pub relay_observations: i64, + pub transport_observations: i64, pub last_event_seq: Option<i64>, } @@ -200,7 +203,7 @@ impl SyncProjectionRefreshReceipt { listing_upserts: receipt.listing_upserts, trade_upserts: receipt.trade_upserts, validation_receipts: receipt.validation_receipts, - relay_observations: receipt.transport_observations, + transport_observations: receipt.transport_observations, last_event_seq: receipt.last_event_seq, } } @@ -227,9 +230,8 @@ impl Default for SdkRelayAuthPolicy { pub struct PushOutboxRequest { pub limit: usize, pub outbox_event_id: Option<i64>, - pub republish_accepted_relays: bool, - pub accepted_quorum: Option<usize>, - pub relay_url_policy: NostrRelayUrlPolicy, + pub republish_accepted_targets: bool, + pub nostr_relay_url_policy: NostrRelayUrlPolicy, pub auth_policy: SdkRelayAuthPolicy, pub claim_ttl_ms: i64, pub next_attempt_delay_ms: i64, @@ -241,9 +243,8 @@ impl Default for PushOutboxRequest { Self { limit: PUSH_OUTBOX_DEFAULT_LIMIT, outbox_event_id: None, - republish_accepted_relays: false, - accepted_quorum: None, - relay_url_policy: NostrRelayUrlPolicy::Public, + republish_accepted_targets: false, + nostr_relay_url_policy: NostrRelayUrlPolicy::Public, auth_policy: SdkRelayAuthPolicy::DetectOnly, claim_ttl_ms: PUSH_OUTBOX_DEFAULT_CLAIM_TTL_MS, next_attempt_delay_ms: PUSH_OUTBOX_DEFAULT_NEXT_ATTEMPT_DELAY_MS, @@ -268,18 +269,13 @@ impl PushOutboxRequest { self } - pub fn republish_accepted_relays(mut self, enabled: bool) -> Self { - self.republish_accepted_relays = enabled; - self - } - - pub fn with_accepted_quorum(mut self, accepted_quorum: usize) -> Self { - self.accepted_quorum = Some(accepted_quorum); + pub fn republish_accepted_targets(mut self, enabled: bool) -> Self { + self.republish_accepted_targets = enabled; self } - pub fn with_relay_url_policy(mut self, policy: NostrRelayUrlPolicy) -> Self { - self.relay_url_policy = policy; + pub fn with_nostr_relay_url_policy(mut self, policy: NostrRelayUrlPolicy) -> Self { + self.nostr_relay_url_policy = policy; self } @@ -326,11 +322,6 @@ impl PushOutboxRequest { message: "push_outbox next attempt delay must be positive".to_owned(), }); } - if self.accepted_quorum == Some(0) { - return Err(RadrootsSdkError::InvalidRequest { - message: "push_outbox accepted quorum must be positive".to_owned(), - }); - } Ok(()) } } @@ -371,14 +362,15 @@ pub struct PushOutboxEventReceipt { pub terminal_count: usize, pub quorum: usize, pub quorum_met: bool, - pub relays: Vec<PushOutboxRelayReceipt>, + pub targets: Vec<PushOutboxTargetReceipt>, } #[cfg(feature = "runtime")] #[derive(Clone, Debug, PartialEq, Eq, serde::Serialize)] -pub struct PushOutboxRelayReceipt { - pub relay_url: String, - pub outcome_kind: PushOutboxRelayOutcomeKind, +pub struct PushOutboxTargetReceipt { + pub transport_kind: String, + pub endpoint_uri: String, + pub outcome_kind: PushOutboxTargetOutcomeKind, pub attempted: bool, pub message: Option<String>, } @@ -420,7 +412,7 @@ impl From<RadrootsOutboxEventState> for PushOutboxEventState { #[derive(Clone, Copy, Debug, PartialEq, Eq, serde::Serialize)] #[serde(rename_all = "snake_case")] #[non_exhaustive] -pub enum PushOutboxRelayOutcomeKind { +pub enum PushOutboxTargetOutcomeKind { Accepted, DuplicateAccepted, Blocked, @@ -435,13 +427,13 @@ pub enum PushOutboxRelayOutcomeKind { Error, Timeout, ConnectionFailed, - RelayUrlRejected, + TargetUriRejected, SkippedAlreadyAccepted, Unknown, } #[cfg(feature = "runtime")] -impl From<RadrootsRelayOutcomeKind> for PushOutboxRelayOutcomeKind { +impl From<RadrootsRelayOutcomeKind> for PushOutboxTargetOutcomeKind { fn from(kind: RadrootsRelayOutcomeKind) -> Self { match kind { RadrootsRelayOutcomeKind::Accepted => Self::Accepted, @@ -458,7 +450,7 @@ impl From<RadrootsRelayOutcomeKind> for PushOutboxRelayOutcomeKind { RadrootsRelayOutcomeKind::Error => Self::Error, RadrootsRelayOutcomeKind::Timeout => Self::Timeout, RadrootsRelayOutcomeKind::ConnectionFailed => Self::ConnectionFailed, - RadrootsRelayOutcomeKind::RelayUrlRejected => Self::RelayUrlRejected, + RadrootsRelayOutcomeKind::RelayUrlRejected => Self::TargetUriRejected, RadrootsRelayOutcomeKind::SkippedAlreadyAccepted => Self::SkippedAlreadyAccepted, RadrootsRelayOutcomeKind::Unknown => Self::Unknown, } @@ -486,9 +478,14 @@ impl<'sdk> SyncClient<'sdk> { observed_at_ms, event_store: event_store.into(), outbox: outbox.into(), - relay_targets: SyncRelayTargetSummary { - configured_count: self.sdk.configured_nostr_relay_urls().len(), - configured_relays: self.sdk.configured_nostr_relay_urls(), + transport_profile: SyncTransportProfileSummary { + transport_profile_id: self + .sdk + .transport_profile() + .transport_profile_id() + .to_owned(), + configured_nostr_relay_count: self.sdk.configured_nostr_relay_urls().len(), + configured_nostr_relays: self.sdk.configured_nostr_relay_urls(), }, }) } @@ -572,8 +569,8 @@ impl<'sdk> SyncClient<'sdk> { let policy = RadrootsOutboxPublishPolicy::new( publish_now_ms.saturating_add(request.next_attempt_delay_ms), ) - .republish_accepted_relays(request.republish_accepted_relays) - .relay_url_policy(request.relay_url_policy.nostr_transport_policy()); + .republish_accepted_relays(request.republish_accepted_targets) + .relay_url_policy(request.nostr_relay_url_policy.nostr_transport_policy()); let publish = publish_claimed_outbox_event( &self.sdk._outbox, &self.sdk._event_store, @@ -998,14 +995,19 @@ fn push_event_receipt( terminal_count: publish.terminal_count, quorum: publish.quorum, quorum_met: publish.quorum_met, - relays: publish.relays.into_iter().map(push_relay_receipt).collect(), + targets: publish + .relays + .into_iter() + .map(push_target_receipt) + .collect(), } } #[cfg(feature = "runtime")] -fn push_relay_receipt(relay: RadrootsRelayPublishRelayReceipt) -> PushOutboxRelayReceipt { - PushOutboxRelayReceipt { - relay_url: relay.relay_url, +fn push_target_receipt(relay: RadrootsRelayPublishRelayReceipt) -> PushOutboxTargetReceipt { + PushOutboxTargetReceipt { + transport_kind: RadrootsTransportKind::Nostr.canonical_label(), + endpoint_uri: relay.relay_url, outcome_kind: relay.outcome.kind.into(), attempted: relay.attempted, message: relay.outcome.message, diff --git a/crates/sdk/src/transport.rs b/crates/sdk/src/transport.rs @@ -223,12 +223,12 @@ impl TargetSet { targets: Vec<RadrootsTransportTarget>, ) -> Result<Self, RadrootsSdkError> { if targets.is_empty() { - return Err(RadrootsSdkError::empty_target_relays( + return Err(RadrootsSdkError::empty_transport_targets( "sdk transport target set", )); } if targets.len() > SDK_TRANSPORT_TARGET_MAX_COUNT { - return Err(RadrootsSdkError::relay_target_limit_exceeded( + return Err(RadrootsSdkError::transport_target_limit_exceeded( SDK_TRANSPORT_TARGET_MAX_COUNT, targets.len(), )); diff --git a/crates/sdk/src/workflow_runtime.rs b/crates/sdk/src/workflow_runtime.rs @@ -23,7 +23,7 @@ pub(crate) struct SdkWorkflowEnqueueRequest<'a> { pub(crate) operation_kind: &'static str, pub(crate) actor: &'a RadrootsActorContext, pub(crate) frozen_draft: &'a RadrootsFrozenEventDraft, - pub(crate) target_relays: TargetPolicy, + pub(crate) target_policy: TargetPolicy, pub(crate) satisfaction_policy: SatisfactionPolicy, pub(crate) idempotency_key: Option<SdkIdempotencyKey>, } @@ -43,7 +43,7 @@ pub(crate) async fn enqueue_signed_workflow( signer: &dyn RadrootsEventSigner, ) -> Result<SdkWorkflowEnqueueReceipt, RadrootsSdkError> { let delivery_plan = - resolved_delivery_plan(sdk, &request.target_relays, request.satisfaction_policy)?; + resolved_delivery_plan(sdk, &request.target_policy, request.satisfaction_policy)?; let signed_event = sign_authorized_draft(request.actor, signer, request.frozen_draft)?; enqueue_signed_workflow_event(sdk, request, signed_event, delivery_plan).await } @@ -54,7 +54,7 @@ pub(crate) async fn enqueue_configured_signed_workflow( request: SdkWorkflowEnqueueRequest<'_>, ) -> Result<SdkWorkflowEnqueueReceipt, RadrootsSdkError> { let delivery_plan = - resolved_delivery_plan(sdk, &request.target_relays, request.satisfaction_policy)?; + resolved_delivery_plan(sdk, &request.target_policy, request.satisfaction_policy)?; let signed_event = sdk .sign_with_configured_signer(RadrootsSdkSignRequest::new( request.operation_kind, @@ -155,21 +155,21 @@ struct SdkResolvedDeliveryPlan { fn resolved_delivery_plan( sdk: &RadrootsClient, - target_relays: &TargetPolicy, + target_policy: &TargetPolicy, satisfaction_policy: SatisfactionPolicy, ) -> Result<SdkResolvedDeliveryPlan, RadrootsSdkError> { - match target_relays { - TargetPolicy::Explicit(target_relays) => { - delivery_plan_from_target_set("explicit", target_relays.clone(), satisfaction_policy) + match target_policy { + TargetPolicy::Explicit(target_policy) => { + delivery_plan_from_target_set("explicit", target_policy.clone(), satisfaction_policy) } TargetPolicy::UseConfiguredProfile => { - let target_relays = + let target_policy = TargetSet::from_normalized_nostr_relays(sdk.configured_nostr_relay_urls())?; - delivery_plan_from_target_set("configured_profile", target_relays, satisfaction_policy) + delivery_plan_from_target_set("configured_profile", target_policy, satisfaction_policy) } TargetPolicy::UseTransportProfile => { let target_set = sdk.transport_profile().target_set()?.ok_or_else(|| { - RadrootsSdkError::empty_target_relays("publish transport profile") + RadrootsSdkError::empty_transport_targets("publish transport profile") })?; delivery_plan_from_target_set( sdk.transport_profile().transport_profile_id(), @@ -218,20 +218,20 @@ struct SdkWorkflowOutboxDigestInput<'a> { operation_kind: &'static str, expected_pubkey: &'a str, draft: &'a RadrootsFrozenEventDraft, - target_relays: &'a [String], + target_policy: &'a [String], } #[cfg(test)] fn outbox_idempotency_digest_prefix( operation_kind: &'static str, frozen_draft: &RadrootsFrozenEventDraft, - target_relays: &[String], + target_policy: &[String], ) -> String { let input = SdkWorkflowOutboxDigestInput { operation_kind, expected_pubkey: frozen_draft.expected_pubkey.as_str(), draft: frozen_draft, - target_relays, + target_policy, }; let bytes = serde_json::to_vec(&input).expect("workflow digest input serializes"); digest_prefix(hex::encode(Sha256::digest(bytes)).as_str()) diff --git a/crates/sdk/tests/dvm_runtime.rs b/crates/sdk/tests/dvm_runtime.rs @@ -241,7 +241,10 @@ async fn dvm_configured_enqueue_reports_prepare_and_target_errors_without_mutati .enqueue_trade_transition_proof_request(missing_relays) .await .expect_err("missing configured relays"); - assert!(matches!(error, RadrootsSdkError::EmptyTargetRelays { .. })); + assert!(matches!( + error, + RadrootsSdkError::EmptyTransportTargets { .. } + )); assert_eq!( store .status_summary() @@ -418,7 +421,10 @@ async fn dvm_trade_transition_proof_request_reports_prepare_and_target_errors_wi .enqueue_trade_transition_proof_request_with_explicit_signer(missing_relays, &signer) .await .expect_err("missing configured relays"); - assert!(matches!(error, RadrootsSdkError::EmptyTargetRelays { .. })); + assert!(matches!( + error, + RadrootsSdkError::EmptyTransportTargets { .. } + )); assert_eq!( store .status_summary() diff --git a/crates/sdk/tests/farms_runtime.rs b/crates/sdk/tests/farms_runtime.rs @@ -18,7 +18,7 @@ use radroots_sdk::{ FarmPrivateLocationLookupReceipt, FarmPrivateLocationReceipt, FarmPrivateLocationSetRequest, FarmPrivateLocationSetResult, FarmPrivateLocationUpsertRequest, Geocoder, GeocoderLocalityQuery, NostrProfile, NostrRelayUrlPolicy, PushOutboxEventState, - PushOutboxRelayOutcomeKind, PushOutboxRequest, RadrootsClient, RadrootsSdkError, + PushOutboxRequest, PushOutboxTargetOutcomeKind, RadrootsClient, RadrootsSdkError, RadrootsSdkErrorClass, RadrootsSdkGeoNamesErrorKind, RadrootsSdkRecoveryAction, RadrootsSdkTimestamp, SdkExactLocation, SdkIdempotencyKey, SdkMutationState, SdkPublicLocality, StorageStatusRequest, TargetPolicy, TargetSet, TransportProfile, @@ -723,14 +723,14 @@ async fn farm_enqueue_publish_derives_order_independent_idempotency_key() { farm(FARM_D_D_TAG, "North Farm"), TargetPolicy::UseConfiguredProfile, ) - .try_with_target_relays([RELAY_B, RELAY, RELAY], NostrRelayUrlPolicy::Public) - .expect("first target relays"); + .try_with_nostr_targets([RELAY_B, RELAY, RELAY], NostrRelayUrlPolicy::Public) + .expect("first transport targets"); let second = FarmEnqueuePublishRequest::new( farmer_actor(), farm(FARM_D_D_TAG, "North Farm"), TargetPolicy::explicit( TargetSet::new([RELAY, RELAY_B], NostrRelayUrlPolicy::Public) - .expect("second target relays"), + .expect("second transport targets"), ), ); @@ -777,8 +777,8 @@ async fn farm_enqueue_publish_pushes_queued_event_with_mock_relay_sync() { farm(FARM_D_D_TAG, "Sync Farm"), TargetPolicy::UseConfiguredProfile, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("target relays"); + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("transport targets"); let enqueue_receipt = sdk .farms() .enqueue_publish_with_explicit_signer(enqueue_request, &FixtureSigner::new(FARMER)) @@ -807,11 +807,11 @@ async fn farm_enqueue_publish_pushes_queued_event_with_mock_relay_sync() { assert_eq!(event.terminal_count, 0); assert_eq!(event.quorum, 1); assert!(event.quorum_met); - assert_eq!(event.relays.len(), 1); - assert_eq!(event.relays[0].relay_url, RELAY); + assert_eq!(event.targets.len(), 1); + assert_eq!(event.targets[0].endpoint_uri, RELAY); assert_eq!( - event.relays[0].outcome_kind, - PushOutboxRelayOutcomeKind::Accepted + event.targets[0].outcome_kind, + PushOutboxTargetOutcomeKind::Accepted ); assert_eq!(adapter.captured_raw_events().len(), 1); @@ -943,7 +943,7 @@ async fn farm_runtime_dtos_serialize_deterministically() { farm(FARM_B_D_TAG, "Queued Farm"), TargetPolicy::UseConfiguredProfile, ) - .try_with_target_relays([RELAY, RELAY_B], NostrRelayUrlPolicy::Public) + .try_with_nostr_targets([RELAY, RELAY_B], NostrRelayUrlPolicy::Public) .expect("relay targets") .with_idempotency_key( SdkIdempotencyKey::new("farm-serialized-idempotency").expect("idempotency"), @@ -971,7 +971,7 @@ async fn farm_runtime_dtos_serialize_deterministically() { "location": null, "tags": ["vegetables", "local"] }, - "target_relays": { + "target_policy": { "kind": "explicit", "targets": [ { diff --git a/crates/sdk/tests/listings_runtime.rs b/crates/sdk/tests/listings_runtime.rs @@ -309,7 +309,7 @@ async fn enqueue_publish_use_configured_profile_rejects_empty_transport_targets( assert!(matches!( error, - RadrootsSdkError::EmptyTargetRelays { operation } + RadrootsSdkError::EmptyTransportTargets { operation } if operation == "sdk transport target set" )); } @@ -430,16 +430,16 @@ async fn listing_runtime_dtos_serialize_deterministically() { listing(LISTING_B_D_TAG, "Queued Coffee"), TargetPolicy::UseConfiguredProfile, ) - .try_with_target_relays([RELAY, RELAY_B], NostrRelayUrlPolicy::Public) + .try_with_nostr_targets([RELAY, RELAY_B], NostrRelayUrlPolicy::Public) .expect("relay targets") .with_idempotency_key(SdkIdempotencyKey::new("serialized-idempotency").expect("idempotency")) .with_created_at(created_at); let enqueue_json = serde_json::to_value(&enqueue_request).expect("enqueue request json"); assert_struct_serialize_error_paths(&enqueue_request, 5); - assert_eq!(enqueue_json["target_relays"]["kind"], "explicit"); + assert_eq!(enqueue_json["target_policy"]["kind"], "explicit"); assert_eq!( - enqueue_json["target_relays"]["targets"], + enqueue_json["target_policy"]["targets"], serde_json::json!([ { "kind": "Nostr", @@ -454,7 +454,7 @@ async fn listing_runtime_dtos_serialize_deterministically() { ]) ); assert_eq!( - enqueue_json["target_relays"]["canonical_targets"], + enqueue_json["target_policy"]["canonical_targets"], serde_json::json!([ "5136077cfe7eddcbfaddc5d7bf1f42cdbb8191f3691b86ccc3a81047851cef05", "a1997ec4596596af6ffc65e6a30ab7cffa53ea71f524c1c86d64018b96d130af" @@ -743,14 +743,14 @@ async fn enqueue_publish_derives_order_independent_idempotency_key() { listing(LISTING_F_D_TAG, "Coffee"), TargetPolicy::UseConfiguredProfile, ) - .try_with_target_relays([RELAY_B, RELAY, RELAY], NostrRelayUrlPolicy::Public) - .expect("first target relays"); + .try_with_nostr_targets([RELAY_B, RELAY, RELAY], NostrRelayUrlPolicy::Public) + .expect("first transport targets"); let second = ListingEnqueuePublishRequest::new( actor(), listing(LISTING_F_D_TAG, "Coffee"), TargetPolicy::explicit( TargetSet::new([RELAY, RELAY_B], NostrRelayUrlPolicy::Public) - .expect("second target relays"), + .expect("second transport targets"), ), ); diff --git a/crates/sdk/tests/market_runtime.rs b/crates/sdk/tests/market_runtime.rs @@ -152,7 +152,7 @@ async fn market_search_refreshes_local_projection_and_reads_fts() { listing("Blueberries"), TargetPolicy::UseConfiguredProfile, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) .expect("target relays"); let receipt = sdk .listings() diff --git a/crates/sdk/tests/orders_runtime.rs b/crates/sdk/tests/orders_runtime.rs @@ -564,7 +564,7 @@ fn listing_event_ptr() -> RadrootsNostrEventPtr { fn explicit_trade_relays() -> TargetPolicy { TargetPolicy::explicit( - TargetSet::new([RELAY], NostrRelayUrlPolicy::Public).expect("target relays"), + TargetSet::new([RELAY], NostrRelayUrlPolicy::Public).expect("transport targets"), ) } @@ -647,7 +647,7 @@ fn order_request(raw_order_id: &str) -> RadrootsOrderRequest { fn trade_propose_request( raw_order_id: &str, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, ) -> TradeProposeRequest { let order = order_request(raw_order_id); TradeProposeRequest::new( @@ -660,7 +660,7 @@ fn trade_propose_request( order.economics, explicit_trade_relays(), publish_mode, - ack_policy, + satisfaction_policy, ) } @@ -853,8 +853,8 @@ async fn order_submit_enqueue_stores_event_queues_outbox_and_status_sees_request PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("target relays") + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("transport targets") .try_with_idempotency_key("order-submit-enqueue-idempotency") .expect("idempotency key"); @@ -2588,7 +2588,7 @@ async fn trade_resync_errors_on_total_relay_failure() { .await .expect_err("total relay failure"); - assert_eq!(error.code(), "product_sync_relay_setup_failure"); + assert_eq!(error.code(), "product_sync_transport_setup_failure"); } #[cfg(feature = "relay-runtime")] @@ -3336,8 +3336,8 @@ async fn order_submit_enqueue_returns_sanitized_signer_errors_before_mutation() PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("target relays"); + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("transport targets"); let error = sdk .trades() @@ -3386,15 +3386,15 @@ async fn order_submit_enqueue_derives_order_independent_idempotency_key() { PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY_B, RELAY, RELAY], NostrRelayUrlPolicy::Public) - .expect("first target relays"); + .try_with_nostr_targets([RELAY_B, RELAY, RELAY], NostrRelayUrlPolicy::Public) + .expect("first transport targets"); let second = TradeSubmitEnqueueRequest::new( buyer_actor(), listing_event_ptr(), order_request("order-submit-idempotent"), TargetPolicy::explicit( TargetSet::new([RELAY, RELAY_B], NostrRelayUrlPolicy::Public) - .expect("second target relays"), + .expect("second transport targets"), ), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, @@ -3473,8 +3473,8 @@ async fn order_submit_enqueue_pushes_queued_event_with_mock_relay_sync() { PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("target relays"); + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("transport targets"); let enqueue_receipt = sdk .trades() .enqueue_submit_with_explicit_signer( @@ -3506,11 +3506,11 @@ async fn order_submit_enqueue_pushes_queued_event_with_mock_relay_sync() { assert_eq!(event.terminal_count, 0); assert_eq!(event.quorum, 1); assert!(event.quorum_met); - assert_eq!(event.relays.len(), 1); - assert_eq!(event.relays[0].relay_url, RELAY); + assert_eq!(event.targets.len(), 1); + assert_eq!(event.targets[0].endpoint_uri, RELAY); assert_eq!( - event.relays[0].outcome_kind, - PushOutboxRelayOutcomeKind::Accepted + event.targets[0].outcome_kind, + PushOutboxTargetOutcomeKind::Accepted ); assert_eq!(adapter.captured_raw_events().len(), 1); @@ -3537,8 +3537,8 @@ async fn order_submit_enqueue_reports_partial_local_mutation_after_outbox_confli PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("first target relays") + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("first transport targets") .try_with_idempotency_key("order-submit-conflict-idempotency") .expect("first idempotency key"); sdk.trades() @@ -3554,8 +3554,8 @@ async fn order_submit_enqueue_reports_partial_local_mutation_after_outbox_confli PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("second target relays") + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("second transport targets") .try_with_idempotency_key("order-submit-conflict-idempotency") .expect("second idempotency key"); let error = sdk @@ -3646,7 +3646,7 @@ async fn order_submit_runtime_dtos_serialize_deterministically() { PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY, RELAY_B], NostrRelayUrlPolicy::Public) + .try_with_nostr_targets([RELAY, RELAY_B], NostrRelayUrlPolicy::Public) .expect("relay targets") .with_idempotency_key( SdkIdempotencyKey::new("order-serialized-idempotency").expect("idempotency"), @@ -3656,7 +3656,7 @@ async fn order_submit_runtime_dtos_serialize_deterministically() { assert_struct_serialize_error_paths(&enqueue_request, 6); assert_eq!( - enqueue_json["target_relays"], + enqueue_json["target_policy"], serde_json::json!({ "kind": "explicit", "targets": [ @@ -4321,7 +4321,7 @@ async fn order_request_evidence_ingest_stores_request_and_enables_decision_enque &actor, plan, TargetPolicy::try_nostr_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("target relays"), + .expect("transport targets"), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -4667,8 +4667,8 @@ async fn order_decision_runtime_dtos_serialize_deterministically() { PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY, RELAY_B], NostrRelayUrlPolicy::Public) - .expect("target relays") + .try_with_nostr_targets([RELAY, RELAY_B], NostrRelayUrlPolicy::Public) + .expect("transport targets") .with_idempotency_key( SdkIdempotencyKey::new("order-decision-serialized-idempotency").expect("idempotency"), ) @@ -4677,7 +4677,7 @@ async fn order_decision_runtime_dtos_serialize_deterministically() { assert_struct_serialize_error_paths(&enqueue_request, 6); assert_eq!( - enqueue_json["target_relays"], + enqueue_json["target_policy"], serde_json::json!({ "kind": "explicit", "targets": [ @@ -4870,7 +4870,7 @@ async fn order_revision_and_cancellation_dtos_serialize_deterministically() { PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY, RELAY_B], NostrRelayUrlPolicy::Public) + .try_with_nostr_targets([RELAY, RELAY_B], NostrRelayUrlPolicy::Public) .expect("proposal relays") .with_idempotency_key(SdkIdempotencyKey::new("order-revision-proposal-dto").expect("key")) .with_created_at(created_at); @@ -4878,7 +4878,7 @@ async fn order_revision_and_cancellation_dtos_serialize_deterministically() { serde_json::to_value(&proposal_enqueue).expect("proposal enqueue json"); assert_struct_serialize_error_paths(&proposal_enqueue, 7); assert_eq!( - proposal_enqueue_json["target_relays"], + proposal_enqueue_json["target_policy"], serde_json::json!({ "kind": "explicit", "targets": [ @@ -4957,7 +4957,7 @@ async fn order_revision_and_cancellation_dtos_serialize_deterministically() { PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY, RELAY_B], NostrRelayUrlPolicy::Public) + .try_with_nostr_targets([RELAY, RELAY_B], NostrRelayUrlPolicy::Public) .expect("decision relays") .with_idempotency_key( SdkIdempotencyKey::new("order-revision-decision-dto").expect("decision idempotency"), @@ -5018,7 +5018,7 @@ async fn order_revision_and_cancellation_dtos_serialize_deterministically() { PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY, RELAY_B], NostrRelayUrlPolicy::Public) + .try_with_nostr_targets([RELAY, RELAY_B], NostrRelayUrlPolicy::Public) .expect("cancellation relays") .with_idempotency_key( SdkIdempotencyKey::new("order-cancellation-dto").expect("cancellation idempotency"), @@ -5089,8 +5089,8 @@ async fn order_decision_enqueue_accept_stores_event_queues_outbox_and_updates_st PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("target relays") + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("transport targets") .try_with_idempotency_key("order-decision-accept-idempotency") .expect("idempotency"); @@ -5196,8 +5196,8 @@ async fn order_decision_enqueue_decline_stores_event_and_status_sees_declined() PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("target relays"); + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("transport targets"); let receipt = sdk .trades() @@ -5240,8 +5240,8 @@ async fn order_decision_enqueue_rejects_missing_request_evidence_before_mutation PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("target relays"); + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("transport targets"); let error = sdk .trades() @@ -5288,8 +5288,8 @@ async fn order_decision_enqueue_returns_sanitized_signer_errors_before_decision_ PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("target relays"); + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("transport targets"); let error = sdk .trades() @@ -5343,8 +5343,8 @@ async fn order_decision_enqueue_rejects_existing_decision_state_before_mutation( PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("target relays"); + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("transport targets"); let error = sdk .trades() @@ -5408,7 +5408,7 @@ async fn order_revision_lifecycle_accepts_proposal_and_waits_for_rhi() { &proposal_actor, proposal_plan, TargetPolicy::try_nostr_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("proposal target relays"), + .expect("proposal transport targets"), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, Some( @@ -5459,7 +5459,7 @@ async fn order_revision_lifecycle_accepts_proposal_and_waits_for_rhi() { &revision_decision_actor, revision_decision_plan, TargetPolicy::try_nostr_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("revision decision target relays"), + .expect("revision decision transport targets"), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -5553,8 +5553,8 @@ async fn order_revision_proposal_status_exposes_pending_and_blocks_follow_on_lif PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("proposal target relays"), + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("proposal transport targets"), &FixtureSigner::new(SELLER_SECRET_KEY_HEX), ) .await @@ -5596,8 +5596,8 @@ async fn order_revision_proposal_status_exposes_pending_and_blocks_follow_on_lif PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("decision target relays"), + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("decision transport targets"), &FixtureSigner::new(SELLER_SECRET_KEY_HEX), ) .await @@ -5624,8 +5624,8 @@ async fn order_revision_proposal_status_exposes_pending_and_blocks_follow_on_lif PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("blocked proposal target relays"), + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("blocked proposal transport targets"), &FixtureSigner::new(SELLER_SECRET_KEY_HEX), ) .await @@ -5671,8 +5671,8 @@ async fn order_declined_revision_finalizes_declined_negotiation() { PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("proposal target relays"), + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("proposal transport targets"), &FixtureSigner::new(SELLER_SECRET_KEY_HEX), ) .await @@ -5696,8 +5696,8 @@ async fn order_declined_revision_finalizes_declined_negotiation() { PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("declined revision target relays"), + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("declined revision transport targets"), &FixtureSigner::new(BUYER_SECRET_KEY_HEX), ) .await @@ -5746,8 +5746,8 @@ async fn order_declined_revision_finalizes_declined_negotiation() { PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("second decision target relays"), + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("second decision transport targets"), &FixtureSigner::new(BUYER_SECRET_KEY_HEX), ) .await @@ -5792,7 +5792,7 @@ async fn order_cancel_lifecycle_enqueue_updates_status() { &cancellation_actor, cancellation_plan, TargetPolicy::try_nostr_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("cancellation target relays"), + .expect("cancellation transport targets"), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, Some( @@ -5830,8 +5830,8 @@ async fn order_cancel_lifecycle_enqueue_updates_status() { PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("replay target relays") + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("replay transport targets") .try_with_idempotency_key("order-lifecycle-cancel") .expect("replay idempotency"), &FixtureSigner::new(BUYER_SECRET_KEY_HEX), @@ -5886,8 +5886,8 @@ async fn order_lifecycle_enqueue_rejects_invalid_state_before_mutation() { PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("missing target relays"), + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("missing transport targets"), &FixtureSigner::new(SELLER_SECRET_KEY_HEX), ) .await @@ -5917,8 +5917,8 @@ async fn order_lifecycle_enqueue_rejects_invalid_state_before_mutation() { PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("decision target relays"), + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("decision transport targets"), &FixtureSigner::new(SELLER_SECRET_KEY_HEX), ) .await @@ -5944,8 +5944,8 @@ async fn order_lifecycle_enqueue_rejects_invalid_state_before_mutation() { PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("revision decision target relays"), + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("revision decision transport targets"), &FixtureSigner::new(BUYER_SECRET_KEY_HEX), ) .await @@ -5967,8 +5967,8 @@ async fn order_lifecycle_enqueue_rejects_invalid_state_before_mutation() { PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) - .expect("cancellation target relays"), + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) + .expect("cancellation transport targets"), &FixtureSigner::new(BUYER_SECRET_KEY_HEX), ) .await diff --git a/crates/sdk/tests/runtime_foundation.rs b/crates/sdk/tests/runtime_foundation.rs @@ -97,7 +97,7 @@ fn invalid_relay_url_errors_redact_userinfo() { assert!(!error.retryable()); assert_eq!( error.recovery_actions(), - vec![RadrootsSdkRecoveryAction::ConfigureRelayTargets] + vec![RadrootsSdkRecoveryAction::ConfigureTransportTargets] ); assert!(message.contains("<redacted>@relay.example.com/path?<redacted>")); assert!(!message.contains("password")); @@ -106,7 +106,7 @@ fn invalid_relay_url_errors_redact_userinfo() { assert_eq!(detail["code"], "invalid_relay_url"); assert_eq!(detail["class"], "configuration"); assert_eq!(detail["retryable"], false); - assert_eq!(detail["recovery_actions"][0], "configure_relay_targets"); + assert_eq!(detail["recovery_actions"][0], "configure_transport_targets"); assert!(!detail.to_string().contains("password")); assert!(!detail.to_string().contains("token=secret")); assert!(!detail.to_string().contains("frag")); @@ -393,23 +393,23 @@ fn sdk_error_contract_methods_cover_all_variants() { vec![RadrootsSdkRecoveryAction::SelectAuthorizedActor], ), ( - RadrootsSdkError::EmptyTargetRelays { + RadrootsSdkError::EmptyTransportTargets { operation: "listing.publish".to_owned(), }, - "empty_target_relays", + "empty_transport_targets", RadrootsSdkErrorClass::Configuration, false, - vec![RadrootsSdkRecoveryAction::ConfigureRelayTargets], + vec![RadrootsSdkRecoveryAction::ConfigureTransportTargets], ), ( - RadrootsSdkError::RelayTargetLimitExceeded { + RadrootsSdkError::TransportTargetLimitExceeded { max: 20, actual: 21, }, - "relay_target_limit_exceeded", + "transport_target_limit_exceeded", RadrootsSdkErrorClass::Configuration, false, - vec![RadrootsSdkRecoveryAction::ConfigureRelayTargets], + vec![RadrootsSdkRecoveryAction::ConfigureTransportTargets], ), ( TargetSet::new(["wss://u:p@relay.example.com"], NostrRelayUrlPolicy::Public) @@ -417,7 +417,7 @@ fn sdk_error_contract_methods_cover_all_variants() { "invalid_relay_url", RadrootsSdkErrorClass::Configuration, false, - vec![RadrootsSdkRecoveryAction::ConfigureRelayTargets], + vec![RadrootsSdkRecoveryAction::ConfigureTransportTargets], ), ( RadrootsSdkError::IdempotencyConflict { @@ -478,10 +478,10 @@ fn sdk_error_contract_methods_cover_all_variants() { vec![RadrootsSdkRecoveryAction::EnableRequiredFeature], ), ( - RadrootsSdkError::ProductSyncRelaySetupFailure { + RadrootsSdkError::ProductSyncTransportSetupFailure { message: "relay setup".to_owned(), }, - "product_sync_relay_setup_failure", + "product_sync_transport_setup_failure", RadrootsSdkErrorClass::Transport, true, vec![RadrootsSdkRecoveryAction::RetryAfterTransportFailure], @@ -551,10 +551,10 @@ fn sdk_error_contract_methods_cover_all_variants() { vec![RadrootsSdkRecoveryAction::RetryGeoNamesDownload], ), ( - RadrootsSdkError::RelayTransport { + RadrootsSdkError::Transport { message: "relay".to_owned(), }, - "relay_transport", + "transport", RadrootsSdkErrorClass::Transport, true, vec![RadrootsSdkRecoveryAction::RetryAfterTransportFailure], @@ -654,7 +654,7 @@ fn relay_target_set_validates_normalizes_dedupes_preserves_order_and_caps() { assert!(matches!( TargetSet::new(Vec::<String>::new(), NostrRelayUrlPolicy::Public), - Err(RadrootsSdkError::EmptyTargetRelays { .. }) + Err(RadrootsSdkError::EmptyTransportTargets { .. }) )); let too_many = (0..=SDK_TRANSPORT_TARGET_MAX_COUNT) @@ -662,7 +662,7 @@ fn relay_target_set_validates_normalizes_dedupes_preserves_order_and_caps() { .collect::<Vec<_>>(); assert!(matches!( TargetSet::new(too_many, NostrRelayUrlPolicy::Public), - Err(RadrootsSdkError::RelayTargetLimitExceeded { + Err(RadrootsSdkError::TransportTargetLimitExceeded { max: SDK_TRANSPORT_TARGET_MAX_COUNT, actual }) if actual == SDK_TRANSPORT_TARGET_MAX_COUNT + 1 @@ -736,7 +736,7 @@ fn storage_backup_and_integrity_contract_dtos_serialize() { store: store.clone(), total_events: 2, projection_eligible_events: 1, - relay_observations: 1, + transport_observations: 1, last_event_seq: Some(2), last_event_updated_at_ms: Some(1_700_000_000_000), }, @@ -775,7 +775,7 @@ fn storage_backup_and_integrity_contract_dtos_serialize() { }, "total_events": 2, "projection_eligible_events": 1, - "relay_observations": 1, + "transport_observations": 1, "last_event_seq": 2, "last_event_updated_at_ms": 1700000000000i64 }, diff --git a/crates/sdk/tests/sync_runtime.rs b/crates/sdk/tests/sync_runtime.rs @@ -24,10 +24,10 @@ use radroots_sdk::{ ListingPreparePublishRequest, NostrProfile, NostrRelayUrlPolicy, PUSH_OUTBOX_DEFAULT_CLAIM_TTL_MS, PUSH_OUTBOX_DEFAULT_LIMIT, PUSH_OUTBOX_DEFAULT_NEXT_ATTEMPT_DELAY_MS, PUSH_OUTBOX_MAX_LIMIT, PushOutboxEventReceipt, - PushOutboxEventState, PushOutboxReceipt, PushOutboxRelayOutcomeKind, PushOutboxRelayReceipt, - PushOutboxRequest, RadrootsClient, RadrootsSdkError, RadrootsSdkTimestamp, RestoreRequest, - SdkBackupManifestKind, SdkRelayAuthPolicy, SdkRestoreState, StorageStatusRequest, - SyncStatusRequest, SyncStatusSource, TargetPolicy, TransportProfile, + PushOutboxEventState, PushOutboxReceipt, PushOutboxRequest, PushOutboxTargetOutcomeKind, + PushOutboxTargetReceipt, RadrootsClient, RadrootsSdkError, RadrootsSdkTimestamp, + RestoreRequest, SdkBackupManifestKind, SdkRelayAuthPolicy, SdkRestoreState, + StorageStatusRequest, SyncStatusRequest, SyncStatusSource, TargetPolicy, TransportProfile, }; use radroots_transport_nostr::{ RadrootsMockRelayPublishAdapter, RadrootsRelayOutcome, RadrootsRelayPublishAdapter, @@ -516,7 +516,7 @@ async fn enqueue_listing_with_policy( listing(d_tag, title), TargetPolicy::UseConfiguredProfile, ) - .try_with_target_relays(relays, url_policy) + .try_with_nostr_targets(relays, url_policy) .expect("relay targets"), &FixtureSigner::new(SELLER), ) @@ -539,7 +539,7 @@ async fn sync_status_empty_store_reports_canonical_sources_and_configured_relays assert_eq!(receipt.observed_at_ms, 1_700_000_000_000); assert_eq!(receipt.event_store.total_events, 0); assert_eq!(receipt.event_store.projection_eligible_events, 0); - assert_eq!(receipt.event_store.relay_observations, 0); + assert_eq!(receipt.event_store.transport_observations, 0); assert_eq!(receipt.event_store.last_event_seq, None); assert_eq!(receipt.outbox.total_events, 0); assert_eq!(receipt.outbox.pending_events, 0); @@ -547,9 +547,10 @@ async fn sync_status_empty_store_reports_canonical_sources_and_configured_relays assert_eq!(receipt.outbox.terminal_events, 0); assert_eq!(receipt.outbox.failed_terminal_events, 0); assert_eq!(receipt.outbox.ready_signed_events, 0); - assert_eq!(receipt.relay_targets.configured_count, 2); + assert_eq!(receipt.transport_profile.transport_profile_id, "nostr"); + assert_eq!(receipt.transport_profile.configured_nostr_relay_count, 2); assert_eq!( - receipt.relay_targets.configured_relays, + receipt.transport_profile.configured_nostr_relays, vec![RELAY_B.to_owned(), RELAY_A.to_owned()] ); assert_eq!( @@ -560,7 +561,7 @@ async fn sync_status_empty_store_reports_canonical_sources_and_configured_relays "event_store": { "total_events": 0, "projection_eligible_events": 0, - "relay_observations": 0, + "transport_observations": 0, "last_event_seq": null, "last_event_updated_at_ms": null }, @@ -575,9 +576,10 @@ async fn sync_status_empty_store_reports_canonical_sources_and_configured_relays "last_attempt_at_ms": null, "last_error": null }, - "relay_targets": { - "configured_count": 2, - "configured_relays": [RELAY_B, RELAY_A] + "transport_profile": { + "transport_profile_id": "nostr", + "configured_nostr_relay_count": 2, + "configured_nostr_relays": [RELAY_B, RELAY_A] } }) ); @@ -1480,14 +1482,14 @@ async fn product_push_outbox_uses_radrootsd_proxy_transport_with_daemon_resolved receipt.events[0].final_state, PushOutboxEventState::Published ); - assert_eq!(receipt.events[0].relays.len(), 1); + assert_eq!(receipt.events[0].targets.len(), 1); assert_eq!( - receipt.events[0].relays[0].relay_url, + receipt.events[0].targets[0].endpoint_uri, "wss://daemon-resolved.example.com" ); assert_eq!( - receipt.events[0].relays[0].outcome_kind, - PushOutboxRelayOutcomeKind::Accepted + receipt.events[0].targets[0].outcome_kind, + PushOutboxTargetOutcomeKind::Accepted ); let recorded = handle.join().expect("proxy request"); @@ -1651,7 +1653,7 @@ async fn product_push_outbox_radrootsd_proxy_error_and_terminal_paths_update_out retryable.events[0].final_state, PushOutboxEventState::PublishRetryable ); - assert!(retryable.events[0].relays.is_empty()); + assert!(retryable.events[0].targets.is_empty()); let retryable_status = retryable_sdk .sync() .status(SyncStatusRequest::new()) @@ -1702,8 +1704,8 @@ async fn product_push_outbox_radrootsd_proxy_error_and_terminal_paths_update_out PushOutboxEventState::FailedTerminal ); assert_eq!( - terminal.events[0].relays[0].outcome_kind, - PushOutboxRelayOutcomeKind::Invalid + terminal.events[0].targets[0].outcome_kind, + PushOutboxTargetOutcomeKind::Invalid ); let terminal_status = terminal_sdk .sync() @@ -1720,9 +1722,8 @@ fn push_outbox_contract_dtos_serialize_deterministically() { let request = PushOutboxRequest::new() .with_limit(2) .with_outbox_event_id(7) - .republish_accepted_relays(true) - .with_accepted_quorum(1) - .with_relay_url_policy(NostrRelayUrlPolicy::Localhost) + .republish_accepted_targets(true) + .with_nostr_relay_url_policy(NostrRelayUrlPolicy::Localhost) .with_auth_policy(SdkRelayAuthPolicy::DetectOnly) .with_claim_ttl_ms(1_000) .with_next_attempt_delay_ms(2_000); @@ -1731,9 +1732,8 @@ fn push_outbox_contract_dtos_serialize_deterministically() { serde_json::json!({ "limit": 1, "outbox_event_id": 7, - "republish_accepted_relays": true, - "accepted_quorum": 1, - "relay_url_policy": "localhost", + "republish_accepted_targets": true, + "nostr_relay_url_policy": "localhost", "auth_policy": "detect_only", "claim_ttl_ms": 1000, "next_attempt_delay_ms": 2000 @@ -1757,9 +1757,10 @@ fn push_outbox_contract_dtos_serialize_deterministically() { terminal_count: 0, quorum: 1, quorum_met: true, - relays: vec![PushOutboxRelayReceipt { - relay_url: RELAY_A.to_owned(), - outcome_kind: PushOutboxRelayOutcomeKind::DuplicateAccepted, + targets: vec![PushOutboxTargetReceipt { + transport_kind: "nostr".to_owned(), + endpoint_uri: RELAY_A.to_owned(), + outcome_kind: PushOutboxTargetOutcomeKind::DuplicateAccepted, attempted: true, message: Some("duplicate".to_owned()), }], @@ -1782,8 +1783,9 @@ fn push_outbox_contract_dtos_serialize_deterministically() { "terminal_count": 0, "quorum": 1, "quorum_met": true, - "relays": [{ - "relay_url": RELAY_A, + "targets": [{ + "transport_kind": "nostr", + "endpoint_uri": RELAY_A, "outcome_kind": "duplicate_accepted", "attempted": true, "message": "duplicate" @@ -1893,10 +1895,10 @@ async fn push_outbox_with_adapter_uses_queued_targets_without_builder_relays() { assert_eq!(event.terminal_count, 0); assert_eq!(event.quorum, 1); assert!(event.quorum_met); - assert_eq!(event.relays.len(), 1); + assert_eq!(event.targets.len(), 1); assert_eq!( - event.relays[0].outcome_kind, - PushOutboxRelayOutcomeKind::Accepted + event.targets[0].outcome_kind, + PushOutboxTargetOutcomeKind::Accepted ); assert_eq!(adapter.captured_raw_events().len(), 1); @@ -1993,7 +1995,7 @@ async fn push_outbox_with_adapter_accepts_explicit_queued_localhost_ws_targets() &adapter, PushOutboxRequest::new() .with_limit(1) - .with_relay_url_policy(NostrRelayUrlPolicy::Localhost), + .with_nostr_relay_url_policy(NostrRelayUrlPolicy::Localhost), ) .await .expect("push"); @@ -2012,20 +2014,20 @@ async fn push_outbox_with_adapter_accepts_explicit_queued_localhost_ws_targets() assert_eq!(event.terminal_count, 0); assert_eq!(event.quorum, 3); assert!(event.quorum_met); - assert_eq!(event.relays.len(), 3); + assert_eq!(event.targets.len(), 3); assert!( event - .relays + .targets .iter() - .all(|relay| relay.outcome_kind == PushOutboxRelayOutcomeKind::Accepted) + .all(|target| target.outcome_kind == PushOutboxTargetOutcomeKind::Accepted) ); - let relay_urls = event - .relays + let endpoint_uris = event + .targets .iter() - .map(|relay| relay.relay_url.as_str()) + .map(|target| target.endpoint_uri.as_str()) .collect::<Vec<_>>(); assert_eq!( - relay_urls, + endpoint_uris, vec![LOCAL_RELAY_A, LOCAL_RELAY_B, LOCAL_RELAY_C] ); assert_eq!(adapter.captured_raw_events().len(), 1); @@ -2038,7 +2040,7 @@ fn enqueue_publish_rejects_nonlocal_ws_relay_targets() { listing(LISTING_C_D_TAG, "Nonlocal Coffee"), TargetPolicy::UseConfiguredProfile, ) - .try_with_target_relays([NONLOCAL_WS_RELAY], NostrRelayUrlPolicy::Localhost) + .try_with_nostr_targets([NONLOCAL_WS_RELAY], NostrRelayUrlPolicy::Localhost) .expect_err("nonlocal ws relay target"); assert!(matches!(error, RadrootsSdkError::InvalidRelayUrl { .. })); @@ -2048,7 +2050,7 @@ fn enqueue_publish_rejects_nonlocal_ws_relay_targets() { listing(LISTING_C_D_TAG, "Private LAN Coffee"), TargetPolicy::UseConfiguredProfile, ) - .try_with_target_relays([PRIVATE_LAN_WS_RELAY], NostrRelayUrlPolicy::Localhost) + .try_with_nostr_targets([PRIVATE_LAN_WS_RELAY], NostrRelayUrlPolicy::Localhost) .expect_err("private LAN ws relay target"); assert!(matches!(error, RadrootsSdkError::InvalidRelayUrl { .. })); @@ -2095,32 +2097,35 @@ async fn push_outbox_preserves_retryable_and_terminal_relay_outcomes() { assert_eq!(event.terminal_count, 1); assert!(!event.quorum_met); - let relay_a = event - .relays + let target_a = event + .targets .iter() - .find(|relay| relay.relay_url == RELAY_A) - .expect("relay a"); - let relay_b = event - .relays + .find(|target| target.endpoint_uri == RELAY_A) + .expect("target a"); + let target_b = event + .targets .iter() - .find(|relay| relay.relay_url == RELAY_B) - .expect("relay b"); - let relay_c = event - .relays + .find(|target| target.endpoint_uri == RELAY_B) + .expect("target b"); + let target_c = event + .targets .iter() - .find(|relay| relay.relay_url == RELAY_C) - .expect("relay c"); + .find(|target| target.endpoint_uri == RELAY_C) + .expect("target c"); assert_eq!( - relay_a.outcome_kind, - PushOutboxRelayOutcomeKind::DuplicateAccepted + target_a.outcome_kind, + PushOutboxTargetOutcomeKind::DuplicateAccepted ); assert_eq!( - relay_b.outcome_kind, - PushOutboxRelayOutcomeKind::AuthRequired + target_b.outcome_kind, + PushOutboxTargetOutcomeKind::AuthRequired ); - assert_eq!(relay_c.outcome_kind, PushOutboxRelayOutcomeKind::Restricted); - assert_eq!(relay_b.message.as_deref(), Some("auth-required: login")); + assert_eq!( + target_c.outcome_kind, + PushOutboxTargetOutcomeKind::Restricted + ); + assert_eq!(target_b.message.as_deref(), Some("auth-required: login")); } #[tokio::test] @@ -2162,11 +2167,11 @@ async fn push_outbox_continues_after_adapter_transport_failure_and_releases_clai receipt .events .iter() - .flat_map(|event| event.relays.iter()) - .all(|relay| { - relay.attempted - && relay.outcome_kind == PushOutboxRelayOutcomeKind::ConnectionFailed - && relay.message.as_deref() == Some("adapter boundary unavailable") + .flat_map(|event| event.targets.iter()) + .all(|target| { + target.attempted + && target.outcome_kind == PushOutboxTargetOutcomeKind::ConnectionFailed + && target.message.as_deref() == Some("adapter boundary unavailable") }) ); diff --git a/crates/sdk/tests/trade_product_publish_runtime.rs b/crates/sdk/tests/trade_product_publish_runtime.rs @@ -21,7 +21,7 @@ use radroots_events::{ }; use radroots_nostr::prelude::{RadrootsNostrKeys, RadrootsNostrSecretKey}; use radroots_sdk::{ - NostrRelayUrlPolicy, ProxyProfile, PublishMode, PushOutboxRelayOutcomeKind, RadrootsClient, + NostrRelayUrlPolicy, ProxyProfile, PublishMode, PushOutboxTargetOutcomeKind, RadrootsClient, RadrootsSdkLocalKeySigner, RadrootsSdkSignerProvider, RadrootsSdkTimestamp, SatisfactionPolicy, TargetPolicy, TargetSet, TradeMutationOutcome, TradeProposeRequest, TransportProfile, }; @@ -206,7 +206,7 @@ fn order_request(raw_order_id: &str) -> RadrootsOrderRequest { fn trade_propose_request( raw_order_id: &str, publish_mode: PublishMode, - ack_policy: SatisfactionPolicy, + satisfaction_policy: SatisfactionPolicy, ) -> TradeProposeRequest { let order = order_request(raw_order_id); TradeProposeRequest::new( @@ -219,7 +219,7 @@ fn trade_propose_request( order.economics, explicit_trade_relays(), publish_mode, - ack_policy, + satisfaction_policy, ) } @@ -274,8 +274,8 @@ async fn trade_product_propose_enqueue_and_publish_uses_ack_policy() { assert_eq!(publish.events[0].quorum, 1); assert!(publish.events[0].quorum_met); assert_eq!( - publish.events[0].relays[0].outcome_kind, - PushOutboxRelayOutcomeKind::Accepted + publish.events[0].targets[0].outcome_kind, + PushOutboxTargetOutcomeKind::Accepted ); let recorded = handle.join().expect("proxy request"); diff --git a/crates/sdk/tests/trade_public_api.rs b/crates/sdk/tests/trade_public_api.rs @@ -32,7 +32,7 @@ async fn grouped_trade_surface_is_the_public_product_entrypoint() { .await .expect_err("resync requires configured relays"); - assert_eq!(resync_error.code(), "empty_target_relays"); + assert_eq!(resync_error.code(), "empty_transport_targets"); let validation_receipt_error = validation_receipts .list( @@ -42,7 +42,7 @@ async fn grouped_trade_surface_is_the_public_product_entrypoint() { .await .expect_err("validation receipt list requires configured relays"); - assert_eq!(validation_receipt_error.code(), "empty_target_relays"); + assert_eq!(validation_receipt_error.code(), "empty_transport_targets"); let seller_actor = RadrootsActorContext::test(SELLER_PUBLIC_KEY_HEX, [RadrootsActorRole::Seller]) diff --git a/crates/sdk/tests/unit/dvm_runtime_tests.rs b/crates/sdk/tests/unit/dvm_runtime_tests.rs @@ -232,7 +232,7 @@ fn enqueue_request_builders_and_ingest_request_builders_are_deterministic() { prepare.clone(), TargetPolicy::UseConfiguredProfile, ) - .try_with_target_relays([RELAY], NostrRelayUrlPolicy::Public) + .try_with_nostr_targets([RELAY], NostrRelayUrlPolicy::Public) .expect("relays") .with_idempotency_key(idempotency) .with_inventory_sequence(11) @@ -242,7 +242,7 @@ fn enqueue_request_builders_and_ingest_request_builders_are_deterministic() { assert_eq!(request.prepare.inventory_sequence, 11); assert_eq!(request.prepare.previous_state_root, Some(hash32('1'))); assert_eq!(serialized["proof_mode"], "none"); - assert_eq!(serialized["target_relays"]["kind"], "explicit"); + assert_eq!(serialized["target_policy"]["kind"], "explicit"); assert_eq!(serialized["idempotency_key"]["value"], "<redacted>"); assert_eq!(serialized["idempotency_key"]["len"], idempotency_len); @@ -269,7 +269,7 @@ fn enqueue_request_builders_and_ingest_request_builders_are_deterministic() { prepare, TargetPolicy::UseConfiguredProfile, ) - .try_with_target_relays(["ws://relay.example.com"], NostrRelayUrlPolicy::Public), + .try_with_nostr_targets(["ws://relay.example.com"], NostrRelayUrlPolicy::Public), Err(RadrootsSdkError::InvalidRelayUrl { .. }) )); assert!(matches!( diff --git a/crates/sdk/tests/unit/error_tests.rs b/crates/sdk/tests/unit/error_tests.rs @@ -132,7 +132,7 @@ fn listing_and_store_errors_convert_to_sdk_error_classes() { fn outbox_error_conversion_handles_empty_targets_and_fallbacks() { assert!(matches!( RadrootsSdkError::from(radroots_outbox::RadrootsOutboxError::EmptyDeliveryTargets), - RadrootsSdkError::EmptyTargetRelays { ref operation } if operation == "outbox enqueue" + RadrootsSdkError::EmptyTransportTargets { ref operation } if operation == "outbox enqueue" )); assert!(matches!( @@ -236,7 +236,7 @@ fn relay_transport_error_conversion_redacts_and_classifies_url_errors() { RadrootsSdkError::from( radroots_transport_nostr::RadrootsRelayTransportError::EmptyTargetSet ), - RadrootsSdkError::EmptyTargetRelays { ref operation } if operation == "relay publish" + RadrootsSdkError::EmptyTransportTargets { ref operation } if operation == "nostr relay publish" )); assert!(matches!( RadrootsSdkError::from( @@ -253,13 +253,13 @@ fn relay_transport_error_conversion_redacts_and_classifies_url_errors() { RadrootsSdkError::from(radroots_transport_nostr::RadrootsRelayTransportError::Outbox( radroots_outbox::RadrootsOutboxError::EmptyDeliveryTargets, )), - RadrootsSdkError::EmptyTargetRelays { ref operation } if operation == "outbox enqueue" + RadrootsSdkError::EmptyTransportTargets { ref operation } if operation == "outbox enqueue" )); assert!(matches!( RadrootsSdkError::from(radroots_transport_nostr::RadrootsRelayTransportError::Transport( "offline".to_owned(), )), - RadrootsSdkError::RelayTransport { ref message } if message == "Relay transport error: offline" + RadrootsSdkError::Transport { ref message } if message == "Relay transport error: offline" )); } @@ -341,10 +341,10 @@ fn sdk_error_contract_methods_cover_representative_classes_and_details() { operation: "listing.publish".to_owned(), reason: "id changed".to_owned(), }, - RadrootsSdkError::EmptyTargetRelays { - operation: "relay publish".to_owned(), + RadrootsSdkError::EmptyTransportTargets { + operation: "nostr relay publish".to_owned(), }, - RadrootsSdkError::RelayTargetLimitExceeded { max: 2, actual: 3 }, + RadrootsSdkError::TransportTargetLimitExceeded { max: 2, actual: 3 }, RadrootsSdkError::invalid_relay_url( "wss://user:secret@relay.example.com/path?token=secret", "userinfo", @@ -366,7 +366,7 @@ fn sdk_error_contract_methods_cover_representative_classes_and_details() { operation: "sync.push_outbox", required_feature: "relay-runtime", }, - RadrootsSdkError::ProductSyncRelaySetupFailure { + RadrootsSdkError::ProductSyncTransportSetupFailure { message: "offline".to_owned(), }, RadrootsSdkError::Authority { @@ -414,7 +414,7 @@ fn sdk_error_contract_methods_cover_representative_classes_and_details() { kind: RadrootsSdkGeoNamesErrorKind::Lookup, message: "lookup".to_owned(), }, - RadrootsSdkError::RelayTransport { + RadrootsSdkError::Transport { message: "transport".to_owned(), }, RadrootsSdkError::Projection { diff --git a/crates/sdk/tests/unit/farms_runtime_tests.rs b/crates/sdk/tests/unit/farms_runtime_tests.rs @@ -169,13 +169,13 @@ fn farm_runtime_request_builders_and_serializers_cover_success_paths() { farm(FARM_B_D_TAG, "Queued Farm"), TargetPolicy::UseConfiguredProfile, ) - .try_with_target_relays([RELAY_A, RELAY_B], NostrRelayUrlPolicy::Public) + .try_with_nostr_targets([RELAY_A, RELAY_B], NostrRelayUrlPolicy::Public) .expect("relay targets") .with_idempotency_key(SdkIdempotencyKey::new("farm-unit-key").expect("key")) .with_created_at(created_at); assert_struct_serialize_error_paths(&enqueue, 5); let enqueue_json = serde_json::to_value(&enqueue).expect("enqueue json"); - assert_eq!(enqueue_json["target_relays"]["kind"], "explicit"); + assert_eq!(enqueue_json["target_policy"]["kind"], "explicit"); assert_eq!(enqueue_json["created_at"], 1_700_000_321); assert!(!enqueue_json.to_string().contains("farm-unit-key")); @@ -359,7 +359,7 @@ fn farm_request_builders_reject_invalid_options_and_timestamp_bounds() { farm(FARM_A_D_TAG, "Invalid Relay Farm"), TargetPolicy::UseConfiguredProfile, ) - .try_with_target_relays(["http://relay.radroots.test"], NostrRelayUrlPolicy::Public); + .try_with_nostr_targets(["http://relay.radroots.test"], NostrRelayUrlPolicy::Public); assert!(invalid_relays.is_err()); let invalid_key = FarmEnqueuePublishRequest::new( @@ -532,7 +532,7 @@ async fn farm_enqueue_publish_reports_prepare_errors_before_signing() { farmer_actor(), farm("AAAAAAAAAAAAAAAAAAAAA!", "Invalid Enqueue Farm"), TargetPolicy::try_nostr_relays([RELAY_A], NostrRelayUrlPolicy::Public) - .expect("target relays"), + .expect("transport targets"), ), &FixtureSigner::new(FARMER), ) @@ -557,7 +557,7 @@ async fn farm_client_enqueue_methods_cover_source_attached_workflow_paths() { actor.clone(), farm(FARM_A_D_TAG, "Enqueued Farm"), TargetPolicy::try_nostr_relays([RELAY_A], NostrRelayUrlPolicy::Public) - .expect("target relays"), + .expect("transport targets"), ) .try_with_idempotency_key("farm-source-attached-enqueue") .expect("idempotency"), @@ -581,7 +581,7 @@ async fn farm_client_enqueue_methods_cover_source_attached_workflow_paths() { &actor, plan, TargetPolicy::try_nostr_relays([RELAY_B], NostrRelayUrlPolicy::Public) - .expect("prepared target relays"), + .expect("prepared transport targets"), None, &signer, ) @@ -613,7 +613,7 @@ async fn farm_configured_local_signer_enqueues_publish_without_explicit_signer() actor, farm(FARM_C_D_TAG, "Configured Farm"), TargetPolicy::try_nostr_relays([RELAY_A], NostrRelayUrlPolicy::Public) - .expect("target relays"), + .expect("transport targets"), ) .try_with_idempotency_key("farm-configured-local") .expect("idempotency"), @@ -647,7 +647,7 @@ async fn farm_configured_enqueue_reports_prepare_and_signer_errors() { actor.clone(), farm("AAAAAAAAAAAAAAAAAAAAA!", "Invalid Configured Farm"), TargetPolicy::try_nostr_relays([RELAY_A], NostrRelayUrlPolicy::Public) - .expect("target relays"), + .expect("transport targets"), )) .await, Err(RadrootsSdkError::InvalidRequest { .. }) @@ -672,7 +672,7 @@ async fn farm_configured_enqueue_reports_prepare_and_signer_errors() { &actor, plan, TargetPolicy::try_nostr_relays([RELAY_A], NostrRelayUrlPolicy::Public) - .expect("target relays"), + .expect("transport targets"), None, ) .await, diff --git a/crates/sdk/tests/unit/listings_runtime_tests.rs b/crates/sdk/tests/unit/listings_runtime_tests.rs @@ -106,13 +106,13 @@ fn listing_runtime_request_builders_and_serializers_cover_success_paths() { RadrootsListingDraftDocumentV1::new(listing(LISTING_B_D_TAG, "Queued Greens")), TargetPolicy::UseConfiguredProfile, ) - .try_with_target_relays([RELAY_A, RELAY_B], NostrRelayUrlPolicy::Public) + .try_with_nostr_targets([RELAY_A, RELAY_B], NostrRelayUrlPolicy::Public) .expect("relay targets") .with_idempotency_key(SdkIdempotencyKey::new("listing-unit-key").expect("key")) .with_created_at(created_at); assert_struct_serialize_error_paths(&enqueue, 5); let enqueue_json = serde_json::to_value(&enqueue).expect("enqueue json"); - assert_eq!(enqueue_json["target_relays"]["kind"], "explicit"); + assert_eq!(enqueue_json["target_policy"]["kind"], "explicit"); assert_eq!(enqueue_json["created_at"], 1_700_000_321); assert!(!enqueue_json.to_string().contains("listing-unit-key")); @@ -236,7 +236,7 @@ async fn listing_enqueue_publish_reports_prepare_errors_before_signing() { actor(), listing(LISTING_A_D_TAG, "Future Enqueue Greens"), TargetPolicy::try_nostr_relays([RELAY_A], NostrRelayUrlPolicy::Public) - .expect("target relays"), + .expect("transport targets"), ) .with_created_at(RadrootsSdkTimestamp::from_unix_seconds(u64::MAX)), &FixtureSigner::new(SELLER), @@ -265,7 +265,7 @@ async fn listing_client_enqueue_methods_cover_source_attached_workflow_paths() { actor.clone(), listing(LISTING_A_D_TAG, "Enqueued Greens"), TargetPolicy::try_nostr_relays([RELAY_A], NostrRelayUrlPolicy::Public) - .expect("target relays"), + .expect("transport targets"), ) .try_with_idempotency_key("listing-source-attached-enqueue") .expect("idempotency"), @@ -289,7 +289,7 @@ async fn listing_client_enqueue_methods_cover_source_attached_workflow_paths() { &actor, plan, TargetPolicy::try_nostr_relays([RELAY_B], NostrRelayUrlPolicy::Public) - .expect("prepared target relays"), + .expect("prepared transport targets"), None, &signer, ) @@ -321,7 +321,7 @@ async fn listing_configured_local_signer_enqueues_publish_without_explicit_signe actor, listing_for_seller(seller.as_str(), LISTING_C_D_TAG, "Configured Greens"), TargetPolicy::try_nostr_relays([RELAY_A], NostrRelayUrlPolicy::Public) - .expect("target relays"), + .expect("transport targets"), ) .try_with_idempotency_key("listing-configured-local") .expect("idempotency"), @@ -348,7 +348,7 @@ async fn listing_configured_enqueue_reports_missing_signer_after_prepare() { actor.clone(), listing(LISTING_A_D_TAG, "Configured Prepare Error Greens"), TargetPolicy::try_nostr_relays([RELAY_A], NostrRelayUrlPolicy::Public) - .expect("target relays"), + .expect("transport targets"), ) .with_created_at(RadrootsSdkTimestamp::from_unix_seconds(u64::MAX)), ) @@ -369,7 +369,7 @@ async fn listing_configured_enqueue_reports_missing_signer_after_prepare() { &actor, plan, TargetPolicy::try_nostr_relays([RELAY_A], NostrRelayUrlPolicy::Public) - .expect("target relays"), + .expect("transport targets"), None, ) .await, diff --git a/crates/sdk/tests/unit/orders_runtime_tests.rs b/crates/sdk/tests/unit/orders_runtime_tests.rs @@ -411,8 +411,8 @@ fn fixture_cancellation(raw_order_id: &str) -> RadrootsOrderCancellation { } } -fn fixture_target_relays() -> TargetPolicy { - TargetPolicy::try_nostr_relays([RELAY], NostrRelayUrlPolicy::Public).expect("target relays") +fn fixture_target_policy() -> TargetPolicy { + TargetPolicy::try_nostr_relays([RELAY], NostrRelayUrlPolicy::Public).expect("transport targets") } async fn prepared_order_sdk() -> RadrootsClient { @@ -444,7 +444,7 @@ async fn order_configured_local_signer_enqueues_submit_without_explicit_signer() fixture_buyer_actor(), fixture_event_ptr('a'), fixture_order_request("order-configured-local-1"), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, )) @@ -465,7 +465,7 @@ async fn order_configured_local_signer_enqueues_lifecycle_wrappers_without_expli fixture_seller_actor(), fixture_order_event_ptr(&decision_submit.signed_event_id), fixture_order_decision("order-configured-decision"), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, )) @@ -487,7 +487,7 @@ async fn order_configured_local_signer_enqueues_lifecycle_wrappers_without_expli fixture_order_event_ptr(&proposal_submit.signed_event_id), fixture_order_event_ptr(&proposal_submit.signed_event_id), proposal_payload, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, )) @@ -512,7 +512,7 @@ async fn order_configured_local_signer_enqueues_lifecycle_wrappers_without_expli fixture_order_event_ptr(&revision_submit.signed_event_id), fixture_order_event_ptr(&revision_submit.signed_event_id), revision_proposal_payload.clone(), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ), @@ -531,7 +531,7 @@ async fn order_configured_local_signer_enqueues_lifecycle_wrappers_without_expli fixture_order_event_ptr(&revision_submit.signed_event_id), fixture_order_event_ptr(&revision_proposal.signed_event_id), revision_decision_payload, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, )) @@ -555,7 +555,7 @@ async fn order_configured_local_signer_enqueues_lifecycle_wrappers_without_expli fixture_order_event_ptr(&cancel_submit.signed_event_id), fixture_order_event_ptr(&cancel_submit.signed_event_id), fixture_cancellation("order-configured-cancel"), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, )) @@ -583,7 +583,7 @@ async fn enqueue_fixture_submit(sdk: &RadrootsClient, raw_order_id: &str) -> Tra .enqueue_prepared_submit_with_explicit_signer( &buyer, plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -2086,8 +2086,8 @@ fn order_enqueue_request_mutators_reject_invalid_relays_and_idempotency_keys() { PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays(Vec::<String>::new(), NostrRelayUrlPolicy::Public), - "target relays", + .try_with_nostr_targets(Vec::<String>::new(), NostrRelayUrlPolicy::Public), + "transport targets", ); assert_error_display( TradeSubmitEnqueueRequest::new( @@ -2111,8 +2111,8 @@ fn order_enqueue_request_mutators_reject_invalid_relays_and_idempotency_keys() { PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays(Vec::<String>::new(), NostrRelayUrlPolicy::Public), - "target relays", + .try_with_nostr_targets(Vec::<String>::new(), NostrRelayUrlPolicy::Public), + "transport targets", ); assert_error_display( TradeDecisionEnqueueRequest::new( @@ -2137,8 +2137,8 @@ fn order_enqueue_request_mutators_reject_invalid_relays_and_idempotency_keys() { PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays(Vec::<String>::new(), NostrRelayUrlPolicy::Public), - "target relays", + .try_with_nostr_targets(Vec::<String>::new(), NostrRelayUrlPolicy::Public), + "transport targets", ); assert_error_display( TradeRevisionProposalEnqueueRequest::new( @@ -2164,8 +2164,8 @@ fn order_enqueue_request_mutators_reject_invalid_relays_and_idempotency_keys() { PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays(Vec::<String>::new(), NostrRelayUrlPolicy::Public), - "target relays", + .try_with_nostr_targets(Vec::<String>::new(), NostrRelayUrlPolicy::Public), + "transport targets", ); assert_error_display( TradeRevisionDecisionEnqueueRequest::new( @@ -2191,8 +2191,8 @@ fn order_enqueue_request_mutators_reject_invalid_relays_and_idempotency_keys() { PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays(Vec::<String>::new(), NostrRelayUrlPolicy::Public), - "target relays", + .try_with_nostr_targets(Vec::<String>::new(), NostrRelayUrlPolicy::Public), + "transport targets", ); assert_error_display( TradeCancellationEnqueueRequest::new( @@ -2219,12 +2219,12 @@ fn trade_enqueue_policy_rejects_publish_modes_without_matching_side_effects() { assert!(matches!( validate_trade_enqueue_policy(PublishMode::EnqueueOnly, SatisfactionPolicy::AtLeastOneTarget), Err(RadrootsSdkError::InvalidRequest { ref message }) - if message == "trade enqueue-only publish mode only supports no-wait acknowledgement" + if message == "trade enqueue-only publish mode only supports no-wait satisfaction" )); assert!(matches!( validate_trade_enqueue_policy(PublishMode::EnqueueAndPublish, SatisfactionPolicy::NoWait), Err(RadrootsSdkError::InvalidRequest { ref message }) - if message == "trade enqueue-and-publish requires a relay acknowledgement policy" + if message == "trade enqueue-and-publish requires a transport satisfaction policy" )); assert!( validate_trade_enqueue_policy(PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait).is_ok() @@ -2350,7 +2350,7 @@ async fn prepared_submit_and_decision_enqueue_cover_source_attached_success_path .enqueue_prepared_decision_with_explicit_signer( &seller, decision_plan.clone(), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, Some(SdkIdempotencyKey::new("prepared-decision").expect("idempotency")), @@ -2388,7 +2388,7 @@ async fn prepared_revision_lifecycle_enqueue_cover_source_attached_success_paths .enqueue_prepared_revision_proposal_with_explicit_signer( &seller, proposal_plan.clone(), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, Some(SdkIdempotencyKey::new("prepared-proposal").expect("idempotency")), @@ -2418,7 +2418,7 @@ async fn prepared_revision_lifecycle_enqueue_cover_source_attached_success_paths .enqueue_prepared_revision_decision_with_explicit_signer( &buyer, revision_decision_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -2452,7 +2452,7 @@ async fn prepared_cancellation_enqueue_covers_source_attached_success_path() { .enqueue_prepared_cancellation_with_explicit_signer( &buyer, cancellation_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, Some(SdkIdempotencyKey::new("prepared-cancellation").expect("idempotency")), @@ -2477,7 +2477,7 @@ async fn convenience_order_enqueue_methods_cover_source_attached_wrappers() { fixture_buyer_actor(), fixture_event_ptr('b'), fixture_order_request("order-wrapper-decision"), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ), @@ -2492,7 +2492,7 @@ async fn convenience_order_enqueue_methods_cover_source_attached_wrappers() { fixture_seller_actor(), fixture_order_event_ptr(&decision_submit.signed_event_id), fixture_order_decision("order-wrapper-decision"), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ), @@ -2509,7 +2509,7 @@ async fn convenience_order_enqueue_methods_cover_source_attached_wrappers() { fixture_buyer_actor(), fixture_event_ptr('c'), fixture_order_request("order-wrapper-revision"), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ), @@ -2530,7 +2530,7 @@ async fn convenience_order_enqueue_methods_cover_source_attached_wrappers() { fixture_order_event_ptr(&revision_submit.signed_event_id), fixture_order_event_ptr(&revision_submit.signed_event_id), proposal_payload.clone(), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ), @@ -2546,7 +2546,7 @@ async fn convenience_order_enqueue_methods_cover_source_attached_wrappers() { fixture_order_event_ptr(&revision_submit.signed_event_id), fixture_order_event_ptr(&proposal.signed_event_id), fixture_revision_decision(&proposal_payload, &proposal.signed_event_id), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ), @@ -2563,7 +2563,7 @@ async fn convenience_order_enqueue_methods_cover_source_attached_wrappers() { fixture_buyer_actor(), fixture_event_ptr('d'), fixture_order_request("order-wrapper-cancellation"), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ), @@ -2579,7 +2579,7 @@ async fn convenience_order_enqueue_methods_cover_source_attached_wrappers() { fixture_order_event_ptr(&cancellation_submit.signed_event_id), fixture_order_event_ptr(&cancellation_submit.signed_event_id), fixture_cancellation("order-wrapper-cancellation"), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ), @@ -2618,7 +2618,7 @@ async fn prepared_lifecycle_enqueues_report_missing_and_closed_preflight_errors( .enqueue_prepared_decision_with_explicit_signer( &seller, decision_plan.clone(), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -2645,7 +2645,7 @@ async fn prepared_lifecycle_enqueues_report_missing_and_closed_preflight_errors( .enqueue_prepared_revision_proposal_with_explicit_signer( &seller, proposal_plan.clone(), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -2672,7 +2672,7 @@ async fn prepared_lifecycle_enqueues_report_missing_and_closed_preflight_errors( .enqueue_prepared_revision_decision_with_explicit_signer( &buyer, revision_decision_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -2699,7 +2699,7 @@ async fn prepared_lifecycle_enqueues_report_missing_and_closed_preflight_errors( .enqueue_prepared_cancellation_with_explicit_signer( &buyer, cancellation_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -2763,7 +2763,7 @@ async fn prepared_lifecycle_enqueues_report_missing_and_closed_preflight_errors( .enqueue_prepared_decision_with_explicit_signer( &seller, closed_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -2777,7 +2777,7 @@ async fn prepared_lifecycle_enqueues_report_missing_and_closed_preflight_errors( .enqueue_prepared_revision_proposal_with_explicit_signer( &seller, closed_proposal_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -2794,7 +2794,7 @@ async fn prepared_lifecycle_enqueues_report_missing_and_closed_preflight_errors( .enqueue_prepared_revision_decision_with_explicit_signer( &buyer, closed_revision_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -2811,7 +2811,7 @@ async fn prepared_lifecycle_enqueues_report_missing_and_closed_preflight_errors( .enqueue_prepared_cancellation_with_explicit_signer( &buyer, closed_cancellation_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -2853,7 +2853,7 @@ async fn configured_prepared_lifecycle_enqueues_run_preflight_guards() { .enqueue_prepared_decision( &seller, decision_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -2879,7 +2879,7 @@ async fn configured_prepared_lifecycle_enqueues_run_preflight_guards() { .enqueue_prepared_revision_proposal( &seller, proposal_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -2906,7 +2906,7 @@ async fn configured_prepared_lifecycle_enqueues_run_preflight_guards() { .enqueue_prepared_revision_decision( &buyer, revision_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -2932,7 +2932,7 @@ async fn configured_prepared_lifecycle_enqueues_run_preflight_guards() { .enqueue_prepared_cancellation( &buyer, cancellation_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -2984,7 +2984,7 @@ async fn configured_prepared_lifecycle_enqueues_report_existing_event_lookup_err .enqueue_prepared_decision( &seller, decision_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None @@ -2998,7 +2998,7 @@ async fn configured_prepared_lifecycle_enqueues_report_existing_event_lookup_err .enqueue_prepared_revision_proposal( &seller, proposal_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -3033,7 +3033,7 @@ async fn configured_prepared_lifecycle_enqueues_report_existing_event_lookup_err .enqueue_prepared_revision_decision( &buyer, revision_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None @@ -3047,7 +3047,7 @@ async fn configured_prepared_lifecycle_enqueues_report_existing_event_lookup_err .enqueue_prepared_cancellation( &buyer, cancellation_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None @@ -3076,7 +3076,7 @@ async fn configured_enqueue_wrappers_report_prepare_errors_before_signing() { fixture_seller_actor(), fixture_event_ptr('a'), fixture_order_request("order-configured-prepare-submit"), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, )) @@ -3090,7 +3090,7 @@ async fn configured_enqueue_wrappers_report_prepare_errors_before_signing() { fixture_buyer_actor(), fixture_event_ptr('a'), fixture_order_decision("order-configured-prepare-decision"), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, )) @@ -3105,7 +3105,7 @@ async fn configured_enqueue_wrappers_report_prepare_errors_before_signing() { fixture_order_event_ptr(&root_event_id), fixture_order_event_ptr(&previous_event_id), proposal.clone(), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, )) @@ -3120,7 +3120,7 @@ async fn configured_enqueue_wrappers_report_prepare_errors_before_signing() { fixture_order_event_ptr(&root_event_id), fixture_order_event_ptr(&previous_event_id), fixture_revision_decision(&proposal, &previous_event_id), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, )) @@ -3135,7 +3135,7 @@ async fn configured_enqueue_wrappers_report_prepare_errors_before_signing() { fixture_order_event_ptr(&root_event_id), fixture_order_event_ptr(&previous_event_id), fixture_cancellation("order-configured-prepare-cancel"), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, )) @@ -3163,7 +3163,7 @@ async fn configured_prepared_methods_report_missing_configured_signer_after_pref .enqueue_prepared_submit( &buyer, submit_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None @@ -3186,7 +3186,7 @@ async fn configured_prepared_methods_report_missing_configured_signer_after_pref .enqueue_prepared_decision( &seller, decision_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None @@ -3215,7 +3215,7 @@ async fn configured_prepared_methods_report_missing_configured_signer_after_pref .enqueue_prepared_revision_proposal( &seller, proposal_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None @@ -3244,7 +3244,7 @@ async fn configured_prepared_methods_report_missing_configured_signer_after_pref .enqueue_prepared_revision_proposal_with_explicit_signer( &seller, revision_proposal_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -3269,7 +3269,7 @@ async fn configured_prepared_methods_report_missing_configured_signer_after_pref .enqueue_prepared_revision_decision( &buyer, revision_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None @@ -3293,7 +3293,7 @@ async fn configured_prepared_methods_report_missing_configured_signer_after_pref .enqueue_prepared_cancellation( &buyer, cancellation_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None @@ -3403,7 +3403,7 @@ async fn prepared_lifecycle_enqueues_report_closed_outbox_after_preflight() { .enqueue_prepared_revision_proposal_with_explicit_signer( &seller, proposal_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -3439,7 +3439,7 @@ async fn prepared_lifecycle_enqueues_report_closed_outbox_after_preflight() { .enqueue_prepared_revision_proposal_with_explicit_signer( &seller, proposal_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -3464,7 +3464,7 @@ async fn prepared_lifecycle_enqueues_report_closed_outbox_after_preflight() { .enqueue_prepared_revision_decision_with_explicit_signer( &buyer, revision_plan.clone(), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -3497,7 +3497,7 @@ async fn prepared_lifecycle_enqueues_report_closed_outbox_after_preflight() { .enqueue_prepared_cancellation_with_explicit_signer( &buyer, cancellation_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -3530,7 +3530,7 @@ async fn prepared_lifecycle_enqueues_skip_preflight_for_existing_events() { .enqueue_prepared_decision_with_explicit_signer( &seller, decision_plan.clone(), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -3543,7 +3543,7 @@ async fn prepared_lifecycle_enqueues_skip_preflight_for_existing_events() { .enqueue_prepared_decision_with_explicit_signer( &seller, decision_plan.clone(), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -3566,7 +3566,7 @@ async fn prepared_lifecycle_enqueues_skip_preflight_for_existing_events() { .enqueue_prepared_decision( &seller, decision_plan.clone(), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -3605,7 +3605,7 @@ async fn prepared_lifecycle_enqueues_skip_preflight_for_existing_events() { .enqueue_prepared_revision_proposal_with_explicit_signer( &seller, proposal_plan.clone(), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -3618,7 +3618,7 @@ async fn prepared_lifecycle_enqueues_skip_preflight_for_existing_events() { .enqueue_prepared_revision_proposal_with_explicit_signer( &seller, proposal_plan.clone(), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -3641,7 +3641,7 @@ async fn prepared_lifecycle_enqueues_skip_preflight_for_existing_events() { .enqueue_prepared_revision_proposal( &seller, proposal_plan.clone(), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -3680,7 +3680,7 @@ async fn prepared_lifecycle_enqueues_skip_preflight_for_existing_events() { .enqueue_prepared_revision_proposal_with_explicit_signer( &seller, proposal_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -3703,7 +3703,7 @@ async fn prepared_lifecycle_enqueues_skip_preflight_for_existing_events() { .enqueue_prepared_revision_decision_with_explicit_signer( &buyer, revision_plan.clone(), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -3716,7 +3716,7 @@ async fn prepared_lifecycle_enqueues_skip_preflight_for_existing_events() { .enqueue_prepared_revision_decision_with_explicit_signer( &buyer, revision_plan.clone(), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -3739,7 +3739,7 @@ async fn prepared_lifecycle_enqueues_skip_preflight_for_existing_events() { .enqueue_prepared_revision_decision( &buyer, revision_plan.clone(), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -3774,7 +3774,7 @@ async fn prepared_lifecycle_enqueues_skip_preflight_for_existing_events() { .enqueue_prepared_cancellation_with_explicit_signer( &buyer, cancellation_plan.clone(), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -3787,7 +3787,7 @@ async fn prepared_lifecycle_enqueues_skip_preflight_for_existing_events() { .enqueue_prepared_cancellation( &buyer, cancellation_plan, - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, None, @@ -3837,7 +3837,7 @@ async fn order_ingest_and_enqueue_wrappers_report_prepare_timestamp_errors() { buyer.clone(), fixture_event_ptr('a'), fixture_order_request("order-wrapper-submit-error"), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) @@ -3854,7 +3854,7 @@ async fn order_ingest_and_enqueue_wrappers_report_prepare_timestamp_errors() { seller.clone(), fixture_event_ptr('b'), fixture_order_decision("order-wrapper-decision-error"), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) @@ -3880,7 +3880,7 @@ async fn order_ingest_and_enqueue_wrappers_report_prepare_timestamp_errors() { ptr(root_event_id.as_str().to_owned()), ptr(previous_event_id.as_str().to_owned()), proposal_payload.clone(), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) @@ -3898,7 +3898,7 @@ async fn order_ingest_and_enqueue_wrappers_report_prepare_timestamp_errors() { ptr(root_event_id.as_str().to_owned()), ptr(previous_event_id.as_str().to_owned()), fixture_revision_decision(&proposal_payload, &previous_event_id), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) @@ -3916,7 +3916,7 @@ async fn order_ingest_and_enqueue_wrappers_report_prepare_timestamp_errors() { ptr(root_event_id.as_str().to_owned()), ptr(previous_event_id.as_str().to_owned()), fixture_cancellation("order-wrapper-cancellation-error"), - fixture_target_relays(), + fixture_target_policy(), PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) @@ -4048,7 +4048,7 @@ fn order_runtime_request_builders_and_serializers_cover_source_attached_paths() PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays(["wss://relay-a.radroots.test"], NostrRelayUrlPolicy::Public) + .try_with_nostr_targets(["wss://relay-a.radroots.test"], NostrRelayUrlPolicy::Public) .expect("submit relays") .with_idempotency_key(SdkIdempotencyKey::new("submit-unit-key").expect("key")) .with_created_at(created_at); @@ -4077,7 +4077,7 @@ fn order_runtime_request_builders_and_serializers_cover_source_attached_paths() PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays(["wss://relay-b.radroots.test"], NostrRelayUrlPolicy::Public) + .try_with_nostr_targets(["wss://relay-b.radroots.test"], NostrRelayUrlPolicy::Public) .expect("decision relays") .with_idempotency_key(SdkIdempotencyKey::new("decision-unit-key").expect("key")) .with_created_at(created_at); @@ -4101,7 +4101,7 @@ fn order_runtime_request_builders_and_serializers_cover_source_attached_paths() PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays(["wss://relay-c.radroots.test"], NostrRelayUrlPolicy::Public) + .try_with_nostr_targets(["wss://relay-c.radroots.test"], NostrRelayUrlPolicy::Public) .expect("proposal relays") .with_idempotency_key(SdkIdempotencyKey::new("proposal-unit-key").expect("key")) .with_created_at(created_at); @@ -4125,7 +4125,7 @@ fn order_runtime_request_builders_and_serializers_cover_source_attached_paths() PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays(["wss://relay-d.radroots.test"], NostrRelayUrlPolicy::Public) + .try_with_nostr_targets(["wss://relay-d.radroots.test"], NostrRelayUrlPolicy::Public) .expect("revision decision relays") .with_idempotency_key(SdkIdempotencyKey::new("revision-decision-unit-key").expect("key")) .with_created_at(created_at); @@ -4149,7 +4149,7 @@ fn order_runtime_request_builders_and_serializers_cover_source_attached_paths() PublishMode::EnqueueOnly, SatisfactionPolicy::NoWait, ) - .try_with_target_relays(["wss://relay-e.radroots.test"], NostrRelayUrlPolicy::Public) + .try_with_nostr_targets(["wss://relay-e.radroots.test"], NostrRelayUrlPolicy::Public) .expect("cancellation relays") .with_idempotency_key(SdkIdempotencyKey::new("cancellation-unit-key").expect("key")) .with_created_at(created_at); diff --git a/crates/sdk/tests/unit/runtime_tests.rs b/crates/sdk/tests/unit/runtime_tests.rs @@ -86,7 +86,7 @@ fn storage_status() -> StorageStatusReceipt { store: sqlite_status(), total_events: 0, projection_eligible_events: 0, - relay_observations: 0, + transport_observations: 0, last_event_seq: None, last_event_updated_at_ms: None, }, @@ -264,7 +264,7 @@ async fn private_store_validates_location_rows_and_round_trips_valid_records() { } #[test] -fn publish_transport_defaults_and_delegated_resolution_are_explicit() { +fn transport_profile_defaults_and_delegated_resolution_are_explicit() { let local = TransportProfile::default(); assert_eq!(local, TransportProfile::LocalOnly); assert!(!local.supports_delegated_target_resolution()); diff --git a/crates/sdk/tests/unit/sync_runtime_tests.rs b/crates/sdk/tests/unit/sync_runtime_tests.rs @@ -5,7 +5,7 @@ use super::{ push_proxy_claimed_outbox_event, }; use super::{ - PushOutboxEventReceipt, PushOutboxEventState, PushOutboxReceipt, PushOutboxRelayOutcomeKind, + PushOutboxEventReceipt, PushOutboxEventState, PushOutboxReceipt, PushOutboxTargetOutcomeKind, SdkRelayAuthPolicy, SyncEventStoreStatus, SyncOutboxStatus, push_event_final_state, push_event_receipt, push_outbox_claim_token, }; @@ -142,7 +142,7 @@ async fn claimed_proxy_event(d_tag: &str) -> (crate::RadrootsClient, RadrootsOut operation_kind: "sync.proxy.unit.v1", actor: &actor, frozen_draft: &draft, - target_relays: crate::TargetPolicy::try_nostr_relays( + target_policy: crate::TargetPolicy::try_nostr_relays( ["wss://relay.example.com"], crate::NostrRelayUrlPolicy::Public, ) @@ -191,8 +191,10 @@ fn push_event_receipt_parses_typed_event_id() { receipt.event_id, RadrootsEventId::parse(event_id).expect("event id") ); - assert_eq!(receipt.relays.len(), 1); - assert!(receipt.relays[0].attempted); + assert_eq!(receipt.targets.len(), 1); + assert_eq!(receipt.targets[0].transport_kind, "nostr"); + assert_eq!(receipt.targets[0].endpoint_uri, "wss://relay.example.com"); + assert!(receipt.targets[0].attempted); } #[test] @@ -231,24 +233,24 @@ fn push_event_final_state_follows_publish_quorum_and_retryability() { #[test] fn push_relay_outcome_mapping_covers_daemon_proxy_results() { assert_eq!( - PushOutboxRelayOutcomeKind::from(RadrootsRelayOutcomeKind::Muted), - PushOutboxRelayOutcomeKind::Muted + PushOutboxTargetOutcomeKind::from(RadrootsRelayOutcomeKind::Muted), + PushOutboxTargetOutcomeKind::Muted ); assert_eq!( - PushOutboxRelayOutcomeKind::from(RadrootsRelayOutcomeKind::Unsupported), - PushOutboxRelayOutcomeKind::Unsupported + PushOutboxTargetOutcomeKind::from(RadrootsRelayOutcomeKind::Unsupported), + PushOutboxTargetOutcomeKind::Unsupported ); assert_eq!( - PushOutboxRelayOutcomeKind::from(RadrootsRelayOutcomeKind::PaymentRequired), - PushOutboxRelayOutcomeKind::PaymentRequired + PushOutboxTargetOutcomeKind::from(RadrootsRelayOutcomeKind::PaymentRequired), + PushOutboxTargetOutcomeKind::PaymentRequired ); assert_eq!( - PushOutboxRelayOutcomeKind::from(RadrootsRelayOutcomeKind::RelayUrlRejected), - PushOutboxRelayOutcomeKind::RelayUrlRejected + PushOutboxTargetOutcomeKind::from(RadrootsRelayOutcomeKind::RelayUrlRejected), + PushOutboxTargetOutcomeKind::TargetUriRejected ); assert_eq!( - PushOutboxRelayOutcomeKind::from(RadrootsRelayOutcomeKind::SkippedAlreadyAccepted), - PushOutboxRelayOutcomeKind::SkippedAlreadyAccepted + PushOutboxTargetOutcomeKind::from(RadrootsRelayOutcomeKind::SkippedAlreadyAccepted), + PushOutboxTargetOutcomeKind::SkippedAlreadyAccepted ); } @@ -319,7 +321,7 @@ fn sync_status_summary_conversions_preserve_all_fields() { let event_status = SyncEventStoreStatus::from(event_summary); assert_eq!(event_status.total_events, 11); assert_eq!(event_status.projection_eligible_events, 7); - assert_eq!(event_status.relay_observations, 3); + assert_eq!(event_status.transport_observations, 3); assert_eq!(event_status.last_event_seq, Some(9)); assert_eq!( event_status.last_event_updated_at_ms, @@ -354,16 +356,14 @@ fn push_outbox_request_builders_validate_all_bounds() { let request = super::PushOutboxRequest::new() .with_limit(2) .with_outbox_event_id(9) - .republish_accepted_relays(true) - .with_accepted_quorum(2) - .with_relay_url_policy(crate::NostrRelayUrlPolicy::Localhost) + .republish_accepted_targets(true) + .with_nostr_relay_url_policy(crate::NostrRelayUrlPolicy::Localhost) .with_auth_policy(SdkRelayAuthPolicy::DetectOnly) .with_claim_ttl_ms(7) .with_next_attempt_delay_ms(11); assert_eq!(request.limit, 1); assert_eq!(request.outbox_event_id, Some(9)); - assert!(request.republish_accepted_relays); - assert_eq!(request.accepted_quorum, Some(2)); + assert!(request.republish_accepted_targets); request.validate().expect("valid request"); assert!(matches!( @@ -378,12 +378,6 @@ fn push_outbox_request_builders_validate_all_bounds() { )); assert!(matches!( super::PushOutboxRequest::new() - .with_accepted_quorum(0) - .validate(), - Err(RadrootsSdkError::InvalidRequest { message }) if message.contains("accepted quorum") - )); - assert!(matches!( - super::PushOutboxRequest::new() .with_outbox_event_id(0) .validate(), Err(RadrootsSdkError::InvalidRequest { message }) if message.contains("outbox event id") @@ -405,52 +399,52 @@ fn push_outbox_request_builders_validate_all_bounds() { #[test] fn relay_outcome_kind_mapping_covers_all_transport_outcomes() { assert_eq!( - PushOutboxRelayOutcomeKind::from(RadrootsRelayOutcomeKind::Accepted), - PushOutboxRelayOutcomeKind::Accepted + PushOutboxTargetOutcomeKind::from(RadrootsRelayOutcomeKind::Accepted), + PushOutboxTargetOutcomeKind::Accepted ); assert_eq!( - PushOutboxRelayOutcomeKind::from(RadrootsRelayOutcomeKind::DuplicateAccepted), - PushOutboxRelayOutcomeKind::DuplicateAccepted + PushOutboxTargetOutcomeKind::from(RadrootsRelayOutcomeKind::DuplicateAccepted), + PushOutboxTargetOutcomeKind::DuplicateAccepted ); assert_eq!( - PushOutboxRelayOutcomeKind::from(RadrootsRelayOutcomeKind::Blocked), - PushOutboxRelayOutcomeKind::Blocked + PushOutboxTargetOutcomeKind::from(RadrootsRelayOutcomeKind::Blocked), + PushOutboxTargetOutcomeKind::Blocked ); assert_eq!( - PushOutboxRelayOutcomeKind::from(RadrootsRelayOutcomeKind::RateLimited), - PushOutboxRelayOutcomeKind::RateLimited + PushOutboxTargetOutcomeKind::from(RadrootsRelayOutcomeKind::RateLimited), + PushOutboxTargetOutcomeKind::RateLimited ); assert_eq!( - PushOutboxRelayOutcomeKind::from(RadrootsRelayOutcomeKind::Invalid), - PushOutboxRelayOutcomeKind::Invalid + PushOutboxTargetOutcomeKind::from(RadrootsRelayOutcomeKind::Invalid), + PushOutboxTargetOutcomeKind::Invalid ); assert_eq!( - PushOutboxRelayOutcomeKind::from(RadrootsRelayOutcomeKind::PowRequired), - PushOutboxRelayOutcomeKind::PowRequired + PushOutboxTargetOutcomeKind::from(RadrootsRelayOutcomeKind::PowRequired), + PushOutboxTargetOutcomeKind::PowRequired ); assert_eq!( - PushOutboxRelayOutcomeKind::from(RadrootsRelayOutcomeKind::Restricted), - PushOutboxRelayOutcomeKind::Restricted + PushOutboxTargetOutcomeKind::from(RadrootsRelayOutcomeKind::Restricted), + PushOutboxTargetOutcomeKind::Restricted ); assert_eq!( - PushOutboxRelayOutcomeKind::from(RadrootsRelayOutcomeKind::AuthRequired), - PushOutboxRelayOutcomeKind::AuthRequired + PushOutboxTargetOutcomeKind::from(RadrootsRelayOutcomeKind::AuthRequired), + PushOutboxTargetOutcomeKind::AuthRequired ); assert_eq!( - PushOutboxRelayOutcomeKind::from(RadrootsRelayOutcomeKind::Error), - PushOutboxRelayOutcomeKind::Error + PushOutboxTargetOutcomeKind::from(RadrootsRelayOutcomeKind::Error), + PushOutboxTargetOutcomeKind::Error ); assert_eq!( - PushOutboxRelayOutcomeKind::from(RadrootsRelayOutcomeKind::Timeout), - PushOutboxRelayOutcomeKind::Timeout + PushOutboxTargetOutcomeKind::from(RadrootsRelayOutcomeKind::Timeout), + PushOutboxTargetOutcomeKind::Timeout ); assert_eq!( - PushOutboxRelayOutcomeKind::from(RadrootsRelayOutcomeKind::ConnectionFailed), - PushOutboxRelayOutcomeKind::ConnectionFailed + PushOutboxTargetOutcomeKind::from(RadrootsRelayOutcomeKind::ConnectionFailed), + PushOutboxTargetOutcomeKind::ConnectionFailed ); assert_eq!( - PushOutboxRelayOutcomeKind::from(RadrootsRelayOutcomeKind::Unknown), - PushOutboxRelayOutcomeKind::Unknown + PushOutboxTargetOutcomeKind::from(RadrootsRelayOutcomeKind::Unknown), + PushOutboxTargetOutcomeKind::Unknown ); } @@ -619,7 +613,7 @@ async fn proxy_push_reports_missing_signed_claim_before_daemon_publish() { assert!(matches!( push_proxy_claimed_outbox_event(&sync, &adapter, &claimed, 60_000, 1_700_000_000_000) .await, - Err(RadrootsSdkError::RelayTransport { message }) + Err(RadrootsSdkError::Transport { message }) if message.contains("Outbox claim 41 does not contain a signed event") )); } @@ -755,6 +749,6 @@ fn push_receipt(final_state: PushOutboxEventState) -> PushOutboxEventReceipt { terminal_count: 0, quorum: 0, quorum_met: false, - relays: Vec::new(), + targets: Vec::new(), } } diff --git a/crates/sdk/tests/unit/transport_tests.rs b/crates/sdk/tests/unit/transport_tests.rs @@ -82,12 +82,12 @@ fn use_configured_policy_serializes_as_kind_only() { ); assert_struct_serialize_error_paths(&policy, 1); - let publish_transport_policy = TargetPolicy::use_transport_profile(); + let transport_profile_policy = TargetPolicy::use_transport_profile(); assert_eq!( - serde_json::to_value(&publish_transport_policy).expect("json"), + serde_json::to_value(&transport_profile_policy).expect("json"), serde_json::json!({ "kind": "use_transport_profile" }) ); - assert_struct_serialize_error_paths(&publish_transport_policy, 1); + assert_struct_serialize_error_paths(&transport_profile_policy, 1); } #[test] @@ -174,7 +174,7 @@ fn target_set_accessors_and_configured_relays_cover_empty_and_dedupe_paths() { fn normalized_relays_reject_empty_and_over_limit_sets() { assert!(matches!( TargetSet::from_normalized_nostr_relays(Vec::new()), - Err(RadrootsSdkError::EmptyTargetRelays { .. }) + Err(RadrootsSdkError::EmptyTransportTargets { .. }) )); let too_many = (0..=SDK_TRANSPORT_TARGET_MAX_COUNT) @@ -182,7 +182,7 @@ fn normalized_relays_reject_empty_and_over_limit_sets() { .collect::<Vec<_>>(); assert!(matches!( TargetSet::from_normalized_nostr_relays(too_many), - Err(RadrootsSdkError::RelayTargetLimitExceeded { actual, .. }) + Err(RadrootsSdkError::TransportTargetLimitExceeded { actual, .. }) if actual == SDK_TRANSPORT_TARGET_MAX_COUNT + 1 )); } diff --git a/crates/sdk/tests/unit/workflow_runtime_tests.rs b/crates/sdk/tests/unit/workflow_runtime_tests.rs @@ -170,7 +170,7 @@ async fn enqueue_signed_workflow_stores_signed_event_and_reports_idempotency_con operation_kind: "workflow.test.v1", actor: &actor, frozen_draft: &first_draft, - target_relays: TargetPolicy::UseConfiguredProfile, + target_policy: TargetPolicy::UseConfiguredProfile, satisfaction_policy: SatisfactionPolicy::AllTargets, idempotency_key: Some(idempotency_key.clone()), }, @@ -211,7 +211,7 @@ async fn enqueue_signed_workflow_stores_signed_event_and_reports_idempotency_con operation_kind: "workflow.test.v1", actor: &actor, frozen_draft: &second_draft, - target_relays: TargetPolicy::UseConfiguredProfile, + target_policy: TargetPolicy::UseConfiguredProfile, satisfaction_policy: SatisfactionPolicy::AllTargets, idempotency_key: Some(idempotency_key), }, @@ -274,7 +274,7 @@ async fn enqueue_configured_signed_workflow_uses_sdk_signer_provider() { operation_kind: "workflow.test.v1", actor: &actor, frozen_draft: &draft, - target_relays: TargetPolicy::UseConfiguredProfile, + target_policy: TargetPolicy::UseConfiguredProfile, satisfaction_policy: SatisfactionPolicy::AllTargets, idempotency_key: None, }, @@ -309,7 +309,7 @@ async fn enqueue_signed_workflow_reports_outbox_preflight_failure_without_mutati operation_kind: "workflow.test.v1", actor: &actor, frozen_draft: &draft, - target_relays: TargetPolicy::UseConfiguredProfile, + target_policy: TargetPolicy::UseConfiguredProfile, satisfaction_policy: SatisfactionPolicy::AllTargets, idempotency_key: None, }; @@ -345,7 +345,7 @@ async fn enqueue_signed_workflow_reports_store_failures() { operation_kind: "workflow.test.v1", actor: &actor, frozen_draft: &draft, - target_relays: TargetPolicy::UseConfiguredProfile, + target_policy: TargetPolicy::UseConfiguredProfile, satisfaction_policy: SatisfactionPolicy::AllTargets, idempotency_key: None, }; @@ -375,7 +375,7 @@ async fn enqueue_signed_workflow_reports_clock_failures() { operation_kind: "workflow.test.v1", actor: &actor, frozen_draft: &draft, - target_relays: TargetPolicy::UseConfiguredProfile, + target_policy: TargetPolicy::UseConfiguredProfile, satisfaction_policy: SatisfactionPolicy::AllTargets, idempotency_key: None, }; @@ -386,7 +386,7 @@ async fn enqueue_signed_workflow_reports_clock_failures() { } #[tokio::test] -async fn enqueue_signed_workflow_rejects_publish_transport_targets_without_proxy_transport() { +async fn enqueue_signed_workflow_rejects_transport_profile_targets_without_proxy_transport() { let sdk = crate::RadrootsClient::builder().build().await.expect("sdk"); let actor = RadrootsActorContext::test(FARMER_PUBLIC_KEY_HEX, [RadrootsActorRole::Farmer]) .expect("actor"); @@ -395,14 +395,14 @@ async fn enqueue_signed_workflow_rejects_publish_transport_targets_without_proxy operation_kind: "workflow.test.v1", actor: &actor, frozen_draft: &draft, - target_relays: TargetPolicy::UseTransportProfile, + target_policy: TargetPolicy::UseTransportProfile, satisfaction_policy: SatisfactionPolicy::AllTargets, idempotency_key: None, }; assert!(matches!( enqueue_signed_workflow(&sdk, request, &WorkflowSigner::new()).await, - Err(RadrootsSdkError::EmptyTargetRelays { operation }) + Err(RadrootsSdkError::EmptyTransportTargets { operation }) if operation == "publish transport profile" )); }