@moneydevkit/core 0.7.0-beta.10 → 0.7.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions.d.ts +26 -0
- package/dist/actions.js +8 -4
- package/dist/actions.js.map +1 -1
- package/dist/checkout-utils.d.ts +31 -0
- package/dist/checkout-utils.js +61 -0
- package/dist/checkout-utils.js.map +1 -0
- package/dist/components/checkout/UnconfirmedCheckout.js +6 -36
- package/dist/components/checkout/UnconfirmedCheckout.js.map +1 -1
- package/package.json +1 -1
package/dist/actions.d.ts
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
import type { Checkout, ConfirmCheckout, Product } from '@moneydevkit/api-contract';
|
|
2
2
|
import type { Result } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Convert any string format to camelCase.
|
|
5
|
+
* Supports: snake_case, kebab-case, space separated, PascalCase, camelCase
|
|
6
|
+
* @example toCamelCase('custom_field') => 'customField'
|
|
7
|
+
* @example toCamelCase('custom-field') => 'customField'
|
|
8
|
+
* @example toCamelCase('custom field') => 'customField'
|
|
9
|
+
* @example toCamelCase('Custom Field') => 'customField'
|
|
10
|
+
* @internal Exported for testing
|
|
11
|
+
*/
|
|
12
|
+
export declare function toCamelCase(str: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Normalize field names to camelCase.
|
|
15
|
+
* Standard fields (email, name) are kept as-is.
|
|
16
|
+
* @internal Exported for testing
|
|
17
|
+
*/
|
|
18
|
+
export declare function normalizeFieldName(field: string): string;
|
|
3
19
|
export declare function getCheckout(checkoutId: string): Promise<Checkout>;
|
|
4
20
|
export declare function listProducts(): Promise<Product[]>;
|
|
5
21
|
export declare function confirmCheckout(confirm: ConfirmCheckout): Promise<Checkout>;
|
|
@@ -16,6 +32,16 @@ export type CustomerInput = {
|
|
|
16
32
|
email?: string;
|
|
17
33
|
externalId?: string;
|
|
18
34
|
} & Record<string, string>;
|
|
35
|
+
/**
|
|
36
|
+
* Strip empty strings from customer object and normalize keys to camelCase.
|
|
37
|
+
* @internal Exported for testing
|
|
38
|
+
*/
|
|
39
|
+
export declare function cleanCustomerInput(customer: CustomerInput | undefined): CustomerInput | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Normalize requireCustomerData field names to camelCase.
|
|
42
|
+
* @internal Exported for testing
|
|
43
|
+
*/
|
|
44
|
+
export declare function normalizeRequireCustomerData(fields: string[] | undefined): string[] | undefined;
|
|
19
45
|
type Currency = 'USD' | 'SAT';
|
|
20
46
|
type CommonCheckoutFields = {
|
|
21
47
|
currency?: Currency;
|
package/dist/actions.js
CHANGED
|
@@ -10,8 +10,9 @@ import { failure, success } from './types';
|
|
|
10
10
|
* @example toCamelCase('custom-field') => 'customField'
|
|
11
11
|
* @example toCamelCase('custom field') => 'customField'
|
|
12
12
|
* @example toCamelCase('Custom Field') => 'customField'
|
|
13
|
+
* @internal Exported for testing
|
|
13
14
|
*/
|
|
14
|
-
function toCamelCase(str) {
|
|
15
|
+
export function toCamelCase(str) {
|
|
15
16
|
return str
|
|
16
17
|
// Split on underscores, hyphens, or spaces
|
|
17
18
|
.split(/[-_\s]+/)
|
|
@@ -29,8 +30,9 @@ function toCamelCase(str) {
|
|
|
29
30
|
/**
|
|
30
31
|
* Normalize field names to camelCase.
|
|
31
32
|
* Standard fields (email, name) are kept as-is.
|
|
33
|
+
* @internal Exported for testing
|
|
32
34
|
*/
|
|
33
|
-
function normalizeFieldName(field) {
|
|
35
|
+
export function normalizeFieldName(field) {
|
|
34
36
|
const standardFields = ['email', 'name', 'externalId'];
|
|
35
37
|
const camel = toCamelCase(field);
|
|
36
38
|
// Keep standard fields exactly as expected
|
|
@@ -68,8 +70,9 @@ export async function confirmCheckout(confirm) {
|
|
|
68
70
|
}
|
|
69
71
|
/**
|
|
70
72
|
* Strip empty strings from customer object and normalize keys to camelCase.
|
|
73
|
+
* @internal Exported for testing
|
|
71
74
|
*/
|
|
72
|
-
function cleanCustomerInput(customer) {
|
|
75
|
+
export function cleanCustomerInput(customer) {
|
|
73
76
|
if (!customer)
|
|
74
77
|
return undefined;
|
|
75
78
|
const cleaned = {};
|
|
@@ -83,8 +86,9 @@ function cleanCustomerInput(customer) {
|
|
|
83
86
|
}
|
|
84
87
|
/**
|
|
85
88
|
* Normalize requireCustomerData field names to camelCase.
|
|
89
|
+
* @internal Exported for testing
|
|
86
90
|
*/
|
|
87
|
-
function normalizeRequireCustomerData(fields) {
|
|
91
|
+
export function normalizeRequireCustomerData(fields) {
|
|
88
92
|
if (!fields)
|
|
89
93
|
return undefined;
|
|
90
94
|
return fields.map(normalizeFieldName);
|
package/dist/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAA;AACtE,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAG1C
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAA;AACtE,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAG1C;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,OAAO,GAAG;QACR,2CAA2C;SAC1C,KAAK,CAAC,SAAS,CAAC;QACjB,gDAAgD;SAC/C,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACnD,uBAAuB;SACtB,MAAM,CAAC,OAAO,CAAC;QAChB,uBAAuB;SACtB,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QAChC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC7E,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAA;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAA;IACtD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;IAChC,2CAA2C;IAC3C,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAkB;IAClD,sDAAsD;IACtD,MAAM,MAAM,GAAG,uBAAuB,EAAE,CAAA;IACxC,OAAO,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,MAAM,GAAG,uBAAuB,EAAE,CAAA;IACxC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;IAC3C,OAAO,MAAM,CAAC,QAAQ,CAAA;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAwB;IAC5D,MAAM,MAAM,GAAG,uBAAuB,EAAE,CAAA;IACxC,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAA;IACpC,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAEjE,MAAM,OAAO,GAAG,iBAAiB,CAAC,WAAW;QAC3C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,WAAW,EAAE,iBAAiB,CAAC,iBAAiB,CAAC;QAClG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAA;IAE7D,MAAM,sBAAsB,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC;QACpE,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,gBAAgB,EAAE,OAAO,CAAC,SAAS;QACnC,UAAU,EAAE,iBAAiB,CAAC,EAAE;QAChC,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC,CAAA;IAEF,OAAO,sBAAsB,CAAA;AAC/B,CAAC;AAiBD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAmC;IACpE,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAA;IAC/B,MAAM,OAAO,GAA2B,EAAE,CAAA;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACrD,6BAA6B;YAC7B,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAA;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;AAC9D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAA4B;IACvE,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAA;IAC7B,OAAO,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;AACvC,CAAC;AAmCD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAA4B;IAE5B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAA;IACzC,MAAM,iBAAiB,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAA;IAE/C,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,KAAK,UAAU,CAAA;IACpD,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9D,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA;IAC5D,MAAM,KAAK,GAAG,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAA;IAC1D,MAAM,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAA;IAEtE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,uBAAuB,EAAE,CAAA;QACxC,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAA;QACpC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAC5C;YACE,MAAM;YACN,QAAQ;YACR,OAAO;YACP,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,QAAQ,EAAE;gBACR,KAAK;gBACL,WAAW;gBACX,GAAG,iBAAiB;aACrB;YACD,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC7C,mBAAmB,EAAE,4BAA4B,CAAC,MAAM,CAAC,mBAAmB,CAAC;SAC9E,EACD,IAAI,CAAC,EAAE,CACR,CAAA;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW;gBAClC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,iBAAiB,CAAC;gBAChF,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAA;YAEpD,MAAM,sBAAsB,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC;gBACpE,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,gBAAgB,EAAE,OAAO,CAAC,SAAS;gBACnC,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACvB,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC,CAAA;YAEF,OAAO,OAAO,CAAC,EAAE,QAAQ,EAAE,sBAAsB,EAAE,CAAC,CAAA;QACtD,CAAC;QAED,OAAO,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAChE,QAAQ,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAA;QAC9C,OAAO,OAAO,CAAC;YACb,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE,8BAA8B,OAAO,EAAE;SACjD,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,WAAmB,EAAE,UAAkB;IAClF,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAA;IACrF,CAAC;IAED,MAAM,MAAM,GAAG,uBAAuB,EAAE,CAAA;IACxC,MAAM,eAAe,GAAG;QACtB,QAAQ,EAAE;YACR;gBACE,WAAW;gBACX,UAAU;gBACV,OAAO,EAAE,IAAI;aACd;SACF;KACF,CAAA;IACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,eAAe,CAAC,CAAA;IAEtE,mBAAmB,CAAC,WAAW,CAAC,CAAA;IAEhC,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,WAAmB;IAC9D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,GAAG,CAAC,+BAA+B,EAAE,WAAW,CAAC,CAAA;IACjD,OAAO,sBAAsB,CAAC,WAAW,CAAC,CAAA;AAC5C,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Checkout } from '@moneydevkit/api-contract';
|
|
2
|
+
type UnconfirmedCheckoutType = Extract<Checkout, {
|
|
3
|
+
status: 'UNCONFIRMED';
|
|
4
|
+
}>;
|
|
5
|
+
/**
|
|
6
|
+
* Convert camelCase field name to readable label.
|
|
7
|
+
* e.g., "billingAddress" -> "Billing Address"
|
|
8
|
+
* @internal Exported for testing
|
|
9
|
+
*/
|
|
10
|
+
export declare function fieldToLabel(field: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Get fields that need to be shown in the form.
|
|
13
|
+
* A field is shown if it's in requireCustomerData and not already provided.
|
|
14
|
+
* @internal Exported for testing
|
|
15
|
+
*/
|
|
16
|
+
export declare function getMissingRequiredFields(checkout: UnconfirmedCheckoutType): string[];
|
|
17
|
+
type Currency = 'USD' | 'SAT';
|
|
18
|
+
/**
|
|
19
|
+
* Convert user-entered custom price amount to smallest unit for API.
|
|
20
|
+
* - USD: converts dollars to cents (multiply by 100, with EPSILON for float precision)
|
|
21
|
+
* - SAT: uses value directly (amounts are already in sats)
|
|
22
|
+
* @internal Exported for testing
|
|
23
|
+
*/
|
|
24
|
+
export declare function convertCustomAmountToSmallestUnit(amount: string, currency: Currency): number;
|
|
25
|
+
/**
|
|
26
|
+
* Validate custom price amount input.
|
|
27
|
+
* Returns error message if invalid, null if valid.
|
|
28
|
+
* @internal Exported for testing
|
|
29
|
+
*/
|
|
30
|
+
export declare function validateCustomAmount(amount: string, currency: Currency): string | null;
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert camelCase field name to readable label.
|
|
3
|
+
* e.g., "billingAddress" -> "Billing Address"
|
|
4
|
+
* @internal Exported for testing
|
|
5
|
+
*/
|
|
6
|
+
export function fieldToLabel(field) {
|
|
7
|
+
return field
|
|
8
|
+
.replace(/([A-Z])/g, ' $1')
|
|
9
|
+
.replace(/^./, (str) => str.toUpperCase())
|
|
10
|
+
.trim();
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Get fields that need to be shown in the form.
|
|
14
|
+
* A field is shown if it's in requireCustomerData and not already provided.
|
|
15
|
+
* @internal Exported for testing
|
|
16
|
+
*/
|
|
17
|
+
export function getMissingRequiredFields(checkout) {
|
|
18
|
+
if (!checkout.requireCustomerData)
|
|
19
|
+
return [];
|
|
20
|
+
return checkout.requireCustomerData.filter((field) => {
|
|
21
|
+
const value = checkout.customer?.[field];
|
|
22
|
+
return value === undefined || value === null || value === '';
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Convert user-entered custom price amount to smallest unit for API.
|
|
27
|
+
* - USD: converts dollars to cents (multiply by 100, with EPSILON for float precision)
|
|
28
|
+
* - SAT: uses value directly (amounts are already in sats)
|
|
29
|
+
* @internal Exported for testing
|
|
30
|
+
*/
|
|
31
|
+
export function convertCustomAmountToSmallestUnit(amount, currency) {
|
|
32
|
+
const parsedAmount = Number.parseFloat(amount);
|
|
33
|
+
if (Number.isNaN(parsedAmount)) {
|
|
34
|
+
return 0;
|
|
35
|
+
}
|
|
36
|
+
if (currency === 'USD') {
|
|
37
|
+
return Math.round(parsedAmount * 100 + Number.EPSILON);
|
|
38
|
+
}
|
|
39
|
+
return Math.round(parsedAmount);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Validate custom price amount input.
|
|
43
|
+
* Returns error message if invalid, null if valid.
|
|
44
|
+
* @internal Exported for testing
|
|
45
|
+
*/
|
|
46
|
+
export function validateCustomAmount(amount, currency) {
|
|
47
|
+
if (!amount) {
|
|
48
|
+
return currency === 'SAT'
|
|
49
|
+
? 'Please enter at least 1 sat'
|
|
50
|
+
: 'Please enter a valid amount';
|
|
51
|
+
}
|
|
52
|
+
const parsedAmount = Number.parseFloat(amount);
|
|
53
|
+
const minAmount = currency === 'SAT' ? 1 : 0.01;
|
|
54
|
+
if (Number.isNaN(parsedAmount) || parsedAmount < minAmount) {
|
|
55
|
+
return currency === 'SAT'
|
|
56
|
+
? 'Please enter at least 1 sat'
|
|
57
|
+
: 'Please enter a valid amount';
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=checkout-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkout-utils.js","sourceRoot":"","sources":["../src/checkout-utils.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,KAAK;SACT,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAC1B,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;SACzC,IAAI,EAAE,CAAA;AACX,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAAiC;IACxE,IAAI,CAAC,QAAQ,CAAC,mBAAmB;QAAE,OAAO,EAAE,CAAA;IAE5C,OAAO,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,KAAa,EAAE,EAAE;QAC3D,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAA;QACxC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,CAAA;IAC9D,CAAC,CAAC,CAAA;AACJ,CAAC;AAID;;;;;GAKG;AACH,MAAM,UAAU,iCAAiC,CAC/C,MAAc,EACd,QAAkB;IAElB,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IAC9C,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,CAAA;IACV,CAAC;IAED,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAc,EACd,QAAkB;IAElB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,QAAQ,KAAK,KAAK;YACvB,CAAC,CAAC,6BAA6B;YAC/B,CAAC,CAAC,6BAA6B,CAAA;IACnC,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IAC9C,MAAM,SAAS,GAAG,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAE/C,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,SAAS,EAAE,CAAC;QAC3D,OAAO,QAAQ,KAAK,KAAK;YACvB,CAAC,CAAC,6BAA6B;YAC/B,CAAC,CAAC,6BAA6B,CAAA;IACnC,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -5,31 +5,10 @@ import { useState } from 'react';
|
|
|
5
5
|
import { useForm } from 'react-hook-form';
|
|
6
6
|
import { z } from 'zod';
|
|
7
7
|
import { clientConfirmCheckout } from '../../client-actions';
|
|
8
|
+
import { fieldToLabel, getMissingRequiredFields, convertCustomAmountToSmallestUnit, validateCustomAmount, } from '../../checkout-utils';
|
|
8
9
|
import { Button } from '../ui/button';
|
|
9
10
|
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '../ui/form';
|
|
10
11
|
import { Input } from '../ui/input';
|
|
11
|
-
/**
|
|
12
|
-
* Convert camelCase field name to readable label.
|
|
13
|
-
* e.g., "billingAddress" -> "Billing Address"
|
|
14
|
-
*/
|
|
15
|
-
function fieldToLabel(field) {
|
|
16
|
-
return field
|
|
17
|
-
.replace(/([A-Z])/g, ' $1')
|
|
18
|
-
.replace(/^./, (str) => str.toUpperCase())
|
|
19
|
-
.trim();
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Get fields that need to be shown in the form.
|
|
23
|
-
* A field is shown if it's in requireCustomerData and not already provided.
|
|
24
|
-
*/
|
|
25
|
-
function getMissingRequiredFields(checkout) {
|
|
26
|
-
if (!checkout.requireCustomerData)
|
|
27
|
-
return [];
|
|
28
|
-
return checkout.requireCustomerData.filter((field) => {
|
|
29
|
-
const value = checkout.customer?.[field];
|
|
30
|
-
return value === undefined || value === null || value === '';
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
12
|
export default function UnconfirmedCheckout({ checkout }) {
|
|
34
13
|
const queryClient = useQueryClient();
|
|
35
14
|
const missingFields = getMissingRequiredFields(checkout);
|
|
@@ -72,14 +51,8 @@ export default function UnconfirmedCheckout({ checkout }) {
|
|
|
72
51
|
if (checkout.type === 'PRODUCTS' && productId) {
|
|
73
52
|
const product = { productId };
|
|
74
53
|
// If CUSTOM price, include the user-entered amount
|
|
75
|
-
// USD: convert dollars to cents (multiply by 100, with EPSILON for float precision)
|
|
76
|
-
// SAT: use directly (amounts are in sats)
|
|
77
54
|
if (isCustomPrice && customAmount) {
|
|
78
|
-
|
|
79
|
-
const amountInSmallestUnit = checkout.currency === 'USD'
|
|
80
|
-
? Math.round(parsedAmount * 100 + Number.EPSILON)
|
|
81
|
-
: Math.round(parsedAmount);
|
|
82
|
-
product.priceAmount = amountInSmallestUnit;
|
|
55
|
+
product.priceAmount = convertCustomAmountToSmallestUnit(customAmount, checkout.currency);
|
|
83
56
|
}
|
|
84
57
|
productsPayload = [product];
|
|
85
58
|
}
|
|
@@ -101,12 +74,9 @@ export default function UnconfirmedCheckout({ checkout }) {
|
|
|
101
74
|
const onSubmit = (data) => {
|
|
102
75
|
// Validate custom amount if required
|
|
103
76
|
if (isCustomPrice) {
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
setCustomAmountError(checkout.currency === 'SAT'
|
|
108
|
-
? 'Please enter at least 1 sat'
|
|
109
|
-
: 'Please enter a valid amount');
|
|
77
|
+
const error = validateCustomAmount(customAmount, checkout.currency);
|
|
78
|
+
if (error) {
|
|
79
|
+
setCustomAmountError(error);
|
|
110
80
|
return;
|
|
111
81
|
}
|
|
112
82
|
setCustomAmountError(null);
|
|
@@ -122,6 +92,6 @@ export default function UnconfirmedCheckout({ checkout }) {
|
|
|
122
92
|
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "text-center mb-6", children: [checkout.type === 'PRODUCTS' && checkout.products && (_jsx("div", { className: "space-y-2", children: checkout.products.map((product) => (_jsxs("div", { className: "text-left", children: [_jsx("h3", { className: "font-medium text-white", children: product.name }), product.description && _jsx("p", { className: "text-sm text-gray-400", children: product.description }), product.prices?.[0] && (_jsxs("div", { className: "text-sm text-gray-300", children: [product.prices[0].amountType === 'FIXED' && product.prices[0].priceAmount && (_jsx("span", { children: formatCurrency(product.prices[0].priceAmount, checkout.currency) })), product.prices[0].amountType === 'CUSTOM' && (_jsx("span", { className: "text-gray-400", children: "Pay what you want" })), product.recurringInterval && (_jsxs("span", { className: "text-gray-400", children: ["/", product.recurringInterval.toLowerCase()] }))] }))] }, product.id))) })), checkout.type === 'AMOUNT' && checkout.providedAmount && (_jsx("div", { className: "text-sm font-medium text-white" })), checkout.type === 'TOP_UP' && _jsx("div", { className: "text-lg text-white", children: "Account Top-up" })] }), isCustomPrice && (_jsxs("div", { className: "mb-4", children: [_jsxs("label", { htmlFor: "customAmount", className: "block text-sm font-medium text-gray-300 mb-2", children: ["Enter Amount (", checkout.currency, ")"] }), _jsxs("div", { className: "relative", children: [checkout.currency === 'USD' && (_jsx("span", { className: "absolute left-3 top-1/2 -translate-y-1/2 text-gray-400", children: "$" })), _jsx(Input, { id: "customAmount", type: "number", min: checkout.currency === 'SAT' ? '1' : '0.01', step: checkout.currency === 'SAT' ? '1' : '0.01', value: customAmount, onChange: (e) => {
|
|
123
93
|
setCustomAmount(e.target.value);
|
|
124
94
|
setCustomAmountError(null);
|
|
125
|
-
}, placeholder: checkout.currency === 'SAT' ? '1000' : '
|
|
95
|
+
}, placeholder: checkout.currency === 'SAT' ? '1000' : '', className: "bg-gray-700 border-gray-600 focus:ring-purple-500 focus:border-purple-500 text-white placeholder-gray-400 [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none", style: { paddingLeft: checkout.currency === 'USD' ? '1.75rem' : undefined, paddingRight: checkout.currency === 'SAT' ? '3.5rem' : undefined } }), checkout.currency === 'SAT' && (_jsx("span", { className: "absolute right-3 top-1/2 -translate-y-1/2 text-gray-400", children: "sats" }))] }), customAmountError && (_jsx("p", { className: "text-red-400 text-sm mt-1", children: customAmountError }))] })), _jsx(Form, { ...form, children: _jsxs("form", { onSubmit: form.handleSubmit(onSubmit), className: "space-y-4", children: [missingFields.map((field) => (_jsx(FormField, { control: form.control, name: field, render: ({ field: formField }) => (_jsxs(FormItem, { children: [_jsxs(FormLabel, { className: "text-gray-300", children: [fieldToLabel(field), " *"] }), _jsx(FormControl, { children: _jsx(Input, { ...formField, type: field === 'email' ? 'email' : 'text', placeholder: `Enter your ${fieldToLabel(field).toLowerCase()}`, className: "bg-gray-700 border-gray-600 focus:ring-purple-500 focus:border-purple-500 text-white placeholder-gray-400" }) }), _jsx(FormMessage, {})] })) }, field))), form.formState.errors.root && (_jsxs("div", { className: "text-red-400 text-sm", children: ["Error: ", form.formState.errors.root.message] })), _jsx(Button, { type: "submit", disabled: form.formState.isSubmitting || confirmMutation.isPending, className: "w-full bg-white hover:bg-gray-100 text-black font-medium py-3 px-4 rounded-lg transition-colors border border-gray-200", children: form.formState.isSubmitting || confirmMutation.isPending ? (_jsxs("div", { className: "flex items-center justify-center", children: [_jsx("div", { className: "animate-spin rounded-full h-4 w-4 border-b-2 border-white mr-2" }), "Generating invoice..."] })) : ('Proceed to Payment') })] }) })] }));
|
|
126
96
|
}
|
|
127
97
|
//# sourceMappingURL=UnconfirmedCheckout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UnconfirmedCheckout.js","sourceRoot":"","sources":["../../../src/components/checkout/UnconfirmedCheckout.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAErD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EACL,IAAI,EACJ,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,WAAW,GACZ,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAQnC
|
|
1
|
+
{"version":3,"file":"UnconfirmedCheckout.js","sourceRoot":"","sources":["../../../src/components/checkout/UnconfirmedCheckout.tsx"],"names":[],"mappings":"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"}
|