@adyen/adyen-web 6.10.0 → 6.12.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 (304) hide show
  1. package/dist/cjs/adyen.css +3 -3
  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 +89 -99
  6. package/dist/es/adyen.css +3 -3
  7. package/dist/es/adyen.css.map +1 -1
  8. package/dist/es/components/ANCV/components/ANCVAwait/config.js +1 -1
  9. package/dist/es/components/ANCV/components/ANCVAwait/config.js.map +1 -1
  10. package/dist/es/components/Ach/Ach.js +1 -1
  11. package/dist/es/components/Ach/Ach.js.map +1 -1
  12. package/dist/es/components/Ach/components/AccountTypeSelector.js +2 -0
  13. package/dist/es/components/Ach/components/AccountTypeSelector.js.map +1 -0
  14. package/dist/es/components/Ach/components/AchComponent.js +2 -0
  15. package/dist/es/components/Ach/components/AchComponent.js.map +1 -0
  16. package/dist/es/components/Ach/components/useSRPanelForACHErrors.js +2 -0
  17. package/dist/es/components/Ach/components/useSRPanelForACHErrors.js.map +1 -0
  18. package/dist/es/components/Ach/components/validate.js +2 -0
  19. package/dist/es/components/Ach/components/validate.js.map +1 -0
  20. package/dist/es/components/Ach/defaultProps.js +2 -0
  21. package/dist/es/components/Ach/defaultProps.js.map +1 -0
  22. package/dist/es/components/AmazonPay/utils.js +1 -1
  23. package/dist/es/components/ApplePay/ApplePay.js +1 -1
  24. package/dist/es/components/ApplePay/ApplePay.js.map +1 -1
  25. package/dist/es/components/ApplePay/defaultProps.js +1 -1
  26. package/dist/es/components/ApplePay/defaultProps.js.map +1 -1
  27. package/dist/es/components/Atome/Atome.js +1 -1
  28. package/dist/es/components/BacsDD/components/BacsInput.js +1 -1
  29. package/dist/es/components/BcmcMobile/BcmcMobile.js +1 -1
  30. package/dist/es/components/Boleto/components/BoletoInput/validate.js +1 -1
  31. package/dist/es/components/Card/components/CardInput/CardInput.js +1 -1
  32. package/dist/es/components/Card/components/CardInput/components/BrandIcon.js +1 -1
  33. package/dist/es/components/Card/components/CardInput/components/BrandIcon.js.map +1 -1
  34. package/dist/es/components/Card/components/CardInput/components/CVC.js +1 -1
  35. package/dist/es/components/Card/components/CardInput/components/CVC.js.map +1 -1
  36. package/dist/es/components/Card/components/CardInput/components/CVCHint.js +1 -1
  37. package/dist/es/components/Card/components/CardInput/components/CVCHint.js.map +1 -1
  38. package/dist/es/components/Card/components/CardInput/components/CardFields.js +1 -1
  39. package/dist/es/components/Card/components/CardInput/components/CardNumber.js +1 -1
  40. package/dist/es/components/Card/components/CardInput/components/CardNumber.js.map +1 -1
  41. package/dist/es/components/Card/components/CardInput/components/DataSfSpan.js +1 -1
  42. package/dist/es/components/Card/components/CardInput/components/ExpirationDate.js +1 -1
  43. package/dist/es/components/Card/components/CardInput/components/ExpirationDate.js.map +1 -1
  44. package/dist/es/components/Card/components/CardInput/useSRPanelForCardInputErrors.js.map +1 -1
  45. package/dist/es/components/Card/components/CardInput/utils.js.map +1 -1
  46. package/dist/es/components/Card/components/CardInput/validate.js +1 -1
  47. package/dist/es/components/Donation/components/DonationComponent.js +1 -1
  48. package/dist/es/components/DuitNow/DuitNow.js +1 -1
  49. package/dist/es/components/GooglePay/GooglePay.js +1 -1
  50. package/dist/es/components/GooglePay/GooglePay.js.map +1 -1
  51. package/dist/es/components/PayNow/PayNow.js +1 -1
  52. package/dist/es/components/PayPal/constants.js +1 -1
  53. package/dist/es/components/PayPal/constants.js.map +1 -1
  54. package/dist/es/components/PayTo/PayTo.js.map +1 -1
  55. package/dist/es/components/Pix/PixInput/PixInput.js.map +1 -1
  56. package/dist/es/components/PromptPay/PromptPay.js +1 -1
  57. package/dist/es/components/Redirect/Redirect.js +1 -1
  58. package/dist/es/components/Riverty/Riverty.js +1 -1
  59. package/dist/es/components/Riverty/config.js +1 -1
  60. package/dist/es/components/ThreeDS2/ThreeDS2Challenge.js +1 -1
  61. package/dist/es/components/ThreeDS2/ThreeDS2DeviceFingerprint.js +1 -1
  62. package/dist/es/components/ThreeDS2/callSubmit3DS2Fingerprint.js +1 -1
  63. package/dist/es/components/ThreeDS2/components/Challenge/DoChallenge3DS2.js +1 -1
  64. package/dist/es/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.js +1 -1
  65. package/dist/es/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.js.map +1 -1
  66. package/dist/es/components/ThreeDS2/components/DeviceFingerprint/DoFingerprint3DS2.js +1 -1
  67. package/dist/es/components/ThreeDS2/components/DeviceFingerprint/PrepareFingerprint3DS2.js +1 -1
  68. package/dist/es/components/ThreeDS2/components/DeviceFingerprint/PrepareFingerprint3DS2.js.map +1 -1
  69. package/dist/es/components/WeChat/WeChat.js +1 -1
  70. package/dist/es/components/internal/Address/Address.js +1 -1
  71. package/dist/es/components/internal/Address/validate.formats.js.map +1 -1
  72. package/dist/es/components/internal/Countdown/utils.js.map +1 -1
  73. package/dist/es/components/internal/FormFields/Checkbox/Checkbox.js +1 -1
  74. package/dist/es/components/internal/FormFields/Checkbox/Checkbox.js.map +1 -1
  75. package/dist/es/components/internal/FormFields/InputDate/utils.js.map +1 -1
  76. package/dist/es/components/internal/FormFields/Select/components/SelectButton.js +1 -1
  77. package/dist/es/components/internal/FormFields/Select/components/SelectButton.js.map +1 -1
  78. package/dist/es/components/internal/IbanInput/validate.js +1 -1
  79. package/dist/es/components/internal/IssuerList/IssuerList.js +1 -1
  80. package/dist/es/components/internal/IssuerList/IssuerList.js.map +1 -1
  81. package/dist/es/components/internal/OpenInvoice/useSRPanelForOpenInvoiceErrors.js +1 -1
  82. package/dist/es/components/internal/OpenInvoice/useSRPanelForOpenInvoiceErrors.js.map +1 -1
  83. package/dist/es/components/internal/PhoneInput/PhoneInputForm.js +1 -1
  84. package/dist/es/components/internal/PhoneInput/PhoneInputForm.js.map +1 -1
  85. package/dist/es/components/internal/PhoneInput/validate.js +1 -1
  86. package/dist/es/components/internal/QRLoader/QRLoader.js +1 -1
  87. package/dist/es/components/internal/SecuredFields/SFP/SecuredFieldsProvider.js +1 -1
  88. package/dist/es/components/internal/SecuredFields/SFP/SecuredFieldsProviderHandlers.js +1 -1
  89. package/dist/es/components/internal/SecuredFields/lib/CSF/extensions/createSecuredFields.js +1 -1
  90. package/dist/es/components/internal/SecuredFields/lib/CSF/extensions/handleConfig.js +1 -1
  91. package/dist/es/components/internal/SecuredFields/lib/CSF/extensions/handleConfig.js.map +1 -1
  92. package/dist/es/components/internal/SecuredFields/lib/CSF/extensions/handleTab.js +1 -1
  93. package/dist/es/components/internal/SecuredFields/lib/CSF/extensions/handleTab.js.map +1 -1
  94. package/dist/es/components/internal/SecuredFields/lib/CSF/partials/processAutoComplete.js.map +1 -1
  95. package/dist/es/components/internal/SecuredFields/lib/CSF/utils/iframes/postMessageValidation.js.map +1 -1
  96. package/dist/es/components/internal/SecuredFields/lib/CSF/utils/tabbing/utils.js.map +1 -1
  97. package/dist/es/components/internal/SecuredFields/lib/CSF/utils/userAgent.js +1 -1
  98. package/dist/es/components/internal/SecuredFields/lib/CSF/utils/userAgent.js.map +1 -1
  99. package/dist/es/components/internal/SecuredFields/lib/constants.js +1 -1
  100. package/dist/es/components/internal/SecuredFields/lib/constants.js.map +1 -1
  101. package/dist/es/components/internal/SecuredFields/lib/securedField/utils/processPlaceholders.js +1 -1
  102. package/dist/es/components/internal/SecuredFields/lib/securedField/utils/processPlaceholders.js.map +1 -1
  103. package/dist/es/components/internal/SecuredFields/lib/utilities/addContextTranslations.js +1 -1
  104. package/dist/es/components/internal/StoreDetails/StoreDetails.js +1 -1
  105. package/dist/es/components/internal/StoreDetails/StoreDetails.js.map +1 -1
  106. package/dist/es/components/internal/UIElement/UIElement.js +1 -1
  107. package/dist/es/components/internal/UIElement/UIElement.js.map +1 -1
  108. package/dist/es/core/Analytics/Analytics.js +1 -1
  109. package/dist/es/core/Analytics/Analytics.js.map +1 -1
  110. package/dist/es/core/Analytics/constants.js +1 -1
  111. package/dist/es/core/Analytics/constants.js.map +1 -1
  112. package/dist/es/core/Analytics/utils.js +1 -1
  113. package/dist/es/core/Errors/constants.js +1 -1
  114. package/dist/es/core/Errors/constants.js.map +1 -1
  115. package/dist/es/core/Errors/utils.js +1 -1
  116. package/dist/es/core/Errors/utils.js.map +1 -1
  117. package/dist/es/core/RiskModule/components/DeviceFingerprint/utils.js +1 -1
  118. package/dist/es/core/RiskModule/constants.js +1 -1
  119. package/dist/es/core/RiskModule/constants.js.map +1 -1
  120. package/dist/es/core/Services/analytics/collect-id.js +1 -1
  121. package/dist/es/core/Services/http.js +1 -1
  122. package/dist/es/core/core.js +1 -1
  123. package/dist/es/external/preact/dist/preact.js +1 -1
  124. package/dist/es/external/preact/dist/preact.js.map +1 -1
  125. package/dist/es/external/preact/hooks/dist/hooks.js.map +1 -1
  126. package/dist/es/index.d.ts +89 -99
  127. package/dist/es/index.js +1 -1
  128. package/dist/es/utils/Validator/defaultRules.js +1 -1
  129. package/dist/es/utils/base64.js.map +1 -1
  130. package/dist/es/utils/browserInfo.js +1 -1
  131. package/dist/es/utils/browserInfo.js.map +1 -1
  132. package/dist/es/utils/detectInIframe.js +2 -0
  133. package/dist/es/utils/detectInIframe.js.map +1 -0
  134. package/dist/es/utils/setFocus.js +1 -1
  135. package/dist/es/utils/setFocus.js.map +1 -1
  136. package/dist/es/utils/textUtils.js +1 -1
  137. package/dist/es/utils/textUtils.js.map +1 -1
  138. package/dist/es/utils/useForm/useForm.js +1 -1
  139. package/dist/es-legacy/adyen.css +3 -3
  140. package/dist/es-legacy/adyen.css.map +1 -1
  141. package/dist/es-legacy/components/ANCV/components/ANCVAwait/config.js +1 -1
  142. package/dist/es-legacy/components/ANCV/components/ANCVAwait/config.js.map +1 -1
  143. package/dist/es-legacy/components/Ach/Ach.js +1 -1
  144. package/dist/es-legacy/components/Ach/Ach.js.map +1 -1
  145. package/dist/es-legacy/components/Ach/components/AccountTypeSelector.js +2 -0
  146. package/dist/es-legacy/components/Ach/components/AccountTypeSelector.js.map +1 -0
  147. package/dist/es-legacy/components/Ach/components/AchComponent.js +2 -0
  148. package/dist/es-legacy/components/Ach/components/AchComponent.js.map +1 -0
  149. package/dist/es-legacy/components/Ach/components/useSRPanelForACHErrors.js +2 -0
  150. package/dist/es-legacy/components/Ach/components/useSRPanelForACHErrors.js.map +1 -0
  151. package/dist/es-legacy/components/Ach/components/validate.js +2 -0
  152. package/dist/es-legacy/components/Ach/components/validate.js.map +1 -0
  153. package/dist/es-legacy/components/Ach/defaultProps.js +2 -0
  154. package/dist/es-legacy/components/Ach/defaultProps.js.map +1 -0
  155. package/dist/es-legacy/components/AmazonPay/utils.js +1 -1
  156. package/dist/es-legacy/components/ApplePay/ApplePay.js +1 -1
  157. package/dist/es-legacy/components/ApplePay/ApplePay.js.map +1 -1
  158. package/dist/es-legacy/components/ApplePay/defaultProps.js +1 -1
  159. package/dist/es-legacy/components/ApplePay/defaultProps.js.map +1 -1
  160. package/dist/es-legacy/components/Atome/Atome.js +1 -1
  161. package/dist/es-legacy/components/BacsDD/components/BacsInput.js +1 -1
  162. package/dist/es-legacy/components/BcmcMobile/BcmcMobile.js +1 -1
  163. package/dist/es-legacy/components/Boleto/components/BoletoInput/validate.js +1 -1
  164. package/dist/es-legacy/components/Card/components/CardInput/CardInput.js +1 -1
  165. package/dist/es-legacy/components/Card/components/CardInput/components/BrandIcon.js +1 -1
  166. package/dist/es-legacy/components/Card/components/CardInput/components/BrandIcon.js.map +1 -1
  167. package/dist/es-legacy/components/Card/components/CardInput/components/CVC.js +1 -1
  168. package/dist/es-legacy/components/Card/components/CardInput/components/CVC.js.map +1 -1
  169. package/dist/es-legacy/components/Card/components/CardInput/components/CVCHint.js +1 -1
  170. package/dist/es-legacy/components/Card/components/CardInput/components/CVCHint.js.map +1 -1
  171. package/dist/es-legacy/components/Card/components/CardInput/components/CardFields.js +1 -1
  172. package/dist/es-legacy/components/Card/components/CardInput/components/CardNumber.js +1 -1
  173. package/dist/es-legacy/components/Card/components/CardInput/components/CardNumber.js.map +1 -1
  174. package/dist/es-legacy/components/Card/components/CardInput/components/DataSfSpan.js +1 -1
  175. package/dist/es-legacy/components/Card/components/CardInput/components/ExpirationDate.js +1 -1
  176. package/dist/es-legacy/components/Card/components/CardInput/components/ExpirationDate.js.map +1 -1
  177. package/dist/es-legacy/components/Card/components/CardInput/useSRPanelForCardInputErrors.js.map +1 -1
  178. package/dist/es-legacy/components/Card/components/CardInput/utils.js.map +1 -1
  179. package/dist/es-legacy/components/Card/components/CardInput/validate.js +1 -1
  180. package/dist/es-legacy/components/Donation/components/DonationComponent.js +1 -1
  181. package/dist/es-legacy/components/DuitNow/DuitNow.js +1 -1
  182. package/dist/es-legacy/components/GooglePay/GooglePay.js +1 -1
  183. package/dist/es-legacy/components/GooglePay/GooglePay.js.map +1 -1
  184. package/dist/es-legacy/components/PayNow/PayNow.js +1 -1
  185. package/dist/es-legacy/components/PayPal/constants.js +1 -1
  186. package/dist/es-legacy/components/PayPal/constants.js.map +1 -1
  187. package/dist/es-legacy/components/PayTo/PayTo.js.map +1 -1
  188. package/dist/es-legacy/components/Pix/PixInput/PixInput.js.map +1 -1
  189. package/dist/es-legacy/components/PromptPay/PromptPay.js +1 -1
  190. package/dist/es-legacy/components/Redirect/Redirect.js +1 -1
  191. package/dist/es-legacy/components/Riverty/Riverty.js +1 -1
  192. package/dist/es-legacy/components/Riverty/config.js +1 -1
  193. package/dist/es-legacy/components/ThreeDS2/ThreeDS2Challenge.js +1 -1
  194. package/dist/es-legacy/components/ThreeDS2/ThreeDS2DeviceFingerprint.js +1 -1
  195. package/dist/es-legacy/components/ThreeDS2/callSubmit3DS2Fingerprint.js +1 -1
  196. package/dist/es-legacy/components/ThreeDS2/components/Challenge/DoChallenge3DS2.js +1 -1
  197. package/dist/es-legacy/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.js +1 -1
  198. package/dist/es-legacy/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.js.map +1 -1
  199. package/dist/es-legacy/components/ThreeDS2/components/DeviceFingerprint/DoFingerprint3DS2.js +1 -1
  200. package/dist/es-legacy/components/ThreeDS2/components/DeviceFingerprint/PrepareFingerprint3DS2.js +1 -1
  201. package/dist/es-legacy/components/ThreeDS2/components/DeviceFingerprint/PrepareFingerprint3DS2.js.map +1 -1
  202. package/dist/es-legacy/components/WeChat/WeChat.js +1 -1
  203. package/dist/es-legacy/components/internal/Address/Address.js +1 -1
  204. package/dist/es-legacy/components/internal/Address/validate.formats.js.map +1 -1
  205. package/dist/es-legacy/components/internal/BaseElement/BaseElement.js +1 -1
  206. package/dist/es-legacy/components/internal/BaseElement/BaseElement.js.map +1 -1
  207. package/dist/es-legacy/components/internal/ClickToPay/services/ClickToPayService.js +1 -1
  208. package/dist/es-legacy/components/internal/Countdown/utils.js.map +1 -1
  209. package/dist/es-legacy/components/internal/FormFields/Checkbox/Checkbox.js +1 -1
  210. package/dist/es-legacy/components/internal/FormFields/Checkbox/Checkbox.js.map +1 -1
  211. package/dist/es-legacy/components/internal/FormFields/InputBase.js +1 -1
  212. package/dist/es-legacy/components/internal/FormFields/InputBase.js.map +1 -1
  213. package/dist/es-legacy/components/internal/FormFields/InputDate/utils.js.map +1 -1
  214. package/dist/es-legacy/components/internal/FormFields/Select/components/SelectButton.js +1 -1
  215. package/dist/es-legacy/components/internal/FormFields/Select/components/SelectButton.js.map +1 -1
  216. package/dist/es-legacy/components/internal/IbanInput/validate.js +1 -1
  217. package/dist/es-legacy/components/internal/IssuerList/IssuerList.js +1 -1
  218. package/dist/es-legacy/components/internal/IssuerList/IssuerList.js.map +1 -1
  219. package/dist/es-legacy/components/internal/OpenInvoice/useSRPanelForOpenInvoiceErrors.js +1 -1
  220. package/dist/es-legacy/components/internal/OpenInvoice/useSRPanelForOpenInvoiceErrors.js.map +1 -1
  221. package/dist/es-legacy/components/internal/PhoneInput/PhoneInputForm.js +1 -1
  222. package/dist/es-legacy/components/internal/QRLoader/QRLoader.js +1 -1
  223. package/dist/es-legacy/components/internal/SecuredFields/SFP/SecuredFieldsProvider.js +1 -1
  224. package/dist/es-legacy/components/internal/SecuredFields/SFP/SecuredFieldsProviderHandlers.js +1 -1
  225. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/extensions/createSecuredFields.js +1 -1
  226. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/extensions/createSecuredFields.js.map +1 -1
  227. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/extensions/handleConfig.js +1 -1
  228. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/extensions/handleConfig.js.map +1 -1
  229. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/extensions/handleTab.js +1 -1
  230. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/extensions/handleTab.js.map +1 -1
  231. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/partials/processAutoComplete.js.map +1 -1
  232. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/utils/iframes/postMessageValidation.js.map +1 -1
  233. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/utils/tabbing/utils.js.map +1 -1
  234. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/utils/userAgent.js +1 -1
  235. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/utils/userAgent.js.map +1 -1
  236. package/dist/es-legacy/components/internal/SecuredFields/lib/constants.js +1 -1
  237. package/dist/es-legacy/components/internal/SecuredFields/lib/constants.js.map +1 -1
  238. package/dist/es-legacy/components/internal/SecuredFields/lib/securedField/utils/processPlaceholders.js +1 -1
  239. package/dist/es-legacy/components/internal/SecuredFields/lib/securedField/utils/processPlaceholders.js.map +1 -1
  240. package/dist/es-legacy/components/internal/SecuredFields/lib/utilities/addContextTranslations.js +1 -1
  241. package/dist/es-legacy/components/internal/StoreDetails/StoreDetails.js +1 -1
  242. package/dist/es-legacy/components/internal/StoreDetails/StoreDetails.js.map +1 -1
  243. package/dist/es-legacy/components/internal/UIElement/UIElement.js +1 -1
  244. package/dist/es-legacy/components/internal/UIElement/UIElement.js.map +1 -1
  245. package/dist/es-legacy/core/Analytics/Analytics.js +1 -1
  246. package/dist/es-legacy/core/Analytics/Analytics.js.map +1 -1
  247. package/dist/es-legacy/core/Analytics/constants.js +1 -1
  248. package/dist/es-legacy/core/Analytics/constants.js.map +1 -1
  249. package/dist/es-legacy/core/Analytics/utils.js +1 -1
  250. package/dist/es-legacy/core/Errors/constants.js +1 -1
  251. package/dist/es-legacy/core/Errors/constants.js.map +1 -1
  252. package/dist/es-legacy/core/Errors/utils.js +1 -1
  253. package/dist/es-legacy/core/Errors/utils.js.map +1 -1
  254. package/dist/es-legacy/core/RiskModule/RiskModule.js +1 -1
  255. package/dist/es-legacy/core/RiskModule/components/DeviceFingerprint/utils.js +1 -1
  256. package/dist/es-legacy/core/RiskModule/constants.js +1 -1
  257. package/dist/es-legacy/core/RiskModule/constants.js.map +1 -1
  258. package/dist/es-legacy/core/Services/analytics/collect-id.js +1 -1
  259. package/dist/es-legacy/core/core.js +1 -1
  260. package/dist/es-legacy/external/preact/dist/preact.js +1 -1
  261. package/dist/es-legacy/external/preact/dist/preact.js.map +1 -1
  262. package/dist/es-legacy/external/preact/hooks/dist/hooks.js.map +1 -1
  263. package/dist/es-legacy/index.js +1 -1
  264. package/dist/es-legacy/utils/Validator/defaultRules.js +1 -1
  265. package/dist/es-legacy/utils/base64.js.map +1 -1
  266. package/dist/es-legacy/utils/browserInfo.js +1 -1
  267. package/dist/es-legacy/utils/browserInfo.js.map +1 -1
  268. package/dist/es-legacy/utils/detectInIframe.js +2 -0
  269. package/dist/es-legacy/utils/detectInIframe.js.map +1 -0
  270. package/dist/es-legacy/utils/setFocus.js +1 -1
  271. package/dist/es-legacy/utils/setFocus.js.map +1 -1
  272. package/dist/es-legacy/utils/textUtils.js +1 -1
  273. package/dist/es-legacy/utils/textUtils.js.map +1 -1
  274. package/dist/es-legacy/utils/useForm/useForm.js +1 -1
  275. package/package.json +22 -21
  276. package/styles/adyen.css +3 -3
  277. package/dist/es/components/Ach/components/AchInput/AchInput.js +0 -2
  278. package/dist/es/components/Ach/components/AchInput/AchInput.js.map +0 -1
  279. package/dist/es/components/Ach/components/AchInput/components/AchSFInput.js +0 -2
  280. package/dist/es/components/Ach/components/AchInput/components/AchSFInput.js.map +0 -1
  281. package/dist/es/components/Ach/components/AchInput/components/AchSecuredFields.js +0 -2
  282. package/dist/es/components/Ach/components/AchInput/components/AchSecuredFields.js.map +0 -1
  283. package/dist/es/components/Ach/components/AchInput/defaultProps.js +0 -2
  284. package/dist/es/components/Ach/components/AchInput/defaultProps.js.map +0 -1
  285. package/dist/es/components/Ach/components/AchInput/defaultStyles.js +0 -2
  286. package/dist/es/components/Ach/components/AchInput/defaultStyles.js.map +0 -1
  287. package/dist/es/components/internal/SecuredFields/lib/CSF/utils/tabbing/tabScenarioACH.js +0 -2
  288. package/dist/es/components/internal/SecuredFields/lib/CSF/utils/tabbing/tabScenarioACH.js.map +0 -1
  289. package/dist/es/utils/inIframe.js +0 -2
  290. package/dist/es/utils/inIframe.js.map +0 -1
  291. package/dist/es-legacy/components/Ach/components/AchInput/AchInput.js +0 -2
  292. package/dist/es-legacy/components/Ach/components/AchInput/AchInput.js.map +0 -1
  293. package/dist/es-legacy/components/Ach/components/AchInput/components/AchSFInput.js +0 -2
  294. package/dist/es-legacy/components/Ach/components/AchInput/components/AchSFInput.js.map +0 -1
  295. package/dist/es-legacy/components/Ach/components/AchInput/components/AchSecuredFields.js +0 -2
  296. package/dist/es-legacy/components/Ach/components/AchInput/components/AchSecuredFields.js.map +0 -1
  297. package/dist/es-legacy/components/Ach/components/AchInput/defaultProps.js +0 -2
  298. package/dist/es-legacy/components/Ach/components/AchInput/defaultProps.js.map +0 -1
  299. package/dist/es-legacy/components/Ach/components/AchInput/defaultStyles.js +0 -2
  300. package/dist/es-legacy/components/Ach/components/AchInput/defaultStyles.js.map +0 -1
  301. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/utils/tabbing/tabScenarioACH.js +0 -2
  302. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/utils/tabbing/tabScenarioACH.js.map +0 -1
  303. package/dist/es-legacy/utils/inIframe.js +0 -2
  304. package/dist/es-legacy/utils/inIframe.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{FIRST_NAME as t,LAST_NAME as e,COUNTRY as s,STREET as c,HOUSE_NUMBER_OR_NAME as o,POSTAL_CODE as n,CITY as m}from"../internal/Address/constants.js";const r="riverty.termsAndConditions",i=["AT","CH","DE"],d=["NO","SE","FI","DK","DE","AT","CH","NL","BE"],a=["firstName","lastName","dateOfBirth","shopperEmail","telephoneNumber"],h={default:{labels:{[t]:"deliveryAddress.firstName",[e]:"deliveryAddress.lastName"},schema:[s,[[t,50],[e,50]],[[c,70],[o,30]],[[n,30],[m,70]]]}},_={at:{en:"https://documents.riverty.com/terms_conditions/payment_methods/invoice/at_en",de:"https://documents.riverty.com/terms_conditions/payment_methods/invoice/at_de"},ch:{en:"https://documents.riverty.com/terms_conditions/payment_methods/invoice/ch_en",de:"https://documents.riverty.com/terms_conditions/payment_methods/invoice/ch_de",fr:"https://documents.riverty.com/terms_conditions/payment_methods/invoice/ch_fr"},de:{en:"https://documents.riverty.com/terms_conditions/payment_methods/invoice/de_en",de:"https://documents.riverty.com/terms_conditions/payment_methods/invoice/de_de"}},p={at:{en:"https://documents.riverty.com/privacy_statement/checkout/at_en",de:"https://documents.riverty.com/privacy_statement/checkout/at_de"},ch:{en:"https://documents.riverty.com/privacy_statement/checkout/ch_en",de:"https://documents.riverty.com/privacy_statement/checkout/h_de",fr:"https://documents.riverty.com/privacy_statement/checkout/ch_fr"},de:{en:"https://documents.riverty.com/privacy_statement/checkout/de_en",de:"https://documents.riverty.com/privacy_statement/checkout/de_de"}};export{r as DISCLAIMER_MESSAGE_TRANSLATION_KEY,i as allowedBillingCountries,d as allowedDeliveryCountries,h as deliveryAddressSpecification,a as personalDetailsRequiredFields,p as privacyPolicyUrlMap,_ as termsAndConditionsUrlMap};
