From 14422f3b259b380cec146e4732cd3b0d21e357ec Mon Sep 17 00:00:00 2001 From: panteliselef Date: Fri, 25 Apr 2025 21:36:20 +0300 Subject: [PATCH 1/2] chore(clerk-js,types): Split `CommerceTotals` to `CommerceCheckoutTotals` and `CommerceInvoiceTotals` --- .changeset/nine-pets-learn.md | 6 +++++ .../src/core/resources/CommerceCheckout.ts | 4 ++-- .../src/core/resources/CommerceInvoice.ts | 4 ++-- packages/clerk-js/src/utils/commerce.ts | 23 +++++++++++++++---- packages/types/src/commerce.ts | 9 +++++--- packages/types/src/json.ts | 9 +++++--- 6 files changed, 40 insertions(+), 15 deletions(-) create mode 100644 .changeset/nine-pets-learn.md diff --git a/.changeset/nine-pets-learn.md b/.changeset/nine-pets-learn.md new file mode 100644 index 00000000000..b490fb5d754 --- /dev/null +++ b/.changeset/nine-pets-learn.md @@ -0,0 +1,6 @@ +--- +'@clerk/clerk-js': patch +'@clerk/types': patch +--- + +Split `CommerceTotals` to `CommerceCheckoutTotals` and `CommerceInvoiceTotals`. diff --git a/packages/clerk-js/src/core/resources/CommerceCheckout.ts b/packages/clerk-js/src/core/resources/CommerceCheckout.ts index 5c5c4c2f4df..24793d4f3c1 100644 --- a/packages/clerk-js/src/core/resources/CommerceCheckout.ts +++ b/packages/clerk-js/src/core/resources/CommerceCheckout.ts @@ -1,8 +1,8 @@ import type { __experimental_CommerceCheckoutJSON, __experimental_CommerceCheckoutResource, + __experimental_CommerceCheckoutTotals, __experimental_CommerceSubscriptionPlanPeriod, - __experimental_CommerceTotals, __experimental_ConfirmCheckoutParams, } from '@clerk/types'; @@ -24,7 +24,7 @@ export class __experimental_CommerceCheckout extends BaseResource implements __e planPeriod!: __experimental_CommerceSubscriptionPlanPeriod; status!: string; subscription?: __experimental_CommerceSubscription; - totals!: __experimental_CommerceTotals; + totals!: __experimental_CommerceCheckoutTotals; constructor(data: __experimental_CommerceCheckoutJSON, orgId?: string) { super(); diff --git a/packages/clerk-js/src/core/resources/CommerceInvoice.ts b/packages/clerk-js/src/core/resources/CommerceInvoice.ts index e4c6654944b..921ea59f9cd 100644 --- a/packages/clerk-js/src/core/resources/CommerceInvoice.ts +++ b/packages/clerk-js/src/core/resources/CommerceInvoice.ts @@ -2,7 +2,7 @@ import type { __experimental_CommerceInvoiceJSON, __experimental_CommerceInvoiceResource, __experimental_CommerceInvoiceStatus, - __experimental_CommerceTotals, + __experimental_CommerceInvoiceTotals, } from '@clerk/types'; import { commerceTotalsFromJSON } from '../../utils'; @@ -15,7 +15,7 @@ export class __experimental_CommerceInvoice extends BaseResource implements __ex paymentDueOn!: number; paidOn!: number; status!: __experimental_CommerceInvoiceStatus; - totals!: __experimental_CommerceTotals; + totals!: __experimental_CommerceInvoiceTotals; constructor(data: __experimental_CommerceInvoiceJSON) { super(); diff --git a/packages/clerk-js/src/utils/commerce.ts b/packages/clerk-js/src/utils/commerce.ts index a3868a1401c..d558eb90612 100644 --- a/packages/clerk-js/src/utils/commerce.ts +++ b/packages/clerk-js/src/utils/commerce.ts @@ -1,8 +1,10 @@ import type { + __experimental_CommerceCheckoutTotals, + __experimental_CommerceCheckoutTotalsJSON, + __experimental_CommerceInvoiceTotals, + __experimental_CommerceInvoiceTotalsJSON, __experimental_CommerceMoney, __experimental_CommerceMoneyJSON, - __experimental_CommerceTotals, - __experimental_CommerceTotalsJSON, } from '@clerk/types'; export const commerceMoneyFromJSON = (data: __experimental_CommerceMoneyJSON): __experimental_CommerceMoney => { @@ -14,11 +16,22 @@ export const commerceMoneyFromJSON = (data: __experimental_CommerceMoneyJSON): _ }; }; -export const commerceTotalsFromJSON = (data: __experimental_CommerceTotalsJSON): __experimental_CommerceTotals => { - return { +export const commerceTotalsFromJSON = < + T extends __experimental_CommerceInvoiceTotalsJSON | __experimental_CommerceCheckoutTotalsJSON, +>( + data: T, +) => { + const totals = { grandTotal: commerceMoneyFromJSON(data.grand_total), subtotal: commerceMoneyFromJSON(data.subtotal), taxTotal: commerceMoneyFromJSON(data.tax_total), - totalDueNow: commerceMoneyFromJSON(data.total_due_now), }; + if ('total_due_now' in data) { + // @ts-ignore + totals['totalDueNow'] = commerceMoneyFromJSON(data.total_due_now); + } + + return totals as T extends { total_due_now: __experimental_CommerceMoneyJSON } + ? __experimental_CommerceCheckoutTotals + : __experimental_CommerceInvoiceTotals; }; diff --git a/packages/types/src/commerce.ts b/packages/types/src/commerce.ts index 263612d2642..849fd0220d8 100644 --- a/packages/types/src/commerce.ts +++ b/packages/types/src/commerce.ts @@ -114,7 +114,7 @@ export interface __experimental_CommerceInvoiceResource extends ClerkResource { id: string; planId: string; paymentSourceId: string; - totals: __experimental_CommerceTotals; + totals: __experimental_CommerceInvoiceTotals; paymentDueOn: number; paidOn: number; status: __experimental_CommerceInvoiceStatus; @@ -142,13 +142,16 @@ export interface __experimental_CommerceMoney { currencySymbol: string; } -export interface __experimental_CommerceTotals { +export interface __experimental_CommerceCheckoutTotals { subtotal: __experimental_CommerceMoney; grandTotal: __experimental_CommerceMoney; taxTotal: __experimental_CommerceMoney; totalDueNow: __experimental_CommerceMoney; } +export interface __experimental_CommerceInvoiceTotals + extends Omit<__experimental_CommerceCheckoutTotals, 'totalDueNow'> {} + export type __experimental_CreateCheckoutParams = WithOptionalOrgType<{ planId: string; planPeriod: __experimental_CommerceSubscriptionPlanPeriod; @@ -167,7 +170,7 @@ export interface __experimental_CommerceCheckoutResource extends ClerkResource { plan: __experimental_CommercePlanResource; planPeriod: __experimental_CommerceSubscriptionPlanPeriod; status: string; - totals: __experimental_CommerceTotals; + totals: __experimental_CommerceCheckoutTotals; subscription?: __experimental_CommerceSubscriptionResource; confirm: (params: __experimental_ConfirmCheckoutParams) => Promise<__experimental_CommerceCheckoutResource>; } diff --git a/packages/types/src/json.ts b/packages/types/src/json.ts index 789a4cc497f..f2128ac8bd7 100644 --- a/packages/types/src/json.ts +++ b/packages/types/src/json.ts @@ -648,7 +648,7 @@ export interface __experimental_CommerceInvoiceJSON extends ClerkResourceJSON { payment_source_id: string; plan_id: string; status: __experimental_CommerceInvoiceStatus; - totals: __experimental_CommerceTotalsJSON; + totals: __experimental_CommerceInvoiceTotalsJSON; } export interface __experimental_CommerceSubscriptionJSON extends ClerkResourceJSON { @@ -670,13 +670,16 @@ export interface __experimental_CommerceMoneyJSON { currency_symbol: string; } -export interface __experimental_CommerceTotalsJSON { +export interface __experimental_CommerceCheckoutTotalsJSON { grand_total: __experimental_CommerceMoneyJSON; subtotal: __experimental_CommerceMoneyJSON; tax_total: __experimental_CommerceMoneyJSON; total_due_now: __experimental_CommerceMoneyJSON; } +export interface __experimental_CommerceInvoiceTotalsJSON + extends Omit<__experimental_CommerceCheckoutTotalsJSON, 'total_due_now'> {} + export interface __experimental_CommerceCheckoutJSON extends ClerkResourceJSON { object: 'commerce_checkout'; id: string; @@ -688,5 +691,5 @@ export interface __experimental_CommerceCheckoutJSON extends ClerkResourceJSON { plan_period: __experimental_CommerceSubscriptionPlanPeriod; status: string; subscription?: __experimental_CommerceSubscriptionJSON; - totals: __experimental_CommerceTotalsJSON; + totals: __experimental_CommerceCheckoutTotalsJSON; } From 68fe74b2af0c43aa6fb056908fce828eebcfb304 Mon Sep 17 00:00:00 2001 From: panteliselef Date: Fri, 25 Apr 2025 21:46:26 +0300 Subject: [PATCH 2/2] ignore eslint rules --- packages/types/src/commerce.ts | 1 + packages/types/src/json.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/types/src/commerce.ts b/packages/types/src/commerce.ts index 849fd0220d8..b87685bdc0f 100644 --- a/packages/types/src/commerce.ts +++ b/packages/types/src/commerce.ts @@ -149,6 +149,7 @@ export interface __experimental_CommerceCheckoutTotals { totalDueNow: __experimental_CommerceMoney; } +// eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface __experimental_CommerceInvoiceTotals extends Omit<__experimental_CommerceCheckoutTotals, 'totalDueNow'> {} diff --git a/packages/types/src/json.ts b/packages/types/src/json.ts index f2128ac8bd7..69490691b55 100644 --- a/packages/types/src/json.ts +++ b/packages/types/src/json.ts @@ -677,6 +677,7 @@ export interface __experimental_CommerceCheckoutTotalsJSON { total_due_now: __experimental_CommerceMoneyJSON; } +// eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface __experimental_CommerceInvoiceTotalsJSON extends Omit<__experimental_CommerceCheckoutTotalsJSON, 'total_due_now'> {}