@paykka/card-checkout-ui 0.11.6 → 0.13.1

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.
Files changed (187) hide show
  1. package/dist/card-checkout-ui.js +17 -17
  2. package/dist/card-checkout-ui.umd.cjs +17 -17
  3. package/dist/es/api/index.js +1 -0
  4. package/dist/es/api/modules/address/index.js +9 -9
  5. package/dist/es/api/modules/ali-pay/index.js +10 -49
  6. package/dist/es/api/modules/apple-pay/index.js +13 -59
  7. package/dist/es/api/modules/boost/index.js +8 -48
  8. package/dist/es/api/modules/card/index.js +10 -54
  9. package/dist/es/api/modules/checkout/index.js +11 -9
  10. package/dist/es/api/modules/checkout/map.js +25 -18
  11. package/dist/es/api/modules/encrypted-card/index.js +3 -2
  12. package/dist/es/api/modules/gcash/index.js +8 -48
  13. package/dist/es/api/modules/google-pay/index.js +10 -56
  14. package/dist/es/api/modules/grab-pay/index.js +8 -48
  15. package/dist/es/api/modules/index.js +1 -0
  16. package/dist/es/api/modules/line-pay/index.js +8 -48
  17. package/dist/es/api/modules/map.js +17 -11
  18. package/dist/es/api/modules/may-bank-qr-pay/index.js +8 -48
  19. package/dist/es/api/modules/nine-pay/index.js +8 -48
  20. package/dist/es/api/modules/paymaya/index.js +8 -48
  21. package/dist/es/api/modules/risk/index.js +2 -1
  22. package/dist/es/api/modules/sepa/index.js +10 -51
  23. package/dist/es/api/modules/shopee-pay/index.js +8 -48
  24. package/dist/es/api/modules/threeDS/index.js +3 -0
  25. package/dist/es/api/modules/tng-wallet/index.js +8 -48
  26. package/dist/es/api/modules/wechat-pay/index.js +10 -51
  27. package/dist/es/api/modules/zalopay/index.js +16 -0
  28. package/dist/es/api/utils/index.js +59 -0
  29. package/dist/es/components/AddressField/index.js +37 -37
  30. package/dist/es/components/AliPay/index.js +143 -90
  31. package/dist/es/components/ApplePay/index.js +99 -67
  32. package/dist/es/components/Boost/index.js +66 -39
  33. package/dist/es/components/Card/index.js +90 -79
  34. package/dist/es/components/CardSelector/index.js +1 -1
  35. package/dist/es/components/DropIn/index.js +12 -4
  36. package/dist/es/components/EncryptedCard/index.js +1 -1
  37. package/dist/es/components/GooglePay/index.js +93 -60
  38. package/dist/es/components/GrabPay/index.js +66 -39
  39. package/dist/es/components/GuideCard/index.js +10 -7
  40. package/dist/es/components/LinePay/index.js +66 -39
  41. package/dist/es/components/MayBankQRPay/index.js +306 -273
  42. package/dist/es/components/NinePay/index.js +66 -39
  43. package/dist/es/components/SecuredFieldsProvider/index.js +3 -2
  44. package/dist/es/components/SecuredIframe/index.js +4 -2
  45. package/dist/es/components/Sepa/index.js +62 -39
  46. package/dist/es/components/ShopeePay/index.js +66 -39
  47. package/dist/es/components/SubmitButton/index.js +8 -7
  48. package/dist/es/components/TNGWallet/index.js +66 -39
  49. package/dist/es/components/WechatPay/index.js +146 -92
  50. package/dist/es/components/business/QRCodeModal/QRCodeModal.js +26 -6
  51. package/dist/es/components/index.js +1 -0
  52. package/dist/es/components/internal/Modal/Modal.js +1 -1
  53. package/dist/es/components/internal/Select/Select.js +19 -8
  54. package/dist/es/components/internal/Select/SelectMenuItem.js +12 -4
  55. package/dist/es/components/internal/icons/IconZalopay.js +47 -0
  56. package/dist/es/components/internal/icons/IconZalopayComplete.js +48 -0
  57. package/dist/es/components/wallets/GCash/GCash.js +68 -39
  58. package/dist/es/components/wallets/Paymaya/Paymaya.js +66 -39
  59. package/dist/es/components/wallets/Zalopay/Zalopay.js +386 -0
  60. package/dist/es/components/wallets/Zalopay/index.js +1 -0
  61. package/dist/es/components/wallets/Zalopay/type.js +1 -0
  62. package/dist/es/components/wallets/Zalopay/zalopay2.js +1 -0
  63. package/dist/es/config.js +5 -5
  64. package/dist/es/constant.js +8 -2
  65. package/dist/es/core/{Address.js → address.js} +8 -16
  66. package/dist/es/core/{PayKKaCheckout.js → checkout.js} +78 -27
  67. package/dist/es/core/query.js +3 -2
  68. package/dist/es/core/{Session.js → session.js} +37 -20
  69. package/dist/es/core.js +0 -4
  70. package/dist/es/hooks/usePayment.js +14 -0
  71. package/dist/es/i18n/locales/de-DE.js +3 -1
  72. package/dist/es/i18n/locales/en-GB.js +3 -1
  73. package/dist/es/i18n/locales/es-ES.js +3 -1
  74. package/dist/es/i18n/locales/fr-FR.js +3 -1
  75. package/dist/es/i18n/locales/ja-JP.js +3 -1
  76. package/dist/es/i18n/locales/ko-KR.js +3 -1
  77. package/dist/es/i18n/locales/nl-NL.js +3 -1
  78. package/dist/es/i18n/locales/pt-PT.js +3 -1
  79. package/dist/es/i18n/locales/ru-RU.js +3 -1
  80. package/dist/es/i18n/locales/zh-CN.js +3 -1
  81. package/dist/es/i18n/locales/zh-HK.js +3 -1
  82. package/dist/es/i18n/locales/zh-TW.js +3 -1
  83. package/dist/es/index.js +16 -4
  84. package/dist/es/style.css +1 -1
  85. package/dist/es/types/index.js +7 -0
  86. package/dist/es/utils/colors.js +5 -1
  87. package/dist/es/utils/payment.js +82 -0
  88. package/dist/es/utils/redirect.js +4 -4
  89. package/dist/style.css +1 -1
  90. package/dist/types/api/modules/address/index.d.ts +15 -6
  91. package/dist/types/api/modules/ali-pay/index.d.ts +3 -19
  92. package/dist/types/api/modules/apple-pay/index.d.ts +4 -14
  93. package/dist/types/api/modules/boost/index.d.ts +3 -23
  94. package/dist/types/api/modules/card/index.d.ts +3 -30
  95. package/dist/types/api/modules/checkout/index.d.ts +3 -3
  96. package/dist/types/api/modules/checkout/map.d.ts +3 -3
  97. package/dist/types/api/modules/checkout/type.d.ts +33 -4
  98. package/dist/types/api/modules/gcash/index.d.ts +3 -23
  99. package/dist/types/api/modules/google-pay/index.d.ts +3 -13
  100. package/dist/types/api/modules/grab-pay/index.d.ts +3 -23
  101. package/dist/types/api/modules/index.d.ts +1 -0
  102. package/dist/types/api/modules/line-pay/index.d.ts +3 -23
  103. package/dist/types/api/modules/map.d.ts +2 -2
  104. package/dist/types/api/modules/may-bank-qr-pay/index.d.ts +3 -23
  105. package/dist/types/api/modules/nine-pay/index.d.ts +3 -23
  106. package/dist/types/api/modules/paymaya/index.d.ts +3 -23
  107. package/dist/types/api/modules/sepa/index.d.ts +3 -24
  108. package/dist/types/api/modules/shopee-pay/index.d.ts +3 -23
  109. package/dist/types/api/modules/tng-wallet/index.d.ts +3 -23
  110. package/dist/types/api/modules/type.d.ts +74 -21
  111. package/dist/types/api/modules/wechat-pay/index.d.ts +3 -20
  112. package/dist/types/api/modules/zalopay/index.d.ts +4 -0
  113. package/dist/types/api/utils/index.d.ts +48 -0
  114. package/dist/types/components/AddressField/type.d.ts +3 -9
  115. package/dist/types/components/AliPay/AliPay.d.ts +6 -2
  116. package/dist/types/components/AliPay/type.d.ts +15 -2
  117. package/dist/types/components/ApplePay/ApplePay.d.ts +6 -2
  118. package/dist/types/components/ApplePay/type.d.ts +10 -14
  119. package/dist/types/components/ApplePay/utils.d.ts +1 -1
  120. package/dist/types/components/Boost/Boost.d.ts +6 -2
  121. package/dist/types/components/Boost/type.d.ts +2 -24
  122. package/dist/types/components/Card/Card.d.ts +6 -2
  123. package/dist/types/components/Card/type.d.ts +3 -43
  124. package/dist/types/components/DropIn/DropIn.d.ts +6 -2
  125. package/dist/types/components/DropIn/type.d.ts +4 -10
  126. package/dist/types/components/GooglePay/GooglePay.d.ts +6 -2
  127. package/dist/types/components/GooglePay/createGooglePay.d.ts +2 -1
  128. package/dist/types/components/GooglePay/type.d.ts +10 -26
  129. package/dist/types/components/GrabPay/GrabPay.d.ts +6 -2
  130. package/dist/types/components/GrabPay/type.d.ts +3 -25
  131. package/dist/types/components/LinePay/LinePay.d.ts +6 -2
  132. package/dist/types/components/LinePay/type.d.ts +3 -25
  133. package/dist/types/components/MayBankQRPay/MayBankQRPay.d.ts +6 -2
  134. package/dist/types/components/MayBankQRPay/type.d.ts +3 -25
  135. package/dist/types/components/NinePay/NinePay.d.ts +6 -2
  136. package/dist/types/components/NinePay/type.d.ts +3 -25
  137. package/dist/types/components/Sepa/Sepa.d.ts +6 -2
  138. package/dist/types/components/Sepa/type.d.ts +3 -2
  139. package/dist/types/components/ShopeePay/ShopeePay.d.ts +6 -2
  140. package/dist/types/components/ShopeePay/type.d.ts +3 -25
  141. package/dist/types/components/TNGWallet/TNGWallet.d.ts +6 -2
  142. package/dist/types/components/TNGWallet/type.d.ts +3 -25
  143. package/dist/types/components/WechatPay/WechatPay.d.ts +6 -2
  144. package/dist/types/components/WechatPay/type.d.ts +15 -2
  145. package/dist/types/components/business/QRCodeModal/type.d.ts +2 -0
  146. package/dist/types/components/index.d.ts +1 -0
  147. package/dist/types/components/internal/icons/IconZalopay.d.ts +2 -0
  148. package/dist/types/components/internal/icons/IconZalopayComplete.d.ts +2 -0
  149. package/dist/types/components/internal/icons/index.d.ts +3 -0
  150. package/dist/types/components/wallets/GCash/GCash.d.ts +6 -2
  151. package/dist/types/components/wallets/GCash/type.d.ts +3 -35
  152. package/dist/types/components/wallets/Paymaya/Paymaya.d.ts +6 -2
  153. package/dist/types/components/wallets/Paymaya/type.d.ts +3 -25
  154. package/dist/types/components/wallets/Zalopay/Zalopay.d.ts +10 -0
  155. package/dist/types/components/wallets/Zalopay/index.d.ts +2 -0
  156. package/dist/types/components/wallets/Zalopay/type.d.ts +39 -0
  157. package/dist/types/config.d.ts +2 -4
  158. package/dist/types/constant.d.ts +3 -1
  159. package/dist/types/core/{Address.d.ts → address.d.ts} +23 -24
  160. package/dist/types/core/{PayKKaCheckout.d.ts → checkout.d.ts} +5 -3
  161. package/dist/types/core/context.d.ts +3 -2
  162. package/dist/types/core/index.d.ts +2 -2
  163. package/dist/types/core/query.d.ts +2 -2
  164. package/dist/types/core/session.d.ts +33 -0
  165. package/dist/types/hooks/index.d.ts +1 -0
  166. package/dist/types/hooks/usePayment.d.ts +8 -0
  167. package/dist/types/i18n/locales/de-DE.d.ts +2 -0
  168. package/dist/types/i18n/locales/en-GB.d.ts +2 -0
  169. package/dist/types/i18n/locales/es-ES.d.ts +2 -0
  170. package/dist/types/i18n/locales/fr-FR.d.ts +2 -0
  171. package/dist/types/i18n/locales/ja-JP.d.ts +2 -0
  172. package/dist/types/i18n/locales/ko-KR.d.ts +2 -0
  173. package/dist/types/i18n/locales/nl-NL.d.ts +2 -0
  174. package/dist/types/i18n/locales/pt-PT.d.ts +2 -0
  175. package/dist/types/i18n/locales/ru-RU.d.ts +2 -0
  176. package/dist/types/i18n/locales/zh-CN.d.ts +2 -0
  177. package/dist/types/i18n/locales/zh-HK.d.ts +2 -0
  178. package/dist/types/i18n/locales/zh-TW.d.ts +2 -0
  179. package/dist/types/index.d.ts +2 -1
  180. package/dist/types/types/index.d.ts +70 -32
  181. package/dist/types/types/message.d.ts +1 -0
  182. package/dist/types/utils/card-brand/index.d.ts +3 -3
  183. package/dist/types/utils/colors.d.ts +1 -0
  184. package/dist/types/utils/index.d.ts +1 -0
  185. package/dist/types/utils/payment.d.ts +37 -0
  186. package/package.json +3 -3
  187. package/dist/types/core/Session.d.ts +0 -16
