@adyen/adyen-web 6.47.0-alpha.eada81f → 6.47.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.
Files changed (492) hide show
  1. package/dist/cjs/adyen.css +20 -22
  2. package/dist/cjs/adyen.css.map +1 -1
  3. package/dist/cjs/index.cjs +2 -2
  4. package/dist/cjs/index.cjs.map +1 -1
  5. package/dist/cjs/index.d.cts +122 -581
  6. package/dist/es/adyen.css +20 -22
  7. package/dist/es/adyen.css.map +1 -1
  8. package/dist/es/components/AmazonPay/AmazonPay.js +1 -1
  9. package/dist/es/components/AmazonPay/AmazonPay.js.map +1 -1
  10. package/dist/es/components/AmazonPay/components/AmazonPayButton.js +1 -1
  11. package/dist/es/components/AmazonPay/components/AmazonPayButton.js.map +1 -1
  12. package/dist/es/components/AmazonPay/components/AmazonPayComponent.js +1 -1
  13. package/dist/es/components/AmazonPay/components/AmazonPayComponent.js.map +1 -1
  14. package/dist/es/components/AmazonPay/components/OrderButton.js +1 -1
  15. package/dist/es/components/AmazonPay/components/OrderButton.js.map +1 -1
  16. package/dist/es/components/AmazonPay/components/SignOutButton.js +1 -1
  17. package/dist/es/components/AmazonPay/components/SignOutButton.js.map +1 -1
  18. package/dist/es/components/AmazonPay/utils.js +1 -1
  19. package/dist/es/components/AmazonPay/utils.js.map +1 -1
  20. package/dist/es/components/ApplePay/services/ApplePaySdkLoader.js.map +1 -1
  21. package/dist/es/components/Card/components/CardInput/components/Installments/Installments.js +1 -1
  22. package/dist/es/components/Card/components/CardInput/components/Installments/Installments.js.map +1 -1
  23. package/dist/es/components/Card/components/CardInput/types.js.map +1 -1
  24. package/dist/es/components/CashAppPay/CashAppPay.js +1 -1
  25. package/dist/es/components/CashAppPay/CashAppPay.js.map +1 -1
  26. package/dist/es/components/CashAppPay/components/CashAppComponent.js +1 -1
  27. package/dist/es/components/CashAppPay/components/CashAppComponent.js.map +1 -1
  28. package/dist/es/components/CashAppPay/services/CashAppService.js +1 -1
  29. package/dist/es/components/CashAppPay/services/CashAppService.js.map +1 -1
  30. package/dist/es/components/CashAppPay/services/types.js.map +1 -1
  31. package/dist/es/components/CustomCard/CustomCard.js +1 -1
  32. package/dist/es/components/CustomCard/CustomCard.js.map +1 -1
  33. package/dist/es/components/Donation/components/DonationComponent.js.map +1 -1
  34. package/dist/es/components/Donation/components/FixedAmounts.js.map +1 -1
  35. package/dist/es/components/Dragonpay/components/DragonpayVoucherResult/DragonpayVoucherResult.js +1 -1
  36. package/dist/es/components/Dragonpay/components/DragonpayVoucherResult/DragonpayVoucherResult.js.map +1 -1
  37. package/dist/es/components/Dropin/components/PaymentMethod/DisableOneClickConfirmation.js +1 -1
  38. package/dist/es/components/Dropin/components/PaymentMethod/DisableOneClickConfirmation.js.map +1 -1
  39. package/dist/es/components/Dropin/components/PaymentMethod/PaymentMethodItem/PaymentMethodItem.js +1 -1
  40. package/dist/es/components/Dropin/components/PaymentMethod/PaymentMethodItem/PaymentMethodItem.js.map +1 -1
  41. package/dist/es/components/Giftcard/Giftcard.js +1 -1
  42. package/dist/es/components/Giftcard/Giftcard.js.map +1 -1
  43. package/dist/es/components/Giftcard/components/GiftcardComponent.js +1 -1
  44. package/dist/es/components/Giftcard/components/GiftcardComponent.js.map +1 -1
  45. package/dist/es/components/Giftcard/types.js +2 -0
  46. package/dist/es/components/Giftcard/types.js.map +1 -0
  47. package/dist/es/components/Giftcard/utils.js +2 -0
  48. package/dist/es/components/Giftcard/utils.js.map +1 -0
  49. package/dist/es/components/GooglePay/GooglePay.js.map +1 -1
  50. package/dist/es/components/PayByBankPix/PayByBankPix.js +1 -1
  51. package/dist/es/components/PayByBankPix/PayByBankPix.js.map +1 -1
  52. package/dist/es/components/PayByBankPix/components/Enrollment/useIssuerWithLogo.js +1 -1
  53. package/dist/es/components/PayByBankPix/components/Enrollment/useIssuerWithLogo.js.map +1 -1
  54. package/dist/es/components/PayByBankUS/PayByBankUS.js +1 -1
  55. package/dist/es/components/PayByBankUS/PayByBankUS.js.map +1 -1
  56. package/dist/es/components/PayPal/Paypal.js +1 -1
  57. package/dist/es/components/PayPal/Paypal.js.map +1 -1
  58. package/dist/es/components/PayPal/components/PaypalButtons.js +1 -1
  59. package/dist/es/components/PayPal/components/PaypalButtons.js.map +1 -1
  60. package/dist/es/components/PayPal/components/PaypalComponent.js +1 -1
  61. package/dist/es/components/PayPal/components/PaypalComponent.js.map +1 -1
  62. package/dist/es/components/PayPal/config.js +1 -1
  63. package/dist/es/components/PayPal/config.js.map +1 -1
  64. package/dist/es/components/PayPal/utils/get-paypal-locale.js +1 -1
  65. package/dist/es/components/PayPal/utils/get-paypal-locale.js.map +1 -1
  66. package/dist/es/components/PayPal/utils/get-paypal-settings.js +1 -1
  67. package/dist/es/components/PayPal/utils/get-paypal-settings.js.map +1 -1
  68. package/dist/es/components/PayPal/utils/get-paypal-url.js +1 -1
  69. package/dist/es/components/PayPal/utils/get-paypal-url.js.map +1 -1
  70. package/dist/es/components/PayPalFastlane/Fastlane.js +1 -1
  71. package/dist/es/components/PayPalFastlane/Fastlane.js.map +1 -1
  72. package/dist/es/components/PayPalFastlane/FastlaneSDK.js +1 -1
  73. package/dist/es/components/PayPalFastlane/FastlaneSDK.js.map +1 -1
  74. package/dist/es/components/ThreeDS2/ThreeDS2Challenge.js +1 -1
  75. package/dist/es/components/ThreeDS2/ThreeDS2Challenge.js.map +1 -1
  76. package/dist/es/components/ThreeDS2/ThreeDS2DeviceFingerprint.js +1 -1
  77. package/dist/es/components/ThreeDS2/ThreeDS2DeviceFingerprint.js.map +1 -1
  78. package/dist/es/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.js +1 -1
  79. package/dist/es/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.js.map +1 -1
  80. package/dist/es/components/ThreeDS2/components/DeviceFingerprint/DoFingerprint3DS2.js.map +1 -1
  81. package/dist/es/components/ThreeDS2/components/DeviceFingerprint/PrepareFingerprint3DS2.js +1 -1
  82. package/dist/es/components/ThreeDS2/components/DeviceFingerprint/PrepareFingerprint3DS2.js.map +1 -1
  83. package/dist/es/components/ThreeDS2/components/Form/ThreeDS2Form.js +1 -1
  84. package/dist/es/components/ThreeDS2/components/Form/ThreeDS2Form.js.map +1 -1
  85. package/dist/es/components/ThreeDS2/components/utils.js +1 -1
  86. package/dist/es/components/ThreeDS2/components/utils.js.map +1 -1
  87. package/dist/es/components/components-name-map.js +1 -1
  88. package/dist/es/components/components-name-map.js.map +1 -1
  89. package/dist/es/components/helpers/IssuerListContainer/IssuerListContainer.js +1 -1
  90. package/dist/es/components/helpers/IssuerListContainer/IssuerListContainer.js.map +1 -1
  91. package/dist/es/components/index.js +1 -1
  92. package/dist/es/components/internal/Address/Address.js +1 -1
  93. package/dist/es/components/internal/Address/Address.js.map +1 -1
  94. package/dist/es/components/internal/Address/Specifications.js +1 -1
  95. package/dist/es/components/internal/Address/Specifications.js.map +1 -1
  96. package/dist/es/components/internal/Address/components/AddressSearch.js +1 -1
  97. package/dist/es/components/internal/Address/components/AddressSearch.js.map +1 -1
  98. package/dist/es/components/internal/Address/components/CountryField.js +1 -1
  99. package/dist/es/components/internal/Address/components/CountryField.js.map +1 -1
  100. package/dist/es/components/internal/Address/components/FieldContainer.js +1 -1
  101. package/dist/es/components/internal/Address/components/FieldContainer.js.map +1 -1
  102. package/dist/es/components/internal/Address/components/StateField.js +1 -1
  103. package/dist/es/components/internal/Address/components/StateField.js.map +1 -1
  104. package/dist/es/components/internal/Address/constants.js.map +1 -1
  105. package/dist/es/components/internal/Address/utils.js.map +1 -1
  106. package/dist/es/components/internal/Address/validate.formats.js +1 -1
  107. package/dist/es/components/internal/Address/validate.formats.js.map +1 -1
  108. package/dist/es/components/internal/BaseElement/BaseElement.js +1 -1
  109. package/dist/es/components/internal/BaseElement/BaseElement.js.map +1 -1
  110. package/dist/es/components/internal/ClickToPay/components/CtPOneTimePassword/CtPOneTimePasswordInput/CtPResendOtpLink.js +1 -1
  111. package/dist/es/components/internal/ClickToPay/components/CtPOneTimePassword/CtPOneTimePasswordInput/CtPResendOtpLink.js.map +1 -1
  112. package/dist/es/components/internal/ClickToPay/components/CtPSection/CtPLogoutLink.js +1 -1
  113. package/dist/es/components/internal/ClickToPay/components/CtPSection/CtPLogoutLink.js.map +1 -1
  114. package/dist/es/components/internal/CompanyDetails/CompanyDetails.js +1 -1
  115. package/dist/es/components/internal/CompanyDetails/CompanyDetails.js.map +1 -1
  116. package/dist/es/components/internal/CompanyDetails/validate.js +1 -1
  117. package/dist/es/components/internal/CompanyDetails/validate.js.map +1 -1
  118. package/dist/es/components/internal/ConsentCheckboxLabel/ConsentCheckboxLabel.js.map +1 -1
  119. package/dist/es/components/internal/FormFields/Field/Field.js +1 -1
  120. package/dist/es/components/internal/FormFields/Field/Field.js.map +1 -1
  121. package/dist/es/components/internal/FormFields/InputBase.js +1 -1
  122. package/dist/es/components/internal/FormFields/InputBase.js.map +1 -1
  123. package/dist/es/components/internal/FormFields/InputDate/InputDate.js +1 -1
  124. package/dist/es/components/internal/FormFields/InputDate/InputDate.js.map +1 -1
  125. package/dist/es/components/internal/FormFields/InputDate/utils.js.map +1 -1
  126. package/dist/es/components/internal/FormFields/Select/Select.js +1 -1
  127. package/dist/es/components/internal/FormFields/Select/Select.js.map +1 -1
  128. package/dist/es/components/internal/FormFields/Select/components/SelectButton.js +1 -1
  129. package/dist/es/components/internal/FormFields/Select/components/SelectButton.js.map +1 -1
  130. package/dist/es/components/internal/IbanInput/IbanInput.js +1 -1
  131. package/dist/es/components/internal/IbanInput/IbanInput.js.map +1 -1
  132. package/dist/es/components/internal/IbanInput/specifications.js.map +1 -1
  133. package/dist/es/components/internal/IbanInput/utils.js +1 -1
  134. package/dist/es/components/internal/IbanInput/utils.js.map +1 -1
  135. package/dist/es/components/internal/PayButton/utils.js.map +1 -1
  136. package/dist/es/components/internal/PersonalDetails/PersonalDetails.js +1 -1
  137. package/dist/es/components/internal/PersonalDetails/PersonalDetails.js.map +1 -1
  138. package/dist/es/components/internal/PersonalDetails/validate.js +1 -1
  139. package/dist/es/components/internal/PersonalDetails/validate.js.map +1 -1
  140. package/dist/es/components/internal/PhoneInput/PhoneInputFields.js +1 -1
  141. package/dist/es/components/internal/PhoneInput/PhoneInputFields.js.map +1 -1
  142. package/dist/es/components/internal/PhoneInput/PhoneInputForm.js +1 -1
  143. package/dist/es/components/internal/PhoneInput/PhoneInputForm.js.map +1 -1
  144. package/dist/es/components/internal/QRLoader/QRLoader.js.map +1 -1
  145. package/dist/es/components/internal/SecuredFields/lib/securedField/utils/processAriaConfig.js +1 -1
  146. package/dist/es/components/internal/SecuredFields/lib/securedField/utils/processAriaConfig.js.map +1 -1
  147. package/dist/es/components/internal/UIElement/UIElement.js +1 -1
  148. package/dist/es/components/internal/UIElement/UIElement.js.map +1 -1
  149. package/dist/es/components/internal/UIElement/utils.js.map +1 -1
  150. package/dist/es/components/tx-variants.js +1 -1
  151. package/dist/es/components/tx-variants.js.map +1 -1
  152. package/dist/es/core/Services/http.js.map +1 -1
  153. package/dist/es/core/config.js +1 -1
  154. package/dist/es/core/config.js.map +1 -1
  155. package/dist/es/core/core.js +1 -1
  156. package/dist/es/core/core.js.map +1 -1
  157. package/dist/es/core/utils.js +1 -1
  158. package/dist/es/core/utils.js.map +1 -1
  159. package/dist/es/hooks/usePaymentStatusTimer/usePaymentStatusTimer.js +1 -1
  160. package/dist/es/hooks/usePaymentStatusTimer/usePaymentStatusTimer.js.map +1 -1
  161. package/dist/es/index.d.ts +122 -581
  162. package/dist/es/index.js +1 -1
  163. package/dist/es/language/Language.js +1 -1
  164. package/dist/es/language/Language.js.map +1 -1
  165. package/dist/es/language/utils.js +1 -1
  166. package/dist/es/language/utils.js.map +1 -1
  167. package/dist/es/utils/Script.js.map +1 -1
  168. package/dist/es/utils/Validator/ValidationRuleResult.js.map +1 -1
  169. package/dist/es/utils/Validator/Validator.js +1 -1
  170. package/dist/es/utils/Validator/Validator.js.map +1 -1
  171. package/dist/es/utils/Validator/defaultRules.js +1 -1
  172. package/dist/es/utils/Validator/defaultRules.js.map +1 -1
  173. package/dist/es/utils/amount-util.js +1 -1
  174. package/dist/es/utils/amount-util.js.map +1 -1
  175. package/dist/es/utils/browserInfo.js.map +1 -1
  176. package/dist/es/utils/createSdkData.js +1 -1
  177. package/dist/es/utils/createSdkData.js.map +1 -1
  178. package/dist/es/utils/get-issuer-image.js +1 -1
  179. package/dist/es/utils/get-issuer-image.js.map +1 -1
  180. package/dist/es/utils/get-process-message-handler.js.map +1 -1
  181. package/dist/es/utils/getConsentUrl.js +1 -1
  182. package/dist/es/utils/getConsentUrl.js.map +1 -1
  183. package/dist/es/utils/getErrorMessage.js.map +1 -1
  184. package/dist/es/utils/getOrigin.js.map +1 -1
  185. package/dist/es/utils/isValidURL.js +1 -1
  186. package/dist/es/utils/isValidURL.js.map +1 -1
  187. package/dist/es/utils/promiseTimeout.js.map +1 -1
  188. package/dist/es/utils/useAutoFocus.js.map +1 -1
  189. package/dist/es/utils/validator-utils.js +1 -1
  190. package/dist/es/utils/validator-utils.js.map +1 -1
  191. package/dist/es-legacy/adyen.css +20 -22
  192. package/dist/es-legacy/adyen.css.map +1 -1
  193. package/dist/es-legacy/components/AmazonPay/AmazonPay.js +1 -1
  194. package/dist/es-legacy/components/AmazonPay/AmazonPay.js.map +1 -1
  195. package/dist/es-legacy/components/AmazonPay/components/AmazonPayButton.js +1 -1
  196. package/dist/es-legacy/components/AmazonPay/components/AmazonPayButton.js.map +1 -1
  197. package/dist/es-legacy/components/AmazonPay/components/AmazonPayComponent.js +1 -1
  198. package/dist/es-legacy/components/AmazonPay/components/AmazonPayComponent.js.map +1 -1
  199. package/dist/es-legacy/components/AmazonPay/components/OrderButton.js +1 -1
  200. package/dist/es-legacy/components/AmazonPay/components/OrderButton.js.map +1 -1
  201. package/dist/es-legacy/components/AmazonPay/components/SignOutButton.js +1 -1
  202. package/dist/es-legacy/components/AmazonPay/components/SignOutButton.js.map +1 -1
  203. package/dist/es-legacy/components/AmazonPay/utils.js +1 -1
  204. package/dist/es-legacy/components/AmazonPay/utils.js.map +1 -1
  205. package/dist/es-legacy/components/ApplePay/services/ApplePaySdkLoader.js.map +1 -1
  206. package/dist/es-legacy/components/Card/components/CardInput/components/Installments/Installments.js +1 -1
  207. package/dist/es-legacy/components/Card/components/CardInput/components/Installments/Installments.js.map +1 -1
  208. package/dist/es-legacy/components/Card/components/CardInput/types.js.map +1 -1
  209. package/dist/es-legacy/components/CashAppPay/CashAppPay.js +1 -1
  210. package/dist/es-legacy/components/CashAppPay/CashAppPay.js.map +1 -1
  211. package/dist/es-legacy/components/CashAppPay/components/CashAppComponent.js +1 -1
  212. package/dist/es-legacy/components/CashAppPay/components/CashAppComponent.js.map +1 -1
  213. package/dist/es-legacy/components/CashAppPay/services/CashAppService.js +1 -1
  214. package/dist/es-legacy/components/CashAppPay/services/CashAppService.js.map +1 -1
  215. package/dist/es-legacy/components/CashAppPay/services/types.js.map +1 -1
  216. package/dist/es-legacy/components/CustomCard/CustomCard.js +1 -1
  217. package/dist/es-legacy/components/CustomCard/CustomCard.js.map +1 -1
  218. package/dist/es-legacy/components/Donation/components/DonationComponent.js.map +1 -1
  219. package/dist/es-legacy/components/Donation/components/FixedAmounts.js.map +1 -1
  220. package/dist/es-legacy/components/Dragonpay/components/DragonpayVoucherResult/DragonpayVoucherResult.js +1 -1
  221. package/dist/es-legacy/components/Dragonpay/components/DragonpayVoucherResult/DragonpayVoucherResult.js.map +1 -1
  222. package/dist/es-legacy/components/Dropin/components/PaymentMethod/DisableOneClickConfirmation.js +1 -1
  223. package/dist/es-legacy/components/Dropin/components/PaymentMethod/DisableOneClickConfirmation.js.map +1 -1
  224. package/dist/es-legacy/components/Dropin/components/PaymentMethod/PaymentMethodItem/PaymentMethodItem.js +1 -1
  225. package/dist/es-legacy/components/Dropin/components/PaymentMethod/PaymentMethodItem/PaymentMethodItem.js.map +1 -1
  226. package/dist/es-legacy/components/Giftcard/Giftcard.js +1 -1
  227. package/dist/es-legacy/components/Giftcard/Giftcard.js.map +1 -1
  228. package/dist/es-legacy/components/Giftcard/components/GiftcardComponent.js +1 -1
  229. package/dist/es-legacy/components/Giftcard/components/GiftcardComponent.js.map +1 -1
  230. package/dist/es-legacy/components/Giftcard/types.js +2 -0
  231. package/dist/es-legacy/components/Giftcard/types.js.map +1 -0
  232. package/dist/es-legacy/components/Giftcard/utils.js +2 -0
  233. package/dist/es-legacy/components/Giftcard/utils.js.map +1 -0
  234. package/dist/es-legacy/components/GooglePay/GooglePay.js.map +1 -1
  235. package/dist/es-legacy/components/PayByBankPix/PayByBankPix.js +1 -1
  236. package/dist/es-legacy/components/PayByBankPix/PayByBankPix.js.map +1 -1
  237. package/dist/es-legacy/components/PayByBankPix/components/Enrollment/useIssuerWithLogo.js +1 -1
  238. package/dist/es-legacy/components/PayByBankPix/components/Enrollment/useIssuerWithLogo.js.map +1 -1
  239. package/dist/es-legacy/components/PayByBankUS/PayByBankUS.js +1 -1
  240. package/dist/es-legacy/components/PayByBankUS/PayByBankUS.js.map +1 -1
  241. package/dist/es-legacy/components/PayPal/Paypal.js +1 -1
  242. package/dist/es-legacy/components/PayPal/Paypal.js.map +1 -1
  243. package/dist/es-legacy/components/PayPal/components/PaypalButtons.js +1 -1
  244. package/dist/es-legacy/components/PayPal/components/PaypalButtons.js.map +1 -1
  245. package/dist/es-legacy/components/PayPal/components/PaypalComponent.js +1 -1
  246. package/dist/es-legacy/components/PayPal/components/PaypalComponent.js.map +1 -1
  247. package/dist/es-legacy/components/PayPal/config.js +1 -1
  248. package/dist/es-legacy/components/PayPal/config.js.map +1 -1
  249. package/dist/es-legacy/components/PayPal/utils/get-paypal-locale.js +1 -1
  250. package/dist/es-legacy/components/PayPal/utils/get-paypal-locale.js.map +1 -1
  251. package/dist/es-legacy/components/PayPal/utils/get-paypal-settings.js +1 -1
  252. package/dist/es-legacy/components/PayPal/utils/get-paypal-settings.js.map +1 -1
  253. package/dist/es-legacy/components/PayPal/utils/get-paypal-url.js +1 -1
  254. package/dist/es-legacy/components/PayPal/utils/get-paypal-url.js.map +1 -1
  255. package/dist/es-legacy/components/PayPalFastlane/Fastlane.js +1 -1
  256. package/dist/es-legacy/components/PayPalFastlane/Fastlane.js.map +1 -1
  257. package/dist/es-legacy/components/PayPalFastlane/FastlaneSDK.js +1 -1
  258. package/dist/es-legacy/components/PayPalFastlane/FastlaneSDK.js.map +1 -1
  259. package/dist/es-legacy/components/ThreeDS2/ThreeDS2Challenge.js +1 -1
  260. package/dist/es-legacy/components/ThreeDS2/ThreeDS2Challenge.js.map +1 -1
  261. package/dist/es-legacy/components/ThreeDS2/ThreeDS2DeviceFingerprint.js +1 -1
  262. package/dist/es-legacy/components/ThreeDS2/ThreeDS2DeviceFingerprint.js.map +1 -1
  263. package/dist/es-legacy/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.js +1 -1
  264. package/dist/es-legacy/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.js.map +1 -1
  265. package/dist/es-legacy/components/ThreeDS2/components/DeviceFingerprint/DoFingerprint3DS2.js.map +1 -1
  266. package/dist/es-legacy/components/ThreeDS2/components/DeviceFingerprint/PrepareFingerprint3DS2.js +1 -1
  267. package/dist/es-legacy/components/ThreeDS2/components/DeviceFingerprint/PrepareFingerprint3DS2.js.map +1 -1
  268. package/dist/es-legacy/components/ThreeDS2/components/Form/ThreeDS2Form.js +1 -1
  269. package/dist/es-legacy/components/ThreeDS2/components/Form/ThreeDS2Form.js.map +1 -1
  270. package/dist/es-legacy/components/ThreeDS2/components/utils.js +1 -1
  271. package/dist/es-legacy/components/ThreeDS2/components/utils.js.map +1 -1
  272. package/dist/es-legacy/components/components-name-map.js +1 -1
  273. package/dist/es-legacy/components/components-name-map.js.map +1 -1
  274. package/dist/es-legacy/components/helpers/IssuerListContainer/IssuerListContainer.js +1 -1
  275. package/dist/es-legacy/components/helpers/IssuerListContainer/IssuerListContainer.js.map +1 -1
  276. package/dist/es-legacy/components/index.js +1 -1
  277. package/dist/es-legacy/components/internal/Address/Address.js +1 -1
  278. package/dist/es-legacy/components/internal/Address/Address.js.map +1 -1
  279. package/dist/es-legacy/components/internal/Address/Specifications.js +1 -1
  280. package/dist/es-legacy/components/internal/Address/Specifications.js.map +1 -1
  281. package/dist/es-legacy/components/internal/Address/components/AddressSearch.js +1 -1
  282. package/dist/es-legacy/components/internal/Address/components/AddressSearch.js.map +1 -1
  283. package/dist/es-legacy/components/internal/Address/components/CountryField.js +1 -1
  284. package/dist/es-legacy/components/internal/Address/components/CountryField.js.map +1 -1
  285. package/dist/es-legacy/components/internal/Address/components/FieldContainer.js +1 -1
  286. package/dist/es-legacy/components/internal/Address/components/FieldContainer.js.map +1 -1
  287. package/dist/es-legacy/components/internal/Address/components/StateField.js +1 -1
  288. package/dist/es-legacy/components/internal/Address/components/StateField.js.map +1 -1
  289. package/dist/es-legacy/components/internal/Address/constants.js.map +1 -1
  290. package/dist/es-legacy/components/internal/Address/utils.js.map +1 -1
  291. package/dist/es-legacy/components/internal/Address/validate.formats.js +1 -1
  292. package/dist/es-legacy/components/internal/Address/validate.formats.js.map +1 -1
  293. package/dist/es-legacy/components/internal/BaseElement/BaseElement.js +1 -1
  294. package/dist/es-legacy/components/internal/BaseElement/BaseElement.js.map +1 -1
  295. package/dist/es-legacy/components/internal/ClickToPay/components/CtPOneTimePassword/CtPOneTimePasswordInput/CtPResendOtpLink.js +1 -1
  296. package/dist/es-legacy/components/internal/ClickToPay/components/CtPOneTimePassword/CtPOneTimePasswordInput/CtPResendOtpLink.js.map +1 -1
  297. package/dist/es-legacy/components/internal/ClickToPay/components/CtPSection/CtPLogoutLink.js +1 -1
  298. package/dist/es-legacy/components/internal/ClickToPay/components/CtPSection/CtPLogoutLink.js.map +1 -1
  299. package/dist/es-legacy/components/internal/CompanyDetails/CompanyDetails.js +1 -1
  300. package/dist/es-legacy/components/internal/CompanyDetails/CompanyDetails.js.map +1 -1
  301. package/dist/es-legacy/components/internal/CompanyDetails/validate.js +1 -1
  302. package/dist/es-legacy/components/internal/CompanyDetails/validate.js.map +1 -1
  303. package/dist/es-legacy/components/internal/ConsentCheckboxLabel/ConsentCheckboxLabel.js.map +1 -1
  304. package/dist/es-legacy/components/internal/FormFields/Field/Field.js +1 -1
  305. package/dist/es-legacy/components/internal/FormFields/Field/Field.js.map +1 -1
  306. package/dist/es-legacy/components/internal/FormFields/InputBase.js +1 -1
  307. package/dist/es-legacy/components/internal/FormFields/InputBase.js.map +1 -1
  308. package/dist/es-legacy/components/internal/FormFields/InputDate/InputDate.js +1 -1
  309. package/dist/es-legacy/components/internal/FormFields/InputDate/InputDate.js.map +1 -1
  310. package/dist/es-legacy/components/internal/FormFields/InputDate/utils.js.map +1 -1
  311. package/dist/es-legacy/components/internal/FormFields/Select/Select.js +1 -1
  312. package/dist/es-legacy/components/internal/FormFields/Select/Select.js.map +1 -1
  313. package/dist/es-legacy/components/internal/FormFields/Select/components/SelectButton.js +1 -1
  314. package/dist/es-legacy/components/internal/FormFields/Select/components/SelectButton.js.map +1 -1
  315. package/dist/es-legacy/components/internal/IbanInput/IbanInput.js +1 -1
  316. package/dist/es-legacy/components/internal/IbanInput/IbanInput.js.map +1 -1
  317. package/dist/es-legacy/components/internal/IbanInput/specifications.js.map +1 -1
  318. package/dist/es-legacy/components/internal/IbanInput/utils.js +1 -1
  319. package/dist/es-legacy/components/internal/IbanInput/utils.js.map +1 -1
  320. package/dist/es-legacy/components/internal/PayButton/utils.js.map +1 -1
  321. package/dist/es-legacy/components/internal/PersonalDetails/PersonalDetails.js +1 -1
  322. package/dist/es-legacy/components/internal/PersonalDetails/PersonalDetails.js.map +1 -1
  323. package/dist/es-legacy/components/internal/PersonalDetails/validate.js +1 -1
  324. package/dist/es-legacy/components/internal/PersonalDetails/validate.js.map +1 -1
  325. package/dist/es-legacy/components/internal/PhoneInput/PhoneInputFields.js +1 -1
  326. package/dist/es-legacy/components/internal/PhoneInput/PhoneInputFields.js.map +1 -1
  327. package/dist/es-legacy/components/internal/PhoneInput/PhoneInputForm.js +1 -1
  328. package/dist/es-legacy/components/internal/PhoneInput/PhoneInputForm.js.map +1 -1
  329. package/dist/es-legacy/components/internal/QRLoader/QRLoader.js.map +1 -1
  330. package/dist/es-legacy/components/internal/SecuredFields/lib/securedField/utils/processAriaConfig.js +1 -1
  331. package/dist/es-legacy/components/internal/SecuredFields/lib/securedField/utils/processAriaConfig.js.map +1 -1
  332. package/dist/es-legacy/components/internal/UIElement/UIElement.js +1 -1
  333. package/dist/es-legacy/components/internal/UIElement/UIElement.js.map +1 -1
  334. package/dist/es-legacy/components/internal/UIElement/utils.js.map +1 -1
  335. package/dist/es-legacy/components/tx-variants.js +1 -1
  336. package/dist/es-legacy/components/tx-variants.js.map +1 -1
  337. package/dist/es-legacy/core/Services/http.js.map +1 -1
  338. package/dist/es-legacy/core/config.js +1 -1
  339. package/dist/es-legacy/core/config.js.map +1 -1
  340. package/dist/es-legacy/core/core.js +1 -1
  341. package/dist/es-legacy/core/core.js.map +1 -1
  342. package/dist/es-legacy/core/utils.js +1 -1
  343. package/dist/es-legacy/core/utils.js.map +1 -1
  344. package/dist/es-legacy/hooks/usePaymentStatusTimer/usePaymentStatusTimer.js +1 -1
  345. package/dist/es-legacy/hooks/usePaymentStatusTimer/usePaymentStatusTimer.js.map +1 -1
  346. package/dist/es-legacy/index.js +1 -1
  347. package/dist/es-legacy/language/Language.js +1 -1
  348. package/dist/es-legacy/language/Language.js.map +1 -1
  349. package/dist/es-legacy/language/utils.js +1 -1
  350. package/dist/es-legacy/language/utils.js.map +1 -1
  351. package/dist/es-legacy/utils/Script.js.map +1 -1
  352. package/dist/es-legacy/utils/Validator/ValidationRuleResult.js.map +1 -1
  353. package/dist/es-legacy/utils/Validator/Validator.js +1 -1
  354. package/dist/es-legacy/utils/Validator/Validator.js.map +1 -1
  355. package/dist/es-legacy/utils/Validator/defaultRules.js +1 -1
  356. package/dist/es-legacy/utils/Validator/defaultRules.js.map +1 -1
  357. package/dist/es-legacy/utils/amount-util.js +1 -1
  358. package/dist/es-legacy/utils/amount-util.js.map +1 -1
  359. package/dist/es-legacy/utils/browserInfo.js.map +1 -1
  360. package/dist/es-legacy/utils/createSdkData.js +1 -1
  361. package/dist/es-legacy/utils/createSdkData.js.map +1 -1
  362. package/dist/es-legacy/utils/get-issuer-image.js +1 -1
  363. package/dist/es-legacy/utils/get-issuer-image.js.map +1 -1
  364. package/dist/es-legacy/utils/get-process-message-handler.js.map +1 -1
  365. package/dist/es-legacy/utils/getConsentUrl.js +1 -1
  366. package/dist/es-legacy/utils/getConsentUrl.js.map +1 -1
  367. package/dist/es-legacy/utils/getErrorMessage.js.map +1 -1
  368. package/dist/es-legacy/utils/getOrigin.js.map +1 -1
  369. package/dist/es-legacy/utils/isValidURL.js +1 -1
  370. package/dist/es-legacy/utils/isValidURL.js.map +1 -1
  371. package/dist/es-legacy/utils/promiseTimeout.js.map +1 -1
  372. package/dist/es-legacy/utils/useAutoFocus.js.map +1 -1
  373. package/dist/es-legacy/utils/validator-utils.js +1 -1
  374. package/dist/es-legacy/utils/validator-utils.js.map +1 -1
  375. package/package.json +25 -24
  376. package/styles/adyen.css +20 -22
  377. package/dist/es/components/PayPal/PayPalCredit.js +0 -2
  378. package/dist/es/components/PayPal/PayPalCredit.js.map +0 -1
  379. package/dist/es/components/PayPal/PayPalPaylater.js +0 -2
  380. package/dist/es/components/PayPal/PayPalPaylater.js.map +0 -1
  381. package/dist/es/components/PayPal/Venmo.js +0 -2
  382. package/dist/es/components/PayPal/Venmo.js.map +0 -1
  383. package/dist/es/components/PayPal/components/PayPalButton.js +0 -2
  384. package/dist/es/components/PayPal/components/PayPalButton.js.map +0 -1
  385. package/dist/es/components/PayPal/components/PayPalComponentV6.js +0 -2
  386. package/dist/es/components/PayPal/components/PayPalComponentV6.js.map +0 -1
  387. package/dist/es/components/PayPal/components/PayPalComponentV6.module.scss.js +0 -2
  388. package/dist/es/components/PayPal/components/PayPalComponentV6.module.scss.js.map +0 -1
  389. package/dist/es/components/PayPal/components/PayPalCreditButton.js +0 -2
  390. package/dist/es/components/PayPal/components/PayPalCreditButton.js.map +0 -1
  391. package/dist/es/components/PayPal/components/PayPalCreditComponent.js +0 -2
  392. package/dist/es/components/PayPal/components/PayPalCreditComponent.js.map +0 -1
  393. package/dist/es/components/PayPal/components/PayPalMessaging.js +0 -2
  394. package/dist/es/components/PayPal/components/PayPalMessaging.js.map +0 -1
  395. package/dist/es/components/PayPal/components/PayPalPayLaterButton.js +0 -2
  396. package/dist/es/components/PayPal/components/PayPalPayLaterButton.js.map +0 -1
  397. package/dist/es/components/PayPal/components/PayPalPaylaterComponent.js +0 -2
  398. package/dist/es/components/PayPal/components/PayPalPaylaterComponent.js.map +0 -1
  399. package/dist/es/components/PayPal/components/PayPalPaylaterComponent.module.scss.js +0 -2
  400. package/dist/es/components/PayPal/components/PayPalPaylaterComponent.module.scss.js.map +0 -1
  401. package/dist/es/components/PayPal/components/PayPalProcessingSpinner.js +0 -2
  402. package/dist/es/components/PayPal/components/PayPalProcessingSpinner.js.map +0 -1
  403. package/dist/es/components/PayPal/components/PayPalSpinner.js +0 -2
  404. package/dist/es/components/PayPal/components/PayPalSpinner.js.map +0 -1
  405. package/dist/es/components/PayPal/components/VenmoButton.js +0 -2
  406. package/dist/es/components/PayPal/components/VenmoButton.js.map +0 -1
  407. package/dist/es/components/PayPal/components/VenmoComponent.js +0 -2
  408. package/dist/es/components/PayPal/components/VenmoComponent.js.map +0 -1
  409. package/dist/es/components/PayPal/hooks/usePayPalButtonEligibility.js +0 -2
  410. package/dist/es/components/PayPal/hooks/usePayPalButtonEligibility.js.map +0 -1
  411. package/dist/es/components/PayPal/hooks/usePayPalOneTimeSession.js +0 -2
  412. package/dist/es/components/PayPal/hooks/usePayPalOneTimeSession.js.map +0 -1
  413. package/dist/es/components/PayPal/hooks/usePayPalSaveSession.js +0 -2
  414. package/dist/es/components/PayPal/hooks/usePayPalSaveSession.js.map +0 -1
  415. package/dist/es/components/PayPal/hooks/usePayPalSessionOptions.js +0 -2
  416. package/dist/es/components/PayPal/hooks/usePayPalSessionOptions.js.map +0 -1
  417. package/dist/es/components/PayPal/hooks/usePayPalStatus.js +0 -2
  418. package/dist/es/components/PayPal/hooks/usePayPalStatus.js.map +0 -1
  419. package/dist/es/components/PayPal/hooks/useStartPayPalSession.js +0 -2
  420. package/dist/es/components/PayPal/hooks/useStartPayPalSession.js.map +0 -1
  421. package/dist/es/components/PayPal/models/BasePayPalElement.js +0 -2
  422. package/dist/es/components/PayPal/models/BasePayPalElement.js.map +0 -1
  423. package/dist/es/components/PayPal/services/PayPalSdkLoader.js +0 -2
  424. package/dist/es/components/PayPal/services/PayPalSdkLoader.js.map +0 -1
  425. package/dist/es/components/PayPal/services/PayPalService.js +0 -2
  426. package/dist/es/components/PayPal/services/PayPalService.js.map +0 -1
  427. package/dist/es/components/PayPal/services/request-paypal-oauth-token.js +0 -2
  428. package/dist/es/components/PayPal/services/request-paypal-oauth-token.js.map +0 -1
  429. package/dist/es/components/PayPal/services/request-paypal-order-details.js +0 -2
  430. package/dist/es/components/PayPal/services/request-paypal-order-details.js.map +0 -1
  431. package/dist/es/components/PayPal/utils/is-paypal-service-config-equal.js +0 -2
  432. package/dist/es/components/PayPal/utils/is-paypal-service-config-equal.js.map +0 -1
  433. package/dist/es/utils/is-live-environment.js +0 -2
  434. package/dist/es/utils/is-live-environment.js.map +0 -1
  435. package/dist/es-legacy/components/PayPal/PayPalCredit.js +0 -2
  436. package/dist/es-legacy/components/PayPal/PayPalCredit.js.map +0 -1
  437. package/dist/es-legacy/components/PayPal/PayPalPaylater.js +0 -2
  438. package/dist/es-legacy/components/PayPal/PayPalPaylater.js.map +0 -1
  439. package/dist/es-legacy/components/PayPal/Venmo.js +0 -2
  440. package/dist/es-legacy/components/PayPal/Venmo.js.map +0 -1
  441. package/dist/es-legacy/components/PayPal/components/PayPalButton.js +0 -2
  442. package/dist/es-legacy/components/PayPal/components/PayPalButton.js.map +0 -1
  443. package/dist/es-legacy/components/PayPal/components/PayPalComponentV6.js +0 -2
  444. package/dist/es-legacy/components/PayPal/components/PayPalComponentV6.js.map +0 -1
  445. package/dist/es-legacy/components/PayPal/components/PayPalComponentV6.module.scss.js +0 -2
  446. package/dist/es-legacy/components/PayPal/components/PayPalComponentV6.module.scss.js.map +0 -1
  447. package/dist/es-legacy/components/PayPal/components/PayPalCreditButton.js +0 -2
  448. package/dist/es-legacy/components/PayPal/components/PayPalCreditButton.js.map +0 -1
  449. package/dist/es-legacy/components/PayPal/components/PayPalCreditComponent.js +0 -2
  450. package/dist/es-legacy/components/PayPal/components/PayPalCreditComponent.js.map +0 -1
  451. package/dist/es-legacy/components/PayPal/components/PayPalMessaging.js +0 -2
  452. package/dist/es-legacy/components/PayPal/components/PayPalMessaging.js.map +0 -1
  453. package/dist/es-legacy/components/PayPal/components/PayPalPayLaterButton.js +0 -2
  454. package/dist/es-legacy/components/PayPal/components/PayPalPayLaterButton.js.map +0 -1
  455. package/dist/es-legacy/components/PayPal/components/PayPalPaylaterComponent.js +0 -2
  456. package/dist/es-legacy/components/PayPal/components/PayPalPaylaterComponent.js.map +0 -1
  457. package/dist/es-legacy/components/PayPal/components/PayPalPaylaterComponent.module.scss.js +0 -2
  458. package/dist/es-legacy/components/PayPal/components/PayPalPaylaterComponent.module.scss.js.map +0 -1
  459. package/dist/es-legacy/components/PayPal/components/PayPalProcessingSpinner.js +0 -2
  460. package/dist/es-legacy/components/PayPal/components/PayPalProcessingSpinner.js.map +0 -1
  461. package/dist/es-legacy/components/PayPal/components/PayPalSpinner.js +0 -2
  462. package/dist/es-legacy/components/PayPal/components/PayPalSpinner.js.map +0 -1
  463. package/dist/es-legacy/components/PayPal/components/VenmoButton.js +0 -2
  464. package/dist/es-legacy/components/PayPal/components/VenmoButton.js.map +0 -1
  465. package/dist/es-legacy/components/PayPal/components/VenmoComponent.js +0 -2
  466. package/dist/es-legacy/components/PayPal/components/VenmoComponent.js.map +0 -1
  467. package/dist/es-legacy/components/PayPal/hooks/usePayPalButtonEligibility.js +0 -2
  468. package/dist/es-legacy/components/PayPal/hooks/usePayPalButtonEligibility.js.map +0 -1
  469. package/dist/es-legacy/components/PayPal/hooks/usePayPalOneTimeSession.js +0 -2
  470. package/dist/es-legacy/components/PayPal/hooks/usePayPalOneTimeSession.js.map +0 -1
  471. package/dist/es-legacy/components/PayPal/hooks/usePayPalSaveSession.js +0 -2
  472. package/dist/es-legacy/components/PayPal/hooks/usePayPalSaveSession.js.map +0 -1
  473. package/dist/es-legacy/components/PayPal/hooks/usePayPalSessionOptions.js +0 -2
  474. package/dist/es-legacy/components/PayPal/hooks/usePayPalSessionOptions.js.map +0 -1
  475. package/dist/es-legacy/components/PayPal/hooks/usePayPalStatus.js +0 -2
  476. package/dist/es-legacy/components/PayPal/hooks/usePayPalStatus.js.map +0 -1
  477. package/dist/es-legacy/components/PayPal/hooks/useStartPayPalSession.js +0 -2
  478. package/dist/es-legacy/components/PayPal/hooks/useStartPayPalSession.js.map +0 -1
  479. package/dist/es-legacy/components/PayPal/models/BasePayPalElement.js +0 -2
  480. package/dist/es-legacy/components/PayPal/models/BasePayPalElement.js.map +0 -1
  481. package/dist/es-legacy/components/PayPal/services/PayPalSdkLoader.js +0 -2
  482. package/dist/es-legacy/components/PayPal/services/PayPalSdkLoader.js.map +0 -1
  483. package/dist/es-legacy/components/PayPal/services/PayPalService.js +0 -2
  484. package/dist/es-legacy/components/PayPal/services/PayPalService.js.map +0 -1
  485. package/dist/es-legacy/components/PayPal/services/request-paypal-oauth-token.js +0 -2
  486. package/dist/es-legacy/components/PayPal/services/request-paypal-oauth-token.js.map +0 -1
  487. package/dist/es-legacy/components/PayPal/services/request-paypal-order-details.js +0 -2
  488. package/dist/es-legacy/components/PayPal/services/request-paypal-order-details.js.map +0 -1
  489. package/dist/es-legacy/components/PayPal/utils/is-paypal-service-config-equal.js +0 -2
  490. package/dist/es-legacy/components/PayPal/utils/is-paypal-service-config-equal.js.map +0 -1
  491. package/dist/es-legacy/utils/is-live-environment.js +0 -2
  492. package/dist/es-legacy/utils/is-live-environment.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"PaypalComponent.js","sources":["../../../../../src/components/PayPal/components/PaypalComponent.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { useState, useEffect, useCallback, useRef } from 'preact/hooks';\n\nimport PaypalButtons from './PaypalButtons';\nimport { PayPalSpinner } from './PayPalSpinner';\nimport { getPaypalUrl } from '../utils/get-paypal-url';\nimport Script from '../../../utils/Script';\nimport AdyenCheckoutError from '../../../core/Errors/AdyenCheckoutError';\nimport type { PayPalComponentProps, PayPalUIElementStatus } from './types';\nimport useAnalytics from '../../../core/Analytics/useAnalytics';\nimport { ComponentMethodsRef } from '../../types';\nimport type { PayPalOnApproveActions, PayPalOnApproveData } from '../paypal-js-types';\n\nexport default function PaypalComponent({\n onApprove,\n onCancel,\n onError,\n onSubmit,\n onScriptLoadFailure,\n setComponentRef,\n ...props\n}: Readonly<PayPalComponentProps>) {\n const [status, setStatus] = useState<PayPalUIElementStatus>('pending');\n const { analytics } = useAnalytics();\n\n const paypalComponentRef = useRef<ComponentMethodsRef>({\n setStatus: setStatus\n });\n\n useEffect(() => {\n setComponentRef(paypalComponentRef.current);\n }, [setComponentRef]);\n\n const handleOnApprove = useCallback(\n (data: PayPalOnApproveData, actions: PayPalOnApproveActions) => {\n setStatus('processing');\n // Awaiting this callback delays closing of the PayPal popup or closing the redirect page\n // after the payment has been approved\n void onApprove(data, actions);\n return Promise.resolve();\n },\n [onApprove]\n );\n\n const handlePaypalLoad = () => {\n setStatus('ready');\n };\n\n const handlePaypalLoadFailure = (error: AdyenCheckoutError) => {\n onScriptLoadFailure(error);\n };\n\n useEffect(() => {\n const src = getPaypalUrl(props);\n\n const attributes = { ...(props.cspNonce && { nonce: props.cspNonce }) },\n dataAttributes = { ...(props.cspNonce && { cspNonce: props.cspNonce }) };\n\n const script = new Script({\n src,\n component: 'paypal',\n attributes,\n dataAttributes,\n analytics\n });\n\n script.load().then(handlePaypalLoad).catch(handlePaypalLoadFailure);\n\n return () => {\n script.remove();\n };\n }, []);\n\n if (status === 'pending') {\n return (\n <div className=\"adyen-checkout__paypal\">\n <PayPalSpinner />\n </div>\n );\n }\n\n return (\n <div className=\"adyen-checkout__paypal\" data-testid=\"paypal-component\">\n <PaypalButtons\n {...props}\n onCancel={onCancel}\n onError={onError}\n onSubmit={onSubmit}\n onApprove={handleOnApprove}\n isProcessingPayment={status === 'processing'}\n paypalRef={window.paypal}\n />\n </div>\n );\n}\n"],"names":["PaypalComponent","onApprove","onCancel","onError","onSubmit","onScriptLoadFailure","setComponentRef","props","status","setStatus","useState","analytics","useAnalytics","paypalComponentRef","useRef","useEffect","current","handleOnApprove","useCallback","data","actions","Promise","resolve","handlePaypalLoad","handlePaypalLoadFailure","error","src","getPaypalUrl","attributes","cspNonce","nonce","dataAttributes","script","Script","component","load","then","catch","remove","h","div","className","PayPalSpinner","data-testid","PaypalButtons","isProcessingPayment","paypalRef","window","paypal"],"mappings":"0aAae,SAASA,GAAgBC,UACpCA,EAASC,SACTA,EAAQC,QACRA,EAAOC,SACPA,EAAQC,oBACRA,EAAmBC,gBACnBA,KACGC,IAEH,MAAOC,EAAQC,GAAaC,EAAgC,YACtDC,UAAEA,GAAcC,IAEhBC,EAAqBC,EAA4B,CACnDL,UAAWA,IAGfM,EAAU,KACNT,EAAgBO,EAAmBG,UACpC,CAACV,IAEJ,MAAMW,EAAkBC,EACpB,CAACC,EAA2BC,KACxBX,EAAU,cAGLR,EAAUkB,EAAMC,GACdC,QAAQC,WAEnB,CAACrB,IAGCsB,EAAmB,KACrBd,EAAU,UAGRe,EAA2BC,IAC7BpB,EAAoBoB,IAwBxB,OArBAV,EAAU,KACN,MAAMW,EAAMC,EAAapB,GAEnBqB,EAAa,IAAMrB,EAAMsB,UAAY,CAAEC,MAAOvB,EAAMsB,WACtDE,EAAiB,IAAMxB,EAAMsB,UAAY,CAAEA,SAAUtB,EAAMsB,WAEzDG,EAAS,IAAIC,EAAO,CACtBP,MACAQ,UAAW,SACXN,aACAG,iBACApB,cAKJ,OAFAqB,EAAOG,OAAOC,KAAKb,GAAkBc,MAAMb,GAEpC,KACHQ,EAAOM,WAEZ,IAEY,YAAX9B,EAEI+B,EAACC,MAAAA,CAAIC,UAAU,0BACXF,EAACG,EAAAA,OAMTH,EAACC,MAAAA,CAAIC,UAAU,yBAAyBE,cAAY,oBAChDJ,EAACK,EAAAA,IACOrC,EACJL,SAAUA,EACVC,QAASA,EACTC,SAAUA,EACVH,UAAWgB,EACX4B,oBAAgC,eAAXrC,EACrBsC,UAAWC,OAAOC,SAIlC"}
