commit 7f6ee5116fe5dafa5d1f990fcf6bfeaa5e235734
parent c7473373f3f93fc8cd13a6b4563e33d989943512
Author: triesap <tyson@radroots.org>
Date: Thu, 18 Jun 2026 12:56:45 -0700
app: align sdk local runtime dependency
- enable the SDK local-runtime feature
- move SDK protocol imports to public protocol modules
- refresh Cargo.lock for SDK runtime dependencies
- verify app metadata and package check
Diffstat:
4 files changed, 302 insertions(+), 65 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
@@ -481,6 +481,15 @@ dependencies = [
]
[[package]]
+name = "atoi"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
name = "atomic"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1360,6 +1369,21 @@ dependencies = [
]
[[package]]
+name = "crc"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d"
+dependencies = [
+ "crc-catalog",
+]
+
+[[package]]
+name = "crc-catalog"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853"
+
+[[package]]
name = "crc32fast"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1619,6 +1643,12 @@ dependencies = [
]
[[package]]
+name = "dotenvy"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
+
+[[package]]
name = "downcast-rs"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1692,6 +1722,9 @@ name = "either"
version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
+dependencies = [
+ "serde",
+]
[[package]]
name = "embed-resource"
@@ -2177,6 +2210,17 @@ dependencies = [
]
[[package]]
+name = "futures-intrusive"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f"
+dependencies = [
+ "futures-core",
+ "lock_api",
+ "parking_lot",
+]
+
+[[package]]
name = "futures-io"
version = "0.3.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2778,6 +2822,8 @@ version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
dependencies = [
+ "allocator-api2",
+ "equivalent",
"foldhash",
]
@@ -2806,6 +2852,15 @@ dependencies = [
]
[[package]]
+name = "hashlink"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1"
+dependencies = [
+ "hashbrown 0.15.5",
+]
+
+[[package]]
name = "heck"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -5190,6 +5245,7 @@ name = "radroots_authority"
version = "0.1.0-alpha.2"
dependencies = [
"radroots_events",
+ "radroots_nostr",
]
[[package]]
@@ -5202,6 +5258,18 @@ dependencies = [
]
[[package]]
+name = "radroots_event_store"
+version = "0.1.0-alpha.2"
+dependencies = [
+ "radroots_events",
+ "radroots_nostr",
+ "serde",
+ "serde_json",
+ "sqlx",
+ "thiserror 1.0.69",
+]
+
+[[package]]
name = "radroots_events"
version = "0.1.0-alpha.2"
dependencies = [
@@ -5266,6 +5334,8 @@ version = "0.1.0-alpha.2"
dependencies = [
"nostr",
"nostr-sdk",
+ "radroots_events",
+ "radroots_events_codec",
"radroots_identity",
"serde",
"serde_json",
@@ -5317,6 +5387,20 @@ dependencies = [
]
[[package]]
+name = "radroots_outbox"
+version = "0.1.0-alpha.2"
+dependencies = [
+ "hex",
+ "radroots_event_store",
+ "radroots_events",
+ "serde",
+ "serde_json",
+ "sha2",
+ "sqlx",
+ "thiserror 1.0.69",
+]
+
+[[package]]
name = "radroots_protected_store"
version = "0.1.0-alpha.2"
dependencies = [
@@ -5329,6 +5413,22 @@ dependencies = [
]
[[package]]
+name = "radroots_relay_transport"
+version = "0.1.0-alpha.2"
+dependencies = [
+ "futures",
+ "nostr",
+ "radroots_event_store",
+ "radroots_events",
+ "radroots_nostr",
+ "radroots_outbox",
+ "serde",
+ "serde_json",
+ "thiserror 1.0.69",
+ "url",
+]
+
+[[package]]
name = "radroots_runtime"
version = "0.1.0-alpha.2"
dependencies = [
@@ -5362,13 +5462,21 @@ dependencies = [
name = "radroots_sdk"
version = "0.1.0"
dependencies = [
+ "hex",
+ "radroots_authority",
+ "radroots_event_store",
"radroots_events",
"radroots_events_codec",
"radroots_identity",
"radroots_nostr",
+ "radroots_outbox",
+ "radroots_relay_transport",
"radroots_trade",
"serde",
"serde_json",
+ "sha2",
+ "sqlx",
+ "uuid",
]
[[package]]
@@ -5394,6 +5502,7 @@ dependencies = [
"hex",
"radroots_authority",
"radroots_core",
+ "radroots_event_store",
"radroots_events",
"radroots_events_codec",
"serde",
@@ -6488,6 +6597,110 @@ dependencies = [
]
[[package]]
+name = "sqlx"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc"
+dependencies = [
+ "sqlx-core",
+ "sqlx-macros",
+ "sqlx-sqlite",
+]
+
+[[package]]
+name = "sqlx-core"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6"
+dependencies = [
+ "base64 0.22.1",
+ "bytes",
+ "crc",
+ "crossbeam-queue",
+ "either",
+ "event-listener 5.4.1",
+ "futures-core",
+ "futures-intrusive",
+ "futures-io",
+ "futures-util",
+ "hashbrown 0.15.5",
+ "hashlink 0.10.0",
+ "indexmap",
+ "log",
+ "memchr",
+ "once_cell",
+ "percent-encoding",
+ "serde",
+ "sha2",
+ "smallvec",
+ "thiserror 2.0.18",
+ "tokio",
+ "tokio-stream",
+ "tracing",
+ "url",
+]
+
+[[package]]
+name = "sqlx-macros"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "sqlx-core",
+ "sqlx-macros-core",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "sqlx-macros-core"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b"
+dependencies = [
+ "dotenvy",
+ "either",
+ "heck 0.5.0",
+ "hex",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_json",
+ "sha2",
+ "sqlx-core",
+ "sqlx-sqlite",
+ "syn 2.0.117",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "sqlx-sqlite"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea"
+dependencies = [
+ "atoi",
+ "flume",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-intrusive",
+ "futures-util",
+ "libsqlite3-sys",
+ "log",
+ "percent-encoding",
+ "serde",
+ "serde_urlencoded",
+ "sqlx-core",
+ "thiserror 2.0.18",
+ "tracing",
+ "url",
+]
+
+[[package]]
name = "stable_deref_trait"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -7093,6 +7306,17 @@ dependencies = [
]
[[package]]
+name = "tokio-stream"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
name = "tokio-tungstenite"
version = "0.26.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -7255,6 +7479,7 @@ version = "0.1.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
dependencies = [
+ "log",
"pin-project-lite",
"tracing-attributes",
"tracing-core",
diff --git a/Cargo.toml b/Cargo.toml
@@ -41,7 +41,7 @@ radroots_nostr_connect = { path = "../lib/crates/nostr_connect" }
radroots_protected_store = { path = "../lib/crates/protected_store" }
radroots_runtime_paths = { path = "../lib/crates/runtime_paths" }
radroots_secret_vault = { path = "../lib/crates/secret_vault", default-features = false, features = ["std"] }
-radroots_sdk = { path = "../sdk/crates/sdk", features = ["relay-client", "signing"] }
+radroots_sdk = { path = "../sdk/crates/sdk", features = ["local-runtime"] }
radroots_sql_core = { path = "../lib/crates/sql_core", features = ["native"] }
radroots_trade = { path = "../lib/crates/trade", default-features = false, features = ["std", "serde", "serde_json"] }
radroots_app_core = { path = "crates/runtime", version = "0.1.0" }
diff --git a/crates/desktop/src/runtime.rs b/crates/desktop/src/runtime.rs
@@ -95,13 +95,16 @@ use radroots_nostr::prelude::{
RadrootsNostrTimestamp, radroots_nostr_kind, radroots_nostr_parse_pubkey,
};
use radroots_nostr_accounts::prelude::RadrootsNostrAccountsManager;
-use radroots_sdk::farm::{RadrootsFarm, RadrootsFarmRef};
-use radroots_sdk::listing::{
+use radroots_sdk::protocol::events::{
+ RadrootsNostrEvent as SdkRadrootsNostrEvent, RadrootsNostrEventPtr,
+};
+use radroots_sdk::protocol::farm::{RadrootsFarm, RadrootsFarmRef};
+use radroots_sdk::protocol::listing::{
RadrootsListing, RadrootsListingAvailability, RadrootsListingBin,
RadrootsListingDeliveryMethod, RadrootsListingLocation, RadrootsListingProduct,
RadrootsListingStatus,
};
-use radroots_sdk::order::{
+use radroots_sdk::protocol::order::{
RadrootsOrderCancellation, RadrootsOrderDecision, RadrootsOrderDecisionOutcome,
RadrootsOrderEconomics, RadrootsOrderFulfillmentState, RadrootsOrderFulfillmentUpdate,
RadrootsOrderInventoryCommitment, RadrootsOrderItem, RadrootsOrderReceipt,
@@ -109,8 +112,8 @@ use radroots_sdk::order::{
RadrootsOrderRevisionProposal,
};
use radroots_sdk::{
- RadrootsNostrEventPtr, RadrootsSdkClient, RadrootsSdkConfig, RelayConfig, SdkEnvironment,
- SdkPublishReceipt, SdkTransportMode, SdkTransportReceipt, SignerConfig,
+ RadrootsSdkClient, RadrootsSdkConfig, RelayConfig, SdkEnvironment, SdkPublishReceipt,
+ SdkTransportMode, SdkTransportReceipt, SignerConfig,
};
use radroots_sql_core::SqliteExecutor;
use radroots_trade::listing::parse_public_listing_address;
@@ -5341,7 +5344,8 @@ impl DesktopAppRuntimeState {
if record.family != LocalRecordFamily::SignedEvent
|| record.event_kind
!= Some(i64::from(
- radroots_sdk::order::RadrootsOrderEventType::OrderRequested.kind(),
+ radroots_sdk::protocol::order::RadrootsOrderEventType::OrderRequested
+ .kind(),
))
|| !signed_order_request_evidence_record_is_usable(&record)
{
@@ -5350,7 +5354,8 @@ impl DesktopAppRuntimeState {
let Some(event) = signed_event_from_local_record(&record)? else {
continue;
};
- let Ok(envelope) = radroots_sdk::order::parse_order_request(&event) else {
+ let Ok(envelope) = radroots_sdk::protocol::order::parse_order_request(&event)
+ else {
continue;
};
insert_seller_order_request_evidence(
@@ -5378,11 +5383,11 @@ impl DesktopAppRuntimeState {
return Ok(());
};
let events = sqlite_store.load_local_interop_signed_events_by_kind(i64::from(
- radroots_sdk::order::RadrootsOrderEventType::OrderRequested.kind(),
+ radroots_sdk::protocol::order::RadrootsOrderEventType::OrderRequested.kind(),
))?;
for event in events {
- let Ok(envelope) = radroots_sdk::order::parse_order_request(&event) else {
+ let Ok(envelope) = radroots_sdk::protocol::order::parse_order_request(&event) else {
continue;
};
insert_seller_order_request_evidence(
@@ -5429,11 +5434,9 @@ impl DesktopAppRuntimeState {
let author_pubkey = active_order_pubkey(event.author.as_str(), "author_pubkey")?;
match event.kind {
KIND_ORDER_DECISION => {
- let envelope =
- radroots_sdk::order::parse_order_decision(&event).map_err(|_| {
- AppSqliteError::InvalidProjection {
- reason: "order lifecycle evidence is invalid",
- }
+ let envelope = radroots_sdk::protocol::order::parse_order_decision(&event)
+ .map_err(|_| AppSqliteError::InvalidProjection {
+ reason: "order lifecycle evidence is invalid",
})?;
let context = active_order_event_record_context(&event, envelope.message_type)?;
buckets.decisions.push(RadrootsOrderDecisionRecord {
@@ -5446,7 +5449,8 @@ impl DesktopAppRuntimeState {
});
}
KIND_ORDER_REVISION_PROPOSAL => {
- let Ok(envelope) = radroots_sdk::order::parse_order_revision_proposal(&event)
+ let Ok(envelope) =
+ radroots_sdk::protocol::order::parse_order_revision_proposal(&event)
else {
return Err(AppSqliteError::InvalidProjection {
reason: "order lifecycle evidence is invalid",
@@ -5465,7 +5469,8 @@ impl DesktopAppRuntimeState {
});
}
KIND_ORDER_REVISION_DECISION => {
- let Ok(envelope) = radroots_sdk::order::parse_order_revision_decision(&event)
+ let Ok(envelope) =
+ radroots_sdk::protocol::order::parse_order_revision_decision(&event)
else {
return Err(AppSqliteError::InvalidProjection {
reason: "order lifecycle evidence is invalid",
@@ -5484,7 +5489,9 @@ impl DesktopAppRuntimeState {
});
}
KIND_ORDER_CANCELLATION => {
- let Ok(envelope) = radroots_sdk::order::parse_order_cancellation(&event) else {
+ let Ok(envelope) =
+ radroots_sdk::protocol::order::parse_order_cancellation(&event)
+ else {
return Err(AppSqliteError::InvalidProjection {
reason: "order lifecycle evidence is invalid",
});
@@ -5500,7 +5507,9 @@ impl DesktopAppRuntimeState {
});
}
KIND_ORDER_FULFILLMENT_UPDATE => {
- let Ok(envelope) = radroots_sdk::order::parse_fulfillment_update(&event) else {
+ let Ok(envelope) =
+ radroots_sdk::protocol::order::parse_fulfillment_update(&event)
+ else {
return Err(AppSqliteError::InvalidProjection {
reason: "order lifecycle evidence is invalid",
});
@@ -5516,7 +5525,8 @@ impl DesktopAppRuntimeState {
});
}
KIND_ORDER_RECEIPT => {
- let Ok(envelope) = radroots_sdk::order::parse_buyer_receipt(&event) else {
+ let Ok(envelope) = radroots_sdk::protocol::order::parse_buyer_receipt(&event)
+ else {
return Err(AppSqliteError::InvalidProjection {
reason: "order lifecycle evidence is invalid",
});
@@ -5665,7 +5675,7 @@ impl DesktopAppRuntimeState {
fn collect_order_lifecycle_signed_events(
&self,
- ) -> Result<Vec<radroots_sdk::RadrootsNostrEvent>, AppSqliteError> {
+ ) -> Result<Vec<SdkRadrootsNostrEvent>, AppSqliteError> {
let mut events = Vec::new();
let mut seen_event_ids = BTreeSet::new();
let kinds = [
@@ -9345,7 +9355,7 @@ fn current_utc_timestamp() -> String {
fn signed_event_from_local_record(
record: &LocalEventRecord,
-) -> Result<Option<radroots_sdk::RadrootsNostrEvent>, AppSqliteError> {
+) -> Result<Option<SdkRadrootsNostrEvent>, AppSqliteError> {
let Some(id) = record.event_id.as_deref().map(str::trim) else {
return Ok(None);
};
@@ -9369,7 +9379,7 @@ fn signed_event_from_local_record(
reason: "signed local event kind must fit u32",
})?;
- Ok(Some(radroots_sdk::RadrootsNostrEvent {
+ Ok(Some(SdkRadrootsNostrEvent {
id: id.to_owned(),
author: author.to_owned(),
created_at,
@@ -9414,7 +9424,7 @@ fn event_tags_from_value(
.collect()
}
-fn trade_chain_tag_value(event: &radroots_sdk::RadrootsNostrEvent, key: &str) -> Option<String> {
+fn trade_chain_tag_value(event: &SdkRadrootsNostrEvent, key: &str) -> Option<String> {
event.tags.iter().find_map(|tag| {
if tag.first().map(String::as_str) == Some(key) {
tag.get(1)
@@ -9449,8 +9459,8 @@ fn active_order_pubkey(
}
fn active_order_event_record_context(
- event: &radroots_sdk::RadrootsNostrEvent,
- message_type: radroots_sdk::order::RadrootsOrderEventType,
+ event: &SdkRadrootsNostrEvent,
+ message_type: radroots_sdk::protocol::order::RadrootsOrderEventType,
) -> Result<(RadrootsPublicKey, RadrootsEventId, RadrootsEventId), AppSqliteError> {
let context = order_event_context_from_tags(message_type, &event.tags).map_err(|_| {
AppSqliteError::InvalidProjection {
@@ -9534,7 +9544,7 @@ fn active_order_pending_revision_proposal(
fn insert_seller_order_request_evidence(
order_id: &OrderId,
- event: &radroots_sdk::RadrootsNostrEvent,
+ event: &SdkRadrootsNostrEvent,
payload: RadrootsOrderRequest,
matched_requests: &mut BTreeMap<String, ResolvedAppSellerOrderRequest>,
) {
@@ -9873,8 +9883,8 @@ mod tests {
RadrootsNostrMemoryAccountStore, RadrootsNostrSecretVaultMemory, RadrootsSecretVault,
account_secret_slot,
};
- use radroots_sdk::RadrootsNostrEventPtr;
- use radroots_sdk::order::{
+ use radroots_sdk::protocol::events::RadrootsNostrEventPtr;
+ use radroots_sdk::protocol::order::{
RadrootsOrderCancellation, RadrootsOrderDecision, RadrootsOrderDecisionOutcome,
RadrootsOrderEconomicItem, RadrootsOrderEconomics, RadrootsOrderFulfillmentState,
RadrootsOrderFulfillmentUpdate, RadrootsOrderInventoryCommitment, RadrootsOrderItem,
@@ -10673,14 +10683,16 @@ mod tests {
let event = published_receipt_event(receipt);
match receipt.event_kind {
3424 => {
- let envelope = radroots_sdk::order::parse_order_revision_proposal(&event)
- .expect("order revision proposal should parse");
+ let envelope =
+ radroots_sdk::protocol::order::parse_order_revision_proposal(&event)
+ .expect("order revision proposal should parse");
assert_eq!(envelope.payload.reason, "harvest count updated");
assert_eq!(envelope.payload.items[0].bin_count, 3);
}
3425 => {
- let envelope = radroots_sdk::order::parse_order_revision_decision(&event)
- .expect("order revision decision should parse");
+ let envelope =
+ radroots_sdk::protocol::order::parse_order_revision_decision(&event)
+ .expect("order revision decision should parse");
assert_eq!(envelope.payload.revision_id, "revision-1");
assert_eq!(
envelope.payload.decision,
@@ -10688,12 +10700,12 @@ mod tests {
);
}
3432 => {
- let envelope = radroots_sdk::order::parse_order_cancellation(&event)
+ let envelope = radroots_sdk::protocol::order::parse_order_cancellation(&event)
.expect("order cancellation should parse");
assert_eq!(envelope.payload.reason, "buyer cancelled order");
}
3433 => {
- let envelope = radroots_sdk::order::parse_fulfillment_update(&event)
+ let envelope = radroots_sdk::protocol::order::parse_fulfillment_update(&event)
.expect("fulfillment update should parse");
assert_eq!(
envelope.payload.status,
@@ -10701,7 +10713,7 @@ mod tests {
);
}
3434 => {
- let envelope = radroots_sdk::order::parse_buyer_receipt(&event)
+ let envelope = radroots_sdk::protocol::order::parse_buyer_receipt(&event)
.expect("buyer receipt should parse");
assert!(envelope.payload.received);
}
@@ -15127,7 +15139,7 @@ mod tests {
&& record.event_pubkey.as_deref() == Some(seller_pubkey.as_str())
}));
let decision_event = shared_seller_order_decision_event(&paths, seller_pubkey.as_str());
- let envelope = radroots_sdk::order::parse_order_decision(&decision_event)
+ let envelope = radroots_sdk::protocol::order::parse_order_decision(&decision_event)
.expect("app seller order accept should parse as canonical order decision");
assert_eq!(envelope.payload.order_id, "seller-order-decision-1");
assert!(matches!(
@@ -15170,7 +15182,7 @@ mod tests {
&& record.event_pubkey.as_deref() == Some(seller_pubkey.as_str())
}));
let decision_event = shared_seller_order_decision_event(&paths, seller_pubkey.as_str());
- let envelope = radroots_sdk::order::parse_order_decision(&decision_event)
+ let envelope = radroots_sdk::protocol::order::parse_order_decision(&decision_event)
.expect("app seller order decline should parse as canonical order decision");
let RadrootsOrderDecisionOutcome::Declined { reason } = envelope.payload.decision else {
panic!("expected declined decision");
@@ -15254,8 +15266,9 @@ mod tests {
shared_order_events_by_kind(&paths, 3433, seller_pubkey.as_str());
assert_eq!(fulfillment_events.len(), 1);
let fulfillment_event = fulfillment_events.first().expect("fulfillment event");
- let envelope = radroots_sdk::order::parse_fulfillment_update(fulfillment_event)
- .expect("fulfillment should parse");
+ let envelope =
+ radroots_sdk::protocol::order::parse_fulfillment_update(fulfillment_event)
+ .expect("fulfillment should parse");
assert_eq!(envelope.payload.status, expected_status);
let request_event_id = signed_order_request_event_id("seller-order-decision-1");
assert!(event_has_tag(
@@ -15399,7 +15412,7 @@ mod tests {
let delivered_event = fulfillment_events
.iter()
.find(|event| {
- radroots_sdk::order::parse_fulfillment_update(event)
+ radroots_sdk::protocol::order::parse_fulfillment_update(event)
.map(|envelope| {
envelope.payload.status == RadrootsOrderFulfillmentState::Delivered
})
@@ -15470,7 +15483,7 @@ mod tests {
let delivered_event = fulfillment_events
.iter()
.find(|event| {
- radroots_sdk::order::parse_fulfillment_update(event)
+ radroots_sdk::protocol::order::parse_fulfillment_update(event)
.map(|envelope| {
envelope.payload.status == RadrootsOrderFulfillmentState::Delivered
})
@@ -16487,8 +16500,9 @@ mod tests {
let cancellation_event = cancellation_events
.first()
.expect("linked buyer cancellation event");
- let cancellation = radroots_sdk::order::parse_order_cancellation(cancellation_event)
- .expect("linked buyer cancellation should parse");
+ let cancellation =
+ radroots_sdk::protocol::order::parse_order_cancellation(cancellation_event)
+ .expect("linked buyer cancellation should parse");
assert_eq!(cancellation.payload.order_id, fixture.trade_order_id);
assert_eq!(cancellation.payload.buyer_pubkey, fixture.buyer_pubkey);
assert_eq!(cancellation.payload.seller_pubkey, fixture.seller_pubkey);
@@ -16925,7 +16939,7 @@ mod tests {
shared_order_events_by_kind(&fixture.paths, 3434, fixture.buyer_pubkey.as_str());
assert_eq!(receipt_events.len(), 1);
let receipt_event = receipt_events.first().expect("linked buyer receipt event");
- let receipt = radroots_sdk::order::parse_buyer_receipt(receipt_event)
+ let receipt = radroots_sdk::protocol::order::parse_buyer_receipt(receipt_event)
.expect("linked buyer receipt should parse");
assert_eq!(receipt.payload.order_id, fixture.trade_order_id);
assert_eq!(receipt.payload.buyer_pubkey, fixture.buyer_pubkey);
@@ -16987,7 +17001,7 @@ mod tests {
shared_order_events_by_kind(&fixture.paths, 3434, fixture.buyer_pubkey.as_str());
assert_eq!(receipt_events.len(), 1);
let receipt_event = receipt_events.first().expect("linked buyer receipt event");
- let receipt = radroots_sdk::order::parse_buyer_receipt(receipt_event)
+ let receipt = radroots_sdk::protocol::order::parse_buyer_receipt(receipt_event)
.expect("linked buyer delivered receipt should parse");
assert!(receipt.payload.received);
assert!(event_has_tag(
@@ -17037,7 +17051,7 @@ mod tests {
let receipt_event = receipt_events
.first()
.expect("linked buyer issue receipt event");
- let receipt = radroots_sdk::order::parse_buyer_receipt(receipt_event)
+ let receipt = radroots_sdk::protocol::order::parse_buyer_receipt(receipt_event)
.expect("linked buyer issue receipt should parse");
assert!(!receipt.payload.received);
assert_eq!(receipt.payload.issue.as_deref(), Some("items need review"));
@@ -17202,7 +17216,7 @@ mod tests {
.first()
.expect("linked buyer revision decision event");
let revision_decision =
- radroots_sdk::order::parse_order_revision_decision(revision_decision_event)
+ radroots_sdk::protocol::order::parse_order_revision_decision(revision_decision_event)
.expect("linked buyer revision decision should parse");
assert_eq!(
revision_decision.payload.decision,
@@ -20945,7 +20959,7 @@ mod tests {
}],
economics: signed_order_request_economics(trade_order_id, order_quantity),
};
- let parts = radroots_sdk::order::build_order_request_draft(
+ let parts = radroots_sdk::protocol::order::build_order_request_draft(
&RadrootsNostrEventPtr {
id: test_event_id_seed(listing_event_id),
relays: Some("wss://relay.example".to_owned()),
@@ -21053,7 +21067,7 @@ mod tests {
},
};
let request_event_id = test_event_id(request_event_id);
- let parts = radroots_sdk::order::build_order_decision_draft(
+ let parts = radroots_sdk::protocol::order::build_order_decision_draft(
&request_event_id,
&request_event_id,
&payload,
@@ -21382,7 +21396,7 @@ mod tests {
seller_pubkey: test_pubkey(seller_pubkey),
status,
};
- let parts = radroots_sdk::order::build_fulfillment_update_draft(
+ let parts = radroots_sdk::protocol::order::build_fulfillment_update_draft(
&request_event_id,
&prev_event_id,
&payload,
@@ -21423,7 +21437,7 @@ mod tests {
seller_pubkey: test_pubkey(seller_pubkey),
reason: "buyer cancelled order".to_owned(),
};
- let parts = radroots_sdk::order::build_order_cancellation_draft(
+ let parts = radroots_sdk::protocol::order::build_order_cancellation_draft(
&request_event_id,
&prev_event_id,
&payload,
@@ -21467,7 +21481,7 @@ mod tests {
issue: (!received).then(|| "items need review".to_owned()),
received_at: 1_774_000_030,
};
- let parts = radroots_sdk::order::build_buyer_receipt_draft(
+ let parts = radroots_sdk::protocol::order::build_buyer_receipt_draft(
&request_event_id,
&prev_event_id,
&payload,
@@ -21513,7 +21527,7 @@ mod tests {
economics: revision_test_order_economics(),
reason: "harvest count updated".to_owned(),
};
- let parts = radroots_sdk::order::build_order_revision_proposal_draft(
+ let parts = radroots_sdk::protocol::order::build_order_revision_proposal_draft(
&request_event_id,
&prev_event_id,
&payload,
@@ -21559,7 +21573,7 @@ mod tests {
prev_event_id: proposal_event_id.clone(),
decision,
};
- let parts = radroots_sdk::order::build_order_revision_decision_draft(
+ let parts = radroots_sdk::protocol::order::build_order_revision_decision_draft(
&request_event_id,
&proposal_event_id,
&payload,
@@ -21893,10 +21907,8 @@ mod tests {
}
}
- fn published_receipt_event(
- receipt: &AppPublishedOperationReceipt,
- ) -> radroots_sdk::RadrootsNostrEvent {
- radroots_sdk::RadrootsNostrEvent {
+ fn published_receipt_event(receipt: &AppPublishedOperationReceipt) -> SdkRadrootsNostrEvent {
+ SdkRadrootsNostrEvent {
id: receipt.event_id.clone(),
author: receipt.event_pubkey.clone(),
created_at: receipt.event_created_at,
@@ -21923,7 +21935,7 @@ mod tests {
fn shared_seller_order_decision_event(
paths: &AppDesktopRuntimePaths,
seller_pubkey: &str,
- ) -> radroots_sdk::RadrootsNostrEvent {
+ ) -> SdkRadrootsNostrEvent {
let record = shared_local_event_records(paths)
.into_iter()
.find(|record| {
@@ -21941,7 +21953,7 @@ mod tests {
paths: &AppDesktopRuntimePaths,
kind: i64,
pubkey: &str,
- ) -> Vec<radroots_sdk::RadrootsNostrEvent> {
+ ) -> Vec<SdkRadrootsNostrEvent> {
shared_local_event_records(paths)
.into_iter()
.filter(|record| {
@@ -21956,14 +21968,14 @@ mod tests {
.collect()
}
- fn event_has_tag(event: &radroots_sdk::RadrootsNostrEvent, key: &str, value: &str) -> bool {
+ fn event_has_tag(event: &SdkRadrootsNostrEvent, key: &str, value: &str) -> bool {
event.tags.iter().any(|tag| {
tag.first().map(String::as_str) == Some(key)
&& tag.get(1).map(String::as_str) == Some(value)
})
}
- fn event_has_nonempty_value_tag(event: &radroots_sdk::RadrootsNostrEvent, key: &str) -> bool {
+ fn event_has_nonempty_value_tag(event: &SdkRadrootsNostrEvent, key: &str) -> bool {
event.tags.iter().any(|tag| {
tag.first().map(String::as_str) == Some(key)
&& tag.get(1).map(|value| !value.is_empty()).unwrap_or(false)
diff --git a/crates/sync/src/publish.rs b/crates/sync/src/publish.rs
@@ -2,7 +2,7 @@ use radroots_app_view::{
FarmId, FarmReadiness, FulfillmentWindowId, OrderId, ProductId, ProductStatus,
};
use radroots_sdk::SdkTransportMode;
-use radroots_sdk::order::{
+use radroots_sdk::protocol::order::{
RadrootsOrderEconomics, RadrootsOrderFulfillmentState, RadrootsOrderItem,
RadrootsOrderRevisionOutcome,
};
@@ -795,7 +795,7 @@ mod tests {
PendingSyncOperation, PendingSyncOperationState, SyncAggregateRef, SyncOperationKind,
};
use radroots_app_view::{FarmId, FarmReadiness, OrderId, ProductId, ProductStatus};
- use radroots_sdk::order::{
+ use radroots_sdk::protocol::order::{
RadrootsOrderEconomics, RadrootsOrderFulfillmentState, RadrootsOrderItem,
RadrootsOrderRevisionOutcome,
};