lib

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

commit 46ec9a40f3981d00654663abe226b8f33cd7eb39
parent 6b38872141aa99e7bfe20b42e6473084abadead0
Author: triesap <tyson@radroots.org>
Date:   Fri, 26 Jun 2026 15:00:07 +0000

bindings: align event dto imports

- consume typed listing projection addresses from event bindings
- update trade bindings to import canonical commercial and order DTO names
- regenerate event and trade TypeScript bindings from dto-bindgen
- validate fmt, unit, xtask, coverage, build, and typecheck gates

Diffstat:
Mcrates/sdk/src/market_runtime.rs | 10+---------
Mcrates/sdk/tests/unit/market_runtime_tests.rs | 16+++++-----------
Mcrates/trade_bindings/src/dto.rs | 30+++++++++++++++---------------
Mcrates/trade_bindings/src/lib.rs | 12++++++------
Mtools/sdk_xtask_import/src/dto_roots.rs | 86++++++++++++++++++++++++++++++++++++++++----------------------------------------
5 files changed, 70 insertions(+), 84 deletions(-)

diff --git a/crates/sdk/src/market_runtime.rs b/crates/sdk/src/market_runtime.rs @@ -111,15 +111,7 @@ impl MarketListingSearchRow { fn try_from_projection_row( row: RadrootsListingProjectionRow, ) -> Result<Self, RadrootsSdkError> { - let listing_addr = - RadrootsListingAddress::parse(row.listing_addr.as_str()).map_err(|source| { - RadrootsSdkError::Projection { - message: format!( - "stored listing projection address `{}` is invalid: {source}", - row.listing_addr - ), - } - })?; + let listing_addr = row.listing_addr; let listing_event_id = RadrootsEventId::parse(row.listing_event_id.as_str()).map_err(|source| { RadrootsSdkError::Projection { diff --git a/crates/sdk/tests/unit/market_runtime_tests.rs b/crates/sdk/tests/unit/market_runtime_tests.rs @@ -5,7 +5,10 @@ const SELLER_PUBLIC_KEY_HEX: &str = fn projection_row() -> RadrootsListingProjectionRow { RadrootsListingProjectionRow { - listing_addr: format!("30402:{SELLER_PUBLIC_KEY_HEX}:AAAAAAAAAAAAAAAAAAAAAg"), + listing_addr: RadrootsListingAddress::parse(format!( + "30402:{SELLER_PUBLIC_KEY_HEX}:AAAAAAAAAAAAAAAAAAAAAg" + )) + .expect("listing address"), listing_event_id: "a".repeat(64), seller_pubkey: SELLER_PUBLIC_KEY_HEX.to_owned(), title: "Blueberries".to_owned(), @@ -47,20 +50,11 @@ fn listing_projection_row_conversion_validates_stored_identity_columns() { let row = projection_row(); let search_row = MarketListingSearchRow::try_from_projection_row(row.clone()).expect("search row"); - assert_eq!(search_row.listing_addr.as_str(), row.listing_addr); + assert_eq!(search_row.listing_addr, row.listing_addr); assert_eq!(search_row.listing_event_id.as_str(), row.listing_event_id); assert_eq!(search_row.seller_pubkey.as_str(), row.seller_pubkey); assert_eq!(search_row.title, "Blueberries"); - let mut invalid_addr = row.clone(); - invalid_addr.listing_addr = "not-an-address".to_owned(); - assert!( - projection_error_message( - MarketListingSearchRow::try_from_projection_row(invalid_addr).unwrap_err() - ) - .contains("projection address") - ); - let mut invalid_event_id = row.clone(); invalid_event_id.listing_event_id = "not-an-event-id".to_owned(); assert!( diff --git a/crates/trade_bindings/src/dto.rs b/crates/trade_bindings/src/dto.rs @@ -83,16 +83,16 @@ imported_ts_type!(RadrootsNostrEventPtrImport, "RadrootsNostrEventPtr"); imported_ts_type!(RadrootsPlotRefImport, "RadrootsPlotRef"); imported_ts_type!(RadrootsResourceAreaRefImport, "RadrootsResourceAreaRef"); imported_ts_type!( - RadrootsTradeMessagePayloadImport, - "RadrootsTradeMessagePayload" + RadrootsCommercialMessagePayloadImport, + "RadrootsCommercialMessagePayload" ); -imported_ts_type!(RadrootsTradeMessageTypeImport, "RadrootsTradeMessageType"); imported_ts_type!( - RadrootsTradeOrderEconomicLineImport, - "RadrootsTradeOrderEconomicLine" + RadrootsCommercialMessageTypeImport, + "RadrootsCommercialMessageType" ); -imported_ts_type!(RadrootsTradeOrderItemImport, "RadrootsTradeOrderItem"); -imported_ts_type!(RadrootsTradeOrderStatusImport, "RadrootsTradeOrderStatus"); +imported_ts_type!(RadrootsOrderEconomicLineImport, "RadrootsOrderEconomicLine"); +imported_ts_type!(RadrootsOrderItemImport, "RadrootsOrderItem"); +imported_ts_type!(RadrootsOrderStatusImport, "RadrootsOrderStatus"); #[derive(dto_bindgen::Dto)] pub struct RadrootsTradeFacetCount { @@ -278,8 +278,8 @@ pub struct RadrootsTradeMarketplaceOrderSummary { pub listing_addr: String, pub buyer_pubkey: String, pub seller_pubkey: String, - pub status: RadrootsTradeOrderStatusImport, - pub last_message_type: RadrootsTradeMessageTypeImport, + pub status: RadrootsOrderStatusImport, + pub last_message_type: RadrootsCommercialMessageTypeImport, pub item_count: u32, pub total_bin_count: u32, pub has_requested_discounts: bool, @@ -351,7 +351,7 @@ pub struct RadrootsTradeOrderQuery { pub listing_addr: Option<String>, pub buyer_pubkey: Option<String>, pub seller_pubkey: Option<String>, - pub status: Option<RadrootsTradeOrderStatusImport>, + pub status: Option<RadrootsOrderStatusImport>, } #[derive(dto_bindgen::Dto)] @@ -388,7 +388,7 @@ pub struct RadrootsTradeOrderWorkflowMessage { pub listing_event: Option<RadrootsNostrEventPtrImport>, pub root_event_id: Option<String>, pub prev_event_id: Option<String>, - pub payload: RadrootsTradeMessagePayloadImport, + pub payload: RadrootsCommercialMessagePayloadImport, } #[derive(dto_bindgen::Dto)] @@ -397,9 +397,9 @@ pub struct RadrootsTradeOrderWorkflowProjection { pub listing_addr: String, pub buyer_pubkey: String, pub seller_pubkey: String, - pub items: Vec<RadrootsTradeOrderItemImport>, - pub requested_discounts: Option<Vec<RadrootsTradeOrderEconomicLineImport>>, - pub status: RadrootsTradeOrderStatusImport, + pub items: Vec<RadrootsOrderItemImport>, + pub requested_discounts: Option<Vec<RadrootsOrderEconomicLineImport>>, + pub status: RadrootsOrderStatusImport, pub listing_snapshot: Option<RadrootsNostrEventPtrImport>, pub root_event_id: String, pub last_event_id: String, @@ -416,7 +416,7 @@ pub struct RadrootsTradeOrderWorkflowProjection { pub discount_accept_count: u32, pub discount_decline_count: u32, pub cancellation_count: u32, - pub last_message_type: RadrootsTradeMessageTypeImport, + pub last_message_type: RadrootsCommercialMessageTypeImport, pub last_actor_pubkey: String, } diff --git a/crates/trade_bindings/src/lib.rs b/crates/trade_bindings/src/lib.rs @@ -54,7 +54,7 @@ pub const TRADE_TYPE_INVENTORY: &[TradeTypeInventoryEntry] = &[ source_root("RadrootsTradeListingTotal"), local_shape("RadrootsTradeMarketplaceListingSummary"), local_shape("RadrootsTradeMarketplaceOrderSummary"), - event_import("RadrootsTradeMessageType"), + event_import("RadrootsCommercialMessageType"), local_shape("RadrootsTradeModerationFlag"), local_shape("RadrootsTradeModerationSeverity"), local_shape("RadrootsTradeModerationStatus"), @@ -65,7 +65,7 @@ pub const TRADE_TYPE_INVENTORY: &[TradeTypeInventoryEntry] = &[ local_shape("RadrootsTradeOrderQuery"), local_shape("RadrootsTradeOrderSort"), local_shape("RadrootsTradeOrderSortField"), - event_import("RadrootsTradeOrderStatus"), + event_import("RadrootsOrderStatus"), local_shape("RadrootsTradeOrderWorkflowMessage"), local_shape("RadrootsTradeOrderWorkflowProjection"), local_shape("RadrootsTradeReviewPriority"), @@ -200,7 +200,7 @@ mod tests { "RadrootsTradeListingTotal", "RadrootsTradeMarketplaceListingSummary", "RadrootsTradeMarketplaceOrderSummary", - "RadrootsTradeMessageType", + "RadrootsCommercialMessageType", "RadrootsTradeModerationFlag", "RadrootsTradeModerationSeverity", "RadrootsTradeModerationStatus", @@ -211,7 +211,7 @@ mod tests { "RadrootsTradeOrderQuery", "RadrootsTradeOrderSort", "RadrootsTradeOrderSortField", - "RadrootsTradeOrderStatus", + "RadrootsOrderStatus", "RadrootsTradeOrderWorkflowMessage", "RadrootsTradeOrderWorkflowProjection", "RadrootsTradeReviewPriority", @@ -233,8 +233,8 @@ mod tests { "RadrootsListingProduct", "RadrootsListingPublicLocation", "RadrootsListingStatus", - "RadrootsTradeMessageType", - "RadrootsTradeOrderStatus", + "RadrootsCommercialMessageType", + "RadrootsOrderStatus", ] { assert_eq!( disposition(export_name), diff --git a/tools/sdk_xtask_import/src/dto_roots.rs b/tools/sdk_xtask_import/src/dto_roots.rs @@ -268,11 +268,11 @@ fn trade_import_options(mut options: DtoRegistryRenderOptions) -> DtoRegistryRen "RadrootsNostrEventPtr", "RadrootsPlotRef", "RadrootsResourceAreaRef", - "RadrootsTradeMessagePayload", - "RadrootsTradeMessageType", - "RadrootsTradeOrderEconomicLine", - "RadrootsTradeOrderItem", - "RadrootsTradeOrderStatus", + "RadrootsCommercialMessagePayload", + "RadrootsCommercialMessageType", + "RadrootsOrderEconomicLine", + "RadrootsOrderItem", + "RadrootsOrderStatus", ] { options = options.with_external_override(export_name, export_name, "@radroots/events-bindings"); @@ -370,10 +370,13 @@ mod tests { "JobInputType", "JobPaymentRequest", "RadrootsAccountClaim", - "RadrootsActiveTradeEnvelope", - "RadrootsActiveTradeMessageType", "RadrootsAppData", "RadrootsComment", + "RadrootsCommercialDomain", + "RadrootsCommercialEnvelope", + "RadrootsCommercialMessagePayload", + "RadrootsCommercialMessageType", + "RadrootsCommercialTransportLane", "RadrootsCoop", "RadrootsCoopLocation", "RadrootsCoopRef", @@ -401,9 +404,11 @@ mod tests { "RadrootsListing", "RadrootsListingAvailability", "RadrootsListingBin", + "RadrootsListingCancel", "RadrootsListingDeliveryMethod", "RadrootsListingImage", "RadrootsListingImageSize", + "RadrootsListingParseError", "RadrootsListingProduct", "RadrootsListingProductTagKeys", "RadrootsListingPublicLocation", @@ -415,6 +420,35 @@ mod tests { "RadrootsNostrEvent", "RadrootsNostrEventPtr", "RadrootsNostrEventRef", + "RadrootsOrderAnswer", + "RadrootsOrderCancellation", + "RadrootsOrderChange", + "RadrootsOrderDecision", + "RadrootsOrderDecisionOutcome", + "RadrootsOrderDiscountDecision", + "RadrootsOrderDiscountOffer", + "RadrootsOrderDiscountRequest", + "RadrootsOrderEconomicActor", + "RadrootsOrderEconomicEffect", + "RadrootsOrderEconomicItem", + "RadrootsOrderEconomicLine", + "RadrootsOrderEconomicLineKind", + "RadrootsOrderEconomicTotals", + "RadrootsOrderEconomics", + "RadrootsOrderEnvelope", + "RadrootsOrderEventType", + "RadrootsOrderInventoryCommitment", + "RadrootsOrderItem", + "RadrootsOrderPricingBasis", + "RadrootsOrderQuestion", + "RadrootsOrderRequest", + "RadrootsOrderResponse", + "RadrootsOrderRevision", + "RadrootsOrderRevisionDecision", + "RadrootsOrderRevisionOutcome", + "RadrootsOrderRevisionProposal", + "RadrootsOrderRevisionResponse", + "RadrootsOrderStatus", "RadrootsPlot", "RadrootsPlotLocation", "RadrootsPlotRef", @@ -429,43 +463,9 @@ mod tests { "RadrootsResourceHarvestCap", "RadrootsResourceHarvestProduct", "RadrootsSeal", - "RadrootsTradeAnswer", - "RadrootsTradeDiscountDecision", - "RadrootsTradeDiscountOffer", - "RadrootsTradeDiscountRequest", - "RadrootsTradeDomain", - "RadrootsTradeEconomicActor", - "RadrootsTradeEconomicEffect", - "RadrootsTradeEconomicLineKind", - "RadrootsTradeEnvelope", - "RadrootsTradeInventoryCommitment", - "RadrootsTradeListingCancel", - "RadrootsTradeListingParseError", "RadrootsTradeListingValidateRequest", "RadrootsTradeListingValidateResult", "RadrootsTradeListingValidationError", - "RadrootsTradeMessagePayload", - "RadrootsTradeMessageType", - "RadrootsTradeOrderCancelled", - "RadrootsTradeOrderChange", - "RadrootsTradeOrderDecision", - "RadrootsTradeOrderDecisionEvent", - "RadrootsTradeOrderEconomicItem", - "RadrootsTradeOrderEconomicLine", - "RadrootsTradeOrderEconomicTotals", - "RadrootsTradeOrderEconomics", - "RadrootsTradeOrderItem", - "RadrootsTradeOrderRequested", - "RadrootsTradeOrderResponse", - "RadrootsTradeOrderRevision", - "RadrootsTradeOrderRevisionDecision", - "RadrootsTradeOrderRevisionDecisionEvent", - "RadrootsTradeOrderRevisionProposed", - "RadrootsTradeOrderRevisionResponse", - "RadrootsTradeOrderStatus", - "RadrootsTradePricingBasis", - "RadrootsTradeQuestion", - "RadrootsTradeTransportLane", ]; const EVENTS_INDEXED_TYPE_INVENTORY: &[&str] = &[ "RadrootsEventsIndexedShardId", @@ -643,8 +643,8 @@ mod tests { for duplicate in [ "export type RadrootsListing = ", "export type RadrootsFarmRef = ", - "export type RadrootsTradeMessageType = ", - "export type RadrootsTradeOrderStatus = ", + "export type RadrootsCommercialMessageType = ", + "export type RadrootsOrderStatus = ", ] { assert!(!TRADE_BINDINGS_TYPES_TS.contains(duplicate)); }