1
+ {"version":3,"file":"PaypalComponent.js","sources":["../../../../../src/components/PayPal/components/PaypalComponent.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { useState, useEffect, useCallback, useRef } from 'preact/hooks';\n\nimport PaypalButtons from './PaypalButtons';\nimport Spinner from '../../internal/Spinner';\nimport { getPaypalUrl } from '../utils/get-paypal-url';\nimport Script from '../../../utils/Script';\nimport AdyenCheckoutError from '../../../core/Errors/AdyenCheckoutError';\nimport type { PayPalComponentProps } from './types';\nimport useAnalytics from '../../../core/Analytics/useAnalytics';\nimport { ComponentMethodsRef } from '../../types';\nimport type { PayPalOnApproveActions, PayPalOnApproveData } from '../paypal-js-types';\n\nexport default function PaypalComponent({\n onApprove,\n onCancel,\n onError,\n onSubmit,\n onScriptLoadFailure,\n setComponentRef,\n ...props\n}: Readonly<PayPalComponentProps>) {\n const [status, setStatus] = useState('pending');\n const { analytics } = useAnalytics();\n\n const paypalComponentRef = useRef<ComponentMethodsRef>({\n setStatus: setStatus\n });\n\n useEffect(() => {\n setComponentRef(paypalComponentRef.current);\n }, [setComponentRef]);\n\n const handleOnApprove = useCallback(\n (data: PayPalOnApproveData, actions: PayPalOnApproveActions) => {\n setStatus('processing');\n // Awaiting this callback delays closing of the PayPal popup or closing the redirect page\n // after the payment has been approved\n void onApprove(data, actions);\n return Promise.resolve();\n },\n [onApprove]\n );\n\n const handlePaypalLoad = () => {\n setStatus('ready');\n };\n\n const handlePaypalLoadFailure = (error: AdyenCheckoutError) => {\n onScriptLoadFailure(error);\n };\n\n useEffect(() => {\n const src = getPaypalUrl(props);\n\n const attributes = { ...(props.cspNonce && { nonce: props.cspNonce }) },\n dataAttributes = { ...(props.cspNonce && { cspNonce: props.cspNonce }) };\n\n const script = new Script({\n src,\n component: 'paypal',\n attributes,\n dataAttributes,\n analytics\n });\n\n script.load().then(handlePaypalLoad).catch(handlePaypalLoadFailure);\n\n return () => {\n script.remove();\n };\n }, []);\n\n if (status === 'pending') {\n return (\n <div className=\"adyen-checkout__paypal\" aria-live=\"polite\" aria-busy=\"true\">\n <div className=\"adyen-checkout__paypal__status adyen-checkout__paypal__status--pending\" data-testid=\"paypal-loader\">\n <Spinner />\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"adyen-checkout__paypal\" data-testid=\"paypal-component\">\n <PaypalButtons\n {...props}\n onCancel={onCancel}\n onError={onError}\n onSubmit={onSubmit}\n onApprove={handleOnApprove}\n isProcessingPayment={status === 'processing'}\n paypalRef={window.paypal}\n />\n </div>\n );\n}\n"],"names":["PaypalComponent","onApprove","onCancel","onError","onSubmit","onScriptLoadFailure","setComponentRef","props","status","setStatus","useState","analytics","useAnalytics","paypalComponentRef","useRef","useEffect","current","handleOnApprove","useCallback","data","actions","Promise","resolve","handlePaypalLoad","handlePaypalLoadFailure","error","src","getPaypalUrl","attributes","cspNonce","nonce","dataAttributes","script","Script","component","load","then","catch","remove","h","div","className","aria-live","aria-busy","data-testid","Spinner","PaypalButtons","isProcessingPayment","paypalRef","window","paypal"],"mappings":"waAae,SAASA,GAAgBC,UACpCA,EAASC,SACTA,EAAQC,QACRA,EAAOC,SACPA,EAAQC,oBACRA,EAAmBC,gBACnBA,KACGC,IAEH,MAAOC,EAAQC,GAAaC,EAAS,YAC/BC,UAAEA,GAAcC,IAEhBC,EAAqBC,EAA4B,CACnDL,UAAWA,IAGfM,EAAU,KACNT,EAAgBO,EAAmBG,UACpC,CAACV,IAEJ,MAAMW,EAAkBC,EACpB,CAACC,EAA2BC,KACxBX,EAAU,cAGLR,EAAUkB,EAAMC,GACdC,QAAQC,WAEnB,CAACrB,IAGCsB,EAAmB,KACrBd,EAAU,UAGRe,EAA2BC,IAC7BpB,EAAoBoB,IAwBxB,OArBAV,EAAU,KACN,MAAMW,EAAMC,EAAapB,GAEnBqB,EAAa,IAAMrB,EAAMsB,UAAY,CAAEC,MAAOvB,EAAMsB,WACtDE,EAAiB,IAAMxB,EAAMsB,UAAY,CAAEA,SAAUtB,EAAMsB,WAEzDG,EAAS,IAAIC,EAAO,CACtBP,MACAQ,UAAW,SACXN,aACAG,iBACApB,cAKJ,OAFAqB,EAAOG,OAAOC,KAAKb,GAAkBc,MAAMb,GAEpC,KACHQ,EAAOM,WAEZ,IAEY,YAAX9B,EAEI+B,EAACC,MAAAA,CAAIC,UAAU,yBAAyBC,YAAU,SAASC,YAAU,QACjEJ,EAACC,MAAAA,CAAIC,UAAU,yEAAyEG,cAAY,iBAChGL,EAACM,EAAAA,QAObN,EAACC,MAAAA,CAAIC,UAAU,yBAAyBG,cAAY,oBAChDL,EAACO,EAAAA,IACOvC,EACJL,SAAUA,EACVC,QAASA,EACTC,SAAUA,EACVH,UAAWgB,EACX8B,oBAAgC,eAAXvC,EACrBwC,UAAWC,OAAOC,SAIlC"}
@@ -1,2 +1,2 @@
1
- const _="2020-02-01",e="https://www.paypal.com/sdk/js",p="AXy9hIzWB6h_LjZUHjHmsbsiicSIbL4GKOrcgomEedVjduUinIU4C2llxkW5p0OG0zTNgviYFceaXEnj",t="AU0Z-TP9t5_9196agaBN6ZD3UAwypdP1IX8ZYH3PcNNAQMXUTDQlChruXqQEhyI6-NKBKowN6ydkj477",a="https://www.paypal.com/web-sdk/v6/core",o="https://www.sandbox.paypal.com/web-sdk/v6/core",h=["black","white"],n=["en_US","en_AU","en_GB","fr_CA","es_ES","it_IT","fr_FR","de_DE","pt_BR","zh_CN","da_DK","zh_HK","id_ID","he_IL","ja_JP","ko_KR","nl_NL","no_NO","pl_PL","pt_PT","ru_RU","sv_SE","th_TH","zh_TW"],d=["en-US","en-AU","en-GB","fr-CA","es-ES","it-IT","fr-FR","de-DE","pt-BR","zh-CN","da-DK","zh-HK","id-ID","he-IL","ja-JP","ko-KR","nl-NL","no-NO","pl-PL","pt-PT","ru-RU","sv-SE","th-TH","zh-TW"],s={presentationMode:"auto"},w=["auto","popup","modal","payment-handler"];export{t as ADYEN_CLIENTID_V5_LIVE,p as ADYEN_CLIENTID_V5_TEST,s as DEFAULT_PAYMENT_SESSION_OPTIONS,_ as INTEGRATION_DATE,e as PAYPAL_JS_URL_V5,a as PAYPAL_SDK_URL_PRODUCTION,o as PAYPAL_SDK_URL_SANDBOX,h as SUPPORTED_COLORS_FOR_CREDIT,w as SUPPORTED_EXPRESS_PRESENTATION_MODE_OPTIONS,n as SUPPORTED_LOCALES_PAYPAL_V5,d as SUPPORTED_LOCALES_PAYPAL_V6};
1
+ const _="2020-02-01",h="https://www.paypal.com/sdk/js",e="AXy9hIzWB6h_LjZUHjHmsbsiicSIbL4GKOrcgomEedVjduUinIU4C2llxkW5p0OG0zTNgviYFceaXEnj",t="AU0Z-TP9t5_9196agaBN6ZD3UAwypdP1IX8ZYH3PcNNAQMXUTDQlChruXqQEhyI6-NKBKowN6ydkj477",p=["black","white"],N=["en_US","en_AU","en_GB","fr_CA","es_ES","it_IT","fr_FR","de_DE","pt_BR","zh_CN","da_DK","zh_HK","id_ID","he_IL","ja_JP","ko_KR","nl_NL","no_NO","pl_PL","pt_PT","ru_RU","sv_SE","th_TH","zh_TW"];export{t as ADYEN_CLIENTID_LIVE,e as ADYEN_CLIENTID_TEST,_ as INTEGRATION_DATE,h as PAYPAL_JS_URL,p as SUPPORTED_COLORS_FOR_CREDIT,N as SUPPORTED_LOCALES};
2
2
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sources":["../../../../src/components/PayPal/config.ts"],"sourcesContent":["import { PayPalPresentationModeOptions } from './paypal-js-types';\n\nconst INTEGRATION_DATE = '2020-02-01';\nconst PAYPAL_JS_URL_V5 = 'https://www.paypal.com/sdk/js';\nconst ADYEN_CLIENTID_V5_TEST = 'AXy9hIzWB6h_LjZUHjHmsbsiicSIbL4GKOrcgomEedVjduUinIU4C2llxkW5p0OG0zTNgviYFceaXEnj';\nconst ADYEN_CLIENTID_V5_LIVE = 'AU0Z-TP9t5_9196agaBN6ZD3UAwypdP1IX8ZYH3PcNNAQMXUTDQlChruXqQEhyI6-NKBKowN6ydkj477';\n\nconst PAYPAL_SDK_URL_PRODUCTION = 'https://www.paypal.com/web-sdk/v6/core';\nconst PAYPAL_SDK_URL_SANDBOX = 'https://www.sandbox.paypal.com/web-sdk/v6/core';\n\nconst SUPPORTED_COLORS_FOR_CREDIT = ['black', 'white'];\n\nconst SUPPORTED_LOCALES_PAYPAL_V5 = [\n 'en_US',\n 'en_AU',\n 'en_GB',\n 'fr_CA',\n 'es_ES',\n 'it_IT',\n 'fr_FR',\n 'de_DE',\n 'pt_BR',\n 'zh_CN',\n 'da_DK',\n 'zh_HK',\n 'id_ID',\n 'he_IL',\n 'ja_JP',\n 'ko_KR',\n 'nl_NL',\n 'no_NO',\n 'pl_PL',\n 'pt_PT',\n 'ru_RU',\n 'sv_SE',\n 'th_TH',\n 'zh_TW'\n] as const;\n\nconst SUPPORTED_LOCALES_PAYPAL_V6 = [\n 'en-US',\n 'en-AU',\n 'en-GB',\n 'fr-CA',\n 'es-ES',\n 'it-IT',\n 'fr-FR',\n 'de-DE',\n 'pt-BR',\n 'zh-CN',\n 'da-DK',\n 'zh-HK',\n 'id-ID',\n 'he-IL',\n 'ja-JP',\n 'ko-KR',\n 'nl-NL',\n 'no-NO',\n 'pl-PL',\n 'pt-PT',\n 'ru-RU',\n 'sv-SE',\n 'th-TH',\n 'zh-TW'\n] as const;\n\nconst DEFAULT_PAYMENT_SESSION_OPTIONS = {\n presentationMode: 'auto'\n} as const;\n\nconst SUPPORTED_EXPRESS_PRESENTATION_MODE_OPTIONS: Array<PayPalPresentationModeOptions['presentationMode']> = [\n 'auto',\n 'popup',\n 'modal',\n 'payment-handler'\n] as const;\n\nexport {\n INTEGRATION_DATE,\n PAYPAL_JS_URL_V5,\n ADYEN_CLIENTID_V5_TEST,\n ADYEN_CLIENTID_V5_LIVE,\n SUPPORTED_LOCALES_PAYPAL_V5,\n SUPPORTED_LOCALES_PAYPAL_V6,\n SUPPORTED_COLORS_FOR_CREDIT,\n PAYPAL_SDK_URL_PRODUCTION,\n PAYPAL_SDK_URL_SANDBOX,\n DEFAULT_PAYMENT_SESSION_OPTIONS,\n SUPPORTED_EXPRESS_PRESENTATION_MODE_OPTIONS\n};\n"],"names":["INTEGRATION_DATE","PAYPAL_JS_URL_V5","ADYEN_CLIENTID_V5_TEST","ADYEN_CLIENTID_V5_LIVE","PAYPAL_SDK_URL_PRODUCTION","PAYPAL_SDK_URL_SANDBOX","SUPPORTED_COLORS_FOR_CREDIT","SUPPORTED_LOCALES_PAYPAL_V5","SUPPORTED_LOCALES_PAYPAL_V6","DEFAULT_PAYMENT_SESSION_OPTIONS","presentationMode","SUPPORTED_EXPRESS_PRESENTATION_MODE_OPTIONS"],"mappings":"AAEA,MAAMA,EAAmB,aACnBC,EAAmB,gCACnBC,EAAyB,mFACzBC,EAAyB,mFAEzBC,EAA4B,yCAC5BC,EAAyB,iDAEzBC,EAA8B,CAAC,QAAS,SAExCC,EAA8B,CAChC,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAGEC,EAA8B,CAChC,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAGEC,EAAkC,CACpCC,iBAAkB,QAGhBC,EAAwG,CAC1G,OACA,QACA,QACA"}
1
+ {"version":3,"file":"config.js","sources":["../../../../src/components/PayPal/config.ts"],"sourcesContent":["const INTEGRATION_DATE = '2020-02-01';\nconst PAYPAL_JS_URL = 'https://www.paypal.com/sdk/js';\nconst ADYEN_CLIENTID_TEST = 'AXy9hIzWB6h_LjZUHjHmsbsiicSIbL4GKOrcgomEedVjduUinIU4C2llxkW5p0OG0zTNgviYFceaXEnj';\nconst ADYEN_CLIENTID_LIVE = 'AU0Z-TP9t5_9196agaBN6ZD3UAwypdP1IX8ZYH3PcNNAQMXUTDQlChruXqQEhyI6-NKBKowN6ydkj477';\n\nconst SUPPORTED_COLORS_FOR_CREDIT = ['black', 'white'];\n\nconst SUPPORTED_LOCALES = [\n 'en_US',\n 'en_AU',\n 'en_GB',\n 'fr_CA',\n 'es_ES',\n 'it_IT',\n 'fr_FR',\n 'de_DE',\n 'pt_BR',\n 'zh_CN',\n 'da_DK',\n 'zh_HK',\n 'id_ID',\n 'he_IL',\n 'ja_JP',\n 'ko_KR',\n 'nl_NL',\n 'no_NO',\n 'pl_PL',\n 'pt_PT',\n 'ru_RU',\n 'sv_SE',\n 'th_TH',\n 'zh_TW'\n] as const;\n\nexport { INTEGRATION_DATE, PAYPAL_JS_URL, ADYEN_CLIENTID_TEST, ADYEN_CLIENTID_LIVE, SUPPORTED_LOCALES, SUPPORTED_COLORS_FOR_CREDIT };\n"],"names":["INTEGRATION_DATE","PAYPAL_JS_URL","ADYEN_CLIENTID_TEST","ADYEN_CLIENTID_LIVE","SUPPORTED_COLORS_FOR_CREDIT","SUPPORTED_LOCALES"],"mappings":"AAAA,MAAMA,EAAmB,aACnBC,EAAgB,gCAChBC,EAAsB,mFACtBC,EAAsB,mFAEtBC,EAA8B,CAAC,QAAS,SAExCC,EAAoB,CACtB,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA"}
@@ -1,2 +1,2 @@
1
- import{SUPPORTED_LOCALES_PAYPAL_V6 as l,SUPPORTED_LOCALES_PAYPAL_V5 as n}from"../config.js";const e=l=>{const e=l?l.replace("-","_"):null;return n.includes(e)?e:null},r=n=>{const e=n?n.replace("_","-"):null;return l.includes(e)?e:null};export{e as getSupportedLocalePayPalV5,r as getSupportedLocalePayPalV6};
1
+ import{SUPPORTED_LOCALES as n}from"../config.js";const l=l=>{const o=l?l.replace("-","_"):null;return n.includes(o)?o:null};export{l as getSupportedLocale};
2
2
  //# sourceMappingURL=get-paypal-locale.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-paypal-locale.js","sources":["../../../../../src/components/PayPal/utils/get-paypal-locale.ts"],"sourcesContent":["import { SUPPORTED_LOCALES_PAYPAL_V5, SUPPORTED_LOCALES_PAYPAL_V6 } from '../config';\nimport type { PayPalV5SupportedLocale, PayPalV6SupportedLocale } from './types';\n\n/**\n * Returns either a locale supported by PayPal or null, in order to let the PayPal SDK auto-detect the shopper locale.\n */\nexport const getSupportedLocalePayPalV5 = (locale: string): PayPalV5SupportedLocale => {\n const formattedLocale = locale ? locale.replace('-', '_') : null;\n const supportedLocale = SUPPORTED_LOCALES_PAYPAL_V5.includes(formattedLocale as PayPalV5SupportedLocale) ? formattedLocale : null;\n return supportedLocale as PayPalV5SupportedLocale;\n};\n\n/**\n * Returns either a locale supported by PayPal or null, in order to let the PayPal SDK auto-detect the shopper locale.\n */\nexport const getSupportedLocalePayPalV6 = (locale: string): PayPalV6SupportedLocale => {\n const formattedLocale = locale ? locale.replace('_', '-') : null;\n const supportedLocale = SUPPORTED_LOCALES_PAYPAL_V6.includes(formattedLocale as PayPalV6SupportedLocale) ? formattedLocale : null;\n return supportedLocale as PayPalV6SupportedLocale;\n};\n"],"names":["getSupportedLocalePayPalV5","locale","formattedLocale","replace","SUPPORTED_LOCALES_PAYPAL_V5","includes","getSupportedLocalePayPalV6","SUPPORTED_LOCALES_PAYPAL_V6"],"mappings":"4FAMO,MAAMA,EAA8BC,IACvC,MAAMC,EAAkBD,EAASA,EAAOE,QAAQ,IAAK,KAAO,KAE5D,OADwBC,EAA4BC,SAASH,GAA8CA,EAAkB,MAOpHI,EAA8BL,IACvC,MAAMC,EAAkBD,EAASA,EAAOE,QAAQ,IAAK,KAAO,KAE5D,OADwBI,EAA4BF,SAASH,GAA8CA,EAAkB"}
