commit 70ebbfbfb612fd57dc99456f816c0c7d45dae969
parent 967c0bafd608036397f5919e2591db82f9cc0ed6
Author: triesap <tyson@radroots.org>
Date: Sat, 27 Jun 2026 20:55:04 +0000
trade: remove stale workflow bindings
- Delete SDK-local order status, message type, payload, and workflow message DTO roots.
- Use source-owned trade workflow state and events-owned order event type in trade bindings.
- Remove obsolete workflow projection counters and matching large-integer policies.
- Regenerate trade TypeScript bindings and harden generator fixture assertions.
Diffstat:
3 files changed, 51 insertions(+), 261 deletions(-)
diff --git a/crates/trade_bindings/src/dto.rs b/crates/trade_bindings/src/dto.rs
@@ -3,16 +3,15 @@ use dto_bindgen_core::{
RustTypeId, SourceSpan, TargetFieldNames, TargetOverride, TypeDef, TypeRef, VariantDef,
VariantShape, WireFieldNames,
};
-use radroots_trade::listing::model::RadrootsTradeListingTotal;
+use radroots_trade::{
+ listing::model::RadrootsTradeListingTotal, workflow::RadrootsTradeWorkflowState,
+};
pub fn dto_roots() -> Vec<RootDescriptor> {
let mut roots = radroots_trade::dto::dto_roots()
.into_iter()
.collect::<Vec<_>>();
roots.extend([
- RootDescriptor::new::<RadrootsCommercialMessagePayload>(),
- RootDescriptor::new::<RadrootsCommercialMessageType>(),
- RootDescriptor::new::<RadrootsOrderStatus>(),
RootDescriptor::new::<RadrootsTradeFacetCount>(),
RootDescriptor::new::<RadrootsTradeListingBackofficeOverlay>(),
RootDescriptor::new::<RadrootsTradeListingBackofficeQuery>(),
@@ -36,7 +35,6 @@ pub fn dto_roots() -> Vec<RootDescriptor> {
RootDescriptor::new::<RadrootsTradeOrderQuery>(),
RootDescriptor::new::<RadrootsTradeOrderSort>(),
RootDescriptor::new::<RadrootsTradeOrderSortField>(),
- RootDescriptor::new::<RadrootsTradeOrderWorkflowMessage>(),
RootDescriptor::new::<RadrootsTradeOrderWorkflowProjection>(),
RootDescriptor::new::<RadrootsTradeReviewPriority>(),
RootDescriptor::new::<RadrootsTradeReviewQueueEntry>(),
@@ -85,158 +83,9 @@ imported_ts_type!(RadrootsListingProductImport, "RadrootsListingProduct");
imported_ts_type!(RadrootsNostrEventPtrImport, "RadrootsNostrEventPtr");
imported_ts_type!(RadrootsPlotRefImport, "RadrootsPlotRef");
imported_ts_type!(RadrootsResourceAreaRefImport, "RadrootsResourceAreaRef");
-imported_ts_type!(RadrootsOrderCancellationImport, "RadrootsOrderCancellation");
-imported_ts_type!(RadrootsOrderDecisionImport, "RadrootsOrderDecision");
imported_ts_type!(RadrootsOrderEconomicLineImport, "RadrootsOrderEconomicLine");
+imported_ts_type!(RadrootsOrderEventTypeImport, "RadrootsOrderEventType");
imported_ts_type!(RadrootsOrderItemImport, "RadrootsOrderItem");
-imported_ts_type!(RadrootsOrderRequestImport, "RadrootsOrderRequest");
-imported_ts_type!(
- RadrootsOrderRevisionDecisionImport,
- "RadrootsOrderRevisionDecision"
-);
-imported_ts_type!(
- RadrootsOrderRevisionProposalImport,
- "RadrootsOrderRevisionProposal"
-);
-imported_ts_type!(
- RadrootsTradeListingValidateRequestImport,
- "RadrootsTradeListingValidateRequest"
-);
-imported_ts_type!(
- RadrootsTradeListingValidateResultImport,
- "RadrootsTradeListingValidateResult"
-);
-
-pub enum RadrootsCommercialMessagePayload {
- ListingValidateRequest,
- ListingValidateResult,
- TradeOrderRequested,
- OrderDecision,
- OrderRevisionProposal,
- OrderRevisionDecisionAccepted,
- OrderRevisionDecisionDeclined,
- Cancel,
-}
-
-impl Dto for RadrootsCommercialMessagePayload {
- fn describe(ctx: &mut DescribeCtx) -> TypeRef {
- let def = EnumDef::new(
- "RadrootsCommercialMessagePayload",
- "RadrootsCommercialMessagePayload",
- EnumRepr::External,
- span("crates/trade_bindings/src/dto.rs", 97),
- )
- .with_variant(payload_variant(
- "ListingValidateRequest",
- "listing_validate_request",
- RadrootsTradeListingValidateRequestImport::describe(ctx),
- "crates/trade_bindings/src/dto.rs",
- 99,
- ))
- .with_variant(payload_variant(
- "ListingValidateResult",
- "listing_validate_result",
- RadrootsTradeListingValidateResultImport::describe(ctx),
- "crates/trade_bindings/src/dto.rs",
- 100,
- ))
- .with_variant(payload_variant(
- "TradeOrderRequested",
- "trade_order_requested",
- RadrootsOrderRequestImport::describe(ctx),
- "crates/trade_bindings/src/dto.rs",
- 101,
- ))
- .with_variant(payload_variant(
- "OrderDecision",
- "order_response",
- RadrootsOrderDecisionImport::describe(ctx),
- "crates/trade_bindings/src/dto.rs",
- 102,
- ))
- .with_variant(payload_variant(
- "OrderRevisionProposal",
- "order_revision",
- RadrootsOrderRevisionProposalImport::describe(ctx),
- "crates/trade_bindings/src/dto.rs",
- 103,
- ))
- .with_variant(payload_variant(
- "OrderRevisionDecisionAccepted",
- "order_revision_accept",
- RadrootsOrderRevisionDecisionImport::describe(ctx),
- "crates/trade_bindings/src/dto.rs",
- 104,
- ))
- .with_variant(payload_variant(
- "OrderRevisionDecisionDeclined",
- "order_revision_decline",
- RadrootsOrderRevisionDecisionImport::describe(ctx),
- "crates/trade_bindings/src/dto.rs",
- 105,
- ))
- .with_variant(payload_variant(
- "Cancel",
- "cancel",
- RadrootsOrderCancellationImport::describe(ctx),
- "crates/trade_bindings/src/dto.rs",
- 106,
- ));
- register(ctx, "RadrootsCommercialMessagePayload", TypeDef::Enum(def))
- }
-}
-
-#[derive(dto_bindgen::Dto)]
-pub enum RadrootsCommercialMessageType {
- #[serde(rename = "listing_validate_request")]
- ListingValidateRequest,
- #[serde(rename = "listing_validate_result")]
- ListingValidateResult,
- #[serde(rename = "order_request")]
- OrderRequest,
- #[serde(rename = "order_response")]
- OrderResponse,
- #[serde(rename = "order_revision")]
- OrderRevision,
- #[serde(rename = "order_revision_accept")]
- OrderRevisionAccept,
- #[serde(rename = "order_revision_decline")]
- OrderRevisionDecline,
- #[serde(rename = "question")]
- Question,
- #[serde(rename = "answer")]
- Answer,
- #[serde(rename = "discount_request")]
- DiscountRequest,
- #[serde(rename = "discount_offer")]
- DiscountOffer,
- #[serde(rename = "discount_accept")]
- DiscountAccept,
- #[serde(rename = "discount_decline")]
- DiscountDecline,
- #[serde(rename = "cancel")]
- Cancel,
-}
-
-#[derive(dto_bindgen::Dto)]
-pub enum RadrootsOrderStatus {
- #[serde(rename = "draft")]
- Draft,
- #[serde(rename = "validated")]
- Validated,
- #[serde(rename = "requested")]
- Requested,
- #[serde(rename = "questioned")]
- Questioned,
- #[serde(rename = "revised")]
- Revised,
- #[serde(rename = "accepted")]
- Accepted,
- #[serde(rename = "declined")]
- Declined,
- #[serde(rename = "cancelled")]
- Cancelled,
-}
#[derive(dto_bindgen::Dto)]
pub struct RadrootsTradeFacetCount {
@@ -422,8 +271,8 @@ pub struct RadrootsTradeMarketplaceOrderSummary {
pub listing_addr: String,
pub buyer_pubkey: String,
pub seller_pubkey: String,
- pub status: RadrootsOrderStatus,
- pub last_message_type: RadrootsCommercialMessageType,
+ pub status: RadrootsTradeWorkflowState,
+ pub last_message_type: RadrootsOrderEventTypeImport,
pub item_count: u32,
pub total_bin_count: u32,
pub has_requested_discounts: bool,
@@ -495,7 +344,7 @@ pub struct RadrootsTradeOrderQuery {
pub listing_addr: Option<String>,
pub buyer_pubkey: Option<String>,
pub seller_pubkey: Option<String>,
- pub status: Option<RadrootsOrderStatus>,
+ pub status: Option<RadrootsTradeWorkflowState>,
}
#[derive(dto_bindgen::Dto)]
@@ -523,19 +372,6 @@ pub enum RadrootsTradeOrderSortField {
}
#[derive(dto_bindgen::Dto)]
-pub struct RadrootsTradeOrderWorkflowMessage {
- pub event_id: String,
- pub actor_pubkey: String,
- pub counterparty_pubkey: String,
- pub listing_addr: String,
- pub order_id: Option<String>,
- pub listing_event: Option<RadrootsNostrEventPtrImport>,
- pub root_event_id: Option<String>,
- pub prev_event_id: Option<String>,
- pub payload: RadrootsCommercialMessagePayload,
-}
-
-#[derive(dto_bindgen::Dto)]
pub struct RadrootsTradeOrderWorkflowProjection {
pub order_id: String,
pub listing_addr: String,
@@ -543,7 +379,7 @@ pub struct RadrootsTradeOrderWorkflowProjection {
pub seller_pubkey: String,
pub items: Vec<RadrootsOrderItemImport>,
pub requested_discounts: Option<Vec<RadrootsOrderEconomicLineImport>>,
- pub status: RadrootsOrderStatus,
+ pub status: RadrootsTradeWorkflowState,
pub listing_snapshot: Option<RadrootsNostrEventPtrImport>,
pub root_event_id: String,
pub last_event_id: String,
@@ -552,15 +388,9 @@ pub struct RadrootsTradeOrderWorkflowProjection {
pub accepted_discount: Option<RadrootsCoreDiscountValueImport>,
pub last_reason: Option<String>,
pub last_discount_decline_reason: Option<String>,
- pub question_count: u32,
- pub answer_count: u32,
pub revision_count: u32,
- pub discount_request_count: u32,
- pub discount_offer_count: u32,
- pub discount_accept_count: u32,
- pub discount_decline_count: u32,
pub cancellation_count: u32,
- pub last_message_type: RadrootsCommercialMessageType,
+ pub last_message_type: RadrootsOrderEventTypeImport,
pub last_actor_pubkey: String,
}
@@ -620,21 +450,6 @@ fn unit_variant(rust_name: &str, wire_name: &str, file: &str, line: u32) -> Vari
VariantDef::new(rust_name, wire_name, VariantShape::Unit, span(file, line))
}
-fn payload_variant(
- rust_name: &str,
- wire_name: &str,
- ty: TypeRef,
- file: &str,
- line: u32,
-) -> VariantDef {
- VariantDef::new(
- rust_name,
- wire_name,
- VariantShape::Newtype(ty),
- span(file, line),
- )
-}
-
fn field(rust_name: &str, wire_name: &str, ty: TypeRef, file: &str, line: u32) -> FieldDef {
FieldDef::new(
IdentName::new(rust_name),
diff --git a/crates/trade_bindings/src/lib.rs b/crates/trade_bindings/src/lib.rs
@@ -38,6 +38,7 @@ pub const TRADE_TYPE_INVENTORY: &[TradeTypeInventoryEntry] = &[
event_import("RadrootsListingProduct"),
event_import("RadrootsListingPublicLocation"),
event_import("RadrootsListingStatus"),
+ event_import("RadrootsOrderEventType"),
local_shape("RadrootsTradeFacetCount"),
source_root("RadrootsTradeListing"),
local_shape("RadrootsTradeListingBackofficeOverlay"),
@@ -54,8 +55,6 @@ pub const TRADE_TYPE_INVENTORY: &[TradeTypeInventoryEntry] = &[
source_root("RadrootsTradeListingTotal"),
local_shape("RadrootsTradeMarketplaceListingSummary"),
local_shape("RadrootsTradeMarketplaceOrderSummary"),
- local_shape("RadrootsCommercialMessagePayload"),
- local_shape("RadrootsCommercialMessageType"),
local_shape("RadrootsTradeModerationFlag"),
local_shape("RadrootsTradeModerationSeverity"),
local_shape("RadrootsTradeModerationStatus"),
@@ -66,8 +65,6 @@ pub const TRADE_TYPE_INVENTORY: &[TradeTypeInventoryEntry] = &[
local_shape("RadrootsTradeOrderQuery"),
local_shape("RadrootsTradeOrderSort"),
local_shape("RadrootsTradeOrderSortField"),
- local_shape("RadrootsOrderStatus"),
- local_shape("RadrootsTradeOrderWorkflowMessage"),
local_shape("RadrootsTradeOrderWorkflowProjection"),
local_shape("RadrootsTradeReviewPriority"),
local_shape("RadrootsTradeReviewQueueEntry"),
@@ -97,25 +94,7 @@ pub const TRADE_LARGE_INTEGER_POLICIES: &[TradeLargeIntegerPolicyEntry] = &[
"RadrootsTradeOrderBackofficeView",
"open_moderation_flag_count",
),
- json_number_safe_count("RadrootsTradeOrderWorkflowProjection", "question_count"),
- json_number_safe_count("RadrootsTradeOrderWorkflowProjection", "answer_count"),
json_number_safe_count("RadrootsTradeOrderWorkflowProjection", "revision_count"),
- json_number_safe_count(
- "RadrootsTradeOrderWorkflowProjection",
- "discount_request_count",
- ),
- json_number_safe_count(
- "RadrootsTradeOrderWorkflowProjection",
- "discount_offer_count",
- ),
- json_number_safe_count(
- "RadrootsTradeOrderWorkflowProjection",
- "discount_accept_count",
- ),
- json_number_safe_count(
- "RadrootsTradeOrderWorkflowProjection",
- "discount_decline_count",
- ),
json_number_safe_count("RadrootsTradeOrderWorkflowProjection", "cancellation_count"),
];
@@ -186,6 +165,7 @@ mod tests {
"RadrootsListingProduct",
"RadrootsListingPublicLocation",
"RadrootsListingStatus",
+ "RadrootsOrderEventType",
"RadrootsTradeFacetCount",
"RadrootsTradeListing",
"RadrootsTradeListingBackofficeOverlay",
@@ -202,8 +182,6 @@ mod tests {
"RadrootsTradeListingTotal",
"RadrootsTradeMarketplaceListingSummary",
"RadrootsTradeMarketplaceOrderSummary",
- "RadrootsCommercialMessagePayload",
- "RadrootsCommercialMessageType",
"RadrootsTradeModerationFlag",
"RadrootsTradeModerationSeverity",
"RadrootsTradeModerationStatus",
@@ -214,8 +192,6 @@ mod tests {
"RadrootsTradeOrderQuery",
"RadrootsTradeOrderSort",
"RadrootsTradeOrderSortField",
- "RadrootsOrderStatus",
- "RadrootsTradeOrderWorkflowMessage",
"RadrootsTradeOrderWorkflowProjection",
"RadrootsTradeReviewPriority",
"RadrootsTradeReviewQueueEntry",
@@ -237,6 +213,7 @@ mod tests {
"RadrootsListingProduct",
"RadrootsListingPublicLocation",
"RadrootsListingStatus",
+ "RadrootsOrderEventType",
] {
assert_eq!(
disposition(export_name),
@@ -331,41 +308,11 @@ mod tests {
),
(
"RadrootsTradeOrderWorkflowProjection",
- "question_count",
- super::TradeLargeIntegerPolicy::JsonNumberSafeCount
- ),
- (
- "RadrootsTradeOrderWorkflowProjection",
- "answer_count",
- super::TradeLargeIntegerPolicy::JsonNumberSafeCount
- ),
- (
- "RadrootsTradeOrderWorkflowProjection",
"revision_count",
super::TradeLargeIntegerPolicy::JsonNumberSafeCount
),
(
"RadrootsTradeOrderWorkflowProjection",
- "discount_request_count",
- super::TradeLargeIntegerPolicy::JsonNumberSafeCount
- ),
- (
- "RadrootsTradeOrderWorkflowProjection",
- "discount_offer_count",
- super::TradeLargeIntegerPolicy::JsonNumberSafeCount
- ),
- (
- "RadrootsTradeOrderWorkflowProjection",
- "discount_accept_count",
- super::TradeLargeIntegerPolicy::JsonNumberSafeCount
- ),
- (
- "RadrootsTradeOrderWorkflowProjection",
- "discount_decline_count",
- super::TradeLargeIntegerPolicy::JsonNumberSafeCount
- ),
- (
- "RadrootsTradeOrderWorkflowProjection",
"cancellation_count",
super::TradeLargeIntegerPolicy::JsonNumberSafeCount
),
diff --git a/tools/sdk_xtask_import/src/dto_roots.rs b/tools/sdk_xtask_import/src/dto_roots.rs
@@ -155,17 +155,11 @@ const TRADE_EXTERNAL_OVERRIDES: &[DtoExternalOverride] = &[
events_override("RadrootsListingPublicLocation"),
events_override("RadrootsListingStatus"),
events_override("RadrootsNostrEventPtr"),
- events_override("RadrootsOrderCancellation"),
- events_override("RadrootsOrderDecision"),
events_override("RadrootsPlotRef"),
events_override("RadrootsResourceAreaRef"),
events_override("RadrootsOrderEconomicLine"),
+ events_override("RadrootsOrderEventType"),
events_override("RadrootsOrderItem"),
- events_override("RadrootsOrderRequest"),
- events_override("RadrootsOrderRevisionDecision"),
- events_override("RadrootsOrderRevisionProposal"),
- events_override("RadrootsTradeListingValidateRequest"),
- events_override("RadrootsTradeListingValidateResult"),
];
const TRADE_REQUIRED_EXTERNAL_PACKAGE_IMPORTS: &[&str] =
@@ -630,9 +624,6 @@ mod tests {
"RadrootsEventsIndexedIndexCheckpoint",
];
const TRADE_TYPE_INVENTORY: &[&str] = &[
- "RadrootsCommercialMessagePayload",
- "RadrootsCommercialMessageType",
- "RadrootsOrderStatus",
"RadrootsTradeFacetCount",
"RadrootsTradeListing",
"RadrootsTradeListingBackofficeOverlay",
@@ -659,7 +650,6 @@ mod tests {
"RadrootsTradeOrderQuery",
"RadrootsTradeOrderSort",
"RadrootsTradeOrderSortField",
- "RadrootsTradeOrderWorkflowMessage",
"RadrootsTradeOrderWorkflowProjection",
"RadrootsTradeReviewPriority",
"RadrootsTradeReviewQueueEntry",
@@ -922,12 +912,50 @@ mod tests {
assert!(TRADE_BINDINGS_TYPES_TS.contains("from \"@radroots/core-bindings\""));
assert!(TRADE_BINDINGS_TYPES_TS.contains("from \"@radroots/events-bindings\""));
+ let imports = imported_type_inventory(TRADE_BINDINGS_TYPES_TS);
+ assert!(
+ imports
+ .get("@radroots/events-bindings")
+ .is_some_and(|names| names.contains("RadrootsOrderEventType"))
+ );
+
for duplicate in [
"export type RadrootsListing = ",
"export type RadrootsFarmRef = ",
+ "export type RadrootsCommercialMessagePayload = ",
+ "export type RadrootsCommercialMessageType = ",
+ "export type RadrootsOrderStatus = ",
+ "export type RadrootsTradeOrderWorkflowMessage = ",
] {
assert!(!TRADE_BINDINGS_TYPES_TS.contains(duplicate));
}
+
+ let marketplace_order_summary = type_declaration(
+ TRADE_BINDINGS_TYPES_TS,
+ "RadrootsTradeMarketplaceOrderSummary",
+ );
+ assert!(marketplace_order_summary.contains("status: RadrootsTradeWorkflowState"));
+ assert!(marketplace_order_summary.contains("last_message_type: RadrootsOrderEventType"));
+
+ let order_query = type_declaration(TRADE_BINDINGS_TYPES_TS, "RadrootsTradeOrderQuery");
+ assert!(order_query.contains("status?: RadrootsTradeWorkflowState | null"));
+
+ let workflow_projection = type_declaration(
+ TRADE_BINDINGS_TYPES_TS,
+ "RadrootsTradeOrderWorkflowProjection",
+ );
+ assert!(workflow_projection.contains("status: RadrootsTradeWorkflowState"));
+ assert!(workflow_projection.contains("last_message_type: RadrootsOrderEventType"));
+ for stale_counter in [
+ "question_count",
+ "answer_count",
+ "discount_request_count",
+ "discount_offer_count",
+ "discount_accept_count",
+ "discount_decline_count",
+ ] {
+ assert!(!workflow_projection.contains(stale_counter));
+ }
}
fn type_inventory(types_ts: &str) -> Vec<&str> {