@paykka/card-checkout-ui 0.8.0 → 0.11.2

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 (308) hide show
  1. package/dist/card-checkout-ui.js +21 -14
  2. package/dist/card-checkout-ui.umd.cjs +21 -14
  3. package/dist/es/_commonjsHelpers.js +1 -0
  4. package/dist/es/api/http.js +19 -21
  5. package/dist/es/api/index.js +1 -1
  6. package/dist/es/api/modules/ali-pay/index.js +19 -11
  7. package/dist/es/api/modules/apple-pay/index.js +10 -26
  8. package/dist/es/api/modules/boost/index.js +56 -0
  9. package/dist/es/api/modules/card/index.js +17 -11
  10. package/dist/es/api/modules/checkout/index.js +6 -6
  11. package/dist/es/api/modules/checkout/map.js +23 -6
  12. package/dist/es/api/modules/gcash/index.js +56 -0
  13. package/dist/es/api/modules/get-browser-params.js +2 -2
  14. package/dist/es/api/modules/google-pay/index.js +10 -26
  15. package/dist/es/api/modules/grab-pay/index.js +56 -0
  16. package/dist/es/api/modules/index.js +1 -1
  17. package/dist/es/api/modules/line-pay/index.js +56 -0
  18. package/dist/es/api/modules/may-bank-qr-pay/index.js +56 -0
  19. package/dist/es/api/modules/nine-pay/index.js +56 -0
  20. package/dist/es/api/modules/paymaya/index.js +56 -0
  21. package/dist/es/api/modules/risk/index.js +13 -0
  22. package/dist/es/api/modules/sepa/index.js +19 -11
  23. package/dist/es/api/modules/shopee-pay/index.js +56 -0
  24. package/dist/es/api/modules/threeDS/index.js +1 -0
  25. package/dist/es/api/modules/tng-wallet/index.js +56 -0
  26. package/dist/es/api/modules/wechat-pay/index.js +18 -31
  27. package/dist/es/components/AccordionItem/AccordionItem.js +37 -0
  28. package/dist/es/components/AccountNameField/index.js +1 -0
  29. package/dist/es/components/AddressField/index.js +1 -0
  30. package/dist/es/components/AliPay/index.js +28 -40
  31. package/dist/es/components/ApplePay/index.js +18 -39
  32. package/dist/es/components/Boost/index.js +324 -0
  33. package/dist/es/components/Card/index.js +80 -48
  34. package/dist/es/components/CardBrands/index.js +3 -2
  35. package/dist/es/components/CardExpireDateField/index.js +1 -0
  36. package/dist/es/components/CardHolderNameField/index.js +1 -0
  37. package/dist/es/components/CardIBANField/index.js +1 -0
  38. package/dist/es/components/CardNo/index.js +1 -0
  39. package/dist/es/components/CardNumberField/index.js +124 -106
  40. package/dist/es/components/CardSecurityCodeField/index.js +1 -0
  41. package/dist/es/components/CardSelector/index.js +1 -0
  42. package/dist/es/components/CombinedCardInfo/index.js +4 -0
  43. package/dist/es/components/DropIn/index.js +206 -50
  44. package/dist/es/components/EmailField/EmailField.js +14 -15
  45. package/dist/es/components/EncryptedCard/index.js +1 -0
  46. package/dist/es/components/GooglePay/index.js +7 -6
  47. package/dist/es/components/GrabPay/index.js +324 -0
  48. package/dist/es/components/GuideCard/index.js +44 -0
  49. package/dist/es/components/LinePay/index.js +324 -0
  50. package/dist/es/components/MayBankQRPay/index.js +324 -0
  51. package/dist/es/components/NinePay/index.js +324 -0
  52. package/dist/es/components/RecurringTip/index.js +1 -0
  53. package/dist/es/components/SecuredFieldsProvider/index.js +2 -1
  54. package/dist/es/components/SecuredIframe/index.js +57 -4
  55. package/dist/es/components/Sepa/index.js +7 -10
  56. package/dist/es/components/ShopeePay/index.js +324 -0
  57. package/dist/es/components/SubmitButton/index.js +7 -20
  58. package/dist/es/components/TNGWallet/index.js +324 -0
  59. package/dist/es/components/ThreeDS/index.js +1 -0
  60. package/dist/es/components/WechatPay/index.js +30 -49
  61. package/dist/es/components/business/QRCodeModal/QRCodeModal.js +42 -0
  62. package/dist/es/components/business/QRCodeModal/index.js +7 -0
  63. package/dist/es/components/business/QRCodeModal/qr-code-modal.js +1 -0
  64. package/dist/es/components/business/QRCodeModal/type.js +1 -0
  65. package/dist/es/components/business/index.js +7 -0
  66. package/dist/es/components/index.js +10 -0
  67. package/dist/es/components/internal/Accordion/Accordion.js +14 -0
  68. package/dist/es/components/internal/Accordion/accordion2.js +1 -0
  69. package/dist/es/components/internal/Accordion/accordionTransition.js +26 -0
  70. package/dist/es/components/internal/Accordion/index.js +8 -0
  71. package/dist/es/components/internal/Accordion/type.js +10 -0
  72. package/dist/es/components/internal/Button/Button.js +1 -0
  73. package/dist/es/components/internal/Button/index.js +1 -0
  74. package/dist/es/components/internal/CheckBox/CheckBox.js +1 -0
  75. package/dist/es/components/internal/CheckBox/index.js +1 -0
  76. package/dist/es/components/internal/Form/type.js +1 -0
  77. package/dist/es/components/internal/Info/Info.js +1 -0
  78. package/dist/es/components/internal/Info/index.js +1 -0
  79. package/dist/es/components/internal/Input/type.js +1 -0
  80. package/dist/es/components/internal/LoadingCheck/LoadingCheck.js +1 -0
  81. package/dist/es/components/internal/LoadingCheck/index.js +1 -0
  82. package/dist/es/components/internal/Modal/Modal.js +18 -3
  83. package/dist/es/components/internal/Modal/index.js +1 -0
  84. package/dist/es/components/internal/Modal/type.js +1 -0
  85. package/dist/es/components/internal/QRCode/QRCode.js +32 -0
  86. package/dist/es/components/internal/QRCode/index.js +5 -0
  87. package/dist/es/components/internal/QRCode/type.js +1 -0
  88. package/dist/es/components/internal/Select/Select.js +11 -9
  89. package/dist/es/components/internal/Select/SelectMenu.js +1 -0
  90. package/dist/es/components/internal/Select/SelectMenuItem.js +1 -0
  91. package/dist/es/components/internal/icons/IconBoost.js +63 -0
  92. package/dist/es/components/internal/icons/IconCard.js +1 -40
  93. package/dist/es/components/internal/icons/IconCard2.js +60 -0
  94. package/dist/es/components/internal/icons/IconGCash.js +196 -0
  95. package/dist/es/components/internal/icons/IconGcashComplete.js +184 -0
  96. package/dist/es/components/internal/icons/IconGrabPay.js +59 -0
  97. package/dist/es/components/internal/icons/IconLinePay.js +99 -0
  98. package/dist/es/components/internal/icons/IconMayBankQRPay.js +69 -0
  99. package/dist/es/components/internal/icons/IconNinePay.js +255 -0
  100. package/dist/es/components/internal/icons/IconPaymaya.js +114 -0
  101. package/dist/es/components/internal/icons/IconRedirect.js +58 -0
  102. package/dist/es/components/internal/icons/IconScan.js +102 -0
  103. package/dist/es/components/internal/icons/IconShopeePay.js +108 -0
  104. package/dist/es/components/internal/icons/IconTNGWallet.js +119 -0
  105. package/dist/es/components/internal/icons/IconUnionPay.js +65 -0
  106. package/dist/es/components/wallets/GCash/GCash.js +368 -0
  107. package/dist/es/components/wallets/GCash/g-cash.js +1 -0
  108. package/dist/es/components/wallets/GCash/index.js +1 -0
  109. package/dist/es/components/wallets/GCash/type.js +1 -0
  110. package/dist/es/components/wallets/Paymaya/Paymaya.js +325 -0
  111. package/dist/es/components/wallets/Paymaya/index.js +1 -0
  112. package/dist/es/components/wallets/Paymaya/paymaya2.js +1 -0
  113. package/dist/es/components/wallets/Paymaya/type.js +1 -0
  114. package/dist/es/config.js +12 -12
  115. package/dist/es/constant.js +84 -4
  116. package/dist/es/core/PayKKaCheckout.js +35 -5
  117. package/dist/es/core/Session.js +24 -23
  118. package/dist/es/core/error.js +7 -0
  119. package/dist/es/core/index.js +1 -0
  120. package/dist/es/core/query.js +3 -3
  121. package/dist/es/core.js +2082 -70
  122. package/dist/es/hooks/index.js +1 -0
  123. package/dist/es/hooks/useI18n.js +1 -0
  124. package/dist/es/hooks/usePayState.js +7 -5
  125. package/dist/es/i18n/I18n.js +8 -2
  126. package/dist/es/i18n/locales/de-DE.js +16 -1
  127. package/dist/es/i18n/locales/en-GB.js +16 -1
  128. package/dist/es/i18n/locales/es-ES.js +16 -1
  129. package/dist/es/i18n/locales/fr-FR.js +16 -1
  130. package/dist/es/i18n/locales/index.js +2 -1
  131. package/dist/es/i18n/locales/ja-JP.js +16 -1
  132. package/dist/es/i18n/locales/ko-KR.js +16 -1
  133. package/dist/es/i18n/locales/nl-NL.js +88 -0
  134. package/dist/es/i18n/locales/pt-PT.js +16 -1
  135. package/dist/es/i18n/locales/ru-RU.js +16 -1
  136. package/dist/es/i18n/locales/zh-CN.js +16 -1
  137. package/dist/es/i18n/locales/zh-HK.js +16 -1
  138. package/dist/es/i18n/locales/zh-TW.js +16 -1
  139. package/dist/es/i18n/util.js +12 -3
  140. package/dist/es/index.js +22 -0
  141. package/dist/es/out/fraud-detection.js +39 -13
  142. package/dist/es/out/worldpay-ddc.js +143 -0
  143. package/dist/es/style.css +1 -1192
  144. package/dist/es/types/event.js +15 -0
  145. package/dist/es/types/fraud-detection.js +1 -0
  146. package/dist/es/types/index.js +1 -0
  147. package/dist/es/types/message.js +3 -0
  148. package/dist/es/utils/array.js +9 -0
  149. package/dist/es/utils/card-brand/brands.js +11 -1
  150. package/dist/es/utils/card-brand/index.js +4 -3
  151. package/dist/es/utils/card-brand/luhn.js +25 -0
  152. package/dist/es/utils/date.js +25 -0
  153. package/dist/es/utils/detect.js +6 -0
  154. package/dist/es/utils/format.js +28 -12
  155. package/dist/es/utils/iframe.js +1 -1
  156. package/dist/es/utils/index.js +9 -1
  157. package/dist/es/utils/location.js +37 -0
  158. package/dist/es/utils/object.js +14 -0
  159. package/dist/es/utils/redirect.js +32 -0
  160. package/dist/es/utils/reg-exp.js +4 -0
  161. package/dist/es/utils/system-info/get-browser-info.js +4 -4
  162. package/dist/es/utils/system-info/get-system-info.js +11 -7
  163. package/dist/es/utils/system-info/index.js +4 -4
  164. package/dist/style.css +1 -1
  165. package/dist/types/api/http.d.ts +4 -10
  166. package/dist/types/api/modules/ali-pay/index.d.ts +2 -1
  167. package/dist/types/api/modules/apple-pay/index.d.ts +2 -1
  168. package/dist/types/api/modules/boost/index.d.ts +24 -0
  169. package/dist/types/api/modules/card/index.d.ts +1 -1
  170. package/dist/types/api/modules/checkout/index.d.ts +2 -2
  171. package/dist/types/api/modules/checkout/type.d.ts +9 -0
  172. package/dist/types/api/modules/gcash/index.d.ts +24 -0
  173. package/dist/types/api/modules/get-browser-params.d.ts +2 -2
  174. package/dist/types/api/modules/google-pay/index.d.ts +2 -1
  175. package/dist/types/api/modules/grab-pay/index.d.ts +24 -0
  176. package/dist/types/api/modules/index.d.ts +11 -0
  177. package/dist/types/api/modules/line-pay/index.d.ts +24 -0
  178. package/dist/types/api/modules/may-bank-qr-pay/index.d.ts +24 -0
  179. package/dist/types/api/modules/nine-pay/index.d.ts +24 -0
  180. package/dist/types/api/modules/paymaya/index.d.ts +24 -0
  181. package/dist/types/api/modules/risk/index.d.ts +8 -0
  182. package/dist/types/api/modules/sepa/index.d.ts +2 -1
  183. package/dist/types/api/modules/shopee-pay/index.d.ts +24 -0
  184. package/dist/types/api/modules/threeDS/index.d.ts +3 -0
  185. package/dist/types/api/modules/tng-wallet/index.d.ts +24 -0
  186. package/dist/types/api/modules/wechat-pay/index.d.ts +2 -1
  187. package/dist/types/components/Boost/Boost.d.ts +7 -0
  188. package/dist/types/components/Boost/index.d.ts +2 -0
  189. package/dist/types/components/Boost/type.d.ts +61 -0
  190. package/dist/types/components/CardNumberField/type.d.ts +7 -1
  191. package/dist/types/components/CombinedCardInfo/type.d.ts +1 -0
  192. package/dist/types/components/DropIn/components/PaymentTabs/type.d.ts +1 -1
  193. package/dist/types/components/DropIn/config.d.ts +7 -0
  194. package/dist/types/components/DropIn/type.d.ts +11 -3
  195. package/dist/types/components/GrabPay/GrabPay.d.ts +7 -0
  196. package/dist/types/components/GrabPay/index.d.ts +2 -0
  197. package/dist/types/components/GrabPay/type.d.ts +61 -0
  198. package/dist/types/components/GuideCard/GuideCard.d.ts +3 -0
  199. package/dist/types/components/GuideCard/index.d.ts +2 -0
  200. package/dist/types/components/GuideCard/type.d.ts +4 -0
  201. package/dist/types/components/LinePay/LinePay.d.ts +7 -0
  202. package/dist/types/components/LinePay/index.d.ts +2 -0
  203. package/dist/types/components/LinePay/type.d.ts +61 -0
  204. package/dist/types/components/MayBankQRPay/MayBankQRPay.d.ts +6 -0
  205. package/dist/types/components/MayBankQRPay/index.d.ts +2 -0
  206. package/dist/types/components/MayBankQRPay/type.d.ts +61 -0
  207. package/dist/types/components/NinePay/NinePay.d.ts +6 -0
  208. package/dist/types/components/NinePay/index.d.ts +2 -0
  209. package/dist/types/components/NinePay/type.d.ts +61 -0
  210. package/dist/types/components/SecuredFieldsProvider/type.d.ts +1 -1
  211. package/dist/types/components/SecuredIframe/useSecuredInput.d.ts +1 -1
  212. package/dist/types/components/ShopeePay/ShopeePay.d.ts +7 -0
  213. package/dist/types/components/ShopeePay/index.d.ts +2 -0
  214. package/dist/types/components/ShopeePay/type.d.ts +61 -0
  215. package/dist/types/components/SubmitButton/SubmitButton.d.ts +1 -1
  216. package/dist/types/components/TNGWallet/TNGWallet.d.ts +7 -0
  217. package/dist/types/components/TNGWallet/index.d.ts +2 -0
  218. package/dist/types/components/TNGWallet/type.d.ts +61 -0
  219. package/dist/types/components/ThreeDS/components/ThreeDSIframe/ThreeDSIframe.d.ts +1 -0
  220. package/dist/types/components/ThreeDS/components/ThreeDSIframe/output.d.ts +1 -1
  221. package/dist/types/components/ThreeDS/components/ThreeDSIframe/type.d.ts +13 -3
  222. package/dist/types/components/business/QRCodeModal/QRCodeModal.d.ts +3 -0
  223. package/dist/types/components/business/QRCodeModal/index.d.ts +2 -0
  224. package/dist/types/components/business/QRCodeModal/type.d.ts +18 -0
  225. package/dist/types/components/business/index.d.ts +1 -0
  226. package/dist/types/components/index.d.ts +9 -0
  227. package/dist/types/components/internal/Accordion/Accordion.d.ts +3 -0
  228. package/dist/types/components/internal/Accordion/accordionTransition.d.ts +8 -0
  229. package/dist/types/components/internal/Accordion/components/AccordionItem/AccordionItem.d.ts +3 -0
  230. package/dist/types/components/internal/Accordion/components/AccordionItem/index.d.ts +2 -0
  231. package/dist/types/components/internal/Accordion/components/AccordionItem/type.d.ts +18 -0
  232. package/dist/types/components/internal/Accordion/index.d.ts +3 -0
  233. package/dist/types/components/internal/Accordion/type.d.ts +18 -0
  234. package/dist/types/components/internal/Modal/type.d.ts +2 -0
  235. package/dist/types/components/internal/QRCode/QRCode.d.ts +2 -0
  236. package/dist/types/components/internal/QRCode/index.d.ts +2 -0
  237. package/dist/types/components/internal/QRCode/type.d.ts +9 -0
  238. package/dist/types/components/internal/Select/Select.d.ts +1 -17
  239. package/dist/types/components/internal/Select/type.d.ts +26 -1
  240. package/dist/types/components/internal/icons/IconBoost.d.ts +2 -0
  241. package/dist/types/components/internal/icons/IconCard2.d.ts +2 -0
  242. package/dist/types/components/internal/icons/IconGCash.d.ts +2 -0
  243. package/dist/types/components/internal/icons/IconGcashComplete.d.ts +2 -0
  244. package/dist/types/components/internal/icons/IconGrabPay.d.ts +2 -0
  245. package/dist/types/components/internal/icons/IconLinePay.d.ts +2 -0
  246. package/dist/types/components/internal/icons/IconMayBankQRPay.d.ts +2 -0
  247. package/dist/types/components/internal/icons/IconNinePay.d.ts +2 -0
  248. package/dist/types/components/internal/icons/IconPaymaya.d.ts +2 -0
  249. package/dist/types/components/internal/icons/IconRedirect.d.ts +2 -0
  250. package/dist/types/components/internal/icons/IconScan.d.ts +2 -0
  251. package/dist/types/components/internal/icons/IconShopeePay.d.ts +2 -0
  252. package/dist/types/components/internal/icons/IconTNGWallet.d.ts +2 -0
  253. package/dist/types/components/internal/icons/IconUnionPay.d.ts +2 -0
  254. package/dist/types/components/internal/icons/index.d.ts +13 -0
  255. package/dist/types/components/wallets/GCash/GCash.d.ts +6 -0
  256. package/dist/types/components/wallets/GCash/index.d.ts +2 -0
  257. package/dist/types/components/wallets/GCash/type.d.ts +71 -0
  258. package/dist/types/components/wallets/Paymaya/Paymaya.d.ts +6 -0
  259. package/dist/types/components/wallets/Paymaya/index.d.ts +2 -0
  260. package/dist/types/components/wallets/Paymaya/type.d.ts +61 -0
  261. package/dist/types/config.d.ts +9 -9
  262. package/dist/types/constant.d.ts +28 -3
  263. package/dist/types/core/PayKKaCheckout.d.ts +10 -0
  264. package/dist/types/core/Session.d.ts +2 -0
  265. package/dist/types/core/error.d.ts +15 -2
  266. package/dist/types/core/query.d.ts +2 -2
  267. package/dist/types/hooks/usePayState.d.ts +5 -5
  268. package/dist/types/i18n/I18n.d.ts +1 -1
  269. package/dist/types/i18n/locales/de-DE.d.ts +13 -0
  270. package/dist/types/i18n/locales/en-GB.d.ts +13 -0
  271. package/dist/types/i18n/locales/es-ES.d.ts +13 -0
  272. package/dist/types/i18n/locales/fr-FR.d.ts +13 -0
  273. package/dist/types/i18n/locales/index.d.ts +2 -0
  274. package/dist/types/i18n/locales/ja-JP.d.ts +13 -0
  275. package/dist/types/i18n/locales/ko-KR.d.ts +13 -0
  276. package/dist/types/i18n/locales/nl-NL.d.ts +71 -0
  277. package/dist/types/i18n/locales/pt-PT.d.ts +13 -0
  278. package/dist/types/i18n/locales/ru-RU.d.ts +13 -0
  279. package/dist/types/i18n/locales/zh-CN.d.ts +13 -0
  280. package/dist/types/i18n/locales/zh-HK.d.ts +13 -0
  281. package/dist/types/i18n/locales/zh-TW.d.ts +13 -0
  282. package/dist/types/i18n/util.d.ts +5 -0
  283. package/dist/types/index.d.ts +2 -1
  284. package/dist/types/out/fraud-detection.d.ts +5 -1
  285. package/dist/types/out/types.d.ts +4 -0
  286. package/dist/types/out/worldpay-ddc-iframe.d.ts +1 -0
  287. package/dist/types/out/worldpay-ddc.d.ts +37 -0
  288. package/dist/types/types/event.d.ts +26 -0
  289. package/dist/types/types/fraud-detection.d.ts +3 -1
  290. package/dist/types/types/index.d.ts +23 -4
  291. package/dist/types/types/message.d.ts +22 -2
  292. package/dist/types/utils/array.d.ts +1 -0
  293. package/dist/types/utils/card-brand/brands.d.ts +4 -3
  294. package/dist/types/utils/card-brand/index.d.ts +9 -6
  295. package/dist/types/utils/card-brand/luhn.d.ts +9 -0
  296. package/dist/types/utils/date.d.ts +9 -0
  297. package/dist/types/utils/detect.d.ts +1 -0
  298. package/dist/types/utils/format.d.ts +7 -1
  299. package/dist/types/utils/iframe.d.ts +1 -1
  300. package/dist/types/utils/index.d.ts +8 -0
  301. package/dist/types/utils/location.d.ts +7 -0
  302. package/dist/types/utils/object.d.ts +1 -0
  303. package/dist/types/utils/redirect.d.ts +5 -0
  304. package/dist/types/utils/reg-exp.d.ts +1 -0
  305. package/dist/types/utils/system-info/get-browser-info.d.ts +1 -1
  306. package/dist/types/utils/system-info/get-system-info.d.ts +3 -2
  307. package/dist/types/utils/system-info/index.d.ts +3 -3
  308. package/package.json +6 -2