1
+ import{COUNTRY as t,FIRST_NAME as e,LAST_NAME as s,STREET as c,HOUSE_NUMBER_OR_NAME as o,POSTAL_CODE as n,CITY as m}from"../internal/Address/constants.js";const r="riverty.termsAndConditions",i=["AT","CH","DE"],d=["NO","SE","FI","DK","DE","AT","CH","NL","BE"],a=["firstName","lastName","dateOfBirth","shopperEmail","telephoneNumber"],h={default:{labels:{[e]:"deliveryAddress.firstName",[s]:"deliveryAddress.lastName"},schema:[t,[[e,50],[s,50]],[[c,70],[o,30]],[[n,30],[m,70]]]}},_={at:{en:"https://documents.riverty.com/terms_conditions/payment_methods/invoice/at_en",de:"https://documents.riverty.com/terms_conditions/payment_methods/invoice/at_de"},ch:{en:"https://documents.riverty.com/terms_conditions/payment_methods/invoice/ch_en",de:"https://documents.riverty.com/terms_conditions/payment_methods/invoice/ch_de",fr:"https://documents.riverty.com/terms_conditions/payment_methods/invoice/ch_fr"},de:{en:"https://documents.riverty.com/terms_conditions/payment_methods/invoice/de_en",de:"https://documents.riverty.com/terms_conditions/payment_methods/invoice/de_de"}},p={at:{en:"https://documents.riverty.com/privacy_statement/checkout/at_en",de:"https://documents.riverty.com/privacy_statement/checkout/at_de"},ch:{en:"https://documents.riverty.com/privacy_statement/checkout/ch_en",de:"https://documents.riverty.com/privacy_statement/checkout/h_de",fr:"https://documents.riverty.com/privacy_statement/checkout/ch_fr"},de:{en:"https://documents.riverty.com/privacy_statement/checkout/de_en",de:"https://documents.riverty.com/privacy_statement/checkout/de_de"}};export{r as DISCLAIMER_MESSAGE_TRANSLATION_KEY,i as allowedBillingCountries,d as allowedDeliveryCountries,h as deliveryAddressSpecification,a as personalDetailsRequiredFields,p as privacyPolicyUrlMap,_ as termsAndConditionsUrlMap};
2
2
  //# sourceMappingURL=config.js.map
@@ -1,2 +1,2 @@
1
- import{createElement as t}from"../../external/preact/dist/preact.js";import{UIElement as e}from"../internal/UIElement/UIElement.js";import o from"./components/Challenge/PrepareChallenge3DS2.js";import{THREEDS2_ERROR as r,THREEDS2_CHALLENGE_ERROR as s,THREEDS2_FULL as n,DEFAULT_CHALLENGE_WINDOW_SIZE as i,THREEDS2_CHALLENGE as a}from"./constants.js";import{existy as p}from"../../utils/commonUtils.js";import{hasOwnProperty as l}from"../../utils/hasOwnProperty.js";import{TxVariants as m}from"../tx-variants.js";import c,{API_ERROR as u}from"../../core/Errors/AdyenCheckoutError.js";import{Analytics3DS2Errors as h,ANALYTICS_ERROR_TYPE as y,ANALYTICS_RENDERED_STR as d,Analytics3DS2Events as A}from"../../core/Analytics/constants.js";import{CoreProvider as f}from"../../core/Context/CoreProvider.js";function C(t,e,o){return e in t?Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[e]=o,t}class D extends e{onComplete(t){t&&super.onComplete(t),this.unmount()}render(){if(!p(this.props.paymentData)){const t=l(this.props,"isMDFlow")?"paymentData":"authorisationToken";return this.props.onError(new c(u,`No ${t} received. 3DS2 Challenge cannot proceed`)),this.submitAnalytics({type:r,code:h.ACTION_IS_MISSING_PAYMENT_DATA,errorType:y.apiError,message:`${s}: Missing 'paymentData' property from threeDS2 action`}),null}return t(f,{i18n:this.props.i18n,loadingContext:this.props.loadingContext,resources:this.resources},t(o,{...this.props,onComplete:this.onComplete,onSubmitAnalytics:this.submitAnalytics,isMDFlow:this.props.paymentData.length<15,onActionHandled:this.onActionHandled}))}constructor(...t){super(...t),C(this,"submitAnalytics",(t=>{t.type!==d&&super.submitAnalytics(t)})),C(this,"onActionHandled",(t=>{this.submitAnalytics({type:n,message:t.actionDescription,subtype:A.CHALLENGE_IFRAME_LOADED}),super.onActionHandled(t)}))}}C(D,"type",m.threeDS2Challenge),C(D,"defaultProps",{dataKey:"threeDSResult",size:i,type:a});export{D as default};
1
+ import{createElement as t}from"../../external/preact/dist/preact.js";import{UIElement as e}from"../internal/UIElement/UIElement.js";import o from"./components/Challenge/PrepareChallenge3DS2.js";import{THREEDS2_CHALLENGE_ERROR as r,THREEDS2_ERROR as s,THREEDS2_FULL as n,THREEDS2_CHALLENGE as i,DEFAULT_CHALLENGE_WINDOW_SIZE as a}from"./constants.js";import{existy as p}from"../../utils/commonUtils.js";import{hasOwnProperty as l}from"../../utils/hasOwnProperty.js";import{TxVariants as m}from"../tx-variants.js";import c,{API_ERROR as u}from"../../core/Errors/AdyenCheckoutError.js";import{ANALYTICS_ERROR_TYPE as h,Analytics3DS2Errors as y,ANALYTICS_RENDERED_STR as d,Analytics3DS2Events as A}from"../../core/Analytics/constants.js";import{CoreProvider as f}from"../../core/Context/CoreProvider.js";function C(t,e,o){return e in t?Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[e]=o,t}class D extends e{onComplete(t){t&&super.onComplete(t),this.unmount()}render(){if(!p(this.props.paymentData)){const t=l(this.props,"isMDFlow")?"paymentData":"authorisationToken";return this.props.onError(new c(u,`No ${t} received. 3DS2 Challenge cannot proceed`)),this.submitAnalytics({type:s,code:y.ACTION_IS_MISSING_PAYMENT_DATA,errorType:h.apiError,message:`${r}: Missing 'paymentData' property from threeDS2 action`}),null}return t(f,{i18n:this.props.i18n,loadingContext:this.props.loadingContext,resources:this.resources},t(o,{...this.props,onComplete:this.onComplete,onSubmitAnalytics:this.submitAnalytics,isMDFlow:this.props.paymentData.length<15,onActionHandled:this.onActionHandled}))}constructor(...t){super(...t),C(this,"submitAnalytics",(t=>{t.type!==d&&super.submitAnalytics(t)})),C(this,"onActionHandled",(t=>{this.submitAnalytics({type:n,message:t.actionDescription,subtype:A.CHALLENGE_IFRAME_LOADED}),super.onActionHandled(t)}))}}C(D,"type",m.threeDS2Challenge),C(D,"defaultProps",{dataKey:"threeDSResult",size:a,type:i});export{D as default};
2
2
  //# sourceMappingURL=ThreeDS2Challenge.js.map
@@ -1,2 +1,2 @@
1
- import{createElement as t}from"../../external/preact/dist/preact.js";import{UIElement as e}from"../internal/UIElement/UIElement.js";import r from"./components/DeviceFingerprint/PrepareFingerprint3DS2.js";import i from"./callSubmit3DS2Fingerprint.js";import{existy as n}from"../../utils/commonUtils.js";import{TxVariants as o}from"../tx-variants.js";import s,{API_ERROR as p}from"../../core/Errors/AdyenCheckoutError.js";import{Analytics3DS2Errors as a,ANALYTICS_ERROR_TYPE as m,ANALYTICS_RENDERED_STR as l,Analytics3DS2Events as c}from"../../core/Analytics/constants.js";import{THREEDS2_ERROR as u,THREEDS2_FINGERPRINT_ERROR as y,THREEDS2_FULL as d,THREEDS2_FINGERPRINT as h}from"./constants.js";function A(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}class D extends e{onComplete(t){super.onComplete(t),this.unmount()}render(){return n(this.props.paymentData)?t(r,{...this.props,onComplete:this.props.isMDFlow?this.onComplete:this.callSubmit3DS2Fingerprint,onSubmitAnalytics:this.submitAnalytics,isMDFlow:this.props.paymentData.length<15,onActionHandled:this.onActionHandled}):(this.props.onError(new s(p,"No paymentData received. 3DS2 Fingerprint cannot proceed")),this.submitAnalytics({type:u,code:a.ACTION_IS_MISSING_PAYMENT_DATA,errorType:m.apiError,message:`${y}: Missing 'paymentData' property from threeDS2 action`}),null)}constructor(...t){super(...t),A(this,"callSubmit3DS2Fingerprint",i.bind(this)),A(this,"submitAnalytics",(t=>{t.type!==l&&super.submitAnalytics(t)})),A(this,"onActionHandled",(t=>{this.submitAnalytics({type:d,message:t.actionDescription,subtype:c.FINGERPRINT_IFRAME_LOADED}),super.onActionHandled(t)}))}}A(D,"type",o.threeDS2Fingerprint),A(D,"defaultProps",{dataKey:"fingerprintResult",type:h});export{D as default};
1
+ import{createElement as t}from"../../external/preact/dist/preact.js";import{UIElement as e}from"../internal/UIElement/UIElement.js";import r from"./components/DeviceFingerprint/PrepareFingerprint3DS2.js";import i from"./callSubmit3DS2Fingerprint.js";import{existy as n}from"../../utils/commonUtils.js";import{TxVariants as o}from"../tx-variants.js";import s,{API_ERROR as p}from"../../core/Errors/AdyenCheckoutError.js";import{ANALYTICS_ERROR_TYPE as a,Analytics3DS2Errors as m,ANALYTICS_RENDERED_STR as l,Analytics3DS2Events as c}from"../../core/Analytics/constants.js";import{THREEDS2_FINGERPRINT_ERROR as u,THREEDS2_ERROR as y,THREEDS2_FULL as d,THREEDS2_FINGERPRINT as h}from"./constants.js";function A(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}class D extends e{onComplete(t){super.onComplete(t),this.unmount()}render(){return n(this.props.paymentData)?t(r,{...this.props,onComplete:this.props.isMDFlow?this.onComplete:this.callSubmit3DS2Fingerprint,onSubmitAnalytics:this.submitAnalytics,isMDFlow:this.props.paymentData.length<15,onActionHandled:this.onActionHandled}):(this.props.onError(new s(p,"No paymentData received. 3DS2 Fingerprint cannot proceed")),this.submitAnalytics({type:y,code:m.ACTION_IS_MISSING_PAYMENT_DATA,errorType:a.apiError,message:`${u}: Missing 'paymentData' property from threeDS2 action`}),null)}constructor(...t){super(...t),A(this,"callSubmit3DS2Fingerprint",i.bind(this)),A(this,"submitAnalytics",(t=>{t.type!==l&&super.submitAnalytics(t)})),A(this,"onActionHandled",(t=>{this.submitAnalytics({type:d,message:t.actionDescription,subtype:c.FINGERPRINT_IFRAME_LOADED}),super.onActionHandled(t)}))}}A(D,"type",o.threeDS2Fingerprint),A(D,"defaultProps",{dataKey:"fingerprintResult",type:h});export{D as default};
2
2
  //# sourceMappingURL=ThreeDS2DeviceFingerprint.js.map
