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