1
+ {"version":3,"file":"get-paypal-locale.js","sources":["../../../../../src/components/PayPal/utils/get-paypal-locale.ts"],"sourcesContent":["import { SUPPORTED_LOCALES } from '../config';\nimport type { PayPalSupportedLocale } from './types';\n\n/**\n * Returns either a locale supported by PayPal or null, in order to let the PayPal SDK auto-detect the shopper locale.\n */\nexport const getSupportedLocale = (locale?: string): PayPalSupportedLocale => {\n const formattedLocale = locale ? locale.replace('-', '_') : null;\n const supportedLocale = SUPPORTED_LOCALES.includes(formattedLocale as PayPalSupportedLocale) ? formattedLocale : null;\n return supportedLocale as PayPalSupportedLocale;\n};\n"],"names":["getSupportedLocale","locale","formattedLocale","replace","SUPPORTED_LOCALES","includes"],"mappings":"iDAMO,MAAMA,EAAsBC,IAC/B,MAAMC,EAAkBD,EAASA,EAAOE,QAAQ,IAAK,KAAO,KAE5D,OADwBC,EAAkBC,SAASH,GAA4CA,EAAkB"}
@@ -1,2 +1,2 @@
1
- import{getSupportedLocalePayPalV5 as e}from"./get-paypal-locale.js";import{ADYEN_CLIENTID_V5_TEST as n,ADYEN_CLIENTID_V5_LIVE as t,INTEGRATION_DATE as o}from"../config.js";const i=({amount:i,countryCode:r,debug:a,environment:c="",locale:l,configuration:u,commit:m,vault:s,enableMessages:g})=>{const d=e(l),y=i?i.currency:null,b="test"===c.toLowerCase(),p=b?n:t,{merchantId:f,intent:v}=u;return{...f&&{"merchant-id":f},...d&&{locale:d},...r&&b&&{"buyer-country":r},...a&&b&&{debug:a},...y&&{currency:y},...v&&{intent:v},commit:m,vault:s,"client-id":p,"integration-date":o,"enable-funding":"paylater,venmo",components:"buttons,funding-eligibility"+(g?",messages":"")}};export{i as getPaypalSettings};
1
+ import{getSupportedLocale as e}from"./get-paypal-locale.js";import{ADYEN_CLIENTID_TEST as n,ADYEN_CLIENTID_LIVE as t,INTEGRATION_DATE as o}from"../config.js";const i=({amount:i,countryCode:r,debug:a,environment:c="",locale:l,configuration:u={},commit:m,vault:s,enableMessages:g})=>{const d=e(l),y=i?i.currency:null,b="test"===c.toLowerCase(),p=b?n:t,{merchantId:f,intent:v}=u;return{...f&&{"merchant-id":f},...d&&{locale:d},...r&&b&&{"buyer-country":r},...a&&b&&{debug:a},...y&&{currency:y},...v&&{intent:v},commit:m,vault:s,"client-id":p,"integration-date":o,"enable-funding":"paylater,venmo",components:"buttons,funding-eligibility"+(g?",messages":"")}};export{i as getPaypalSettings};
2
2
  //# sourceMappingURL=get-paypal-settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-paypal-settings.js","sources":["../../../../../src/components/PayPal/utils/get-paypal-settings.ts"],"sourcesContent":["import { getSupportedLocalePayPalV5 } from './get-paypal-locale';\nimport { ADYEN_CLIENTID_V5_LIVE, ADYEN_CLIENTID_V5_TEST, INTEGRATION_DATE } from '../config';\nimport type { PaypalSettings, PayPalV5SupportedLocale } from './types';\nimport type { PayPalComponentProps } from '../components/types';\n\n/**\n * Returns an object of settings for the PayPal SDK\n */\nexport const getPaypalSettings = ({\n amount,\n countryCode,\n debug,\n environment = '',\n locale,\n configuration,\n commit,\n vault,\n enableMessages\n}: Partial<PayPalComponentProps>): PaypalSettings => {\n const shopperLocale: PayPalV5SupportedLocale = getSupportedLocalePayPalV5(locale);\n const currency: string = amount ? amount.currency : null;\n const isTestEnvironment: boolean = environment.toLowerCase() === 'test';\n const clientId: string = isTestEnvironment ? ADYEN_CLIENTID_V5_TEST : ADYEN_CLIENTID_V5_LIVE;\n const { merchantId, intent } = configuration;\n const components = `buttons,funding-eligibility${enableMessages ? ',messages' : ''}`;\n\n return {\n ...(merchantId && { 'merchant-id': merchantId }),\n ...(shopperLocale && { locale: shopperLocale }),\n ...(countryCode && isTestEnvironment && { 'buyer-country': countryCode }),\n ...(debug && isTestEnvironment && { debug }),\n ...(currency && { currency }),\n ...(intent && { intent }),\n commit,\n vault,\n 'client-id': clientId,\n 'integration-date': INTEGRATION_DATE,\n 'enable-funding': 'paylater,venmo',\n components\n };\n};\n"],"names":["getPaypalSettings","amount","countryCode","debug","environment","locale","configuration","commit","vault","enableMessages","shopperLocale","getSupportedLocalePayPalV5","currency","isTestEnvironment","toLowerCase","clientId","ADYEN_CLIENTID_V5_TEST","ADYEN_CLIENTID_V5_LIVE","merchantId","intent","INTEGRATION_DATE","components"],"mappings":"kLAQaA,EAAoB,EAC7BC,SACAC,cACAC,QACAC,cAAc,GACdC,SACAC,gBACAC,SACAC,QACAC,qBAEA,MAAMC,EAAyCC,EAA2BN,GACpEO,EAAmBX,EAASA,EAAOW,SAAW,KAC9CC,EAA2D,SAA9BT,EAAYU,cACzCC,EAAmBF,EAAoBG,EAAyBC,GAChEC,WAAEA,EAAUC,OAAEA,GAAWb,EAG/B,MAAO,IACCY,GAAc,CAAE,cAAeA,MAC/BR,GAAiB,CAAEL,OAAQK,MAC3BR,GAAeW,GAAqB,CAAE,gBAAiBX,MACvDC,GAASU,GAAqB,CAAEV,YAChCS,GAAY,CAAEA,eACdO,GAAU,CAAEA,UAChBZ,SACAC,QACA,YAAaO,EACb,mBAAoBK,EACpB,iBAAkB,iBAClBC,WAde,+BAA8BZ,EAAiB,YAAc"}
1
+ {"version":3,"file":"get-paypal-settings.js","sources":["../../../../../src/components/PayPal/utils/get-paypal-settings.ts"],"sourcesContent":["import { getSupportedLocale } from './get-paypal-locale';\nimport { ADYEN_CLIENTID_LIVE, ADYEN_CLIENTID_TEST, INTEGRATION_DATE } from '../config';\nimport type { PaypalSettings, PayPalSupportedLocale } from './types';\nimport type { PayPalComponentProps } from '../components/types';\n\n/**\n * Returns an object of settings for the PayPal SDK\n */\nexport const getPaypalSettings = ({\n amount,\n countryCode,\n debug,\n environment = '',\n locale,\n configuration = {},\n commit,\n vault,\n enableMessages\n}: Partial<PayPalComponentProps>): PaypalSettings => {\n const shopperLocale: PayPalSupportedLocale = getSupportedLocale(locale);\n const currency: string | null = amount ? amount.currency : null;\n const isTestEnvironment: boolean = environment.toLowerCase() === 'test';\n const clientId: string = isTestEnvironment ? ADYEN_CLIENTID_TEST : ADYEN_CLIENTID_LIVE;\n const { merchantId, intent } = configuration;\n const components = `buttons,funding-eligibility${enableMessages ? ',messages' : ''}`;\n\n return {\n ...(merchantId && { 'merchant-id': merchantId }),\n ...(shopperLocale && { locale: shopperLocale }),\n ...(countryCode && isTestEnvironment && { 'buyer-country': countryCode }),\n ...(debug && isTestEnvironment && { debug }),\n ...(currency && { currency }),\n ...(intent && { intent }),\n commit,\n vault,\n 'client-id': clientId,\n 'integration-date': INTEGRATION_DATE,\n 'enable-funding': 'paylater,venmo',\n components\n };\n};\n"],"names":["getPaypalSettings","amount","countryCode","debug","environment","locale","configuration","commit","vault","enableMessages","shopperLocale","getSupportedLocale","currency","isTestEnvironment","toLowerCase","clientId","ADYEN_CLIENTID_TEST","ADYEN_CLIENTID_LIVE","merchantId","intent","INTEGRATION_DATE","components"],"mappings":"8JAQO,MAAMA,EAAoB,EAC7BC,SACAC,cACAC,QACAC,cAAc,GACdC,SACAC,gBAAgB,CAAA,EAChBC,SACAC,QACAC,qBAEA,MAAMC,EAAuCC,EAAmBN,GAC1DO,EAA0BX,EAASA,EAAOW,SAAW,KACrDC,EAA2D,SAA9BT,EAAYU,cACzCC,EAAmBF,EAAoBG,EAAsBC,GAC7DC,WAAEA,EAAUC,OAAEA,GAAWb,EAG/B,MAAO,IACCY,GAAc,CAAE,cAAeA,MAC/BR,GAAiB,CAAEL,OAAQK,MAC3BR,GAAeW,GAAqB,CAAE,gBAAiBX,MACvDC,GAASU,GAAqB,CAAEV,YAChCS,GAAY,CAAEA,eACdO,GAAU,CAAEA,UAChBZ,SACAC,QACA,YAAaO,EACb,mBAAoBK,EACpB,iBAAkB,iBAClBC,WAde,+BAA8BZ,EAAiB,YAAc"}
@@ -1,2 +1,2 @@
1
- import{getPaypalSettings as o}from"./get-paypal-settings.js";import{PAYPAL_JS_URL_V5 as t}from"../config.js";const e=e=>{const n=o(e),p=decodeURIComponent(Object.keys(n).map(o=>`${o}=${n[o]}`).join("&"));return`${t}?${p}`};export{e as getPaypalUrl};
1
+ import{getPaypalSettings as o}from"./get-paypal-settings.js";import{PAYPAL_JS_URL as t}from"../config.js";const e=e=>{const n=o(e),p=decodeURIComponent(Object.keys(n).map(o=>`${o}=${n[o]}`).join("&"));return`${t}?${p}`};export{e as getPaypalUrl};
2
2
  //# sourceMappingURL=get-paypal-url.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-paypal-url.js","sources":["../../../../../src/components/PayPal/utils/get-paypal-url.ts"],"sourcesContent":["import { getPaypalSettings } from './get-paypal-settings';\nimport { PAYPAL_JS_URL_V5 } from '../config';\nimport type { PayPalComponentProps } from '../components/types';\n\n/**\n * Returns the PayPal SDK script URL with query parameters\n * @see {@link https://developer.paypal.com/docs/checkout/reference/customize-sdk/}\n */\nexport const getPaypalUrl = (props: Partial<PayPalComponentProps>): string => {\n const settings = getPaypalSettings(props);\n const params = decodeURIComponent(\n Object.keys(settings)\n .map(key => `${key}=${settings[key]}`)\n .join('&')\n );\n return `${PAYPAL_JS_URL_V5}?${params}`;\n};\n"],"names":["getPaypalUrl","props","settings","getPaypalSettings","params","decodeURIComponent","Object","keys","map","key","join","PAYPAL_JS_URL_V5"],"mappings":"6GAQO,MAAMA,EAAgBC,IACzB,MAAMC,EAAWC,EAAkBF,GAC7BG,EAASC,mBACXC,OAAOC,KAAKL,GACPM,IAAIC,GAAO,GAAGA,KAAOP,EAASO,MAC9BC,KAAK,MAEd,MAAO,GAAGC,KAAoBP"}
