sdk

Radroots SDK and bindings
git clone https://radroots.dev/git/sdk.git
Log | Files | Refs | README

commit a5518058061e5d4d7d04467df1fae4211f817dfe
parent 873a2daee1a1895ffa8e7c60bb3d9fd4b0dfb25a
Author: triesap <tyson@radroots.org>
Date:   Mon, 15 Jun 2026 14:29:08 -0700

sdk: demote protocol facade

Move low-level facade, config, wire, direct relay, and radrootsd surfaces under sdk::protocol while keeping the SDK v1 product runtime at the crate root. Add a local runtime example and update tests/docs for the new public surface.

Diffstat:
Mcrates/sdk/README | 24++++++++++++++----------
Acrates/sdk/examples/runtime_local.rs | 158+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mcrates/sdk/src/lib.rs | 68+++++++++++++++++---------------------------------------------------
Acrates/sdk/src/protocol.rs | 90+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mcrates/sdk/tests/client.rs | 2+-
Mcrates/sdk/tests/config.rs | 2+-
Mcrates/sdk/tests/facade.rs | 4+++-
Mcrates/sdk/tests/orders_runtime.rs | 13+++++++------
Mcrates/sdk/tests/radrootsd.rs | 12++++++------
Mcrates/sdk/tests/relay_direct.rs | 12++++++------
Mcrates/sdk/tests/replica_ingest.rs | 2+-
11 files changed, 304 insertions(+), 83 deletions(-)