@@ -1,10 +1,12 @@
1
1
  import { w, h, y, q, u, b } from "../../core.js";
2
2
  import { isTimeoutError } from "../../api/http.js";
3
- import { SessionMode, PaymentMethod } from "../../constant.js";
4
3
  import "../../utils/card-brand/brands.js";
5
4
  import "../../utils/system-info/get-browser-info.js";
6
5
  import { parseE164, underscoreToUpperCamelCase } from "../../utils/format.js";
6
+ import { deepMerge } from "../../utils/object.js";
7
+ import { formatPaymentResult } from "../../utils/payment.js";
7
8
  import { getBrowserParams } from "../../api/modules/get-browser-params.js";
9
+ import { SessionMode, PaymentMethod } from "../../constant.js";
8
10
  import { getApplePayInfo, applePay, getMerchantSession } from "../../api/modules/apple-pay/index.js";
9
11
  import { useBEM } from "../../hooks/useBEM.js";
10
12
  import "../../core/context.js";
@@ -29,7 +31,7 @@ async function applePayEnv(id) {
29
31
  if (!id || !ApplePaySession)
30
32
  return false;
31
33
  if (!((_a = ApplePaySession.canMakePayments) == null ? void 0 : _a.call(ApplePaySession))) {
32
- return;
34
+ return false;
33
35
  }
34
36
  const capabilities = await ((_b = ApplePaySession.applePayCapabilities) == null ? void 0 : _b.call(ApplePaySession, id));
35
37
  if ([
@@ -42,21 +44,39 @@ async function applePayEnv(id) {
42
44
  return false;
43
45
  }
44
46
  const { bem } = useBEM("apple-pay");
47
+ const DEFAULT_APPLE_PAY_CONFIG = {
48
+ request: {
49
+ requiredBillingContactFields: ["name", "email"],
50
+ requiredShippingContactFields: ["email"]
51
+ },
52
+ button: {
53
+ buttonStyle: "black",
54
+ buttonType: "plain"
55
+ }
56
+ };
45
57
  const ApplePay = w((props) => {
46
- const { session, isDropIn } = props;
58
+ const { session, isDropIn, core, config } = props;
47
59
  let applePaySession;
48
60
  const { i18n, sessionReady, fraudDetection } = usePayState(session, props.core);
49
61
  const [errorMsg, setErrorMsg] = h("");
50
62
  const [showApplePay, setShowApplePay] = h(false);
51
- const getPaymentSuccessData = () => ({
52
- returnUrl: session == null ? void 0 : session.checkout.returnUrl
53
- });
63
+ const applePayConfig = deepMerge(DEFAULT_APPLE_PAY_CONFIG, config || {});
64
+ const processOnSuccess = (res) => {
65
+ var _a, _b;
66
+ (_b = props.onSuccess) == null ? void 0 : _b.call(
67
+ props,
68
+ formatPaymentResult({
69
+ ...res,
70
+ returnUrl: (_a = session == null ? void 0 : session.checkout) == null ? void 0 : _a.returnUrl
71
+ })
72
+ );
73
+ };
54
74
  y(() => {
55
- var _a, _b, _c;
75
+ var _a, _b;
56
76
  if (!sessionReady) {
57
77
  return;
58
78
  }
59
- const { status, paymentMethod = [], sessionMode } = (session == null ? void 0 : session.checkout) || {};
79
+ const { status, supportMethods = [], sessionMode } = (session == null ? void 0 : session.checkout) || {};
60
80
  if (sessionMode === SessionMode.DROP_IN && !isDropIn) {
61
81
  (_b = (_a = props.core.config).onInitError) == null ? void 0 : _b.call(
62
82
  _a,
@@ -64,20 +84,18 @@ const ApplePay = w((props) => {
64
84
  );
65
85
  return;
66
86
  }
67
- if (!paymentMethod.includes(PaymentMethod.APPLE_PAY)) {
87
+ if (!supportMethods.includes(PaymentMethod.APPLE_PAY)) {
68
88
  return;
69
89
  }
70
90
  loadApplePayJS(
71
91
  async () => {
72
- var _a2, _b2, _c2, _d;
92
+ var _a2, _b2, _c, _d, _e;
93
+ (_a2 = props.onLoad) == null ? void 0 : _a2.call(props, true);
73
94
  const envSupported = await applePayEnv(
74
- (_c2 = (_b2 = (_a2 = session == null ? void 0 : session.checkout) == null ? void 0 : _a2.channelParams) == null ? void 0 : _b2.applePay) == null ? void 0 : _c2.merchantIdentifier
95
+ (_d = (_c = (_b2 = session == null ? void 0 : session.checkout) == null ? void 0 : _b2.channelParams) == null ? void 0 : _c.applePay) == null ? void 0 : _d.merchantIdentifier
75
96
  );
76
- if (!envSupported) {
77
- return;
78
- }
79
- setShowApplePay(true);
80
- (_d = props.onLoad) == null ? void 0 : _d.call(props, true);
97
+ (_e = props.onCanUse) == null ? void 0 : _e.call(props, envSupported);
98
+ setShowApplePay(envSupported);
81
99
  },
82
100
  () => {
83
101
  var _a2;
@@ -86,7 +104,7 @@ const ApplePay = w((props) => {
86
104
  }
87
105
  );
88
106
  if (status === "SUCCESS") {
89
- (_c = props.onSuccess) == null ? void 0 : _c.call(props, getPaymentSuccessData());
107
+ processOnSuccess(session == null ? void 0 : session.checkout);
90
108
  }
91
109
  }, [sessionReady]);
92
110
  const onTimeout = q(
@@ -105,59 +123,72 @@ const ApplePay = w((props) => {
105
123
  const { start: startReFetchPayInfo } = useRetry((timeout) => pay(true, timeout), {
106
124
  onTimeout: () => onTimeout(i18n.get("common.queryTimeout"))
107
125
  });
126
+ const getPaymentParams = async (token, billingContact, shippingContact) => {
127
+ var _a, _b;
128
+ const phone = parseE164(billingContact == null ? void 0 : billingContact.phoneNumber);
129
+ return {
130
+ sessionId: session.sessionId,
131
+ clientKey: session.clientKey,
132
+ bill: {
133
+ firstName: billingContact == null ? void 0 : billingContact.familyName,
134
+ lastName: billingContact == null ? void 0 : billingContact.givenName,
135
+ addressLine1: (_a = billingContact == null ? void 0 : billingContact.addressLines) == null ? void 0 : _a[0],
136
+ addressLine2: (_b = billingContact == null ? void 0 : billingContact.addressLines) == null ? void 0 : _b[1],
137
+ state: billingContact == null ? void 0 : billingContact.administrativeArea,
138
+ city: billingContact == null ? void 0 : billingContact.locality,
139
+ postalCode: billingContact == null ? void 0 : billingContact.postalCode,
140
+ areaCode: phone == null ? void 0 : phone.areaCode,
141
+ phoneNumber: phone == null ? void 0 : phone.phoneNumber,
142
+ email: (billingContact == null ? void 0 : billingContact.emailAddress) || (shippingContact == null ? void 0 : shippingContact.emailAddress) || (session == null ? void 0 : session.checkout.bill.email),
143
+ country: billingContact == null ? void 0 : billingContact.countryCode
144
+ },
145
+ payment: {
146
+ paymentMethod: PaymentMethod.APPLE_PAY,
147
+ tokenData: JSON.stringify({ token })
148
+ },
149
+ browser: await getBrowserParams({
150
+ fraudDetectionId: await (fraudDetection == null ? void 0 : fraudDetection.getFraudDetectionId())
151
+ })
152
+ };
153
+ };
108
154
  async function pay(search = false, timeout, token, billingContact, shippingContact) {
109
- var _a, _b, _c, _d, _e, _f, _g;
155
+ var _a, _b, _c, _d, _e, _f, _g, _h;
110
156
  setErrorMsg("");
111
157
  try {
112
- const res = await (search ? getApplePayInfo(
113
- {
114
- sessionId: session.sessionId,
115
- clientKey: session.clientKey
116
- },
117
- { locale: i18n.locale, timeout }
118
- ) : async function() {
119
- var _a2, _b2;
120
- const phone = parseE164(billingContact == null ? void 0 : billingContact.phoneNumber);
121
- return applePay(
158
+ const requestOptions = { locale: i18n.locale, timeout };
159
+ let res = null;
160
+ if (search) {
161
+ const extraParams = (_b = (_a = core.config)._getExtraParams) == null ? void 0 : _b.call(_a, "query", PaymentMethod.APPLE_PAY);
162
+ res = await getApplePayInfo(
122
163
  {
123
164
  sessionId: session.sessionId,
124
165
  clientKey: session.clientKey,
125
- token: JSON.stringify({
126
- token
127
- }),
128
- bill: {
129
- firstName: billingContact == null ? void 0 : billingContact.familyName,
130
- lastName: billingContact == null ? void 0 : billingContact.givenName,
131
- addressLine1: (_a2 = billingContact == null ? void 0 : billingContact.addressLines) == null ? void 0 : _a2[0],
132
- addressLine2: (_b2 = billingContact == null ? void 0 : billingContact.addressLines) == null ? void 0 : _b2[1],
133
- state: billingContact == null ? void 0 : billingContact.administrativeArea,
134
- city: billingContact == null ? void 0 : billingContact.locality,
135
- postalCode: billingContact == null ? void 0 : billingContact.postalCode,
136
- areaCode: phone == null ? void 0 : phone.areaCode,
137
- phoneNumber: phone == null ? void 0 : phone.phoneNumber,
138
- email: (billingContact == null ? void 0 : billingContact.emailAddress) || (shippingContact == null ? void 0 : shippingContact.emailAddress) || (session == null ? void 0 : session.checkout.bill.email),
139
- country: billingContact == null ? void 0 : billingContact.countryCode
140
- },
141
- browser: await getBrowserParams({
142
- fraudDetectionId: await (fraudDetection == null ? void 0 : fraudDetection.getFraudDetectionId())
143
- })
166
+ paymentMethod: PaymentMethod.APPLE_PAY
144
167
  },
145
- props.core,
146
- { locale: i18n.locale }
168
+ extraParams,
169
+ requestOptions
170
+ );
171
+ } else {
172
+ const extraParams = (_d = (_c = core.config)._getExtraParams) == null ? void 0 : _d.call(_c, "payment", PaymentMethod.APPLE_PAY);
173
+ res = await applePay(
174
+ await getPaymentParams(token, billingContact, shippingContact),
175
+ extraParams,
176
+ requestOptions
147
177
  );
148
- }());
149
- const { status, orderStatus, errorMessage, errorCode } = res;
178
+ }
179
+ const { status, orderStatus, errorMessage, errorCode, sessionId } = res;
180
+ sessionId && (session.sessionId = sessionId);
150
181
  if (status === "PROCESSING") {
151
182
  if (orderStatus === "SUCCESS") {
152
183
  applePaySession.completePayment({ status: 0 });
153
- (_a = props.onSuccess) == null ? void 0 : _a.call(props, getPaymentSuccessData());
184
+ processOnSuccess(res);
154
185
  return { end: true };
155
186
  } else if (orderStatus === "PROCESSING") {
156
187
  !search && await startReFetchPayInfo();
157
188
  return { end: !search };
158
189
  } else if (orderStatus === "FAILURE") {
159
- setErrorMsg(errorMessage);
160
- (_b = props.onError) == null ? void 0 : _b.call(props, new PayKKaError("API_ERROR", errorMessage, { code: errorCode }));
190
+ errorMessage && setErrorMsg(errorMessage);
191
+ (_e = props.onError) == null ? void 0 : _e.call(props, new PayKKaError("API_ERROR", errorMessage, { code: errorCode }));
161
192
  applePaySession.completePayment({
162
193
  status: 1,
163
194
  errors: [new ApplePayError("unknown", void 0, errorMessage)]
@@ -165,7 +196,7 @@ const ApplePay = w((props) => {
165
196
  return { end: true };
166
197
  } else if (orderStatus === "AUTHORIZED") {
167
198
  applePaySession.completePayment({ status: 0 });
168
- (_c = props.onAuthorized) == null ? void 0 : _c.call(props);
199
+ (_f = props.onAuthorized) == null ? void 0 : _f.call(props);
169
200
  return { end: true };
170
201
  } else if (!orderStatus) {
171
202
  applePaySession.completePayment({
@@ -175,15 +206,15 @@ const ApplePay = w((props) => {
175
206
  return { end: true };
176
207
  }
177
208
  } else if (status === "SUCCESS") {
178
- (_d = props.onSuccess) == null ? void 0 : _d.call(props, getPaymentSuccessData());
209
+ processOnSuccess(res);
179
210
  applePaySession.completePayment({ status: 0 });
180
211
  return { end: true };
181
212
  } else if (status === "EXPIRED") {
182
- (_e = props.onExpired) == null ? void 0 : _e.call(props);
213
+ (_g = props.onExpired) == null ? void 0 : _g.call(props);
183
214
  applePaySession.abort();
184
215
  return { end: true };
185
216
  }
186
- (_f = props.onSuccess) == null ? void 0 : _f.call(props, getPaymentSuccessData());
217
+ processOnSuccess(res);
187
218
  return { end: true };
188
219
  } catch (error) {
189
220
  if (isTimeoutError(error)) {
@@ -195,8 +226,8 @@ const ApplePay = w((props) => {
195
226
  }
196
227
  } else {
197
228
  const message = error.i18nKey ? i18n.get(error.i18nKey) : error.message;
198
- setErrorMsg(message);
199
- (_g = props.onError) == null ? void 0 : _g.call(props, new PayKKaError("API_ERROR", message, { code: error.code, cause: error }));
229
+ message && setErrorMsg(message);
230
+ (_h = props.onError) == null ? void 0 : _h.call(props, new PayKKaError("API_ERROR", message, { code: error.code, cause: error }));
200
231
  applePaySession.completePayment({
201
232
  status: 1,
202
233
  errors: [new ApplePayError("unknown", void 0, message)]
@@ -206,15 +237,15 @@ const ApplePay = w((props) => {
206
237
  }
207
238
  }
208
239
  function onApplePayButtonClicked() {
209
- var _a, _b, _c, _d;
240
+ var _a, _b, _c, _d, _e, _f;
210
241
  (_a = props.onBtnClick) == null ? void 0 : _a.call(props);
211
242
  if (!ApplePaySession) {
212
243
  return;
213
244
  }
214
245
  const checkout = session == null ? void 0 : session.checkout;
215
246
  const { applePay: applePay2 } = (checkout == null ? void 0 : checkout.channelParams) ?? {};
216
- const requiredBillingContactFields = ["name", "email"];
217
- if (((_b = checkout == null ? void 0 : checkout.bill) == null ? void 0 : _b.billingAddressCollection) === "REQUIRED") {
247
+ const requiredBillingContactFields = ((_b = applePayConfig.request) == null ? void 0 : _b.requiredBillingContactFields) || [];
248
+ if (((_c = checkout == null ? void 0 : checkout.bill) == null ? void 0 : _c.billingAddressCollection) === "REQUIRED") {
218
249
  requiredBillingContactFields.push("postalAddress");
219
250
  }
220
251
  const request = {
@@ -224,10 +255,10 @@ const ApplePay = w((props) => {
224
255
  // 接口取:会员注册地址
225
256
  requiredBillingContactFields,
226
257
  // 接口取:required: "name", "postalAddress", "email"; 否则: "name", "email"
227
- requiredShippingContactFields: ["email"],
258
+ requiredShippingContactFields: (_d = applePayConfig.request) == null ? void 0 : _d.requiredShippingContactFields,
228
259
  currencyCode: (checkout == null ? void 0 : checkout.transAmount.currency) ?? "",
229
260
  // 接口取
230
- supportedNetworks: ((_d = (_c = applePay2 == null ? void 0 : applePay2.supportedNetworks) == null ? void 0 : _c.map) == null ? void 0 : _d.call(_c, (item) => underscoreToUpperCamelCase(item))) ?? [],
261
+ supportedNetworks: ((_f = (_e = applePay2 == null ? void 0 : applePay2.supportedNetworks) == null ? void 0 : _e.map) == null ? void 0 : _f.call(_e, (item) => underscoreToUpperCamelCase(item))) ?? [],
231
262
  // 接口获取
232
263
  total: {
233
264
  label: (checkout == null ? void 0 : checkout.theme.merchantName) ?? "",
@@ -264,12 +295,13 @@ const ApplePay = w((props) => {
264
295
  applePaySession.begin();
265
296
  }
266
297
  const Button = () => {
298
+ var _a, _b;
267
299
  return /* @__PURE__ */ u("div", { className: bem("button"), children: /* @__PURE__ */ u(
268
300
  "apple-pay-button",
269
301
  {
270
302
  id: "apple-pay-button",
271
- buttonstyle: "black",
272
- type: "plain",
303
+ buttonstyle: (_a = applePayConfig.button) == null ? void 0 : _a.buttonStyle,
304
+ type: (_b = applePayConfig.button) == null ? void 0 : _b.buttonType,
273
305
  onClick: onApplePayButtonClicked
274
306
  }
275
307
  ) });
@@ -5,16 +5,15 @@ import "../../utils/card-brand/brands.js";
5
5
  import "../../utils/system-info/get-browser-info.js";
6
6
  import { cssVarPrefix, normalizedClass, formatAmount } from "../../utils/format.js";
7
7
  import { redirectToPayment } from "../../utils/redirect.js";
8
+ import { formatPaymentResult } from "../../utils/payment.js";
8
9
  import { isTimeoutError } from "../../api/http.js";
9
- import { PaymentCategory, COMMON_CLASS_NAME, PaymentMethod, SessionMode } from "../../constant.js";
10
10
  import { getBrowserParams } from "../../api/modules/get-browser-params.js";
11
+ import { PaymentCategory, COMMON_CLASS_NAME, PaymentMethod, SessionMode } from "../../constant.js";
11
12
  import { getBoostPayInfo, boostPay } from "../../api/modules/boost/index.js";
12
13
  import { PayKKaError } from "../../core/error.js";
13
- import { hidePaymentButton } from "../../config.js";
14
14
  import { usePayState } from "../../hooks/usePayState.js";
15
15
  import { useRetry } from "../../hooks/useRetry.js";
16
16
  import { createEmailCore, EmailField } from "../EmailField/EmailField.js";
17
- import { createAddressCore } from "../../core/Address.js";
18
17
  import { SubmitButton } from "../SubmitButton/index.js";
19
18
  import "../internal/Form/type.js";
20
19
  import "../internal/Form/context.js";
@@ -34,7 +33,8 @@ const Boost = w((props, ref) => {
34
33
  redirectMode = "auto",
35
34
  core,
36
35
  autoQuery = true,
37
- showGuideCard = true
36
+ showGuideCard = true,
37
+ hidePaymentButton = false
38
38
  } = props;
39
39
  F(ref, () => ({
40
40
  stopRetry: () => {
@@ -49,15 +49,17 @@ const Boost = w((props, ref) => {
49
49
  var _a2;
50
50
  if (!(fieldStatus == null ? void 0 : fieldStatus.address.show))
51
51
  return;
52
- setForm(Object.assign(form, { address: addressState.getAddressState() }));
53
- (_a2 = addressFieldRef.current) == null ? void 0 : _a2.update(addressState.getAddressState());
52
+ const newForm = Object.assign(form, { address: addressCore.getAddressState() });
53
+ setForm(newForm);
54
+ (_a2 = addressFieldRef.current) == null ? void 0 : _a2.update(addressCore.getAddressState());
55
+ validateForm();
54
56
  },
55
57
  updateEmail: () => {
56
58
  var _a2;
57
59
  if (!(fieldStatus == null ? void 0 : fieldStatus.email.show))
58
60
  return;
59
- setForm(Object.assign(form, { email: emailState.email }));
60
- form.email = emailState.email;
61
+ const newForm = Object.assign(form, { email: emailState.email });
62
+ setForm(newForm);
61
63
  (_a2 = emailFieldRef.current) == null ? void 0 : _a2.update(emailState.email);
62
64
  validateForm();
63
65
  },
@@ -65,7 +67,7 @@ const Boost = w((props, ref) => {
65
67
  hidePaymentButton && onSubmit();
66
68
  }
67
69
  }));
68
- const addressState = createAddressCore();
70
+ const addressCore = core.getAddressCore();
69
71
  const emailState = createEmailCore();
70
72
  const addressFieldRef = A(null);
71
73
  const emailFieldRef = A(null);
@@ -76,13 +78,13 @@ const Boost = w((props, ref) => {
76
78
  const [form, setForm] = h({
77
79
  email: "",
78
80
  address: {
79
- country: "",
80
- province: "",
81
- city: "",
82
- area: "",
83
- postCode: "",
84
- address1: "",
85
- address2: ""
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
86
88
  }
87
89
  });
88
90
  const [validated, setValidated] = h(false);
@@ -100,17 +102,27 @@ const Boost = w((props, ref) => {
100
102
  }
101
103
  setFieldStatus({ ...field });
102
104
  };
105
+ const processOnSuccess = (res) => {
106
+ var _a2, _b2;
107
+ setSubmitButtonStatus("success");
108
+ (_b2 = props.onSuccess) == null ? void 0 : _b2.call(props, formatPaymentResult({
109
+ ...res,
110
+ returnUrl: (_a2 = session == null ? void 0 : session.checkout) == null ? void 0 : _a2.returnUrl
111
+ }));
112
+ };
103
113
  y(() => {
104
114
  if (!sessionReady) {
105
115
  return;
106
116
  }
107
- const { bill = {}, paymentMethod = [] } = (session == null ? void 0 : session.checkout) || {};
108
- if (!paymentMethod.includes(PaymentMethod.BOOST)) {
117
+ const { bill = {}, supportMethods = [], country } = (session == null ? void 0 : session.checkout) || {};
118
+ if (!supportMethods.includes(PaymentMethod.BOOST)) {
109
119
  return;
110
120
  }
111
121
  initFieldStatus();
112
122
  setIsCheckoutEnabled(true);
123
+ country && addressCore.setCountry(country);
113
124
  form.email = bill.email ?? "";
125
+ form.address.country = country;
114
126
  if (autoQuery && core.processingPaymentMethod === PaymentMethod.BOOST) {
115
127
  setSubmitButtonStatus("loading");
116
128
  startReFetchPayInfo();
@@ -144,34 +156,49 @@ const Boost = w((props, ref) => {
144
156
  },
145
157
  bill: {
146
158
  email: form.email,
147
- ...form.address,
148
- province: addressState.getLabel(form.address.province, addressState.getProvinceOption()) ?? form.address.province,
149
- city: addressState.getLabel(form.address.city, addressState.getCityOptions()) ?? form.address.city
159
+ addressLine1: form.address.address1,
160
+ addressLine2: form.address.address2,
161
+ postalCode: form.address.postCode,
162
+ country: form.address.country,
163
+ district: form.address.area,
164
+ state: form.address.province ? addressCore.getLabel(form.address.province, addressCore.getProvinceOption()) ?? form.address.province : void 0,
165
+ city: form.address.city ? addressCore.getLabel(form.address.city, addressCore.getCityOptions()) ?? form.address.city : void 0
150
166
  },
151
167
  browser: await getBrowserParams()
152
168
  };
153
169
  };
154
170
  const pay = async (search = false, timeout) => {
155
- var _a2, _b2, _c2, _d2, _e2;
171
+ var _a2, _b2, _c2, _d2, _e2, _f2, _g;
156
172
  try {
157
- const paymentParams = await getPaymentParams();
158
173
  const requestOptions = { locale: i18n.locale, timeout };
159
- const res = search ? await getBoostPayInfo(
160
- { sessionId: session.sessionId, clientKey: session.clientKey },
161
- requestOptions
162
- ) : await boostPay(paymentParams, props.core, requestOptions);
163
- !search && ((_a2 = props.onSubmitResponse) == null ? void 0 : _a2.call(props, res));
164
- const { status, orderStatus, errorMessage, errorCode, payInfo } = res;
174
+ let res = null;
175
+ if (search) {
176
+ const extraParams = (_b2 = (_a2 = core.config)._getExtraParams) == null ? void 0 : _b2.call(_a2, "query", PaymentMethod.BOOST);
177
+ res = await getBoostPayInfo(
178
+ {
179
+ sessionId: session.sessionId,
180
+ clientKey: session.clientKey,
181
+ paymentMethod: PaymentMethod.BOOST
182
+ },
183
+ extraParams,
184
+ requestOptions
185
+ );
186
+ } else {
187
+ const extraParams = (_d2 = (_c2 = core.config)._getExtraParams) == null ? void 0 : _d2.call(_c2, "payment", PaymentMethod.BOOST);
188
+ res = await boostPay(await getPaymentParams(), extraParams, requestOptions);
189
+ }
190
+ !search && ((_e2 = props.onSubmitResponse) == null ? void 0 : _e2.call(props, res));
191
+ const { status, orderStatus, errorMessage, errorCode, payInfo, sessionId } = res;
192
+ sessionId && (session.sessionId = sessionId);
165
193
  if (status === "PROCESSING") {
166
194
  if (!orderStatus) {
167
195
  setSubmitButtonStatus("unSubmit");
168
196
  return { end: true };
169
197
  } else if (orderStatus === "SUCCESS") {
170
- setSubmitButtonStatus("success");
171
- (_b2 = props.onSuccess) == null ? void 0 : _b2.call(props);
198
+ processOnSuccess(res);
172
199
  return { end: true };
173
200
  } else if (orderStatus === "FAILURE") {
174
- setErrorMsg(errorMessage);
201
+ errorMessage && setErrorMsg(errorMessage);
175
202
  setSubmitButtonStatus("unSubmit");
176
203
  processOnError(new PayKKaError("API_ERROR", errorMessage, { code: errorCode }));
177
204
  return { end: true };
@@ -187,17 +214,16 @@ const Boost = w((props, ref) => {
187
214
  return { end: false };
188
215
  } else if (orderStatus === "CANCELED") {
189
216
  setSubmitButtonStatus("unSubmit");
190
- (_c2 = props.onTimeout) == null ? void 0 : _c2.call(props);
217
+ (_f2 = props.onTimeout) == null ? void 0 : _f2.call(props);
191
218
  core.resetEnablePaymentMethod();
192
219
  return { end: true };
193
220
  }
194
221
  } else if (status === "SUCCESS") {
195
- setSubmitButtonStatus("success");
196
- (_d2 = props.onSuccess) == null ? void 0 : _d2.call(props);
222
+ processOnSuccess(res);
197
223
  return { end: true };
198
224
  } else if (status === "EXPIRED") {
199
225
  setSubmitButtonStatus("unSubmit");
200
- (_e2 = props.onExpired) == null ? void 0 : _e2.call(props);
226
+ (_g = props.onExpired) == null ? void 0 : _g.call(props);
201
227
  return { end: true };
202
228
  }
203
229
  setSubmitButtonStatus("unSubmit");
@@ -212,7 +238,7 @@ const Boost = w((props, ref) => {
212
238
  }
213
239
  } else {
214
240
  const message = error.i18nKey ? i18n.get(error.i18nKey) : error.message;
215
- setErrorMsg(message);
241
+ message && setErrorMsg(message);
216
242
  processOnError(new PayKKaError("API_ERROR", message, { code: error.code, cause: error }));
217
243
  setSubmitButtonStatus("unSubmit");
218
244
  return { end: true };
@@ -235,7 +261,7 @@ const Boost = w((props, ref) => {
235
261
  setErrorMsg("");
236
262
  (_a2 = formRef.current) == null ? void 0 : _a2.validate(async (errors) => {
237
263
  var _a3;
238
- (fieldStatus == null ? void 0 : fieldStatus.address.show) && addressState.setValidateAllFields(true);
264
+ (fieldStatus == null ? void 0 : fieldStatus.address.show) && addressCore.setValidateAllFields(true);
239
265
  (_a3 = props.onSubmit) == null ? void 0 : _a3.call(props, errors);
240
266
  if (errors) {
241
267
  setSubmitButtonStatus("unSubmit");
@@ -305,7 +331,8 @@ const Boost = w((props, ref) => {
305
331
  {
306
332
  value: {
307
333
  i18n,
308
- session
334
+ session,
335
+ core
309
336
  },
310
337
  children: isCheckoutEnabled && i18n.ready.value && /* @__PURE__ */ u(b, { children: [
311
338
  showGuideCard && /* @__PURE__ */ u(GuideCard, { type: PaymentCategory.BOOST }),