@paykka/card-checkout-ui 0.13.17 → 0.14.0
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/card-checkout-ui.js +53 -25
- package/dist/card-checkout-ui.umd.cjs +53 -25
- package/dist/es/api/modules/boost/index.js +5 -16
- package/dist/es/api/modules/gcash/index.js +5 -16
- package/dist/es/api/modules/get-browser-params.js +1 -4
- package/dist/es/api/modules/grab-pay/index.js +5 -16
- package/dist/es/api/modules/line-pay/index.js +5 -16
- package/dist/es/api/modules/may-bank-qr-pay/index.js +5 -16
- package/dist/es/api/modules/nine-pay/index.js +5 -16
- package/dist/es/api/modules/opay-wallet/index.js +5 -16
- package/dist/es/api/modules/paga-wallet/index.js +5 -16
- package/dist/es/api/modules/paymaya/index.js +5 -16
- package/dist/es/api/modules/shopee-pay/index.js +5 -16
- package/dist/es/api/modules/threeDS/index.js +16 -2
- package/dist/es/api/modules/tng-wallet/index.js +5 -16
- package/dist/es/api/modules/zalopay/index.js +5 -16
- package/dist/es/components/AccordionItem/AccordionItem.js +0 -2
- package/dist/es/components/AddressField/index.js +13 -3
- package/dist/es/components/AliPay/index.js +64 -62
- package/dist/es/components/ApplePay/index.js +42 -39
- package/dist/es/components/CPFField/index.js +2 -1
- package/dist/es/components/Card/index.js +160 -133
- package/dist/es/components/CardExpireDateField/index.js +2 -1
- package/dist/es/components/CardNo/index.js +2 -2
- package/dist/es/components/CardNumberField/index.js +2 -1
- package/dist/es/components/CardSecurityCodeField/index.js +2 -1
- package/dist/es/components/CardSelector/index.js +3 -2
- package/dist/es/components/DropIn/index.js +24 -21
- package/dist/es/components/GooglePay/index.js +97 -88
- package/dist/es/components/PaymentButton/index.js +1 -1
- package/dist/es/components/SecuredFieldsProvider/index.js +31 -9
- package/dist/es/components/SecuredIframe/index.js +40 -23
- package/dist/es/components/SubmitButton/index.js +1 -1
- package/dist/es/components/ThreeDS/index.js +29 -12
- package/dist/es/components/WechatPay/index.js +70 -69
- package/dist/es/components/business/PhoneField/PhoneField.js +1 -0
- package/dist/es/components/index.js +7 -7
- package/dist/es/components/internal/CheckBox/CheckBox.js +2 -2
- package/dist/es/components/internal/Input/Input.js +1 -1
- package/dist/es/components/internal/Select/Select.js +4 -1
- package/dist/es/components/internal/icons/IconArrowDown.js +4 -4
- package/dist/es/components/internal/icons/IconBancontact.js +69 -14
- package/dist/es/components/internal/icons/IconBlik.js +541 -21
- package/dist/es/components/internal/icons/IconIdeal.js +61 -29
- package/dist/es/components/internal/icons/IconSkrill.js +14 -7
- package/dist/es/components/internal/icons/IconTrustly.js +11 -44
- package/dist/es/components/wallets/Bancontact/Bancontact.js +11 -8
- package/dist/es/components/wallets/Blik/Blik.js +12 -9
- package/dist/es/components/wallets/Boost/Boost.js +183 -0
- package/dist/es/components/wallets/Boost/boost2.js +1 -0
- package/dist/es/components/wallets/Boost/index.js +1 -0
- package/dist/es/components/wallets/Boost/type.js +1 -0
- package/dist/es/components/wallets/GCash/GCash.js +62 -252
- package/dist/es/components/wallets/GrabPay/GrabPay.js +183 -0
- package/dist/es/components/wallets/GrabPay/grab-pay.js +1 -0
- package/dist/es/components/wallets/GrabPay/index.js +1 -0
- package/dist/es/components/wallets/GrabPay/type.js +1 -0
- package/dist/es/components/wallets/IDeal/IDeal.js +11 -8
- package/dist/es/components/wallets/LinePay/LinePay.js +183 -0
- package/dist/es/components/wallets/LinePay/index.js +1 -0
- package/dist/es/components/wallets/LinePay/line-pay.js +1 -0
- package/dist/es/components/wallets/LinePay/type.js +1 -0
- package/dist/es/components/wallets/MayBankQRPay/MayBankQRPay.js +187 -0
- package/dist/es/components/wallets/MayBankQRPay/index.js +1 -0
- package/dist/es/components/wallets/MayBankQRPay/may-bank-qr-pay.js +1 -0
- package/dist/es/components/wallets/MayBankQRPay/type.js +1 -0
- package/dist/es/components/wallets/NinePay/NinePay.js +185 -0
- package/dist/es/components/wallets/NinePay/index.js +1 -0
- package/dist/es/components/wallets/NinePay/nine-pay.js +1 -0
- package/dist/es/components/wallets/NinePay/type.js +1 -0
- package/dist/es/components/wallets/OVO/OVO.js +7 -5
- package/dist/es/components/wallets/OpayWallet/OpayWallet.js +56 -218
- package/dist/es/components/wallets/P24/P24.js +11 -8
- package/dist/es/components/wallets/PagaWallet/PagaWallet.js +56 -218
- package/dist/es/components/wallets/Paymaya/Paymaya.js +56 -221
- package/dist/es/components/wallets/PicPay/PicPay.js +50 -47
- package/dist/es/components/wallets/Pix/Pix.js +44 -48
- package/dist/es/components/wallets/ShopeePay/ShopeePay.js +185 -0
- package/dist/es/components/wallets/ShopeePay/index.js +1 -0
- package/dist/es/components/wallets/ShopeePay/shopee-pay.js +1 -0
- package/dist/es/components/wallets/ShopeePay/type.js +1 -0
- package/dist/es/components/wallets/Skrill/Skrill.js +28 -26
- package/dist/es/components/wallets/TNGWallet/TNGWallet.js +185 -0
- package/dist/es/components/wallets/TNGWallet/index.js +1 -0
- package/dist/es/components/wallets/TNGWallet/tng-wallet.js +1 -0
- package/dist/es/components/wallets/TNGWallet/type.js +1 -0
- package/dist/es/components/wallets/Trustly/Trustly.js +15 -15
- package/dist/es/components/wallets/Vietqr/Vietqr.js +60 -248
- package/dist/es/components/wallets/Zalopay/Zalopay.js +61 -249
- package/dist/es/components/wallets/index.js +7 -0
- package/dist/es/core/checkout.js +19 -45
- package/dist/es/core/logger.js +1 -1
- package/dist/es/core/payment.js +65 -0
- package/dist/es/hooks/useBaseWallet.js +20 -18
- package/dist/es/hooks/usePayState.js +37 -25
- package/dist/es/hooks/usePayment.js +1 -14
- package/dist/es/hooks/useRetry.js +50 -26
- package/dist/es/index.js +7 -7
- package/dist/es/out/base-fraud-detection.js +4 -1
- package/dist/es/out/fraud-detection.js +12 -13
- package/dist/es/out/worldpay-ddc-manager.js +7 -14
- package/dist/es/out/worldpay-ddc.js +7 -5
- package/dist/es/style.css +1 -1
- package/dist/es/types/event.js +1 -0
- package/dist/es/types/message.js +2 -0
- package/dist/es/utils/payment.js +12 -12
- package/dist/es/utils/system-info/is-ua-webview.js +1 -20
- package/dist/style.css +1 -1
- package/dist/types/api/modules/threeDS/index.d.ts +7 -0
- package/dist/types/components/AddressField/type.d.ts +2 -2
- package/dist/types/components/CPFField/type.d.ts +1 -1
- package/dist/types/components/CardExpireDateField/type.d.ts +1 -1
- package/dist/types/components/CardNo/type.d.ts +3 -2
- package/dist/types/components/CardNumberField/type.d.ts +1 -1
- package/dist/types/components/CardSecurityCodeField/type.d.ts +1 -1
- package/dist/types/components/CardSelector/type.d.ts +4 -4
- package/dist/types/components/GooglePay/createGooglePay.d.ts +1 -1
- package/dist/types/components/GooglePay/type.d.ts +6 -0
- package/dist/types/components/SecuredFieldsProvider/type.d.ts +2 -0
- package/dist/types/components/ThreeDS/components/ThreeDSIframe/ThreeDSIframe.d.ts +0 -6
- package/dist/types/components/index.d.ts +0 -7
- package/dist/types/components/internal/CheckBox/type.d.ts +2 -1
- package/dist/types/components/internal/Select/type.d.ts +1 -1
- package/dist/types/components/internal/icons/IconArrowDown.d.ts +1 -1
- package/dist/types/components/{Boost → wallets/Boost}/Boost.d.ts +9 -4
- package/dist/types/components/{Boost → wallets/Boost}/type.d.ts +2 -2
- package/dist/types/components/wallets/GCash/GCash.d.ts +5 -0
- package/dist/types/components/{GrabPay → wallets/GrabPay}/GrabPay.d.ts +4 -4
- package/dist/types/components/wallets/GrabPay/type.d.ts +17 -0
- package/dist/types/components/{LinePay → wallets/LinePay}/LinePay.d.ts +9 -4
- package/dist/types/components/{LinePay → wallets/LinePay}/type.d.ts +2 -2
- package/dist/types/components/wallets/MayBankQRPay/MayBankQRPay.d.ts +15 -0
- package/dist/types/components/{MayBankQRPay → wallets/MayBankQRPay}/type.d.ts +2 -2
- package/dist/types/components/wallets/NinePay/NinePay.d.ts +15 -0
- package/dist/types/components/{NinePay → wallets/NinePay}/type.d.ts +2 -2
- package/dist/types/components/wallets/OpayWallet/OpayWallet.d.ts +5 -0
- package/dist/types/components/wallets/PagaWallet/PagaWallet.d.ts +5 -0
- package/dist/types/components/wallets/Paymaya/Paymaya.d.ts +5 -0
- package/dist/types/components/{ShopeePay → wallets/ShopeePay}/ShopeePay.d.ts +9 -4
- package/dist/types/components/{ShopeePay → wallets/ShopeePay}/type.d.ts +2 -2
- package/dist/types/components/wallets/Skrill/type.d.ts +0 -12
- package/dist/types/components/{TNGWallet → wallets/TNGWallet}/TNGWallet.d.ts +9 -4
- package/dist/types/components/{TNGWallet → wallets/TNGWallet}/type.d.ts +2 -2
- package/dist/types/components/wallets/Vietqr/Vietqr.d.ts +5 -0
- package/dist/types/components/wallets/Zalopay/Zalopay.d.ts +5 -0
- package/dist/types/components/wallets/index.d.ts +7 -0
- package/dist/types/core/checkout.d.ts +2 -9
- package/dist/types/core/payment.d.ts +21 -0
- package/dist/types/hooks/useBaseWallet.d.ts +2 -2
- package/dist/types/hooks/usePayState.d.ts +3 -1
- package/dist/types/hooks/useRetry.console-tests.d.ts +41 -0
- package/dist/types/hooks/useRetry.d.ts +22 -3
- package/dist/types/out/base-fraud-detection.d.ts +1 -0
- package/dist/types/out/config.d.ts +1 -1
- package/dist/types/out/fraud-detection.d.ts +2 -8
- package/dist/types/out/types.d.ts +3 -1
- package/dist/types/out/worldpay-ddc-manager.d.ts +6 -7
- package/dist/types/types/event.d.ts +6 -1
- package/dist/types/types/message.d.ts +24 -3
- package/dist/types/types/payment.d.ts +4 -0
- package/dist/types/utils/iframe.d.ts +1 -1
- package/dist/types/utils/payment.d.ts +10 -10
- package/package.json +9 -5
- package/dist/es/components/Boost/index.js +0 -349
- package/dist/es/components/GrabPay/index.js +0 -349
- package/dist/es/components/LinePay/index.js +0 -349
- package/dist/es/components/MayBankQRPay/index.js +0 -355
- package/dist/es/components/NinePay/index.js +0 -349
- package/dist/es/components/ShopeePay/index.js +0 -349
- package/dist/es/components/TNGWallet/index.js +0 -349
- package/dist/types/components/GrabPay/type.d.ts +0 -28
- package/dist/types/components/MayBankQRPay/MayBankQRPay.d.ts +0 -10
- package/dist/types/components/NinePay/NinePay.d.ts +0 -10
- /package/dist/types/components/{Boost → wallets/Boost}/index.d.ts +0 -0
- /package/dist/types/components/{GrabPay → wallets/GrabPay}/index.d.ts +0 -0
- /package/dist/types/components/{LinePay → wallets/LinePay}/index.d.ts +0 -0
- /package/dist/types/components/{MayBankQRPay → wallets/MayBankQRPay}/index.d.ts +0 -0
- /package/dist/types/components/{NinePay → wallets/NinePay}/index.d.ts +0 -0
- /package/dist/types/components/{ShopeePay → wallets/ShopeePay}/index.d.ts +0 -0
- /package/dist/types/components/{TNGWallet → wallets/TNGWallet}/index.d.ts +0 -0
|
@@ -78,7 +78,9 @@ export declare enum ThreeDSEventType {
|
|
|
78
78
|
/** 3DS 结束(并不代表成功) */
|
|
79
79
|
THREE_DS_END = "threeDS:end",
|
|
80
80
|
/** 3DS 认证(认证页面加载,可能是渠道的,也可能是我们自己的,依赖设计) */
|
|
81
|
-
THREE_DS_AUTH = "threeDS:auth"
|
|
81
|
+
THREE_DS_AUTH = "threeDS:auth",
|
|
82
|
+
/** 3DS 内嵌渠道页面加载 */
|
|
83
|
+
THREE_DS_INNER_CHANNEL = "threeDS:innerChannel"
|
|
82
84
|
}
|
|
83
85
|
export declare enum SecurityIframeEventType {
|
|
84
86
|
/** 安全 iframe 加载成功 */
|
|
@@ -124,6 +126,7 @@ export interface EventDataMapping {
|
|
|
124
126
|
[ThreeDSEventType.THREE_DS_CONTINUE]: undefined;
|
|
125
127
|
[ThreeDSEventType.THREE_DS_END]: undefined;
|
|
126
128
|
[ThreeDSEventType.THREE_DS_AUTH]: undefined;
|
|
129
|
+
[ThreeDSEventType.THREE_DS_INNER_CHANNEL]: undefined;
|
|
127
130
|
[SecurityIframeEventType.SECURITY_IFRAME_LOADED]: SecurityIframeBaseData;
|
|
128
131
|
[SecurityIframeEventType.SECURITY_IFRAME_LOAD_ERROR]: SecurityIframeBaseData;
|
|
129
132
|
[LoggerEventType.ENV]: Recordable;
|
|
@@ -138,6 +141,8 @@ export interface FraudDetectionBaseData {
|
|
|
138
141
|
/** ddc专用 */
|
|
139
142
|
bin?: string;
|
|
140
143
|
id?: string;
|
|
144
|
+
/** 耗时,单位:毫秒 */
|
|
145
|
+
time?: number;
|
|
141
146
|
}
|
|
142
147
|
export interface FraudDetectionErrorData extends FraudDetectionBaseData {
|
|
143
148
|
/** 错误信息 */
|
|
@@ -57,6 +57,8 @@ export declare const enum MessageAction {
|
|
|
57
57
|
THREE_DS_STATUS_CONFIG = "threeDSStatusConfig",
|
|
58
58
|
/** 通知 3DS 认证页面加载 */
|
|
59
59
|
THREE_DS_AUTH_LOADED = "threeDSAuthLoaded",
|
|
60
|
+
/** 通知 3DS 渠道页面加载,一般指的是内嵌在 iframe 里面的渠道挑战页面 */
|
|
61
|
+
THREE_DS_INNER_CHANNEL_LOADED = "threeDSInnerChannelLoaded",
|
|
60
62
|
/** 开启测试模式 */
|
|
61
63
|
DEBUG_MODE = "debugMode",
|
|
62
64
|
/**
|
|
@@ -66,6 +68,8 @@ export declare const enum MessageAction {
|
|
|
66
68
|
DDC_RESULT = "ddcResult",
|
|
67
69
|
/** 通知 DDC iframe jwt 和 bin 信息 */
|
|
68
70
|
DDC_JWT_BIN = "ddcJwtBin",
|
|
71
|
+
/** 通知隐藏 iframe 发送卡号前 9 位信息 */
|
|
72
|
+
DDC_CARD_BIN = "ddcCardBin",
|
|
69
73
|
/** iframe 内错误 */
|
|
70
74
|
IFRAME_ERROR = "iframeError"
|
|
71
75
|
}
|
|
@@ -88,17 +92,19 @@ type MessageMapping = {
|
|
|
88
92
|
[MessageAction.AUTHORIZED]: AuthorizedMessage;
|
|
89
93
|
[MessageAction.BRAND]: BrandMessage;
|
|
90
94
|
[MessageAction.ACTIVATED]: ActivatedMessage;
|
|
91
|
-
[MessageAction.HIDDEN_IFRAME_READY]:
|
|
95
|
+
[MessageAction.HIDDEN_IFRAME_READY]: HiddenIframeReadyMessage;
|
|
92
96
|
[MessageAction.VALIDATE]: {} extends BaseMessage ? {} : BaseMessage;
|
|
93
97
|
[MessageAction.VALIDATED]: ValidatedMessage;
|
|
94
98
|
[MessageAction.SET_CONFIG]: SetConfigMessage;
|
|
95
99
|
[MessageAction.CHECK_THREE_DS]: CheckThreeDSMessage;
|
|
96
100
|
[MessageAction.THREE_DS_STATUS_INIT]: {};
|
|
97
101
|
[MessageAction.THREE_DS_STATUS_CONFIG]: ThreeDSStatusConfigMessage;
|
|
98
|
-
[MessageAction.THREE_DS_AUTH_LOADED]:
|
|
102
|
+
[MessageAction.THREE_DS_AUTH_LOADED]: ThreeDSAuthLoadedMessage;
|
|
103
|
+
[MessageAction.THREE_DS_INNER_CHANNEL_LOADED]: BaseMessage;
|
|
99
104
|
[MessageAction.DEBUG_MODE]: {};
|
|
100
105
|
[MessageAction.DDC_RESULT]: DDCResultMessage;
|
|
101
106
|
[MessageAction.DDC_JWT_BIN]: DDCJwtBinMessage;
|
|
107
|
+
[MessageAction.DDC_CARD_BIN]: DDCCardBinMessage;
|
|
102
108
|
[MessageAction.IFRAME_ERROR]: IframeErrorMessage;
|
|
103
109
|
};
|
|
104
110
|
export interface BaseMessage {
|
|
@@ -190,6 +196,8 @@ export interface ValidatedMessage extends BaseMessage {
|
|
|
190
196
|
}
|
|
191
197
|
export interface SetConfigMessage extends BaseMessage {
|
|
192
198
|
style?: InputStylesConfig;
|
|
199
|
+
/** 是否禁用 */
|
|
200
|
+
disabled?: boolean;
|
|
193
201
|
}
|
|
194
202
|
export interface CheckThreeDSMessage extends BaseMessage {
|
|
195
203
|
status: string;
|
|
@@ -200,10 +208,15 @@ export interface ThreeDSStatusConfigMessage extends BaseMessage {
|
|
|
200
208
|
export interface DDCResultMessage extends BaseMessage {
|
|
201
209
|
sessionId: string;
|
|
202
210
|
}
|
|
203
|
-
export interface DDCJwtBinMessage {
|
|
211
|
+
export interface DDCJwtBinMessage extends Partial<BaseMessage> {
|
|
204
212
|
jwt: string;
|
|
205
213
|
bin: string;
|
|
206
214
|
url: string;
|
|
215
|
+
/** 隐藏 iframe 名称 */
|
|
216
|
+
hiddenIframeName?: string;
|
|
217
|
+
}
|
|
218
|
+
export interface HiddenIframeReadyMessage extends BaseMessage {
|
|
219
|
+
name: string;
|
|
207
220
|
}
|
|
208
221
|
export interface IframeRequestMessage extends BaseMessage {
|
|
209
222
|
request: Recordable;
|
|
@@ -216,4 +229,12 @@ export interface IframeErrorMessage extends BaseMessage {
|
|
|
216
229
|
stack?: string;
|
|
217
230
|
};
|
|
218
231
|
}
|
|
232
|
+
export interface DDCCardBinMessage extends BaseMessage {
|
|
233
|
+
/** 卡号前 9 位 */
|
|
234
|
+
bin?: string;
|
|
235
|
+
}
|
|
236
|
+
export interface ThreeDSAuthLoadedMessage extends BaseMessage {
|
|
237
|
+
/** 认证记录 id,标识当前认证 */
|
|
238
|
+
authId: string | undefined;
|
|
239
|
+
}
|
|
219
240
|
export {};
|
|
@@ -6,6 +6,10 @@ import type { FormValidateError } from '../components/internal/Form';
|
|
|
6
6
|
export interface PaymentMethodContext {
|
|
7
7
|
/** 当前支付方式 */
|
|
8
8
|
paymentMethod?: PaymentMethod;
|
|
9
|
+
/** 订单 ID */
|
|
10
|
+
orderId?: string;
|
|
11
|
+
/** 会话 ID */
|
|
12
|
+
sessionId?: string;
|
|
9
13
|
}
|
|
10
14
|
/** 支付方式公共 props */
|
|
11
15
|
export interface PaymentCommonProps {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const createIframe: (src: string) => HTMLIFrameElement;
|
|
2
|
-
export declare const postMessageToIframe: (data: Recordable | string, iframe: Window, targetOrigin?: string) => void;
|
|
2
|
+
export declare const postMessageToIframe: (data: Recordable | string, iframe: Window | null, targetOrigin?: string) => void;
|
|
@@ -5,23 +5,23 @@ import type { CheckoutRes, PayRes } from '../api';
|
|
|
5
5
|
import type { PaymentInfo } from '../types';
|
|
6
6
|
export interface PaymentCallbackConfig {
|
|
7
7
|
/** 订单处理中,定时查询订单 */
|
|
8
|
-
onProcessing?: () => void
|
|
8
|
+
onProcessing?: () => void | Promise<void>;
|
|
9
9
|
/** 订单已授权,提示用户,跳转商户页面 */
|
|
10
|
-
onAuthorized?: () => void
|
|
10
|
+
onAuthorized?: () => void | Promise<void>;
|
|
11
11
|
/** 订单需要3DS认证,跳转3DS认证页面 */
|
|
12
|
-
onInThreeDS?: () => void
|
|
12
|
+
onInThreeDS?: () => void | Promise<void>;
|
|
13
13
|
/** 上一次3DS认证未完成,跳转3DS认证页面 */
|
|
14
|
-
onInPreviousThreeDS?: () => void
|
|
14
|
+
onInPreviousThreeDS?: () => void | Promise<void>;
|
|
15
15
|
/** 订单取消,导致查询超时 */
|
|
16
|
-
onCanceled?: () => void
|
|
16
|
+
onCanceled?: () => void | Promise<void>;
|
|
17
17
|
/** 订单成功,支付成功 */
|
|
18
|
-
onSuccess?: () => void
|
|
18
|
+
onSuccess?: () => void | Promise<void>;
|
|
19
19
|
/** 订单失败,支付失败 */
|
|
20
|
-
onFailure?: () => void
|
|
20
|
+
onFailure?: () => void | Promise<void>;
|
|
21
21
|
/** 订单过期,支付过期 */
|
|
22
|
-
onExpired?: () => void
|
|
22
|
+
onExpired?: () => void | Promise<void>;
|
|
23
23
|
/** 不属于其他任何状态,兜底逻辑 */
|
|
24
|
-
onDefault?: () => void
|
|
24
|
+
onDefault?: () => void | Promise<void>;
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
27
|
* 处理支付状态的判断
|
|
@@ -29,7 +29,7 @@ export interface PaymentCallbackConfig {
|
|
|
29
29
|
* @param res 支付结果
|
|
30
30
|
* @param config 支付回调
|
|
31
31
|
*/
|
|
32
|
-
export declare const processPaymentStatus: (res: PayRes, config: PaymentCallbackConfig) => void
|
|
32
|
+
export declare const processPaymentStatus: (res: PayRes, config: PaymentCallbackConfig) => Promise<void>;
|
|
33
33
|
/**
|
|
34
34
|
* 格式化支付结果
|
|
35
35
|
* @param res
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@paykka/card-checkout-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/paykka-card-checkout-ui.umd.js",
|
|
6
6
|
"module": "dist/es/index.js",
|
|
@@ -25,18 +25,22 @@
|
|
|
25
25
|
"build:type": "tsc -p ./tsconfig.build.json",
|
|
26
26
|
"copy-dist-to-cdn": "tsx ./build/copyDist2CDN.ts",
|
|
27
27
|
"changeset": "changeset",
|
|
28
|
-
"changeset:
|
|
28
|
+
"changeset:fat-enter": "changeset pre enter beta",
|
|
29
|
+
"changeset:dev-enter": "changeset pre enter alpha",
|
|
30
|
+
"changeset:sandbox-enter": "changeset pre enter rc",
|
|
31
|
+
"changeset:fat": "changeset publish --tag beta",
|
|
32
|
+
"changeset:dev": "changeset publish --tag alpha",
|
|
33
|
+
"changeset:sandbox": "changeset publish --tag rc",
|
|
29
34
|
"changeset:pre-exit": "changeset pre exit",
|
|
30
35
|
"changeset:version": "changeset version",
|
|
31
36
|
"changeset:release": "changeset publish",
|
|
32
|
-
"changeset:prelease": "changeset publish --tag beta",
|
|
33
|
-
"type-check": "tsc --noEmit -p tsconfig.json --composite false",
|
|
34
37
|
"release:dev": "node scripts/release.cjs dev",
|
|
35
38
|
"release:fat": "node scripts/release.cjs fat",
|
|
36
39
|
"release:sandbox": "node scripts/release.cjs sandbox",
|
|
40
|
+
"release:noprod": "node scripts/release.cjs noprod",
|
|
37
41
|
"release:npm": "node scripts/release.cjs npm",
|
|
38
42
|
"release:prod": "node scripts/release.cjs prod",
|
|
39
|
-
"
|
|
43
|
+
"type-check": "tsc --noEmit -p tsconfig.json --composite false"
|
|
40
44
|
},
|
|
41
45
|
"publishConfig": {
|
|
42
46
|
"registry": "https://packages.aliyun.com/640edee5a84870ae9d591e48/npm/npm-registry/"
|
|
@@ -1,349 +0,0 @@
|
|
|
1
|
-
import { w, F, A, h, y, q, u, b } from "../../core.js";
|
|
2
|
-
import { useBEM } from "../../hooks/useBEM.js";
|
|
3
|
-
import { CoreContext } from "../../core/context.js";
|
|
4
|
-
import "../../utils/card-brand/brands.js";
|
|
5
|
-
import "../../utils/system-info/get-browser-info.js";
|
|
6
|
-
import { normalizedClass, formatAmount } from "../../utils/format.js";
|
|
7
|
-
import { redirectToPayment } from "../../utils/redirect.js";
|
|
8
|
-
import { formatPaymentResult } from "../../utils/payment.js";
|
|
9
|
-
import { isTimeoutError } from "../../api/http.js";
|
|
10
|
-
import { getBrowserParams } from "../../api/modules/get-browser-params.js";
|
|
11
|
-
import { PaymentCategory, COMMON_CLASS_NAME, PaymentMethod, SessionMode } from "../../constant.js";
|
|
12
|
-
import { getBoostPayInfo, boostPay } from "../../api/modules/boost/index.js";
|
|
13
|
-
import { PayKKaError } from "../../core/error.js";
|
|
14
|
-
import "../../out/worldpay-jsc-origin.js";
|
|
15
|
-
import { usePayState } from "../../hooks/usePayState.js";
|
|
16
|
-
import { useRetry } from "../../hooks/useRetry.js";
|
|
17
|
-
import { createEmailCore, EmailField } from "../EmailField/EmailField.js";
|
|
18
|
-
import { SubmitButton } from "../SubmitButton/index.js";
|
|
19
|
-
import "../internal/Form/type.js";
|
|
20
|
-
import "../internal/Form/context.js";
|
|
21
|
-
import "../internal/Form/FormItem.js";
|
|
22
|
-
import { Form } from "../internal/Form/Form.js";
|
|
23
|
-
import { AddressField } from "../AddressField/index.js";
|
|
24
|
-
import { Info } from "../internal/Info/Info.js";
|
|
25
|
-
import { GuideCard } from "../GuideCard/index.js";
|
|
26
|
-
const { bem } = useBEM("boost");
|
|
27
|
-
const fieldClassNames = bem("field");
|
|
28
|
-
const Boost = w((props, ref) => {
|
|
29
|
-
const {
|
|
30
|
-
session,
|
|
31
|
-
showEmail = false,
|
|
32
|
-
showAddress = false,
|
|
33
|
-
redirectMode = "auto",
|
|
34
|
-
core,
|
|
35
|
-
autoQuery = true,
|
|
36
|
-
showGuideCard = true,
|
|
37
|
-
hidePaymentButton = false
|
|
38
|
-
} = props;
|
|
39
|
-
F(ref, () => ({
|
|
40
|
-
stopRetry: () => {
|
|
41
|
-
setSubmitButtonStatus("unSubmit");
|
|
42
|
-
stopReFetchPayInfo();
|
|
43
|
-
},
|
|
44
|
-
startRetry: (timeout) => {
|
|
45
|
-
setSubmitButtonStatus("loading");
|
|
46
|
-
startReFetchPayInfo({ timeout });
|
|
47
|
-
},
|
|
48
|
-
updateAddress: () => {
|
|
49
|
-
var _a;
|
|
50
|
-
if (!(fieldStatus == null ? void 0 : fieldStatus.address.show))
|
|
51
|
-
return;
|
|
52
|
-
const newForm = Object.assign(form, { address: addressCore.getAddressState() });
|
|
53
|
-
setForm(newForm);
|
|
54
|
-
(_a = addressFieldRef.current) == null ? void 0 : _a.update(addressCore.getAddressState());
|
|
55
|
-
validateForm();
|
|
56
|
-
},
|
|
57
|
-
updateEmail: () => {
|
|
58
|
-
var _a;
|
|
59
|
-
if (!(fieldStatus == null ? void 0 : fieldStatus.email.show))
|
|
60
|
-
return;
|
|
61
|
-
const newForm = Object.assign(form, { email: emailState.email });
|
|
62
|
-
setForm(newForm);
|
|
63
|
-
(_a = emailFieldRef.current) == null ? void 0 : _a.update(emailState.email);
|
|
64
|
-
validateForm();
|
|
65
|
-
},
|
|
66
|
-
payment: () => {
|
|
67
|
-
hidePaymentButton && onSubmit();
|
|
68
|
-
}
|
|
69
|
-
}));
|
|
70
|
-
const addressCore = core.getAddressCore();
|
|
71
|
-
const emailState = createEmailCore();
|
|
72
|
-
const addressFieldRef = A(null);
|
|
73
|
-
const emailFieldRef = A(null);
|
|
74
|
-
const [isCheckoutEnabled, setIsCheckoutEnabled] = h(false);
|
|
75
|
-
const { setErrorMsg, fraudDetection, i18n, errorMsg, sessionReady } = usePayState(session, props.core);
|
|
76
|
-
const [submitButtonStatus, setSubmitButtonStatus] = h("unSubmit");
|
|
77
|
-
const formRef = A(null);
|
|
78
|
-
const [form, setForm] = h({
|
|
79
|
-
email: "",
|
|
80
|
-
address: {
|
|
81
|
-
country: void 0,
|
|
82
|
-
province: void 0,
|
|
83
|
-
city: void 0,
|
|
84
|
-
area: void 0,
|
|
85
|
-
postCode: void 0,
|
|
86
|
-
address1: void 0,
|
|
87
|
-
address2: void 0
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
const [validated, setValidated] = h(false);
|
|
91
|
-
const [fieldStatus, setFieldStatus] = h();
|
|
92
|
-
const getPaymentMethodContext = () => ({
|
|
93
|
-
paymentMethod: PaymentMethod.BOOST
|
|
94
|
-
});
|
|
95
|
-
const initFieldStatus = () => {
|
|
96
|
-
const { field, sessionMode } = session.checkout;
|
|
97
|
-
const { email, address } = field;
|
|
98
|
-
if (sessionMode === SessionMode.COMPONENT) {
|
|
99
|
-
if (email.disabled) {
|
|
100
|
-
email.show = showEmail;
|
|
101
|
-
}
|
|
102
|
-
if (showAddress && !(address == null ? void 0 : address.show)) {
|
|
103
|
-
address.show = true;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
setFieldStatus({ ...field });
|
|
107
|
-
};
|
|
108
|
-
const processOnSuccess = (res) => {
|
|
109
|
-
var _a, _b;
|
|
110
|
-
setSubmitButtonStatus("success");
|
|
111
|
-
(_b = props.onSuccess) == null ? void 0 : _b.call(props, formatPaymentResult({
|
|
112
|
-
...res,
|
|
113
|
-
returnUrl: (_a = session == null ? void 0 : session.checkout) == null ? void 0 : _a.returnUrl
|
|
114
|
-
}), getPaymentMethodContext());
|
|
115
|
-
};
|
|
116
|
-
y(() => {
|
|
117
|
-
if (!sessionReady) {
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
const { bill = {}, supportMethods = [], country } = (session == null ? void 0 : session.checkout) || {};
|
|
121
|
-
if (!supportMethods.includes(PaymentMethod.BOOST)) {
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
initFieldStatus();
|
|
125
|
-
setIsCheckoutEnabled(true);
|
|
126
|
-
country && addressCore.setCountry(country);
|
|
127
|
-
form.email = bill.email ?? "";
|
|
128
|
-
form.address.country = country;
|
|
129
|
-
if (autoQuery && core.processingPaymentMethod === PaymentMethod.BOOST) {
|
|
130
|
-
setSubmitButtonStatus("loading");
|
|
131
|
-
startReFetchPayInfo();
|
|
132
|
-
}
|
|
133
|
-
}, [sessionReady]);
|
|
134
|
-
const processOnError = (error) => {
|
|
135
|
-
var _a;
|
|
136
|
-
(_a = props.onError) == null ? void 0 : _a.call(props, error, getPaymentMethodContext());
|
|
137
|
-
core.resetEnablePaymentMethod();
|
|
138
|
-
};
|
|
139
|
-
const onTimeout = q(
|
|
140
|
-
(message) => {
|
|
141
|
-
var _a;
|
|
142
|
-
setErrorMsg(message || i18n.get("common.payTimeout"));
|
|
143
|
-
setSubmitButtonStatus("unSubmit");
|
|
144
|
-
(_a = props.onTimeout) == null ? void 0 : _a.call(props, "retry", getPaymentMethodContext());
|
|
145
|
-
core.resetEnablePaymentMethod();
|
|
146
|
-
},
|
|
147
|
-
[i18n, props.onTimeout]
|
|
148
|
-
);
|
|
149
|
-
const { start: startReFetchPayInfo, stop: stopReFetchPayInfo } = useRetry(
|
|
150
|
-
(timeout) => pay(true, timeout),
|
|
151
|
-
{ onTimeout: () => onTimeout(i18n.get("common.queryTimeout")) }
|
|
152
|
-
);
|
|
153
|
-
const getPaymentParams = async () => {
|
|
154
|
-
return {
|
|
155
|
-
sessionId: session.sessionId,
|
|
156
|
-
clientKey: session.clientKey,
|
|
157
|
-
payment: {
|
|
158
|
-
paymentMethod: PaymentMethod.BOOST
|
|
159
|
-
},
|
|
160
|
-
bill: {
|
|
161
|
-
email: form.email,
|
|
162
|
-
addressLine1: form.address.address1,
|
|
163
|
-
addressLine2: form.address.address2,
|
|
164
|
-
postalCode: form.address.postCode,
|
|
165
|
-
country: form.address.country,
|
|
166
|
-
district: form.address.area,
|
|
167
|
-
state: form.address.province ? addressCore.getLabel(form.address.province, addressCore.getProvinceOption()) ?? form.address.province : void 0,
|
|
168
|
-
city: form.address.city ? addressCore.getLabel(form.address.city, addressCore.getCityOptions()) ?? form.address.city : void 0
|
|
169
|
-
},
|
|
170
|
-
browser: await getBrowserParams({
|
|
171
|
-
fraudDetectionId: await (fraudDetection == null ? void 0 : fraudDetection.getFraudDetectionId())
|
|
172
|
-
})
|
|
173
|
-
};
|
|
174
|
-
};
|
|
175
|
-
const pay = async (search = false, timeout) => {
|
|
176
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
177
|
-
try {
|
|
178
|
-
const requestOptions = { locale: i18n.locale, timeout };
|
|
179
|
-
let res = null;
|
|
180
|
-
if (search) {
|
|
181
|
-
const extraParams = (_b = (_a = core.config)._getExtraParams) == null ? void 0 : _b.call(_a, "query", PaymentMethod.BOOST);
|
|
182
|
-
res = await getBoostPayInfo(
|
|
183
|
-
{
|
|
184
|
-
sessionId: session.sessionId,
|
|
185
|
-
clientKey: session.clientKey,
|
|
186
|
-
paymentMethod: PaymentMethod.BOOST
|
|
187
|
-
},
|
|
188
|
-
extraParams,
|
|
189
|
-
requestOptions
|
|
190
|
-
);
|
|
191
|
-
} else {
|
|
192
|
-
const extraParams = (_d = (_c = core.config)._getExtraParams) == null ? void 0 : _d.call(_c, "payment", PaymentMethod.BOOST);
|
|
193
|
-
res = await boostPay(await getPaymentParams(), extraParams, requestOptions);
|
|
194
|
-
}
|
|
195
|
-
!search && ((_e = props.onSubmitResponse) == null ? void 0 : _e.call(props, res, getPaymentMethodContext()));
|
|
196
|
-
const { status, orderStatus, errorMessage, errorCode, payInfo, sessionId } = res;
|
|
197
|
-
sessionId && (session.sessionId = sessionId);
|
|
198
|
-
if (status === "PROCESSING") {
|
|
199
|
-
if (!orderStatus) {
|
|
200
|
-
setSubmitButtonStatus("unSubmit");
|
|
201
|
-
return { end: true };
|
|
202
|
-
} else if (orderStatus === "SUCCESS") {
|
|
203
|
-
processOnSuccess(res);
|
|
204
|
-
return { end: true };
|
|
205
|
-
} else if (orderStatus === "FAILURE") {
|
|
206
|
-
errorMessage && setErrorMsg(errorMessage);
|
|
207
|
-
setSubmitButtonStatus("unSubmit");
|
|
208
|
-
processOnError(new PayKKaError("API_ERROR", errorMessage, { code: errorCode }));
|
|
209
|
-
return { end: true };
|
|
210
|
-
} else if (orderStatus === "PROCESSING") {
|
|
211
|
-
if (!search) {
|
|
212
|
-
if (redirectMode === "auto" && payInfo) {
|
|
213
|
-
redirectToPayment(payInfo);
|
|
214
|
-
return { end: true };
|
|
215
|
-
} else {
|
|
216
|
-
startReFetchPayInfo();
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
return { end: false };
|
|
220
|
-
} else if (orderStatus === "CANCELED") {
|
|
221
|
-
setSubmitButtonStatus("unSubmit");
|
|
222
|
-
(_f = props.onTimeout) == null ? void 0 : _f.call(props, "channel", getPaymentMethodContext());
|
|
223
|
-
core.resetEnablePaymentMethod();
|
|
224
|
-
return { end: true };
|
|
225
|
-
}
|
|
226
|
-
} else if (status === "SUCCESS") {
|
|
227
|
-
processOnSuccess(res);
|
|
228
|
-
return { end: true };
|
|
229
|
-
} else if (status === "EXPIRED") {
|
|
230
|
-
setSubmitButtonStatus("unSubmit");
|
|
231
|
-
(_g = props.onExpired) == null ? void 0 : _g.call(props, getPaymentMethodContext());
|
|
232
|
-
return { end: true };
|
|
233
|
-
}
|
|
234
|
-
setSubmitButtonStatus("unSubmit");
|
|
235
|
-
return { end: true };
|
|
236
|
-
} catch (error) {
|
|
237
|
-
if (isTimeoutError(error)) {
|
|
238
|
-
if (search) {
|
|
239
|
-
return { end: false };
|
|
240
|
-
} else {
|
|
241
|
-
onTimeout();
|
|
242
|
-
return { end: true };
|
|
243
|
-
}
|
|
244
|
-
} else {
|
|
245
|
-
const message = error.i18nKey ? i18n.get(error.i18nKey) : error.message;
|
|
246
|
-
message && setErrorMsg(message);
|
|
247
|
-
processOnError(new PayKKaError("API_ERROR", message, { code: error.code, cause: error }));
|
|
248
|
-
setSubmitButtonStatus("unSubmit");
|
|
249
|
-
return { end: true };
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
};
|
|
253
|
-
const validateForm = () => {
|
|
254
|
-
var _a;
|
|
255
|
-
(_a = formRef.current) == null ? void 0 : _a.validate(void 0, false).then(() => {
|
|
256
|
-
setValidated(true);
|
|
257
|
-
}).catch(() => {
|
|
258
|
-
setValidated(false);
|
|
259
|
-
});
|
|
260
|
-
};
|
|
261
|
-
y(() => {
|
|
262
|
-
validateForm();
|
|
263
|
-
}, [form]);
|
|
264
|
-
const onSubmit = async () => {
|
|
265
|
-
var _a;
|
|
266
|
-
setErrorMsg("");
|
|
267
|
-
(_a = formRef.current) == null ? void 0 : _a.validate(async (errors) => {
|
|
268
|
-
var _a2;
|
|
269
|
-
(fieldStatus == null ? void 0 : fieldStatus.address.show) && addressCore.setValidateAllFields(true);
|
|
270
|
-
(_a2 = props.onSubmit) == null ? void 0 : _a2.call(props, errors, getPaymentMethodContext());
|
|
271
|
-
if (errors) {
|
|
272
|
-
setSubmitButtonStatus("unSubmit");
|
|
273
|
-
return;
|
|
274
|
-
}
|
|
275
|
-
setErrorMsg("");
|
|
276
|
-
setSubmitButtonStatus("loading");
|
|
277
|
-
await pay();
|
|
278
|
-
});
|
|
279
|
-
};
|
|
280
|
-
const setFormRef = (dom) => {
|
|
281
|
-
formRef.current = dom;
|
|
282
|
-
dom && validateForm();
|
|
283
|
-
};
|
|
284
|
-
const Button = () => {
|
|
285
|
-
var _a;
|
|
286
|
-
const transAmount = (_a = session == null ? void 0 : session.checkout) == null ? void 0 : _a.transAmount;
|
|
287
|
-
const amountText = (transAmount == null ? void 0 : transAmount.amount) ? formatAmount(transAmount).jointSymbol() : "";
|
|
288
|
-
const text = i18n.get("common.pay") + (amountText ? ` ${amountText}` : "");
|
|
289
|
-
return /* @__PURE__ */ u(
|
|
290
|
-
SubmitButton,
|
|
291
|
-
{
|
|
292
|
-
className: bem("button"),
|
|
293
|
-
status: submitButtonStatus,
|
|
294
|
-
text,
|
|
295
|
-
loadingText: i18n.get("common.payProcessing"),
|
|
296
|
-
successText: i18n.get("common.paySuccess"),
|
|
297
|
-
onClick: onSubmit,
|
|
298
|
-
verified: validated
|
|
299
|
-
}
|
|
300
|
-
);
|
|
301
|
-
};
|
|
302
|
-
const Email = () => {
|
|
303
|
-
return /* @__PURE__ */ u(b, { children: (fieldStatus == null ? void 0 : fieldStatus.email.show) && /* @__PURE__ */ u("div", { className: fieldClassNames, children: /* @__PURE__ */ u(
|
|
304
|
-
EmailField,
|
|
305
|
-
{
|
|
306
|
-
ref: emailFieldRef,
|
|
307
|
-
value: form.email,
|
|
308
|
-
disabled: fieldStatus == null ? void 0 : fieldStatus.email.disabled
|
|
309
|
-
}
|
|
310
|
-
) }) });
|
|
311
|
-
};
|
|
312
|
-
const ErrorMessage = () => {
|
|
313
|
-
return /* @__PURE__ */ u(b, { children: !!errorMsg && /* @__PURE__ */ u(Info, { content: errorMsg }) });
|
|
314
|
-
};
|
|
315
|
-
const Address = () => {
|
|
316
|
-
return /* @__PURE__ */ u(b, { children: (fieldStatus == null ? void 0 : fieldStatus.address.show) && /* @__PURE__ */ u("div", { className: fieldClassNames, children: /* @__PURE__ */ u(
|
|
317
|
-
AddressField,
|
|
318
|
-
{
|
|
319
|
-
ref: addressFieldRef,
|
|
320
|
-
value: form.address,
|
|
321
|
-
onChange: (value) => setForm(Object.assign(form, { address: value }))
|
|
322
|
-
}
|
|
323
|
-
) }) });
|
|
324
|
-
};
|
|
325
|
-
return /* @__PURE__ */ u(
|
|
326
|
-
CoreContext.Provider,
|
|
327
|
-
{
|
|
328
|
-
value: {
|
|
329
|
-
i18n,
|
|
330
|
-
session,
|
|
331
|
-
core
|
|
332
|
-
},
|
|
333
|
-
children: isCheckoutEnabled && i18n.ready.value && /* @__PURE__ */ u("div", { className: core.theme.className, children: [
|
|
334
|
-
showGuideCard && /* @__PURE__ */ u(GuideCard, { type: PaymentCategory.BOOST }),
|
|
335
|
-
/* @__PURE__ */ u(Form, { form, ref: setFormRef, onFormChange: (form2) => setForm(form2), children: /* @__PURE__ */ u("div", { className: normalizedClass(COMMON_CLASS_NAME, bem()), children: [
|
|
336
|
-
Email(),
|
|
337
|
-
Address(),
|
|
338
|
-
/* @__PURE__ */ u("div", { className: bem("footer-wrapper"), children: [
|
|
339
|
-
ErrorMessage(),
|
|
340
|
-
!hidePaymentButton && Button()
|
|
341
|
-
] })
|
|
342
|
-
] }) })
|
|
343
|
-
] })
|
|
344
|
-
}
|
|
345
|
-
);
|
|
346
|
-
});
|
|
347
|
-
export {
|
|
348
|
-
Boost
|
|
349
|
-
};
|