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:
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));
}