@@ -1,2 +1,2 @@
1
- import{httpPost as e}from"../../core/Services/http.js";import{pick as t}from"../../utils/commonUtils.js";import{THREEDS2_ERROR as o,THREEDS2_FINGERPRINT_SUBMIT as i}from"./constants.js";import{Analytics3DS2Errors as r,ANALYTICS_ERROR_TYPE as n}from"../../core/Analytics/constants.js";import{API_ERROR_CODE as s}from"../../core/Services/sessions/constants.js";function a({data:a}){e({path:`v1/submitThreeDS2Fingerprint?token=${this.props.clientKey}`,loadingContext:this.props.loadingContext,errorLevel:"fatal",errorCode:s.submitThreeDS2Fingerprint},{...a}).then((e=>{let s;if("completed"===e.type){const{details:t}=e;return e.details?this.onComplete({data:{details:t}}):(console.debug('Handled Error::callSubmit3DS2Fingerprint::FAILED:: no details object in a response indicating either a "frictionless" flow, or a "refused" response. resData=',e),s={type:o,code:r.NO_DETAILS_FOR_FRICTIONLESS_OR_REFUSED,errorType:n.apiError,message:`${i}: no details object in a response indicating either a "frictionless" flow, or a "refused" response`},void this.submitAnalytics(s))}if(!e.action)return console.debug('Handled Error::callSubmit3DS2Fingerprint::FAILED:: no action object in a response indicating a "challenge". resData=',e),s={type:o,code:r.NO_ACTION_FOR_CHALLENGE,errorType:n.apiError,message:`${i}: no action object in a response indicating a "challenge" flow`},void this.submitAnalytics(s);const a=this.props.elementRef??this;return a?"threeDS2"===e.action?.type?a.handleAction(e.action,t("challengeWindowSize").from(this.props)):"redirect"===e.action?.type?a.handleAction(e.action):void 0:(console.debug("Handled Error::callSubmit3DS2Fingerprint::FAILED:: no actionHandler"),s={type:o,code:r.NO_COMPONENT_FOR_ACTION,errorType:n.sdkError,message:`${i}: no component defined to handle the action response`},void this.submitAnalytics(s))})).catch((e=>{this.handleError(e)}))}export{a as default};
1
+ import{httpPost as e}from"../../core/Services/http.js";import{pick as t}from"../../utils/commonUtils.js";import{THREEDS2_FINGERPRINT_SUBMIT as o,THREEDS2_ERROR as i}from"./constants.js";import{ANALYTICS_ERROR_TYPE as r,Analytics3DS2Errors as n}from"../../core/Analytics/constants.js";import{API_ERROR_CODE as s}from"../../core/Services/sessions/constants.js";function a({data:a}){e({path:`v1/submitThreeDS2Fingerprint?token=${this.props.clientKey}`,loadingContext:this.props.loadingContext,errorLevel:"fatal",errorCode:s.submitThreeDS2Fingerprint},{...a}).then((e=>{let s;if("completed"===e.type){const{details:t}=e;return e.details?this.onComplete({data:{details:t}}):(console.debug('Handled Error::callSubmit3DS2Fingerprint::FAILED:: no details object in a response indicating either a "frictionless" flow, or a "refused" response. resData=',e),s={type:i,code:n.NO_DETAILS_FOR_FRICTIONLESS_OR_REFUSED,errorType:r.apiError,message:`${o}: no details object in a response indicating either a "frictionless" flow, or a "refused" response`},void this.submitAnalytics(s))}if(!e.action)return console.debug('Handled Error::callSubmit3DS2Fingerprint::FAILED:: no action object in a response indicating a "challenge". resData=',e),s={type:i,code:n.NO_ACTION_FOR_CHALLENGE,errorType:r.apiError,message:`${o}: no action object in a response indicating a "challenge" flow`},void this.submitAnalytics(s);const a=this.props.elementRef??this;return a?"threeDS2"===e.action?.type?a.handleAction(e.action,t("challengeWindowSize").from(this.props)):"redirect"===e.action?.type?a.handleAction(e.action):void 0:(console.debug("Handled Error::callSubmit3DS2Fingerprint::FAILED:: no actionHandler"),s={type:i,code:n.NO_COMPONENT_FOR_ACTION,errorType:r.sdkError,message:`${o}: no component defined to handle the action response`},void this.submitAnalytics(s))})).catch((e=>{this.handleError(e)}))}export{a as default};
2
2
  //# sourceMappingURL=callSubmit3DS2Fingerprint.js.map
@@ -1,2 +1,2 @@
1
- import{Component as e,createElement as s}from"../../../../external/preact/dist/preact.js";import t from"../../../../_virtual/index.js";import r from"../../../internal/IFrame/Iframe.js";import a from"../../../internal/Spinner/Spinner.js";import n from"../Form/ThreeDS2Form.js";import i from"../../../../utils/get-process-message-handler.js";import{encodeBase64URL as o}from"../utils.js";import l from"../../../../utils/promiseTimeout.js";import{CHALLENGE_TIMEOUT_REJECT_OBJECT as m,CHALLENGE_TIMEOUT as c,THREEDS2_NUM as h}from"../../constants.js";function p(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}const d="threeDSIframe";class g extends e{get3DS2ChallengePromise(){return new Promise(((e,s)=>{this.processMessageHandler=i(this.props.postMessageDomain,e,s,"challengeResult"),window.addEventListener("message",this.processMessageHandler)}))}componentDidMount(){this.challengePromise=l(c,this.get3DS2ChallengePromise(),m),this.challengePromise.promise.then((e=>{window.removeEventListener("message",this.processMessageHandler),this.props.onCompleteChallenge(e)})).catch((e=>{window.removeEventListener("message",this.processMessageHandler),this.props.onErrorChallenge(e)}))}componentWillUnmount(){this.challengePromise&&this.challengePromise.cancel(),window.removeEventListener("message",this.processMessageHandler)}render({acsURL:e,cReqData:i,iframeSizeArr:o,onFormSubmit:l},{base64URLencodedData:m,status:c}){const[h,p]=o;return s("div",{className:t(["adyen-checkout__threeds2__challenge",`adyen-checkout__threeds2__challenge--${i.challengeWindowSize}`])},"iframeLoaded"!==c&&s(a,null),s(r,{name:d,width:h,height:p,callback:this.iframeCallback}),s(n,{name:"cReqForm",action:e,target:d,inputName:"creq",inputValue:m,onFormSubmit:l}))}constructor(e){super(e),p(this,"processMessageHandler",void 0),p(this,"challengePromise",void 0),p(this,"iframeCallback",(()=>{this.setState({status:"iframeLoaded"}),"init"===this.state.status&&this.props.onActionHandled?.({componentType:"3DS2Challenge",actionDescription:`${h} challenge iframe loaded`})}));const s=JSON.stringify(this.props.cReqData),t=o(s);this.state={base64URLencodedData:t,status:"init"}}}export{g as default};
1
+ import{Component as e,createElement as s}from"../../../../external/preact/dist/preact.js";import t from"../../../../_virtual/index.js";import r from"../../../internal/IFrame/Iframe.js";import a from"../../../internal/Spinner/Spinner.js";import n from"../Form/ThreeDS2Form.js";import i from"../../../../utils/get-process-message-handler.js";import{encodeBase64URL as o}from"../utils.js";import l from"../../../../utils/promiseTimeout.js";import{CHALLENGE_TIMEOUT as m,CHALLENGE_TIMEOUT_REJECT_OBJECT as c,THREEDS2_NUM as h}from"../../constants.js";function p(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}const d="threeDSIframe";class g extends e{get3DS2ChallengePromise(){return new Promise(((e,s)=>{this.processMessageHandler=i(this.props.postMessageDomain,e,s,"challengeResult"),window.addEventListener("message",this.processMessageHandler)}))}componentDidMount(){this.challengePromise=l(m,this.get3DS2ChallengePromise(),c),this.challengePromise.promise.then((e=>{window.removeEventListener("message",this.processMessageHandler),this.props.onCompleteChallenge(e)})).catch((e=>{window.removeEventListener("message",this.processMessageHandler),this.props.onErrorChallenge(e)}))}componentWillUnmount(){this.challengePromise&&this.challengePromise.cancel(),window.removeEventListener("message",this.processMessageHandler)}render({acsURL:e,cReqData:i,iframeSizeArr:o,onFormSubmit:l},{base64URLencodedData:m,status:c}){const[h,p]=o;return s("div",{className:t(["adyen-checkout__threeds2__challenge",`adyen-checkout__threeds2__challenge--${i.challengeWindowSize}`])},"iframeLoaded"!==c&&s(a,null),s(r,{name:d,width:h,height:p,callback:this.iframeCallback}),s(n,{name:"cReqForm",action:e,target:d,inputName:"creq",inputValue:m,onFormSubmit:l}))}constructor(e){super(e),p(this,"processMessageHandler",void 0),p(this,"challengePromise",void 0),p(this,"iframeCallback",(()=>{this.setState({status:"iframeLoaded"}),"init"===this.state.status&&this.props.onActionHandled?.({componentType:"3DS2Challenge",actionDescription:`${h} challenge iframe loaded`})}));const s=JSON.stringify(this.props.cReqData),t=o(s);this.state={base64URLencodedData:t,status:"init"}}}export{g as default};
2
2
  //# sourceMappingURL=DoChallenge3DS2.js.map
