web_lib

Common web application libraries
git clone https://radroots.dev/git/web_lib.git
Log | Files | Refs | LICENSE

commit 42025a7bf4405ff0797eb8f17219f2b715c0f6da
parent d4fcea5628fe5ed5b6a1b96f0c9daadcec60486a
Author: triesap <triesap@radroots.dev>
Date:   Mon, 22 Dec 2025 21:31:00 +0000

trade: align listing stage kinds across packages

- replace TradeListingStage enum usage with TRADE_LISTING_STAGE constants
- tighten stage typing via TradeListingStageKind in flow manager/types
- add shared stage constants and kind arrays in utils-nostr
- adjust package metadata and remove apps-lib-market justfile/dev dep

Diffstat:
Dapps-lib-market/justfile | 7-------
Mapps-lib-market/package.json | 1-
Mapps-lib-market/src/lib/components/features/profile-listing.svelte | 7+++----
Mapps-lib-market/src/lib/utils/nostr/trade/listing/manager.svelte.ts | 130++++++++++++++++++++++++++++++++++++++++---------------------------------------
Mapps-lib-market/src/lib/utils/nostr/trade/listing/types.ts | 62++++++++++++++++++++++++++++++++------------------------------
Mclient/package.json | 6+++++-
Mutils-nostr/src/domain/trade/lib.ts | 31+++++++++++++++++++++++++++++--
Mutils-nostr/src/domain/trade/listing/invoice/lib.ts | 5++---
Mutils-nostr/src/events/job/utils.ts | 16++++++++--------
9 files changed, 145 insertions(+), 120 deletions(-)