1
+ {"version":3,"file":"get-paypal-url.js","sources":["../../../../../src/components/PayPal/utils/get-paypal-url.ts"],"sourcesContent":["import { getPaypalSettings } from './get-paypal-settings';\nimport { PAYPAL_JS_URL } from '../config';\nimport type { PayPalComponentProps } from '../components/types';\n\n/**\n * Returns the PayPal SDK script URL with query parameters\n * @see {@link https://developer.paypal.com/docs/checkout/reference/customize-sdk/}\n */\nexport const getPaypalUrl = (props: Partial<PayPalComponentProps>): string => {\n const settings = getPaypalSettings(props);\n const params = decodeURIComponent(\n Object.keys(settings)\n .map(key => `${key}=${settings[key]}`)\n .join('&')\n );\n return `${PAYPAL_JS_URL}?${params}`;\n};\n"],"names":["getPaypalUrl","props","settings","getPaypalSettings","params","decodeURIComponent","Object","keys","map","key","join","PAYPAL_JS_URL"],"mappings":"0GAQO,MAAMA,EAAgBC,IACzB,MAAMC,EAAWC,EAAkBF,GAC7BG,EAASC,mBACXC,OAAOC,KAAKL,GACPM,IAAIC,GAAO,GAAGA,KAAOP,EAASO,MAC9BC,KAAK,MAEd,MAAO,GAAGC,KAAiBP"}
@@ -1,2 +1,2 @@
1
- import{createElement as e}from"../../external/preact/dist/preact.js";import{UIElement as t}from"../internal/UIElement/UIElement.js";import{TxVariants as r}from"../tx-variants.js";import s from"./components/FastlaneComponent.js";function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class o extends t{formatData(){return{paymentMethod:{type:o.type,fastlaneData:btoa(JSON.stringify({fastlaneSessionId:this.props.fastlaneSessionId,tokenId:this.props.tokenId}))}}}beforeRender(){super.beforeRender()}async isAvailable(){const{tokenId:e,lastFour:t,brand:r,email:s}=this.props;return e&&t&&r&&s?Promise.resolve():Promise.reject()}get isValid(){return!0}get icon(){return this.props.icon??this.resources.getImage()("card")}get brands(){const{brands:e}=this.props;return e.map(e=>({icon:this.props.modules.resources.getImage()(e),name:e}))}componentToRender(){return e(s,{lastFour:this.props.lastFour,brand:this.props.brand,payButton:this.payButton,setComponentRef:this.setComponentRef})}}n(o,"type",r.fastlane),n(o,"defaultProps",{keepBrandsVisible:!0});export{o as default};
1
+ import{createElement as e}from"../../external/preact/dist/preact.js";import{UIElement as t}from"../internal/UIElement/UIElement.js";import{TxVariants as r}from"../tx-variants.js";import s from"./components/FastlaneComponent.js";function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class o extends t{formatData(){return{paymentMethod:{type:o.type,fastlaneData:btoa(JSON.stringify({fastlaneSessionId:this.props.fastlaneSessionId,tokenId:this.props.tokenId}))}}}beforeRender(){super.beforeRender()}async isAvailable(){const{tokenId:e,lastFour:t,brand:r,email:s}=this.props;return e&&t&&r&&s?Promise.resolve():Promise.reject()}get isValid(){return!0}get icon(){return this.props.icon??this.resources.getImage()("card")}get brands(){const{brands:e=[]}=this.props;return e.map(e=>({icon:this.resources.getImage()(e),name:e}))}componentToRender(){return e(s,{lastFour:this.props.lastFour,brand:this.props.brand,payButton:this.payButton,setComponentRef:this.setComponentRef})}}n(o,"type",r.fastlane),n(o,"defaultProps",{keepBrandsVisible:!0});export{o as default};
2
2
  //# sourceMappingURL=Fastlane.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Fastlane.js","sources":["../../../../src/components/PayPalFastlane/Fastlane.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement';\nimport { TxVariants } from '../tx-variants';\nimport FastlaneComponent from './components/FastlaneComponent';\nimport type { FastlaneConfiguration } from './types';\nimport { PaymentMethodBrand } from '../../types/global-types';\n\nclass Fastlane extends UIElement<FastlaneConfiguration> {\n public static readonly type = TxVariants.fastlane;\n\n protected static readonly defaultProps = {\n keepBrandsVisible: true\n };\n\n protected override formatData() {\n return {\n paymentMethod: {\n type: Fastlane.type,\n fastlaneData: btoa(\n JSON.stringify({\n fastlaneSessionId: this.props.fastlaneSessionId,\n tokenId: this.props.tokenId\n })\n )\n }\n };\n }\n\n /**\n *\n * Fastlane works differently than other payment methods: Merchant needs to pass to the payment method\n * configuration the values received from PayPal SDK to perform the payment (tokenId, etc). There is no\n * point in tracking these values, so we just omit them all in the analytics by calling the\n * 'beforeRender' without the props\n *\n * @protected\n */\n protected override beforeRender() {\n super.beforeRender();\n }\n\n public override async isAvailable(): Promise<void> {\n const { tokenId, lastFour, brand, email } = this.props;\n if (tokenId && lastFour && brand && email) {\n return Promise.resolve();\n }\n return Promise.reject();\n }\n\n public override get isValid(): boolean {\n return true;\n }\n\n /**\n * Used to display payment method logo within Drop-in\n */\n public override get icon(): string {\n return this.props.icon ?? this.resources.getImage()('card');\n }\n\n /**\n * Used to display the payment method supported brands within Drop-in\n */\n public get brands(): PaymentMethodBrand[] {\n const { brands } = this.props;\n return brands.map(brand => ({ icon: this.props.modules.resources.getImage()(brand), name: brand }));\n }\n\n protected override componentToRender(): h.JSX.Element {\n return (\n <FastlaneComponent\n lastFour={this.props.lastFour}\n brand={this.props.brand}\n payButton={this.payButton}\n setComponentRef={this.setComponentRef}\n />\n );\n }\n}\n\nexport default Fastlane;\n"],"names":["Fastlane","UIElement","formatData","paymentMethod","type","fastlaneData","btoa","JSON","stringify","fastlaneSessionId","this","props","tokenId","beforeRender","super","isAvailable","lastFour","brand","email","Promise","resolve","reject","isValid","icon","resources","getImage","brands","map","modules","name","componentToRender","h","FastlaneComponent","payButton","setComponentRef","_define_property","TxVariants","fastlane","defaultProps","keepBrandsVisible"],"mappings":"4VAOA,MAAMA,UAAiBC,EAOAC,UAAAA,GACf,MAAO,CACHC,cAAe,CACXC,KAAMJ,EAASI,KACfC,aAAcC,KACVC,KAAKC,UAAU,CACXC,kBAAmBC,KAAKC,MAAMF,kBAC9BG,QAASF,KAAKC,MAAMC,YAKxC,CAWA,YAAAC,GACIC,MAAMD,cACV,CAEA,iBAAsBE,GAClB,MAAMH,QAAEA,EAAOI,SAAEA,EAAQC,MAAEA,EAAKC,MAAEA,GAAUR,KAAKC,MACjD,OAAIC,GAAWI,GAAYC,GAASC,EACzBC,QAAQC,UAEZD,QAAQE,QACnB,CAEA,WAAoBC,GAChB,OAAO,CACX,CAKA,QAAoBC,GAChB,OAAOb,KAAKC,MAAMY,MAAQb,KAAKc,UAAUC,UAAff,CAA0B,OACxD,CAKA,UAAWgB,GACP,MAAMA,OAAEA,GAAWhB,KAAKC,MACxB,OAAOe,EAAOC,IAAIV,KAAYM,KAAMb,KAAKC,MAAMiB,QAAQJ,UAAUC,UAA7Bf,CAAwCO,GAAQY,KAAMZ,IAC9F,CAEmBa,iBAAAA,GACf,OACIC,EAACC,EAAAA,CACGhB,SAAUN,KAAKC,MAAMK,SACrBC,MAAOP,KAAKC,MAAMM,MAClBgB,UAAWvB,KAAKuB,UAChBC,gBAAiBxB,KAAKwB,iBAGlC,EArEAC,EADEnC,EACqBI,OAAOgC,EAAWC,UAEzCF,EAHEnC,EAGwBsC,eAAe,CACrCC,mBAAmB"}
1
+ {"version":3,"file":"Fastlane.js","sources":["../../../../src/components/PayPalFastlane/Fastlane.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement';\nimport { TxVariants } from '../tx-variants';\nimport FastlaneComponent from './components/FastlaneComponent';\nimport type { FastlaneConfiguration } from './types';\nimport { PaymentMethodBrand } from '../../types/global-types';\n\nclass Fastlane extends UIElement<FastlaneConfiguration> {\n public static readonly type = TxVariants.fastlane;\n\n protected static readonly defaultProps = {\n keepBrandsVisible: true\n };\n\n protected override formatData() {\n return {\n paymentMethod: {\n type: Fastlane.type,\n fastlaneData: btoa(\n JSON.stringify({\n fastlaneSessionId: this.props.fastlaneSessionId,\n tokenId: this.props.tokenId\n })\n )\n }\n };\n }\n\n /**\n *\n * Fastlane works differently than other payment methods: Merchant needs to pass to the payment method\n * configuration the values received from PayPal SDK to perform the payment (tokenId, etc). There is no\n * point in tracking these values, so we just omit them all in the analytics by calling the\n * 'beforeRender' without the props\n *\n * @protected\n */\n protected override beforeRender() {\n super.beforeRender();\n }\n\n public override async isAvailable(): Promise<void> {\n const { tokenId, lastFour, brand, email } = this.props;\n if (tokenId && lastFour && brand && email) {\n return Promise.resolve();\n }\n return Promise.reject();\n }\n\n public override get isValid(): boolean {\n return true;\n }\n\n /**\n * Used to display payment method logo within Drop-in\n */\n public override get icon(): string {\n return this.props.icon ?? this.resources.getImage()('card');\n }\n\n /**\n * Used to display the payment method supported brands within Drop-in\n */\n public get brands(): PaymentMethodBrand[] {\n const { brands = [] } = this.props;\n return brands.map(brand => ({ icon: this.resources.getImage()(brand), name: brand }));\n }\n\n protected override componentToRender(): h.JSX.Element {\n return (\n <FastlaneComponent\n lastFour={this.props.lastFour}\n brand={this.props.brand}\n payButton={this.payButton}\n setComponentRef={this.setComponentRef}\n />\n );\n }\n}\n\nexport default Fastlane;\n"],"names":["Fastlane","UIElement","formatData","paymentMethod","type","fastlaneData","btoa","JSON","stringify","fastlaneSessionId","this","props","tokenId","beforeRender","super","isAvailable","lastFour","brand","email","Promise","resolve","reject","isValid","icon","resources","getImage","brands","map","name","componentToRender","h","FastlaneComponent","payButton","setComponentRef","_define_property","TxVariants","fastlane","defaultProps","keepBrandsVisible"],"mappings":"4VAOA,MAAMA,UAAiBC,EAOAC,UAAAA,GACf,MAAO,CACHC,cAAe,CACXC,KAAMJ,EAASI,KACfC,aAAcC,KACVC,KAAKC,UAAU,CACXC,kBAAmBC,KAAKC,MAAMF,kBAC9BG,QAASF,KAAKC,MAAMC,YAKxC,CAWA,YAAAC,GACIC,MAAMD,cACV,CAEA,iBAAsBE,GAClB,MAAMH,QAAEA,EAAOI,SAAEA,EAAQC,MAAEA,EAAKC,MAAEA,GAAUR,KAAKC,MACjD,OAAIC,GAAWI,GAAYC,GAASC,EACzBC,QAAQC,UAEZD,QAAQE,QACnB,CAEA,WAAoBC,GAChB,OAAO,CACX,CAKA,QAAoBC,GAChB,OAAOb,KAAKC,MAAMY,MAAQb,KAAKc,UAAUC,UAAff,CAA0B,OACxD,CAKA,UAAWgB,GACP,MAAMA,OAAEA,EAAS,IAAOhB,KAAKC,MAC7B,OAAOe,EAAOC,IAAIV,KAAYM,KAAMb,KAAKc,UAAUC,UAAff,CAA0BO,GAAQW,KAAMX,IAChF,CAEmBY,iBAAAA,GACf,OACIC,EAACC,EAAAA,CACGf,SAAUN,KAAKC,MAAMK,SACrBC,MAAOP,KAAKC,MAAMM,MAClBe,UAAWtB,KAAKsB,UAChBC,gBAAiBvB,KAAKuB,iBAGlC,EArEAC,EADElC,EACqBI,OAAO+B,EAAWC,UAEzCF,EAHElC,EAGwBqC,eAAe,CACrCC,mBAAmB"}
@@ -1,2 +1,2 @@
1
- import{resolveEnvironments as t}from"../../core/Environment/Environment.js";import e from"./services/request-fastlane-token.js";import{convertAdyenLocaleToFastlaneLocale as n}from"./utils/convert-locale.js";import a from"../../utils/Script.js";import i from"../../core/Errors/AdyenCheckoutError.js";import s from"../../core/Analytics/Analytics.js";import{InfoEventType as o,AnalyticsInfoEvent as r}from"../../core/Analytics/events/AnalyticsInfoEvent.js";import{AnalyticsEventQueue as c}from"../../core/Analytics/AnalyticsEventQueue.js";import{AnalyticsService as l}from"../../core/Analytics/AnalyticsService.js";function h(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}class d{async initialize(){this.analytics.setUp({checkoutStage:"precheckout"});const t=await this.requestClientToken();return await this.fetchSdk(t.value,t.clientId),await this.initializeFastlaneInstance(),this.trackEvent(o.Initialized),this}destroy(){document.removeEventListener("visibilitychange",this.handlePageVisibilityChanges),this.analytics.flush()}async authenticate(t){if(!this.fastlaneSdk)throw new i("IMPLEMENTATION_ERROR","authenticate(): Fastlane SDK is not initialized");this.trackEvent(o.LookupStarted);try{const{customerContextId:e}=await this.fastlaneSdk.identity.lookupCustomerByEmail(t);if(e){this.latestShopperDetails={email:t,customerId:e},this.trackEvent(o.OtpStarted);const n=await this.fastlaneSdk.identity.triggerAuthenticationFlow(e);return this.trackEvent(this.getOtpAnalyticsSubtype(n.authenticationState)),n}return this.trackEvent(o.LookupUserNotFound),{authenticationState:"not_found",profileData:void 0}}catch(t){throw new i("ERROR","Fastlane SDK: An error occurred during the authentication flow.",{cause:t})}}async getComponentConfiguration(t){if(!t)throw new i("IMPLEMENTATION_ERROR","FastlaneSDK: you must pass the authentication result to get the component configuration");this.analytics.flush();const e="succeeded"===t.authenticationState,n=!!t.profileData?.card,a=!!this.latestShopperDetails?.email;return e&&n&&a?this.createFastlaneComponentConfiguration(t):this.createCardComponentConfiguration()}async showShippingAddressSelector(){if(!this.fastlaneSdk)throw new i("IMPLEMENTATION_ERROR","showShippingAddressSelector(): Fastlane SDK is not initialized");this.trackEvent(o.AddressSelectorClicked);try{const t=await this.fastlaneSdk.profile.showShippingAddressSelector();return t.selectionChanged&&this.trackEvent(o.AddressChanged),this.trackEvent(o.AddressSelectorClosed),t}catch(t){throw new i("ERROR","Fastlane SDK: An error occurred when showing the shipping address selector",{cause:t})}}async mountWatermark(t,e={includeAdditionalInfo:!0}){if(!this.fastlaneSdk)throw new i("IMPLEMENTATION_ERROR","mountWatermark(): Fastlane SDK is not initialized");try{(await this.fastlaneSdk.FastlaneWatermarkComponent(e)).render(t)}catch(t){throw new i("ERROR","Fastlane SDK: An error occurred when rendering the watermark",{cause:t})}}requestClientToken(){return e(this.checkoutShopperURL,this.clientKey)}async fetchSdk(t,e){const n=new URL("https://www.paypal.com/sdk/js");n.searchParams.set("client-id",e),n.searchParams.set("components","buttons,fastlane");const i=new a({src:n.href,component:"fastlane",dataAttributes:{sdkClientToken:t},analytics:this.analytics});await i.load()}async fetchSessionIdAsync(){try{const{sessionId:t}=await this.fastlaneSdk.identity.getSession();this.fastlaneSessionId=t}catch(t){console.warn("Fastlane SDK: Failed to fetch session ID",t)}}async fetchConsentDetails(){try{const t=await this.fastlaneSdk.ConsentComponent();return await t.getRenderState()}catch(t){throw new i("ERROR","fetchConsentDetails(): failed to fetch consent details",{cause:t})}}async initializeFastlaneInstance(){try{this.fastlaneSdk=await window.paypal.Fastlane({intendedExperience:"externalProcessorCustomConsent",...this.forceConsentDetails&&{metadata:{geoLocOverride:"US"}}}),this.fastlaneSdk.setLocale(this.fastlaneLocale),this.fetchSessionIdAsync()}catch(t){throw new i("ERROR","Fastlane SDK: Failed to initialize fastlane using the window.paypal.Fastlane constructor",{cause:t})}}createFastlaneComponentConfiguration(t){return{paymentType:"fastlane",configuration:{fastlaneSessionId:this.fastlaneSessionId,email:this.latestShopperDetails.email,tokenId:t.profileData.card.id,lastFour:t.profileData.card.paymentSource.card.lastDigits,brand:t.profileData.card.paymentSource.card.brand.toLowerCase()}}}async createCardComponentConfiguration(){const t=await this.fetchConsentDetails(),e={};return t&&(e.fastlaneConfiguration={fastlaneSessionId:this.fastlaneSessionId,...t}),{paymentType:"card",configuration:e}}trackEvent(t){const e=new r({type:t,component:"fastlane"});this.analytics.sendAnalytics(e)}getOtpAnalyticsSubtype(t){switch(t){case"succeeded":return o.OtpSucceeded;case"canceled":return o.OtpCanceled;case"failed":default:return o.OtpFailed;case"not_found":return o.LookupUserNotFound}}constructor(e){if(h(this,"clientKey",void 0),h(this,"checkoutShopperURL",void 0),h(this,"fastlaneLocale",void 0),h(this,"forceConsentDetails",void 0),h(this,"analytics",void 0),h(this,"fastlaneSdk",void 0),h(this,"latestShopperDetails",void 0),h(this,"fastlaneSessionId",void 0),h(this,"handlePageVisibilityChanges",()=>{"hidden"===document.visibilityState&&this.analytics.flush()}),!e?.environment)throw new i("IMPLEMENTATION_ERROR","FastlaneSDK: 'environment' property is required");if(!e?.clientKey)throw new i("IMPLEMENTATION_ERROR","FastlaneSDK: 'clientKey' property is required");e.forceConsentDetails&&e.environment.includes("live")&&console.warn("Fastlane SDK: 'forceConsentDetails' should not be used on 'live' environment");const{apiUrl:a,analyticsUrl:o}=t(e.environment);this.checkoutShopperURL=a,this.clientKey=e.clientKey,this.forceConsentDetails=e.forceConsentDetails||!1,this.fastlaneLocale=n(e.locale||"en-US"),this.analytics=new s({eventQueue:new c,service:new l({analyticsContext:o,clientKey:this.clientKey}),enabled:e.analytics?.enabled}),document.addEventListener("visibilitychange",this.handlePageVisibilityChanges)}}export{d as default};
1
+ import{resolveEnvironments as t}from"../../core/Environment/Environment.js";import e from"./services/request-fastlane-token.js";import{convertAdyenLocaleToFastlaneLocale as n}from"./utils/convert-locale.js";import a from"../../utils/Script.js";import i from"../../core/Errors/AdyenCheckoutError.js";import s from"../../core/Analytics/Analytics.js";import{InfoEventType as o,AnalyticsInfoEvent as r}from"../../core/Analytics/events/AnalyticsInfoEvent.js";import{AnalyticsEventQueue as c}from"../../core/Analytics/AnalyticsEventQueue.js";import{AnalyticsService as l}from"../../core/Analytics/AnalyticsService.js";function h(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}class d{async initialize(){this.analytics.setUp({checkoutStage:"precheckout"});const t=await this.requestClientToken();return await this.fetchSdk(t.value,t.clientId),await this.initializeFastlaneInstance(),this.trackEvent(o.Initialized),this}destroy(){document.removeEventListener("visibilitychange",this.handlePageVisibilityChanges),this.analytics.flush()}async authenticate(t){if(!this.fastlaneSdk)throw new i("IMPLEMENTATION_ERROR","authenticate(): Fastlane SDK is not initialized");this.trackEvent(o.LookupStarted);try{const{customerContextId:e}=await this.fastlaneSdk.identity.lookupCustomerByEmail(t);if(e){this.latestShopperDetails={email:t,customerId:e},this.trackEvent(o.OtpStarted);const n=await this.fastlaneSdk.identity.triggerAuthenticationFlow(e);return this.trackEvent(this.getOtpAnalyticsSubtype(n.authenticationState)),n}return this.trackEvent(o.LookupUserNotFound),{authenticationState:"not_found",profileData:void 0}}catch(t){throw new i("ERROR","Fastlane SDK: An error occurred during the authentication flow.",{cause:t})}}async getComponentConfiguration(t){if(!t)throw new i("IMPLEMENTATION_ERROR","FastlaneSDK: you must pass the authentication result to get the component configuration");this.analytics.flush();const e="succeeded"===t.authenticationState?t.profileData?.card:void 0,n=this.latestShopperDetails?.email;return e&&n?this.createFastlaneComponentConfiguration(e,n):this.createCardComponentConfiguration()}async showShippingAddressSelector(){if(!this.fastlaneSdk)throw new i("IMPLEMENTATION_ERROR","showShippingAddressSelector(): Fastlane SDK is not initialized");this.trackEvent(o.AddressSelectorClicked);try{const t=await this.fastlaneSdk.profile.showShippingAddressSelector();return t.selectionChanged&&this.trackEvent(o.AddressChanged),this.trackEvent(o.AddressSelectorClosed),t}catch(t){throw new i("ERROR","Fastlane SDK: An error occurred when showing the shipping address selector",{cause:t})}}async mountWatermark(t,e={includeAdditionalInfo:!0}){if(!this.fastlaneSdk)throw new i("IMPLEMENTATION_ERROR","mountWatermark(): Fastlane SDK is not initialized");try{(await this.fastlaneSdk.FastlaneWatermarkComponent(e)).render(t)}catch(t){throw new i("ERROR","Fastlane SDK: An error occurred when rendering the watermark",{cause:t})}}requestClientToken(){return e(this.checkoutShopperURL,this.clientKey)}async fetchSdk(t,e){const n=new URL("https://www.paypal.com/sdk/js");n.searchParams.set("client-id",e),n.searchParams.set("components","buttons,fastlane");const i=new a({src:n.href,component:"fastlane",dataAttributes:{sdkClientToken:t},analytics:this.analytics});await i.load()}async fetchSessionIdAsync(){try{if(!this.fastlaneSdk)throw new i("IMPLEMENTATION_ERROR","fetchSessionIdAsync(): Fastlane SDK is not initialized");const{sessionId:t}=await this.fastlaneSdk.identity.getSession();this.fastlaneSessionId=t}catch(t){console.warn("Fastlane SDK: Failed to fetch session ID",t)}}async fetchConsentDetails(){try{if(!this.fastlaneSdk)throw new i("IMPLEMENTATION_ERROR","fetchConsentDetails(): Fastlane SDK is not initialized");const t=await this.fastlaneSdk.ConsentComponent();return await t.getRenderState()}catch(t){throw new i("ERROR","fetchConsentDetails(): failed to fetch consent details",{cause:t})}}async initializeFastlaneInstance(){try{const{paypal:t}=window;if(!t?.Fastlane)throw new i("ERROR","Fastlane SDK: window.paypal.Fastlane is not available");this.fastlaneSdk=await t.Fastlane({intendedExperience:"externalProcessorCustomConsent",...this.forceConsentDetails&&{metadata:{geoLocOverride:"US"}}}),this.fastlaneSdk.setLocale(this.fastlaneLocale),this.fetchSessionIdAsync()}catch(t){throw new i("ERROR","Fastlane SDK: Failed to initialize fastlane using the window.paypal.Fastlane constructor",{cause:t})}}createFastlaneComponentConfiguration(t,e){return{paymentType:"fastlane",configuration:{fastlaneSessionId:this.fastlaneSessionId??"",email:e,tokenId:t.id,lastFour:t.paymentSource.card.lastDigits,brand:t.paymentSource.card.brand.toLowerCase()}}}async createCardComponentConfiguration(){const t=await this.fetchConsentDetails(),e={};return t&&(e.fastlaneConfiguration={fastlaneSessionId:this.fastlaneSessionId,...t}),{paymentType:"card",configuration:e}}trackEvent(t){const e=new r({type:t,component:"fastlane"});this.analytics.sendAnalytics(e)}getOtpAnalyticsSubtype(t){switch(t){case"succeeded":return o.OtpSucceeded;case"canceled":return o.OtpCanceled;case"failed":default:return o.OtpFailed;case"not_found":return o.LookupUserNotFound}}constructor(e){if(h(this,"clientKey",void 0),h(this,"checkoutShopperURL",void 0),h(this,"fastlaneLocale",void 0),h(this,"forceConsentDetails",void 0),h(this,"analytics",void 0),h(this,"fastlaneSdk",void 0),h(this,"latestShopperDetails",void 0),h(this,"fastlaneSessionId",void 0),h(this,"handlePageVisibilityChanges",()=>{"hidden"===document.visibilityState&&this.analytics.flush()}),!e?.environment)throw new i("IMPLEMENTATION_ERROR","FastlaneSDK: 'environment' property is required");if(!e?.clientKey)throw new i("IMPLEMENTATION_ERROR","FastlaneSDK: 'clientKey' property is required");e.forceConsentDetails&&e.environment.includes("live")&&console.warn("Fastlane SDK: 'forceConsentDetails' should not be used on 'live' environment");const{apiUrl:a,analyticsUrl:o}=t(e.environment);this.checkoutShopperURL=a,this.clientKey=e.clientKey,this.forceConsentDetails=e.forceConsentDetails||!1,this.fastlaneLocale=n(e.locale||"en-US"),this.analytics=new s({eventQueue:new c,service:new l({analyticsContext:o,clientKey:this.clientKey}),enabled:e.analytics?.enabled}),document.addEventListener("visibilitychange",this.handlePageVisibilityChanges)}}export{d as default};
2
2
  //# sourceMappingURL=FastlaneSDK.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FastlaneSDK.js","sources":["../../../../src/components/PayPalFastlane/FastlaneSDK.ts"],"sourcesContent":["import { resolveEnvironments } from '../../core/Environment';\nimport type { FastlaneTokenData } from './services/request-fastlane-token';\nimport requestFastlaneToken from './services/request-fastlane-token';\nimport { convertAdyenLocaleToFastlaneLocale } from './utils/convert-locale';\nimport Script from '../../utils/Script';\nimport AdyenCheckoutError from '../../core/Errors/AdyenCheckoutError';\nimport {\n FastlaneAuthenticatedCustomerResult,\n FastlaneConsentRenderState,\n FastlanePaymentMethodConfiguration,\n FastlaneSDKConfiguration,\n FastlaneShippingAddressSelectorResult,\n FastlaneSignupConfiguration,\n FastlaneWindowInstance\n} from './types';\n\nimport Analytics from '../../core/Analytics';\nimport { AnalyticsInfoEvent, InfoEventType } from '../../core/Analytics/events/AnalyticsInfoEvent';\nimport type { IAnalytics } from '../../core/Analytics/Analytics';\nimport { AnalyticsEventQueue } from '../../core/Analytics/AnalyticsEventQueue';\nimport { AnalyticsService } from '../../core/Analytics/AnalyticsService';\n\nclass FastlaneSDK {\n private readonly clientKey: string;\n private readonly checkoutShopperURL: string;\n private readonly fastlaneLocale: string;\n private readonly forceConsentDetails: boolean;\n\n private readonly analytics: IAnalytics;\n\n private fastlaneSdk?: FastlaneWindowInstance;\n private latestShopperDetails?: { email: string; customerId: string };\n private fastlaneSessionId?: string;\n\n constructor(configuration: FastlaneSDKConfiguration) {\n if (!configuration?.environment) throw new AdyenCheckoutError('IMPLEMENTATION_ERROR', \"FastlaneSDK: 'environment' property is required\");\n if (!configuration?.clientKey) throw new AdyenCheckoutError('IMPLEMENTATION_ERROR', \"FastlaneSDK: 'clientKey' property is required\");\n\n if (configuration.forceConsentDetails && configuration.environment.includes('live'))\n console.warn(\"Fastlane SDK: 'forceConsentDetails' should not be used on 'live' environment\");\n\n const { apiUrl, analyticsUrl } = resolveEnvironments(configuration.environment);\n\n this.checkoutShopperURL = apiUrl;\n this.clientKey = configuration.clientKey;\n this.forceConsentDetails = configuration.forceConsentDetails || false;\n this.fastlaneLocale = convertAdyenLocaleToFastlaneLocale(configuration.locale || 'en-US');\n\n this.analytics = new Analytics({\n eventQueue: new AnalyticsEventQueue(),\n service: new AnalyticsService({\n analyticsContext: analyticsUrl,\n clientKey: this.clientKey\n }),\n enabled: configuration.analytics?.enabled\n });\n\n document.addEventListener('visibilitychange', this.handlePageVisibilityChanges);\n }\n\n /**\n * Initializes the Fastlane SDK\n */\n public async initialize(): Promise<FastlaneSDK> {\n void this.analytics.setUp({\n checkoutStage: 'precheckout'\n });\n\n const tokenData = await this.requestClientToken();\n await this.fetchSdk(tokenData.value, tokenData.clientId);\n await this.initializeFastlaneInstance();\n this.trackEvent(InfoEventType.Initialized);\n return this;\n }\n\n public destroy(): void {\n document.removeEventListener('visibilitychange', this.handlePageVisibilityChanges);\n this.analytics.flush();\n }\n\n /**\n * Triggers the authentication for Fastlane using shopper's email.\n * If shopper is recognized, the OTP flow is initialized.\n *\n * @param email\n */\n public async authenticate(email: string): Promise<FastlaneAuthenticatedCustomerResult> {\n if (!this.fastlaneSdk) {\n throw new AdyenCheckoutError('IMPLEMENTATION_ERROR', 'authenticate(): Fastlane SDK is not initialized');\n }\n\n this.trackEvent(InfoEventType.LookupStarted);\n\n try {\n const { customerContextId } = await this.fastlaneSdk.identity.lookupCustomerByEmail(email);\n\n if (customerContextId) {\n this.latestShopperDetails = { email, customerId: customerContextId };\n this.trackEvent(InfoEventType.OtpStarted);\n\n const authResult = await this.fastlaneSdk.identity.triggerAuthenticationFlow(customerContextId);\n this.trackEvent(this.getOtpAnalyticsSubtype(authResult.authenticationState));\n\n return authResult;\n }\n\n this.trackEvent(InfoEventType.LookupUserNotFound);\n return {\n authenticationState: 'not_found',\n profileData: undefined\n };\n } catch (error: unknown) {\n throw new AdyenCheckoutError('ERROR', 'Fastlane SDK: An error occurred during the authentication flow.', { cause: error });\n }\n }\n\n /**\n * Creates the Component configuration based on the Fastlane authentication result.\n *\n * In case the shopper authenticated successfully, it returns config to be used in the Fastlane component\n * Otherwise, it returns the configuration to be used in the Card component\n *\n * @param authResult\n */\n public async getComponentConfiguration(authResult: FastlaneAuthenticatedCustomerResult): Promise<FastlanePaymentMethodConfiguration> {\n if (!authResult) {\n throw new AdyenCheckoutError(\n 'IMPLEMENTATION_ERROR',\n 'FastlaneSDK: you must pass the authentication result to get the component configuration'\n );\n }\n\n this.analytics.flush();\n\n const isAuthSuccess = authResult.authenticationState === 'succeeded';\n const hasCardData = !!authResult.profileData?.card;\n const hasShopperDetails = !!this.latestShopperDetails?.email;\n\n if (isAuthSuccess && hasCardData && hasShopperDetails) {\n return this.createFastlaneComponentConfiguration(authResult);\n }\n\n return this.createCardComponentConfiguration();\n }\n\n /**\n * Displays the Fastlane Shipping Address selector UI\n */\n public async showShippingAddressSelector(): Promise<FastlaneShippingAddressSelectorResult> {\n if (!this.fastlaneSdk) {\n throw new AdyenCheckoutError('IMPLEMENTATION_ERROR', 'showShippingAddressSelector(): Fastlane SDK is not initialized');\n }\n\n this.trackEvent(InfoEventType.AddressSelectorClicked);\n\n try {\n const addressSelectorResult = await this.fastlaneSdk.profile.showShippingAddressSelector();\n if (addressSelectorResult.selectionChanged) {\n this.trackEvent(InfoEventType.AddressChanged);\n }\n this.trackEvent(InfoEventType.AddressSelectorClosed);\n\n return addressSelectorResult;\n } catch (error: unknown) {\n throw new AdyenCheckoutError('ERROR', 'Fastlane SDK: An error occurred when showing the shipping address selector', { cause: error });\n }\n }\n\n /**\n * Render the \"Fastlane by PayPal\" logo in the specified HTML container\n */\n public async mountWatermark(container: HTMLElement | string, options = { includeAdditionalInfo: true }): Promise<void> {\n if (!this.fastlaneSdk) {\n throw new AdyenCheckoutError('IMPLEMENTATION_ERROR', 'mountWatermark(): Fastlane SDK is not initialized');\n }\n\n try {\n const component = await this.fastlaneSdk.FastlaneWatermarkComponent(options);\n component.render(container);\n } catch (error: unknown) {\n throw new AdyenCheckoutError('ERROR', 'Fastlane SDK: An error occurred when rendering the watermark', { cause: error });\n }\n }\n\n private requestClientToken(): Promise<FastlaneTokenData> {\n return requestFastlaneToken(this.checkoutShopperURL, this.clientKey);\n }\n\n private async fetchSdk(clientToken: string, clientId: string): Promise<void> {\n const sdkUrl = new URL('https://www.paypal.com/sdk/js');\n sdkUrl.searchParams.set('client-id', clientId);\n sdkUrl.searchParams.set('components', 'buttons,fastlane');\n\n const script = new Script({\n src: sdkUrl.href,\n component: 'fastlane',\n dataAttributes: { sdkClientToken: clientToken },\n analytics: this.analytics\n });\n\n await script.load();\n }\n\n /**\n * Fetch the fastlane session ID used internally by PayPal for Network Token Usage event\n * This ID is not critical for the payment processing part\n *\n * @private\n */\n private async fetchSessionIdAsync(): Promise<void> {\n try {\n const { sessionId } = await this.fastlaneSdk.identity.getSession();\n this.fastlaneSessionId = sessionId;\n } catch (error) {\n console.warn('Fastlane SDK: Failed to fetch session ID', error);\n }\n }\n\n /**\n * Fetch object containing that details that will be used to display the sign-up UI\n * inside the card component\n * @private\n */\n private async fetchConsentDetails(): Promise<FastlaneConsentRenderState> {\n try {\n const consentComponent = await this.fastlaneSdk.ConsentComponent();\n return await consentComponent.getRenderState();\n } catch (error) {\n throw new AdyenCheckoutError('ERROR', 'fetchConsentDetails(): failed to fetch consent details', { cause: error });\n }\n }\n\n private async initializeFastlaneInstance(): Promise<void> {\n try {\n this.fastlaneSdk = await window.paypal.Fastlane({\n intendedExperience: 'externalProcessorCustomConsent',\n ...(this.forceConsentDetails && {\n metadata: {\n geoLocOverride: 'US'\n }\n })\n });\n this.fastlaneSdk.setLocale(this.fastlaneLocale);\n\n void this.fetchSessionIdAsync();\n } catch (error) {\n throw new AdyenCheckoutError('ERROR', 'Fastlane SDK: Failed to initialize fastlane using the window.paypal.Fastlane constructor', {\n cause: error\n });\n }\n }\n\n /**\n * Creates the configuration for the Fastlane component\n *\n * @param authResult\n * @private\n */\n private createFastlaneComponentConfiguration(authResult: FastlaneAuthenticatedCustomerResult): FastlanePaymentMethodConfiguration {\n return {\n paymentType: 'fastlane',\n configuration: {\n fastlaneSessionId: this.fastlaneSessionId,\n email: this.latestShopperDetails.email,\n tokenId: authResult.profileData.card.id,\n lastFour: authResult.profileData.card.paymentSource.card.lastDigits,\n brand: authResult.profileData.card.paymentSource.card.brand.toLowerCase()\n }\n };\n }\n\n /**\n * Creates the configuration for the Card component, including Fastlane sign-up details if available\n *\n * @private\n */\n private async createCardComponentConfiguration(): Promise<FastlanePaymentMethodConfiguration> {\n const consentDetails = await this.fetchConsentDetails();\n const configuration: { fastlaneConfiguration?: FastlaneSignupConfiguration } = {};\n\n if (consentDetails) {\n configuration.fastlaneConfiguration = {\n fastlaneSessionId: this.fastlaneSessionId,\n ...consentDetails\n };\n }\n\n return {\n paymentType: 'card',\n configuration\n };\n }\n\n private trackEvent(eventType: InfoEventType): void {\n const event = new AnalyticsInfoEvent({ type: eventType, component: 'fastlane' });\n this.analytics.sendAnalytics(event);\n }\n\n private handlePageVisibilityChanges = (): void => {\n if (document.visibilityState === 'hidden') {\n this.analytics.flush();\n }\n };\n\n /**\n * Returns the Info event subtype based on the 'authenticationState'\n * @param authenticationState\n * @private\n */\n private getOtpAnalyticsSubtype(authenticationState: FastlaneAuthenticatedCustomerResult['authenticationState']) {\n switch (authenticationState) {\n case 'succeeded':\n return InfoEventType.OtpSucceeded;\n case 'canceled':\n return InfoEventType.OtpCanceled;\n case 'failed':\n return InfoEventType.OtpFailed;\n case 'not_found':\n return InfoEventType.LookupUserNotFound;\n default:\n return InfoEventType.OtpFailed;\n }\n }\n}\n\nexport default FastlaneSDK;\n"],"names":["FastlaneSDK","initialize","this","analytics","setUp","checkoutStage","tokenData","requestClientToken","fetchSdk","value","clientId","initializeFastlaneInstance","trackEvent","InfoEventType","Initialized","destroy","document","removeEventListener","handlePageVisibilityChanges","flush","authenticate","email","fastlaneSdk","AdyenCheckoutError","LookupStarted","customerContextId","identity","lookupCustomerByEmail","latestShopperDetails","customerId","OtpStarted","authResult","triggerAuthenticationFlow","getOtpAnalyticsSubtype","authenticationState","LookupUserNotFound","profileData","undefined","error","cause","getComponentConfiguration","isAuthSuccess","hasCardData","card","hasShopperDetails","createFastlaneComponentConfiguration","createCardComponentConfiguration","showShippingAddressSelector","AddressSelectorClicked","addressSelectorResult","profile","selectionChanged","AddressChanged","AddressSelectorClosed","mountWatermark","container","options","includeAdditionalInfo","FastlaneWatermarkComponent","render","requestFastlaneToken","checkoutShopperURL","clientKey","clientToken","sdkUrl","URL","searchParams","set","script","Script","src","href","component","dataAttributes","sdkClientToken","load","fetchSessionIdAsync","sessionId","getSession","fastlaneSessionId","console","warn","fetchConsentDetails","consentComponent","ConsentComponent","getRenderState","window","paypal","Fastlane","intendedExperience","forceConsentDetails","metadata","geoLocOverride","setLocale","fastlaneLocale","paymentType","configuration","tokenId","id","lastFour","paymentSource","lastDigits","brand","toLowerCase","consentDetails","fastlaneConfiguration","eventType","event","AnalyticsInfoEvent","type","sendAnalytics","OtpSucceeded","OtpCanceled","OtpFailed","constructor","_define_property","visibilityState","environment","includes","apiUrl","analyticsUrl","resolveEnvironments","convertAdyenLocaleToFastlaneLocale","locale","Analytics","eventQueue","AnalyticsEventQueue","service","AnalyticsService","analyticsContext","enabled","addEventListener"],"mappings":"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"}