@@ -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,createOldChallengeResolveData as o,createChallengeResolveData as n,prepareChallengeData as i}from"../utils.js";import a from"../../../internal/Img/Img.js";import{hasOwnProperty as l}from"../../../../utils/hasOwnProperty.js";import p from"../../../../core/Context/useImage.js";import c,{ERROR as h}from"../../../../core/Errors/AdyenCheckoutError.js";import{THREEDS2_ERROR as u,THREEDS2_CHALLENGE_ERROR as m,MISSING_TOKEN_IN_ACTION_MSG as d,THREEDS2_FULL as g,THREEDS2_NUM as S,THREEDS2_CHALLENGE as _}from"../../constants.js";import{isValidHttpUrl as E}from"../../../../utils/isValidURL.js";import{Analytics3DS2Errors as D,ANALYTICS_ERROR_TYPE as C,Analytics3DS2Events as I}from"../../../../core/Analytics/constants.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 T extends e{componentDidMount(){if(!s(this.state.challengeData)){const e="test"===this.props.environment&&this.props._environmentUrls?.api?.includes("http://localhost:8080"),{acsURL:r}=this.state.challengeData;if(!E(r,e)){this.setError({errorInfo:`${D.TOKEN_IS_MISSING_ACSURL}: ${this.props.i18n.get("err.gen.9102")}`},!0);const e={type:u,code:D.TOKEN_IS_MISSING_ACSURL,errorType:C.apiError,message:`${m}: Decoded token is missing a valid acsURL property`};return this.props.onSubmitAnalytics(e),void console.debug("### PrepareChallenge3DS2::exiting:: no valid acsURL")}const{acsTransID:t,messageVersion:s,threeDSServerTransID:o}=this.state.challengeData.cReqData;if(!t||!s||!o)return this.setError({errorInfo:`${D.TOKEN_IS_MISSING_OTHER_PROPS}: ${this.props.i18n.get("err.gen.9102")}`},!0),this.props.onSubmitAnalytics({type:u,code:D.TOKEN_IS_MISSING_OTHER_PROPS,errorType:C.apiError,message:`${m}: Decoded token is missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)`}),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.indexOf(d)>-1?D.ACTION_IS_MISSING_TOKEN:D.TOKEN_DECODE_OR_PARSING_FAILED;this.setError({errorInfo:e.indexOf(d)>-1?`${D.ACTION_IS_MISSING_TOKEN}: ${this.props.i18n.get("err.gen.9102")}`:`${D.TOKEN_DECODE_OR_PARSING_FAILED}: ${this.props.i18n.get("err.gen.9102")}`},!0),this.props.onSubmitAnalytics({type:u,code:r,errorType:C.apiError,message:`${m}: ${e}`}),console.debug("### PrepareChallenge3DS2::exiting:: no challengeData")}}setStatusComplete(e,r=null){this.setState({status:"complete"},(()=>{const t=(this.props.isMDFlow?o:n)(this.props.dataKey,e.transStatus,this.props.paymentData);let s;r&&console.debug("### PrepareChallenge3DS2::errorCodeObject::",r);const i=r||e;if(i.errorCode){const e={code:"timeout"===i.errorCode?D.THREEDS2_TIMEOUT:D.NO_TRANSSTATUS,errorType:"timeout"===i.errorCode?C.network:C.apiError};s={type:u,message:i.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={type:g,message:`${S} challenge has completed`,subtype:I.CHALLENGE_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 c(h,e.errorInfo,{cause:e.errorObj}))}render(e,{challengeData:s}){const o=p();return"performingChallenge"===this.state.status?r(t,{onCompleteChallenge:e=>{let r=null;if(l(e.result,"errorCode")&&e.result.errorCode.length&&(r={errorCode:e.result.errorCode,message:`${m}: ${e.result.errorDescription?e.result.errorDescription:"no transStatus could be retrieved"}`},this.props.isMDFlow&&this.props.onError(new c(h,`${m}: ${e.result.errorDescription?e.result.errorDescription:"no transStatus could be retrieved"}`,{cause:e.result.errorCode}))),!e.result)return this.setError({errorInfo:`${m}: ${this.props.i18n.get("3ds.chal.805",{values:{result:'"result"'}})}`,errorObj:e},!0),this.props.onSubmitAnalytics({type:u,code:D.CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP,errorType:C.apiError,message:`${m}: challenge resolved without a "result" object`}),void console.debug('### PrepareChallenge3DS2::exiting:: challenge resolved without a "result" object');this.setStatusComplete(e.result,r)},onErrorChallenge:e=>{if(l(e,"errorCode")){const r={errorCode:e.errorCode,message:`${_}: ${e.errorCode}`};return this.props.isMDFlow&&this.props.onError(new c(h,`${m}: '3DS2 challenge timed out'`,{cause:e.errorCode})),void this.setStatusComplete(e.result,r)}},...s,onActionHandled:this.props.onActionHandled,onFormSubmit:this.onFormSubmit}):"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:o({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=>{this.props.onSubmitAnalytics({type:g,message:e,subtype:I.CHALLENGE_DATA_SENT})})),this.props.token){const e=i({token:this.props.token,size:this.props.challengeWindowSize||this.props.size});this.state={status:"init",challengeData:e}}else this.state={challengeData:{success:!1,error:d}},console.debug(`${m}: ${d}`)}}f(T,"defaultProps",{onComplete:()=>{},onError:()=>{},isMDFlow:!1});export{T as default};
1
+ import{Component as e,createElement as r}from"../../../../external/preact/dist/preact.js";import t from"./DoChallenge3DS2.js";import{isErrorObject as s,createOldChallengeResolveData as o,createChallengeResolveData as n,prepareChallengeData as i}from"../utils.js";import a from"../../../internal/Img/Img.js";import{hasOwnProperty as l}from"../../../../utils/hasOwnProperty.js";import p from"../../../../core/Context/useImage.js";import c,{ERROR as h}from"../../../../core/Errors/AdyenCheckoutError.js";import{THREEDS2_CHALLENGE_ERROR as u,THREEDS2_ERROR as m,MISSING_TOKEN_IN_ACTION_MSG as d,THREEDS2_NUM as g,THREEDS2_FULL as S,THREEDS2_CHALLENGE as _}from"../../constants.js";import{isValidHttpUrl as E}from"../../../../utils/isValidURL.js";import{Analytics3DS2Errors as D,ANALYTICS_ERROR_TYPE as C,Analytics3DS2Events as I}from"../../../../core/Analytics/constants.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 T extends e{componentDidMount(){if(!s(this.state.challengeData)){const e="test"===this.props.environment&&this.props._environmentUrls?.api?.includes("http://localhost:8080"),{acsURL:r}=this.state.challengeData;if(!E(r,e)){this.setError({errorInfo:`${D.TOKEN_IS_MISSING_ACSURL}: ${this.props.i18n.get("err.gen.9102")}`},!0);const e={type:m,code:D.TOKEN_IS_MISSING_ACSURL,errorType:C.apiError,message:`${u}: Decoded token is missing a valid acsURL property`};return this.props.onSubmitAnalytics(e),void console.debug("### PrepareChallenge3DS2::exiting:: no valid acsURL")}const{acsTransID:t,messageVersion:s,threeDSServerTransID:o}=this.state.challengeData.cReqData;if(!t||!s||!o)return this.setError({errorInfo:`${D.TOKEN_IS_MISSING_OTHER_PROPS}: ${this.props.i18n.get("err.gen.9102")}`},!0),this.props.onSubmitAnalytics({type:m,code:D.TOKEN_IS_MISSING_OTHER_PROPS,errorType:C.apiError,message:`${u}: Decoded token is missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)`}),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.indexOf(d)>-1?D.ACTION_IS_MISSING_TOKEN:D.TOKEN_DECODE_OR_PARSING_FAILED;this.setError({errorInfo:e.indexOf(d)>-1?`${D.ACTION_IS_MISSING_TOKEN}: ${this.props.i18n.get("err.gen.9102")}`:`${D.TOKEN_DECODE_OR_PARSING_FAILED}: ${this.props.i18n.get("err.gen.9102")}`},!0),this.props.onSubmitAnalytics({type:m,code:r,errorType:C.apiError,message:`${u}: ${e}`}),console.debug("### PrepareChallenge3DS2::exiting:: no challengeData")}}setStatusComplete(e,r=null){this.setState({status:"complete"},(()=>{const t=(this.props.isMDFlow?o:n)(this.props.dataKey,e.transStatus,this.props.paymentData);let s;r&&console.debug("### PrepareChallenge3DS2::errorCodeObject::",r);const i=r||e;if(i.errorCode){const e={code:"timeout"===i.errorCode?D.THREEDS2_TIMEOUT:D.NO_TRANSSTATUS,errorType:"timeout"===i.errorCode?C.network:C.apiError};s={type:m,message:i.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={type:S,message:`${g} challenge has completed`,subtype:I.CHALLENGE_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 c(h,e.errorInfo,{cause:e.errorObj}))}render(e,{challengeData:s}){const o=p();return"performingChallenge"===this.state.status?r(t,{onCompleteChallenge:e=>{let r=null;if(l(e.result,"errorCode")&&e.result.errorCode.length&&(r={errorCode:e.result.errorCode,message:`${u}: ${e.result.errorDescription?e.result.errorDescription:"no transStatus could be retrieved"}`},this.props.isMDFlow&&this.props.onError(new c(h,`${u}: ${e.result.errorDescription?e.result.errorDescription:"no transStatus could be retrieved"}`,{cause:e.result.errorCode}))),!e.result)return this.setError({errorInfo:`${u}: ${this.props.i18n.get("3ds.chal.805",{values:{result:'"result"'}})}`,errorObj:e},!0),this.props.onSubmitAnalytics({type:m,code:D.CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP,errorType:C.apiError,message:`${u}: challenge resolved without a "result" object`}),void console.debug('### PrepareChallenge3DS2::exiting:: challenge resolved without a "result" object');this.setStatusComplete(e.result,r)},onErrorChallenge:e=>{if(l(e,"errorCode")){const r={errorCode:e.errorCode,message:`${_}: ${e.errorCode}`};return this.props.isMDFlow&&this.props.onError(new c(h,`${u}: '3DS2 challenge timed out'`,{cause:e.errorCode})),void this.setStatusComplete(e.result,r)}},...s,onActionHandled:this.props.onActionHandled,onFormSubmit:this.onFormSubmit}):"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:o({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=>{this.props.onSubmitAnalytics({type:S,message:e,subtype:I.CHALLENGE_DATA_SENT})})),this.props.token){const e=i({token:this.props.token,size:this.props.challengeWindowSize||this.props.size});this.state={status:"init",challengeData:e}}else this.state={challengeData:{success:!1,error:d}},console.debug(`${u}: ${d}`)}}f(T,"defaultProps",{onComplete:()=>{},onError:()=>{},isMDFlow:!1});export{T 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, createOldChallengeResolveData, isErrorObject } from '../utils';\nimport { PrepareChallenge3DS2Props, PrepareChallenge3DS2State, StatusErrorInfoObject } from './types';\nimport { ChallengeData, ResultObject, ThreeDS2FlowObject, ErrorCodeObject } 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 { SendAnalyticsObject } from '../../../../core/Analytics/types';\nimport {\n THREEDS2_CHALLENGE,\n THREEDS2_CHALLENGE_ERROR,\n THREEDS2_FULL,\n THREEDS2_NUM,\n MISSING_TOKEN_IN_ACTION_MSG,\n THREEDS2_ERROR\n} from '../../constants';\nimport { isValidHttpUrl } from '../../../../utils/isValidURL';\nimport { ANALYTICS_ERROR_TYPE, Analytics3DS2Errors, Analytics3DS2Events } from '../../../../core/Analytics/constants';\nimport { ErrorObject } from '../../../../core/Errors/types';\n\nclass PrepareChallenge3DS2 extends Component<PrepareChallenge3DS2Props, PrepareChallenge3DS2State> {\n public static 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: challengeData as 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 this.props.onSubmitAnalytics({\n type: THREEDS2_FULL,\n message: msg,\n subtype: Analytics3DS2Events.CHALLENGE_DATA_SENT\n });\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__?.indexOf('localhost:8080') > -1) ||\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 } = this.state.challengeData as ChallengeData;\n const hasValidAcsURL = isValidHttpUrl(acsURL, shouldAllowHttpDomains);\n\n // Only render component if we have an acsURL.\n if (!hasValidAcsURL) {\n // Set UI error & call onError callback\n this.setError(\n {\n errorInfo: `${Analytics3DS2Errors.TOKEN_IS_MISSING_ACSURL}: ${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 errorCodeObject: SendAnalyticsObject = {\n type: THREEDS2_ERROR,\n code: Analytics3DS2Errors.TOKEN_IS_MISSING_ACSURL,\n errorType: ANALYTICS_ERROR_TYPE.apiError,\n message: `${THREEDS2_CHALLENGE_ERROR}: Decoded token is missing a valid acsURL property`\n // metadata: { acsURL } // NEW TODO - check acsURL isn't secret\n };\n this.props.onSubmitAnalytics(errorCodeObject);\n\n console.debug('### PrepareChallenge3DS2::exiting:: no valid acsURL');\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: `${Analytics3DS2Errors.TOKEN_IS_MISSING_OTHER_PROPS}: ${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 this *ever* happens\n this.props.onSubmitAnalytics({\n type: THREEDS2_ERROR,\n code: Analytics3DS2Errors.TOKEN_IS_MISSING_OTHER_PROPS,\n errorType: ANALYTICS_ERROR_TYPE.apiError,\n message: `${THREEDS2_CHALLENGE_ERROR}: Decoded token is missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)`\n } as SendAnalyticsObject);\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 =\n errorMsg.indexOf(MISSING_TOKEN_IN_ACTION_MSG) > -1\n ? Analytics3DS2Errors.ACTION_IS_MISSING_TOKEN\n : Analytics3DS2Errors.TOKEN_DECODE_OR_PARSING_FAILED;\n\n // Set UI error & call onError callback\n this.setError(\n {\n errorInfo:\n errorMsg.indexOf(MISSING_TOKEN_IN_ACTION_MSG) > -1\n ? `${Analytics3DS2Errors.ACTION_IS_MISSING_TOKEN}: ${this.props.i18n.get('err.gen.9102')}`\n : `${Analytics3DS2Errors.TOKEN_DECODE_OR_PARSING_FAILED}: ${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 this.props.onSubmitAnalytics({\n type: THREEDS2_ERROR,\n code: errorCode,\n errorType: ANALYTICS_ERROR_TYPE.apiError,\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 console.debug('### PrepareChallenge3DS2::exiting:: no challengeData');\n }\n }\n\n setStatusComplete(resultObj: ResultObject, errorCodeObject: ErrorCodeObject = null) {\n this.setState({ status: 'complete' }, () => {\n /**\n * Create the data in the way that the /details endpoint expects.\n * This is different for the flow triggered by the threeds2InMDFlow process than for the new, v67, 'threeDS2' action\n */\n const resolveDataFunction = this.props.isMDFlow ? createOldChallengeResolveData : createChallengeResolveData;\n const data = resolveDataFunction(this.props.dataKey, resultObj.transStatus, this.props.paymentData);\n\n if (errorCodeObject) {\n console.debug('### PrepareChallenge3DS2::errorCodeObject::', errorCodeObject);\n }\n\n let analyticsObject: SendAnalyticsObject;\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' ? Analytics3DS2Errors.THREEDS2_TIMEOUT : Analytics3DS2Errors.NO_TRANSSTATUS,\n errorType: finalResObject.errorCode === 'timeout' ? ANALYTICS_ERROR_TYPE.network : ANALYTICS_ERROR_TYPE.apiError\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 analyticsObject = {\n type: THREEDS2_ERROR,\n message: (finalResObject as ErrorCodeObject).message,\n ...errorTypeAndCode\n };\n\n // Send error to analytics endpoint\n this.props.onSubmitAnalytics(analyticsObject);\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 analyticsObject = {\n type: THREEDS2_FULL,\n message: `${THREEDS2_NUM} challenge has completed`,\n subtype: Analytics3DS2Events.CHALLENGE_COMPLETED,\n result\n };\n\n // Send log to analytics endpoint\n this.props.onSubmitAnalytics(analyticsObject);\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 }) {\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 this.props.onSubmitAnalytics({\n type: THREEDS2_ERROR,\n code: Analytics3DS2Errors.CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP,\n errorType: ANALYTICS_ERROR_TYPE.apiError,\n message: `${THREEDS2_CHALLENGE_ERROR}: challenge resolved without a \"result\" object`\n });\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 />\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","isValidHttpUrl","setError","errorInfo","Analytics3DS2Errors","TOKEN_IS_MISSING_ACSURL","i18n","get","errorCodeObject","type","THREEDS2_ERROR","code","errorType","ANALYTICS_ERROR_TYPE","apiError","message","THREEDS2_CHALLENGE_ERROR","onSubmitAnalytics","console","debug","acsTransID","messageVersion","threeDSServerTransID","cReqData","TOKEN_IS_MISSING_OTHER_PROPS","setState","status","errorMsg","error","errorCode","indexOf","MISSING_TOKEN_IN_ACTION_MSG","ACTION_IS_MISSING_TOKEN","TOKEN_DECODE_OR_PARSING_FAILED","setStatusComplete","resultObj","data","isMDFlow","createOldChallengeResolveData","createChallengeResolveData","dataKey","transStatus","paymentData","analyticsObject","finalResObject","errorTypeAndCode","THREEDS2_TIMEOUT","NO_TRANSSTATUS","network","result","THREEDS2_FULL","THREEDS2_NUM","subtype","Analytics3DS2Events","CHALLENGE_COMPLETED","onComplete","errorInfoObj","isFatal","onError","AdyenCheckoutError","ERROR","cause","errorObj","render","_","getImage","useImage","h","DoChallenge3DS2","onCompleteChallenge","challenge","hasOwnProperty","length","errorDescription","values","CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP","onErrorChallenge","timeoutObject","THREEDS2_CHALLENGE","onActionHandled","onFormSubmit","div","className","Img","src","imageFolder","alt","constructor","super","_define_property","msg","CHALLENGE_DATA_SENT","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, createOldChallengeResolveData, isErrorObject } from '../utils';\nimport { PrepareChallenge3DS2Props, PrepareChallenge3DS2State, StatusErrorInfoObject } from './types';\nimport { ChallengeData, ResultObject, ThreeDS2FlowObject, ErrorCodeObject } 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 { SendAnalyticsObject } from '../../../../core/Analytics/types';\nimport {\n THREEDS2_CHALLENGE,\n THREEDS2_CHALLENGE_ERROR,\n THREEDS2_FULL,\n THREEDS2_NUM,\n MISSING_TOKEN_IN_ACTION_MSG,\n THREEDS2_ERROR\n} from '../../constants';\nimport { isValidHttpUrl } from '../../../../utils/isValidURL';\nimport { ANALYTICS_ERROR_TYPE, Analytics3DS2Errors, Analytics3DS2Events } from '../../../../core/Analytics/constants';\nimport { ErrorObject } from '../../../../core/Errors/types';\n\nclass PrepareChallenge3DS2 extends Component<PrepareChallenge3DS2Props, PrepareChallenge3DS2State> {\n public static 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: challengeData as 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 this.props.onSubmitAnalytics({\n type: THREEDS2_FULL,\n message: msg,\n subtype: Analytics3DS2Events.CHALLENGE_DATA_SENT\n });\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__?.indexOf('localhost:8080') > -1) ||\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 } = this.state.challengeData as ChallengeData;\n const hasValidAcsURL = isValidHttpUrl(acsURL, shouldAllowHttpDomains);\n\n // Only render component if we have an acsURL.\n if (!hasValidAcsURL) {\n // Set UI error & call onError callback\n this.setError(\n {\n errorInfo: `${Analytics3DS2Errors.TOKEN_IS_MISSING_ACSURL}: ${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 errorCodeObject: SendAnalyticsObject = {\n type: THREEDS2_ERROR,\n code: Analytics3DS2Errors.TOKEN_IS_MISSING_ACSURL,\n errorType: ANALYTICS_ERROR_TYPE.apiError,\n message: `${THREEDS2_CHALLENGE_ERROR}: Decoded token is missing a valid acsURL property`\n // metadata: { acsURL } // NEW TODO - check acsURL isn't secret\n };\n this.props.onSubmitAnalytics(errorCodeObject);\n\n console.debug('### PrepareChallenge3DS2::exiting:: no valid acsURL');\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: `${Analytics3DS2Errors.TOKEN_IS_MISSING_OTHER_PROPS}: ${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 this *ever* happens\n this.props.onSubmitAnalytics({\n type: THREEDS2_ERROR,\n code: Analytics3DS2Errors.TOKEN_IS_MISSING_OTHER_PROPS,\n errorType: ANALYTICS_ERROR_TYPE.apiError,\n message: `${THREEDS2_CHALLENGE_ERROR}: Decoded token is missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)`\n } as SendAnalyticsObject);\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 =\n errorMsg.indexOf(MISSING_TOKEN_IN_ACTION_MSG) > -1\n ? Analytics3DS2Errors.ACTION_IS_MISSING_TOKEN\n : Analytics3DS2Errors.TOKEN_DECODE_OR_PARSING_FAILED;\n\n // Set UI error & call onError callback\n this.setError(\n {\n errorInfo:\n errorMsg.indexOf(MISSING_TOKEN_IN_ACTION_MSG) > -1\n ? `${Analytics3DS2Errors.ACTION_IS_MISSING_TOKEN}: ${this.props.i18n.get('err.gen.9102')}`\n : `${Analytics3DS2Errors.TOKEN_DECODE_OR_PARSING_FAILED}: ${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 this.props.onSubmitAnalytics({\n type: THREEDS2_ERROR,\n code: errorCode,\n errorType: ANALYTICS_ERROR_TYPE.apiError,\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 console.debug('### PrepareChallenge3DS2::exiting:: no challengeData');\n }\n }\n\n setStatusComplete(resultObj: ResultObject, errorCodeObject: ErrorCodeObject = null) {\n this.setState({ status: 'complete' }, () => {\n /**\n * Create the data in the way that the /details endpoint expects.\n * This is different for the flow triggered by the threeds2InMDFlow process than for the new, v67, 'threeDS2' action\n */\n const resolveDataFunction = this.props.isMDFlow ? createOldChallengeResolveData : createChallengeResolveData;\n const data = resolveDataFunction(this.props.dataKey, resultObj.transStatus, this.props.paymentData);\n\n if (errorCodeObject) {\n console.debug('### PrepareChallenge3DS2::errorCodeObject::', errorCodeObject);\n }\n\n let analyticsObject: SendAnalyticsObject;\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' ? Analytics3DS2Errors.THREEDS2_TIMEOUT : Analytics3DS2Errors.NO_TRANSSTATUS,\n errorType: finalResObject.errorCode === 'timeout' ? ANALYTICS_ERROR_TYPE.network : ANALYTICS_ERROR_TYPE.apiError\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 analyticsObject = {\n type: THREEDS2_ERROR,\n message: (finalResObject as ErrorCodeObject).message,\n ...errorTypeAndCode\n };\n\n // Send error to analytics endpoint\n this.props.onSubmitAnalytics(analyticsObject);\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 analyticsObject = {\n type: THREEDS2_FULL,\n message: `${THREEDS2_NUM} challenge has completed`,\n subtype: Analytics3DS2Events.CHALLENGE_COMPLETED,\n result\n };\n\n // Send log to analytics endpoint\n this.props.onSubmitAnalytics(analyticsObject);\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 }) {\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 this.props.onSubmitAnalytics({\n type: THREEDS2_ERROR,\n code: Analytics3DS2Errors.CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP,\n errorType: ANALYTICS_ERROR_TYPE.apiError,\n message: `${THREEDS2_CHALLENGE_ERROR}: challenge resolved without a \"result\" object`\n });\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 />\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","isValidHttpUrl","setError","errorInfo","Analytics3DS2Errors","TOKEN_IS_MISSING_ACSURL","i18n","get","errorCodeObject","type","THREEDS2_ERROR","code","errorType","ANALYTICS_ERROR_TYPE","apiError","message","THREEDS2_CHALLENGE_ERROR","onSubmitAnalytics","console","debug","acsTransID","messageVersion","threeDSServerTransID","cReqData","TOKEN_IS_MISSING_OTHER_PROPS","setState","status","errorMsg","error","errorCode","indexOf","MISSING_TOKEN_IN_ACTION_MSG","ACTION_IS_MISSING_TOKEN","TOKEN_DECODE_OR_PARSING_FAILED","setStatusComplete","resultObj","data","isMDFlow","createOldChallengeResolveData","createChallengeResolveData","dataKey","transStatus","paymentData","analyticsObject","finalResObject","errorTypeAndCode","THREEDS2_TIMEOUT","NO_TRANSSTATUS","network","result","THREEDS2_FULL","THREEDS2_NUM","subtype","Analytics3DS2Events","CHALLENGE_COMPLETED","onComplete","errorInfoObj","isFatal","onError","AdyenCheckoutError","ERROR","cause","errorObj","render","_","getImage","useImage","h","DoChallenge3DS2","onCompleteChallenge","challenge","hasOwnProperty","length","errorDescription","values","CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP","onErrorChallenge","timeoutObject","THREEDS2_CHALLENGE","onActionHandled","onFormSubmit","div","className","Img","src","imageFolder","alt","constructor","super","_define_property","msg","CHALLENGE_DATA_SENT","token","prepareChallengeData","size","challengeWindowSize","success","defaultProps"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{Component as e,createElement as r}from"../../../../external/preact/dist/preact.js";import t from"../../../internal/IFrame/Iframe.js";import s from"../../../internal/Spinner/Spinner.js";import n from"../Form/ThreeDS2Form.js";import i from"../../../../utils/promiseTimeout.js";import o from"../../../../utils/get-process-message-handler.js";import{THREEDS_METHOD_TIMEOUT as a,THREEDS2_NUM as m,FAILED_METHOD_STATUS_RESOLVE_OBJECT_TIMEOUT as p}from"../../constants.js";import{encodeBase64URL as d}from"../utils.js";function h(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}const c="threeDSMethodIframe";class l extends e{get3DS2MethodPromise(){return new Promise(((e,r)=>{this.processMessageHandler=o(this.props.postMessageDomain,e,r,"fingerPrintResult"),window.addEventListener("message",this.processMessageHandler)}))}componentDidMount(){this.fingerPrintPromise=i(a,this.get3DS2MethodPromise(),p),this.fingerPrintPromise.promise.then((e=>{window.removeEventListener("message",this.processMessageHandler),this.props.onCompleteFingerprint(e)})).catch((e=>{window.removeEventListener("message",this.processMessageHandler),this.props.onErrorFingerprint(e)}))}componentWillUnmount(){this.fingerPrintPromise&&this.fingerPrintPromise.cancel(),window.removeEventListener("message",this.processMessageHandler)}render({threeDSMethodURL:e,onActionHandled:i,onFormSubmit:o},{base64URLencodedData:a}){return r("div",{className:"adyen-checkout__3ds2-device-fingerprint"},this.props.showSpinner&&r(s,null),r("div",{style:{display:"none"}},r(t,{name:c,callback:()=>{i?.({componentType:"3DS2Fingerprint",actionDescription:`${m} fingerprint iframe loaded`})}}),r(n,{name:"threeDSMethodForm",action:e,target:c,inputName:"threeDSMethodData",inputValue:a,onFormSubmit:o})))}constructor(e){super(e),h(this,"processMessageHandler",void 0),h(this,"fingerPrintPromise",void 0);const{threeDSServerTransID:r,threeDSMethodNotificationURL:t}=this.props,s=JSON.stringify({threeDSServerTransID:r,threeDSMethodNotificationURL:t}),n=d(s);this.state={base64URLencodedData:n}}}h(l,"defaultProps",{showSpinner:!0});export{l as default};
1
+ import{Component as e,createElement as r}from"../../../../external/preact/dist/preact.js";import t from"../../../internal/IFrame/Iframe.js";import s from"../../../internal/Spinner/Spinner.js";import n from"../Form/ThreeDS2Form.js";import i from"../../../../utils/promiseTimeout.js";import o from"../../../../utils/get-process-message-handler.js";import{FAILED_METHOD_STATUS_RESOLVE_OBJECT_TIMEOUT as a,THREEDS_METHOD_TIMEOUT as m,THREEDS2_NUM as p}from"../../constants.js";import{encodeBase64URL as d}from"../utils.js";function h(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}const c="threeDSMethodIframe";class l extends e{get3DS2MethodPromise(){return new Promise(((e,r)=>{this.processMessageHandler=o(this.props.postMessageDomain,e,r,"fingerPrintResult"),window.addEventListener("message",this.processMessageHandler)}))}componentDidMount(){this.fingerPrintPromise=i(m,this.get3DS2MethodPromise(),a),this.fingerPrintPromise.promise.then((e=>{window.removeEventListener("message",this.processMessageHandler),this.props.onCompleteFingerprint(e)})).catch((e=>{window.removeEventListener("message",this.processMessageHandler),this.props.onErrorFingerprint(e)}))}componentWillUnmount(){this.fingerPrintPromise&&this.fingerPrintPromise.cancel(),window.removeEventListener("message",this.processMessageHandler)}render({threeDSMethodURL:e,onActionHandled:i,onFormSubmit:o},{base64URLencodedData:a}){return r("div",{className:"adyen-checkout__3ds2-device-fingerprint"},this.props.showSpinner&&r(s,null),r("div",{style:{display:"none"}},r(t,{name:c,callback:()=>{i?.({componentType:"3DS2Fingerprint",actionDescription:`${p} fingerprint iframe loaded`})}}),r(n,{name:"threeDSMethodForm",action:e,target:c,inputName:"threeDSMethodData",inputValue:a,onFormSubmit:o})))}constructor(e){super(e),h(this,"processMessageHandler",void 0),h(this,"fingerPrintPromise",void 0);const{threeDSServerTransID:r,threeDSMethodNotificationURL:t}=this.props,s=JSON.stringify({threeDSServerTransID:r,threeDSMethodNotificationURL:t}),n=d(s);this.state={base64URLencodedData:n}}}h(l,"defaultProps",{showSpinner:!0});export{l as default};
2
2
  //# sourceMappingURL=DoFingerprint3DS2.js.map