diff --git a/crates/sdk/README b/crates/sdk/README @@ -1,18 +1,22 @@ # radroots_sdk -Curated Rad Roots Rust SDK for the public marketplace event contract. +Curated Rad Roots Rust SDK for local-first Rad Roots product workflows. -This crate provides the recommended Rust entrypoint for building, parsing, and -validating Rad Roots profile, farm, listing, and trade events. It is a thin -facade over the underlying `rr-rs` substrate crates and does not duplicate the -core event or trade implementations. +The SDK v1 product runtime is centered on `RadrootsSdk::builder()`, +`sdk.listings()`, `sdk.sync()`, and `sdk.orders()`. Product callers use the +runtime clients to prepare listing publishes, enqueue signed local mutations, +push the signed outbox through an explicit relay transport adapter, and read +local order status projections. -The deterministic event contract lives at the crate root: +Low-level event-contract and transport helpers are intentionally scoped under +`protocol`: -- `profile` -- `farm` -- `listing` -- `trade` +- `protocol::profile` +- `protocol::farm` +- `protocol::listing` +- `protocol::order` +- `protocol::client` +- `protocol::config` Optional advanced substrate is explicitly feature-scoped: diff --git a/crates/sdk/examples/runtime_local.rs b/crates/sdk/examples/runtime_local.rs @@ -0,0 +1,158 @@ +use radroots_authority::{ + RadrootsActorContext, RadrootsEventSigner, RadrootsSignerError, RadrootsSignerIdentity, +}; +use radroots_core::{ + RadrootsCoreCurrency, RadrootsCoreDecimal, RadrootsCoreMoney, RadrootsCoreQuantity, + RadrootsCoreQuantityPrice, RadrootsCoreUnit, +}; +use radroots_events::contract::RadrootsActorRole; +use radroots_events::draft::{ + RadrootsFrozenEventDraft, RadrootsSignedNostrEvent, RadrootsSignedNostrEventParts, +}; +use radroots_events::ids::{RadrootsDTag, RadrootsInventoryBinId}; +use radroots_relay_transport::RadrootsMockRelayPublishAdapter; +use radroots_sdk::protocol::farm::RadrootsFarmRef; +use radroots_sdk::protocol::listing::{ + RadrootsListing, RadrootsListingBin, RadrootsListingProduct, +}; +use radroots_sdk::{ + ListingPublishRequest, OrderStatusRequest, PushOutboxRequest, RadrootsSdk, RadrootsSdkTimestamp, +}; + +const SELLER: &str = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; +const RELAY: &str = "wss://relay.example.com"; + +#[derive(Clone)] +struct FixtureSigner { + identity: RadrootsSignerIdentity, +} + +impl FixtureSigner { + fn new(pubkey: &str) -> Self { + Self { + identity: RadrootsSignerIdentity::new(pubkey).expect("identity"), + } + } +} + +impl RadrootsEventSigner for FixtureSigner { + fn pubkey(&self) -> &radroots_events::ids::RadrootsPublicKey { + self.identity.pubkey() + } + + fn sign_frozen_draft( + &self, + draft: &RadrootsFrozenEventDraft, + ) -> Result<RadrootsSignedNostrEvent, RadrootsSignerError> { + let sig = "f".repeat(128); + let raw_json = serde_json::json!({ + "id": draft.expected_event_id, + "pubkey": self.pubkey().as_str(), + "created_at": draft.created_at, + "kind": draft.kind, + "tags": draft.tags, + "content": draft.content, + "sig": sig, + }) + .to_string(); + RadrootsSignedNostrEvent::new(RadrootsSignedNostrEventParts { + id: draft.expected_event_id.clone(), + pubkey: self.pubkey().as_str().to_owned(), + created_at: draft.created_at, + kind: draft.kind, + tags: draft.tags.clone(), + content: draft.content.clone(), + sig, + raw_json, + }) + .map_err(|error| RadrootsSignerError::SigningFailed { + message: error.to_string(), + }) + } +} + +#[tokio::main] +async fn main() -> Result<(), Box<dyn std::error::Error>> { + let sdk = RadrootsSdk::builder() + .fixed_clock(RadrootsSdkTimestamp::from_unix_seconds(1_700_000_000)) + .relay_url(RELAY) + .build() + .await?; + let actor = RadrootsActorContext::test(SELLER, [RadrootsActorRole::Seller])?; + let request = ListingPublishRequest::new(sample_listing()).with_idempotency_key("example-1"); + + let prepared = sdk.listings().prepare_publish(&actor, request.clone())?; + let enqueue = sdk + .listings() + .enqueue_publish(&actor, &FixtureSigner::new(SELLER), request) + .await?; + let push = sdk + .sync() + .push_outbox( + &RadrootsMockRelayPublishAdapter::new(), + PushOutboxRequest::new().with_limit(1), + ) + .await?; + let order_status = sdk + .orders() + .status(OrderStatusRequest::new("example-order-1")) + .await?; + + assert_eq!(prepared.listing_address, enqueue.listing_address); + assert_eq!(push.attempted_events, 1); + assert!(!order_status.found); + Ok(()) +} + +fn sample_listing() -> RadrootsListing { + RadrootsListing { + d_tag: RadrootsDTag::parse("AAAAAAAAAAAAAAAAAAAAAQ").expect("d tag"), + published_at: None, + farm: RadrootsFarmRef { + pubkey: SELLER.to_owned(), + d_tag: "AAAAAAAAAAAAAAAAAAAAAA".to_owned(), + }, + product: RadrootsListingProduct { + key: "coffee".to_owned(), + title: "Coffee".to_owned(), + category: "coffee".to_owned(), + summary: Some("Single origin coffee".to_owned()), + process: None, + lot: None, + location: None, + profile: None, + year: None, + }, + primary_bin_id: RadrootsInventoryBinId::parse("bin-1").expect("bin id"), + bins: vec![RadrootsListingBin { + bin_id: RadrootsInventoryBinId::parse("bin-1").expect("bin id"), + quantity: RadrootsCoreQuantity::new( + RadrootsCoreDecimal::from(1000u32), + RadrootsCoreUnit::MassG, + ), + price_per_canonical_unit: RadrootsCoreQuantityPrice { + amount: RadrootsCoreMoney::new( + RadrootsCoreDecimal::from(20u32), + RadrootsCoreCurrency::USD, + ), + quantity: RadrootsCoreQuantity::new( + RadrootsCoreDecimal::from(1u32), + RadrootsCoreUnit::MassG, + ), + }, + display_amount: None, + display_unit: None, + display_label: None, + display_price: None, + display_price_unit: None, + }], + resource_area: None, + plot: None, + discounts: None, + inventory_available: None, + availability: None, + delivery_method: None, + location: None, + images: None, + } +} diff --git a/crates/sdk/src/lib.rs b/crates/sdk/src/lib.rs @@ -9,29 +9,37 @@ use alloc::{string::String, vec::Vec}; #[cfg(feature = "std")] use std::{string::String, vec::Vec}; +pub(crate) use radroots_events::{ + RadrootsNostrEvent, RadrootsNostrEventPtr, + profile::{RadrootsProfile, RadrootsProfileType}, +}; +pub(crate) use radroots_events_codec::wire::WireEventParts; +pub(crate) use radroots_trade::listing::validation::RadrootsTradeListing as TradeListingValidateResult; + #[cfg(any( feature = "radrootsd-client", feature = "signing", feature = "relay-client", feature = "signer-adapters" ))] -pub mod adapters; -pub mod client; -pub mod config; +mod adapters; +mod client; +mod config; #[cfg(feature = "runtime")] mod error; -pub mod farm; +mod farm; #[cfg(feature = "identity-models")] -pub mod identity; -pub mod listing; +mod identity; +mod listing; #[cfg(feature = "runtime")] mod listings_runtime; -pub mod order; +mod order; #[cfg(feature = "runtime")] mod orders_runtime; #[cfg(feature = "runtime")] mod product_clients; -pub mod profile; +mod profile; +pub mod protocol; #[cfg(feature = "runtime")] mod receipt; #[cfg(feature = "runtime")] @@ -39,36 +47,6 @@ mod runtime; #[cfg(feature = "runtime")] mod sync_runtime; -#[cfg(feature = "radrootsd-client")] -pub use crate::adapters::radrootsd::{ - SdkRadrootsdBridgeDeliveryPolicy, SdkRadrootsdBridgeJobStatus, - SdkRadrootsdBridgeRelayPublishResult, SdkRadrootsdSignerAuthority, - SdkRadrootsdSignerSessionConnectRequest, SdkRadrootsdSignerSessionMode, - SdkRadrootsdSignerSessionRole, -}; -pub use crate::client::{ - FarmClient, ListingClient, ProfileClient, RadrootsSdkClient, SdkPublishError, - SdkPublishReceipt, SdkRadrootsdPublishReceipt, SdkRelayFailure, SdkRelayPublishReceipt, - SdkResolvedTransportTarget, SdkTransportReceipt, TradeClient, -}; -#[cfg(feature = "radrootsd-client")] -pub use crate::client::{ - RadrootsdBridgeClient, RadrootsdClient, RadrootsdSignerSessionClient, SdkRadrootsdBridgeError, - SdkRadrootsdBridgeJobRef, SdkRadrootsdBridgeJobView, SdkRadrootsdBridgeStatus, - SdkRadrootsdFarmPublishOptions, SdkRadrootsdListingPublishOptions, - SdkRadrootsdOrderRequestPublishOptions, SdkRadrootsdProfilePublishOptions, - SdkRadrootsdSessionError, SdkRadrootsdSignerSessionAuthorizeResult, - SdkRadrootsdSignerSessionCloseResult, SdkRadrootsdSignerSessionHandle, - SdkRadrootsdSignerSessionPublicKeyResult, SdkRadrootsdSignerSessionRef, - SdkRadrootsdSignerSessionRequireAuthResult, SdkRadrootsdSignerSessionView, -}; -pub use crate::config::{ - NetworkConfig, RADROOTS_SDK_LOCAL_RADROOTSD_ENDPOINT, RADROOTS_SDK_LOCAL_RELAY_URL, - RADROOTS_SDK_PRODUCTION_RADROOTSD_ENDPOINT, RADROOTS_SDK_PRODUCTION_RELAY_URL, - RADROOTS_SDK_STAGING_RADROOTSD_ENDPOINT, RADROOTS_SDK_STAGING_RELAY_URL, RadrootsSdkConfig, - RadrootsdAuth, RadrootsdConfig, RelayConfig, SdkConfigError, SdkEnvironment, SdkTransportMode, - SignerConfig, -}; #[cfg(feature = "runtime")] pub use crate::error::{ RadrootsSdkError, RadrootsSdkPartialLocalMutationError, RadrootsSdkRecoveryAction, @@ -97,17 +75,5 @@ pub use crate::sync_runtime::{ PUSH_OUTBOX_DEFAULT_LIMIT, PUSH_OUTBOX_MAX_LIMIT, PushOutboxEventReceipt, PushOutboxEventState, PushOutboxReceipt, PushOutboxRelayOutcomeKind, PushOutboxRelayReceipt, PushOutboxRequest, }; -pub use radroots_events::{ - RadrootsNostrEvent, RadrootsNostrEventPtr, RadrootsNostrEventRef, - draft::{RadrootsFrozenEventDraft, RadrootsSignedNostrEvent}, - farm::RadrootsFarm, - ids::{RadrootsIdParseError, RadrootsListingAddress}, - listing::RadrootsListing, - profile::{RadrootsProfile, RadrootsProfileType}, -}; -#[cfg(feature = "serde_json")] -pub use radroots_events_codec::order::RadrootsOrderEnvelopeParseError; -pub use radroots_events_codec::wire::WireEventParts; -pub use radroots_trade::listing::validation::RadrootsTradeListing as TradeListingValidateResult; -pub type NostrTags = Vec<Vec<String>>; +pub(crate) type NostrTags = Vec<Vec<String>>; diff --git a/crates/sdk/src/protocol.rs b/crates/sdk/src/protocol.rs @@ -0,0 +1,90 @@ +#![forbid(unsafe_code)] + +#[cfg(not(feature = "std"))] +use alloc::{string::String, vec::Vec}; +#[cfg(feature = "std")] +use std::{string::String, vec::Vec}; + +#[cfg(any( + feature = "radrootsd-client", + feature = "signing", + feature = "relay-client", + feature = "signer-adapters" +))] +pub mod adapters { + pub use crate::adapters::*; +} + +pub mod client { + pub use crate::client::*; +} + +pub mod config { + pub use crate::config::*; +} + +pub mod farm { + pub use crate::farm::*; +} + +#[cfg(feature = "identity-models")] +pub mod identity { + pub use crate::identity::*; +} + +pub mod listing { + pub use crate::listing::*; +} + +pub mod order { + pub use crate::order::*; +} + +pub mod profile { + pub use crate::profile::*; +} + +#[cfg(feature = "radrootsd-client")] +pub use crate::adapters::radrootsd::{ + SdkRadrootsdBridgeDeliveryPolicy, SdkRadrootsdBridgeJobStatus, + SdkRadrootsdBridgeRelayPublishResult, SdkRadrootsdSignerAuthority, + SdkRadrootsdSignerSessionConnectRequest, SdkRadrootsdSignerSessionMode, + SdkRadrootsdSignerSessionRole, +}; +pub use crate::client::{ + FarmClient, ListingClient, ProfileClient, RadrootsSdkClient, SdkPublishError, + SdkPublishReceipt, SdkRadrootsdPublishReceipt, SdkRelayFailure, SdkRelayPublishReceipt, + SdkResolvedTransportTarget, SdkTransportReceipt, TradeClient, +}; +#[cfg(feature = "radrootsd-client")] +pub use crate::client::{ + RadrootsdBridgeClient, RadrootsdClient, RadrootsdSignerSessionClient, SdkRadrootsdBridgeError, + SdkRadrootsdBridgeJobRef, SdkRadrootsdBridgeJobView, SdkRadrootsdBridgeStatus, + SdkRadrootsdFarmPublishOptions, SdkRadrootsdListingPublishOptions, + SdkRadrootsdOrderRequestPublishOptions, SdkRadrootsdProfilePublishOptions, + SdkRadrootsdSessionError, SdkRadrootsdSignerSessionAuthorizeResult, + SdkRadrootsdSignerSessionCloseResult, SdkRadrootsdSignerSessionHandle, + SdkRadrootsdSignerSessionPublicKeyResult, SdkRadrootsdSignerSessionRef, + SdkRadrootsdSignerSessionRequireAuthResult, SdkRadrootsdSignerSessionView, +}; +pub use crate::config::{ + NetworkConfig, RADROOTS_SDK_LOCAL_RADROOTSD_ENDPOINT, RADROOTS_SDK_LOCAL_RELAY_URL, + RADROOTS_SDK_PRODUCTION_RADROOTSD_ENDPOINT, RADROOTS_SDK_PRODUCTION_RELAY_URL, + RADROOTS_SDK_STAGING_RADROOTSD_ENDPOINT, RADROOTS_SDK_STAGING_RELAY_URL, RadrootsSdkConfig, + RadrootsdAuth, RadrootsdConfig, RelayConfig, SdkConfigError, SdkEnvironment, SdkTransportMode, + SignerConfig, +}; +pub use radroots_events::{ + RadrootsNostrEvent, RadrootsNostrEventPtr, RadrootsNostrEventRef, + draft::{RadrootsFrozenEventDraft, RadrootsSignedNostrEvent}, + farm::RadrootsFarm, + ids::{RadrootsIdParseError, RadrootsListingAddress}, + listing::RadrootsListing, + profile::{RadrootsProfile, RadrootsProfileType}, +}; +#[cfg(feature = "serde_json")] +pub use radroots_events_codec::order::RadrootsOrderEnvelopeParseError; +pub use radroots_events_codec::wire::WireEventParts; +pub use radroots_trade::listing::validation::RadrootsTradeListing as TradeListingValidateResult; + +pub type NostrTags = Vec<Vec<String>>; diff --git a/crates/sdk/tests/client.rs b/crates/sdk/tests/client.rs @@ -22,7 +22,7 @@ use radroots_events::order::{ RadrootsOrderRevisionDecision, RadrootsOrderRevisionOutcome, RadrootsOrderRevisionProposal, }; use radroots_events::profile::{RadrootsProfile, RadrootsProfileType}; -use radroots_sdk::{ +use radroots_sdk::protocol::{ RADROOTS_SDK_PRODUCTION_RELAY_URL, RadrootsNostrEvent, RadrootsNostrEventPtr, RadrootsSdkClient, RadrootsSdkConfig, RelayConfig, SdkConfigError, SdkEnvironment, SdkPublishError, SdkRadrootsdPublishReceipt, SdkRelayFailure, SdkResolvedTransportTarget, diff --git a/crates/sdk/tests/config.rs b/crates/sdk/tests/config.rs @@ -1,4 +1,4 @@ -use radroots_sdk::{ +use radroots_sdk::protocol::{ NetworkConfig, RADROOTS_SDK_LOCAL_RADROOTSD_ENDPOINT, RADROOTS_SDK_LOCAL_RELAY_URL, RADROOTS_SDK_PRODUCTION_RADROOTSD_ENDPOINT, RADROOTS_SDK_PRODUCTION_RELAY_URL, RADROOTS_SDK_STAGING_RADROOTSD_ENDPOINT, RADROOTS_SDK_STAGING_RELAY_URL, RadrootsSdkConfig, diff --git a/crates/sdk/tests/facade.rs b/crates/sdk/tests/facade.rs @@ -15,7 +15,9 @@ use radroots_events::order::{ RadrootsOrderPricingBasis, RadrootsOrderRequest, }; use radroots_events::profile::{RadrootsProfile, RadrootsProfileType}; -use radroots_sdk::{RadrootsNostrEvent, RadrootsNostrEventPtr, farm, listing, order, profile}; +use radroots_sdk::protocol::{ + RadrootsNostrEvent, RadrootsNostrEventPtr, farm, listing, order, profile, +}; fn sample_profile() -> RadrootsProfile { RadrootsProfile { diff --git a/crates/sdk/tests/orders_runtime.rs b/crates/sdk/tests/orders_runtime.rs @@ -13,8 +13,9 @@ use radroots_nostr::prelude::{ RadrootsNostrKeys, RadrootsNostrSecretKey, RadrootsNostrTimestamp, radroots_event_from_nostr, radroots_nostr_build_event, }; -use radroots_sdk::WireEventParts; -use radroots_sdk::order::{ +use radroots_sdk::protocol::RadrootsNostrEventPtr; +use radroots_sdk::protocol::WireEventParts; +use radroots_sdk::protocol::order::{ RadrootsListingAddress, RadrootsOrderDecision, RadrootsOrderDecisionOutcome, RadrootsOrderEconomicItem, RadrootsOrderEconomicLine, RadrootsOrderEconomics, RadrootsOrderInventoryCommitment, RadrootsOrderItem, RadrootsOrderPricingBasis, @@ -22,8 +23,8 @@ use radroots_sdk::order::{ }; use radroots_sdk::{ ORDER_STATUS_DEFAULT_LIMIT, ORDER_STATUS_MAX_LIMIT, OrderPaymentStateKind, - OrderSettlementStateKind, OrderStatusKind, OrderStatusRequest, RadrootsNostrEventPtr, - RadrootsSdk, RadrootsSdkError, RadrootsSdkTimestamp, + OrderSettlementStateKind, OrderStatusKind, OrderStatusRequest, RadrootsSdk, RadrootsSdkError, + RadrootsSdkTimestamp, }; const BUYER_SECRET_KEY_HEX: &str = @@ -163,7 +164,7 @@ fn signed_event( } fn signed_order_request_event(raw_order_id: &str, created_at: u32) -> RadrootsNostrEvent { - let draft = radroots_sdk::order::build_order_request_draft( + let draft = radroots_sdk::protocol::order::build_order_request_draft( &listing_event_ptr(), &order_request(raw_order_id), ) @@ -176,7 +177,7 @@ fn signed_order_decision_event( root_event_id: &RadrootsEventId, created_at: u32, ) -> RadrootsNostrEvent { - let draft = radroots_sdk::order::build_order_decision_draft( + let draft = radroots_sdk::protocol::order::build_order_decision_draft( root_event_id, root_event_id, &order_decision(raw_order_id), diff --git a/crates/sdk/tests/radrootsd.rs b/crates/sdk/tests/radrootsd.rs @@ -9,21 +9,21 @@ use radroots_events::ids::RadrootsPublicKey; use radroots_events::kinds::{ KIND_FARM, KIND_LISTING, KIND_LISTING_DRAFT, KIND_ORDER_REQUEST, KIND_PROFILE, }; -use radroots_sdk::adapters::radrootsd::{ +use radroots_sdk::protocol::adapters::radrootsd::{ SdkRadrootsdBridgeJob, SdkRadrootsdBridgePublishResponse, SdkRadrootsdListingPublishRequest, SdkRadrootsdSignerAuthority, SdkRadrootsdSignerSessionConnectRequest, SdkRadrootsdSignerSessionMode, }; -use radroots_sdk::listing::{ +use radroots_sdk::protocol::listing::{ RadrootsListing, RadrootsListingAvailability, RadrootsListingBin, RadrootsListingDeliveryMethod, RadrootsListingLocation, RadrootsListingParseError, RadrootsListingProduct, RadrootsListingStatus, }; -use radroots_sdk::order::{ +use radroots_sdk::protocol::order::{ RadrootsOrderEconomicItem, RadrootsOrderEconomicLine, RadrootsOrderEconomics, RadrootsOrderItem, RadrootsOrderPricingBasis, RadrootsOrderRequest, }; -use radroots_sdk::{ +use radroots_sdk::protocol::{ RadrootsNostrEvent, RadrootsNostrEventPtr, RadrootsProfile, RadrootsProfileType, RadrootsSdkClient, RadrootsSdkConfig, RadrootsdAuth, RadrootsdConfig, SdkConfigError, SdkEnvironment, SdkPublishError, SdkRadrootsdBridgeDeliveryPolicy, SdkRadrootsdBridgeError, @@ -479,7 +479,7 @@ fn listing_event_ptr_with_relays(relays: Option<&str>) -> RadrootsNostrEventPtr fn sdk_event( author: &str, created_at: u32, - draft: radroots_sdk::listing::RadrootsListingDraft, + draft: radroots_sdk::protocol::listing::RadrootsListingDraft, ) -> RadrootsNostrEvent { let parts = draft.into_wire_parts(); RadrootsNostrEvent { @@ -1939,7 +1939,7 @@ async fn radrootsd_bridge_status_rejects_relay_transport_mode() -> TestResult<() #[test] fn radrootsd_listing_request_from_event_rejects_listing_draft_kind() -> TestResult<()> { - let draft = radroots_sdk::listing::build_draft(&sample_listing())?; + let draft = radroots_sdk::protocol::listing::build_draft(&sample_listing())?; let mut event = sdk_event("seller", 1_720_000_000, draft); event.kind = KIND_LISTING_DRAFT; diff --git a/crates/sdk/tests/relay_direct.rs b/crates/sdk/tests/relay_direct.rs @@ -11,22 +11,22 @@ use radroots_core::{ RadrootsCoreQuantityPrice, RadrootsCoreUnit, }; use radroots_events::ids::{RadrootsEventId, RadrootsPublicKey}; -use radroots_sdk::farm::{RadrootsFarm, RadrootsFarmLocation, RadrootsFarmRef}; -use radroots_sdk::identity::RadrootsIdentity; -use radroots_sdk::listing::{ +use radroots_sdk::protocol::farm::{RadrootsFarm, RadrootsFarmLocation, RadrootsFarmRef}; +use radroots_sdk::protocol::identity::RadrootsIdentity; +use radroots_sdk::protocol::listing::{ RadrootsListing, RadrootsListingAvailability, RadrootsListingBin, RadrootsListingDeliveryMethod, RadrootsListingLocation, RadrootsListingProduct, RadrootsListingStatus, }; -use radroots_sdk::order::{ +use radroots_sdk::protocol::order::{ RadrootsOrderCancellation, RadrootsOrderDecision, RadrootsOrderDecisionOutcome, RadrootsOrderEconomicItem, RadrootsOrderEconomics, RadrootsOrderFulfillmentState, RadrootsOrderFulfillmentUpdate, RadrootsOrderInventoryCommitment, RadrootsOrderItem, RadrootsOrderPricingBasis, RadrootsOrderReceipt, RadrootsOrderRequest, RadrootsOrderRevisionDecision, RadrootsOrderRevisionOutcome, RadrootsOrderRevisionProposal, }; -use radroots_sdk::profile::{RadrootsProfile, RadrootsProfileType}; -use radroots_sdk::{ +use radroots_sdk::protocol::profile::{RadrootsProfile, RadrootsProfileType}; +use radroots_sdk::protocol::{ RadrootsNostrEventPtr, RadrootsSdkClient, RadrootsSdkConfig, RelayConfig, SdkEnvironment, SdkPublishError, SdkTransportMode, SdkTransportReceipt, SignerConfig, }; diff --git a/crates/sdk/tests/replica_ingest.rs b/crates/sdk/tests/replica_ingest.rs @@ -1,7 +1,7 @@ use radroots_replica_db::ReplicaSql; use radroots_replica_db_schema::farm::IFarmFindMany; use radroots_replica_sync::{RadrootsReplicaIngestOutcome, radroots_replica_ingest_event}; -use radroots_sdk::{RadrootsFarm, RadrootsNostrEvent, farm}; +use radroots_sdk::protocol::{RadrootsFarm, RadrootsNostrEvent, farm}; use radroots_sql_core::{SqlExecutor, SqliteExecutor}; use tempfile::{TempDir, tempdir};