1
+ {"version":3,"file":"FastlaneSDK.js","sources":["../../../../src/components/PayPalFastlane/FastlaneSDK.ts"],"sourcesContent":["import { resolveEnvironments } from '../../core/Environment';\nimport type { FastlaneTokenData } from './services/request-fastlane-token';\nimport requestFastlaneToken from './services/request-fastlane-token';\nimport { convertAdyenLocaleToFastlaneLocale } from './utils/convert-locale';\nimport Script from '../../utils/Script';\nimport AdyenCheckoutError from '../../core/Errors/AdyenCheckoutError';\nimport {\n FastlaneAuthenticatedCustomerResult,\n FastlaneConsentRenderState,\n FastlanePaymentMethodConfiguration,\n FastlaneProfile,\n FastlaneSDKConfiguration,\n FastlaneShippingAddressSelectorResult,\n FastlaneSignupConfiguration,\n FastlaneWindowInstance\n} from './types';\n\nimport Analytics from '../../core/Analytics';\nimport { AnalyticsInfoEvent, InfoEventType } from '../../core/Analytics/events/AnalyticsInfoEvent';\nimport type { IAnalytics } from '../../core/Analytics/Analytics';\nimport { AnalyticsEventQueue } from '../../core/Analytics/AnalyticsEventQueue';\nimport { AnalyticsService } from '../../core/Analytics/AnalyticsService';\n\nclass FastlaneSDK {\n private readonly clientKey: string;\n private readonly checkoutShopperURL: string;\n private readonly fastlaneLocale: string;\n private readonly forceConsentDetails: boolean;\n\n private readonly analytics: IAnalytics;\n\n private fastlaneSdk?: FastlaneWindowInstance;\n private latestShopperDetails?: { email: string; customerId: string };\n private fastlaneSessionId?: string;\n\n constructor(configuration: FastlaneSDKConfiguration) {\n if (!configuration?.environment) throw new AdyenCheckoutError('IMPLEMENTATION_ERROR', \"FastlaneSDK: 'environment' property is required\");\n if (!configuration?.clientKey) throw new AdyenCheckoutError('IMPLEMENTATION_ERROR', \"FastlaneSDK: 'clientKey' property is required\");\n\n if (configuration.forceConsentDetails && configuration.environment.includes('live'))\n console.warn(\"Fastlane SDK: 'forceConsentDetails' should not be used on 'live' environment\");\n\n const { apiUrl, analyticsUrl } = resolveEnvironments(configuration.environment);\n\n this.checkoutShopperURL = apiUrl;\n this.clientKey = configuration.clientKey;\n this.forceConsentDetails = configuration.forceConsentDetails || false;\n this.fastlaneLocale = convertAdyenLocaleToFastlaneLocale(configuration.locale || 'en-US');\n\n this.analytics = new Analytics({\n eventQueue: new AnalyticsEventQueue(),\n service: new AnalyticsService({\n analyticsContext: analyticsUrl,\n clientKey: this.clientKey\n }),\n enabled: configuration.analytics?.enabled\n });\n\n document.addEventListener('visibilitychange', this.handlePageVisibilityChanges);\n }\n\n /**\n * Initializes the Fastlane SDK\n */\n public async initialize(): Promise<FastlaneSDK> {\n void this.analytics.setUp({\n checkoutStage: 'precheckout'\n });\n\n const tokenData = await this.requestClientToken();\n await this.fetchSdk(tokenData.value, tokenData.clientId);\n await this.initializeFastlaneInstance();\n this.trackEvent(InfoEventType.Initialized);\n return this;\n }\n\n public destroy(): void {\n document.removeEventListener('visibilitychange', this.handlePageVisibilityChanges);\n this.analytics.flush();\n }\n\n /**\n * Triggers the authentication for Fastlane using shopper's email.\n * If shopper is recognized, the OTP flow is initialized.\n *\n * @param email\n */\n public async authenticate(email: string): Promise<FastlaneAuthenticatedCustomerResult> {\n if (!this.fastlaneSdk) {\n throw new AdyenCheckoutError('IMPLEMENTATION_ERROR', 'authenticate(): Fastlane SDK is not initialized');\n }\n\n this.trackEvent(InfoEventType.LookupStarted);\n\n try {\n const { customerContextId } = await this.fastlaneSdk.identity.lookupCustomerByEmail(email);\n\n if (customerContextId) {\n this.latestShopperDetails = { email, customerId: customerContextId };\n this.trackEvent(InfoEventType.OtpStarted);\n\n const authResult = await this.fastlaneSdk.identity.triggerAuthenticationFlow(customerContextId);\n this.trackEvent(this.getOtpAnalyticsSubtype(authResult.authenticationState));\n\n return authResult;\n }\n\n this.trackEvent(InfoEventType.LookupUserNotFound);\n return {\n authenticationState: 'not_found',\n profileData: undefined\n };\n } catch (error: unknown) {\n throw new AdyenCheckoutError('ERROR', 'Fastlane SDK: An error occurred during the authentication flow.', { cause: error });\n }\n }\n\n /**\n * Creates the Component configuration based on the Fastlane authentication result.\n *\n * In case the shopper authenticated successfully, it returns config to be used in the Fastlane component\n * Otherwise, it returns the configuration to be used in the Card component\n *\n * @param authResult\n */\n public async getComponentConfiguration(authResult: FastlaneAuthenticatedCustomerResult): Promise<FastlanePaymentMethodConfiguration> {\n if (!authResult) {\n throw new AdyenCheckoutError(\n 'IMPLEMENTATION_ERROR',\n 'FastlaneSDK: you must pass the authentication result to get the component configuration'\n );\n }\n\n this.analytics.flush();\n\n const card = authResult.authenticationState === 'succeeded' ? authResult.profileData?.card : undefined;\n const email = this.latestShopperDetails?.email;\n\n if (card && email) {\n return this.createFastlaneComponentConfiguration(card, email);\n }\n\n return this.createCardComponentConfiguration();\n }\n\n /**\n * Displays the Fastlane Shipping Address selector UI\n */\n public async showShippingAddressSelector(): Promise<FastlaneShippingAddressSelectorResult> {\n if (!this.fastlaneSdk) {\n throw new AdyenCheckoutError('IMPLEMENTATION_ERROR', 'showShippingAddressSelector(): Fastlane SDK is not initialized');\n }\n\n this.trackEvent(InfoEventType.AddressSelectorClicked);\n\n try {\n const addressSelectorResult = await this.fastlaneSdk.profile.showShippingAddressSelector();\n if (addressSelectorResult.selectionChanged) {\n this.trackEvent(InfoEventType.AddressChanged);\n }\n this.trackEvent(InfoEventType.AddressSelectorClosed);\n\n return addressSelectorResult;\n } catch (error: unknown) {\n throw new AdyenCheckoutError('ERROR', 'Fastlane SDK: An error occurred when showing the shipping address selector', { cause: error });\n }\n }\n\n /**\n * Render the \"Fastlane by PayPal\" logo in the specified HTML container\n */\n public async mountWatermark(container: HTMLElement | string, options = { includeAdditionalInfo: true }): Promise<void> {\n if (!this.fastlaneSdk) {\n throw new AdyenCheckoutError('IMPLEMENTATION_ERROR', 'mountWatermark(): Fastlane SDK is not initialized');\n }\n\n try {\n const component = await this.fastlaneSdk.FastlaneWatermarkComponent(options);\n component.render(container);\n } catch (error: unknown) {\n throw new AdyenCheckoutError('ERROR', 'Fastlane SDK: An error occurred when rendering the watermark', { cause: error });\n }\n }\n\n private requestClientToken(): Promise<FastlaneTokenData> {\n return requestFastlaneToken(this.checkoutShopperURL, this.clientKey);\n }\n\n private async fetchSdk(clientToken: string, clientId: string): Promise<void> {\n const sdkUrl = new URL('https://www.paypal.com/sdk/js');\n sdkUrl.searchParams.set('client-id', clientId);\n sdkUrl.searchParams.set('components', 'buttons,fastlane');\n\n const script = new Script({\n src: sdkUrl.href,\n component: 'fastlane',\n dataAttributes: { sdkClientToken: clientToken },\n analytics: this.analytics\n });\n\n await script.load();\n }\n\n /**\n * Fetch the fastlane session ID used internally by PayPal for Network Token Usage event\n * This ID is not critical for the payment processing part\n *\n * @private\n */\n private async fetchSessionIdAsync(): Promise<void> {\n try {\n if (!this.fastlaneSdk) throw new AdyenCheckoutError('IMPLEMENTATION_ERROR', 'fetchSessionIdAsync(): Fastlane SDK is not initialized');\n const { sessionId } = await this.fastlaneSdk.identity.getSession();\n this.fastlaneSessionId = sessionId;\n } catch (error) {\n console.warn('Fastlane SDK: Failed to fetch session ID', error);\n }\n }\n\n /**\n * Fetch object containing that details that will be used to display the sign-up UI\n * inside the card component\n * @private\n */\n private async fetchConsentDetails(): Promise<FastlaneConsentRenderState> {\n try {\n if (!this.fastlaneSdk) throw new AdyenCheckoutError('IMPLEMENTATION_ERROR', 'fetchConsentDetails(): Fastlane SDK is not initialized');\n const consentComponent = await this.fastlaneSdk.ConsentComponent();\n return await consentComponent.getRenderState();\n } catch (error) {\n throw new AdyenCheckoutError('ERROR', 'fetchConsentDetails(): failed to fetch consent details', { cause: error });\n }\n }\n\n private async initializeFastlaneInstance(): Promise<void> {\n try {\n const { paypal } = window;\n if (!paypal?.Fastlane) throw new AdyenCheckoutError('ERROR', 'Fastlane SDK: window.paypal.Fastlane is not available');\n\n this.fastlaneSdk = await paypal.Fastlane({\n intendedExperience: 'externalProcessorCustomConsent',\n ...(this.forceConsentDetails && {\n metadata: {\n geoLocOverride: 'US'\n }\n })\n });\n this.fastlaneSdk.setLocale(this.fastlaneLocale);\n\n void this.fetchSessionIdAsync();\n } catch (error) {\n throw new AdyenCheckoutError('ERROR', 'Fastlane SDK: Failed to initialize fastlane using the window.paypal.Fastlane constructor', {\n cause: error\n });\n }\n }\n\n /**\n * Creates the configuration for the Fastlane component\n *\n * @param card - card from the authenticated shopper's Fastlane profile\n * @param email - email of the authenticated shopper\n * @private\n */\n private createFastlaneComponentConfiguration(card: NonNullable<FastlaneProfile['card']>, email: string): FastlanePaymentMethodConfiguration {\n return {\n paymentType: 'fastlane',\n configuration: {\n fastlaneSessionId: this.fastlaneSessionId ?? '',\n email,\n tokenId: card.id,\n lastFour: card.paymentSource.card.lastDigits,\n brand: card.paymentSource.card.brand.toLowerCase()\n }\n };\n }\n\n /**\n * Creates the configuration for the Card component, including Fastlane sign-up details if available\n *\n * @private\n */\n private async createCardComponentConfiguration(): Promise<FastlanePaymentMethodConfiguration> {\n const consentDetails = await this.fetchConsentDetails();\n const configuration: { fastlaneConfiguration?: FastlaneSignupConfiguration } = {};\n\n if (consentDetails) {\n configuration.fastlaneConfiguration = {\n fastlaneSessionId: this.fastlaneSessionId,\n ...consentDetails\n };\n }\n\n return {\n paymentType: 'card',\n configuration\n };\n }\n\n private trackEvent(eventType: InfoEventType): void {\n const event = new AnalyticsInfoEvent({ type: eventType, component: 'fastlane' });\n this.analytics.sendAnalytics(event);\n }\n\n private handlePageVisibilityChanges = (): void => {\n if (document.visibilityState === 'hidden') {\n this.analytics.flush();\n }\n };\n\n /**\n * Returns the Info event subtype based on the 'authenticationState'\n * @param authenticationState\n * @private\n */\n private getOtpAnalyticsSubtype(authenticationState: FastlaneAuthenticatedCustomerResult['authenticationState']) {\n switch (authenticationState) {\n case 'succeeded':\n return InfoEventType.OtpSucceeded;\n case 'canceled':\n return InfoEventType.OtpCanceled;\n case 'failed':\n return InfoEventType.OtpFailed;\n case 'not_found':\n return InfoEventType.LookupUserNotFound;\n default:\n return InfoEventType.OtpFailed;\n }\n }\n}\n\nexport default FastlaneSDK;\n"],"names":["FastlaneSDK","initialize","this","analytics","setUp","checkoutStage","tokenData","requestClientToken","fetchSdk","value","clientId","initializeFastlaneInstance","trackEvent","InfoEventType","Initialized","destroy","document","removeEventListener","handlePageVisibilityChanges","flush","authenticate","email","fastlaneSdk","AdyenCheckoutError","LookupStarted","customerContextId","identity","lookupCustomerByEmail","latestShopperDetails","customerId","OtpStarted","authResult","triggerAuthenticationFlow","getOtpAnalyticsSubtype","authenticationState","LookupUserNotFound","profileData","undefined","error","cause","getComponentConfiguration","card","createFastlaneComponentConfiguration","createCardComponentConfiguration","showShippingAddressSelector","AddressSelectorClicked","addressSelectorResult","profile","selectionChanged","AddressChanged","AddressSelectorClosed","mountWatermark","container","options","includeAdditionalInfo","FastlaneWatermarkComponent","render","requestFastlaneToken","checkoutShopperURL","clientKey","clientToken","sdkUrl","URL","searchParams","set","script","Script","src","href","component","dataAttributes","sdkClientToken","load","fetchSessionIdAsync","sessionId","getSession","fastlaneSessionId","console","warn","fetchConsentDetails","consentComponent","ConsentComponent","getRenderState","paypal","window","Fastlane","intendedExperience","forceConsentDetails","metadata","geoLocOverride","setLocale","fastlaneLocale","paymentType","configuration","tokenId","id","lastFour","paymentSource","lastDigits","brand","toLowerCase","consentDetails","fastlaneConfiguration","eventType","event","AnalyticsInfoEvent","type","sendAnalytics","OtpSucceeded","OtpCanceled","OtpFailed","constructor","_define_property","visibilityState","environment","includes","apiUrl","analyticsUrl","resolveEnvironments","convertAdyenLocaleToFastlaneLocale","locale","Analytics","eventQueue","AnalyticsEventQueue","service","AnalyticsService","analyticsContext","enabled","addEventListener"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{createElement as e}from"../../external/preact/dist/preact.js";import{UIElement as t}from"../internal/UIElement/UIElement.js";import o from"./components/Challenge/PrepareChallenge3DS2.js";import{THREEDS2_CHALLENGE_ERROR as n,THREEDS2_CHALLENGE as r,DEFAULT_CHALLENGE_WINDOW_SIZE as s}from"./constants.js";import{existy as i}from"../../utils/commonUtils.js";import{hasOwnProperty as a}from"../../utils/hasOwnProperty.js";import{TxVariants as p}from"../tx-variants.js";import l,{API_ERROR as m}from"../../core/Errors/AdyenCheckoutError.js";import{AnalyticsLogEvent as c,LogEventSubtype as h,LogEventType as u}from"../../core/Analytics/events/AnalyticsLogEvent.js";import{AnalyticsErrorEvent as d,ErrorEventType as y,ErrorEventCode as f}from"../../core/Analytics/events/AnalyticsErrorEvent.js";function A(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}class D extends t{beforeRender(){}onComplete(e){this.props.isMDFlow?this.props.on3DS2RedirectFlowComplete?.(e,this.elementRef):super.onComplete(e),this.unmount()}componentToRender(){if(!i(this.props.paymentData)){const e=a(this.props,"isMDFlow")?"paymentData":"authorisationToken";this.props.onError(new l(m,`No ${e} received. 3DS2 Challenge cannot proceed`));const t=new d({component:this.type,code:f.THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA,errorType:y.threeDS2,message:`${n}: Missing 'paymentData' property from threeDS2 action`});return this.submitAnalytics(t),null}return e(o,{...this.props,onComplete:this.onComplete,onSubmitAnalytics:this.submitAnalytics,onActionHandled:this.onActionHandled})}constructor(...e){super(...e),A(this,"onActionHandled",e=>{const t=new c({component:this.type,type:u.threeDS2,subType:h.challengeIframeLoaded,message:e.actionDescription});this.submitAnalytics(t),super.onActionHandled(e)})}}A(D,"type",p.threeDS2Challenge),A(D,"defaultProps",{dataKey:"threeDSResult",size:s,type:r});export{D as default};
1
+ import{createElement as e}from"../../external/preact/dist/preact.js";import{UIElement as t}from"../internal/UIElement/UIElement.js";import o from"./components/Challenge/PrepareChallenge3DS2.js";import{THREEDS2_CHALLENGE_ERROR as n,THREEDS2_CHALLENGE as r,DEFAULT_CHALLENGE_WINDOW_SIZE as s}from"./constants.js";import{existy as i}from"../../utils/commonUtils.js";import{hasOwnProperty as p}from"../../utils/hasOwnProperty.js";import{TxVariants as a}from"../tx-variants.js";import l,{API_ERROR as m}from"../../core/Errors/AdyenCheckoutError.js";import{AnalyticsLogEvent as c,LogEventSubtype as h,LogEventType as u}from"../../core/Analytics/events/AnalyticsLogEvent.js";import{AnalyticsErrorEvent as d,ErrorEventType as y,ErrorEventCode as f}from"../../core/Analytics/events/AnalyticsErrorEvent.js";function A(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}class D extends t{beforeRender(){}onComplete(e){this.props.isMDFlow?this.props.on3DS2RedirectFlowComplete?.(e,this.elementRef):super.onComplete(e),this.unmount()}componentToRender(){if(!i(this.props.paymentData)){const e=p(this.props,"isMDFlow")?"paymentData":"authorisationToken";this.props.onError?.(new l(m,`No ${e} received. 3DS2 Challenge cannot proceed`));const t=new d({component:this.type,code:f.THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA,errorType:y.threeDS2,message:`${n}: Missing '${e}' property from threeDS2 action`});return this.submitAnalytics(t),null}return e(o,{...this.props,i18n:this.core.modules.i18n,onComplete:this.onComplete,onSubmitAnalytics:this.submitAnalytics,onActionHandled:this.onActionHandled})}constructor(...e){super(...e),A(this,"onActionHandled",e=>{const t=new c({component:this.type,type:u.threeDS2,subType:h.challengeIframeLoaded,message:e.actionDescription});this.submitAnalytics(t),super.onActionHandled(e)})}}A(D,"type",a.threeDS2Challenge),A(D,"defaultProps",{dataKey:"threeDSResult",size:s,type:r});export{D as default};
2
2
  //# sourceMappingURL=ThreeDS2Challenge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreeDS2Challenge.js","sources":["../../../../src/components/ThreeDS2/ThreeDS2Challenge.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport PrepareChallenge from './components/Challenge';\nimport { DEFAULT_CHALLENGE_WINDOW_SIZE, THREEDS2_CHALLENGE, THREEDS2_CHALLENGE_ERROR } from './constants';\nimport { existy } from '../../utils/commonUtils';\nimport { hasOwnProperty } from '../../utils/hasOwnProperty';\nimport { TxVariants } from '../tx-variants';\nimport { ChallengeResolveData, ThreeDS2ChallengeConfiguration } from './types';\nimport AdyenCheckoutError, { API_ERROR } from '../../core/Errors/AdyenCheckoutError';\nimport { ActionHandledReturnObject } from '../../types/global-types';\nimport { AnalyticsLogEvent, LogEventSubtype, LogEventType } from '../../core/Analytics/events/AnalyticsLogEvent';\nimport { AnalyticsErrorEvent, ErrorEventCode, ErrorEventType } from '../../core/Analytics/events/AnalyticsErrorEvent';\n\nclass ThreeDS2Challenge extends UIElement<ThreeDS2ChallengeConfiguration> {\n public static readonly type = TxVariants.threeDS2Challenge;\n\n public static readonly defaultProps = {\n dataKey: 'threeDSResult',\n size: DEFAULT_CHALLENGE_WINDOW_SIZE,\n type: THREEDS2_CHALLENGE\n };\n\n protected override beforeRender() {\n /* Do not send rendered events for ThreeDS2Challenge - it will have the same timestamp as the \"creq sent\" event */\n }\n\n protected onActionHandled = (rtnObj: ActionHandledReturnObject) => {\n const event = new AnalyticsLogEvent({\n component: this.type,\n type: LogEventType.threeDS2,\n subType: LogEventSubtype.challengeIframeLoaded,\n message: rtnObj.actionDescription\n });\n\n this.submitAnalytics(event);\n\n super.onActionHandled(rtnObj);\n };\n\n /**\n * Will make a call to onAdditionalDetails (as set in actionTypes.ts) for the regular, \"native\" flow.\n * However, if the action to create this component came from the 3DS2InMDFlow process it will instead equal a call to the onComplete callback\n * (as defined in the 3DS2InMDFlow and passed in as a config prop).\n */\n onComplete(state: ChallengeResolveData) {\n if (this.props.isMDFlow) {\n this.props.on3DS2RedirectFlowComplete?.(state, this.elementRef);\n } else {\n super.onComplete(state);\n }\n\n this.unmount(); // re. fixing issue around back to back challenge calls\n }\n\n protected override componentToRender(): h.JSX.Element {\n // existy used because threeds2InMDFlow might send an empty string for paymentData and we should be allowed to proceed with this\n if (!existy(this.props.paymentData)) {\n /**\n * The presence of props.isMDFlow indicates the action to create this component came from the threeds2InMDFlow process which passes (an empty) paymentsData.\n * The regular, \"native\" flow uses the authorisationToken from the 3DS2 action, which actionTypes.ts assigns to a property called paymentData\n */\n const dataTypeForError = hasOwnProperty(this.props, 'isMDFlow') ? 'paymentData' : 'authorisationToken';\n\n this.props.onError(new AdyenCheckoutError(API_ERROR, `No ${dataTypeForError} received. 3DS2 Challenge cannot proceed`));\n\n const event = new AnalyticsErrorEvent({\n component: this.type,\n code: ErrorEventCode.THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_CHALLENGE_ERROR}: Missing 'paymentData' property from threeDS2 action`\n });\n\n this.submitAnalytics(event);\n\n return null;\n }\n\n return (\n <PrepareChallenge\n {...this.props}\n onComplete={this.onComplete}\n onSubmitAnalytics={this.submitAnalytics}\n onActionHandled={this.onActionHandled}\n />\n );\n }\n}\n\nexport default ThreeDS2Challenge;\n"],"names":["ThreeDS2Challenge","UIElement","beforeRender","onComplete","state","this","props","isMDFlow","on3DS2RedirectFlowComplete","elementRef","super","unmount","componentToRender","existy","paymentData","dataTypeForError","hasOwnProperty","onError","AdyenCheckoutError","API_ERROR","event","AnalyticsErrorEvent","component","type","code","ErrorEventCode","THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA","errorType","ErrorEventType","threeDS2","message","THREEDS2_CHALLENGE_ERROR","submitAnalytics","h","PrepareChallenge","onSubmitAnalytics","onActionHandled","args","_define_property","rtnObj","AnalyticsLogEvent","LogEventType","subType","LogEventSubtype","challengeIframeLoaded","actionDescription","TxVariants","threeDS2Challenge","defaultProps","dataKey","size","DEFAULT_CHALLENGE_WINDOW_SIZE","THREEDS2_CHALLENGE"],"mappings":"q5BAaA,MAAMA,UAA0BC,EASTC,YAAAA,GAEnB,CAoBAC,UAAAA,CAAWC,GACHC,KAAKC,MAAMC,SACXF,KAAKC,MAAME,6BAA6BJ,EAAOC,KAAKI,YAEpDC,MAAMP,WAAWC,GAGrBC,KAAKM,SACT,CAEmBC,iBAAAA,GAEf,IAAKC,EAAOR,KAAKC,MAAMQ,aAAc,CAKjC,MAAMC,EAAmBC,EAAeX,KAAKC,MAAO,YAAc,cAAgB,qBAElFD,KAAKC,MAAMW,QAAQ,IAAIC,EAAmBC,EAAW,MAAMJ,8CAE3D,MAAMK,EAAQ,IAAIC,EAAoB,CAClCC,UAAWjB,KAAKkB,KAChBC,KAAMC,EAAeC,wCACrBC,UAAWC,EAAeC,SAC1BC,QAAS,GAAGC,2DAKhB,OAFA1B,KAAK2B,gBAAgBZ,GAEd,IACX,CAEA,OACIa,EAACC,EAAAA,IACO7B,KAAKC,MACTH,WAAYE,KAAKF,WACjBgC,kBAAmB9B,KAAK2B,gBACxBI,gBAAiB/B,KAAK+B,iBAGlC,mBAxEJ1B,SAAA2B,GAaIC,EAAAjC,KAAU+B,kBAAmBG,IACzB,MAAMnB,EAAQ,IAAIoB,EAAkB,CAChClB,UAAWjB,KAAKkB,KAChBA,KAAMkB,EAAaZ,SACnBa,QAASC,EAAgBC,sBACzBd,QAASS,EAAOM,oBAGpBxC,KAAK2B,gBAAgBZ,GAErBV,MAAM0B,gBAAgBG,MAtB1BD,EADEtC,EACqBuB,OAAOuB,EAAWC,mBAEzCT,EAHEtC,EAGqBgD,eAAe,CAClCC,QAAS,gBACTC,KAAMC,EACN5B,KAAM6B"}
1
+ {"version":3,"file":"ThreeDS2Challenge.js","sources":["../../../../src/components/ThreeDS2/ThreeDS2Challenge.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport PrepareChallenge from './components/Challenge';\nimport { DEFAULT_CHALLENGE_WINDOW_SIZE, THREEDS2_CHALLENGE, THREEDS2_CHALLENGE_ERROR } from './constants';\nimport { existy } from '../../utils/commonUtils';\nimport { hasOwnProperty } from '../../utils/hasOwnProperty';\nimport { TxVariants } from '../tx-variants';\nimport { ChallengeResolveData, ThreeDS2ChallengeConfiguration } from './types';\nimport AdyenCheckoutError, { API_ERROR } from '../../core/Errors/AdyenCheckoutError';\nimport { ActionHandledReturnObject } from '../../types/global-types';\nimport { AnalyticsLogEvent, LogEventSubtype, LogEventType } from '../../core/Analytics/events/AnalyticsLogEvent';\nimport { AnalyticsErrorEvent, ErrorEventCode, ErrorEventType } from '../../core/Analytics/events/AnalyticsErrorEvent';\n\nclass ThreeDS2Challenge extends UIElement<ThreeDS2ChallengeConfiguration> {\n public static readonly type = TxVariants.threeDS2Challenge;\n\n public static readonly defaultProps = {\n dataKey: 'threeDSResult',\n size: DEFAULT_CHALLENGE_WINDOW_SIZE,\n type: THREEDS2_CHALLENGE\n };\n\n protected override beforeRender() {\n /* Do not send rendered events for ThreeDS2Challenge - it will have the same timestamp as the \"creq sent\" event */\n }\n\n protected onActionHandled = (rtnObj: ActionHandledReturnObject) => {\n const event = new AnalyticsLogEvent({\n component: this.type,\n type: LogEventType.threeDS2,\n subType: LogEventSubtype.challengeIframeLoaded,\n message: rtnObj.actionDescription\n });\n\n this.submitAnalytics(event);\n\n super.onActionHandled(rtnObj);\n };\n\n /**\n * Will make a call to onAdditionalDetails (as set in actionTypes.ts) for the regular, \"native\" flow.\n * However, if the action to create this component came from the 3DS2InMDFlow process it will instead equal a call to the onComplete callback\n * (as defined in the 3DS2InMDFlow and passed in as a config prop).\n */\n onComplete(state: ChallengeResolveData) {\n if (this.props.isMDFlow) {\n this.props.on3DS2RedirectFlowComplete?.(state, this.elementRef);\n } else {\n super.onComplete(state);\n }\n\n this.unmount(); // re. fixing issue around back to back challenge calls\n }\n\n protected override componentToRender(): h.JSX.Element | null {\n // existy used because threeds2InMDFlow might send an empty string for paymentData and we should be allowed to proceed with this\n if (!existy(this.props.paymentData)) {\n /**\n * The presence of props.isMDFlow indicates the action to create this component came from the threeds2InMDFlow process which passes (an empty) paymentsData.\n * The regular, \"native\" flow uses the authorisationToken from the 3DS2 action, which actionTypes.ts assigns to a property called paymentData\n */\n const dataTypeForError = hasOwnProperty(this.props, 'isMDFlow') ? 'paymentData' : 'authorisationToken';\n\n this.props.onError?.(new AdyenCheckoutError(API_ERROR, `No ${dataTypeForError} received. 3DS2 Challenge cannot proceed`));\n\n const event = new AnalyticsErrorEvent({\n component: this.type,\n code: ErrorEventCode.THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_CHALLENGE_ERROR}: Missing '${dataTypeForError}' property from threeDS2 action`\n });\n\n this.submitAnalytics(event);\n\n return null;\n }\n\n return (\n <PrepareChallenge\n {...this.props}\n i18n={this.core.modules.i18n}\n onComplete={this.onComplete}\n onSubmitAnalytics={this.submitAnalytics}\n onActionHandled={this.onActionHandled}\n />\n );\n }\n}\n\nexport default ThreeDS2Challenge;\n"],"names":["ThreeDS2Challenge","UIElement","beforeRender","onComplete","state","this","props","isMDFlow","on3DS2RedirectFlowComplete","elementRef","super","unmount","componentToRender","existy","paymentData","dataTypeForError","hasOwnProperty","onError","AdyenCheckoutError","API_ERROR","event","AnalyticsErrorEvent","component","type","code","ErrorEventCode","THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA","errorType","ErrorEventType","threeDS2","message","THREEDS2_CHALLENGE_ERROR","submitAnalytics","h","PrepareChallenge","i18n","core","modules","onSubmitAnalytics","onActionHandled","args","_define_property","rtnObj","AnalyticsLogEvent","LogEventType","subType","LogEventSubtype","challengeIframeLoaded","actionDescription","TxVariants","threeDS2Challenge","defaultProps","dataKey","size","DEFAULT_CHALLENGE_WINDOW_SIZE","THREEDS2_CHALLENGE"],"mappings":"q5BAaA,MAAMA,UAA0BC,EASTC,YAAAA,GAEnB,CAoBAC,UAAAA,CAAWC,GACHC,KAAKC,MAAMC,SACXF,KAAKC,MAAME,6BAA6BJ,EAAOC,KAAKI,YAEpDC,MAAMP,WAAWC,GAGrBC,KAAKM,SACT,CAEmBC,iBAAAA,GAEf,IAAKC,EAAOR,KAAKC,MAAMQ,aAAc,CAKjC,MAAMC,EAAmBC,EAAeX,KAAKC,MAAO,YAAc,cAAgB,qBAElFD,KAAKC,MAAMW,UAAU,IAAIC,EAAmBC,EAAW,MAAMJ,8CAE7D,MAAMK,EAAQ,IAAIC,EAAoB,CAClCC,UAAWjB,KAAKkB,KAChBC,KAAMC,EAAeC,wCACrBC,UAAWC,EAAeC,SAC1BC,QAAS,GAAGC,eAAsChB,qCAKtD,OAFAV,KAAK2B,gBAAgBZ,GAEd,IACX,CAEA,OACIa,EAACC,EAAAA,IACO7B,KAAKC,MACT6B,KAAM9B,KAAK+B,KAAKC,QAAQF,KACxBhC,WAAYE,KAAKF,WACjBmC,kBAAmBjC,KAAK2B,gBACxBO,gBAAiBlC,KAAKkC,iBAGlC,mBAzEJ7B,SAAA8B,GAaIC,EAAApC,KAAUkC,kBAAmBG,IACzB,MAAMtB,EAAQ,IAAIuB,EAAkB,CAChCrB,UAAWjB,KAAKkB,KAChBA,KAAMqB,EAAaf,SACnBgB,QAASC,EAAgBC,sBACzBjB,QAASY,EAAOM,oBAGpB3C,KAAK2B,gBAAgBZ,GAErBV,MAAM6B,gBAAgBG,MAtB1BD,EADEzC,EACqBuB,OAAO0B,EAAWC,mBAEzCT,EAHEzC,EAGqBmD,eAAe,CAClCC,QAAS,gBACTC,KAAMC,EACN/B,KAAMgC"}
@@ -1,2 +1,2 @@
1
- import{createElement as e}from"../../external/preact/dist/preact.js";import{UIElement as t}from"../internal/UIElement/UIElement.js";import r from"./components/DeviceFingerprint/PrepareFingerprint3DS2.js";import n from"./callSubmit3DS2Fingerprint.js";import{existy as o}from"../../utils/commonUtils.js";import{TxVariants as i}from"../tx-variants.js";import s,{API_ERROR as p}from"../../core/Errors/AdyenCheckoutError.js";import{THREEDS2_FINGERPRINT_ERROR as a,THREEDS2_FINGERPRINT as m}from"./constants.js";import{AnalyticsLogEvent as c,LogEventSubtype as l,LogEventType as u}from"../../core/Analytics/events/AnalyticsLogEvent.js";import{AnalyticsErrorEvent as d,ErrorEventType as h,ErrorEventCode as f}from"../../core/Analytics/events/AnalyticsErrorEvent.js";function y(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class D extends t{beforeRender(){}onComplete(e){this.props.isMDFlow?this.props.on3DS2RedirectFlowComplete?.(e,this.elementRef):super.onComplete(e),this.unmount()}componentToRender(){if(!o(this.props.paymentData)){this.props.onError(new s(p,"No paymentData received. 3DS2 Fingerprint cannot proceed"));const e=new d({component:this.type,code:f.THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA,errorType:h.threeDS2,message:`${a}: Missing 'paymentData' property from threeDS2 action`});return this.submitAnalytics(e),null}return e(r,{...this.props,onComplete:this.props.isMDFlow?this.onComplete:this.callSubmit3DS2Fingerprint,onSubmitAnalytics:this.submitAnalytics,onActionHandled:this.onActionHandled})}constructor(...e){super(...e),y(this,"callSubmit3DS2Fingerprint",n.bind(this)),y(this,"onActionHandled",e=>{const t=new c({component:this.type,type:u.threeDS2,subType:l.fingerprintIframeLoaded,message:e.actionDescription});this.submitAnalytics(t),super.onActionHandled(e)})}}y(D,"type",i.threeDS2Fingerprint),y(D,"defaultProps",{dataKey:"fingerprintResult",type:m});export{D as default};
1
+ import{createElement as e}from"../../external/preact/dist/preact.js";import{UIElement as t}from"../internal/UIElement/UIElement.js";import r from"./components/DeviceFingerprint/PrepareFingerprint3DS2.js";import n from"./callSubmit3DS2Fingerprint.js";import{existy as o}from"../../utils/commonUtils.js";import{TxVariants as i}from"../tx-variants.js";import s,{API_ERROR as p}from"../../core/Errors/AdyenCheckoutError.js";import{THREEDS2_FINGERPRINT_ERROR as a,THREEDS2_FINGERPRINT as m}from"./constants.js";import{AnalyticsLogEvent as c,LogEventSubtype as l,LogEventType as u}from"../../core/Analytics/events/AnalyticsLogEvent.js";import{AnalyticsErrorEvent as d,ErrorEventType as h,ErrorEventCode as f}from"../../core/Analytics/events/AnalyticsErrorEvent.js";function y(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class D extends t{beforeRender(){}onComplete(e){this.props.isMDFlow?this.props.on3DS2RedirectFlowComplete?.(e,this.elementRef):super.onComplete(e),this.unmount()}componentToRender(){if(!o(this.props.paymentData)){this.props.onError?.(new s(p,"No paymentData received. 3DS2 Fingerprint cannot proceed"));const e=new d({component:this.type,code:f.THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA,errorType:h.threeDS2,message:`${a}: Missing 'paymentData' property from threeDS2 action`});return this.submitAnalytics(e),null}return e(r,{...this.props,onComplete:this.props.isMDFlow?this.onComplete:this.callSubmit3DS2Fingerprint,onSubmitAnalytics:this.submitAnalytics,onActionHandled:this.onActionHandled})}constructor(...e){super(...e),y(this,"callSubmit3DS2Fingerprint",n.bind(this)),y(this,"onActionHandled",e=>{const t=new c({component:this.type,type:u.threeDS2,subType:l.fingerprintIframeLoaded,message:e.actionDescription});this.submitAnalytics(t),super.onActionHandled(e)})}}y(D,"type",i.threeDS2Fingerprint),y(D,"defaultProps",{dataKey:"fingerprintResult",type:m});export{D as default};
2
2
  //# sourceMappingURL=ThreeDS2DeviceFingerprint.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreeDS2DeviceFingerprint.js","sources":["../../../../src/components/ThreeDS2/ThreeDS2DeviceFingerprint.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport PrepareFingerprint from './components/DeviceFingerprint';\nimport callSubmit3DS2Fingerprint from './callSubmit3DS2Fingerprint';\nimport { existy } from '../../utils/commonUtils';\nimport { TxVariants } from '../tx-variants';\nimport { FingerprintResolveData, ThreeDS2DeviceFingerprintConfiguration } from './types';\nimport AdyenCheckoutError, { API_ERROR } from '../../core/Errors/AdyenCheckoutError';\nimport { THREEDS2_FINGERPRINT, THREEDS2_FINGERPRINT_ERROR } from './constants';\nimport { ActionHandledReturnObject } from '../../types/global-types';\nimport { AnalyticsLogEvent, LogEventSubtype, LogEventType } from '../../core/Analytics/events/AnalyticsLogEvent';\nimport { AnalyticsErrorEvent, ErrorEventCode, ErrorEventType } from '../../core/Analytics/events/AnalyticsErrorEvent';\nimport { AdditionalDetailsData } from '../../types';\n\nclass ThreeDS2DeviceFingerprint extends UIElement<ThreeDS2DeviceFingerprintConfiguration> {\n public static readonly type = TxVariants.threeDS2Fingerprint;\n\n public static readonly defaultProps = {\n dataKey: 'fingerprintResult',\n type: THREEDS2_FINGERPRINT\n };\n\n private readonly callSubmit3DS2Fingerprint = callSubmit3DS2Fingerprint.bind(this); // New 3DS2 flow\n\n protected override beforeRender() {\n /* Do not send rendered events for ThreeDS2DeviceFingerprint - it will have the same timestamp as the \"threeDSMethodData sent\" event */\n }\n\n protected onActionHandled = (rtnObj: ActionHandledReturnObject) => {\n const event = new AnalyticsLogEvent({\n component: this.type,\n type: LogEventType.threeDS2,\n subType: LogEventSubtype.fingerprintIframeLoaded,\n message: rtnObj.actionDescription\n });\n\n this.submitAnalytics(event);\n\n super.onActionHandled(rtnObj);\n };\n\n /**\n * Can be called directly from PrepareFingerprint (MDFlow) or after the call to /submitThreeDS2Fingerprint endpoint (native flow)\n */\n onComplete(state: FingerprintResolveData) {\n if (this.props.isMDFlow) {\n this.props.on3DS2RedirectFlowComplete?.(state, this.elementRef);\n } else {\n super.onComplete(state as AdditionalDetailsData);\n }\n\n this.unmount(); // re. fixing issue around back to back fingerprinting calls\n }\n\n protected override componentToRender(): h.JSX.Element {\n /**\n * In the regular components (aka \"native\") flow we can't proceed because something has gone wrong with the payment if paymentData is missing from the threeDS2 action.\n * In the MDFlow the paymentData is always present (albeit an empty string, which is why we use 'existy' since we should be allowed to proceed with this)\n */\n if (!existy(this.props.paymentData)) {\n this.props.onError(new AdyenCheckoutError(API_ERROR, `No paymentData received. 3DS2 Fingerprint cannot proceed`));\n\n // TODO - check logs to see if this *ever* happens\n const event = new AnalyticsErrorEvent({\n component: this.type,\n code: ErrorEventCode.THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_FINGERPRINT_ERROR}: Missing 'paymentData' property from threeDS2 action`\n });\n\n this.submitAnalytics(event);\n\n return null;\n }\n\n /**\n * this.props.isMDFlow indicates the action to create this component came from the 3DS2InMDFlow process and upon completion should call the\n * passed onComplete callback (as defined in the 3DS2InMDFlow) instead of the /submitThreeDS2Fingerprint endpoint for the regular, \"native\" flow\n */\n return (\n <PrepareFingerprint\n {...this.props}\n // For MDFlow will bypass the /submitThreeDS2Fingerprint endpoint\n onComplete={this.props.isMDFlow ? this.onComplete : this.callSubmit3DS2Fingerprint}\n onSubmitAnalytics={this.submitAnalytics}\n onActionHandled={this.onActionHandled}\n />\n );\n }\n}\n\nexport default ThreeDS2DeviceFingerprint;\n"],"names":["ThreeDS2DeviceFingerprint","UIElement","beforeRender","onComplete","state","this","props","isMDFlow","on3DS2RedirectFlowComplete","elementRef","super","unmount","componentToRender","existy","paymentData","onError","AdyenCheckoutError","API_ERROR","event","AnalyticsErrorEvent","component","type","code","ErrorEventCode","THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA","errorType","ErrorEventType","threeDS2","message","THREEDS2_FINGERPRINT_ERROR","submitAnalytics","h","PrepareFingerprint","callSubmit3DS2Fingerprint","onSubmitAnalytics","onActionHandled","args","_define_property","bind","rtnObj","AnalyticsLogEvent","LogEventType","subType","LogEventSubtype","fingerprintIframeLoaded","actionDescription","TxVariants","threeDS2Fingerprint","defaultProps","dataKey","THREEDS2_FINGERPRINT"],"mappings":"+2BAcA,MAAMA,UAAkCC,EAUjBC,YAAAA,GAEnB,CAkBAC,UAAAA,CAAWC,GACHC,KAAKC,MAAMC,SACXF,KAAKC,MAAME,6BAA6BJ,EAAOC,KAAKI,YAEpDC,MAAMP,WAAWC,GAGrBC,KAAKM,SACT,CAEmBC,iBAAAA,GAKf,IAAKC,EAAOR,KAAKC,MAAMQ,aAAc,CACjCT,KAAKC,MAAMS,QAAQ,IAAIC,EAAmBC,EAAW,6DAGrD,MAAMC,EAAQ,IAAIC,EAAoB,CAClCC,UAAWf,KAAKgB,KAChBC,KAAMC,EAAeC,wCACrBC,UAAWC,EAAeC,SAC1BC,QAAS,GAAGC,2DAKhB,OAFAxB,KAAKyB,gBAAgBZ,GAEd,IACX,CAMA,OACIa,EAACC,EAAAA,IACO3B,KAAKC,MAETH,WAAYE,KAAKC,MAAMC,SAAWF,KAAKF,WAAaE,KAAK4B,0BACzDC,kBAAmB7B,KAAKyB,gBACxBK,gBAAiB9B,KAAK8B,iBAGlC,mBA1EJzB,SAAA0B,GAQIC,OAAiBJ,4BAA4BA,EAA0BK,KAAKjC,OAM5EgC,EAAAhC,KAAU8B,kBAAmBI,IACzB,MAAMrB,EAAQ,IAAIsB,EAAkB,CAChCpB,UAAWf,KAAKgB,KAChBA,KAAMoB,EAAad,SACnBe,QAASC,EAAgBC,wBACzBhB,QAASW,EAAOM,oBAGpBxC,KAAKyB,gBAAgBZ,GAErBR,MAAMyB,gBAAgBI,MAvB1BF,EADErC,EACqBqB,OAAOyB,EAAWC,qBAEzCV,EAHErC,EAGqBgD,eAAe,CAClCC,QAAS,oBACT5B,KAAM6B"}
1
+ {"version":3,"file":"ThreeDS2DeviceFingerprint.js","sources":["../../../../src/components/ThreeDS2/ThreeDS2DeviceFingerprint.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport PrepareFingerprint from './components/DeviceFingerprint';\nimport callSubmit3DS2Fingerprint from './callSubmit3DS2Fingerprint';\nimport { existy } from '../../utils/commonUtils';\nimport { TxVariants } from '../tx-variants';\nimport { FingerprintResolveData, ThreeDS2DeviceFingerprintConfiguration } from './types';\nimport AdyenCheckoutError, { API_ERROR } from '../../core/Errors/AdyenCheckoutError';\nimport { THREEDS2_FINGERPRINT, THREEDS2_FINGERPRINT_ERROR } from './constants';\nimport { ActionHandledReturnObject } from '../../types/global-types';\nimport { AnalyticsLogEvent, LogEventSubtype, LogEventType } from '../../core/Analytics/events/AnalyticsLogEvent';\nimport { AnalyticsErrorEvent, ErrorEventCode, ErrorEventType } from '../../core/Analytics/events/AnalyticsErrorEvent';\nimport { AdditionalDetailsData } from '../../types';\n\nclass ThreeDS2DeviceFingerprint extends UIElement<ThreeDS2DeviceFingerprintConfiguration> {\n public static readonly type = TxVariants.threeDS2Fingerprint;\n\n public static readonly defaultProps = {\n dataKey: 'fingerprintResult',\n type: THREEDS2_FINGERPRINT\n };\n\n private readonly callSubmit3DS2Fingerprint = callSubmit3DS2Fingerprint.bind(this); // New 3DS2 flow\n\n protected override beforeRender() {\n /* Do not send rendered events for ThreeDS2DeviceFingerprint - it will have the same timestamp as the \"threeDSMethodData sent\" event */\n }\n\n protected onActionHandled = (rtnObj: ActionHandledReturnObject) => {\n const event = new AnalyticsLogEvent({\n component: this.type,\n type: LogEventType.threeDS2,\n subType: LogEventSubtype.fingerprintIframeLoaded,\n message: rtnObj.actionDescription\n });\n\n this.submitAnalytics(event);\n\n super.onActionHandled(rtnObj);\n };\n\n /**\n * Can be called directly from PrepareFingerprint (MDFlow) or after the call to /submitThreeDS2Fingerprint endpoint (native flow)\n */\n onComplete(state: FingerprintResolveData) {\n if (this.props.isMDFlow) {\n this.props.on3DS2RedirectFlowComplete?.(state, this.elementRef);\n } else {\n super.onComplete(state as AdditionalDetailsData);\n }\n\n this.unmount(); // re. fixing issue around back to back fingerprinting calls\n }\n\n protected override componentToRender(): h.JSX.Element | null {\n /**\n * In the regular components (aka \"native\") flow we can't proceed because something has gone wrong with the payment if paymentData is missing from the threeDS2 action.\n * In the MDFlow the paymentData is always present (albeit an empty string, which is why we use 'existy' since we should be allowed to proceed with this)\n */\n if (!existy(this.props.paymentData)) {\n this.props.onError?.(new AdyenCheckoutError(API_ERROR, `No paymentData received. 3DS2 Fingerprint cannot proceed`));\n\n // TODO - check logs to see if this *ever* happens\n const event = new AnalyticsErrorEvent({\n component: this.type,\n code: ErrorEventCode.THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_FINGERPRINT_ERROR}: Missing 'paymentData' property from threeDS2 action`\n });\n\n this.submitAnalytics(event);\n\n return null;\n }\n\n /**\n * this.props.isMDFlow indicates the action to create this component came from the 3DS2InMDFlow process and upon completion should call the\n * passed onComplete callback (as defined in the 3DS2InMDFlow) instead of the /submitThreeDS2Fingerprint endpoint for the regular, \"native\" flow\n */\n return (\n <PrepareFingerprint\n {...this.props}\n // For MDFlow will bypass the /submitThreeDS2Fingerprint endpoint\n onComplete={this.props.isMDFlow ? this.onComplete : this.callSubmit3DS2Fingerprint}\n onSubmitAnalytics={this.submitAnalytics}\n onActionHandled={this.onActionHandled}\n />\n );\n }\n}\n\nexport default ThreeDS2DeviceFingerprint;\n"],"names":["ThreeDS2DeviceFingerprint","UIElement","beforeRender","onComplete","state","this","props","isMDFlow","on3DS2RedirectFlowComplete","elementRef","super","unmount","componentToRender","existy","paymentData","onError","AdyenCheckoutError","API_ERROR","event","AnalyticsErrorEvent","component","type","code","ErrorEventCode","THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA","errorType","ErrorEventType","threeDS2","message","THREEDS2_FINGERPRINT_ERROR","submitAnalytics","h","PrepareFingerprint","callSubmit3DS2Fingerprint","onSubmitAnalytics","onActionHandled","args","_define_property","bind","rtnObj","AnalyticsLogEvent","LogEventType","subType","LogEventSubtype","fingerprintIframeLoaded","actionDescription","TxVariants","threeDS2Fingerprint","defaultProps","dataKey","THREEDS2_FINGERPRINT"],"mappings":"+2BAcA,MAAMA,UAAkCC,EAUjBC,YAAAA,GAEnB,CAkBAC,UAAAA,CAAWC,GACHC,KAAKC,MAAMC,SACXF,KAAKC,MAAME,6BAA6BJ,EAAOC,KAAKI,YAEpDC,MAAMP,WAAWC,GAGrBC,KAAKM,SACT,CAEmBC,iBAAAA,GAKf,IAAKC,EAAOR,KAAKC,MAAMQ,aAAc,CACjCT,KAAKC,MAAMS,UAAU,IAAIC,EAAmBC,EAAW,6DAGvD,MAAMC,EAAQ,IAAIC,EAAoB,CAClCC,UAAWf,KAAKgB,KAChBC,KAAMC,EAAeC,wCACrBC,UAAWC,EAAeC,SAC1BC,QAAS,GAAGC,2DAKhB,OAFAxB,KAAKyB,gBAAgBZ,GAEd,IACX,CAMA,OACIa,EAACC,EAAAA,IACO3B,KAAKC,MAETH,WAAYE,KAAKC,MAAMC,SAAWF,KAAKF,WAAaE,KAAK4B,0BACzDC,kBAAmB7B,KAAKyB,gBACxBK,gBAAiB9B,KAAK8B,iBAGlC,mBA1EJzB,SAAA0B,GAQIC,OAAiBJ,4BAA4BA,EAA0BK,KAAKjC,OAM5EgC,EAAAhC,KAAU8B,kBAAmBI,IACzB,MAAMrB,EAAQ,IAAIsB,EAAkB,CAChCpB,UAAWf,KAAKgB,KAChBA,KAAMoB,EAAad,SACnBe,QAASC,EAAgBC,wBACzBhB,QAASW,EAAOM,oBAGpBxC,KAAKyB,gBAAgBZ,GAErBR,MAAMyB,gBAAgBI,MAvB1BF,EADErC,EACqBqB,OAAOyB,EAAWC,qBAEzCV,EAHErC,EAGqBgD,eAAe,CAClCC,QAAS,oBACT5B,KAAM6B"}
@@ -1,2 +1,2 @@
1
- import{Component as e,createElement as r}from"../../../../external/preact/dist/preact.js";import t from"./DoChallenge3DS2.js";import{isErrorObject as s,createChallengeResolveData as o,prepareChallengeData as n}from"../utils.js";import a from"../../../internal/Img/Img.js";import{hasOwnProperty as i}from"../../../../utils/hasOwnProperty.js";import l from"../../../../core/Context/useImage.js";import p,{ERROR as c}from"../../../../core/Errors/AdyenCheckoutError.js";import{THREEDS2_CHALLENGE_ERROR as h,MISSING_TOKEN_IN_ACTION_MSG as u,THREEDS2_NUM as m,THREEDS2_CHALLENGE as S}from"../../constants.js";import{isValidHttpUrl as g}from"../../../../utils/isValidURL.js";import{AnalyticsLogEvent as d,LogEventSubtype as D,LogEventType as E}from"../../../../core/Analytics/events/AnalyticsLogEvent.js";import{ErrorEventCode as _,AnalyticsErrorEvent as I,ErrorEventType as T}from"../../../../core/Analytics/events/AnalyticsErrorEvent.js";function f(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}class C extends e{componentDidMount(){if(!s(this.state.challengeData)){const e="test"===this.props.environment&&this.props._environmentUrls?.api?.includes("http://localhost:8080"),{acsURL:r,postMessageDomain:t}=this.state.challengeData,s=g(r,e),o=g(t,e);if(!s||!o){const e=s?_.THREEDS2_CHALLENGE_TOKEN_IS_MISSING_THREEDSNOTIFICATIONURL:_.THREEDS2_TOKEN_IS_MISSING_ACSURL,r=s?"threeDSNotificationURL":"acsURL";this.setError({errorInfo:`${e}: ${this.props.i18n.get("err.gen.9102")}`},!0);const n=new I({component:this.props.type,code:e,errorType:T.threeDS2,message:`${h}: Decoded token is missing a valid ${r} property`});return this.props.onSubmitAnalytics(n),void console.debug(`### PrepareChallenge3DS2::exiting:: no valid ${r}.${o?"":` postMessageDomain=${t}`}`)}const{acsTransID:n,messageVersion:a,threeDSServerTransID:i}=this.state.challengeData.cReqData;if(!n||!a||!i){this.setError({errorInfo:`${_.THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS}: ${this.props.i18n.get("err.gen.9102")}`},!0);const e=new I({component:this.props.type,code:_.THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS,errorType:T.threeDS2,message:`${h}: Decoded token is missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)`});return this.props.onSubmitAnalytics(e),void console.debug("### PrepareChallenge3DS2::exiting:: missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)")}this.setState({status:"performingChallenge"})}else{const e=this.state.challengeData.error,r=e.includes(u)?_.THREEDS2_ACTION_IS_MISSING_TOKEN:_.THREEDS2_TOKEN_DECODE_OR_PARSING_FAILED;this.setError({errorInfo:`${r}: ${this.props.i18n.get("err.gen.9102")}`},!0);const t=new I({component:this.props.type,code:r,errorType:T.threeDS2,message:`${h}: ${e}`});this.props.onSubmitAnalytics(t),console.debug("### PrepareChallenge3DS2::exiting:: no challengeData")}}setStatusComplete(e,r=null){this.setState({status:"complete"},()=>{const t=o(this.props.dataKey,e.transStatus,this.props.paymentData);let s;r&&console.debug("### PrepareChallenge3DS2::errorCodeObject::",r);const n=r||e;if(n.errorCode){const e={code:"timeout"===n.errorCode?_.THREEDS2_TIMEOUT:_.THREEDS2_NO_TRANSSTATUS,errorType:T.threeDS2};s=new I({component:this.props.type,message:n.message,...e}),this.props.onSubmitAnalytics(s)}let a;switch(e?.transStatus){case"Y":a="success";break;case"N":a="failed";break;case"U":a=r?"timeout":"cancelled"}e?.errorCode&&(a="noTransStatus"),s=new d({component:this.props.type,type:E.threeDS2,subType:D.challengeCompleted,message:`${m} challenge has completed`,result:a}),this.props.onSubmitAnalytics(s),this.props.onComplete(t)})}setError(e,r){this.setState({status:"error",errorInfo:e.errorInfo}),r&&this.props.onError(new p(c,e.errorInfo,{cause:e.errorObj}))}render(e,{challengeData:s}){const o=s,n=l();return"performingChallenge"===this.state.status?r(t,{onCompleteChallenge:e=>{let r=null;if(i(e.result,"errorCode")&&e.result.errorCode.length&&(r={errorCode:e.result.errorCode,message:`${h}: ${e.result.errorDescription?e.result.errorDescription:"no transStatus could be retrieved"}`},this.props.isMDFlow&&this.props.onError(new p(c,`${h}: ${e.result.errorDescription?e.result.errorDescription:"no transStatus could be retrieved"}`,{cause:e.result.errorCode}))),!e.result){this.setError({errorInfo:`${h}: ${this.props.i18n.get("3ds.chal.805",{values:{result:'"result"'}})}`,errorObj:e},!0);const r=new I({component:this.props.type,code:_.THREEDS2_CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP,errorType:T.threeDS2,message:`${h}: challenge resolved without a "result" object`});return this.props.onSubmitAnalytics(r),void console.debug('### PrepareChallenge3DS2::exiting:: challenge resolved without a "result" object')}this.setStatusComplete(e.result,r)},onErrorChallenge:e=>{if(i(e,"errorCode")){const r={errorCode:e.errorCode,message:`${S}: ${e.errorCode}`};return this.props.isMDFlow&&this.props.onError(new p(c,`${h}: '3DS2 challenge timed out'`,{cause:e.errorCode})),void this.setStatusComplete(e.result,r)}},...o,onActionHandled:this.props.onActionHandled,onFormSubmit:this.onFormSubmit,usePasskeyIFrameAttributes:this.props.usePasskeyIFrameAttributes}):"error"===this.state.status?r("div",{className:"adyen-checkout__threeds2-challenge-error"},r(a,{className:"adyen-checkout__status__icon adyen-checkout__status__icon--error",src:n({imageFolder:"components/"})("error"),alt:""}),r("div",{className:"adyen-checkout__status__text"},this.state.errorInfo?this.state.errorInfo:this.props.i18n.get("error.message.unknown"))):null}constructor(e){if(super(e),f(this,"onFormSubmit",e=>{const r=new d({component:this.props.type,type:E.threeDS2,subType:D.challengeDataSentWeb,message:e});this.props.onSubmitAnalytics(r)}),this.props.token){const e=n({token:this.props.token,size:this.props.challengeWindowSize||this.props.size});this.state={status:"init",challengeData:e}}else this.state={challengeData:{success:!1,error:u}},console.debug(`${h}: ${u}`)}}f(C,"defaultProps",{onComplete:()=>{},onError:()=>{},isMDFlow:!1});export{C as default};
1
+ import{Component as e,createElement as r}from"../../../../external/preact/dist/preact.js";import t from"./DoChallenge3DS2.js";import{isChallengeData as s,createChallengeResolveData as o,prepareChallengeData as n}from"../utils.js";import i from"../../../internal/Img/Img.js";import a from"../../../../core/Context/useImage.js";import l,{ERROR as c}from"../../../../core/Errors/AdyenCheckoutError.js";import{THREEDS2_CHALLENGE as p,THREEDS2_CHALLENGE_ERROR as h,MISSING_TOKEN_IN_ACTION_MSG as m,THREEDS2_NUM as u,DEFAULT_CHALLENGE_WINDOW_SIZE as S}from"../../constants.js";import{isValidHttpUrl as d}from"../../../../utils/isValidURL.js";import{AnalyticsLogEvent as g,LogEventSubtype as D,LogEventType as E}from"../../../../core/Analytics/events/AnalyticsLogEvent.js";import{ErrorEventCode as _,AnalyticsErrorEvent as I,ErrorEventType as T}from"../../../../core/Analytics/events/AnalyticsErrorEvent.js";function f(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}class C extends e{get component(){return this.props.type??p}componentDidMount(){const{challengeData:e}=this.state;if(s(e)){const r="test"===this.props.environment&&this.props._environmentUrls?.api?.includes("http://localhost:8080"),{acsURL:t,postMessageDomain:s}=e,o=d(t,r),n=d(s,r);if(!o||!n){const e=o?_.THREEDS2_CHALLENGE_TOKEN_IS_MISSING_THREEDSNOTIFICATIONURL:_.THREEDS2_TOKEN_IS_MISSING_ACSURL,r=o?"threeDSNotificationURL":"acsURL";this.setError({errorInfo:`${e}: ${this.props.i18n.get("err.gen.9102")}`},!0);const t=new I({component:this.component,code:e,errorType:T.threeDS2,message:`${h}: Decoded token is missing a valid ${r} property`});return this.props.onSubmitAnalytics(t),void console.debug(`### PrepareChallenge3DS2::exiting:: no valid ${r}.${n?"":` postMessageDomain=${s}`}`)}const{acsTransID:i,messageVersion:a,threeDSServerTransID:l}=e.cReqData;if(!i||!a||!l){this.setError({errorInfo:`${_.THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS}: ${this.props.i18n.get("err.gen.9102")}`},!0);const e=new I({component:this.component,code:_.THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS,errorType:T.threeDS2,message:`${h}: Decoded token is missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)`});return this.props.onSubmitAnalytics(e),void console.debug("### PrepareChallenge3DS2::exiting:: missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)")}this.setState({status:"performingChallenge"})}else{const r=e.error,t=r.includes(m)?_.THREEDS2_ACTION_IS_MISSING_TOKEN:_.THREEDS2_TOKEN_DECODE_OR_PARSING_FAILED;this.setError({errorInfo:`${t}: ${this.props.i18n.get("err.gen.9102")}`},!0);const s=new I({component:this.component,code:t,errorType:T.threeDS2,message:`${h}: ${r}`});this.props.onSubmitAnalytics(s),console.debug("### PrepareChallenge3DS2::exiting:: no challengeData")}}setStatusComplete(e,r){this.setState({status:"complete"},()=>{const t=o(this.props.dataKey??"threeDSResult",e?.transStatus??"",this.props.paymentData??"");let s;r&&console.debug("### PrepareChallenge3DS2::errorCodeObject::",r);const n=r||e;if(n?.errorCode){const e={code:"timeout"===n.errorCode?_.THREEDS2_TIMEOUT:_.THREEDS2_NO_TRANSSTATUS,errorType:T.threeDS2};s=new I({component:this.component,message:n.message,...e}),this.props.onSubmitAnalytics(s)}let i="unknown";switch(e?.transStatus){case"Y":i="success";break;case"N":i="failed";break;case"U":i=r?"timeout":"cancelled"}e?.errorCode&&(i="noTransStatus"),s=new g({component:this.component,type:E.threeDS2,subType:D.challengeCompleted,message:`${u} challenge has completed`,result:i}),this.props.onSubmitAnalytics(s),this.props.onComplete?.(t)})}setError(e,r){this.setState({status:"error",errorInfo:e.errorInfo}),r&&this.props.onError?.(new l(c,e.errorInfo,{cause:e.errorObj}))}render(e,{challengeData:o}){const n=a();return"performingChallenge"===this.state.status&&s(o)?r(t,{onCompleteChallenge:e=>{let r;if(!e.result){this.setError({errorInfo:`${h}: ${this.props.i18n.get("3ds.chal.805",{values:{result:'"result"'}})}`,errorObj:e},!0);const r=new I({component:this.component,code:_.THREEDS2_CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP,errorType:T.threeDS2,message:`${h}: challenge resolved without a "result" object`});return this.props.onSubmitAnalytics(r),void console.debug('### PrepareChallenge3DS2::exiting:: challenge resolved without a "result" object')}e.result.errorCode&&(r={errorCode:e.result.errorCode,message:`${h}: ${e.result.errorDescription?e.result.errorDescription:"no transStatus could be retrieved"}`},this.props.isMDFlow&&this.props.onError?.(new l(c,`${h}: ${e.result.errorDescription?e.result.errorDescription:"no transStatus could be retrieved"}`,{cause:e.result.errorCode}))),this.setStatusComplete(e.result,r)},onErrorChallenge:e=>{if(e.errorCode){const r={errorCode:e.errorCode,message:`${p}: ${e.errorCode}`};return this.props.isMDFlow&&this.props.onError?.(new l(c,`${h}: '3DS2 challenge timed out'`,{cause:e.errorCode})),void this.setStatusComplete(e.result,r)}},...o,onActionHandled:this.props.onActionHandled,onFormSubmit:this.onFormSubmit,usePasskeyIFrameAttributes:this.props.usePasskeyIFrameAttributes}):"error"===this.state.status?r("div",{className:"adyen-checkout__threeds2-challenge-error"},r(i,{className:"adyen-checkout__status__icon adyen-checkout__status__icon--error",src:n({imageFolder:"components/"})("error"),alt:""}),r("div",{className:"adyen-checkout__status__text"},this.state.errorInfo?this.state.errorInfo:this.props.i18n.get("error.message.unknown"))):null}constructor(e){if(super(e),f(this,"onFormSubmit",e=>{const r=new g({component:this.component,type:E.threeDS2,subType:D.challengeDataSentWeb,message:e});this.props.onSubmitAnalytics(r)}),this.props.token){const e=n({token:this.props.token,size:this.props.challengeWindowSize||this.props.size||S});this.state={status:"init",challengeData:e}}else this.state={challengeData:{success:!1,error:m}},console.debug(`${h}: ${m}`)}}f(C,"defaultProps",{onComplete:()=>{},onError:()=>{},isMDFlow:!1});export{C as default};
2
2
  //# sourceMappingURL=PrepareChallenge3DS2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PrepareChallenge3DS2.js","sources":["../../../../../../src/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.tsx"],"sourcesContent":["import { Component, h } from 'preact';\nimport DoChallenge3DS2 from './DoChallenge3DS2';\nimport { createChallengeResolveData, prepareChallengeData, isErrorObject } from '../utils';\nimport { PrepareChallenge3DS2Props, PrepareChallenge3DS2State, StatusErrorInfoObject } from './types';\nimport { ChallengeData, ResultObject, ThreeDS2FlowObject, ErrorCodeObject, ChallengeResolveData } from '../../types';\nimport '../../ThreeDS2.scss';\nimport Img from '../../../internal/Img';\nimport './challenge.scss';\nimport { hasOwnProperty } from '../../../../utils/hasOwnProperty';\nimport useImage from '../../../../core/Context/useImage';\nimport AdyenCheckoutError, { ERROR } from '../../../../core/Errors/AdyenCheckoutError';\nimport { THREEDS2_CHALLENGE, THREEDS2_CHALLENGE_ERROR, THREEDS2_NUM, MISSING_TOKEN_IN_ACTION_MSG } from '../../constants';\nimport { isValidHttpUrl } from '../../../../utils/isValidURL';\nimport { ErrorObject } from '../../../../core/Errors/types';\nimport { AnalyticsLogEvent, LogEventSubtype, LogEventType } from '../../../../core/Analytics/events/AnalyticsLogEvent';\nimport { AnalyticsErrorEvent, ErrorEventCode, ErrorEventType } from '../../../../core/Analytics/events/AnalyticsErrorEvent';\nimport { AbstractAnalyticsEvent } from '../../../../core/Analytics/events/AbstractAnalyticsEvent';\n\nclass PrepareChallenge3DS2 extends Component<PrepareChallenge3DS2Props, PrepareChallenge3DS2State> {\n public static readonly defaultProps = {\n onComplete: () => {},\n onError: () => {},\n isMDFlow: false\n };\n\n constructor(props) {\n super(props);\n\n if (this.props.token) {\n const challengeData: ChallengeData | ErrorObject = prepareChallengeData({\n token: this.props.token,\n size: this.props.challengeWindowSize || this.props.size // TODO confirm that this.props.size is legacy and can be removed\n });\n\n this.state = {\n status: 'init',\n challengeData\n };\n } else {\n // Will be picked up in componentDidMount\n this.state = { challengeData: { success: false, error: MISSING_TOKEN_IN_ACTION_MSG } };\n\n console.debug(`${THREEDS2_CHALLENGE_ERROR}: ${MISSING_TOKEN_IN_ACTION_MSG}`);\n }\n }\n\n public onFormSubmit = (msg: string) => {\n const event = new AnalyticsLogEvent({\n component: this.props.type,\n type: LogEventType.threeDS2,\n subType: LogEventSubtype.challengeDataSentWeb,\n message: msg\n });\n\n this.props.onSubmitAnalytics(event);\n };\n\n componentDidMount() {\n const hasChallengeData = !isErrorObject(this.state.challengeData);\n\n if (hasChallengeData) {\n const shouldAllowHttpDomains =\n /** Allow http urls if in development and testing against localhost:8080 */\n (process.env.NODE_ENV === 'development' && process.env.__CLIENT_ENV__?.includes('localhost:8080')) ||\n /**\n * Allows the checkoutshopper demo on localhost:8080 to work -\n * requires a configuration in localhost of environment: 'test', _environmentUrls: {api: 'http://localhost:8080/'}\n */\n (this.props.environment === 'test' && this.props._environmentUrls?.api?.includes('http://localhost:8080'));\n\n /**\n * Check the structure of the created challengeData\n */\n const { acsURL, postMessageDomain } = this.state.challengeData as ChallengeData;\n const hasValidAcsURL = isValidHttpUrl(acsURL, shouldAllowHttpDomains);\n const hasValidPostMessageDomain = isValidHttpUrl(postMessageDomain, shouldAllowHttpDomains);\n\n // Only render component if we have a valid acsURL & postMessageDomain.\n // i.e. a url to load into the iframe, and the domain that we expect the iframe to be sending messages back from\n if (!hasValidAcsURL || !hasValidPostMessageDomain) {\n const errorCode = !hasValidAcsURL\n ? ErrorEventCode.THREEDS2_TOKEN_IS_MISSING_ACSURL\n : ErrorEventCode.THREEDS2_CHALLENGE_TOKEN_IS_MISSING_THREEDSNOTIFICATIONURL;\n const missingProperty = !hasValidAcsURL ? 'acsURL' : 'threeDSNotificationURL';\n\n // Set UI error & call onError callback\n this.setError(\n {\n errorInfo: `${errorCode}: ${this.props.i18n.get('err.gen.9102')}` //\n },\n true\n );\n\n // Send error to analytics endpoint // TODO - check logs to see if this *ever* happens\n const event = new AnalyticsErrorEvent({\n component: this.props.type,\n code: errorCode,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_CHALLENGE_ERROR}: Decoded token is missing a valid ${missingProperty} property`\n });\n this.props.onSubmitAnalytics(event);\n\n console.debug(\n `### PrepareChallenge3DS2::exiting:: no valid ${missingProperty}.${!hasValidPostMessageDomain ? ` postMessageDomain=${postMessageDomain}` : ''}`\n );\n return;\n }\n\n const { acsTransID, messageVersion, threeDSServerTransID } = (this.state.challengeData as ChallengeData).cReqData;\n\n // Only render component if we have a acsTransID, messageVersion & threeDSServerTransID\n if (!acsTransID || !messageVersion || !threeDSServerTransID) {\n // Set UI error & call onError callback\n this.setError(\n {\n errorInfo: `${ErrorEventCode.THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS}: ${this.props.i18n.get('err.gen.9102')}`\n },\n true\n );\n\n // Send error to analytics endpoint // TODO - check logs to see if this *ever* happens\n const event = new AnalyticsErrorEvent({\n component: this.props.type,\n code: ErrorEventCode.THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_CHALLENGE_ERROR}: Decoded token is missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)`\n });\n this.props.onSubmitAnalytics(event);\n\n console.debug(\n '### PrepareChallenge3DS2::exiting:: missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)'\n );\n return;\n }\n\n // Proceed to allow component to render\n this.setState({ status: 'performingChallenge' });\n //\n } else {\n const errorMsg: string = (this.state.challengeData as ErrorObject).error;\n\n const errorCode = errorMsg.includes(MISSING_TOKEN_IN_ACTION_MSG)\n ? ErrorEventCode.THREEDS2_ACTION_IS_MISSING_TOKEN\n : ErrorEventCode.THREEDS2_TOKEN_DECODE_OR_PARSING_FAILED;\n\n // Set UI error & call onError callback\n this.setError(\n {\n errorInfo: `${errorCode}: ${this.props.i18n.get('err.gen.9102')}`\n // errorObj: this.state.challengeData // TODO Decide if we want to expose this data\n },\n true\n );\n\n // Send error to analytics endpoint // TODO - check logs to see if the base64 decoding errors *ever* happen\n const event = new AnalyticsErrorEvent({\n component: this.props.type,\n code: errorCode,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_CHALLENGE_ERROR}: ${errorMsg}` // can be: 'Missing \"token\" property from threeDS2 action', 'not base64', 'malformed URI sequence' or 'Could not JSON parse token'\n });\n\n this.props.onSubmitAnalytics(event);\n\n console.debug('### PrepareChallenge3DS2::exiting:: no challengeData');\n }\n }\n\n setStatusComplete(resultObj: ResultObject, errorCodeObject: ErrorCodeObject = null) {\n this.setState({ status: 'complete' }, () => {\n const data: ChallengeResolveData = createChallengeResolveData(this.props.dataKey, resultObj.transStatus, this.props.paymentData);\n\n if (errorCodeObject) {\n console.debug('### PrepareChallenge3DS2::errorCodeObject::', errorCodeObject);\n }\n\n let event: AbstractAnalyticsEvent;\n\n /** Are we in an \"error\" i.e. timeout or no transStatus, scenario? If so, submit analytics about it */\n const finalResObject = errorCodeObject ? errorCodeObject : resultObj;\n if (finalResObject.errorCode) {\n const errorTypeAndCode = {\n code: finalResObject.errorCode === 'timeout' ? ErrorEventCode.THREEDS2_TIMEOUT : ErrorEventCode.THREEDS2_NO_TRANSSTATUS,\n errorType: ErrorEventType.threeDS2\n };\n\n // Challenge process has timed out,\n // or, It's an error reported by the backend 'cos no transStatus could be retrieved // TODO - check logs to see if this *ever* happens\n\n event = new AnalyticsErrorEvent({\n component: this.props.type,\n message: (finalResObject as ErrorCodeObject).message,\n ...errorTypeAndCode\n });\n\n // Send error to analytics endpoint\n this.props.onSubmitAnalytics(event);\n }\n\n /** Calculate \"result\" for analytics */\n let result: string;\n\n switch (resultObj?.transStatus) {\n case 'Y':\n result = 'success';\n break;\n case 'N':\n result = 'failed';\n break;\n case 'U':\n result = !errorCodeObject ? 'cancelled' : 'timeout';\n break;\n default:\n }\n if (resultObj?.errorCode) {\n result = 'noTransStatus';\n }\n\n /** Create log object - the process is completed, one way or another */\n\n event = new AnalyticsLogEvent({\n component: this.props.type,\n type: LogEventType.threeDS2,\n subType: LogEventSubtype.challengeCompleted,\n message: `${THREEDS2_NUM} challenge has completed`,\n result\n });\n\n // Send log to analytics endpoint\n this.props.onSubmitAnalytics(event);\n\n /**\n * Equals call to onAdditionalDetails (except for in 3DS2InMDFlow)\n */\n this.props.onComplete(data);\n });\n }\n\n /**\n * Display error in the UI,\n * and, optionally, decide whether to send any of these errors to the merchant defined onError callback\n *\n * @param errorInfoObj -\n * @param isFatal -\n */\n setError(errorInfoObj: StatusErrorInfoObject, isFatal: boolean) {\n this.setState({ status: 'error', errorInfo: errorInfoObj.errorInfo });\n\n // Decide whether to call this.props.onError\n if (isFatal) {\n this.props.onError(new AdyenCheckoutError(ERROR, errorInfoObj.errorInfo, { cause: errorInfoObj.errorObj }));\n }\n }\n\n render(_, { challengeData: stateChallengeData }: PrepareChallenge3DS2State) {\n const challengeData = stateChallengeData as ChallengeData;\n const getImage = useImage();\n if (this.state.status === 'performingChallenge') {\n return (\n <DoChallenge3DS2\n onCompleteChallenge={(challenge: ThreeDS2FlowObject) => {\n let errorCodeObject: ErrorCodeObject = null;\n\n // Challenge has resulted in an error (no transStatus could be retrieved) - but we still treat this as a valid scenario\n if (hasOwnProperty(challenge.result, 'errorCode') && challenge.result.errorCode.length) {\n // Tell the merchant there's been an error\n errorCodeObject = {\n errorCode: challenge.result.errorCode,\n message: `${THREEDS2_CHALLENGE_ERROR}: ${\n challenge.result.errorDescription ? challenge.result.errorDescription : 'no transStatus could be retrieved'\n }`\n };\n\n /**\n * NOTE: we can now use this.props.isMDFlow to decide if we want to send any of these errors to the onError handler\n * - this is problematic in the regular flow since merchants tend to treat any calls to their onError handler as 'fatal',\n * but in the MDFlow we control what the onError handler does.\n */\n if (this.props.isMDFlow) {\n this.props.onError(\n new AdyenCheckoutError(\n ERROR,\n `${THREEDS2_CHALLENGE_ERROR}: ${\n challenge.result.errorDescription\n ? challenge.result.errorDescription\n : 'no transStatus could be retrieved'\n }`,\n { cause: challenge.result.errorCode }\n )\n );\n }\n }\n\n /**\n * An object has been returned, parsed & accepted as legit (according to the rules in getProcessMessageHandler),\n * but the result prop on that object is missing\n */\n if (!challenge.result) {\n this.setError(\n {\n errorInfo: `${THREEDS2_CHALLENGE_ERROR}: ${this.props.i18n.get('3ds.chal.805', {\n values: { result: '\"result\"' }\n })}`,\n errorObj: challenge as unknown as ErrorObject\n },\n true\n );\n\n // Send error to analytics endpoint\n const event = new AnalyticsErrorEvent({\n component: this.props.type,\n code: ErrorEventCode.THREEDS2_CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_CHALLENGE_ERROR}: challenge resolved without a \"result\" object`\n });\n\n this.props.onSubmitAnalytics(event);\n\n console.debug('### PrepareChallenge3DS2::exiting:: challenge resolved without a \"result\" object');\n\n return;\n }\n\n // Proceed with call to onAdditionalDetails (except for in 3DS2InMDFlow)\n this.setStatusComplete(challenge.result, errorCodeObject);\n }}\n onErrorChallenge={(challenge: ThreeDS2FlowObject) => {\n /**\n * Called when challenge times-out (which is still a valid scenario)...\n */\n if (hasOwnProperty(challenge, 'errorCode')) {\n const timeoutObject: ErrorCodeObject = {\n errorCode: challenge.errorCode,\n message: `${THREEDS2_CHALLENGE}: ${challenge.errorCode}`\n };\n\n // see comment in onCompleteChallenge code block\n if (this.props.isMDFlow) {\n this.props.onError(\n new AdyenCheckoutError(ERROR, `${THREEDS2_CHALLENGE_ERROR}: '3DS2 challenge timed out'`, {\n cause: challenge.errorCode\n })\n );\n }\n\n this.setStatusComplete(challenge.result, timeoutObject);\n return;\n }\n }}\n {...challengeData}\n onActionHandled={this.props.onActionHandled}\n onFormSubmit={this.onFormSubmit}\n usePasskeyIFrameAttributes={this.props.usePasskeyIFrameAttributes}\n />\n );\n }\n\n if (this.state.status === 'error') {\n return (\n <div className=\"adyen-checkout__threeds2-challenge-error\">\n <Img\n className=\"adyen-checkout__status__icon adyen-checkout__status__icon--error\"\n src={getImage({\n imageFolder: 'components/'\n })('error')}\n alt={''}\n />\n <div className=\"adyen-checkout__status__text\">\n {this.state.errorInfo ? this.state.errorInfo : this.props.i18n.get('error.message.unknown')}\n </div>\n </div>\n );\n }\n\n return null;\n }\n}\n\nexport default PrepareChallenge3DS2;\n"],"names":["PrepareChallenge3DS2","Component","componentDidMount","isErrorObject","this","state","challengeData","shouldAllowHttpDomains","props","environment","_environmentUrls","api","includes","acsURL","postMessageDomain","hasValidAcsURL","isValidHttpUrl","hasValidPostMessageDomain","errorCode","ErrorEventCode","THREEDS2_CHALLENGE_TOKEN_IS_MISSING_THREEDSNOTIFICATIONURL","THREEDS2_TOKEN_IS_MISSING_ACSURL","missingProperty","setError","errorInfo","i18n","get","event","AnalyticsErrorEvent","component","type","code","errorType","ErrorEventType","threeDS2","message","THREEDS2_CHALLENGE_ERROR","onSubmitAnalytics","console","debug","acsTransID","messageVersion","threeDSServerTransID","cReqData","THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS","setState","status","errorMsg","error","MISSING_TOKEN_IN_ACTION_MSG","THREEDS2_ACTION_IS_MISSING_TOKEN","THREEDS2_TOKEN_DECODE_OR_PARSING_FAILED","setStatusComplete","resultObj","errorCodeObject","data","createChallengeResolveData","dataKey","transStatus","paymentData","finalResObject","errorTypeAndCode","THREEDS2_TIMEOUT","THREEDS2_NO_TRANSSTATUS","result","AnalyticsLogEvent","LogEventType","subType","LogEventSubtype","challengeCompleted","THREEDS2_NUM","onComplete","errorInfoObj","isFatal","onError","AdyenCheckoutError","ERROR","cause","errorObj","render","_","stateChallengeData","getImage","useImage","h","DoChallenge3DS2","onCompleteChallenge","challenge","hasOwnProperty","length","errorDescription","isMDFlow","values","THREEDS2_CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP","onErrorChallenge","timeoutObject","THREEDS2_CHALLENGE","onActionHandled","onFormSubmit","usePasskeyIFrameAttributes","div","className","Img","src","imageFolder","alt","constructor","super","_define_property","msg","challengeDataSentWeb","token","prepareChallengeData","size","challengeWindowSize","success","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"PrepareChallenge3DS2.js","sources":["../../../../../../src/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.tsx"],"sourcesContent":["import { Component, h } from 'preact';\nimport DoChallenge3DS2 from './DoChallenge3DS2';\nimport { createChallengeResolveData, prepareChallengeData, isChallengeData } from '../utils';\nimport { PrepareChallenge3DS2Props, PrepareChallenge3DS2State, StatusErrorInfoObject } from './types';\nimport { ChallengeData, ResultObject, ThreeDS2FlowObject, ErrorCodeObject, ChallengeResolveData } from '../../types';\nimport '../../ThreeDS2.scss';\nimport Img from '../../../internal/Img';\nimport './challenge.scss';\nimport useImage from '../../../../core/Context/useImage';\nimport AdyenCheckoutError, { ERROR } from '../../../../core/Errors/AdyenCheckoutError';\nimport {\n DEFAULT_CHALLENGE_WINDOW_SIZE,\n THREEDS2_CHALLENGE,\n THREEDS2_CHALLENGE_ERROR,\n THREEDS2_NUM,\n MISSING_TOKEN_IN_ACTION_MSG\n} from '../../constants';\nimport { isValidHttpUrl } from '../../../../utils/isValidURL';\nimport { ErrorObject } from '../../../../core/Errors/types';\nimport { AnalyticsLogEvent, LogEventSubtype, LogEventType } from '../../../../core/Analytics/events/AnalyticsLogEvent';\nimport { AnalyticsErrorEvent, ErrorEventCode, ErrorEventType } from '../../../../core/Analytics/events/AnalyticsErrorEvent';\nimport { AbstractAnalyticsEvent } from '../../../../core/Analytics/events/AbstractAnalyticsEvent';\n\nclass PrepareChallenge3DS2 extends Component<PrepareChallenge3DS2Props, PrepareChallenge3DS2State> {\n public static readonly defaultProps = {\n onComplete: () => {},\n onError: () => {},\n isMDFlow: false\n };\n\n private get component(): string {\n return this.props.type ?? THREEDS2_CHALLENGE;\n }\n\n constructor(props: PrepareChallenge3DS2Props) {\n super(props);\n\n if (this.props.token) {\n const challengeData: ChallengeData | ErrorObject = prepareChallengeData({\n token: this.props.token,\n size: this.props.challengeWindowSize || this.props.size || DEFAULT_CHALLENGE_WINDOW_SIZE // TODO For v7 remove this.props.size as legacy code\n });\n\n this.state = {\n status: 'init',\n challengeData\n };\n } else {\n // Will be picked up in componentDidMount\n this.state = { challengeData: { success: false, error: MISSING_TOKEN_IN_ACTION_MSG } };\n\n console.debug(`${THREEDS2_CHALLENGE_ERROR}: ${MISSING_TOKEN_IN_ACTION_MSG}`);\n }\n }\n\n public onFormSubmit = (msg: string) => {\n const event = new AnalyticsLogEvent({\n component: this.component,\n type: LogEventType.threeDS2,\n subType: LogEventSubtype.challengeDataSentWeb,\n message: msg\n });\n\n this.props.onSubmitAnalytics(event);\n };\n\n componentDidMount() {\n const { challengeData } = this.state;\n const hasChallengeData = isChallengeData(challengeData);\n\n if (hasChallengeData) {\n const shouldAllowHttpDomains =\n /** Allow http urls if in development and testing against localhost:8080 */\n (process.env.NODE_ENV === 'development' && process.env.__CLIENT_ENV__?.includes('localhost:8080')) ||\n /**\n * Allows the checkoutshopper demo on localhost:8080 to work -\n * requires a configuration in localhost of environment: 'test', _environmentUrls: {api: 'http://localhost:8080/'}\n */\n (this.props.environment === 'test' && this.props._environmentUrls?.api?.includes('http://localhost:8080'));\n\n /**\n * Check the structure of the created challengeData\n */\n const { acsURL, postMessageDomain } = challengeData;\n const hasValidAcsURL = isValidHttpUrl(acsURL, shouldAllowHttpDomains);\n const hasValidPostMessageDomain = isValidHttpUrl(postMessageDomain, shouldAllowHttpDomains);\n\n // Only render component if we have a valid acsURL & postMessageDomain.\n // i.e. a url to load into the iframe, and the domain that we expect the iframe to be sending messages back from\n if (!hasValidAcsURL || !hasValidPostMessageDomain) {\n const errorCode = !hasValidAcsURL\n ? ErrorEventCode.THREEDS2_TOKEN_IS_MISSING_ACSURL\n : ErrorEventCode.THREEDS2_CHALLENGE_TOKEN_IS_MISSING_THREEDSNOTIFICATIONURL;\n const missingProperty = !hasValidAcsURL ? 'acsURL' : 'threeDSNotificationURL';\n\n // Set UI error & call onError callback\n this.setError(\n {\n errorInfo: `${errorCode}: ${this.props.i18n.get('err.gen.9102')}` //\n },\n true\n );\n\n // Send error to analytics endpoint // TODO - check logs to see if this *ever* happens\n const event = new AnalyticsErrorEvent({\n component: this.component,\n code: errorCode,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_CHALLENGE_ERROR}: Decoded token is missing a valid ${missingProperty} property`\n });\n this.props.onSubmitAnalytics(event);\n\n console.debug(\n `### PrepareChallenge3DS2::exiting:: no valid ${missingProperty}.${!hasValidPostMessageDomain ? ` postMessageDomain=${postMessageDomain}` : ''}`\n );\n return;\n }\n\n const { acsTransID, messageVersion, threeDSServerTransID } = challengeData.cReqData;\n\n // Only render component if we have a acsTransID, messageVersion & threeDSServerTransID\n if (!acsTransID || !messageVersion || !threeDSServerTransID) {\n // Set UI error & call onError callback\n this.setError(\n {\n errorInfo: `${ErrorEventCode.THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS}: ${this.props.i18n.get('err.gen.9102')}`\n },\n true\n );\n\n // Send error to analytics endpoint // TODO - check logs to see if this *ever* happens\n const event = new AnalyticsErrorEvent({\n component: this.component,\n code: ErrorEventCode.THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_CHALLENGE_ERROR}: Decoded token is missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)`\n });\n this.props.onSubmitAnalytics(event);\n\n console.debug(\n '### PrepareChallenge3DS2::exiting:: missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)'\n );\n return;\n }\n\n // Proceed to allow component to render\n this.setState({ status: 'performingChallenge' });\n //\n } else {\n const errorMsg: string = challengeData.error;\n\n const errorCode = errorMsg.includes(MISSING_TOKEN_IN_ACTION_MSG)\n ? ErrorEventCode.THREEDS2_ACTION_IS_MISSING_TOKEN\n : ErrorEventCode.THREEDS2_TOKEN_DECODE_OR_PARSING_FAILED;\n\n // Set UI error & call onError callback\n this.setError(\n {\n errorInfo: `${errorCode}: ${this.props.i18n.get('err.gen.9102')}`\n // errorObj: this.state.challengeData // TODO Decide if we want to expose this data\n },\n true\n );\n\n // Send error to analytics endpoint // TODO - check logs to see if the base64 decoding errors *ever* happen\n const event = new AnalyticsErrorEvent({\n component: this.component,\n code: errorCode,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_CHALLENGE_ERROR}: ${errorMsg}` // can be: 'Missing \"token\" property from threeDS2 action', 'not base64', 'malformed URI sequence' or 'Could not JSON parse token'\n });\n\n this.props.onSubmitAnalytics(event);\n\n console.debug('### PrepareChallenge3DS2::exiting:: no challengeData');\n }\n }\n\n setStatusComplete(resultObj?: ResultObject, errorCodeObject?: ErrorCodeObject) {\n this.setState({ status: 'complete' }, () => {\n const data: ChallengeResolveData = createChallengeResolveData(\n this.props.dataKey ?? 'threeDSResult',\n resultObj?.transStatus ?? '',\n this.props.paymentData ?? ''\n );\n\n if (errorCodeObject) {\n console.debug('### PrepareChallenge3DS2::errorCodeObject::', errorCodeObject);\n }\n\n let event: AbstractAnalyticsEvent;\n\n /** Are we in an \"error\" i.e. timeout or no transStatus, scenario? If so, submit analytics about it */\n const finalResObject = errorCodeObject ? errorCodeObject : resultObj;\n if (finalResObject?.errorCode) {\n const errorTypeAndCode = {\n code: finalResObject.errorCode === 'timeout' ? ErrorEventCode.THREEDS2_TIMEOUT : ErrorEventCode.THREEDS2_NO_TRANSSTATUS,\n errorType: ErrorEventType.threeDS2\n };\n\n // Challenge process has timed out,\n // or, It's an error reported by the backend 'cos no transStatus could be retrieved // TODO - check logs to see if this *ever* happens\n\n event = new AnalyticsErrorEvent({\n component: this.component,\n message: (finalResObject as ErrorCodeObject).message,\n ...errorTypeAndCode\n });\n\n // Send error to analytics endpoint\n this.props.onSubmitAnalytics(event);\n }\n\n /** Calculate \"result\" for analytics */\n let result = 'unknown';\n\n switch (resultObj?.transStatus) {\n case 'Y':\n result = 'success';\n break;\n case 'N':\n result = 'failed';\n break;\n case 'U':\n result = !errorCodeObject ? 'cancelled' : 'timeout';\n break;\n default:\n }\n if (resultObj?.errorCode) {\n result = 'noTransStatus';\n }\n\n /** Create log object - the process is completed, one way or another */\n\n event = new AnalyticsLogEvent({\n component: this.component,\n type: LogEventType.threeDS2,\n subType: LogEventSubtype.challengeCompleted,\n message: `${THREEDS2_NUM} challenge has completed`,\n result\n });\n\n // Send log to analytics endpoint\n this.props.onSubmitAnalytics(event);\n\n /**\n * Equals call to onAdditionalDetails (except for in 3DS2InMDFlow)\n */\n this.props.onComplete?.(data);\n });\n }\n\n /**\n * Display error in the UI,\n * and, optionally, decide whether to send any of these errors to the merchant defined onError callback\n *\n * @param errorInfoObj -\n * @param isFatal -\n */\n setError(errorInfoObj: StatusErrorInfoObject, isFatal: boolean) {\n this.setState({ status: 'error', errorInfo: errorInfoObj.errorInfo });\n\n // Decide whether to call this.props.onError\n if (isFatal) {\n this.props.onError?.(new AdyenCheckoutError(ERROR, errorInfoObj.errorInfo, { cause: errorInfoObj.errorObj }));\n }\n }\n\n render(_: PrepareChallenge3DS2Props, { challengeData: stateChallengeData }: PrepareChallenge3DS2State) {\n const getImage = useImage();\n if (this.state.status === 'performingChallenge' && isChallengeData(stateChallengeData)) {\n return (\n <DoChallenge3DS2\n onCompleteChallenge={(challenge: ThreeDS2FlowObject) => {\n let errorCodeObject: ErrorCodeObject | undefined;\n\n /**\n * An object has been returned, parsed & accepted as legit (according to the rules in getProcessMessageHandler),\n * but the result prop on that object is missing\n */\n if (!challenge.result) {\n this.setError(\n {\n errorInfo: `${THREEDS2_CHALLENGE_ERROR}: ${this.props.i18n.get('3ds.chal.805', {\n values: { result: '\"result\"' }\n })}`,\n errorObj: challenge as unknown as ErrorObject\n },\n true\n );\n\n // Send error to analytics endpoint\n const event = new AnalyticsErrorEvent({\n component: this.component,\n code: ErrorEventCode.THREEDS2_CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_CHALLENGE_ERROR}: challenge resolved without a \"result\" object`\n });\n\n this.props.onSubmitAnalytics(event);\n\n console.debug('### PrepareChallenge3DS2::exiting:: challenge resolved without a \"result\" object');\n\n return;\n }\n\n // Challenge has resulted in an error (no transStatus could be retrieved) - but we still treat this as a valid scenario\n if (challenge.result.errorCode) {\n // Tell the merchant there's been an error\n errorCodeObject = {\n errorCode: challenge.result.errorCode,\n message: `${THREEDS2_CHALLENGE_ERROR}: ${\n challenge.result.errorDescription ? challenge.result.errorDescription : 'no transStatus could be retrieved'\n }`\n };\n\n /**\n * NOTE: we can now use this.props.isMDFlow to decide if we want to send any of these errors to the onError handler\n * - this is problematic in the regular flow since merchants tend to treat any calls to their onError handler as 'fatal',\n * but in the MDFlow we control what the onError handler does.\n */\n if (this.props.isMDFlow) {\n this.props.onError?.(\n new AdyenCheckoutError(\n ERROR,\n `${THREEDS2_CHALLENGE_ERROR}: ${\n challenge.result.errorDescription\n ? challenge.result.errorDescription\n : 'no transStatus could be retrieved'\n }`,\n { cause: challenge.result.errorCode }\n )\n );\n }\n }\n\n // Proceed with call to onAdditionalDetails (except for in 3DS2InMDFlow)\n this.setStatusComplete(challenge.result, errorCodeObject);\n }}\n onErrorChallenge={(challenge: ThreeDS2FlowObject) => {\n /**\n * Called when challenge times-out (which is still a valid scenario)...\n */\n if (challenge.errorCode) {\n const timeoutObject: ErrorCodeObject = {\n errorCode: challenge.errorCode,\n message: `${THREEDS2_CHALLENGE}: ${challenge.errorCode}`\n };\n\n // see comment in onCompleteChallenge code block\n if (this.props.isMDFlow) {\n this.props.onError?.(\n new AdyenCheckoutError(ERROR, `${THREEDS2_CHALLENGE_ERROR}: '3DS2 challenge timed out'`, {\n cause: challenge.errorCode\n })\n );\n }\n\n this.setStatusComplete(challenge.result, timeoutObject);\n return;\n }\n }}\n {...stateChallengeData}\n onActionHandled={this.props.onActionHandled}\n onFormSubmit={this.onFormSubmit}\n usePasskeyIFrameAttributes={this.props.usePasskeyIFrameAttributes}\n />\n );\n }\n\n if (this.state.status === 'error') {\n return (\n <div className=\"adyen-checkout__threeds2-challenge-error\">\n <Img\n className=\"adyen-checkout__status__icon adyen-checkout__status__icon--error\"\n src={getImage({\n imageFolder: 'components/'\n })('error')}\n alt={''}\n />\n <div className=\"adyen-checkout__status__text\">\n {this.state.errorInfo ? this.state.errorInfo : this.props.i18n.get('error.message.unknown')}\n </div>\n </div>\n );\n }\n\n return null;\n }\n}\n\nexport default PrepareChallenge3DS2;\n"],"names":["PrepareChallenge3DS2","Component","component","this","props","type","THREEDS2_CHALLENGE","componentDidMount","challengeData","state","isChallengeData","shouldAllowHttpDomains","environment","_environmentUrls","api","includes","acsURL","postMessageDomain","hasValidAcsURL","isValidHttpUrl","hasValidPostMessageDomain","errorCode","ErrorEventCode","THREEDS2_CHALLENGE_TOKEN_IS_MISSING_THREEDSNOTIFICATIONURL","THREEDS2_TOKEN_IS_MISSING_ACSURL","missingProperty","setError","errorInfo","i18n","get","event","AnalyticsErrorEvent","code","errorType","ErrorEventType","threeDS2","message","THREEDS2_CHALLENGE_ERROR","onSubmitAnalytics","console","debug","acsTransID","messageVersion","threeDSServerTransID","cReqData","THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS","setState","status","errorMsg","error","MISSING_TOKEN_IN_ACTION_MSG","THREEDS2_ACTION_IS_MISSING_TOKEN","THREEDS2_TOKEN_DECODE_OR_PARSING_FAILED","setStatusComplete","resultObj","errorCodeObject","data","createChallengeResolveData","dataKey","transStatus","paymentData","finalResObject","errorTypeAndCode","THREEDS2_TIMEOUT","THREEDS2_NO_TRANSSTATUS","result","AnalyticsLogEvent","LogEventType","subType","LogEventSubtype","challengeCompleted","THREEDS2_NUM","onComplete","errorInfoObj","isFatal","onError","AdyenCheckoutError","ERROR","cause","errorObj","render","_","stateChallengeData","getImage","useImage","h","DoChallenge3DS2","onCompleteChallenge","challenge","values","THREEDS2_CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP","errorDescription","isMDFlow","onErrorChallenge","timeoutObject","onActionHandled","onFormSubmit","usePasskeyIFrameAttributes","div","className","Img","src","imageFolder","alt","constructor","super","_define_property","msg","challengeDataSentWeb","token","prepareChallengeData","size","challengeWindowSize","DEFAULT_CHALLENGE_WINDOW_SIZE","success","defaultProps"],"mappings":"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"}