@@ -1,2 +1,2 @@
1
- import{Component as e,createElement as t}from"../../../../external/preact/dist/preact.js";import r from"./DoFingerprint3DS2.js";import{isErrorObject as o,createOldFingerprintResolveData as s,createFingerprintResolveData as i,prepareFingerPrintData as n}from"../utils.js";import{isValidHttpUrl as a}from"../../../../utils/isValidURL.js";import{THREEDS2_FINGERPRINT_ERROR as p,MISSING_TOKEN_IN_ACTION_MSG as d,TIMEOUT as l,THREEDS2_ERROR as m,THREEDS2_FULL as h,THREEDS2_NUM as c,THREEDS2_FINGERPRINT as S}from"../../constants.js";import{Analytics3DS2Errors as D,ANALYTICS_ERROR_TYPE as u,Analytics3DS2Events as g}from"../../../../core/Analytics/constants.js";function f(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class C extends e{componentDidMount(){if(!o(this.state.fingerPrintData)){const e="test"===this.props.environment&&this.props._environmentUrls?.api?.includes("http://localhost:8080"),{threeDSMethodURL:t,threeDSMethodNotificationURL:r,postMessageDomain:o,threeDSServerTransID:s}=this.state.fingerPrintData;if(!a(t,e))return this.setStatusComplete({threeDSCompInd:"U"},{errorCode:D.TOKEN_IS_MISSING_THREEDSMETHODURL,message:`${p}: Decoded token is missing a valid threeDSMethodURL property`}),void console.debug("### PrepareFingerprint3DS2::exiting:: no valid threeDSMethodURL");const i=a(r,e),n=a(o,e),d=s?.length;if(!i||!n||!d)return this.setStatusComplete({threeDSCompInd:"N"},{errorCode:D.TOKEN_IS_MISSING_OTHER_PROPS,message:`${p}: Decoded token is missing one or more of the following properties (threeDSMethodNotificationURL | postMessageDomain | threeDSServerTransID)`}),void console.debug("### PrepareFingerprint3DS2::exiting:: Decoded token is missing one or more of the following properties (threeDSMethodNotificationURL | postMessageDomain | threeDSServerTransID)");this.setState({status:"retrievingFingerPrint"})}else{const e=this.state.fingerPrintData.error,t=e.indexOf(d)>-1?D.ACTION_IS_MISSING_TOKEN:D.TOKEN_DECODE_OR_PARSING_FAILED;this.setStatusComplete({threeDSCompInd:"N"},{errorCode:t,message:`${p}: ${e}`}),console.debug("### PrepareFingerprint3DS2:: token does not exist or could not be base64 decoded &/or JSON.parsed")}}setStatusComplete(e,t=null){this.setState({status:"complete"},(()=>{const r=(this.props.isMDFlow?s:i)(this.props.dataKey,e,this.props.paymentData);let o;const n=t||e;if(n.errorCode){const e={code:n.errorCode===l?D.THREEDS2_TIMEOUT:n.errorCode,errorType:n.errorCode===l?u.network:u.apiError};o={type:m,message:n.message,...e},this.props.onSubmitAnalytics(o)}let a;switch(e?.threeDSCompInd){case"Y":a="success";break;case"N":a=t?t.errorCode===l?l:"failedInternal":"failed";break;case"U":a="noThreeDSMethodURL"}o={type:h,message:`${c} fingerprinting has completed`,subtype:g.FINGERPRINT_COMPLETED,result:a},this.props.onSubmitAnalytics(o),this.props.onComplete(r)}))}render({showSpinner:e},{status:o,fingerPrintData:s}){return"retrievingFingerPrint"===o?t(r,{onCompleteFingerprint:e=>{this.setStatusComplete(e.result)},onErrorFingerprint:e=>{const t={errorCode:e.errorCode,message:`${S}: ${e.errorCode}`};this.setStatusComplete(e.result,t)},showSpinner:e,...s,onActionHandled:this.props.onActionHandled,onFormSubmit:this.onFormSubmit}):null}constructor(e){super(e),f(this,"onFormSubmit",(e=>{this.props.onSubmitAnalytics({type:h,message:e,subtype:g.FINGERPRINT_DATA_SENT})}));const{token:t,notificationURL:r}=this.props;if(t){const e=n({token:t,notificationURL:r});this.state={status:"init",fingerPrintData:e}}else this.state={fingerPrintData:{success:!1,error:d}},console.debug(`${p}: ${d}`)}}f(C,"type","scheme"),f(C,"defaultProps",{onComplete:()=>{},onError:()=>{},paymentData:"",showSpinner:!0,isMDFlow:!1});export{C as default};
1
+ import{Component as e,createElement as t}from"../../../../external/preact/dist/preact.js";import r from"./DoFingerprint3DS2.js";import{isErrorObject as o,createOldFingerprintResolveData as s,createFingerprintResolveData as i,prepareFingerPrintData as n}from"../utils.js";import{isValidHttpUrl as a}from"../../../../utils/isValidURL.js";import{THREEDS2_FINGERPRINT_ERROR as p,MISSING_TOKEN_IN_ACTION_MSG as d,TIMEOUT as l,THREEDS2_ERROR as m,THREEDS2_NUM as h,THREEDS2_FULL as c,THREEDS2_FINGERPRINT as S}from"../../constants.js";import{Analytics3DS2Errors as D,ANALYTICS_ERROR_TYPE as u,Analytics3DS2Events as g}from"../../../../core/Analytics/constants.js";function f(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class C extends e{componentDidMount(){if(!o(this.state.fingerPrintData)){const e="test"===this.props.environment&&this.props._environmentUrls?.api?.includes("http://localhost:8080"),{threeDSMethodURL:t,threeDSMethodNotificationURL:r,postMessageDomain:o,threeDSServerTransID:s}=this.state.fingerPrintData;if(!a(t,e))return this.setStatusComplete({threeDSCompInd:"U"},{errorCode:D.TOKEN_IS_MISSING_THREEDSMETHODURL,message:`${p}: Decoded token is missing a valid threeDSMethodURL property`}),void console.debug("### PrepareFingerprint3DS2::exiting:: no valid threeDSMethodURL");const i=a(r,e),n=a(o,e),d=s?.length;if(!i||!n||!d)return this.setStatusComplete({threeDSCompInd:"N"},{errorCode:D.TOKEN_IS_MISSING_OTHER_PROPS,message:`${p}: Decoded token is missing one or more of the following properties (threeDSMethodNotificationURL | postMessageDomain | threeDSServerTransID)`}),void console.debug("### PrepareFingerprint3DS2::exiting:: Decoded token is missing one or more of the following properties (threeDSMethodNotificationURL | postMessageDomain | threeDSServerTransID)");this.setState({status:"retrievingFingerPrint"})}else{const e=this.state.fingerPrintData.error,t=e.indexOf(d)>-1?D.ACTION_IS_MISSING_TOKEN:D.TOKEN_DECODE_OR_PARSING_FAILED;this.setStatusComplete({threeDSCompInd:"N"},{errorCode:t,message:`${p}: ${e}`}),console.debug("### PrepareFingerprint3DS2:: token does not exist or could not be base64 decoded &/or JSON.parsed")}}setStatusComplete(e,t=null){this.setState({status:"complete"},(()=>{const r=(this.props.isMDFlow?s:i)(this.props.dataKey,e,this.props.paymentData);let o;const n=t||e;if(n.errorCode){const e={code:n.errorCode===l?D.THREEDS2_TIMEOUT:n.errorCode,errorType:n.errorCode===l?u.network:u.apiError};o={type:m,message:n.message,...e},this.props.onSubmitAnalytics(o)}let a;switch(e?.threeDSCompInd){case"Y":a="success";break;case"N":a=t?t.errorCode===l?l:"failedInternal":"failed";break;case"U":a="noThreeDSMethodURL"}o={type:c,message:`${h} fingerprinting has completed`,subtype:g.FINGERPRINT_COMPLETED,result:a},this.props.onSubmitAnalytics(o),this.props.onComplete(r)}))}render({showSpinner:e},{status:o,fingerPrintData:s}){return"retrievingFingerPrint"===o?t(r,{onCompleteFingerprint:e=>{this.setStatusComplete(e.result)},onErrorFingerprint:e=>{const t={errorCode:e.errorCode,message:`${S}: ${e.errorCode}`};this.setStatusComplete(e.result,t)},showSpinner:e,...s,onActionHandled:this.props.onActionHandled,onFormSubmit:this.onFormSubmit}):null}constructor(e){super(e),f(this,"onFormSubmit",(e=>{this.props.onSubmitAnalytics({type:c,message:e,subtype:g.FINGERPRINT_DATA_SENT})}));const{token:t,notificationURL:r}=this.props;if(t){const e=n({token:t,notificationURL:r});this.state={status:"init",fingerPrintData:e}}else this.state={fingerPrintData:{success:!1,error:d}},console.debug(`${p}: ${d}`)}}f(C,"type","scheme"),f(C,"defaultProps",{onComplete:()=>{},onError:()=>{},paymentData:"",showSpinner:!0,isMDFlow:!1});export{C as default};
2
2
  //# sourceMappingURL=PrepareFingerprint3DS2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PrepareFingerprint3DS2.js","sources":["../../../../../../src/components/ThreeDS2/components/DeviceFingerprint/PrepareFingerprint3DS2.tsx"],"sourcesContent":["import { Component, h } from 'preact';\nimport DoFingerprint3DS2 from './DoFingerprint3DS2';\nimport { createFingerprintResolveData, createOldFingerprintResolveData, isErrorObject, prepareFingerPrintData } from '../utils';\nimport { PrepareFingerprint3DS2Props, PrepareFingerprint3DS2State } from './types';\nimport { FingerPrintData, ResultObject, ErrorCodeObject } from '../../types';\nimport { ErrorObject } from '../../../../core/Errors/types';\nimport { SendAnalyticsObject } from '../../../../core/Analytics/types';\nimport { isValidHttpUrl } from '../../../../utils/isValidURL';\nimport {\n THREEDS2_FULL,\n THREEDS2_FINGERPRINT,\n THREEDS2_FINGERPRINT_ERROR,\n THREEDS2_NUM,\n MISSING_TOKEN_IN_ACTION_MSG,\n THREEDS2_ERROR,\n TIMEOUT\n} from '../../constants';\nimport { ANALYTICS_ERROR_TYPE, Analytics3DS2Errors, Analytics3DS2Events } from '../../../../core/Analytics/constants';\n\nclass PrepareFingerprint3DS2 extends Component<PrepareFingerprint3DS2Props, PrepareFingerprint3DS2State> {\n public static type = 'scheme';\n\n public static defaultProps = {\n onComplete: () => {},\n onError: () => {},\n paymentData: '',\n showSpinner: true,\n isMDFlow: false\n };\n\n constructor(props) {\n super(props);\n\n const { token, notificationURL } = this.props; // See comments on prepareFingerPrintData regarding notificationURL\n\n if (token) {\n const fingerPrintData: FingerPrintData | ErrorObject = prepareFingerPrintData({ token, notificationURL });\n\n this.state = {\n status: 'init',\n fingerPrintData: fingerPrintData as FingerPrintData\n };\n } else {\n // Will be picked up in componentDidMount\n this.state = { fingerPrintData: { success: false, error: MISSING_TOKEN_IN_ACTION_MSG } };\n\n console.debug(`${THREEDS2_FINGERPRINT_ERROR}: ${MISSING_TOKEN_IN_ACTION_MSG}`);\n }\n }\n\n public onFormSubmit = (msg: string) => {\n this.props.onSubmitAnalytics({\n type: THREEDS2_FULL,\n message: msg,\n subtype: Analytics3DS2Events.FINGERPRINT_DATA_SENT\n });\n };\n\n componentDidMount() {\n const hasFingerPrintData = !isErrorObject(this.state.fingerPrintData);\n\n if (hasFingerPrintData) {\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__?.indexOf('localhost:8080') > -1) ||\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 fingerPrintData\n */\n const { threeDSMethodURL, threeDSMethodNotificationURL, postMessageDomain, threeDSServerTransID } = this.state\n .fingerPrintData as FingerPrintData;\n\n const hasValid3DSMethodURL = isValidHttpUrl(threeDSMethodURL, shouldAllowHttpDomains);\n\n // Only render component if we have a threeDSMethodURL. Otherwise, exit with threeDSCompInd: 'U'\n if (!hasValid3DSMethodURL) {\n this.setStatusComplete(\n { threeDSCompInd: 'U' },\n {\n errorCode: Analytics3DS2Errors.TOKEN_IS_MISSING_THREEDSMETHODURL,\n message: `${THREEDS2_FINGERPRINT_ERROR}: Decoded token is missing a valid threeDSMethodURL property`\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\n console.debug('### PrepareFingerprint3DS2::exiting:: no valid threeDSMethodURL');\n return;\n }\n\n const hasValid3DSMethodNotificationURL = isValidHttpUrl(threeDSMethodNotificationURL, shouldAllowHttpDomains);\n const hasValidPostMessageDomain = isValidHttpUrl(postMessageDomain, shouldAllowHttpDomains);\n const hasTransServerID = threeDSServerTransID?.length;\n\n if (!hasValid3DSMethodNotificationURL || !hasValidPostMessageDomain || !hasTransServerID) {\n /**\n * NOTE: EMVCo_3DS_CoreSpec_v2.3.1_20220831.pdf states that we should return: threeDSCompInd: 'N'\n * when the fingerprinting process \"Did not run or did not successfully complete\"\n */\n this.setStatusComplete(\n { threeDSCompInd: 'N' },\n {\n errorCode: Analytics3DS2Errors.TOKEN_IS_MISSING_OTHER_PROPS,\n message: `${THREEDS2_FINGERPRINT_ERROR}: Decoded token is missing one or more of the following properties (threeDSMethodNotificationURL | postMessageDomain | threeDSServerTransID)`\n }\n );\n\n console.debug(\n '### PrepareFingerprint3DS2::exiting:: Decoded token is missing one or more of the following properties (threeDSMethodNotificationURL | postMessageDomain | threeDSServerTransID)'\n );\n\n return;\n }\n\n // Proceed to allow component to render\n this.setState({ status: 'retrievingFingerPrint' });\n //\n } else {\n // Only render component if we have fingerPrintData. Otherwise, complete with threeDSCompInd: 'N'\n\n const errorMsg: string = (this.state.fingerPrintData as ErrorObject).error;\n\n const errorCode =\n errorMsg.indexOf(MISSING_TOKEN_IN_ACTION_MSG) > -1\n ? Analytics3DS2Errors.ACTION_IS_MISSING_TOKEN\n : Analytics3DS2Errors.TOKEN_DECODE_OR_PARSING_FAILED;\n\n this.setStatusComplete(\n { threeDSCompInd: 'N' },\n {\n errorCode,\n message: `${THREEDS2_FINGERPRINT_ERROR}: ${errorMsg}` // can be: 'Missing \"token\" property from threeDS2 action', 'not base64', 'malformed URI sequence' or 'Could not JSON parse token'\n }\n );\n\n console.debug('### PrepareFingerprint3DS2:: token does not exist or could not be base64 decoded &/or JSON.parsed');\n }\n }\n\n setStatusComplete(resultObj: ResultObject, errorCodeObject: ErrorCodeObject = null) {\n this.setState({ status: 'complete' }, () => {\n /**\n * Create the data in the way that the /details endpoint expects.\n * This is different for the flow triggered by the threeds2InMDFlow process than for the new, v67, 'threeDS2' action\n */\n const resolveDataFunction = this.props.isMDFlow ? createOldFingerprintResolveData : createFingerprintResolveData;\n const data = resolveDataFunction(this.props.dataKey, resultObj, this.props.paymentData);\n\n let analyticsObject: SendAnalyticsObject;\n\n /** Are we in an error 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 ? Analytics3DS2Errors.THREEDS2_TIMEOUT : finalResObject.errorCode,\n errorType: finalResObject.errorCode === TIMEOUT ? ANALYTICS_ERROR_TYPE.network : ANALYTICS_ERROR_TYPE.apiError\n };\n\n /**\n * Timeout or data parsing problems:\n *\n * (threeDSCompInd:\"U\"):\n * - Decoded token is missing a valid threeDSMethodURL property,\n * or, (threeDSCompInd:\"N\"):\n * - Fingerprint process has timed out,\n * also, (threeDSCompInd:\"N\"):\n * - Missing \"token\" property from threeDS2 action\n * - or, decoded token is missing one or more of the following properties (threeDSMethodNotificationURL | postMessageDomain | threeDSServerTransID)\n * - or, token could not be base64 decoded &/or JSON.parsed\n */\n analyticsObject = {\n type: THREEDS2_ERROR,\n message: (finalResObject as ErrorCodeObject).message,\n ...errorTypeAndCode\n };\n\n // Send error to analytics endpoint\n this.props.onSubmitAnalytics(analyticsObject);\n }\n\n /** Calculate \"result\" for analytics */\n let result: string;\n\n switch (resultObj?.threeDSCompInd) {\n case 'Y':\n result = 'success';\n break;\n case 'N': {\n if (!errorCodeObject) {\n result = 'failed'; // 'failed' is the result returned from the threeDSMethodURL\n } else {\n result = errorCodeObject.errorCode === TIMEOUT ? TIMEOUT : 'failedInternal'; // timed-out; or, 'failed' as a result of internal checks\n }\n break;\n }\n case 'U':\n result = 'noThreeDSMethodURL';\n break;\n default:\n }\n\n /**\n * The fingerprint process is completed, one way or another.\n * The resultObj will be {threeDSCompInd:\"Y\"} in the case of success,\n * else {threeDSCompInd:\"U\"} or {threeDSCompInd:\"N\"} - if we've had some kind of timeout or data parsing problem (as described above)\n */\n analyticsObject = {\n type: THREEDS2_FULL,\n message: `${THREEDS2_NUM} fingerprinting has completed`,\n subtype: Analytics3DS2Events.FINGERPRINT_COMPLETED,\n result\n };\n\n // Send log to analytics endpoint\n this.props.onSubmitAnalytics(analyticsObject);\n\n /**\n * Equals call to callSubmit3DS2Fingerprint (except for in 3DS2InMDFlow)\n */\n this.props.onComplete(data);\n });\n }\n\n render({ showSpinner }, { status, fingerPrintData }) {\n if (status === 'retrievingFingerPrint') {\n return (\n <DoFingerprint3DS2\n onCompleteFingerprint={fingerprint => {\n this.setStatusComplete(fingerprint.result);\n }}\n onErrorFingerprint={fingerprint => {\n /**\n * Called when fingerprint times-out (which is still a valid scenario)...\n */\n const timeoutObject: ErrorCodeObject = {\n errorCode: fingerprint.errorCode, // 'timeout'\n message: `${THREEDS2_FINGERPRINT}: ${fingerprint.errorCode}`\n };\n\n this.setStatusComplete(fingerprint.result, timeoutObject); // fingerprint.result = threeDSCompInd: 'N'\n }}\n showSpinner={showSpinner}\n {...fingerPrintData}\n onActionHandled={this.props.onActionHandled}\n onFormSubmit={this.onFormSubmit}\n />\n );\n }\n\n return null;\n }\n}\n\nexport default PrepareFingerprint3DS2;\n"],"names":["PrepareFingerprint3DS2","Component","componentDidMount","isErrorObject","this","state","fingerPrintData","shouldAllowHttpDomains","props","environment","_environmentUrls","api","includes","threeDSMethodURL","threeDSMethodNotificationURL","postMessageDomain","threeDSServerTransID","isValidHttpUrl","setStatusComplete","threeDSCompInd","errorCode","Analytics3DS2Errors","TOKEN_IS_MISSING_THREEDSMETHODURL","message","THREEDS2_FINGERPRINT_ERROR","console","debug","hasValid3DSMethodNotificationURL","hasValidPostMessageDomain","hasTransServerID","length","TOKEN_IS_MISSING_OTHER_PROPS","setState","status","errorMsg","error","indexOf","MISSING_TOKEN_IN_ACTION_MSG","ACTION_IS_MISSING_TOKEN","TOKEN_DECODE_OR_PARSING_FAILED","resultObj","errorCodeObject","data","isMDFlow","createOldFingerprintResolveData","createFingerprintResolveData","dataKey","paymentData","analyticsObject","finalResObject","errorTypeAndCode","code","TIMEOUT","THREEDS2_TIMEOUT","errorType","ANALYTICS_ERROR_TYPE","network","apiError","type","THREEDS2_ERROR","onSubmitAnalytics","result","THREEDS2_FULL","THREEDS2_NUM","subtype","Analytics3DS2Events","FINGERPRINT_COMPLETED","onComplete","render","showSpinner","h","DoFingerprint3DS2","onCompleteFingerprint","fingerprint","onErrorFingerprint","timeoutObject","THREEDS2_FINGERPRINT","onActionHandled","onFormSubmit","constructor","super","_define_property","msg","FINGERPRINT_DATA_SENT","token","notificationURL","prepareFingerPrintData","success","defaultProps","onError"],"mappings":"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"}
1
+ {"version":3,"file":"PrepareFingerprint3DS2.js","sources":["../../../../../../src/components/ThreeDS2/components/DeviceFingerprint/PrepareFingerprint3DS2.tsx"],"sourcesContent":["import { Component, h } from 'preact';\nimport DoFingerprint3DS2 from './DoFingerprint3DS2';\nimport { createFingerprintResolveData, createOldFingerprintResolveData, isErrorObject, prepareFingerPrintData } from '../utils';\nimport { PrepareFingerprint3DS2Props, PrepareFingerprint3DS2State } from './types';\nimport { FingerPrintData, ResultObject, ErrorCodeObject } from '../../types';\nimport { ErrorObject } from '../../../../core/Errors/types';\nimport { SendAnalyticsObject } from '../../../../core/Analytics/types';\nimport { isValidHttpUrl } from '../../../../utils/isValidURL';\nimport {\n THREEDS2_FULL,\n THREEDS2_FINGERPRINT,\n THREEDS2_FINGERPRINT_ERROR,\n THREEDS2_NUM,\n MISSING_TOKEN_IN_ACTION_MSG,\n THREEDS2_ERROR,\n TIMEOUT\n} from '../../constants';\nimport { ANALYTICS_ERROR_TYPE, Analytics3DS2Errors, Analytics3DS2Events } from '../../../../core/Analytics/constants';\n\nclass PrepareFingerprint3DS2 extends Component<PrepareFingerprint3DS2Props, PrepareFingerprint3DS2State> {\n public static type = 'scheme';\n\n public static defaultProps = {\n onComplete: () => {},\n onError: () => {},\n paymentData: '',\n showSpinner: true,\n isMDFlow: false\n };\n\n constructor(props) {\n super(props);\n\n const { token, notificationURL } = this.props; // See comments on prepareFingerPrintData regarding notificationURL\n\n if (token) {\n const fingerPrintData: FingerPrintData | ErrorObject = prepareFingerPrintData({ token, notificationURL });\n\n this.state = {\n status: 'init',\n fingerPrintData: fingerPrintData as FingerPrintData\n };\n } else {\n // Will be picked up in componentDidMount\n this.state = { fingerPrintData: { success: false, error: MISSING_TOKEN_IN_ACTION_MSG } };\n\n console.debug(`${THREEDS2_FINGERPRINT_ERROR}: ${MISSING_TOKEN_IN_ACTION_MSG}`);\n }\n }\n\n public onFormSubmit = (msg: string) => {\n this.props.onSubmitAnalytics({\n type: THREEDS2_FULL,\n message: msg,\n subtype: Analytics3DS2Events.FINGERPRINT_DATA_SENT\n });\n };\n\n componentDidMount() {\n const hasFingerPrintData = !isErrorObject(this.state.fingerPrintData);\n\n if (hasFingerPrintData) {\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__?.indexOf('localhost:8080') > -1) ||\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 fingerPrintData\n */\n const { threeDSMethodURL, threeDSMethodNotificationURL, postMessageDomain, threeDSServerTransID } = this.state\n .fingerPrintData as FingerPrintData;\n\n const hasValid3DSMethodURL = isValidHttpUrl(threeDSMethodURL, shouldAllowHttpDomains);\n\n // Only render component if we have a threeDSMethodURL. Otherwise, exit with threeDSCompInd: 'U'\n if (!hasValid3DSMethodURL) {\n this.setStatusComplete(\n { threeDSCompInd: 'U' },\n {\n errorCode: Analytics3DS2Errors.TOKEN_IS_MISSING_THREEDSMETHODURL,\n message: `${THREEDS2_FINGERPRINT_ERROR}: Decoded token is missing a valid threeDSMethodURL property`\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\n console.debug('### PrepareFingerprint3DS2::exiting:: no valid threeDSMethodURL');\n return;\n }\n\n const hasValid3DSMethodNotificationURL = isValidHttpUrl(threeDSMethodNotificationURL, shouldAllowHttpDomains);\n const hasValidPostMessageDomain = isValidHttpUrl(postMessageDomain, shouldAllowHttpDomains);\n const hasTransServerID = threeDSServerTransID?.length;\n\n if (!hasValid3DSMethodNotificationURL || !hasValidPostMessageDomain || !hasTransServerID) {\n /**\n * NOTE: EMVCo_3DS_CoreSpec_v2.3.1_20220831.pdf states that we should return: threeDSCompInd: 'N'\n * when the fingerprinting process \"Did not run or did not successfully complete\"\n */\n this.setStatusComplete(\n { threeDSCompInd: 'N' },\n {\n errorCode: Analytics3DS2Errors.TOKEN_IS_MISSING_OTHER_PROPS,\n message: `${THREEDS2_FINGERPRINT_ERROR}: Decoded token is missing one or more of the following properties (threeDSMethodNotificationURL | postMessageDomain | threeDSServerTransID)`\n }\n );\n\n console.debug(\n '### PrepareFingerprint3DS2::exiting:: Decoded token is missing one or more of the following properties (threeDSMethodNotificationURL | postMessageDomain | threeDSServerTransID)'\n );\n\n return;\n }\n\n // Proceed to allow component to render\n this.setState({ status: 'retrievingFingerPrint' });\n //\n } else {\n // Only render component if we have fingerPrintData. Otherwise, complete with threeDSCompInd: 'N'\n\n const errorMsg: string = (this.state.fingerPrintData as ErrorObject).error;\n\n const errorCode =\n errorMsg.indexOf(MISSING_TOKEN_IN_ACTION_MSG) > -1\n ? Analytics3DS2Errors.ACTION_IS_MISSING_TOKEN\n : Analytics3DS2Errors.TOKEN_DECODE_OR_PARSING_FAILED;\n\n this.setStatusComplete(\n { threeDSCompInd: 'N' },\n {\n errorCode,\n message: `${THREEDS2_FINGERPRINT_ERROR}: ${errorMsg}` // can be: 'Missing \"token\" property from threeDS2 action', 'not base64', 'malformed URI sequence' or 'Could not JSON parse token'\n }\n );\n\n console.debug('### PrepareFingerprint3DS2:: token does not exist or could not be base64 decoded &/or JSON.parsed');\n }\n }\n\n setStatusComplete(resultObj: ResultObject, errorCodeObject: ErrorCodeObject = null) {\n this.setState({ status: 'complete' }, () => {\n /**\n * Create the data in the way that the /details endpoint expects.\n * This is different for the flow triggered by the threeds2InMDFlow process than for the new, v67, 'threeDS2' action\n */\n const resolveDataFunction = this.props.isMDFlow ? createOldFingerprintResolveData : createFingerprintResolveData;\n const data = resolveDataFunction(this.props.dataKey, resultObj, this.props.paymentData);\n\n let analyticsObject: SendAnalyticsObject;\n\n /** Are we in an error 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 ? Analytics3DS2Errors.THREEDS2_TIMEOUT : finalResObject.errorCode,\n errorType: finalResObject.errorCode === TIMEOUT ? ANALYTICS_ERROR_TYPE.network : ANALYTICS_ERROR_TYPE.apiError\n };\n\n /**\n * Timeout or data parsing problems:\n *\n * (threeDSCompInd:\"U\"):\n * - Decoded token is missing a valid threeDSMethodURL property,\n * or, (threeDSCompInd:\"N\"):\n * - Fingerprint process has timed out,\n * also, (threeDSCompInd:\"N\"):\n * - Missing \"token\" property from threeDS2 action\n * - or, decoded token is missing one or more of the following properties (threeDSMethodNotificationURL | postMessageDomain | threeDSServerTransID)\n * - or, token could not be base64 decoded &/or JSON.parsed\n */\n analyticsObject = {\n type: THREEDS2_ERROR,\n message: (finalResObject as ErrorCodeObject).message,\n ...errorTypeAndCode\n };\n\n // Send error to analytics endpoint\n this.props.onSubmitAnalytics(analyticsObject);\n }\n\n /** Calculate \"result\" for analytics */\n let result: string;\n\n switch (resultObj?.threeDSCompInd) {\n case 'Y':\n result = 'success';\n break;\n case 'N': {\n if (!errorCodeObject) {\n result = 'failed'; // 'failed' is the result returned from the threeDSMethodURL\n } else {\n result = errorCodeObject.errorCode === TIMEOUT ? TIMEOUT : 'failedInternal'; // timed-out; or, 'failed' as a result of internal checks\n }\n break;\n }\n case 'U':\n result = 'noThreeDSMethodURL';\n break;\n default:\n }\n\n /**\n * The fingerprint process is completed, one way or another.\n * The resultObj will be {threeDSCompInd:\"Y\"} in the case of success,\n * else {threeDSCompInd:\"U\"} or {threeDSCompInd:\"N\"} - if we've had some kind of timeout or data parsing problem (as described above)\n */\n analyticsObject = {\n type: THREEDS2_FULL,\n message: `${THREEDS2_NUM} fingerprinting has completed`,\n subtype: Analytics3DS2Events.FINGERPRINT_COMPLETED,\n result\n };\n\n // Send log to analytics endpoint\n this.props.onSubmitAnalytics(analyticsObject);\n\n /**\n * Equals call to callSubmit3DS2Fingerprint (except for in 3DS2InMDFlow)\n */\n this.props.onComplete(data);\n });\n }\n\n render({ showSpinner }, { status, fingerPrintData }) {\n if (status === 'retrievingFingerPrint') {\n return (\n <DoFingerprint3DS2\n onCompleteFingerprint={fingerprint => {\n this.setStatusComplete(fingerprint.result);\n }}\n onErrorFingerprint={fingerprint => {\n /**\n * Called when fingerprint times-out (which is still a valid scenario)...\n */\n const timeoutObject: ErrorCodeObject = {\n errorCode: fingerprint.errorCode, // 'timeout'\n message: `${THREEDS2_FINGERPRINT}: ${fingerprint.errorCode}`\n };\n\n this.setStatusComplete(fingerprint.result, timeoutObject); // fingerprint.result = threeDSCompInd: 'N'\n }}\n showSpinner={showSpinner}\n {...fingerPrintData}\n onActionHandled={this.props.onActionHandled}\n onFormSubmit={this.onFormSubmit}\n />\n );\n }\n\n return null;\n }\n}\n\nexport default PrepareFingerprint3DS2;\n"],"names":["PrepareFingerprint3DS2","Component","componentDidMount","isErrorObject","this","state","fingerPrintData","shouldAllowHttpDomains","props","environment","_environmentUrls","api","includes","threeDSMethodURL","threeDSMethodNotificationURL","postMessageDomain","threeDSServerTransID","isValidHttpUrl","setStatusComplete","threeDSCompInd","errorCode","Analytics3DS2Errors","TOKEN_IS_MISSING_THREEDSMETHODURL","message","THREEDS2_FINGERPRINT_ERROR","console","debug","hasValid3DSMethodNotificationURL","hasValidPostMessageDomain","hasTransServerID","length","TOKEN_IS_MISSING_OTHER_PROPS","setState","status","errorMsg","error","indexOf","MISSING_TOKEN_IN_ACTION_MSG","ACTION_IS_MISSING_TOKEN","TOKEN_DECODE_OR_PARSING_FAILED","resultObj","errorCodeObject","data","isMDFlow","createOldFingerprintResolveData","createFingerprintResolveData","dataKey","paymentData","analyticsObject","finalResObject","errorTypeAndCode","code","TIMEOUT","THREEDS2_TIMEOUT","errorType","ANALYTICS_ERROR_TYPE","network","apiError","type","THREEDS2_ERROR","onSubmitAnalytics","result","THREEDS2_FULL","THREEDS2_NUM","subtype","Analytics3DS2Events","FINGERPRINT_COMPLETED","onComplete","render","showSpinner","h","DoFingerprint3DS2","onCompleteFingerprint","fingerprint","onErrorFingerprint","timeoutObject","THREEDS2_FINGERPRINT","onActionHandled","onFormSubmit","constructor","super","_define_property","msg","FINGERPRINT_DATA_SENT","token","notificationURL","prepareFingerPrintData","success","defaultProps","onError"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import e from"../helpers/QRLoaderContainer/QRLoaderContainer.js";import{delay as r,countdownTime as a}from"./config.js";import{TxVariants as t}from"../tx-variants.js";function o(e,r,a){return r in e?Object.defineProperty(e,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[r]=a,e}class n extends e{formatProps(e){return{delay:r,countdownTime:a,...super.formatProps(e)}}}o(n,"type",t.wechatpayQR),o(n,"txVariants",[t.wechatpay]),o(n,"analyticsType","wechatpayQR");export{n as default};
1
+ import e from"../helpers/QRLoaderContainer/QRLoaderContainer.js";import{countdownTime as r,delay as a}from"./config.js";import{TxVariants as t}from"../tx-variants.js";function o(e,r,a){return r in e?Object.defineProperty(e,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[r]=a,e}class n extends e{formatProps(e){return{delay:a,countdownTime:r,...super.formatProps(e)}}}o(n,"type",t.wechatpayQR),o(n,"txVariants",[t.wechatpay]),o(n,"analyticsType","wechatpayQR");export{n as default};
2
2
  //# sourceMappingURL=WeChat.js.map
@@ -1,2 +1,2 @@
1
- import{createElement as e,Fragment as t}from"../../../external/preact/dist/preact.js";import{useRef as s,useMemo as o,useState as r,useCallback as a,useEffect as n}from"../../../external/preact/hooks/dist/hooks.js";import i from"../FormFields/Fieldset/Fieldset.js";import l from"./components/ReadOnlyAddress.js";import{getAddressValidationRules as d}from"./validate.js";import{addressFormatters as c,countrySpecificFormatters as u}from"./validate.formats.js";import m from"./components/FieldContainer.js";import p from"../../../utils/useForm/useForm.js";import f from"./Specifications.js";import{FALLBACK_VALUE as y,ADDRESS_SCHEMA as F}from"./constants.js";import{getMaxLengthByFieldAndCountry as h}from"../../../utils/validator-utils.js";import{useCoreContext as C}from"../../../core/Context/CoreProvider.js";import g from"./components/AddressSearch.js";function A(A){const{i18n:v}=C(),{label:b="",requiredFields:j,visibility:x,iOSFocusedField:S=null,showContextualElement:k}=A,M=s({});Object.keys(M.current).length||A.setComponentRef?.(M.current);const O=o((()=>new f(A.specifications)),[A.specifications]),D=O.getAddressSchemaForCountryFlat(A.countryCode).filter((e=>j.includes(e))),[w,B]=r(!1),[E,N]=r(!1),[P,L]=r(""),R=!!A.onAddressLookup,[V,q]=r(!1),H=!A.onAddressLookup||(w||E),{data:T,errors:_,valid:I,isValid:$,handleChangeFor:z,triggerValidation:G,setData:J,mergeData:K}=p({schema:D,defaultData:A.data,rules:{...d(O),...A.validationRules},formatters:c}),Q=a((e=>{const t=F.reduce(((t,s)=>{const o=e[s];return null!=o&&(t[s]=String(o)),t}),{});K(t),q(!0),G(),B(!0)}),[B,G,J]),U=a((()=>{N(!0)}),[]);M.current.showValidation=()=>{G(),L(!R||H||$?"":v.get("address.errors.incomplete"))};const W=D.filter((e=>!S||e===S));if(n((()=>{if(V)return void q(!1);const e=O.countryHasDataset(T.country)?"":y,t={...T,stateOrProvince:e};j.forEach((e=>{z(e,"input")(t[e]??"")})),t.postalCode&&z("postalCode","blur")(T.postalCode)}),[T.country]),n((()=>{const e=j.includes("stateOrProvince"),t=T.country&&O.countryHasDataset(T.country),s=e&&t,o=T.stateOrProvince||(s?"":y);z("stateOrProvince","input")(o)}),[]),n((()=>{const e=O.getOptionalFieldsForCountry(T.country),t=F.reduce(((t,s)=>{const o=e.includes(s),r=j.includes(s),a=T[s],n=A.data[s],i=o&&!a||!r?r||a||!n?y:n:a;return i?.length&&(t[s]=i),t}),{});A.onChange({data:t,valid:I,errors:_,isValid:$})}),[T,I,_,$]),"hidden"===x)return null;if("readOnly"===x)return e(l,{data:T,label:b});const X=(t,{classNameModifiers:s=[]})=>j.includes(t)?e(m,{key:t,allowedCountries:A.allowedCountries,classNameModifiers:[...s,t],data:T,errors:_,valid:I,fieldName:t,onInput:z(t,"input"),onBlur:z(t,"blur"),onDropdownChange:z(t,"blur"),specifications:O,maxLength:h(u,t,T.country),trimOnBlur:!0,disabled:!W.includes(t),onFieldFocusAnalytics:A.onFieldFocusAnalytics,onFieldBlurAnalytics:A.onFieldBlurAnalytics}):null,Y=O.getAddressSchemaForCountry(T.country);return e(t,null,e(i,{classNameModifiers:[b||"address"],label:b},R&&e(g,{onAddressLookup:A.onAddressLookup,onAddressSelected:A.onAddressSelected,onSelect:Q,onManualAddress:U,externalErrorMessage:P,hideManualButton:H,showContextualElement:k,contextualText:v.get("address.search.contextualText"),addressSearchDebounceMs:A.addressSearchDebounceMs}),H&&e(t,null,Y.map((t=>t instanceof Array?e("div",{className:"adyen-checkout__field-group"},t.map((([e,t])=>X(e,{classNameModifiers:[`col-${t}`]})))):X(t,{}))))))}A.defaultProps={countryCode:null,validationRules:null,data:{},onChange:()=>{},visibility:"editable",requiredFields:F,specifications:{},onFieldFocusAnalytics:()=>{},onFieldBlurAnalytics:()=>{}};export{A as default};
1
+ import{createElement as e,Fragment as t}from"../../../external/preact/dist/preact.js";import{useRef as s,useMemo as o,useState as r,useCallback as a,useEffect as n}from"../../../external/preact/hooks/dist/hooks.js";import i from"../FormFields/Fieldset/Fieldset.js";import l from"./components/ReadOnlyAddress.js";import{getAddressValidationRules as d}from"./validate.js";import{countrySpecificFormatters as c,addressFormatters as u}from"./validate.formats.js";import m from"./components/FieldContainer.js";import p from"../../../utils/useForm/useForm.js";import f from"./Specifications.js";import{ADDRESS_SCHEMA as y,FALLBACK_VALUE as F}from"./constants.js";import{getMaxLengthByFieldAndCountry as h}from"../../../utils/validator-utils.js";import{useCoreContext as C}from"../../../core/Context/CoreProvider.js";import g from"./components/AddressSearch.js";function A(A){const{i18n:v}=C(),{label:b="",requiredFields:j,visibility:x,iOSFocusedField:S=null,showContextualElement:k}=A,M=s({});Object.keys(M.current).length||A.setComponentRef?.(M.current);const O=o((()=>new f(A.specifications)),[A.specifications]),D=O.getAddressSchemaForCountryFlat(A.countryCode).filter((e=>j.includes(e))),[w,B]=r(!1),[E,N]=r(!1),[P,L]=r(""),R=!!A.onAddressLookup,[V,q]=r(!1),H=!A.onAddressLookup||(w||E),{data:T,errors:_,valid:I,isValid:$,handleChangeFor:z,triggerValidation:G,setData:J,mergeData:K}=p({schema:D,defaultData:A.data,rules:{...d(O),...A.validationRules},formatters:u}),Q=a((e=>{const t=y.reduce(((t,s)=>{const o=e[s];return null!=o&&(t[s]=String(o)),t}),{});K(t),q(!0),G(),B(!0)}),[B,G,J]),U=a((()=>{N(!0)}),[]);M.current.showValidation=()=>{G(),L(!R||H||$?"":v.get("address.errors.incomplete"))};const W=D.filter((e=>!S||e===S));if(n((()=>{if(V)return void q(!1);const e=O.countryHasDataset(T.country)?"":F,t={...T,stateOrProvince:e};j.forEach((e=>{z(e,"input")(t[e]??"")})),t.postalCode&&z("postalCode","blur")(T.postalCode)}),[T.country]),n((()=>{const e=j.includes("stateOrProvince"),t=T.country&&O.countryHasDataset(T.country),s=e&&t,o=T.stateOrProvince||(s?"":F);z("stateOrProvince","input")(o)}),[]),n((()=>{const e=O.getOptionalFieldsForCountry(T.country),t=y.reduce(((t,s)=>{const o=e.includes(s),r=j.includes(s),a=T[s],n=A.data[s],i=o&&!a||!r?r||a||!n?F:n:a;return i?.length&&(t[s]=i),t}),{});A.onChange({data:t,valid:I,errors:_,isValid:$})}),[T,I,_,$]),"hidden"===x)return null;if("readOnly"===x)return e(l,{data:T,label:b});const X=(t,{classNameModifiers:s=[]})=>j.includes(t)?e(m,{key:t,allowedCountries:A.allowedCountries,classNameModifiers:[...s,t],data:T,errors:_,valid:I,fieldName:t,onInput:z(t,"input"),onBlur:z(t,"blur"),onDropdownChange:z(t,"blur"),specifications:O,maxLength:h(c,t,T.country),trimOnBlur:!0,disabled:!W.includes(t),onFieldFocusAnalytics:A.onFieldFocusAnalytics,onFieldBlurAnalytics:A.onFieldBlurAnalytics}):null,Y=O.getAddressSchemaForCountry(T.country);return e(t,null,e(i,{classNameModifiers:[b||"address"],label:b},R&&e(g,{onAddressLookup:A.onAddressLookup,onAddressSelected:A.onAddressSelected,onSelect:Q,onManualAddress:U,externalErrorMessage:P,hideManualButton:H,showContextualElement:k,contextualText:v.get("address.search.contextualText"),addressSearchDebounceMs:A.addressSearchDebounceMs}),H&&e(t,null,Y.map((t=>t instanceof Array?e("div",{className:"adyen-checkout__field-group"},t.map((([e,t])=>X(e,{classNameModifiers:[`col-${t}`]})))):X(t,{}))))))}A.defaultProps={countryCode:null,validationRules:null,data:{},onChange:()=>{},visibility:"editable",requiredFields:y,specifications:{},onFieldFocusAnalytics:()=>{},onFieldBlurAnalytics:()=>{}};export{A as default};
2
2
  //# sourceMappingURL=Address.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.formats.js","sources":["../../../../../src/components/internal/Address/validate.formats.ts"],"sourcesContent":["import { CountryFormatRules, FormatRules } from '../../../utils/Validator/types';\nimport { Formatter } from '../../../utils/useForm/types';\nimport { getFormattingRegEx, SPECIAL_CHARS, trimValWithOneSpace } from '../../../utils/validator-utils';\n\nconst createFormatByDigits = (digits: number): Formatter => {\n const format = new Array(digits).fill('9').join('');\n return {\n // Formatter - excludes non digits and limits to maxlength\n formatterFn: val => val.replace(getFormattingRegEx('^\\\\d', 'g'), '').substring(0, digits),\n format,\n maxlength: digits\n };\n};\n\nconst specialCharsRegEx = getFormattingRegEx(SPECIAL_CHARS);\nconst formattingFn = val => trimValWithOneSpace(val).replace(specialCharsRegEx, '');\n\nexport const addressFormatters: FormatRules = {\n postalCode: {\n formatterFn: (val, context) => {\n const country = context.state.data.country;\n\n // Country specific formatting rule\n const specificRule = countrySpecificFormatters[country]?.postalCode.formatterFn;\n if (specificRule) {\n return specificRule(val);\n }\n\n // Default formatting rule: allow anything\n return val;\n }\n },\n street: {\n formatterFn: formattingFn\n },\n houseNumberOrName: {\n formatterFn: formattingFn\n },\n city: {\n formatterFn: formattingFn\n }\n};\n\n// TODO make proper formatter fns for those entries that don't just have a straightforward, x number of digits, no spaces, format\n// check against our internal documentation on address postal code\n// which, for example, says BR isn't just 8 digits (it can be spilt by a hyphen) & CZ can also be 5 digits, no spaces\nexport const countrySpecificFormatters: CountryFormatRules = {\n AT: {\n postalCode: createFormatByDigits(4)\n },\n AU: {\n postalCode: createFormatByDigits(4)\n },\n BE: {\n postalCode: createFormatByDigits(4)\n },\n BG: {\n postalCode: createFormatByDigits(4)\n },\n BR: {\n postalCode: {\n // Formatter - excludes non digits, but allows hyphens, and limits to a maxlength that varies depending on whether a hyphen is present or not\n formatterFn: val => {\n const nuVal = val.replace(getFormattingRegEx('^\\\\d-', 'g'), '');\n const maxlength = nuVal.indexOf('-') > -1 ? 9 : 8;\n return nuVal.substring(0, maxlength);\n },\n format: '12345678 or 12345-678',\n maxlength: 9\n }\n },\n CA: {\n postalCode: {\n format: 'A9A 9A9 or A9A9A9',\n maxlength: 7\n }\n },\n CH: {\n postalCode: createFormatByDigits(4)\n },\n CY: {\n postalCode: createFormatByDigits(4)\n },\n CZ: {\n postalCode: {\n format: '999 99',\n maxlength: 6\n }\n },\n DE: {\n postalCode: createFormatByDigits(5)\n },\n DK: {\n postalCode: {\n format: '9999',\n maxlength: 7\n }\n },\n EE: {\n postalCode: createFormatByDigits(5)\n },\n ES: {\n postalCode: createFormatByDigits(5)\n },\n FI: {\n postalCode: createFormatByDigits(5)\n },\n FR: {\n postalCode: createFormatByDigits(5)\n },\n GB: {\n postalCode: {\n // Disallow special chars & set to maxlength\n formatterFn: val => val.replace(getFormattingRegEx(SPECIAL_CHARS), '').substring(0, 8),\n format: 'AA99 9AA or A99 9AA or A9 9AA',\n maxlength: 8\n }\n },\n GR: {\n postalCode: {\n format: '999 99',\n maxlength: 6\n }\n },\n HR: {\n postalCode: {\n format: '[1-5]9999',\n maxlength: 5\n }\n },\n HU: {\n postalCode: createFormatByDigits(4)\n },\n IE: {\n postalCode: {\n format: 'A99 A999',\n maxlength: 8\n }\n },\n IS: {\n postalCode: createFormatByDigits(3)\n },\n IT: {\n postalCode: createFormatByDigits(5)\n },\n LI: {\n postalCode: createFormatByDigits(4)\n },\n LT: {\n postalCode: {\n format: '9999 or 99999 or LT-99999',\n maxlength: 8\n }\n },\n LU: {\n postalCode: createFormatByDigits(4)\n },\n LV: {\n postalCode: {\n format: '9999 or LV-9999',\n maxlength: 7\n }\n },\n MC: {\n postalCode: {\n format: '980NN',\n maxlength: 5\n }\n },\n MT: {\n postalCode: {\n format: 'AA99 or AAA99 or AA9999 or AAA9999',\n maxlength: 8\n }\n },\n MY: {\n postalCode: createFormatByDigits(5)\n },\n NL: {\n postalCode: {\n format: '9999AA',\n maxlength: 7\n }\n },\n NZ: {\n postalCode: createFormatByDigits(4)\n },\n NO: {\n postalCode: createFormatByDigits(4)\n },\n PL: {\n postalCode: {\n // Formatter - excludes non digits, but allows hyphens, and limits to a maxlength that varies depending on whether a hyphen is present or not\n formatterFn: val => {\n const nuVal = val.replace(getFormattingRegEx('^\\\\d-', 'g'), '');\n const maxlength = nuVal.indexOf('-') > -1 ? 6 : 5;\n return nuVal.substring(0, maxlength);\n },\n format: '99999 or 99-999',\n maxlength: 6\n }\n },\n PT: {\n postalCode: {\n formatterFn: val => {\n const nuVal = val.replace(getFormattingRegEx('^\\\\d-', 'g'), '');\n return nuVal.substring(0, 8);\n },\n format: '9999-999',\n maxlength: 8\n }\n },\n RO: {\n postalCode: createFormatByDigits(6)\n },\n SI: {\n postalCode: {\n format: '9999 or SI-9999',\n maxlength: 7\n }\n },\n SE: {\n postalCode: createFormatByDigits(5)\n },\n SG: {\n postalCode: createFormatByDigits(6)\n },\n SK: {\n postalCode: {\n format: '99999 or SK-99999',\n maxlength: 8\n }\n },\n JP: {\n postalCode: {\n format: '999-9999',\n maxlength: 8\n }\n },\n US: {\n postalCode: {\n formatterFn: val => {\n const nuVal = val.replace(getFormattingRegEx('^\\\\d-', 'g'), '');\n const maxlength = nuVal.indexOf('-') > -1 ? 10 : 5;\n return nuVal.substring(0, maxlength);\n },\n format: '99999 or 99999-9999'\n }\n }\n};\n"],"names":["createFormatByDigits","digits","formatterFn","val","replace","getFormattingRegEx","substring","format","Array","fill","join","maxlength","specialCharsRegEx","SPECIAL_CHARS","formattingFn","trimValWithOneSpace","addressFormatters","postalCode","context","country","state","data","specificRule","countrySpecificFormatters","street","houseNumberOrName","city","AT","AU","BE","BG","BR","nuVal","indexOf","CA","CH","CY","CZ","DE","DK","EE","ES","FI","FR","GB","GR","HR","HU","IE","IS","IT","LI","LT","LU","LV","MC","MT","MY","NL","NZ","NO","PL","PT","RO","SI","SE","SG","SK","JP","US"],"mappings":"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"}
1
+ {"version":3,"file":"validate.formats.js","sources":["../../../../../src/components/internal/Address/validate.formats.ts"],"sourcesContent":["import { CountryFormatRules, FormatRules } from '../../../utils/Validator/types';\nimport { Formatter } from '../../../utils/useForm/types';\nimport { getFormattingRegEx, SPECIAL_CHARS, trimValWithOneSpace } from '../../../utils/validator-utils';\n\nconst createFormatByDigits = (digits: number): Formatter => {\n const format = new Array(digits).fill('9').join('');\n return {\n // Formatter - excludes non digits and limits to maxlength\n formatterFn: val => val.replace(getFormattingRegEx('^\\\\d', 'g'), '').substring(0, digits),\n format,\n maxlength: digits\n };\n};\n\nconst specialCharsRegEx = getFormattingRegEx(SPECIAL_CHARS);\nconst formattingFn = val => trimValWithOneSpace(val).replace(specialCharsRegEx, '');\n\nexport const addressFormatters: FormatRules = {\n postalCode: {\n formatterFn: (val, context) => {\n const country = context.state.data.country;\n\n // Country specific formatting rule\n const specificRule = countrySpecificFormatters[country]?.postalCode.formatterFn;\n if (specificRule) {\n return specificRule(val);\n }\n\n // Default formatting rule: allow anything\n return val;\n }\n },\n street: {\n formatterFn: formattingFn\n },\n houseNumberOrName: {\n formatterFn: formattingFn\n },\n city: {\n formatterFn: formattingFn\n }\n};\n\n// TODO make proper formatter fns for those entries that don't just have a straightforward, x number of digits, no spaces, format\n// check against our internal documentation on address postal code\n// which, for example, says BR isn't just 8 digits (it can be spilt by a hyphen) & CZ can also be 5 digits, no spaces\nexport const countrySpecificFormatters: CountryFormatRules = {\n AT: {\n postalCode: createFormatByDigits(4)\n },\n AU: {\n postalCode: createFormatByDigits(4)\n },\n BE: {\n postalCode: createFormatByDigits(4)\n },\n BG: {\n postalCode: createFormatByDigits(4)\n },\n BR: {\n postalCode: {\n // Formatter - excludes non digits, but allows hyphens, and limits to a maxlength that varies depending on whether a hyphen is present or not\n formatterFn: val => {\n const nuVal = val.replace(getFormattingRegEx('^\\\\d-', 'g'), '');\n const maxlength = nuVal.indexOf('-') > -1 ? 9 : 8;\n return nuVal.substring(0, maxlength);\n },\n format: '12345678 or 12345-678',\n maxlength: 9\n }\n },\n CA: {\n postalCode: {\n format: 'A9A 9A9 or A9A9A9',\n maxlength: 7\n }\n },\n CH: {\n postalCode: createFormatByDigits(4)\n },\n CY: {\n postalCode: createFormatByDigits(4)\n },\n CZ: {\n postalCode: {\n format: '999 99',\n maxlength: 6\n }\n },\n DE: {\n postalCode: createFormatByDigits(5)\n },\n DK: {\n postalCode: {\n format: '9999',\n maxlength: 7\n }\n },\n EE: {\n postalCode: createFormatByDigits(5)\n },\n ES: {\n postalCode: createFormatByDigits(5)\n },\n FI: {\n postalCode: createFormatByDigits(5)\n },\n FR: {\n postalCode: createFormatByDigits(5)\n },\n GB: {\n postalCode: {\n // Disallow special chars & set to maxlength\n formatterFn: val => val.replace(getFormattingRegEx(SPECIAL_CHARS), '').substring(0, 8),\n format: 'AA99 9AA or A99 9AA or A9 9AA',\n maxlength: 8\n }\n },\n GR: {\n postalCode: {\n format: '999 99',\n maxlength: 6\n }\n },\n HR: {\n postalCode: {\n format: '[1-5]9999',\n maxlength: 5\n }\n },\n HU: {\n postalCode: createFormatByDigits(4)\n },\n IE: {\n postalCode: {\n format: 'A99 A999',\n maxlength: 8\n }\n },\n IS: {\n postalCode: createFormatByDigits(3)\n },\n IT: {\n postalCode: createFormatByDigits(5)\n },\n LI: {\n postalCode: createFormatByDigits(4)\n },\n LT: {\n postalCode: {\n format: '9999 or 99999 or LT-99999',\n maxlength: 8\n }\n },\n LU: {\n postalCode: createFormatByDigits(4)\n },\n LV: {\n postalCode: {\n format: '9999 or LV-9999',\n maxlength: 7\n }\n },\n MC: {\n postalCode: {\n format: '980NN',\n maxlength: 5\n }\n },\n MT: {\n postalCode: {\n format: 'AA99 or AAA99 or AA9999 or AAA9999',\n maxlength: 8\n }\n },\n MY: {\n postalCode: createFormatByDigits(5)\n },\n NL: {\n postalCode: {\n format: '9999AA',\n maxlength: 7\n }\n },\n NZ: {\n postalCode: createFormatByDigits(4)\n },\n NO: {\n postalCode: createFormatByDigits(4)\n },\n PL: {\n postalCode: {\n // Formatter - excludes non digits, but allows hyphens, and limits to a maxlength that varies depending on whether a hyphen is present or not\n formatterFn: val => {\n const nuVal = val.replace(getFormattingRegEx('^\\\\d-', 'g'), '');\n const maxlength = nuVal.indexOf('-') > -1 ? 6 : 5;\n return nuVal.substring(0, maxlength);\n },\n format: '99999 or 99-999',\n maxlength: 6\n }\n },\n PT: {\n postalCode: {\n formatterFn: val => {\n const nuVal = val.replace(getFormattingRegEx('^\\\\d-', 'g'), '');\n return nuVal.substring(0, 8);\n },\n format: '9999-999',\n maxlength: 8\n }\n },\n RO: {\n postalCode: createFormatByDigits(6)\n },\n SI: {\n postalCode: {\n format: '9999 or SI-9999',\n maxlength: 7\n }\n },\n SE: {\n postalCode: createFormatByDigits(5)\n },\n SG: {\n postalCode: createFormatByDigits(6)\n },\n SK: {\n postalCode: {\n format: '99999 or SK-99999',\n maxlength: 8\n }\n },\n JP: {\n postalCode: {\n format: '999-9999',\n maxlength: 8\n }\n },\n US: {\n postalCode: {\n formatterFn: val => {\n const nuVal = val.replace(getFormattingRegEx('^\\\\d-', 'g'), '');\n const maxlength = nuVal.indexOf('-') > -1 ? 10 : 5;\n return nuVal.substring(0, maxlength);\n },\n format: '99999 or 99999-9999'\n }\n }\n};\n"],"names":["createFormatByDigits","digits","formatterFn","val","replace","getFormattingRegEx","substring","format","Array","fill","join","maxlength","specialCharsRegEx","SPECIAL_CHARS","formattingFn","trimValWithOneSpace","addressFormatters","postalCode","context","country","state","data","specificRule","countrySpecificFormatters","street","houseNumberOrName","city","AT","AU","BE","BG","BR","nuVal","indexOf","CA","CH","CY","CZ","DE","DK","EE","ES","FI","FR","GB","GR","HR","HU","IE","IS","IT","LI","LT","LU","LV","MC","MT","MY","NL","NZ","NO","PL","PT","RO","SI","SE","SG","SK","JP","US"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../../src/components/internal/Countdown/utils.ts"],"sourcesContent":["/**\n * Pads a given string or number with zeros.\n *\n * @param value - Value to zero-pad.\n * @param length - Amount of characters to pad.\n * @returns Left-padded number/string.\n */\nexport const zeroPad = (value, length = 2) => {\n if (length === 0) return value;\n const strValue = String(value);\n return strValue.length >= length ? strValue : ('0'.repeat(length) + strValue).slice(length * -1);\n};\n\n/**\n * Calculates the remaining time as a percentage\n *\n * @param start - Start date\n * @param now - Current date\n * @param end - End date\n * @returns Percentage of the remaining time\n */\nexport const getProgressPercentage = (start, now, end) => {\n const difference = end.getTime() - start.getTime();\n return 100 - Math.round(((now.getTime() - start.getTime()) * 100) / difference);\n};\n\n/**\n * Calculates the difference in minutes and seconds from now to endDate\n *\n * @param startTime -\n * @param endTime -\n * @returns Time difference\n */\nexport const getTimeDifference = (startTime, endTime) => {\n const now = new Date();\n const diff = endTime.getTime() - now.getTime();\n const seconds = diff / 1000;\n const percentage = getProgressPercentage(startTime, now, endTime);\n\n return {\n total: diff,\n minutes: zeroPad(Math.floor((seconds / 60) % 60)),\n seconds: zeroPad(Math.floor(seconds % 60)),\n completed: diff <= 0,\n percentage\n };\n};\n"],"names":["zeroPad","value","length","strValue","String","repeat","slice","getProgressPercentage","start","now","end","difference","getTime","Math","round","getTimeDifference","startTime","endTime","Date","diff","seconds","percentage","total","minutes","floor","completed"],"mappings":"AAOaA,MAAAA,EAAU,CAACC,EAAOC,EAAS,KACpC,GAAe,IAAXA,EAAc,OAAOD,EACzB,MAAME,EAAWC,OAAOH,GACxB,OAAOE,EAASD,QAAUA,EAASC,GAAY,IAAIE,OAAOH,GAAUC,GAAUG,OAAgB,EAAVJ,EAAU,EAWrFK,EAAwB,CAACC,EAAOC,EAAKC,KAC9C,MAAMC,EAAaD,EAAIE,UAAYJ,EAAMI,UACzC,OAAO,IAAMC,KAAKC,MAA2C,KAAnCL,EAAIG,UAAYJ,EAAMI,WAAoBD,EAAAA,EAU3DI,EAAoB,CAACC,EAAWC,KACzC,MAAMR,EAAM,IAAIS,KACVC,EAAOF,EAAQL,UAAYH,EAAIG,UAC/BQ,EAAUD,EAAO,IACjBE,EAAad,EAAsBS,EAAWP,EAAKQ,GAEzD,MAAO,CACHK,MAAOH,EACPI,QAASvB,EAAQa,KAAKW,MAAOJ,EAAU,GAAM,KAC7CA,QAASpB,EAAQa,KAAKW,MAAMJ,EAAU,KACtCK,UAAWN,GAAQ,EACnBE,aACJ"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../../src/components/internal/Countdown/utils.ts"],"sourcesContent":["/**\n * Pads a given string or number with zeros.\n *\n * @param value - Value to zero-pad.\n * @param length - Amount of characters to pad.\n * @returns Left-padded number/string.\n */\nexport const zeroPad = (value, length = 2) => {\n if (length === 0) return value;\n const strValue = String(value);\n return strValue.length >= length ? strValue : ('0'.repeat(length) + strValue).slice(length * -1);\n};\n\n/**\n * Calculates the remaining time as a percentage\n *\n * @param start - Start date\n * @param now - Current date\n * @param end - End date\n * @returns Percentage of the remaining time\n */\nexport const getProgressPercentage = (start, now, end) => {\n const difference = end.getTime() - start.getTime();\n return 100 - Math.round(((now.getTime() - start.getTime()) * 100) / difference);\n};\n\n/**\n * Calculates the difference in minutes and seconds from now to endDate\n *\n * @param startTime -\n * @param endTime -\n * @returns Time difference\n */\nexport const getTimeDifference = (startTime, endTime) => {\n const now = new Date();\n const diff = endTime.getTime() - now.getTime();\n const seconds = diff / 1000;\n const percentage = getProgressPercentage(startTime, now, endTime);\n\n return {\n total: diff,\n minutes: zeroPad(Math.floor((seconds / 60) % 60)),\n seconds: zeroPad(Math.floor(seconds % 60)),\n completed: diff <= 0,\n percentage\n };\n};\n"],"names":["zeroPad","value","length","strValue","String","repeat","slice","getProgressPercentage","start","now","end","difference","getTime","Math","round","getTimeDifference","startTime","endTime","Date","diff","seconds","percentage","total","minutes","floor","completed"],"mappings":"AAOaA,MAAAA,EAAU,CAACC,EAAOC,EAAS,KACpC,GAAe,IAAXA,EAAc,OAAOD,EACzB,MAAME,EAAWC,OAAOH,GACxB,OAAOE,EAASD,QAAUA,EAASC,GAAY,IAAIE,OAAOH,GAAUC,GAAUG,OAAe,EAATJ,EAAU,EAWrFK,EAAwB,CAACC,EAAOC,EAAKC,KAC9C,MAAMC,EAAaD,EAAIE,UAAYJ,EAAMI,UACzC,OAAO,IAAMC,KAAKC,MAA2C,KAAnCL,EAAIG,UAAYJ,EAAMI,WAAoBD,EAAAA,EAU3DI,EAAoB,CAACC,EAAWC,KACzC,MAAMR,EAAM,IAAIS,KACVC,EAAOF,EAAQL,UAAYH,EAAIG,UAC/BQ,EAAUD,EAAO,IACjBE,EAAad,EAAsBS,EAAWP,EAAKQ,GAEzD,MAAO,CACHK,MAAOH,EACPI,QAASvB,EAAQa,KAAKW,MAAOJ,EAAU,GAAM,KAC7CA,QAASpB,EAAQa,KAAKW,MAAMJ,EAAU,KACtCK,UAAWN,GAAQ,EACnBE,aACJ"}
@@ -1,2 +1,2 @@
1
- import{createElement as e}from"../../../../external/preact/dist/preact.js";import a from"../../../../_virtual/index.js";import{ARIA_ERROR_SUFFIX as c,ARIA_CONTEXT_SUFFIX as t}from"../../../../core/Errors/constants.js";function o({classNameModifiers:o=[],label:n,isInvalid:r,onChange:s,...i}){const{uniqueId:l,showErrorElement:d,showContextualElement:u,..._}=i;return e("label",{className:"adyen-checkout__checkbox",htmlFor:l},e("input",{id:l,..._,...d&&{"aria-describedby":`${l}${c}`},...u&&{"aria-describedby":`${l}${t}`},className:a(["adyen-checkout__checkbox__input",[i.className],{"adyen-checkout__checkbox__input--invalid":r},o.map((e=>`adyen-checkout__input--${e}`))]),type:"checkbox",onChange:s}),e("span",{className:"adyen-checkout__checkbox__label"},n))}o.defaultProps={onChange:()=>{}};export{o as default};
1
+ import{createElement as e}from"../../../../external/preact/dist/preact.js";import a from"../../../../_virtual/index.js";import{ARIA_CONTEXT_SUFFIX as c,ARIA_ERROR_SUFFIX as t}from"../../../../core/Errors/constants.js";function o({classNameModifiers:o=[],label:n,isInvalid:s,onChange:r,disabled:i=!1,...l}){const{uniqueId:d,showErrorElement:u,showContextualElement:_,...h}=l;return e("label",{className:"adyen-checkout__checkbox",htmlFor:d},e("input",{id:d,...h,...u&&{"aria-describedby":`${d}${t}`},..._&&{"aria-describedby":`${d}${c}`},className:a(["adyen-checkout__checkbox__input",[l.className],{"adyen-checkout__checkbox__input--invalid":s},o.map((e=>`adyen-checkout__input--${e}`))]),type:"checkbox",disabled:i,onChange:r}),e("span",{className:"adyen-checkout__checkbox__label"},n))}o.defaultProps={onChange:()=>{}};export{o as default};
2
2
  //# sourceMappingURL=Checkbox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox.js","sources":["../../../../../../src/components/internal/FormFields/Checkbox/Checkbox.tsx"],"sourcesContent":["import { ComponentChild, h } from 'preact';\nimport cx from 'classnames';\nimport './Checkbox.scss';\nimport { ARIA_CONTEXT_SUFFIX, ARIA_ERROR_SUFFIX } from '../../../../core/Errors/constants';\n\ninterface CheckboxProps {\n checked?: boolean;\n classNameModifiers?: string[];\n label?: string | ComponentChild;\n name?: string;\n isInvalid?: boolean;\n onChange?;\n onInput?;\n className?: string;\n value?: string;\n uniqueId?: string;\n showErrorElement?: boolean;\n showContextualElement?: boolean;\n}\n\nexport default function Checkbox({ classNameModifiers = [], label, isInvalid, onChange, ...props }: CheckboxProps) {\n // Strip some values from props. We need to reference them but don't want to set them as attributes.\n const { uniqueId: uid, showErrorElement, showContextualElement, ...newProps } = props;\n\n return (\n <label className=\"adyen-checkout__checkbox\" htmlFor={uid}>\n <input\n id={uid}\n {...newProps}\n {...(showErrorElement && { 'aria-describedby': `${uid}${ARIA_ERROR_SUFFIX}` })}\n {...(showContextualElement && { 'aria-describedby': `${uid}${ARIA_CONTEXT_SUFFIX}` })}\n className={cx([\n 'adyen-checkout__checkbox__input',\n [props.className],\n { 'adyen-checkout__checkbox__input--invalid': isInvalid },\n classNameModifiers.map(m => `adyen-checkout__input--${m}`)\n ])}\n type=\"checkbox\"\n onChange={onChange}\n />\n <span className=\"adyen-checkout__checkbox__label\">{label}</span>\n </label>\n );\n}\n\nCheckbox.defaultProps = {\n onChange: () => {}\n};\n"],"names":["Checkbox","classNameModifiers","label","isInvalid","onChange","props","uniqueId","uid","showErrorElement","showContextualElement","newProps","h","className","htmlFor","input","id","ARIA_ERROR_SUFFIX","ARIA_CONTEXT_SUFFIX","cx","map","m","type","span","defaultProps"],"mappings":"0NAoBe,SAASA,GAASC,mBAAEA,EAAqB,GAAEC,MAAEA,EAAKC,UAAEA,EAASC,SAAEA,KAAaC,IAEvF,MAAQC,SAAUC,EAAGC,iBAAEA,EAAgBC,sBAAEA,KAA0BC,GAAaL,EAEhF,OACIM,EAACT,QAAAA,CAAMU,UAAU,2BAA2BC,QAASN,GACjDI,EAACG,QAAAA,CACGC,GAAIR,KACAG,KACCF,GAAoB,CAAE,mBAAoB,GAAGD,IAAMS,QACnDP,GAAyB,CAAE,mBAAoB,GAAGF,IAAMU,KAC7DL,UAAWM,EAAG,CACV,kCACA,CAACb,EAAMO,WACP,CAAE,2CAA4CT,GAC9CF,EAAmBkB,KAAIC,GAAK,0BAA0BA,QAE1DC,KAAK,WACLjB,SAAUA,IAEdO,EAACW,OAAAA,CAAKV,UAAU,mCAAmCV,GAG/D,CAEAF,EAASuB,aAAe,CACpBnB,SAAU"}
1
+ {"version":3,"file":"Checkbox.js","sources":["../../../../../../src/components/internal/FormFields/Checkbox/Checkbox.tsx"],"sourcesContent":["import { ComponentChild, h } from 'preact';\nimport cx from 'classnames';\nimport './Checkbox.scss';\nimport { ARIA_CONTEXT_SUFFIX, ARIA_ERROR_SUFFIX } from '../../../../core/Errors/constants';\n\ninterface CheckboxProps {\n checked?: boolean;\n classNameModifiers?: string[];\n label?: string | ComponentChild;\n name?: string;\n isInvalid?: boolean;\n onChange?;\n onInput?;\n className?: string;\n value?: string;\n uniqueId?: string;\n showErrorElement?: boolean;\n showContextualElement?: boolean;\n disabled?: boolean;\n}\n\nexport default function Checkbox({ classNameModifiers = [], label, isInvalid, onChange, disabled = false, ...props }: CheckboxProps) {\n // Strip some values from props. We need to reference them but don't want to set them as attributes.\n const { uniqueId: uid, showErrorElement, showContextualElement, ...newProps } = props;\n\n return (\n <label className=\"adyen-checkout__checkbox\" htmlFor={uid}>\n <input\n id={uid}\n {...newProps}\n {...(showErrorElement && { 'aria-describedby': `${uid}${ARIA_ERROR_SUFFIX}` })}\n {...(showContextualElement && { 'aria-describedby': `${uid}${ARIA_CONTEXT_SUFFIX}` })}\n className={cx([\n 'adyen-checkout__checkbox__input',\n [props.className],\n { 'adyen-checkout__checkbox__input--invalid': isInvalid },\n classNameModifiers.map(m => `adyen-checkout__input--${m}`)\n ])}\n type=\"checkbox\"\n disabled={disabled}\n onChange={onChange}\n />\n <span className=\"adyen-checkout__checkbox__label\">{label}</span>\n </label>\n );\n}\n\nCheckbox.defaultProps = {\n onChange: () => {}\n};\n"],"names":["Checkbox","classNameModifiers","label","isInvalid","onChange","disabled","props","uniqueId","uid","showErrorElement","showContextualElement","newProps","h","className","htmlFor","input","id","ARIA_ERROR_SUFFIX","ARIA_CONTEXT_SUFFIX","cx","map","m","type","span","defaultProps"],"mappings":"0NAqBe,SAASA,GAASC,mBAAEA,EAAqB,GAAEC,MAAEA,EAAKC,UAAEA,EAASC,SAAEA,EAAQC,SAAEA,GAAW,KAAUC,IAEzG,MAAQC,SAAUC,EAAGC,iBAAEA,EAAgBC,sBAAEA,KAA0BC,GAAaL,EAEhF,OACIM,EAACV,QAAAA,CAAMW,UAAU,2BAA2BC,QAASN,GACjDI,EAACG,QAAAA,CACGC,GAAIR,KACAG,KACCF,GAAoB,CAAE,mBAAoB,GAAGD,IAAMS,QACnDP,GAAyB,CAAE,mBAAoB,GAAGF,IAAMU,KAC7DL,UAAWM,EAAG,CACV,kCACA,CAACb,EAAMO,WACP,CAAE,2CAA4CV,GAC9CF,EAAmBmB,KAAIC,GAAK,0BAA0BA,QAE1DC,KAAK,WACLjB,SAAUA,EACVD,SAAUA,IAEdQ,EAACW,OAAAA,CAAKV,UAAU,mCAAmCX,GAG/D,CAEAF,EAASwB,aAAe,CACpBpB,SAAU"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../../../src/components/internal/FormFields/InputDate/utils.ts"],"sourcesContent":["/**\n * Returns either the date input is supported or not in the current browser\n */\nconst checkDateInputSupport = (): boolean => {\n const input = document.createElement('input');\n input.setAttribute('type', 'date');\n return input.type === 'date';\n};\n\n/**\n * Returns a formatted date\n * @param value -\n * @example\n * formatDate('22111990');\n * // '22/11/1990'\n */\nconst formatDate = (value: string): string => {\n const date = value\n .replace(/\\D|\\s/g, '') // Digits only\n .replace(/^(00)(.*)?/, '01$2') // 00 -> 01\n .replace(/^(3[2-9])(.*)?/, '0$1$2') // 34 -> 03/04\n .replace(/^([4-9])(.*)?/, '0$1') // 4 -> 04\n .replace(/^([0-9]{2})(00)(.*)?/, '$101') // 01/00 -> 01/01\n .replace(/^(3[01])(02)(.*)?/, '29$2') // Force up to day 29 for Feb\n .replace(/^([0-9]{2})([2-9]|1[3-9])(.*)?/, '$10$2') // 01/4 -> 01/04\n .replace(/^([0-9]{2})([0-9]{2})([0-9])/, '$1/$2/$3') // 22111990 -> 22/11/1990\n .replace(/^([0-9]{2})([0-9])/, '$1/$2'); // 2211 -> 22/11\n\n const [day = '', month = '', year = ''] = date.split('/');\n\n // Check leap year\n if (year.length === 4 && day === '29' && month === '02' && (Number(year) % 4 !== 0 || (year.substr(2, 2) === '00' && Number(year) % 400 !== 0))) {\n return date.replace(/^29/, '28');\n }\n\n return date;\n};\n\n/**\n * Receives a formatted date and returns it as the API expects it\n * @param value -\n * @example\n * unformatDate('22/11/1990');\n * // '1990-11-22'\n */\nconst unformatDate = (value = ''): string => {\n if (value.indexOf('/') === -1) return value;\n const [day = '', month = '', year = ''] = value.split('/');\n if (!day || !month || !year) return null;\n return `${year}-${month}-${day}`;\n};\n\nexport { checkDateInputSupport, formatDate, unformatDate };\n"],"names":["checkDateInputSupport","input","document","createElement","setAttribute","type","formatDate","value","date","replace","day","month","year","split","length","Number","substr","unformatDate","indexOf"],"mappings":"MAGMA,EAAwB,KAC1B,MAAMC,EAAQC,SAASC,cAAc,SAErC,OADAF,EAAMG,aAAa,OAAQ,QACL,SAAfH,EAAMI,IAAS,EAUpBC,EAAcC,IAChB,MAAMC,EAAOD,EACRE,QAAQ,SAAU,IAClBA,QAAQ,aAAc,QACtBA,QAAQ,iBAAkB,SAC1BA,QAAQ,gBAAiB,OACzBA,QAAQ,uBAAwB,QAChCA,QAAQ,oBAAqB,QAC7BA,QAAQ,iCAAkC,SAC1CA,QAAQ,+BAAgC,YACxCA,QAAQ,qBAAsB,UAE5BC,EAAM,GAAIC,EAAQ,GAAIC,EAAO,IAAMJ,EAAKK,MAAM,KAGrD,OAAoB,IAAhBD,EAAKE,QAAwB,OAARJ,GAA0B,OAAVC,IAAmBI,OAAOH,GAAQ,GAAM,GAA4B,OAAtBA,EAAKI,OAAO,EAAG,IAAeD,OAAOH,GAAQ,KAAQ,GACjIJ,EAAKC,QAAQ,MAAO,MAGxBD,CAAAA,EAULS,EAAe,CAACV,EAAQ,MAC1B,IAA4B,IAAxBA,EAAMW,QAAQ,KAAa,OAAOX,EACtC,MAAOG,EAAM,GAAIC,EAAQ,GAAIC,EAAO,IAAML,EAAMM,MAAM,KACtD,OAAKH,GAAQC,GAAUC,EAChB,GAAGA,KAAQD,KAASD,IADS,IACJ"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../../../src/components/internal/FormFields/InputDate/utils.ts"],"sourcesContent":["/**\n * Returns either the date input is supported or not in the current browser\n */\nconst checkDateInputSupport = (): boolean => {\n const input = document.createElement('input');\n input.setAttribute('type', 'date');\n return input.type === 'date';\n};\n\n/**\n * Returns a formatted date\n * @param value -\n * @example\n * formatDate('22111990');\n * // '22/11/1990'\n */\nconst formatDate = (value: string): string => {\n const date = value\n .replace(/\\D|\\s/g, '') // Digits only\n .replace(/^(00)(.*)?/, '01$2') // 00 -> 01\n .replace(/^(3[2-9])(.*)?/, '0$1$2') // 34 -> 03/04\n .replace(/^([4-9])(.*)?/, '0$1') // 4 -> 04\n .replace(/^([0-9]{2})(00)(.*)?/, '$101') // 01/00 -> 01/01\n .replace(/^(3[01])(02)(.*)?/, '29$2') // Force up to day 29 for Feb\n .replace(/^([0-9]{2})([2-9]|1[3-9])(.*)?/, '$10$2') // 01/4 -> 01/04\n .replace(/^([0-9]{2})([0-9]{2})([0-9])/, '$1/$2/$3') // 22111990 -> 22/11/1990\n .replace(/^([0-9]{2})([0-9])/, '$1/$2'); // 2211 -> 22/11\n\n const [day = '', month = '', year = ''] = date.split('/');\n\n // Check leap year\n if (year.length === 4 && day === '29' && month === '02' && (Number(year) % 4 !== 0 || (year.substr(2, 2) === '00' && Number(year) % 400 !== 0))) {\n return date.replace(/^29/, '28');\n }\n\n return date;\n};\n\n/**\n * Receives a formatted date and returns it as the API expects it\n * @param value -\n * @example\n * unformatDate('22/11/1990');\n * // '1990-11-22'\n */\nconst unformatDate = (value = ''): string => {\n if (value.indexOf('/') === -1) return value;\n const [day = '', month = '', year = ''] = value.split('/');\n if (!day || !month || !year) return null;\n return `${year}-${month}-${day}`;\n};\n\nexport { checkDateInputSupport, formatDate, unformatDate };\n"],"names":["checkDateInputSupport","input","document","createElement","setAttribute","type","formatDate","value","date","replace","day","month","year","split","length","Number","substr","unformatDate","indexOf"],"mappings":"MAGMA,EAAwB,KAC1B,MAAMC,EAAQC,SAASC,cAAc,SAErC,OADAF,EAAMG,aAAa,OAAQ,QACL,SAAfH,EAAMI,IAAS,EAUpBC,EAAcC,IAChB,MAAMC,EAAOD,EACRE,QAAQ,SAAU,IAClBA,QAAQ,aAAc,QACtBA,QAAQ,iBAAkB,SAC1BA,QAAQ,gBAAiB,OACzBA,QAAQ,uBAAwB,QAChCA,QAAQ,oBAAqB,QAC7BA,QAAQ,iCAAkC,SAC1CA,QAAQ,+BAAgC,YACxCA,QAAQ,qBAAsB,UAE5BC,EAAM,GAAIC,EAAQ,GAAIC,EAAO,IAAMJ,EAAKK,MAAM,KAGrD,OAAoB,IAAhBD,EAAKE,QAAwB,OAARJ,GAA0B,OAAVC,IAAmBI,OAAOH,GAAQ,GAAM,GAA4B,OAAtBA,EAAKI,OAAO,EAAG,IAAeD,OAAOH,GAAQ,KAAQ,GACjIJ,EAAKC,QAAQ,MAAO,MAGxBD,CAAAA,EAULS,EAAe,CAACV,EAAQ,MAC1B,IAA2B,IAAvBA,EAAMW,QAAQ,KAAa,OAAOX,EACtC,MAAOG,EAAM,GAAIC,EAAQ,GAAIC,EAAO,IAAML,EAAMM,MAAM,KACtD,OAAKH,GAAQC,GAAUC,EAChB,GAAGA,KAAQD,KAASD,IADS,IACJ"}
@@ -1,2 +1,2 @@
1
- import{createElement as e,Fragment as t}from"../../../../../external/preact/dist/preact.js";import n from"../../../../../_virtual/index.js";import o from"../../../Img/Img.js";function a({filterable:t,toggleButtonRef:n,...o}){if(t){const{id:t,...a}=o;return e("div",{...a,ref:n})}return e("button",{id:o.id,"aria-describedby":o.ariaDescribedBy,type:"button",...o,ref:n})}function d(d){const{active:r,selected:i,inputText:c,readonly:l,showList:s,required:u}=d,_=i.selectedOptionName||i.name||d.placeholder||"",p=s?c:_,f=l?null:d.filterable?e=>{e.preventDefault(),document.activeElement===d.filterInputRef.current?d.showList||d.toggleList(e):d.filterInputRef.current&&d.filterInputRef.current.focus()}:d.toggleList,b=l?null:d.onFocus,y=r.id?`listItem-${r.id}`:"";return e(a,{className:n({"adyen-checkout__dropdown__button":!0,"adyen-checkout__dropdown__button--readonly":l,"adyen-checkout__dropdown__button--active":s,"adyen-checkout__dropdown__button--invalid":d.isInvalid,"adyen-checkout__dropdown__button--valid":d.isValid,"adyen-checkout__dropdown__button--disabled":i.disabled}),disabled:d.disabled,filterable:d.filterable,onClick:f,onKeyDown:l?null:d.onButtonKeyDown,toggleButtonRef:d.toggleButtonRef,...d.allowIdOnButton&&d.id&&{id:d.id}},d.filterable?e(t,null,!s&&i.icon&&e(o,{className:"adyen-checkout__dropdown__button__icon",src:i.icon,alt:i.name}),e("input",{value:p,"aria-autocomplete":"list","aria-controls":d.selectListId,"aria-expanded":s,"aria-owns":d.selectListId,autoComplete:"off",className:"adyen-checkout__filter-input",onInput:d.onInput,onFocus:b,ref:d.filterInputRef,role:"combobox","aria-activedescendant":y,type:"text",readOnly:d.readonly,id:d.id,"aria-describedby":d.ariaDescribedBy,required:u}),!s&&i.secondaryText&&e("span",{className:"adyen-checkout__dropdown__button__secondary-text"},i.secondaryText)):e(t,null,i.icon&&e(o,{className:"adyen-checkout__dropdown__button__icon",src:i.icon,alt:i.name}),e("span",{className:"adyen-checkout__dropdown__button__text"},_),i.secondaryText&&e("span",{className:"adyen-checkout__dropdown__button__secondary-text"},i.secondaryText)))}export{d as default};
1
+ import{createElement as e,Fragment as t}from"../../../../../external/preact/dist/preact.js";import o from"../../../../../_virtual/index.js";import n from"../../../Img/Img.js";import{useMemo as a}from"../../../../../external/preact/hooks/dist/hooks.js";function d({filterable:t,toggleButtonRef:o,...n}){if(t){const{id:t,...a}=n;return e("div",{...a,ref:o})}return e("button",{id:n.id,"aria-describedby":n.ariaDescribedBy,type:"button",...n,ref:o})}function r(r){const{active:c,selected:i,inputText:l,readonly:s,showList:u,required:_}=r,p=a((()=>{const e=i.selectedOptionName||i.name;return!0!==("string"==typeof e&&""!==e.trim())}),[i,r.placeholder]),f=i.selectedOptionName||i.name||r.placeholder||"",m=u?l:f,y=s?null:r.filterable?e=>{e.preventDefault(),document.activeElement===r.filterInputRef.current?r.showList||r.toggleList(e):r.filterInputRef.current&&r.filterInputRef.current.focus()}:r.toggleList,b=s?null:r.onFocus,h=c.id?`listItem-${c.id}`:"";return e(d,{className:o({"adyen-checkout__dropdown__button":!0,"adyen-checkout__dropdown__button--readonly":s,"adyen-checkout__dropdown__button--active":u,"adyen-checkout__dropdown__button--invalid":r.isInvalid,"adyen-checkout__dropdown__button--valid":r.isValid,"adyen-checkout__dropdown__button--disabled":i.disabled}),disabled:r.disabled,filterable:r.filterable,onClick:y,onKeyDown:s?null:r.onButtonKeyDown,toggleButtonRef:r.toggleButtonRef,...r.allowIdOnButton&&r.id&&{id:r.id}},r.filterable?e(t,null,!u&&i.icon&&e(n,{className:"adyen-checkout__dropdown__button__icon",src:i.icon,alt:i.name}),e("input",{value:m,"aria-autocomplete":"list","aria-controls":r.selectListId,"aria-expanded":u,"aria-owns":r.selectListId,autoComplete:"off",className:"adyen-checkout__filter-input",onInput:r.onInput,onFocus:b,ref:r.filterInputRef,role:"combobox","aria-activedescendant":h,type:"text",readOnly:r.readonly,id:r.id,"aria-describedby":r.ariaDescribedBy,required:_}),!u&&i.secondaryText&&e("span",{className:"adyen-checkout__dropdown__button__secondary-text"},i.secondaryText)):e(t,null,i.icon&&e(n,{className:"adyen-checkout__dropdown__button__icon",src:i.icon,alt:i.name}),e("span",{className:o("adyen-checkout__dropdown__button__text",{"adyen-checkout__dropdown__button__text-placeholder":p})},f),i.secondaryText&&e("span",{className:"adyen-checkout__dropdown__button__secondary-text"},i.secondaryText)))}export{r as default};
2
2
  //# sourceMappingURL=SelectButton.js.map