diff --git a/apps-lib-market/justfile b/apps-lib-market/justfile @@ -1,6 +0,0 @@ -gen: - gen-app-env.js && gen-package-exports.js --is_module --is_relative --dir src/lib --out src/lib -build: - just gen && yarn build -genp: - ts-generate-code-prompt.py --dir src -\ No newline at end of file diff --git a/apps-lib-market/package.json b/apps-lib-market/package.json @@ -36,7 +36,6 @@ "svelte": "^5.0.0" }, "devDependencies": { - "@radroots/dev": "workspace:*", "@sveltejs/adapter-auto": "^4.0.0", "@sveltejs/kit": "^2.22.0", "@sveltejs/package": "^2.0.0", diff --git a/apps-lib-market/src/lib/components/features/profile-listing.svelte b/apps-lib-market/src/lib/components/features/profile-listing.svelte @@ -7,8 +7,8 @@ } from "$root"; import type { RadrootsListing } from "@radroots/events-bindings"; + import { TRADE_LISTING_STAGE } from "@radroots/utils-nostr"; import { - TradeListingStage, type TradeListingOrderRequestPayload, } from "@radroots/trade-bindings"; @@ -65,12 +65,11 @@ ); const is_loading = $derived<boolean>(!!latest_order?.loading); - // Access results/feedback by enum key, not string const last_order_result = $derived( - latest_order?.results?.[TradeListingStage.Order]?.at(-1), + latest_order?.results?.[TRADE_LISTING_STAGE.Order]?.at(-1), ); const last_feedback = $derived( - latest_order?.feedback?.[TradeListingStage.Order]?.at(-1), + latest_order?.feedback?.[TRADE_LISTING_STAGE.Order]?.at(-1), ); // ---- Actions ---- diff --git a/apps-lib-market/src/lib/utils/nostr/trade/listing/manager.svelte.ts b/apps-lib-market/src/lib/utils/nostr/trade/listing/manager.svelte.ts @@ -1,12 +1,13 @@ import NDK, { NDKEvent, NDKSubscription, NDKUser } from "@nostr-dev-kit/ndk"; import { KIND_JOB_FEEDBACK } from "@radroots/events-bindings"; -import { MARKER_LISTING, TradeListingStage, type TradeListingAcceptRequest, type TradeListingConveyanceRequest, type TradeListingFulfillmentRequest, type TradeListingInvoiceRequest, type TradeListingOrderRequestPayload, type TradeListingPaymentProofRequest, type TradeListingReceiptRequest } from "@radroots/trade-bindings"; +import { MARKER_LISTING, type TradeListingAcceptRequest, type TradeListingConveyanceRequest, type TradeListingFulfillmentRequest, type TradeListingInvoiceRequest, type TradeListingOrderRequestPayload, type TradeListingPaymentProofRequest, type TradeListingReceiptRequest } from "@radroots/trade-bindings"; import { time_now_ms } from "@radroots/utils"; import { KIND_RADROOTS_LISTING, REQUEST_KINDS, RESULT_KINDS, TAG_E, + TRADE_LISTING_STAGE, get_event_tag, get_job_input_data_for_marker, get_trade_listing_stage_from_event_kind, @@ -18,6 +19,7 @@ import { ndk_event_trade_listing_payment_request, ndk_event_trade_listing_receipt_request, } from "@radroots/utils-nostr"; +import type { TradeListingStageKind } from "@radroots/utils-nostr"; import { SvelteMap, SvelteSet } from "svelte/reactivity"; import type { AcceptOptions, @@ -166,13 +168,13 @@ export class TradeFlowServiceImpl implements TradeFlowService { } } - async accept_request(opts: AcceptOptions): Promise<StageActionResult<TradeListingStage.Accept>> { + async accept_request(opts: AcceptOptions): Promise<StageActionResult<typeof TRADE_LISTING_STAGE.Accept>> { const { listing_id, order_id, timeout_ms } = opts; - const prereq_id = this.resolve_input_event_id(TradeListingStage.Accept, listing_id, order_id); + const prereq_id = this.resolve_input_event_id(TRADE_LISTING_STAGE.Accept, listing_id, order_id); if (!prereq_id) { - const err: StageActionErr<TradeListingStage.Accept> = { + const err: StageActionErr<typeof TRADE_LISTING_STAGE.Accept> = { ok: false, - stage: TradeListingStage.Accept, + stage: TRADE_LISTING_STAGE.Accept, error: "error.missing_prerequisite", }; return err; @@ -189,16 +191,16 @@ export class TradeFlowServiceImpl implements TradeFlowService { data, }) ); - return this.await_stage_result(TradeListingStage.Accept, { + return this.await_stage_result(TRADE_LISTING_STAGE.Accept, { listing_id, order_id, request, timeout_ms, }); } catch { - const err: StageActionErr<TradeListingStage.Accept> = { + const err: StageActionErr<typeof TRADE_LISTING_STAGE.Accept> = { ok: false, - stage: TradeListingStage.Accept, + stage: TRADE_LISTING_STAGE.Accept, error: "error.failed_to_publish", }; return err; @@ -207,17 +209,17 @@ export class TradeFlowServiceImpl implements TradeFlowService { async conveyance_request( opts: ConveyanceOptions - ): Promise<StageActionResult<TradeListingStage.Conveyance>> { + ): Promise<StageActionResult<typeof TRADE_LISTING_STAGE.Conveyance>> { const { listing_id, order_id, method, timeout_ms } = opts; const prereq_id = this.resolve_input_event_id( - TradeListingStage.Conveyance, + TRADE_LISTING_STAGE.Conveyance, listing_id, order_id ); if (!prereq_id) { - const err: StageActionErr<TradeListingStage.Conveyance> = { + const err: StageActionErr<typeof TRADE_LISTING_STAGE.Conveyance> = { ok: false, - stage: TradeListingStage.Conveyance, + stage: TRADE_LISTING_STAGE.Conveyance, error: "error.missing_prerequisite", }; return err; @@ -234,16 +236,16 @@ export class TradeFlowServiceImpl implements TradeFlowService { data, }) ); - return this.await_stage_result(TradeListingStage.Conveyance, { + return this.await_stage_result(TRADE_LISTING_STAGE.Conveyance, { listing_id, order_id, request, timeout_ms, }); } catch { - const err: StageActionErr<TradeListingStage.Conveyance> = { + const err: StageActionErr<typeof TRADE_LISTING_STAGE.Conveyance> = { ok: false, - stage: TradeListingStage.Conveyance, + stage: TRADE_LISTING_STAGE.Conveyance, error: "error.failed_to_publish", }; return err; @@ -252,13 +254,13 @@ export class TradeFlowServiceImpl implements TradeFlowService { async invoice_request( opts: InvoiceOptions - ): Promise<StageActionResult<TradeListingStage.Invoice>> { + ): Promise<StageActionResult<typeof TRADE_LISTING_STAGE.Invoice>> { const { listing_id, order_id, timeout_ms } = opts; - const prereq_id = this.resolve_input_event_id(TradeListingStage.Invoice, listing_id, order_id); + const prereq_id = this.resolve_input_event_id(TRADE_LISTING_STAGE.Invoice, listing_id, order_id); if (!prereq_id) { - const err: StageActionErr<TradeListingStage.Invoice> = { + const err: StageActionErr<typeof TRADE_LISTING_STAGE.Invoice> = { ok: false, - stage: TradeListingStage.Invoice, + stage: TRADE_LISTING_STAGE.Invoice, error: "error.missing_prerequisite", }; return err; @@ -272,16 +274,16 @@ export class TradeFlowServiceImpl implements TradeFlowService { data, }) ); - return this.await_stage_result(TradeListingStage.Invoice, { + return this.await_stage_result(TRADE_LISTING_STAGE.Invoice, { listing_id, order_id, request, timeout_ms, }); } catch { - const err: StageActionErr<TradeListingStage.Invoice> = { + const err: StageActionErr<typeof TRADE_LISTING_STAGE.Invoice> = { ok: false, - stage: TradeListingStage.Invoice, + stage: TRADE_LISTING_STAGE.Invoice, error: "error.failed_to_publish", }; return err; @@ -290,13 +292,13 @@ export class TradeFlowServiceImpl implements TradeFlowService { async payment_request( opts: PaymentOptions - ): Promise<StageActionResult<TradeListingStage.Payment>> { + ): Promise<StageActionResult<typeof TRADE_LISTING_STAGE.Payment>> { const { listing_id, order_id, proof, timeout_ms } = opts; - const prereq_id = this.resolve_input_event_id(TradeListingStage.Payment, listing_id, order_id); + const prereq_id = this.resolve_input_event_id(TRADE_LISTING_STAGE.Payment, listing_id, order_id); if (!prereq_id) { - const err: StageActionErr<TradeListingStage.Payment> = { + const err: StageActionErr<typeof TRADE_LISTING_STAGE.Payment> = { ok: false, - stage: TradeListingStage.Payment, + stage: TRADE_LISTING_STAGE.Payment, error: "error.missing_prerequisite", }; return err; @@ -313,16 +315,16 @@ export class TradeFlowServiceImpl implements TradeFlowService { data, }) ); - return this.await_stage_result(TradeListingStage.Payment, { + return this.await_stage_result(TRADE_LISTING_STAGE.Payment, { listing_id, order_id, request, timeout_ms, }); } catch { - const err: StageActionErr<TradeListingStage.Payment> = { + const err: StageActionErr<typeof TRADE_LISTING_STAGE.Payment> = { ok: false, - stage: TradeListingStage.Payment, + stage: TRADE_LISTING_STAGE.Payment, error: "error.failed_to_publish", }; return err; @@ -331,17 +333,17 @@ export class TradeFlowServiceImpl implements TradeFlowService { async fulfillment_request( opts: FulfillmentOptions - ): Promise<StageActionResult<TradeListingStage.Fulfillment>> { + ): Promise<StageActionResult<typeof TRADE_LISTING_STAGE.Fulfillment>> { const { listing_id, order_id, timeout_ms } = opts; const prereq_id = this.resolve_input_event_id( - TradeListingStage.Fulfillment, + TRADE_LISTING_STAGE.Fulfillment, listing_id, order_id ); if (!prereq_id) { - const err: StageActionErr<TradeListingStage.Fulfillment> = { + const err: StageActionErr<typeof TRADE_LISTING_STAGE.Fulfillment> = { ok: false, - stage: TradeListingStage.Fulfillment, + stage: TRADE_LISTING_STAGE.Fulfillment, error: "error.missing_prerequisite", }; return err; @@ -355,16 +357,16 @@ export class TradeFlowServiceImpl implements TradeFlowService { data, }) ); - return this.await_stage_result(TradeListingStage.Fulfillment, { + return this.await_stage_result(TRADE_LISTING_STAGE.Fulfillment, { listing_id, order_id, request, timeout_ms, }); } catch { - const err: StageActionErr<TradeListingStage.Fulfillment> = { + const err: StageActionErr<typeof TRADE_LISTING_STAGE.Fulfillment> = { ok: false, - stage: TradeListingStage.Fulfillment, + stage: TRADE_LISTING_STAGE.Fulfillment, error: "error.failed_to_publish", }; return err; @@ -373,13 +375,13 @@ export class TradeFlowServiceImpl implements TradeFlowService { async receipt_request( opts: ReceiptOptions - ): Promise<StageActionResult<TradeListingStage.Receipt>> { + ): Promise<StageActionResult<typeof TRADE_LISTING_STAGE.Receipt>> { const { listing_id, order_id, note, timeout_ms } = opts; - const prereq_id = this.resolve_input_event_id(TradeListingStage.Receipt, listing_id, order_id); + const prereq_id = this.resolve_input_event_id(TRADE_LISTING_STAGE.Receipt, listing_id, order_id); if (!prereq_id) { - const err: StageActionErr<TradeListingStage.Receipt> = { + const err: StageActionErr<typeof TRADE_LISTING_STAGE.Receipt> = { ok: false, - stage: TradeListingStage.Receipt, + stage: TRADE_LISTING_STAGE.Receipt, error: "error.missing_prerequisite", }; return err; @@ -395,16 +397,16 @@ export class TradeFlowServiceImpl implements TradeFlowService { data, }) ); - return this.await_stage_result(TradeListingStage.Receipt, { + return this.await_stage_result(TRADE_LISTING_STAGE.Receipt, { listing_id, order_id, request, timeout_ms, }); } catch { - const err: StageActionErr<TradeListingStage.Receipt> = { + const err: StageActionErr<typeof TRADE_LISTING_STAGE.Receipt> = { ok: false, - stage: TradeListingStage.Receipt, + stage: TRADE_LISTING_STAGE.Receipt, error: "error.failed_to_publish", }; return err; @@ -413,20 +415,20 @@ export class TradeFlowServiceImpl implements TradeFlowService { post(input: StagePostInput): Promise<StagePostOutput> { switch (input.stage) { - case TradeListingStage.Accept: + case TRADE_LISTING_STAGE.Accept: return this.accept_request(input.opts); - case TradeListingStage.Conveyance: + case TRADE_LISTING_STAGE.Conveyance: return this.conveyance_request(input.opts); - case TradeListingStage.Invoice: + case TRADE_LISTING_STAGE.Invoice: return this.invoice_request(input.opts); - case TradeListingStage.Payment: + case TRADE_LISTING_STAGE.Payment: return this.payment_request(input.opts); - case TradeListingStage.Fulfillment: + case TRADE_LISTING_STAGE.Fulfillment: return this.fulfillment_request(input.opts); - case TradeListingStage.Receipt: + case TRADE_LISTING_STAGE.Receipt: return this.receipt_request(input.opts); - case TradeListingStage.Cancel: - case TradeListingStage.Refund: + case TRADE_LISTING_STAGE.Cancel: + case TRADE_LISTING_STAGE.Refund: return Promise.resolve({ ok: false, stage: input.stage, @@ -456,7 +458,7 @@ export class TradeFlowServiceImpl implements TradeFlowService { this.waiters_by_request.clear(); } - private async await_stage_result<S extends TradeListingStage>( + private async await_stage_result<S extends TradeListingStageKind>( stage: S, params: { listing_id: string; @@ -773,7 +775,7 @@ export class TradeFlowServiceImpl implements TradeFlowService { } private resolve_input_event_id( - stage: Exclude<TradeListingStage, TradeListingStage.Order>, + stage: Exclude<TradeListingStageKind, typeof TRADE_LISTING_STAGE.Order>, listing_id: string, order_id: string ): string | undefined { @@ -786,23 +788,23 @@ export class TradeFlowServiceImpl implements TradeFlowService { }; if ( - stage === TradeListingStage.Accept || - stage === TradeListingStage.Cancel || - stage === TradeListingStage.Refund + stage === TRADE_LISTING_STAGE.Accept || + stage === TRADE_LISTING_STAGE.Cancel || + stage === TRADE_LISTING_STAGE.Refund ) { return order_id; } - if (stage === TradeListingStage.Conveyance || stage === TradeListingStage.Invoice) { - return last_id(bundle.results.Accept); + if (stage === TRADE_LISTING_STAGE.Conveyance || stage === TRADE_LISTING_STAGE.Invoice) { + return last_id(bundle.results[TRADE_LISTING_STAGE.Accept]); } - if (stage === TradeListingStage.Payment) { - return last_id(bundle.results.Invoice); + if (stage === TRADE_LISTING_STAGE.Payment) { + return last_id(bundle.results[TRADE_LISTING_STAGE.Invoice]); } - if (stage === TradeListingStage.Fulfillment) { - return last_id(bundle.results.Payment); + if (stage === TRADE_LISTING_STAGE.Fulfillment) { + return last_id(bundle.results[TRADE_LISTING_STAGE.Payment]); } - if (stage === TradeListingStage.Receipt) { - return last_id(bundle.results.Fulfillment); + if (stage === TRADE_LISTING_STAGE.Receipt) { + return last_id(bundle.results[TRADE_LISTING_STAGE.Fulfillment]); } return undefined; } diff --git a/apps-lib-market/src/lib/utils/nostr/trade/listing/types.ts b/apps-lib-market/src/lib/utils/nostr/trade/listing/types.ts @@ -1,9 +1,11 @@ import { NDKEvent, NDKUser } from "@nostr-dev-kit/ndk"; import type { ndk, StoreWritable } from "@radroots/apps-lib"; -import type { TradeListingConveyanceRequest, TradeListingOrderRequestPayload, TradeListingPaymentProofRequest, TradeListingStage } from "@radroots/trade-bindings"; +import type { TradeListingConveyanceRequest, TradeListingOrderRequestPayload, TradeListingPaymentProofRequest } from "@radroots/trade-bindings"; +import { TRADE_LISTING_STAGE } from "@radroots/utils-nostr"; +import type { TradeListingStageKind } from "@radroots/utils-nostr"; import type { SvelteMap } from "svelte/reactivity"; -export type TradeListingStageKey = keyof typeof TradeListingStage; +export type TradeListingStageKey = keyof typeof TRADE_LISTING_STAGE; export type TradeFlowServiceError = | "error.failed_to_publish" @@ -17,9 +19,9 @@ export type TradeFlowServiceError = export interface OrderBundle { order_id?: string; listing_id: string; - requests: Partial<Record<TradeListingStage, NDKEvent[]>>; - results: Partial<Record<TradeListingStage, NDKEvent[]>>; - feedback: Partial<Record<TradeListingStage, NDKEvent[]>>; + requests: Partial<Record<TradeListingStageKind, NDKEvent[]>>; + results: Partial<Record<TradeListingStageKind, NDKEvent[]>>; + feedback: Partial<Record<TradeListingStageKind, NDKEvent[]>>; started_at?: number; last_update_at?: number; loading: boolean; @@ -47,7 +49,7 @@ export type OrderRequestErr = { export type OrderRequestResult = OrderRequestOk | OrderRequestErr; -export type StageActionOk<S extends TradeListingStage> = { +export type StageActionOk<S extends TradeListingStageKind> = { ok: true; stage: S; request: NDKEvent; @@ -56,14 +58,14 @@ export type StageActionOk<S extends TradeListingStage> = { bundle?: OrderBundle; }; -export type StageActionErr<S extends TradeListingStage> = { +export type StageActionErr<S extends TradeListingStageKind> = { ok: false; stage: S; error: TradeFlowServiceError; request?: NDKEvent; }; -export type StageActionResult<S extends TradeListingStage> = StageActionOk<S> | StageActionErr<S>; +export type StageActionResult<S extends TradeListingStageKind> = StageActionOk<S> | StageActionErr<S>; export type AcceptOptions = { listing_id: string; @@ -118,24 +120,24 @@ export type RefundOptions = { export type StagePostInput = - | { stage: TradeListingStage.Accept; opts: AcceptOptions } - | { stage: TradeListingStage.Conveyance; opts: ConveyanceOptions } - | { stage: TradeListingStage.Invoice; opts: InvoiceOptions } - | { stage: TradeListingStage.Payment; opts: PaymentOptions } - | { stage: TradeListingStage.Fulfillment; opts: FulfillmentOptions } - | { stage: TradeListingStage.Receipt; opts: ReceiptOptions } - | { stage: TradeListingStage.Cancel; opts: CancelOptions } - | { stage: TradeListingStage.Refund; opts: RefundOptions }; + | { stage: typeof TRADE_LISTING_STAGE.Accept; opts: AcceptOptions } + | { stage: typeof TRADE_LISTING_STAGE.Conveyance; opts: ConveyanceOptions } + | { stage: typeof TRADE_LISTING_STAGE.Invoice; opts: InvoiceOptions } + | { stage: typeof TRADE_LISTING_STAGE.Payment; opts: PaymentOptions } + | { stage: typeof TRADE_LISTING_STAGE.Fulfillment; opts: FulfillmentOptions } + | { stage: typeof TRADE_LISTING_STAGE.Receipt; opts: ReceiptOptions } + | { stage: typeof TRADE_LISTING_STAGE.Cancel; opts: CancelOptions } + | { stage: typeof TRADE_LISTING_STAGE.Refund; opts: RefundOptions }; export type StagePostOutput = - | StageActionResult<TradeListingStage.Accept> - | StageActionResult<TradeListingStage.Conveyance> - | StageActionResult<TradeListingStage.Invoice> - | StageActionResult<TradeListingStage.Payment> - | StageActionResult<TradeListingStage.Fulfillment> - | StageActionResult<TradeListingStage.Receipt> - | StageActionErr<TradeListingStage.Cancel> - | StageActionErr<TradeListingStage.Refund>; + | StageActionResult<typeof TRADE_LISTING_STAGE.Accept> + | StageActionResult<typeof TRADE_LISTING_STAGE.Conveyance> + | StageActionResult<typeof TRADE_LISTING_STAGE.Invoice> + | StageActionResult<typeof TRADE_LISTING_STAGE.Payment> + | StageActionResult<typeof TRADE_LISTING_STAGE.Fulfillment> + | StageActionResult<typeof TRADE_LISTING_STAGE.Receipt> + | StageActionErr<typeof TRADE_LISTING_STAGE.Cancel> + | StageActionErr<typeof TRADE_LISTING_STAGE.Refund>; export interface CreateTradeFlowServiceOptions { ndk: StoreWritable<typeof ndk>; @@ -165,16 +167,16 @@ export interface TradeFlowService { timeout_ms?: number ): Promise<OrderRequestResult>; - accept_request(opts: AcceptOptions): Promise<StageActionResult<TradeListingStage.Accept>>; + accept_request(opts: AcceptOptions): Promise<StageActionResult<typeof TRADE_LISTING_STAGE.Accept>>; conveyance_request( opts: ConveyanceOptions - ): Promise<StageActionResult<TradeListingStage.Conveyance>>; - invoice_request(opts: InvoiceOptions): Promise<StageActionResult<TradeListingStage.Invoice>>; - payment_request(opts: PaymentOptions): Promise<StageActionResult<TradeListingStage.Payment>>; + ): Promise<StageActionResult<typeof TRADE_LISTING_STAGE.Conveyance>>; + invoice_request(opts: InvoiceOptions): Promise<StageActionResult<typeof TRADE_LISTING_STAGE.Invoice>>; + payment_request(opts: PaymentOptions): Promise<StageActionResult<typeof TRADE_LISTING_STAGE.Payment>>; fulfillment_request( opts: FulfillmentOptions - ): Promise<StageActionResult<TradeListingStage.Fulfillment>>; - receipt_request(opts: ReceiptOptions): Promise<StageActionResult<TradeListingStage.Receipt>>; + ): Promise<StageActionResult<typeof TRADE_LISTING_STAGE.Fulfillment>>; + receipt_request(opts: ReceiptOptions): Promise<StageActionResult<typeof TRADE_LISTING_STAGE.Receipt>>; post(input: StagePostInput): Promise<StagePostOutput>; diff --git a/client/package.json b/client/package.json @@ -80,6 +80,7 @@ "@radroots/http": "workspace:*", "@radroots/tangle-schema-bindings": "workspace:*", "@radroots/tangle-sql-wasm": "workspace:*", + "@radroots/types-bindings": "workspace:*", "@radroots/utils": "workspace:*", "@radroots/utils-nostr": "workspace:*", "idb": "^8.0.3", @@ -87,11 +88,13 @@ "sql.js": "1.13.0" }, "devDependencies": { + "@radroots/tsconfig": "workspace:*", "@types/debug": "^4.1.12", + "@types/sql.js": "^1.4.9", "rimraf": "^6.0.1", "typescript": "^5.3.3" }, "publishConfig": { "access": "public" } -} +} +\ No newline at end of file diff --git a/utils-nostr/src/domain/trade/lib.ts b/utils-nostr/src/domain/trade/lib.ts @@ -1,6 +1,33 @@ import { KIND_TRADE_LISTING_ACCEPT_REQ, KIND_TRADE_LISTING_ACCEPT_RES, KIND_TRADE_LISTING_CANCEL_REQ, KIND_TRADE_LISTING_CANCEL_RES, KIND_TRADE_LISTING_CONVEYANCE_REQ, KIND_TRADE_LISTING_CONVEYANCE_RES, KIND_TRADE_LISTING_FULFILL_REQ, KIND_TRADE_LISTING_FULFILL_RES, KIND_TRADE_LISTING_INVOICE_REQ, KIND_TRADE_LISTING_INVOICE_RES, KIND_TRADE_LISTING_ORDER_REQ, KIND_TRADE_LISTING_ORDER_RES, KIND_TRADE_LISTING_PAYMENT_REQ, KIND_TRADE_LISTING_PAYMENT_RES, KIND_TRADE_LISTING_RECEIPT_REQ, KIND_TRADE_LISTING_RECEIPT_RES, KIND_TRADE_LISTING_REFUND_REQ, KIND_TRADE_LISTING_REFUND_RES } from "@radroots/trade-bindings"; +import type { TradeListingStage } from "@radroots/trade-bindings"; -export const REQUEST_KINDS: Record<string, number> = { +export type TradeListingStageKind = TradeListingStage["kind"]; + +export const TRADE_LISTING_STAGE = { + Order: "order", + Accept: "accept", + Conveyance: "conveyance", + Invoice: "invoice", + Payment: "payment", + Fulfillment: "fulfillment", + Receipt: "receipt", + Cancel: "cancel", + Refund: "refund", +} as const satisfies Record<string, TradeListingStageKind>; + +export const TRADE_LISTING_STAGE_KINDS = [ + TRADE_LISTING_STAGE.Order, + TRADE_LISTING_STAGE.Accept, + TRADE_LISTING_STAGE.Conveyance, + TRADE_LISTING_STAGE.Invoice, + TRADE_LISTING_STAGE.Payment, + TRADE_LISTING_STAGE.Fulfillment, + TRADE_LISTING_STAGE.Receipt, + TRADE_LISTING_STAGE.Cancel, + TRADE_LISTING_STAGE.Refund, +] as const satisfies readonly TradeListingStageKind[]; + +export const REQUEST_KINDS: Record<TradeListingStageKind, number> = { order: KIND_TRADE_LISTING_ORDER_REQ, accept: KIND_TRADE_LISTING_ACCEPT_REQ, conveyance: KIND_TRADE_LISTING_CONVEYANCE_REQ, @@ -12,7 +39,7 @@ export const REQUEST_KINDS: Record<string, number> = { refund: KIND_TRADE_LISTING_REFUND_REQ, }; -export const RESULT_KINDS: Record<string, number> = { +export const RESULT_KINDS: Record<TradeListingStageKind, number> = { order: KIND_TRADE_LISTING_ORDER_RES, accept: KIND_TRADE_LISTING_ACCEPT_RES, conveyance: KIND_TRADE_LISTING_CONVEYANCE_RES, diff --git a/utils-nostr/src/domain/trade/listing/invoice/lib.ts b/utils-nostr/src/domain/trade/listing/invoice/lib.ts @@ -53,7 +53,7 @@ export const ndk_event_trade_listing_invoice_result = async ( parsed ? { payment_sat: parsed.total_sat, - payment_bolt11: parsed.bolt11, + payment_bolt11: parsed.bolt11 ?? undefined, } : undefined ); @@ -70,4 +70,4 @@ export const ndk_event_trade_listing_invoice_result = async ( client: opts.client, date_published: opts.date_published, }); -}; -\ No newline at end of file +}; diff --git a/utils-nostr/src/events/job/utils.ts b/utils-nostr/src/events/job/utils.ts @@ -1,9 +1,11 @@ import { JobInputType, KIND_JOB_FEEDBACK } from "@radroots/events-bindings"; -import { TradeListingStage } from "@radroots/trade-bindings"; import { REQUEST_KINDS, RESULT_KINDS, + TRADE_LISTING_STAGE, + TRADE_LISTING_STAGE_KINDS, } from "../../domain/trade/lib.js"; +import type { TradeListingStageKind } from "../../domain/trade/lib.js"; import type { NostrEventTags } from "../../types/lib.js"; export function get_job_input_data_for_marker( @@ -22,13 +24,11 @@ export function get_job_input_data_for_marker( export function get_trade_listing_stage_from_event_kind( kind: number -): TradeListingStage | undefined { - for (const key of Object.keys(REQUEST_KINDS) as TradeListingStage[]) { - if (REQUEST_KINDS[key] === kind) return key; +): TradeListingStageKind | undefined { + for (const stage_kind of TRADE_LISTING_STAGE_KINDS) { + if (REQUEST_KINDS[stage_kind] === kind) return stage_kind; + if (RESULT_KINDS[stage_kind] === kind) return stage_kind; } - for (const key of Object.keys(RESULT_KINDS) as TradeListingStage[]) { - if (RESULT_KINDS[key] === kind) return key; - } - if (kind === KIND_JOB_FEEDBACK) return TradeListingStage.Order; + if (kind === KIND_JOB_FEEDBACK) return TRADE_LISTING_STAGE.Order; return undefined; }