@@ -371,6 +371,7 @@ const FieldIframe = (props) => {
371
371
  value: value.current,
372
372
  fieldType: props.fieldType
373
373
  };
374
+ console.log(hiddenIframe, props.hiddenIframeName);
374
375
  postMessageToIframe(validWithValueData, hiddenIframe, cdnOrigin);
375
376
  };
376
377
  const sendActivatedMessage = () => {
@@ -409,6 +410,7 @@ const HiddenIframe = () => {
409
410
  const onReceiveMessage = async (event) => {
410
411
  const { data } = event;
411
412
  const parsedData = safeParse(data);
413
+ console.log(parsedData);
412
414
  if (!Reflect.has(parsedData, "action")) {
413
415
  return;
414
416
  }
@@ -417,22 +419,50 @@ const HiddenIframe = () => {
417
419
  switch (feedbackData.fieldType) {
418
420
  case EFieldType.CVV: {
419
421
  formData.cvv = feedbackData.value;
422
+ setMessageList([
423
+ ...messageList,
424
+ {
425
+ name: "CVV",
426
+ label: `收到值:${feedbackData.value}`
427
+ }
428
+ ]);
420
429
  break;
421
430
  }
422
431
  case EFieldType.CARD_NUMBER: {
423
432
  formData.cardNo = trimAll(feedbackData.value);
433
+ setMessageList([
434
+ ...messageList,
435
+ {
436
+ name: "卡号",
437
+ label: `收到值:${feedbackData.value}`
438
+ }
439
+ ]);
424
440
  break;
425
441
  }
426
442
  case EFieldType.EXPIRE_DATE: {
427
443
  const [expMonth, expYear] = feedbackData.value.split("/");
428
444
  formData.expMonth = expMonth;
429
445
  formData.expYear = `20${expYear}`;
446
+ setMessageList([
447
+ ...messageList,
448
+ {
449
+ name: "卡有效期",
450
+ label: `收到值:${feedbackData.value}`
451
+ }
452
+ ]);
430
453
  break;
431
454
  }
432
455
  }
433
456
  } else if (parsedData.action === MessageAction.PAYMENT) {
434
457
  const feedbackData = parsedData;
435
- pay(feedbackData.formData, feedbackData.locale);
458
+ pay(feedbackData.formData, feedbackData.locale, feedbackData.extraParams);
459
+ setMessageList([
460
+ ...messageList,
461
+ {
462
+ name: "表单组件",
463
+ label: `进行支付,${JSON.stringify(formData || {})}`
464
+ }
465
+ ]);
436
466
  } else if (parsedData.action === MessageAction.ENCRYPT_CARD) {
437
467
  const feedbackData = parsedData;
438
468
  try {
@@ -442,10 +472,15 @@ const HiddenIframe = () => {
442
472
  console.log("error", error);
443
473
  sendCardEncryptionFailedMessage(error);
444
474
  }
475
+ } else if (parsedData.action === MessageAction.DEBUG_MODE) {
476
+ console.log("hidden iframe 开启测试模式");
445
477
  }
446
478
  };
447
- window.addEventListener("message", onReceiveMessage);
448
- const pay = (params, locale) => {
479
+ y(() => {
480
+ console.log("hidden iframe 加载完成");
481
+ window.addEventListener("message", onReceiveMessage);
482
+ }, []);
483
+ const pay = (params, locale, extraParams) => {
449
484
  cardPay(
450
485
  {
451
486
  ...params,
@@ -454,6 +489,7 @@ const HiddenIframe = () => {
454
489
  ...formData
455
490
  }
456
491
  },
492
+ extraParams,
457
493
  { locale }
458
494
  ).then(sendAfterPaymentMessage).catch((error) => {
459
495
  if (isTimeoutError(error)) {
@@ -509,7 +545,24 @@ const HiddenIframe = () => {
509
545
  y(() => {
510
546
  sendHiddenIframeReadyMessage();
511
547
  }, []);
512
- return /* @__PURE__ */ u(b, {});
548
+ const [messageList, setMessageList] = h([]);
549
+ const messageListRef = A(null);
550
+ y(() => {
551
+ if (messageListRef.current) {
552
+ messageListRef.current.scrollTop = messageListRef.current.scrollHeight;
553
+ }
554
+ }, [messageList]);
555
+ return /* @__PURE__ */ u(b, { children: /* @__PURE__ */ u("div", { style: "width: 100%; height: 100%; overflow-y: auto", ref: messageListRef, children: messageList.map((message) => /* @__PURE__ */ u("div", { style: { fontSize: "18px", marginBottom: "4px" }, children: [
556
+ /* @__PURE__ */ u("span", { style: { color: "#4f43df" }, children: [
557
+ "[",
558
+ message.name,
559
+ "]"
560
+ ] }),
561
+ /* @__PURE__ */ u("span", { children: [
562
+ ": ",
563
+ message.label
564
+ ] })
565
+ ] })) }) });
513
566
  };
514
567
  const SecuredIframe = () => {
515
568
  const [fieldIframeConfig, setFieldIframeConfig] = h();
@@ -2,7 +2,6 @@ import { w, A, h, F, y, q, u } from "../../core.js";
2
2
  import { createAddressCore } from "../../core/Address.js";
3
3
  import { useBEM } from "../../hooks/useBEM.js";
4
4
  import { CoreContext } from "../../core/context.js";
5
- import { isUndefined } from "../../utils/is.js";
6
5
  import "../../utils/card-brand/brands.js";
7
6
  import "../../utils/system-info/get-browser-info.js";
8
7
  import { cssVarPrefix, normalizedClass, formatAmount, trimAll } from "../../utils/format.js";
@@ -30,7 +29,7 @@ const Sepa = w((props, ref) => {
30
29
  const { session } = props;
31
30
  let addressState = createAddressCore();
32
31
  let emailState = createEmailCore();
33
- const { i18n, sessionReady } = usePayState(session);
32
+ const { i18n, sessionReady } = usePayState(session, props.core);
34
33
  const addressFieldRef = A(null);
35
34
  const emailFieldRef = A(null);
36
35
  const formRef = A(null);
@@ -89,12 +88,10 @@ const Sepa = w((props, ref) => {
89
88
  });
90
89
  }, []);
91
90
  const Button = () => {
92
- const { transAmount } = (session == null ? void 0 : session.checkout) ?? {};
93
- let { symbol = "", amount = "", digits } = transAmount ?? {};
94
- let amountStr = "";
95
- if (amount && !isUndefined(digits))
96
- amountStr = formatAmount(+amount, digits);
97
- const text = i18n.get("common.pay") + (Number(amount) ? ` ${symbol}${amountStr}` : "");
91
+ var _a2;
92
+ const transAmount = (_a2 = session == null ? void 0 : session.checkout) == null ? void 0 : _a2.transAmount;
93
+ const amountText = (transAmount == null ? void 0 : transAmount.amount) ? formatAmount(transAmount).jointSymbol() : "";
94
+ const text = i18n.get("common.pay") + (amountText ? ` ${amountText}` : "");
98
95
  return /* @__PURE__ */ u(
99
96
  SubmitButton,
100
97
  {
@@ -179,7 +176,7 @@ const Sepa = w((props, ref) => {
179
176
  const res = search ? await getSepaPayInfo(
180
177
  { sessionId: session.sessionId, clientKey: session.clientKey },
181
178
  options
182
- ) : await sepaPay(paymentParams, options);
179
+ ) : await sepaPay(paymentParams, props.core, options);
183
180
  return processAfterPayment(res, search);
184
181
  } catch (error) {
185
182
  if (isTimeoutError(error)) {
@@ -204,6 +201,7 @@ const Sepa = w((props, ref) => {
204
201
  if (status === "PROCESSING") {
205
202
  if (!orderStatus) {
206
203
  setSubmitButtonStatus("unSubmit");
204
+ return { end: true };
207
205
  } else if (orderStatus === "SUCCESS") {
208
206
  setSubmitButtonStatus("success");
209
207
  processOnSuccess();
@@ -233,7 +231,6 @@ const Sepa = w((props, ref) => {
233
231
  return { end: true };
234
232
  }
235
233
  setSubmitButtonStatus("unSubmit");
236
- processOnSuccess();
237
234
  return { end: true };
238
235
  };
239
236
  const processOnSuccess = () => {
@@ -0,0 +1,324 @@
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 { cssVarPrefix, normalizedClass, formatAmount } from "../../utils/format.js";
7
+ import { redirectToPayment } from "../../utils/redirect.js";
8
+ import { isTimeoutError } from "../../api/http.js";
9
+ import { PaymentCategory, COMMON_CLASS_NAME, PaymentMethod, SessionMode } from "../../constant.js";
10
+ import { getBrowserParams } from "../../api/modules/get-browser-params.js";
11
+ import { getShopeePayInfo, shopeePay } from "../../api/modules/shopee-pay/index.js";
12
+ import { PayKKaError } from "../../core/error.js";
13
+ import { hidePaymentButton } from "../../config.js";
14
+ import { usePayState } from "../../hooks/usePayState.js";
15
+ import { useRetry } from "../../hooks/useRetry.js";
16
+ import { createEmailCore, EmailField } from "../EmailField/EmailField.js";
17
+ import { createAddressCore } from "../../core/Address.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("shopee-pay");
27
+ const fieldClassNames = bem("field");
28
+ const ShopeePay = w((props, ref) => {
29
+ var _a, _b, _c, _d, _e, _f;
30
+ const {
31
+ session,
32
+ showEmail = false,
33
+ showAddress = false,
34
+ redirectMode = "auto",
35
+ core,
36
+ autoQuery = true,
37
+ showGuideCard = true
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 _a2;
50
+ if (!(fieldStatus == null ? void 0 : fieldStatus.address.show))
51
+ return;
52
+ setForm(Object.assign(form, { address: addressState.getAddressState() }));
53
+ (_a2 = addressFieldRef.current) == null ? void 0 : _a2.update(addressState.getAddressState());
54
+ },
55
+ updateEmail: () => {
56
+ var _a2;
57
+ if (!(fieldStatus == null ? void 0 : fieldStatus.email.show))
58
+ return;
59
+ setForm(Object.assign(form, { email: emailState.email }));
60
+ form.email = emailState.email;
61
+ (_a2 = emailFieldRef.current) == null ? void 0 : _a2.update(emailState.email);
62
+ validateForm();
63
+ },
64
+ payment: () => {
65
+ hidePaymentButton && onSubmit();
66
+ }
67
+ }));
68
+ const addressState = createAddressCore();
69
+ const emailState = createEmailCore();
70
+ const addressFieldRef = A(null);
71
+ const emailFieldRef = A(null);
72
+ const [isCheckoutEnabled, setIsCheckoutEnabled] = h(false);
73
+ const { setErrorMsg, i18n, errorMsg, sessionReady } = usePayState(session, props.core);
74
+ const [submitButtonStatus, setSubmitButtonStatus] = h("unSubmit");
75
+ const formRef = A(null);
76
+ const [form, setForm] = h({
77
+ email: "",
78
+ address: {
79
+ country: "",
80
+ province: "",
81
+ city: "",
82
+ area: "",
83
+ postCode: "",
84
+ address1: "",
85
+ address2: ""
86
+ }
87
+ });
88
+ const [validated, setValidated] = h(false);
89
+ const [fieldStatus, setFieldStatus] = h();
90
+ const initFieldStatus = () => {
91
+ const { field, sessionMode } = session.checkout;
92
+ const { email, address } = field;
93
+ if (sessionMode === SessionMode.COMPONENT) {
94
+ if (email.disabled) {
95
+ email.show = showEmail;
96
+ }
97
+ if (showAddress && !(address == null ? void 0 : address.show)) {
98
+ address.show = true;
99
+ }
100
+ }
101
+ setFieldStatus({ ...field });
102
+ };
103
+ y(() => {
104
+ if (!sessionReady) {
105
+ return;
106
+ }
107
+ const { bill = {}, paymentMethod = [] } = (session == null ? void 0 : session.checkout) || {};
108
+ if (!paymentMethod.includes(PaymentMethod.SHOPEE_PAY)) {
109
+ return;
110
+ }
111
+ initFieldStatus();
112
+ setIsCheckoutEnabled(true);
113
+ form.email = bill.email ?? "";
114
+ if (autoQuery && core.processingPaymentMethod === PaymentMethod.SHOPEE_PAY) {
115
+ setSubmitButtonStatus("loading");
116
+ startReFetchPayInfo();
117
+ }
118
+ }, [sessionReady]);
119
+ const processOnError = (error) => {
120
+ var _a2;
121
+ (_a2 = props.onError) == null ? void 0 : _a2.call(props, error);
122
+ core.resetEnablePaymentMethod();
123
+ };
124
+ const onTimeout = q(
125
+ (message) => {
126
+ var _a2;
127
+ setErrorMsg(message || i18n.get("common.payTimeout"));
128
+ setSubmitButtonStatus("unSubmit");
129
+ (_a2 = props.onTimeout) == null ? void 0 : _a2.call(props);
130
+ core.resetEnablePaymentMethod();
131
+ },
132
+ [i18n, props.onTimeout]
133
+ );
134
+ const { start: startReFetchPayInfo, stop: stopReFetchPayInfo } = useRetry(
135
+ (timeout) => pay(true, timeout),
136
+ { onTimeout: () => onTimeout(i18n.get("common.queryTimeout")) }
137
+ );
138
+ const getPaymentParams = async () => {
139
+ return {
140
+ sessionId: session.sessionId,
141
+ clientKey: session.clientKey,
142
+ payment: {
143
+ paymentMethod: PaymentMethod.SHOPEE_PAY
144
+ },
145
+ bill: {
146
+ 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
150
+ },
151
+ browser: await getBrowserParams()
152
+ };
153
+ };
154
+ const pay = async (search = false, timeout) => {
155
+ var _a2, _b2, _c2, _d2, _e2;
156
+ try {
157
+ const paymentParams = await getPaymentParams();
158
+ const requestOptions = { locale: i18n.locale, timeout };
159
+ const res = search ? await getShopeePayInfo(
160
+ { sessionId: session.sessionId, clientKey: session.clientKey },
161
+ requestOptions
162
+ ) : await shopeePay(paymentParams, props.core, requestOptions);
163
+ !search && ((_a2 = props.onSubmitResponse) == null ? void 0 : _a2.call(props, res));
164
+ const { status, orderStatus, errorMessage, errorCode, payInfo } = res;
165
+ if (status === "PROCESSING") {
166
+ if (!orderStatus) {
167
+ setSubmitButtonStatus("unSubmit");
168
+ return { end: true };
169
+ } else if (orderStatus === "SUCCESS") {
170
+ setSubmitButtonStatus("success");
171
+ (_b2 = props.onSuccess) == null ? void 0 : _b2.call(props);
172
+ return { end: true };
173
+ } else if (orderStatus === "FAILURE") {
174
+ setErrorMsg(errorMessage);
175
+ setSubmitButtonStatus("unSubmit");
176
+ processOnError(new PayKKaError("API_ERROR", errorMessage, { code: errorCode }));
177
+ return { end: true };
178
+ } else if (orderStatus === "PROCESSING") {
179
+ if (!search) {
180
+ if (redirectMode === "auto" && payInfo) {
181
+ redirectToPayment(payInfo);
182
+ return { end: true };
183
+ } else {
184
+ startReFetchPayInfo();
185
+ }
186
+ }
187
+ return { end: false };
188
+ } else if (orderStatus === "CANCELED") {
189
+ setSubmitButtonStatus("unSubmit");
190
+ (_c2 = props.onTimeout) == null ? void 0 : _c2.call(props);
191
+ core.resetEnablePaymentMethod();
192
+ return { end: true };
193
+ }
194
+ } else if (status === "SUCCESS") {
195
+ setSubmitButtonStatus("success");
196
+ (_d2 = props.onSuccess) == null ? void 0 : _d2.call(props);
197
+ return { end: true };
198
+ } else if (status === "EXPIRED") {
199
+ setSubmitButtonStatus("unSubmit");
200
+ (_e2 = props.onExpired) == null ? void 0 : _e2.call(props);
201
+ return { end: true };
202
+ }
203
+ setSubmitButtonStatus("unSubmit");
204
+ return { end: true };
205
+ } catch (error) {
206
+ if (isTimeoutError(error)) {
207
+ if (search) {
208
+ return { end: false };
209
+ } else {
210
+ onTimeout();
211
+ return { end: true };
212
+ }
213
+ } else {
214
+ const message = error.i18nKey ? i18n.get(error.i18nKey) : error.message;
215
+ setErrorMsg(message);
216
+ processOnError(new PayKKaError("API_ERROR", message, { code: error.code, cause: error }));
217
+ setSubmitButtonStatus("unSubmit");
218
+ return { end: true };
219
+ }
220
+ }
221
+ };
222
+ const validateForm = () => {
223
+ var _a2;
224
+ (_a2 = formRef.current) == null ? void 0 : _a2.validate(void 0, false).then(() => {
225
+ setValidated(true);
226
+ }).catch(() => {
227
+ setValidated(false);
228
+ });
229
+ };
230
+ y(() => {
231
+ validateForm();
232
+ }, [form]);
233
+ const onSubmit = async () => {
234
+ var _a2;
235
+ setErrorMsg("");
236
+ (_a2 = formRef.current) == null ? void 0 : _a2.validate(async (errors) => {
237
+ var _a3;
238
+ (fieldStatus == null ? void 0 : fieldStatus.address.show) && addressState.setValidateAllFields(true);
239
+ (_a3 = props.onSubmit) == null ? void 0 : _a3.call(props, errors);
240
+ if (errors) {
241
+ setSubmitButtonStatus("unSubmit");
242
+ return;
243
+ }
244
+ setErrorMsg("");
245
+ setSubmitButtonStatus("loading");
246
+ await pay();
247
+ });
248
+ };
249
+ const setFormRef = (dom) => {
250
+ formRef.current = dom;
251
+ dom && validateForm();
252
+ };
253
+ const Button = () => {
254
+ var _a2;
255
+ const transAmount = (_a2 = session == null ? void 0 : session.checkout) == null ? void 0 : _a2.transAmount;
256
+ const amountText = (transAmount == null ? void 0 : transAmount.amount) ? formatAmount(transAmount).jointSymbol() : "";
257
+ const text = i18n.get("common.pay") + (amountText ? ` ${amountText}` : "");
258
+ return /* @__PURE__ */ u(
259
+ SubmitButton,
260
+ {
261
+ className: bem("button"),
262
+ status: submitButtonStatus,
263
+ text,
264
+ loadingText: i18n.get("common.payProcessing"),
265
+ successText: i18n.get("common.paySuccess"),
266
+ onClick: onSubmit,
267
+ verified: validated
268
+ }
269
+ );
270
+ };
271
+ const Email = () => {
272
+ return /* @__PURE__ */ u(b, { children: (fieldStatus == null ? void 0 : fieldStatus.email.show) && /* @__PURE__ */ u("div", { className: fieldClassNames, children: /* @__PURE__ */ u(
273
+ EmailField,
274
+ {
275
+ ref: emailFieldRef,
276
+ value: form.email,
277
+ disabled: fieldStatus == null ? void 0 : fieldStatus.email.disabled
278
+ }
279
+ ) }) });
280
+ };
281
+ const formStyle = {
282
+ [cssVarPrefix("button-bg-color")]: (_a = session == null ? void 0 : session.colors) == null ? void 0 : _a.primary,
283
+ [cssVarPrefix("button-bg-color-hover")]: (_b = session == null ? void 0 : session.colors) == null ? void 0 : _b.primaryHover,
284
+ [cssVarPrefix("button-bg-color-active")]: (_c = session == null ? void 0 : session.colors) == null ? void 0 : _c.primaryActive,
285
+ [cssVarPrefix("button-text-color")]: (_e = (_d = session == null ? void 0 : session.checkout) == null ? void 0 : _d.theme) == null ? void 0 : _e.payButtonTextColor,
286
+ [cssVarPrefix("input-color")]: (_f = session == null ? void 0 : session.colors) == null ? void 0 : _f.primary
287
+ };
288
+ const ErrorMessage = () => {
289
+ return /* @__PURE__ */ u(b, { children: !!errorMsg && /* @__PURE__ */ u(Info, { content: errorMsg, style: { marginTop: "12px" } }) });
290
+ };
291
+ const Address = () => {
292
+ var _a2, _b2;
293
+ return /* @__PURE__ */ u(b, { children: (fieldStatus == null ? void 0 : fieldStatus.address.show) && /* @__PURE__ */ u("div", { className: fieldClassNames, children: /* @__PURE__ */ u(
294
+ AddressField,
295
+ {
296
+ ref: addressFieldRef,
297
+ value: form.address,
298
+ country: ((_a2 = session == null ? void 0 : session.checkout) == null ? void 0 : _a2.country) || ((_b2 = session == null ? void 0 : session.checkout) == null ? void 0 : _b2.bill.country),
299
+ onAddressChange: (value) => setForm(Object.assign(form, { address: value }))
300
+ }
301
+ ) }) });
302
+ };
303
+ return /* @__PURE__ */ u(
304
+ CoreContext.Provider,
305
+ {
306
+ value: {
307
+ i18n,
308
+ session
309
+ },
310
+ children: isCheckoutEnabled && i18n.ready.value && /* @__PURE__ */ u(b, { children: [
311
+ showGuideCard && /* @__PURE__ */ u(GuideCard, { type: PaymentCategory.SHOPEE_PAY }),
312
+ /* @__PURE__ */ u(Form, { form, ref: setFormRef, onFormChange: (form2) => setForm(form2), children: /* @__PURE__ */ u("div", { className: normalizedClass(COMMON_CLASS_NAME, bem()), style: formStyle, children: [
313
+ Email(),
314
+ Address(),
315
+ ErrorMessage(),
316
+ !hidePaymentButton && Button()
317
+ ] }) })
318
+ ] })
319
+ }
320
+ );
321
+ });
322
+ export {
323
+ ShopeePay
324
+ };
@@ -4,12 +4,13 @@ import "../../core/context.js";
4
4
  import "../../utils/card-brand/brands.js";
5
5
  import "../../utils/system-info/get-browser-info.js";
6
6
  import { normalizedClass } from "../../utils/format.js";
7
+ import "../../api/http.js";
7
8
  import enGB from "../../i18n/locales/en-GB.js";
8
9
  import { Button } from "../internal/Button/Button.js";
9
10
  import { IconSafe } from "../internal/icons/IconSafe.js";
10
11
  import { LoadingCheck } from "../internal/LoadingCheck/LoadingCheck.js";
11
12
  const { bem } = useBEM("submit-button");
12
- function SubmitButton(props) {
13
+ const SubmitButton = (props) => {
13
14
  const {
14
15
  text = enGB["common.pay"],
15
16
  loadingText = enGB["common.payProcessing"],
@@ -36,37 +37,23 @@ function SubmitButton(props) {
36
37
  );
37
38
  };
38
39
  y(() => {
39
- if (status === "success") {
40
+ if (status === "success")
40
41
  return;
41
- }
42
42
  setContent(status === "loading" ? loadingText : text);
43
- }, [status]);
43
+ }, [status, text]);
44
44
  return /* @__PURE__ */ u(
45
45
  Button,
46
46
  {
47
47
  icon: Icon(),
48
48
  onClick,
49
- className: normalizedClass(
50
- bem({
51
- success: status === "success"
52
- }),
53
- className
54
- ),
49
+ className: normalizedClass(bem({ success: status === "success" }), className),
55
50
  style,
56
51
  loading: status === "loading",
57
52
  disabled: props.disabled || status === "success",
58
- children: /* @__PURE__ */ u(
59
- "span",
60
- {
61
- class: bem("text", {
62
- "not-verified": !props.verified
63
- }),
64
- children: content
65
- }
66
- )
53
+ children: /* @__PURE__ */ u("span", { class: bem("text", { "not-verified": !props.verified }), children: content })
67
54
  }
68
55
  );
69
- }
56
+ };
70
57
  export {
71
58
  SubmitButton
72
59
  };