@adyen/adyen-web 6.0.0-alpha.7 → 6.0.0-beta.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 (271) hide show
  1. package/dist/cjs/adyen.css +65 -65
  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 +1767 -1832
  6. package/dist/es/adyen.css +65 -65
  7. package/dist/es/adyen.css.map +1 -1
  8. package/dist/es/components/ANCV/ANCV.js +1 -1
  9. package/dist/es/components/ANCV/ANCV.js.map +1 -1
  10. package/dist/es/components/ANCV/components/ANCVInput.js.map +1 -1
  11. package/dist/es/components/Ach/Ach.js +1 -1
  12. package/dist/es/components/Ach/Ach.js.map +1 -1
  13. package/dist/es/components/Ach/components/AchInput/AchInput.js +1 -1
  14. package/dist/es/components/Ach/components/AchInput/AchInput.js.map +1 -1
  15. package/dist/es/components/Ach/components/AchInput/defaultProps.js +1 -1
  16. package/dist/es/components/Ach/components/AchInput/defaultProps.js.map +1 -1
  17. package/dist/es/components/AfterPay/AfterPayB2B.js +1 -1
  18. package/dist/es/components/AfterPay/AfterPayB2B.js.map +1 -1
  19. package/dist/es/components/BacsDD/BacsDD.js +1 -1
  20. package/dist/es/components/BacsDD/BacsDD.js.map +1 -1
  21. package/dist/es/components/BacsDD/components/BacsInput.js +1 -1
  22. package/dist/es/components/BacsDD/components/BacsInput.js.map +1 -1
  23. package/dist/es/components/BankTransfer/BankTransfer.js +1 -1
  24. package/dist/es/components/BankTransfer/BankTransfer.js.map +1 -1
  25. package/dist/es/components/Blik/Blik.js +1 -1
  26. package/dist/es/components/Blik/Blik.js.map +1 -1
  27. package/dist/es/components/Blik/components/BlikInput.js.map +1 -1
  28. package/dist/es/components/Boleto/components/BoletoInput/BoletoInput.js +1 -1
  29. package/dist/es/components/Boleto/components/BoletoInput/BoletoInput.js.map +1 -1
  30. package/dist/es/components/Card/Card.js +1 -1
  31. package/dist/es/components/Card/Card.js.map +1 -1
  32. package/dist/es/components/Card/components/CardInput/CardInput.js +1 -1
  33. package/dist/es/components/Card/components/CardInput/CardInput.js.map +1 -1
  34. package/dist/es/components/Card/components/CardInput/handlers.js +1 -1
  35. package/dist/es/components/Card/components/CardInput/types.js.map +1 -1
  36. package/dist/es/components/Card/components/CardInput/useSRPanelForCardInputErrors.js +2 -0
  37. package/dist/es/components/Card/components/CardInput/useSRPanelForCardInputErrors.js.map +1 -0
  38. package/dist/es/components/CashAppPay/CashAppPay.js +1 -1
  39. package/dist/es/components/CashAppPay/CashAppPay.js.map +1 -1
  40. package/dist/es/components/Doku/Doku.js +1 -1
  41. package/dist/es/components/Doku/Doku.js.map +1 -1
  42. package/dist/es/components/Doku/components/DokuInput/DokuInput.js +1 -1
  43. package/dist/es/components/Doku/components/DokuInput/DokuInput.js.map +1 -1
  44. package/dist/es/components/Dropin/Dropin.js +1 -1
  45. package/dist/es/components/Dropin/Dropin.js.map +1 -1
  46. package/dist/es/components/Dropin/components/DropinComponent.js +1 -1
  47. package/dist/es/components/Dropin/components/DropinComponent.js.map +1 -1
  48. package/dist/es/components/Dropin/components/PaymentMethod/PaymentMethodList.js +1 -1
  49. package/dist/es/components/Dropin/components/PaymentMethod/PaymentMethodList.js.map +1 -1
  50. package/dist/es/components/Dropin/elements/createElements.js.map +1 -1
  51. package/dist/es/components/Dropin/elements/createInstantPaymentElements.js.map +1 -1
  52. package/dist/es/components/Dropin/elements/createStoredElements.js.map +1 -1
  53. package/dist/es/components/Dropin/elements/filters.js.map +1 -1
  54. package/dist/es/components/Econtext/Econtext.js +1 -1
  55. package/dist/es/components/Econtext/Econtext.js.map +1 -1
  56. package/dist/es/components/Econtext/components/EcontextInput/EcontextInput.js +1 -1
  57. package/dist/es/components/Econtext/components/EcontextInput/EcontextInput.js.map +1 -1
  58. package/dist/es/components/Giropay/Giropay.js +1 -1
  59. package/dist/es/components/Giropay/Giropay.js.map +1 -1
  60. package/dist/es/components/GooglePay/GooglePay.js.map +1 -1
  61. package/dist/es/components/Multibanco/Multibanco.js +1 -1
  62. package/dist/es/components/Multibanco/Multibanco.js.map +1 -1
  63. package/dist/es/components/PersonalDetails/PersonalDetails.js +1 -1
  64. package/dist/es/components/PersonalDetails/PersonalDetails.js.map +1 -1
  65. package/dist/es/components/Redirect/Redirect.js +1 -1
  66. package/dist/es/components/Redirect/Redirect.js.map +1 -1
  67. package/dist/es/components/Sepa/Sepa.js +1 -1
  68. package/dist/es/components/Sepa/Sepa.js.map +1 -1
  69. package/dist/es/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.js +1 -1
  70. package/dist/es/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.js.map +1 -1
  71. package/dist/es/components/ThreeDS2/components/DeviceFingerprint/PrepareFingerprint3DS2.js +1 -1
  72. package/dist/es/components/ThreeDS2/components/DeviceFingerprint/PrepareFingerprint3DS2.js.map +1 -1
  73. package/dist/es/components/Trustly/Trustly.js +1 -1
  74. package/dist/es/components/Trustly/Trustly.js.map +1 -1
  75. package/dist/es/components/WeChat/config.js +1 -1
  76. package/dist/es/components/WeChat/config.js.map +1 -1
  77. package/dist/es/components/components-name-map.js +1 -1
  78. package/dist/es/components/components-name-map.js.map +1 -1
  79. package/dist/es/components/helpers/IssuerListContainer/IssuerListContainer.js +1 -1
  80. package/dist/es/components/helpers/IssuerListContainer/IssuerListContainer.js.map +1 -1
  81. package/dist/es/components/helpers/OpenInvoiceContainer/OpenInvoiceContainer.js +1 -1
  82. package/dist/es/components/helpers/OpenInvoiceContainer/OpenInvoiceContainer.js.map +1 -1
  83. package/dist/es/components/helpers/QRLoaderContainer/QRLoaderContainer.js +1 -1
  84. package/dist/es/components/helpers/QRLoaderContainer/QRLoaderContainer.js.map +1 -1
  85. package/dist/es/components/index.js +1 -1
  86. package/dist/es/components/internal/BaseElement/BaseElement.js +1 -1
  87. package/dist/es/components/internal/BaseElement/BaseElement.js.map +1 -1
  88. package/dist/es/components/internal/ClickToPay/components/CtPCards/CtPCards.js.map +1 -1
  89. package/dist/es/components/internal/ClickToPay/components/CtPOneTimePassword/CtPOneTimePasswordInput/CtPResendOtpLink.js.map +1 -1
  90. package/dist/es/components/internal/ClickToPay/models/ShopperCard.js +1 -1
  91. package/dist/es/components/internal/ClickToPay/models/ShopperCard.js.map +1 -1
  92. package/dist/es/components/internal/ClickToPay/services/sdks/SrciError.js +1 -1
  93. package/dist/es/components/internal/ClickToPay/services/sdks/SrciError.js.map +1 -1
  94. package/dist/es/components/internal/ClickToPay/services/utils.js +1 -1
  95. package/dist/es/components/internal/ClickToPay/services/utils.js.map +1 -1
  96. package/dist/es/components/internal/OpenInvoice/OpenInvoice.js +1 -1
  97. package/dist/es/components/internal/OpenInvoice/OpenInvoice.js.map +1 -1
  98. package/dist/es/components/internal/RedirectButton/RedirectButton.js +1 -1
  99. package/dist/es/components/internal/RedirectButton/RedirectButton.js.map +1 -1
  100. package/dist/es/components/internal/UIElement/UIElement.js +1 -1
  101. package/dist/es/components/internal/UIElement/UIElement.js.map +1 -1
  102. package/dist/es/components/tx-variants.js +1 -1
  103. package/dist/es/components/tx-variants.js.map +1 -1
  104. package/dist/es/core/AdyenCheckout.js.map +1 -1
  105. package/dist/es/core/Analytics/Analytics.js +1 -1
  106. package/dist/es/core/Analytics/Analytics.js.map +1 -1
  107. package/dist/es/core/Analytics/analyticsPreProcessor.js +1 -1
  108. package/dist/es/core/Analytics/analyticsPreProcessor.js.map +1 -1
  109. package/dist/es/core/Analytics/constants.js +1 -1
  110. package/dist/es/core/Analytics/constants.js.map +1 -1
  111. package/dist/es/core/Analytics/utils.js +1 -1
  112. package/dist/es/core/Analytics/utils.js.map +1 -1
  113. package/dist/es/core/CheckoutSession/CheckoutSession.js.map +1 -1
  114. package/dist/es/core/ProcessResponse/PaymentAction/PaymentAction.js.map +1 -1
  115. package/dist/es/core/ProcessResponse/PaymentAction/actionTypes.js +1 -1
  116. package/dist/es/core/ProcessResponse/PaymentAction/actionTypes.js.map +1 -1
  117. package/dist/es/core/Services/analytics/collect-id.js +1 -1
  118. package/dist/es/core/Services/analytics/collect-id.js.map +1 -1
  119. package/dist/es/core/Services/http.js +1 -1
  120. package/dist/es/core/Services/http.js.map +1 -1
  121. package/dist/es/core/Services/sessions/setup-session.js +1 -1
  122. package/dist/es/core/Services/sessions/setup-session.js.map +1 -1
  123. package/dist/es/core/config.js +1 -1
  124. package/dist/es/core/config.js.map +1 -1
  125. package/dist/es/core/core.js +1 -1
  126. package/dist/es/core/core.js.map +1 -1
  127. package/dist/es/core/core.registry.js +1 -1
  128. package/dist/es/core/core.registry.js.map +1 -1
  129. package/dist/es/external/preact/dist/preact.js +1 -1
  130. package/dist/es/external/preact/dist/preact.js.map +1 -1
  131. package/dist/es/index.d.ts +1767 -1832
  132. package/dist/es/index.js +1 -1
  133. package/dist/es/language/constants.js +1 -1
  134. package/dist/es/language/constants.js.map +1 -1
  135. package/dist/es-legacy/adyen.css +65 -65
  136. package/dist/es-legacy/adyen.css.map +1 -1
  137. package/dist/es-legacy/components/ANCV/ANCV.js +1 -1
  138. package/dist/es-legacy/components/ANCV/ANCV.js.map +1 -1
  139. package/dist/es-legacy/components/ANCV/components/ANCVInput.js.map +1 -1
  140. package/dist/es-legacy/components/Ach/Ach.js +1 -1
  141. package/dist/es-legacy/components/Ach/Ach.js.map +1 -1
  142. package/dist/es-legacy/components/Ach/components/AchInput/AchInput.js +1 -1
  143. package/dist/es-legacy/components/Ach/components/AchInput/AchInput.js.map +1 -1
  144. package/dist/es-legacy/components/Ach/components/AchInput/defaultProps.js +1 -1
  145. package/dist/es-legacy/components/Ach/components/AchInput/defaultProps.js.map +1 -1
  146. package/dist/es-legacy/components/AfterPay/AfterPayB2B.js +1 -1
  147. package/dist/es-legacy/components/AfterPay/AfterPayB2B.js.map +1 -1
  148. package/dist/es-legacy/components/BacsDD/BacsDD.js +1 -1
  149. package/dist/es-legacy/components/BacsDD/BacsDD.js.map +1 -1
  150. package/dist/es-legacy/components/BacsDD/components/BacsInput.js +1 -1
  151. package/dist/es-legacy/components/BacsDD/components/BacsInput.js.map +1 -1
  152. package/dist/es-legacy/components/BankTransfer/BankTransfer.js +1 -1
  153. package/dist/es-legacy/components/BankTransfer/BankTransfer.js.map +1 -1
  154. package/dist/es-legacy/components/Blik/Blik.js +1 -1
  155. package/dist/es-legacy/components/Blik/Blik.js.map +1 -1
  156. package/dist/es-legacy/components/Blik/components/BlikInput.js.map +1 -1
  157. package/dist/es-legacy/components/Boleto/components/BoletoInput/BoletoInput.js +1 -1
  158. package/dist/es-legacy/components/Boleto/components/BoletoInput/BoletoInput.js.map +1 -1
  159. package/dist/es-legacy/components/Card/Card.js +1 -1
  160. package/dist/es-legacy/components/Card/Card.js.map +1 -1
  161. package/dist/es-legacy/components/Card/components/CardInput/CardInput.js +1 -1
  162. package/dist/es-legacy/components/Card/components/CardInput/CardInput.js.map +1 -1
  163. package/dist/es-legacy/components/Card/components/CardInput/handlers.js +1 -1
  164. package/dist/es-legacy/components/Card/components/CardInput/types.js.map +1 -1
  165. package/dist/es-legacy/components/Card/components/CardInput/useSRPanelForCardInputErrors.js +2 -0
  166. package/dist/es-legacy/components/Card/components/CardInput/useSRPanelForCardInputErrors.js.map +1 -0
  167. package/dist/es-legacy/components/CashAppPay/CashAppPay.js +1 -1
  168. package/dist/es-legacy/components/CashAppPay/CashAppPay.js.map +1 -1
  169. package/dist/es-legacy/components/Doku/Doku.js +1 -1
  170. package/dist/es-legacy/components/Doku/Doku.js.map +1 -1
  171. package/dist/es-legacy/components/Doku/components/DokuInput/DokuInput.js +1 -1
  172. package/dist/es-legacy/components/Doku/components/DokuInput/DokuInput.js.map +1 -1
  173. package/dist/es-legacy/components/Dropin/Dropin.js +1 -1
  174. package/dist/es-legacy/components/Dropin/Dropin.js.map +1 -1
  175. package/dist/es-legacy/components/Dropin/components/DropinComponent.js +1 -1
  176. package/dist/es-legacy/components/Dropin/components/DropinComponent.js.map +1 -1
  177. package/dist/es-legacy/components/Dropin/components/PaymentMethod/PaymentMethodList.js +1 -1
  178. package/dist/es-legacy/components/Dropin/components/PaymentMethod/PaymentMethodList.js.map +1 -1
  179. package/dist/es-legacy/components/Dropin/elements/createElements.js.map +1 -1
  180. package/dist/es-legacy/components/Dropin/elements/createInstantPaymentElements.js.map +1 -1
  181. package/dist/es-legacy/components/Dropin/elements/createStoredElements.js.map +1 -1
  182. package/dist/es-legacy/components/Dropin/elements/filters.js.map +1 -1
  183. package/dist/es-legacy/components/Econtext/Econtext.js +1 -1
  184. package/dist/es-legacy/components/Econtext/Econtext.js.map +1 -1
  185. package/dist/es-legacy/components/Econtext/components/EcontextInput/EcontextInput.js +1 -1
  186. package/dist/es-legacy/components/Econtext/components/EcontextInput/EcontextInput.js.map +1 -1
  187. package/dist/es-legacy/components/Giropay/Giropay.js +1 -1
  188. package/dist/es-legacy/components/Giropay/Giropay.js.map +1 -1
  189. package/dist/es-legacy/components/GooglePay/GooglePay.js.map +1 -1
  190. package/dist/es-legacy/components/Multibanco/Multibanco.js +1 -1
  191. package/dist/es-legacy/components/Multibanco/Multibanco.js.map +1 -1
  192. package/dist/es-legacy/components/PersonalDetails/PersonalDetails.js +1 -1
  193. package/dist/es-legacy/components/PersonalDetails/PersonalDetails.js.map +1 -1
  194. package/dist/es-legacy/components/Redirect/Redirect.js +1 -1
  195. package/dist/es-legacy/components/Redirect/Redirect.js.map +1 -1
  196. package/dist/es-legacy/components/Sepa/Sepa.js +1 -1
  197. package/dist/es-legacy/components/Sepa/Sepa.js.map +1 -1
  198. package/dist/es-legacy/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.js +1 -1
  199. package/dist/es-legacy/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.js.map +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/Trustly/Trustly.js +1 -1
  203. package/dist/es-legacy/components/Trustly/Trustly.js.map +1 -1
  204. package/dist/es-legacy/components/WeChat/config.js +1 -1
  205. package/dist/es-legacy/components/WeChat/config.js.map +1 -1
  206. package/dist/es-legacy/components/components-name-map.js +1 -1
  207. package/dist/es-legacy/components/components-name-map.js.map +1 -1
  208. package/dist/es-legacy/components/helpers/IssuerListContainer/IssuerListContainer.js +1 -1
  209. package/dist/es-legacy/components/helpers/IssuerListContainer/IssuerListContainer.js.map +1 -1
  210. package/dist/es-legacy/components/helpers/OpenInvoiceContainer/OpenInvoiceContainer.js +1 -1
  211. package/dist/es-legacy/components/helpers/OpenInvoiceContainer/OpenInvoiceContainer.js.map +1 -1
  212. package/dist/es-legacy/components/helpers/QRLoaderContainer/QRLoaderContainer.js +1 -1
  213. package/dist/es-legacy/components/helpers/QRLoaderContainer/QRLoaderContainer.js.map +1 -1
  214. package/dist/es-legacy/components/index.js +1 -1
  215. package/dist/es-legacy/components/internal/BaseElement/BaseElement.js +1 -1
  216. package/dist/es-legacy/components/internal/BaseElement/BaseElement.js.map +1 -1
  217. package/dist/es-legacy/components/internal/ClickToPay/components/CtPCards/CtPCards.js.map +1 -1
  218. package/dist/es-legacy/components/internal/ClickToPay/components/CtPOneTimePassword/CtPOneTimePasswordInput/CtPResendOtpLink.js.map +1 -1
  219. package/dist/es-legacy/components/internal/ClickToPay/models/ShopperCard.js +1 -1
  220. package/dist/es-legacy/components/internal/ClickToPay/models/ShopperCard.js.map +1 -1
  221. package/dist/es-legacy/components/internal/ClickToPay/services/sdks/SrciError.js +1 -1
  222. package/dist/es-legacy/components/internal/ClickToPay/services/sdks/SrciError.js.map +1 -1
  223. package/dist/es-legacy/components/internal/ClickToPay/services/utils.js +1 -1
  224. package/dist/es-legacy/components/internal/ClickToPay/services/utils.js.map +1 -1
  225. package/dist/es-legacy/components/internal/OpenInvoice/OpenInvoice.js +1 -1
  226. package/dist/es-legacy/components/internal/OpenInvoice/OpenInvoice.js.map +1 -1
  227. package/dist/es-legacy/components/internal/RedirectButton/RedirectButton.js +1 -1
  228. package/dist/es-legacy/components/internal/RedirectButton/RedirectButton.js.map +1 -1
  229. package/dist/es-legacy/components/internal/UIElement/UIElement.js +1 -1
  230. package/dist/es-legacy/components/internal/UIElement/UIElement.js.map +1 -1
  231. package/dist/es-legacy/components/tx-variants.js +1 -1
  232. package/dist/es-legacy/components/tx-variants.js.map +1 -1
  233. package/dist/es-legacy/core/AdyenCheckout.js.map +1 -1
  234. package/dist/es-legacy/core/Analytics/Analytics.js +1 -1
  235. package/dist/es-legacy/core/Analytics/Analytics.js.map +1 -1
  236. package/dist/es-legacy/core/Analytics/analyticsPreProcessor.js +1 -1
  237. package/dist/es-legacy/core/Analytics/analyticsPreProcessor.js.map +1 -1
  238. package/dist/es-legacy/core/Analytics/constants.js +1 -1
  239. package/dist/es-legacy/core/Analytics/constants.js.map +1 -1
  240. package/dist/es-legacy/core/Analytics/utils.js +1 -1
  241. package/dist/es-legacy/core/Analytics/utils.js.map +1 -1
  242. package/dist/es-legacy/core/CheckoutSession/CheckoutSession.js.map +1 -1
  243. package/dist/es-legacy/core/ProcessResponse/PaymentAction/PaymentAction.js.map +1 -1
  244. package/dist/es-legacy/core/ProcessResponse/PaymentAction/actionTypes.js +1 -1
  245. package/dist/es-legacy/core/ProcessResponse/PaymentAction/actionTypes.js.map +1 -1
  246. package/dist/es-legacy/core/Services/analytics/collect-id.js +1 -1
  247. package/dist/es-legacy/core/Services/analytics/collect-id.js.map +1 -1
  248. package/dist/es-legacy/core/Services/http.js +1 -1
  249. package/dist/es-legacy/core/Services/http.js.map +1 -1
  250. package/dist/es-legacy/core/Services/sessions/setup-session.js +1 -1
  251. package/dist/es-legacy/core/Services/sessions/setup-session.js.map +1 -1
  252. package/dist/es-legacy/core/config.js +1 -1
  253. package/dist/es-legacy/core/config.js.map +1 -1
  254. package/dist/es-legacy/core/core.js +1 -1
  255. package/dist/es-legacy/core/core.js.map +1 -1
  256. package/dist/es-legacy/core/core.registry.js +1 -1
  257. package/dist/es-legacy/core/core.registry.js.map +1 -1
  258. package/dist/es-legacy/external/preact/dist/preact.js +1 -1
  259. package/dist/es-legacy/external/preact/dist/preact.js.map +1 -1
  260. package/dist/es-legacy/index.js +1 -1
  261. package/dist/es-legacy/language/constants.js +1 -1
  262. package/dist/es-legacy/language/constants.js.map +1 -1
  263. package/package.json +30 -30
  264. package/dist/es/components/Ideal/index.js +0 -2
  265. package/dist/es/components/Ideal/index.js.map +0 -1
  266. package/dist/es/core/Services/analytics/log-event.js +0 -2
  267. package/dist/es/core/Services/analytics/log-event.js.map +0 -1
  268. package/dist/es-legacy/components/Ideal/index.js +0 -2
  269. package/dist/es-legacy/components/Ideal/index.js.map +0 -1
  270. package/dist/es-legacy/core/Services/analytics/log-event.js +0 -2
  271. package/dist/es-legacy/core/Services/analytics/log-event.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"GooglePay.js","sources":["../../../../src/components/GooglePay/GooglePay.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport GooglePayService from './GooglePayService';\nimport GooglePayButton from './components/GooglePayButton';\nimport defaultProps from './defaultProps';\nimport { formatGooglePayContactToAdyenAddressFormat, getGooglePayLocale } from './utils';\nimport collectBrowserInfo from '../../utils/browserInfo';\nimport AdyenCheckoutError from '../../core/Errors/AdyenCheckoutError';\nimport { TxVariants } from '../tx-variants';\nimport { sanitizeResponse, verifyPaymentDidNotFail } from '../internal/UIElement/utils';\nimport { ANALYTICS_INSTANT_PAYMENT_BUTTON, ANALYTICS_SELECTED_STR } from '../../core/Analytics/constants';\n\nimport type { AddressData, PaymentResponseData, RawPaymentResponse } from '../../types/global-types';\nimport type { GooglePayConfiguration } from './types';\nimport type { ICore } from '../../core/types';\nimport { SendAnalyticsObject } from '../../core/Analytics/types';\n\nclass GooglePay extends UIElement<GooglePayConfiguration> {\n public static type = TxVariants.googlepay;\n public static txVariants = [TxVariants.googlepay, TxVariants.paywithgoogle];\n public static defaultProps = defaultProps;\n\n protected readonly googlePay;\n\n constructor(checkout: ICore, props?: GooglePayConfiguration) {\n super(checkout, props);\n this.handleAuthorization = this.handleAuthorization.bind(this);\n\n const { isExpress, paymentDataCallbacks } = this.props;\n\n if (isExpress === false && paymentDataCallbacks?.onPaymentDataChanged) {\n throw new AdyenCheckoutError(\n 'IMPLEMENTATION_ERROR',\n 'GooglePay - You must set \"isExpress\" flag to \"true\" in order to use \"onPaymentDataChanged\" callback'\n );\n }\n\n this.googlePay = new GooglePayService(this.props.environment, {\n ...(isExpress && paymentDataCallbacks?.onPaymentDataChanged && { onPaymentDataChanged: paymentDataCallbacks.onPaymentDataChanged }),\n onPaymentAuthorized: this.onPaymentAuthorized\n });\n }\n\n protected override formatProps(props): GooglePayConfiguration {\n const buttonSizeMode = props.buttonSizeMode ?? (props.isDropin ? 'fill' : 'static');\n const buttonLocale = getGooglePayLocale(props.buttonLocale ?? props.i18n?.locale);\n\n const callbackIntents: google.payments.api.CallbackIntent[] = [...props.callbackIntents, 'PAYMENT_AUTHORIZATION'];\n\n return {\n ...props,\n configuration: props.configuration,\n buttonSizeMode,\n buttonLocale,\n callbackIntents\n };\n }\n\n /**\n * Formats the component data output\n */\n protected override formatData() {\n const { googlePayCardNetwork, googlePayToken, billingAddress, deliveryAddress } = this.state;\n const { isExpress } = this.props;\n\n return {\n paymentMethod: {\n type: this.type,\n googlePayCardNetwork,\n googlePayToken,\n ...(isExpress && { subtype: 'express' })\n },\n browserInfo: this.browserInfo,\n origin: !!window && window.location.origin,\n ...(billingAddress && { billingAddress }),\n ...(deliveryAddress && { deliveryAddress })\n };\n }\n\n protected submitAnalytics(analyticsObj: SendAnalyticsObject) {\n // Analytics will need to know about this.props.isExpress & this.props.expressPage\n super.submitAnalytics({ ...analyticsObj }, this.props);\n }\n\n public override submit = () => {\n // Analytics\n if (this.props.isInstantPayment) {\n this.submitAnalytics({ type: ANALYTICS_SELECTED_STR, target: ANALYTICS_INSTANT_PAYMENT_BUTTON });\n }\n\n new Promise((resolve, reject) => this.props.onClick(resolve, reject))\n .then(() => this.googlePay.initiatePayment(this.props, this.core.options.countryCode))\n .catch((error: google.payments.api.PaymentsError) => {\n if (error.statusCode === 'CANCELED') {\n this.handleError(new AdyenCheckoutError('CANCEL', error.toString(), { cause: error }));\n } else {\n this.handleError(new AdyenCheckoutError('ERROR', error.toString(), { cause: error }));\n }\n });\n };\n\n /**\n * Method called when the payment is authorized in the payment sheet\n *\n * @see https://developers.google.com/pay/api/web/reference/client#onPaymentAuthorized\n **/\n private onPaymentAuthorized = async (paymentData: google.payments.api.PaymentData): Promise<google.payments.api.PaymentAuthorizationResult> => {\n const billingAddress: AddressData = formatGooglePayContactToAdyenAddressFormat(paymentData.paymentMethodData.info.billingAddress);\n const deliveryAddress: AddressData = formatGooglePayContactToAdyenAddressFormat(paymentData.shippingAddress, true);\n\n this.setState({\n authorizedEvent: paymentData,\n googlePayToken: paymentData.paymentMethodData.tokenizationData.token,\n googlePayCardNetwork: paymentData.paymentMethodData.info.cardNetwork,\n ...(billingAddress && { billingAddress }),\n ...(deliveryAddress && { deliveryAddress })\n });\n\n return new Promise<google.payments.api.PaymentAuthorizationResult>(resolve => {\n this.handleAuthorization()\n .then(this.makePaymentsCall)\n .then(sanitizeResponse)\n .then(verifyPaymentDidNotFail)\n .then((paymentResponse: PaymentResponseData) => {\n resolve({ transactionState: 'SUCCESS' });\n return paymentResponse;\n })\n .then(paymentResponse => {\n this.handleResponse(paymentResponse);\n })\n .catch((paymentResponse?: RawPaymentResponse) => {\n this.setElementStatus('ready');\n\n const googlePayError = paymentResponse?.error?.googlePayError;\n const fallbackMessage = this.props.i18n.get('error.subtitle.payment');\n\n const error: google.payments.api.PaymentDataError =\n typeof googlePayError === 'string' || undefined\n ? {\n intent: 'PAYMENT_AUTHORIZATION',\n reason: 'OTHER_ERROR',\n message: (googlePayError as string) || fallbackMessage\n }\n : {\n intent: googlePayError?.intent || 'PAYMENT_AUTHORIZATION',\n reason: googlePayError?.reason || 'OTHER_ERROR',\n message: googlePayError?.message || fallbackMessage\n };\n\n resolve({\n transactionState: 'ERROR',\n error\n });\n\n const responseWithError = {\n ...paymentResponse,\n error: {\n googlePayError: error\n }\n };\n\n this.handleFailedResult(responseWithError);\n });\n });\n };\n\n /**\n * Call the 'onAuthorized' callback if available.\n * Must be resolved/reject for the payment flow to continue\n */\n private async handleAuthorization(): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (!this.props.onAuthorized) {\n resolve();\n }\n\n const { authorizedEvent, billingAddress, deliveryAddress } = this.state;\n\n this.props.onAuthorized(\n {\n authorizedEvent,\n ...(billingAddress && { billingAddress }),\n ...(deliveryAddress && { deliveryAddress })\n },\n { resolve, reject }\n );\n }).catch((error?: google.payments.api.PaymentDataError | string) => {\n // Format error in a way that the 'catch' of the 'onPaymentAuthorize' block accepts it\n const data = { error: { googlePayError: error } };\n return Promise.reject(data);\n });\n }\n\n /**\n * Validation\n */\n get isValid(): boolean {\n return !!this.state.googlePayToken;\n }\n\n /**\n * Determine a shopper's ability to return a form of payment from the Google Pay API.\n */\n public override async isAvailable(): Promise<void> {\n return this.isReadyToPay()\n .then(response => {\n if (!response.result) {\n throw new AdyenCheckoutError('ERROR', 'GooglePay is not available');\n }\n\n if (response.paymentMethodPresent === false) {\n throw new AdyenCheckoutError('ERROR', 'GooglePay - No paymentMethodPresent');\n }\n\n return Promise.resolve();\n })\n .catch(error => {\n return Promise.reject(error);\n });\n }\n\n /**\n * Determine a shopper's ability to return a form of payment from the Google Pay API.\n */\n public isReadyToPay = (): Promise<google.payments.api.IsReadyToPayResponse> => {\n return this.googlePay.isReadyToPay(this.props);\n };\n\n /**\n * Use this method to prefetch a PaymentDataRequest configuration to improve loadPaymentData execution time on later user interaction. No value is returned.\n */\n public prefetch = (): void => {\n return this.googlePay.prefetchPaymentData(this.props, this.core.options.countryCode);\n };\n\n get browserInfo() {\n return collectBrowserInfo();\n }\n\n get icon(): string {\n return this.props.icon ?? this.resources.getImage()('googlepay');\n }\n\n render() {\n if (this.props.showPayButton) {\n return (\n <GooglePayButton\n buttonColor={this.props.buttonColor}\n buttonType={this.props.buttonType}\n buttonSizeMode={this.props.buttonSizeMode}\n buttonLocale={this.props.buttonLocale}\n buttonRootNode={this.props.buttonRootNode}\n paymentsClient={this.googlePay.paymentsClient}\n onClick={this.submit}\n />\n );\n }\n\n return null;\n }\n}\n\nexport default GooglePay;\n"],"names":["GooglePay","UIElement","static","TxVariants","googlepay","paywithgoogle","defaultProps","googlePay","constructor","checkout","props","super","this","handleAuthorization","bind","isExpress","paymentDataCallbacks","onPaymentDataChanged","AdyenCheckoutError","GooglePayService","environment","onPaymentAuthorized","formatProps","buttonSizeMode","isDropin","buttonLocale","getGooglePayLocale","i18n","locale","callbackIntents","configuration","formatData","googlePayCardNetwork","googlePayToken","billingAddress","deliveryAddress","state","paymentMethod","type","subtype","browserInfo","origin","window","location","submitAnalytics","analyticsObj","submit","isInstantPayment","ANALYTICS_SELECTED_STR","target","ANALYTICS_INSTANT_PAYMENT_BUTTON","Promise","resolve","reject","onClick","then","initiatePayment","core","options","countryCode","catch","error","statusCode","handleError","toString","cause","async","paymentData","formatGooglePayContactToAdyenAddressFormat","paymentMethodData","info","shippingAddress","setState","authorizedEvent","tokenizationData","token","cardNetwork","makePaymentsCall","sanitizeResponse","verifyPaymentDidNotFail","paymentResponse","transactionState","handleResponse","setElementStatus","googlePayError","fallbackMessage","get","intent","reason","message","responseWithError","handleFailedResult","onAuthorized","data","isValid","isAvailable","isReadyToPay","response","result","paymentMethodPresent","prefetch","prefetchPaymentData","collectBrowserInfo","icon","resources","getImage","render","showPayButton","h","GooglePayButton","buttonColor","buttonType","buttonRootNode","paymentsClient"],"mappings":"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"}
1
+ {"version":3,"file":"GooglePay.js","sources":["../../../../src/components/GooglePay/GooglePay.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport GooglePayService from './GooglePayService';\nimport GooglePayButton from './components/GooglePayButton';\nimport defaultProps from './defaultProps';\nimport { formatGooglePayContactToAdyenAddressFormat, getGooglePayLocale } from './utils';\nimport collectBrowserInfo from '../../utils/browserInfo';\nimport AdyenCheckoutError from '../../core/Errors/AdyenCheckoutError';\nimport { TxVariants } from '../tx-variants';\nimport { sanitizeResponse, verifyPaymentDidNotFail } from '../internal/UIElement/utils';\nimport { ANALYTICS_INSTANT_PAYMENT_BUTTON, ANALYTICS_SELECTED_STR } from '../../core/Analytics/constants';\nimport { SendAnalyticsObject } from '../../core/Analytics/types';\n\nimport type { AddressData, BrowserInfo, PaymentResponseData, RawPaymentResponse } from '../../types/global-types';\nimport type { GooglePayConfiguration } from './types';\nimport type { ICore } from '../../core/types';\n\nclass GooglePay extends UIElement<GooglePayConfiguration> {\n public static type = TxVariants.googlepay;\n public static txVariants = [TxVariants.googlepay, TxVariants.paywithgoogle];\n public static defaultProps = defaultProps;\n\n protected readonly googlePay;\n\n constructor(checkout: ICore, props?: GooglePayConfiguration) {\n super(checkout, props);\n this.handleAuthorization = this.handleAuthorization.bind(this);\n\n const { isExpress, paymentDataCallbacks } = this.props;\n\n if (isExpress === false && paymentDataCallbacks?.onPaymentDataChanged) {\n throw new AdyenCheckoutError(\n 'IMPLEMENTATION_ERROR',\n 'GooglePay - You must set \"isExpress\" flag to \"true\" in order to use \"onPaymentDataChanged\" callback'\n );\n }\n\n this.googlePay = new GooglePayService(this.props.environment, {\n ...(isExpress && paymentDataCallbacks?.onPaymentDataChanged && { onPaymentDataChanged: paymentDataCallbacks.onPaymentDataChanged }),\n onPaymentAuthorized: this.onPaymentAuthorized\n });\n }\n\n protected override formatProps(props): GooglePayConfiguration {\n const buttonSizeMode = props.buttonSizeMode ?? (props.isDropin ? 'fill' : 'static');\n const buttonLocale = getGooglePayLocale(props.buttonLocale ?? props.i18n?.locale);\n\n const callbackIntents: google.payments.api.CallbackIntent[] = [...props.callbackIntents, 'PAYMENT_AUTHORIZATION'];\n\n return {\n ...props,\n configuration: props.configuration,\n buttonSizeMode,\n buttonLocale,\n callbackIntents\n };\n }\n\n /**\n * Formats the component data output\n */\n protected override formatData() {\n const { googlePayCardNetwork, googlePayToken, billingAddress, deliveryAddress } = this.state;\n const { isExpress } = this.props;\n\n return {\n paymentMethod: {\n type: this.type,\n googlePayCardNetwork,\n googlePayToken,\n ...(isExpress && { subtype: 'express' })\n },\n browserInfo: this.browserInfo,\n origin: !!window && window.location.origin,\n ...(billingAddress && { billingAddress }),\n ...(deliveryAddress && { deliveryAddress })\n };\n }\n\n protected submitAnalytics(analyticsObj: SendAnalyticsObject) {\n // Analytics will need to know about this.props.isExpress & this.props.expressPage\n super.submitAnalytics({ ...analyticsObj }, this.props);\n }\n\n public override submit = () => {\n // Analytics\n if (this.props.isInstantPayment) {\n this.submitAnalytics({ type: ANALYTICS_SELECTED_STR, target: ANALYTICS_INSTANT_PAYMENT_BUTTON });\n }\n\n new Promise((resolve, reject) => this.props.onClick(resolve, reject))\n .then(() => this.googlePay.initiatePayment(this.props, this.core.options.countryCode))\n .catch((error: google.payments.api.PaymentsError) => {\n if (error.statusCode === 'CANCELED') {\n this.handleError(new AdyenCheckoutError('CANCEL', error.toString(), { cause: error }));\n } else {\n this.handleError(new AdyenCheckoutError('ERROR', error.toString(), { cause: error }));\n }\n });\n };\n\n /**\n * Method called when the payment is authorized in the payment sheet\n *\n * @see https://developers.google.com/pay/api/web/reference/client#onPaymentAuthorized\n **/\n private onPaymentAuthorized = async (paymentData: google.payments.api.PaymentData): Promise<google.payments.api.PaymentAuthorizationResult> => {\n const billingAddress: AddressData = formatGooglePayContactToAdyenAddressFormat(paymentData.paymentMethodData.info.billingAddress);\n const deliveryAddress: AddressData = formatGooglePayContactToAdyenAddressFormat(paymentData.shippingAddress, true);\n\n this.setState({\n authorizedEvent: paymentData,\n googlePayToken: paymentData.paymentMethodData.tokenizationData.token,\n googlePayCardNetwork: paymentData.paymentMethodData.info.cardNetwork,\n ...(billingAddress && { billingAddress }),\n ...(deliveryAddress && { deliveryAddress })\n });\n\n return new Promise<google.payments.api.PaymentAuthorizationResult>(resolve => {\n this.handleAuthorization()\n .then(this.makePaymentsCall)\n .then(sanitizeResponse)\n .then(verifyPaymentDidNotFail)\n .then((paymentResponse: PaymentResponseData) => {\n resolve({ transactionState: 'SUCCESS' });\n return paymentResponse;\n })\n .then(paymentResponse => {\n this.handleResponse(paymentResponse);\n })\n .catch((paymentResponse?: RawPaymentResponse) => {\n this.setElementStatus('ready');\n\n const googlePayError = paymentResponse?.error?.googlePayError;\n const fallbackMessage = this.props.i18n.get('error.subtitle.payment');\n\n const error: google.payments.api.PaymentDataError =\n typeof googlePayError === 'string' || undefined\n ? {\n intent: 'PAYMENT_AUTHORIZATION',\n reason: 'OTHER_ERROR',\n message: (googlePayError as string) || fallbackMessage\n }\n : {\n intent: googlePayError?.intent || 'PAYMENT_AUTHORIZATION',\n reason: googlePayError?.reason || 'OTHER_ERROR',\n message: googlePayError?.message || fallbackMessage\n };\n\n resolve({\n transactionState: 'ERROR',\n error\n });\n\n const responseWithError = {\n ...paymentResponse,\n error: {\n googlePayError: error\n }\n };\n\n this.handleFailedResult(responseWithError);\n });\n });\n };\n\n /**\n * Call the 'onAuthorized' callback if available.\n * Must be resolved/reject for the payment flow to continue\n */\n private async handleAuthorization(): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (!this.props.onAuthorized) {\n resolve();\n }\n\n const { authorizedEvent, billingAddress, deliveryAddress } = this.state;\n\n this.props.onAuthorized(\n {\n authorizedEvent,\n ...(billingAddress && { billingAddress }),\n ...(deliveryAddress && { deliveryAddress })\n },\n { resolve, reject }\n );\n }).catch((error?: google.payments.api.PaymentDataError | string) => {\n // Format error in a way that the 'catch' of the 'onPaymentAuthorize' block accepts it\n const data = { error: { googlePayError: error } };\n return Promise.reject(data);\n });\n }\n\n /**\n * Validation\n */\n get isValid(): boolean {\n return !!this.state.googlePayToken;\n }\n\n /**\n * Determine a shopper's ability to return a form of payment from the Google Pay API.\n */\n public override async isAvailable(): Promise<void> {\n return this.isReadyToPay()\n .then(response => {\n if (!response.result) {\n throw new AdyenCheckoutError('ERROR', 'GooglePay is not available');\n }\n\n if (response.paymentMethodPresent === false) {\n throw new AdyenCheckoutError('ERROR', 'GooglePay - No paymentMethodPresent');\n }\n\n return Promise.resolve();\n })\n .catch(error => {\n return Promise.reject(error);\n });\n }\n\n /**\n * Determine a shopper's ability to return a form of payment from the Google Pay API.\n */\n public isReadyToPay = (): Promise<google.payments.api.IsReadyToPayResponse> => {\n return this.googlePay.isReadyToPay(this.props);\n };\n\n /**\n * Use this method to prefetch a PaymentDataRequest configuration to improve loadPaymentData execution time on later user interaction. No value is returned.\n */\n public prefetch = (): void => {\n return this.googlePay.prefetchPaymentData(this.props, this.core.options.countryCode);\n };\n\n get browserInfo(): BrowserInfo {\n return collectBrowserInfo();\n }\n\n get icon(): string {\n return this.props.icon ?? this.resources.getImage()('googlepay');\n }\n\n render() {\n if (this.props.showPayButton) {\n return (\n <GooglePayButton\n buttonColor={this.props.buttonColor}\n buttonType={this.props.buttonType}\n buttonSizeMode={this.props.buttonSizeMode}\n buttonLocale={this.props.buttonLocale}\n buttonRootNode={this.props.buttonRootNode}\n paymentsClient={this.googlePay.paymentsClient}\n onClick={this.submit}\n />\n );\n }\n\n return null;\n }\n}\n\nexport default GooglePay;\n"],"names":["GooglePay","UIElement","static","TxVariants","googlepay","paywithgoogle","defaultProps","googlePay","constructor","checkout","props","super","this","handleAuthorization","bind","isExpress","paymentDataCallbacks","onPaymentDataChanged","AdyenCheckoutError","GooglePayService","environment","onPaymentAuthorized","formatProps","buttonSizeMode","isDropin","buttonLocale","getGooglePayLocale","i18n","locale","callbackIntents","configuration","formatData","googlePayCardNetwork","googlePayToken","billingAddress","deliveryAddress","state","paymentMethod","type","subtype","browserInfo","origin","window","location","submitAnalytics","analyticsObj","submit","isInstantPayment","ANALYTICS_SELECTED_STR","target","ANALYTICS_INSTANT_PAYMENT_BUTTON","Promise","resolve","reject","onClick","then","initiatePayment","core","options","countryCode","catch","error","statusCode","handleError","toString","cause","async","paymentData","formatGooglePayContactToAdyenAddressFormat","paymentMethodData","info","shippingAddress","setState","authorizedEvent","tokenizationData","token","cardNetwork","makePaymentsCall","sanitizeResponse","verifyPaymentDidNotFail","paymentResponse","transactionState","handleResponse","setElementStatus","googlePayError","fallbackMessage","get","intent","reason","message","responseWithError","handleFailedResult","onAuthorized","data","isValid","isAvailable","isReadyToPay","response","result","paymentMethodPresent","prefetch","prefetchPaymentData","collectBrowserInfo","icon","resources","getImage","render","showPayButton","h","GooglePayButton","buttonColor","buttonType","buttonRootNode","paymentsClient"],"mappings":"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"}
@@ -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/MultibancoVoucherResult/MultibancoVoucherResult.js";import{CoreProvider as r}from"../../core/Context/CoreProvider.js";import s from"../internal/RedirectButton/RedirectButton.js";import{TxVariants as n}from"../tx-variants.js";class i extends e{static type=n.multibanco;get isValid(){return!0}formatProps(t){return{...t,name:t.name||"Multibanco"}}formatData(){return{paymentMethod:{type:this.props.type||i.type}}}handleRef=t=>{this.componentRef=t};render(){return this.props.reference?t(r,{i18n:this.props.i18n,loadingContext:this.props.loadingContext,resources:this.resources},t(o,{ref:this.handleRef,...this.props})):this.props.showPayButton?t(r,{i18n:this.props.i18n,loadingContext:this.props.loadingContext,resources:this.resources},t(s,{name:this.displayName,amount:this.props.amount,payButton:this.payButton,onSubmit:this.submit,ref:t=>{this.componentRef=t}})):null}}export{i as MultibancoElement,i 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/MultibancoVoucherResult/MultibancoVoucherResult.js";import{CoreProvider as r}from"../../core/Context/CoreProvider.js";import s from"../internal/RedirectButton/RedirectButton.js";import{TxVariants as n}from"../tx-variants.js";class i extends e{static type=n.multibanco;get isValid(){return!0}formatProps(t){return{...t,name:t.name||"Multibanco"}}formatData(){return{paymentMethod:{type:this.props.type||i.type}}}handleRef=t=>{this.componentRef=t};render(){return this.props.reference?t(r,{i18n:this.props.i18n,loadingContext:this.props.loadingContext,resources:this.resources},t(o,{ref:this.handleRef,...this.props})):this.props.showPayButton?t(r,{i18n:this.props.i18n,loadingContext:this.props.loadingContext,resources:this.resources},t(s,{showPayButton:this.props.showPayButton,name:this.displayName,amount:this.props.amount,payButton:this.payButton,onSubmit:this.submit,ref:t=>{this.componentRef=t}})):null}}export{i as MultibancoElement,i as default};
2
2
  //# sourceMappingURL=Multibanco.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Multibanco.js","sources":["../../../../src/components/Multibanco/Multibanco.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport MultibancoVoucherResult from './components/MultibancoVoucherResult';\nimport { CoreProvider } from '../../core/Context/CoreProvider';\nimport RedirectButton from '../internal/RedirectButton';\nimport { TxVariants } from '../tx-variants';\nimport { VoucherConfiguration } from '../internal/Voucher/types';\n\nexport class MultibancoElement extends UIElement<VoucherConfiguration> {\n public static type = TxVariants.multibanco;\n\n get isValid() {\n return true;\n }\n\n formatProps(props) {\n return {\n ...props,\n name: props.name || 'Multibanco'\n };\n }\n\n /**\n * Formats the component data output\n */\n formatData() {\n return {\n paymentMethod: {\n type: this.props.type || MultibancoElement.type\n }\n };\n }\n\n private handleRef = ref => {\n this.componentRef = ref;\n };\n\n render() {\n if (this.props.reference) {\n return (\n <CoreProvider i18n={this.props.i18n} loadingContext={this.props.loadingContext} resources={this.resources}>\n <MultibancoVoucherResult ref={this.handleRef} {...this.props} />\n </CoreProvider>\n );\n }\n\n if (this.props.showPayButton) {\n return (\n <CoreProvider i18n={this.props.i18n} loadingContext={this.props.loadingContext} resources={this.resources}>\n <RedirectButton\n name={this.displayName}\n amount={this.props.amount}\n payButton={this.payButton}\n onSubmit={this.submit}\n ref={ref => {\n this.componentRef = ref;\n }}\n />\n </CoreProvider>\n );\n }\n\n return null;\n }\n}\n\nexport default MultibancoElement;\n"],"names":["MultibancoElement","UIElement","static","TxVariants","multibanco","isValid","formatProps","props","name","formatData","paymentMethod","type","this","handleRef","ref","componentRef","render","reference","h","CoreProvider","i18n","loadingContext","resources","MultibancoVoucherResult","showPayButton","RedirectButton","displayName","amount","payButton","onSubmit","submit"],"mappings":"gYAQO,MAAMA,UAA0BC,EACnCC,YAAqBC,EAAWC,WAEhC,WAAIC,GACA,OAAO,CACX,CAEAC,WAAAA,CAAYC,GACR,MAAO,IACAA,EACHC,KAAMD,EAAMC,MAAQ,aAE5B,CAKAC,UAAAA,GACI,MAAO,CACHC,cAAe,CACXC,KAAMC,KAAKL,MAAMI,MAAQX,EAAkBW,MAGvD,CAEQE,UAAYC,IAChBF,KAAKG,aAAeD,CAAAA,EAGxBE,MAAAA,GACI,OAAIJ,KAAKL,MAAMU,UAEPC,EAACC,EAAAA,CAAaC,KAAMR,KAAKL,MAAMa,KAAMC,eAAgBT,KAAKL,MAAMc,eAAgBC,UAAWV,KAAKU,WAC5FJ,EAACK,EAAAA,CAAwBT,IAAKF,KAAKC,aAAeD,KAAKL,SAK/DK,KAAKL,MAAMiB,cAEPN,EAACC,EAAAA,CAAaC,KAAMR,KAAKL,MAAMa,KAAMC,eAAgBT,KAAKL,MAAMc,eAAgBC,UAAWV,KAAKU,WAC5FJ,EAACO,EAAAA,CACGjB,KAAMI,KAAKc,YACXC,OAAQf,KAAKL,MAAMoB,OACnBC,UAAWhB,KAAKgB,UAChBC,SAAUjB,KAAKkB,OACfhB,IAAKA,IACDF,KAAKG,aAAeD,CAAAA,KAOjC,IACX"}
1
+ {"version":3,"file":"Multibanco.js","sources":["../../../../src/components/Multibanco/Multibanco.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport MultibancoVoucherResult from './components/MultibancoVoucherResult';\nimport { CoreProvider } from '../../core/Context/CoreProvider';\nimport RedirectButton from '../internal/RedirectButton';\nimport { TxVariants } from '../tx-variants';\nimport { VoucherConfiguration } from '../internal/Voucher/types';\n\nexport class MultibancoElement extends UIElement<VoucherConfiguration> {\n public static type = TxVariants.multibanco;\n\n get isValid() {\n return true;\n }\n\n formatProps(props) {\n return {\n ...props,\n name: props.name || 'Multibanco'\n };\n }\n\n /**\n * Formats the component data output\n */\n formatData() {\n return {\n paymentMethod: {\n type: this.props.type || MultibancoElement.type\n }\n };\n }\n\n private handleRef = ref => {\n this.componentRef = ref;\n };\n\n render() {\n if (this.props.reference) {\n return (\n <CoreProvider i18n={this.props.i18n} loadingContext={this.props.loadingContext} resources={this.resources}>\n <MultibancoVoucherResult ref={this.handleRef} {...this.props} />\n </CoreProvider>\n );\n }\n\n if (this.props.showPayButton) {\n return (\n <CoreProvider i18n={this.props.i18n} loadingContext={this.props.loadingContext} resources={this.resources}>\n <RedirectButton\n showPayButton={this.props.showPayButton}\n name={this.displayName}\n amount={this.props.amount}\n payButton={this.payButton}\n onSubmit={this.submit}\n ref={ref => {\n this.componentRef = ref;\n }}\n />\n </CoreProvider>\n );\n }\n\n return null;\n }\n}\n\nexport default MultibancoElement;\n"],"names":["MultibancoElement","UIElement","static","TxVariants","multibanco","isValid","formatProps","props","name","formatData","paymentMethod","type","this","handleRef","ref","componentRef","render","reference","h","CoreProvider","i18n","loadingContext","resources","MultibancoVoucherResult","showPayButton","RedirectButton","displayName","amount","payButton","onSubmit","submit"],"mappings":"gYAQO,MAAMA,UAA0BC,EACnCC,YAAqBC,EAAWC,WAEhC,WAAIC,GACA,OAAO,CACX,CAEAC,WAAAA,CAAYC,GACR,MAAO,IACAA,EACHC,KAAMD,EAAMC,MAAQ,aAE5B,CAKAC,UAAAA,GACI,MAAO,CACHC,cAAe,CACXC,KAAMC,KAAKL,MAAMI,MAAQX,EAAkBW,MAGvD,CAEQE,UAAYC,IAChBF,KAAKG,aAAeD,CAAAA,EAGxBE,MAAAA,GACI,OAAIJ,KAAKL,MAAMU,UAEPC,EAACC,EAAAA,CAAaC,KAAMR,KAAKL,MAAMa,KAAMC,eAAgBT,KAAKL,MAAMc,eAAgBC,UAAWV,KAAKU,WAC5FJ,EAACK,EAAAA,CAAwBT,IAAKF,KAAKC,aAAeD,KAAKL,SAK/DK,KAAKL,MAAMiB,cAEPN,EAACC,EAAAA,CAAaC,KAAMR,KAAKL,MAAMa,KAAMC,eAAgBT,KAAKL,MAAMc,eAAgBC,UAAWV,KAAKU,WAC5FJ,EAACO,EAAAA,CACGD,cAAeZ,KAAKL,MAAMiB,cAC1BhB,KAAMI,KAAKc,YACXC,OAAQf,KAAKL,MAAMoB,OACnBC,UAAWhB,KAAKgB,UAChBC,SAAUjB,KAAKkB,OACfhB,IAAKA,IACDF,KAAKG,aAAeD,CAAAA,KAOjC,IACX"}
@@ -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"../internal/PersonalDetails/PersonalDetails.js";import{CoreProvider as s}from"../../core/Context/CoreProvider.js";import{TxVariants as o}from"../tx-variants.js";import n from"../internal/FormInstruction/FormInstruction.js";class i extends e{static type=o.personal_details;static defaultProps={showFormInstruction:!0};get data(){return this.state.data}get isValid(){return!!this.state.isValid}render(){return t(s,{i18n:this.props.i18n,loadingContext:this.props.loadingContext,resources:this.resources},this.props.showFormInstruction&&t(n,null),t(r,{setComponentRef:this.setComponentRef,...this.props,onChange:this.setState}))}}export{i as PersonalDetailsElement,i 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"../internal/PersonalDetails/PersonalDetails.js";import{CoreProvider as s}from"../../core/Context/CoreProvider.js";import{TxVariants as o}from"../tx-variants.js";import n from"../internal/FormInstruction/FormInstruction.js";class i extends e{static type=o.personal_details;get data(){return this.state.data}get isValid(){return!!this.state.isValid}render(){return t(s,{i18n:this.props.i18n,loadingContext:this.props.loadingContext,resources:this.resources},t(n,null),t(r,{setComponentRef:this.setComponentRef,...this.props,onChange:this.setState}))}}export{i as PersonalDetailsElement,i as default};
2
2
  //# sourceMappingURL=PersonalDetails.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PersonalDetails.js","sources":["../../../../src/components/PersonalDetails/PersonalDetails.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport PersonalDetails from '../internal/PersonalDetails';\nimport { CoreProvider } from '../../core/Context/CoreProvider';\nimport { TxVariants } from '../tx-variants';\nimport FormInstruction from '../internal/FormInstruction';\nimport { UIElementProps } from '../internal/UIElement/types';\n\ninterface PersonalDetailsConfiguration extends UIElementProps {\n showFormInstruction?: boolean;\n}\n\nexport class PersonalDetailsElement extends UIElement<PersonalDetailsConfiguration> {\n public static type = TxVariants.personal_details;\n\n protected static defaultProps = {\n showFormInstruction: true\n };\n\n get data() {\n return this.state.data;\n }\n\n get isValid() {\n return !!this.state.isValid;\n }\n\n render() {\n return (\n <CoreProvider i18n={this.props.i18n} loadingContext={this.props.loadingContext} resources={this.resources}>\n {this.props.showFormInstruction && <FormInstruction />}\n <PersonalDetails\n setComponentRef={this.setComponentRef}\n {...this.props}\n onChange={this.setState}\n {...(process.env.NODE_ENV !== 'production' && { payButton: this.payButton })}\n />\n </CoreProvider>\n );\n }\n}\n\nexport default PersonalDetailsElement;\n"],"names":["PersonalDetailsElement","UIElement","static","TxVariants","personal_details","showFormInstruction","data","this","state","isValid","render","h","CoreProvider","i18n","props","loadingContext","resources","FormInstruction","PersonalDetails","setComponentRef","onChange","setState"],"mappings":"iXAYO,MAAMA,UAA+BC,EACxCC,YAAqBC,EAAWC,iBAEhCF,oBAAgC,CAC5BG,qBAAqB,GAGzB,QAAIC,GACA,OAAOC,KAAKC,MAAMF,IACtB,CAEA,WAAIG,GACA,QAASF,KAAKC,MAAMC,OACxB,CAEAC,MAAAA,GACI,OACIC,EAACC,EAAAA,CAAaC,KAAMN,KAAKO,MAAMD,KAAME,eAAgBR,KAAKO,MAAMC,eAAgBC,UAAWT,KAAKS,WAC3FT,KAAKO,MAAMT,qBAAuBM,EAACM,QACpCN,EAACO,EAAAA,CACGC,gBAAiBZ,KAAKY,mBAClBZ,KAAKO,MACTM,SAAUb,KAAKc,WAK/B"}
1
+ {"version":3,"file":"PersonalDetails.js","sources":["../../../../src/components/PersonalDetails/PersonalDetails.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport PersonalDetails from '../internal/PersonalDetails';\nimport { CoreProvider } from '../../core/Context/CoreProvider';\nimport { TxVariants } from '../tx-variants';\nimport FormInstruction from '../internal/FormInstruction';\nimport { UIElementProps } from '../internal/UIElement/types';\n\ninterface PersonalDetailsConfiguration extends UIElementProps {}\n\nexport class PersonalDetailsElement extends UIElement<PersonalDetailsConfiguration> {\n public static type = TxVariants.personal_details;\n\n get data() {\n return this.state.data;\n }\n\n get isValid() {\n return !!this.state.isValid;\n }\n\n render() {\n return (\n <CoreProvider i18n={this.props.i18n} loadingContext={this.props.loadingContext} resources={this.resources}>\n <FormInstruction />\n <PersonalDetails\n setComponentRef={this.setComponentRef}\n {...this.props}\n onChange={this.setState}\n {...(process.env.NODE_ENV !== 'production' && { payButton: this.payButton })}\n />\n </CoreProvider>\n );\n }\n}\n\nexport default PersonalDetailsElement;\n"],"names":["PersonalDetailsElement","UIElement","static","TxVariants","personal_details","data","this","state","isValid","render","h","CoreProvider","i18n","props","loadingContext","resources","FormInstruction","PersonalDetails","setComponentRef","onChange","setState"],"mappings":"iXAUO,MAAMA,UAA+BC,EACxCC,YAAqBC,EAAWC,iBAEhC,QAAIC,GACA,OAAOC,KAAKC,MAAMF,IACtB,CAEA,WAAIG,GACA,QAASF,KAAKC,MAAMC,OACxB,CAEAC,MAAAA,GACI,OACIC,EAACC,EAAAA,CAAaC,KAAMN,KAAKO,MAAMD,KAAME,eAAgBR,KAAKO,MAAMC,eAAgBC,UAAWT,KAAKS,WAC5FL,EAACM,QACDN,EAACO,EAAAA,CACGC,gBAAiBZ,KAAKY,mBAClBZ,KAAKO,MACTM,SAAUb,KAAKc,WAK/B"}
@@ -1,2 +1,2 @@
1
- import{createElement as t}from"../../external/preact/dist/preact.js";import{UIElement as r}from"../internal/UIElement/UIElement.js";import{CoreProvider as e}from"../../core/Context/CoreProvider.js";import o from"./components/RedirectShopper/RedirectShopper.js";import s from"../internal/RedirectButton/RedirectButton.js";import{TxVariants as i}from"../tx-variants.js";import p from"../../utils/browserInfo.js";class n extends r{static type=i.redirect;static defaultProps={type:n.type};formatData(){return{paymentMethod:{type:this.type},browserInfo:this.browserInfo}}get isValid(){return!0}get browserInfo(){return p()}render(){return this.props.url&&this.props.method?t(o,{url:this.props.url,...this.props}):this.props.showPayButton?t(e,{i18n:this.props.i18n,loadingContext:this.props.loadingContext,resources:this.resources},t(s,{...this.props,name:this.displayName,onSubmit:this.submit,payButton:this.payButton,ref:t=>{this.componentRef=t}})):null}}export{n as default};
1
+ import{createElement as t}from"../../external/preact/dist/preact.js";import{UIElement as r}from"../internal/UIElement/UIElement.js";import{CoreProvider as e}from"../../core/Context/CoreProvider.js";import o from"./components/RedirectShopper/RedirectShopper.js";import s from"../internal/RedirectButton/RedirectButton.js";import{TxVariants as i}from"../tx-variants.js";import p from"../../utils/browserInfo.js";class n extends r{static type=i.redirect;static defaultProps={type:n.type};formatData(){return{paymentMethod:{type:this.type},browserInfo:this.browserInfo}}get isValid(){return!0}get browserInfo(){return p()}render(){return this.props.url&&this.props.method?t(o,{url:this.props.url,...this.props}):this.props.showPayButton?t(e,{i18n:this.props.i18n,loadingContext:this.props.loadingContext,resources:this.resources},t(s,{...this.props,showPayButton:this.props.showPayButton,name:this.displayName,onSubmit:this.submit,payButton:this.payButton,ref:t=>{this.componentRef=t}})):null}}export{n as default};
2
2
  //# sourceMappingURL=Redirect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Redirect.js","sources":["../../../../src/components/Redirect/Redirect.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport { CoreProvider } from '../../core/Context/CoreProvider';\nimport RedirectShopper from './components/RedirectShopper';\nimport RedirectButton from '../internal/RedirectButton';\nimport { TxVariants } from '../tx-variants';\nimport { RedirectConfiguration } from './types';\nimport collectBrowserInfo from '../../utils/browserInfo';\n\nclass RedirectElement extends UIElement<RedirectConfiguration> {\n public static type = TxVariants.redirect;\n\n public static defaultProps = {\n type: RedirectElement.type\n };\n\n formatData() {\n return {\n paymentMethod: {\n type: this.type\n },\n browserInfo: this.browserInfo\n };\n }\n\n get isValid() {\n return true;\n }\n\n get browserInfo() {\n return collectBrowserInfo();\n }\n\n render() {\n if (this.props.url && this.props.method) {\n return <RedirectShopper url={this.props.url} {...this.props} />;\n }\n\n if (this.props.showPayButton) {\n return (\n <CoreProvider i18n={this.props.i18n} loadingContext={this.props.loadingContext} resources={this.resources}>\n <RedirectButton\n {...this.props}\n name={this.displayName}\n onSubmit={this.submit}\n payButton={this.payButton}\n ref={ref => {\n this.componentRef = ref;\n }}\n />\n </CoreProvider>\n );\n }\n\n return null;\n }\n}\n\nexport default RedirectElement;\n"],"names":["RedirectElement","UIElement","static","TxVariants","redirect","type","formatData","paymentMethod","this","browserInfo","isValid","collectBrowserInfo","render","props","url","method","h","RedirectShopper","showPayButton","CoreProvider","i18n","loadingContext","resources","RedirectButton","name","displayName","onSubmit","submit","payButton","ref","componentRef"],"mappings":"0ZASA,MAAMA,UAAwBC,EAC1BC,YAAqBC,EAAWC,SAEhCF,oBAA6B,CACzBG,KAAML,EAAgBK,MAG1BC,UAAAA,GACI,MAAO,CACHC,cAAe,CACXF,KAAMG,KAAKH,MAEfI,YAAaD,KAAKC,YAE1B,CAEA,WAAIC,GACA,OAAO,CACX,CAEA,eAAID,GACA,OAAOE,GACX,CAEAC,MAAAA,GACI,OAAIJ,KAAKK,MAAMC,KAAON,KAAKK,MAAME,OACtBC,EAACC,EAAAA,CAAgBH,IAAKN,KAAKK,MAAMC,OAASN,KAAKK,QAGtDL,KAAKK,MAAMK,cAEPF,EAACG,EAAAA,CAAaC,KAAMZ,KAAKK,MAAMO,KAAMC,eAAgBb,KAAKK,MAAMQ,eAAgBC,UAAWd,KAAKc,WAC5FN,EAACO,EAAAA,IACOf,KAAKK,MACTW,KAAMhB,KAAKiB,YACXC,SAAUlB,KAAKmB,OACfC,UAAWpB,KAAKoB,UAChBC,IAAKA,IACDrB,KAAKsB,aAAeD,CAAAA,KAOjC,IACX"}
1
+ {"version":3,"file":"Redirect.js","sources":["../../../../src/components/Redirect/Redirect.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport { CoreProvider } from '../../core/Context/CoreProvider';\nimport RedirectShopper from './components/RedirectShopper';\nimport RedirectButton from '../internal/RedirectButton';\nimport { TxVariants } from '../tx-variants';\nimport { RedirectConfiguration } from './types';\nimport collectBrowserInfo from '../../utils/browserInfo';\n\nclass RedirectElement extends UIElement<RedirectConfiguration> {\n public static type = TxVariants.redirect;\n\n public static defaultProps = {\n type: RedirectElement.type\n };\n\n formatData() {\n return {\n paymentMethod: {\n type: this.type\n },\n browserInfo: this.browserInfo\n };\n }\n\n get isValid() {\n return true;\n }\n\n get browserInfo() {\n return collectBrowserInfo();\n }\n\n render() {\n if (this.props.url && this.props.method) {\n return <RedirectShopper url={this.props.url} {...this.props} />;\n }\n\n if (this.props.showPayButton) {\n return (\n <CoreProvider i18n={this.props.i18n} loadingContext={this.props.loadingContext} resources={this.resources}>\n <RedirectButton\n {...this.props}\n showPayButton={this.props.showPayButton}\n name={this.displayName}\n onSubmit={this.submit}\n payButton={this.payButton}\n ref={ref => {\n this.componentRef = ref;\n }}\n />\n </CoreProvider>\n );\n }\n\n return null;\n }\n}\n\nexport default RedirectElement;\n"],"names":["RedirectElement","UIElement","static","TxVariants","redirect","type","formatData","paymentMethod","this","browserInfo","isValid","collectBrowserInfo","render","props","url","method","h","RedirectShopper","showPayButton","CoreProvider","i18n","loadingContext","resources","RedirectButton","name","displayName","onSubmit","submit","payButton","ref","componentRef"],"mappings":"0ZASA,MAAMA,UAAwBC,EAC1BC,YAAqBC,EAAWC,SAEhCF,oBAA6B,CACzBG,KAAML,EAAgBK,MAG1BC,UAAAA,GACI,MAAO,CACHC,cAAe,CACXF,KAAMG,KAAKH,MAEfI,YAAaD,KAAKC,YAE1B,CAEA,WAAIC,GACA,OAAO,CACX,CAEA,eAAID,GACA,OAAOE,GACX,CAEAC,MAAAA,GACI,OAAIJ,KAAKK,MAAMC,KAAON,KAAKK,MAAME,OACtBC,EAACC,EAAAA,CAAgBH,IAAKN,KAAKK,MAAMC,OAASN,KAAKK,QAGtDL,KAAKK,MAAMK,cAEPF,EAACG,EAAAA,CAAaC,KAAMZ,KAAKK,MAAMO,KAAMC,eAAgBb,KAAKK,MAAMQ,eAAgBC,UAAWd,KAAKc,WAC5FN,EAACO,EAAAA,IACOf,KAAKK,MACTK,cAAeV,KAAKK,MAAMK,cAC1BM,KAAMhB,KAAKiB,YACXC,SAAUlB,KAAKmB,OACfC,UAAWpB,KAAKoB,UAChBC,IAAKA,IACDrB,KAAKsB,aAAeD,CAAAA,KAOjC,IACX"}
@@ -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"../internal/IbanInput/IbanInput.js";import{CoreProvider as s}from"../../core/Context/CoreProvider.js";import{TxVariants as o}from"../tx-variants.js";import n from"../internal/FormInstruction/FormInstruction.js";class a extends e{static type=o.sepadirectdebit;static defaultProps={showFormInstruction:!0};constructor(t,e){super(t,e),this.state={...this.state,data:{ibanNumber:"",ownerName:""}}}formatProps(t){return{holderName:!0,...t}}formatData(){return{paymentMethod:{type:a.type,iban:this.state.data.ibanNumber,ownerName:this.state.data.ownerName}}}get isValid(){return!!this.state.isValid}render(){return t(s,{i18n:this.props.i18n,loadingContext:this.props.loadingContext,resources:this.resources},this.props.showFormInstruction&&t(n,null),t(r,{ref:t=>{this.componentRef=t},...this.props,onChange:this.setState,payButton:this.payButton}))}}export{a 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"../internal/IbanInput/IbanInput.js";import{CoreProvider as a}from"../../core/Context/CoreProvider.js";import{TxVariants as n}from"../tx-variants.js";import s from"../internal/FormInstruction/FormInstruction.js";class o extends e{static type=n.sepadirectdebit;constructor(t,e){super(t,e),this.state={...this.state,data:{ibanNumber:"",ownerName:""}}}formatProps(t){return{holderName:!0,...t}}formatData(){return{paymentMethod:{type:o.type,iban:this.state.data.ibanNumber,ownerName:this.state.data.ownerName}}}get isValid(){return!!this.state.isValid}render(){return t(a,{i18n:this.props.i18n,loadingContext:this.props.loadingContext,resources:this.resources},t(s,null),t(r,{ref:t=>{this.componentRef=t},...this.props,onChange:this.setState,payButton:this.payButton}))}}export{o as default};
2
2
  //# sourceMappingURL=Sepa.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Sepa.js","sources":["../../../../src/components/Sepa/Sepa.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport IbanInput from '../internal/IbanInput';\nimport { CoreProvider } from '../../core/Context/CoreProvider';\nimport { SepaElementData, SepaConfiguration } from './types';\nimport { TxVariants } from '../tx-variants';\nimport FormInstruction from '../internal/FormInstruction';\nimport type { ICore } from '../../core/types';\n\nclass SepaElement extends UIElement<SepaConfiguration> {\n public static type = TxVariants.sepadirectdebit;\n\n protected static defaultProps = {\n showFormInstruction: true\n };\n\n constructor(checkout: ICore, props?: SepaConfiguration) {\n super(checkout, props);\n this.state = { ...this.state, ...{ data: { ibanNumber: '', ownerName: '' } } };\n }\n\n /**\n * Formats props on construction time\n */\n formatProps(props) {\n return {\n holderName: true,\n ...props\n };\n }\n\n /**\n * Formats the component data output\n */\n formatData(): SepaElementData {\n return {\n paymentMethod: {\n type: SepaElement.type,\n iban: this.state.data['ibanNumber'],\n ownerName: this.state.data['ownerName']\n }\n };\n }\n\n /**\n * Returns whether the component state is valid or not\n */\n get isValid() {\n return !!this.state.isValid;\n }\n\n render() {\n return (\n <CoreProvider i18n={this.props.i18n} loadingContext={this.props.loadingContext} resources={this.resources}>\n {this.props.showFormInstruction && <FormInstruction />}\n {/* @ts-ignore TODO: add props */}\n <IbanInput\n ref={ref => {\n this.componentRef = ref;\n }}\n {...this.props}\n onChange={this.setState}\n // onSubmit={this.submit}\n payButton={this.payButton}\n />\n </CoreProvider>\n );\n }\n}\n\nexport default SepaElement;\n"],"names":["SepaElement","UIElement","static","TxVariants","sepadirectdebit","showFormInstruction","constructor","checkout","props","super","this","state","data","ibanNumber","ownerName","formatProps","holderName","formatData","paymentMethod","type","iban","isValid","render","h","CoreProvider","i18n","loadingContext","resources","FormInstruction","IbanInput","ref","componentRef","onChange","setState","payButton"],"mappings":"qWASA,MAAMA,UAAoBC,EACtBC,YAAqBC,EAAWC,gBAEhCF,oBAAgC,CAC5BG,qBAAqB,GAGzBC,WAAAA,CAAYC,EAAiBC,GACzBC,MAAMF,EAAUC,GAChBE,KAAKC,MAAQ,IAAKD,KAAKC,MAAYC,KAAM,CAAEC,WAAY,GAAIC,UAAW,IAC1E,CAKAC,WAAAA,CAAYP,GACR,MAAO,CACHQ,YAAY,KACTR,EAEX,CAKAS,UAAAA,GACI,MAAO,CACHC,cAAe,CACXC,KAAMnB,EAAYmB,KAClBC,KAAMV,KAAKC,MAAMC,KAAkB,WACnCE,UAAWJ,KAAKC,MAAMC,KAAiB,WAGnD,CAKA,WAAIS,GACA,QAASX,KAAKC,MAAMU,OACxB,CAEAC,MAAAA,GACI,OACIC,EAACC,EAAAA,CAAaC,KAAMf,KAAKF,MAAMiB,KAAMC,eAAgBhB,KAAKF,MAAMkB,eAAgBC,UAAWjB,KAAKiB,WAC3FjB,KAAKF,MAAMH,qBAAuBkB,EAACK,QAEpCL,EAACM,EAAAA,CACGC,IAAKA,IACDpB,KAAKqB,aAAeD,CAAAA,KAEpBpB,KAAKF,MACTwB,SAAUtB,KAAKuB,SAEfC,UAAWxB,KAAKwB,YAIhC"}
1
+ {"version":3,"file":"Sepa.js","sources":["../../../../src/components/Sepa/Sepa.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport IbanInput from '../internal/IbanInput';\nimport { CoreProvider } from '../../core/Context/CoreProvider';\nimport { SepaElementData, SepaConfiguration } from './types';\nimport { TxVariants } from '../tx-variants';\nimport FormInstruction from '../internal/FormInstruction';\nimport type { ICore } from '../../core/types';\n\nclass SepaElement extends UIElement<SepaConfiguration> {\n public static type = TxVariants.sepadirectdebit;\n\n constructor(checkout: ICore, props?: SepaConfiguration) {\n super(checkout, props);\n this.state = { ...this.state, ...{ data: { ibanNumber: '', ownerName: '' } } };\n }\n\n /**\n * Formats props on construction time\n */\n formatProps(props) {\n return {\n holderName: true,\n ...props\n };\n }\n\n /**\n * Formats the component data output\n */\n formatData(): SepaElementData {\n return {\n paymentMethod: {\n type: SepaElement.type,\n iban: this.state.data['ibanNumber'],\n ownerName: this.state.data['ownerName']\n }\n };\n }\n\n /**\n * Returns whether the component state is valid or not\n */\n get isValid() {\n return !!this.state.isValid;\n }\n\n render() {\n return (\n <CoreProvider i18n={this.props.i18n} loadingContext={this.props.loadingContext} resources={this.resources}>\n <FormInstruction />\n\n {/* @ts-ignore TODO: add props */}\n <IbanInput\n ref={ref => {\n this.componentRef = ref;\n }}\n {...this.props}\n onChange={this.setState}\n // onSubmit={this.submit}\n payButton={this.payButton}\n />\n </CoreProvider>\n );\n }\n}\n\nexport default SepaElement;\n"],"names":["SepaElement","UIElement","static","TxVariants","sepadirectdebit","constructor","checkout","props","super","this","state","data","ibanNumber","ownerName","formatProps","holderName","formatData","paymentMethod","type","iban","isValid","render","h","CoreProvider","i18n","loadingContext","resources","FormInstruction","IbanInput","ref","componentRef","onChange","setState","payButton"],"mappings":"qWASA,MAAMA,UAAoBC,EACtBC,YAAqBC,EAAWC,gBAEhCC,WAAAA,CAAYC,EAAiBC,GACzBC,MAAMF,EAAUC,GAChBE,KAAKC,MAAQ,IAAKD,KAAKC,MAAYC,KAAM,CAAEC,WAAY,GAAIC,UAAW,IAC1E,CAKAC,WAAAA,CAAYP,GACR,MAAO,CACHQ,YAAY,KACTR,EAEX,CAKAS,UAAAA,GACI,MAAO,CACHC,cAAe,CACXC,KAAMlB,EAAYkB,KAClBC,KAAMV,KAAKC,MAAMC,KAAkB,WACnCE,UAAWJ,KAAKC,MAAMC,KAAiB,WAGnD,CAKA,WAAIS,GACA,QAASX,KAAKC,MAAMU,OACxB,CAEAC,MAAAA,GACI,OACIC,EAACC,EAAAA,CAAaC,KAAMf,KAAKF,MAAMiB,KAAMC,eAAgBhB,KAAKF,MAAMkB,eAAgBC,UAAWjB,KAAKiB,WAC5FJ,EAACK,QAGDL,EAACM,EAAAA,CACGC,IAAKA,IACDpB,KAAKqB,aAAeD,CAAAA,KAEpBpB,KAAKF,MACTwB,SAAUtB,KAAKuB,SAEfC,UAAWxB,KAAKwB,YAIhC"}
@@ -1,2 +1,2 @@
1
- import{Component as e,createElement as r}from"../../../../external/preact/dist/preact.js";import t from"./DoChallenge3DS2.js";import{prepareChallengeData as s,isErrorObject as o,createOldChallengeResolveData as n,createChallengeResolveData as a}from"../utils.js";import i 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{MISSING_TOKEN_IN_ACTION_MSG as m,THREEDS2_CHALLENGE_ERROR as u,THREEDS2_FULL as d,THREEDS2_ERROR as g,THREEDS2_NUM as S,THREEDS2_CHALLENGE as D}from"../../constants.js";import{isValidHttpUrl as _}from"../../../../utils/isValidURL.js";import{Analytics3DS2Errors as I,ANALYTICS_API_ERROR as C}from"../../../../core/Analytics/constants.js";class f extends e{static defaultProps={onComplete:()=>{},onError:()=>{},onActionHandled:()=>{},isMDFlow:!1};constructor(e){if(super(e),this.props.token){const e=s({token:this.props.token,size:this.props.challengeWindowSize||this.props.size});this.state={status:"init",challengeData:e}}else this.state={challengeData:{success:!1,error:m}},console.debug(`${u}: ${m}`)}onActionHandled=e=>{this.props.onSubmitAnalytics({type:d,message:e.actionDescription}),this.props.onActionHandled(e)};onFormSubmit=e=>{this.props.onSubmitAnalytics({type:d,message:e})};componentDidMount(){if(!o(this.state.challengeData)){const{acsURL:e}=this.state.challengeData;if(!_(e,!1)){this.setError({errorInfo:`${I.TOKEN_IS_MISSING_ACSURL}: ${this.props.i18n.get("err.gen.9102")}`},!0);const r={type:g,code:I.TOKEN_IS_MISSING_ACSURL,errorType:C,message:`${u}: Decoded token is missing a valid acsURL property`,metadata:{acsURL:e}};return this.props.onSubmitAnalytics(r),void console.debug("### PrepareChallenge3DS2::exiting:: no valid acsURL")}const{acsTransID:r,messageVersion:t,threeDSServerTransID:s}=this.state.challengeData.cReqData;if(!r||!t||!s)return this.setError({errorInfo:`${I.TOKEN_IS_MISSING_OTHER_PROPS}: ${this.props.i18n.get("err.gen.9102")}`,errorObj:this.state.challengeData},!0),this.props.onSubmitAnalytics({type:g,code:I.TOKEN_IS_MISSING_OTHER_PROPS,errorType:C,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(m)>-1?I.ACTION_IS_MISSING_TOKEN:I.TOKEN_DECODE_OR_PARSING_FAILED;this.setError({errorInfo:e.indexOf(m)>-1?`${I.ACTION_IS_MISSING_TOKEN}: ${this.props.i18n.get("err.gen.9102")}`:`${I.TOKEN_DECODE_OR_PARSING_FAILED}:${this.props.i18n.get("err.gen.9102")}`,errorObj:this.state.challengeData},!0),this.props.onSubmitAnalytics({type:g,code:r,errorType:C,message:`${u}: ${e}`}),console.debug("### PrepareChallenge3DS2::exiting:: no challengeData")}}setStatusComplete(e,r=null){this.setState({status:"complete"},(()=>{const t=(this.props.isMDFlow?n:a)(this.props.dataKey,e.transStatus,this.props.paymentData);r&&console.debug("### PrepareChallenge3DS2::errorCodeObject::",r);const s={type:d,message:`${S} challenge has completed`,metadata:{...e}};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))}render(e,{challengeData:s}){const o=p();return"performingChallenge"===this.state.status?r(t,{onCompleteChallenge:e=>{let r=null;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}))),this.setStatusComplete(e.result,r)},onErrorChallenge:e=>{if(l(e,"errorCode")){const r={errorCode:e.errorCode,message:`${D}: ${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.onActionHandled,onFormSubmit:this.onFormSubmit}):"error"===this.state.status?r("div",{className:"adyen-checkout__threeds2-challenge-error"},r(i,{className:"adyen-checkout__status__icon adyen-checkout__status__icon--error",src: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}}export{f as default};
1
+ import{Component as e,createElement as r}from"../../../../external/preact/dist/preact.js";import t from"./DoChallenge3DS2.js";import{prepareChallengeData as s,isErrorObject as o,createOldChallengeResolveData as n,createChallengeResolveData 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{MISSING_TOKEN_IN_ACTION_MSG as u,THREEDS2_CHALLENGE_ERROR as m,THREEDS2_FULL as d,THREEDS2_ERROR as g,THREEDS2_NUM as S,THREEDS2_CHALLENGE as _}from"../../constants.js";import{isValidHttpUrl as D}from"../../../../utils/isValidURL.js";import{Analytics3DS2Events as E,Analytics3DS2Errors as C,ANALYTICS_API_ERROR as I,ANALYTICS_NETWORK_ERROR as f}from"../../../../core/Analytics/constants.js";class T extends e{static defaultProps={onComplete:()=>{},onError:()=>{},onActionHandled:()=>{},isMDFlow:!1};constructor(e){if(super(e),this.props.token){const e=s({token:this.props.token,size:this.props.challengeWindowSize||this.props.size});this.state={status:"init",challengeData:e}}else this.state={challengeData:{success:!1,error:u}},console.debug(`${m}: ${u}`)}onActionHandled=e=>{this.props.onSubmitAnalytics({type:d,message:e.actionDescription,subtype:E.CHALLENGE_IFRAME_LOADED}),this.props.onActionHandled(e)};onFormSubmit=e=>{this.props.onSubmitAnalytics({type:d,message:e,subtype:E.CHALLENGE_DATA_SENT})};componentDidMount(){if(!o(this.state.challengeData)){const e="test"===this.props.environment&&this.props._environmentUrls?.api?.includes("http://localhost:8080"),{acsURL:r}=this.state.challengeData;if(!D(r,e)){this.setError({errorInfo:`${C.TOKEN_IS_MISSING_ACSURL}: ${this.props.i18n.get("err.gen.9102")}`},!0);const e={type:g,code:C.TOKEN_IS_MISSING_ACSURL,errorType:I,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:`${C.TOKEN_IS_MISSING_OTHER_PROPS}: ${this.props.i18n.get("err.gen.9102")}`},!0),this.props.onSubmitAnalytics({type:g,code:C.TOKEN_IS_MISSING_OTHER_PROPS,errorType:I,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(u)>-1?C.ACTION_IS_MISSING_TOKEN:C.TOKEN_DECODE_OR_PARSING_FAILED;this.setError({errorInfo:e.indexOf(u)>-1?`${C.ACTION_IS_MISSING_TOKEN}: ${this.props.i18n.get("err.gen.9102")}`:`${C.TOKEN_DECODE_OR_PARSING_FAILED}: ${this.props.i18n.get("err.gen.9102")}`},!0),this.props.onSubmitAnalytics({type:g,code:r,errorType:I,message:`${m}: ${e}`}),console.debug("### PrepareChallenge3DS2::exiting:: no challengeData")}}setStatusComplete(e,r=null){this.setState({status:"complete"},(()=>{const t=(this.props.isMDFlow?n:i)(this.props.dataKey,e.transStatus,this.props.paymentData);let s;r&&console.debug("### PrepareChallenge3DS2::errorCodeObject::",r);const o=r||e;if(o.errorCode){const e={code:"timeout"===o.errorCode?C.THREEDS2_TIMEOUT:C.NO_TRANSSTATUS,errorType:"timeout"===o.errorCode?f:I};s={type:g,message:o.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:d,message:`${S} challenge has completed`,subtype:E.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:g,code:C.CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP,errorType:I,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.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}}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 { ActionHandledReturnObject } from '../../../../types/global-types';\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_API_ERROR, Analytics3DS2Errors } 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 onActionHandled: () => {},\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\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 onActionHandled = (rtnObj: ActionHandledReturnObject) => {\n this.props.onSubmitAnalytics({ type: THREEDS2_FULL, message: rtnObj.actionDescription });\n\n this.props.onActionHandled(rtnObj);\n };\n\n public onFormSubmit = (msg: string) => {\n this.props.onSubmitAnalytics({\n type: THREEDS2_FULL,\n message: msg\n });\n };\n\n componentDidMount() {\n const hasChallengeData = !isErrorObject(this.state.challengeData);\n\n if (hasChallengeData) {\n /**\n * Check the structure of the created challengeData\n */\n const { acsURL } = this.state.challengeData as ChallengeData;\n const hasValidAcsURL = isValidHttpUrl(\n acsURL,\n process.env.NODE_ENV === 'development' && process.env.__CLIENT_ENV__?.indexOf('localhost:8080') > -1 // allow http urls if in development and testing against localhost:8080);\n );\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 = {\n type: THREEDS2_ERROR,\n code: Analytics3DS2Errors.TOKEN_IS_MISSING_ACSURL,\n errorType: ANALYTICS_API_ERROR,\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\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_API_ERROR,\n message: `${THREEDS2_CHALLENGE_ERROR}: Decoded token is missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)`\n });\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\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_API_ERROR,\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 // TODO - do we want to know about these events (timeout or no transStatus - which are \"valid\" 3DS2 scenarios) from an analytics perspective, and, if so, how do we classify them? ...errors? info?\n // let analyticsObject: SendAnalyticsObject;\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_NETWORK_ERROR : ANALYTICS_INTERNAL_ERROR // TODO - for a timeout is this really a Network error? Or is it a \"ThirdParty\" error i.e. the ACS has had a problem serving the fingerprinting page in a timely manner?\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.message,\n // ...errorTypeAndCode\n // };\n //\n // // Send info about the error to analytics endpoint\n // this.props.onSubmitAnalytics(analyticsObject);\n // }\n\n // Create log object - the process is completed, one way or another\n const analyticsObject: SendAnalyticsObject = {\n type: THREEDS2_FULL,\n message: `${THREEDS2_NUM} challenge has completed`,\n metadata: { ...resultObj }\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(\n new AdyenCheckoutError(\n ERROR,\n errorInfoObj.errorInfo\n // { cause: errorInfoObj.errorObj }\n )\n );\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 // 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.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","static","onComplete","onError","onActionHandled","isMDFlow","constructor","props","super","this","token","challengeData","prepareChallengeData","size","challengeWindowSize","state","status","success","error","MISSING_TOKEN_IN_ACTION_MSG","console","debug","THREEDS2_CHALLENGE_ERROR","rtnObj","onSubmitAnalytics","type","THREEDS2_FULL","message","actionDescription","onFormSubmit","msg","componentDidMount","isErrorObject","acsURL","isValidHttpUrl","setError","errorInfo","Analytics3DS2Errors","TOKEN_IS_MISSING_ACSURL","i18n","get","errorCodeObject","THREEDS2_ERROR","code","errorType","ANALYTICS_API_ERROR","metadata","acsTransID","messageVersion","threeDSServerTransID","cReqData","TOKEN_IS_MISSING_OTHER_PROPS","errorObj","setState","errorMsg","errorCode","indexOf","ACTION_IS_MISSING_TOKEN","TOKEN_DECODE_OR_PARSING_FAILED","setStatusComplete","resultObj","data","createOldChallengeResolveData","createChallengeResolveData","dataKey","transStatus","paymentData","analyticsObject","THREEDS2_NUM","errorInfoObj","isFatal","AdyenCheckoutError","ERROR","render","_","getImage","useImage","h","DoChallenge3DS2","onCompleteChallenge","challenge","hasOwnProperty","result","length","errorDescription","cause","onErrorChallenge","timeoutObject","THREEDS2_CHALLENGE","div","className","Img","src","imageFolder","alt"],"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 { ActionHandledReturnObject } from '../../../../types/global-types';\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_API_ERROR, ANALYTICS_NETWORK_ERROR, 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 onActionHandled: () => {},\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 onActionHandled = (rtnObj: ActionHandledReturnObject) => {\n this.props.onSubmitAnalytics({\n type: THREEDS2_FULL,\n message: rtnObj.actionDescription,\n subtype: Analytics3DS2Events.CHALLENGE_IFRAME_LOADED\n });\n\n this.props.onActionHandled(rtnObj);\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_API_ERROR,\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_API_ERROR,\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_API_ERROR,\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_NETWORK_ERROR : ANALYTICS_API_ERROR\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_API_ERROR,\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.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","static","onComplete","onError","onActionHandled","isMDFlow","constructor","props","super","this","token","challengeData","prepareChallengeData","size","challengeWindowSize","state","status","success","error","MISSING_TOKEN_IN_ACTION_MSG","console","debug","THREEDS2_CHALLENGE_ERROR","rtnObj","onSubmitAnalytics","type","THREEDS2_FULL","message","actionDescription","subtype","Analytics3DS2Events","CHALLENGE_IFRAME_LOADED","onFormSubmit","msg","CHALLENGE_DATA_SENT","componentDidMount","isErrorObject","shouldAllowHttpDomains","environment","_environmentUrls","api","includes","acsURL","isValidHttpUrl","setError","errorInfo","Analytics3DS2Errors","TOKEN_IS_MISSING_ACSURL","i18n","get","errorCodeObject","THREEDS2_ERROR","code","errorType","ANALYTICS_API_ERROR","acsTransID","messageVersion","threeDSServerTransID","cReqData","TOKEN_IS_MISSING_OTHER_PROPS","setState","errorMsg","errorCode","indexOf","ACTION_IS_MISSING_TOKEN","TOKEN_DECODE_OR_PARSING_FAILED","setStatusComplete","resultObj","data","createOldChallengeResolveData","createChallengeResolveData","dataKey","transStatus","paymentData","analyticsObject","finalResObject","errorTypeAndCode","THREEDS2_TIMEOUT","NO_TRANSSTATUS","ANALYTICS_NETWORK_ERROR","result","THREEDS2_NUM","CHALLENGE_COMPLETED","errorInfoObj","isFatal","AdyenCheckoutError","ERROR","cause","errorObj","render","_","getImage","useImage","h","DoChallenge3DS2","onCompleteChallenge","challenge","hasOwnProperty","length","errorDescription","values","CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP","onErrorChallenge","timeoutObject","THREEDS2_CHALLENGE","div","className","Img","src","imageFolder","alt"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{Component as e,createElement as t}from"../../../../external/preact/dist/preact.js";import o from"./DoFingerprint3DS2.js";import{prepareFingerPrintData as r,isErrorObject as s,createOldFingerprintResolveData as i,createFingerprintResolveData as n}from"../utils.js";import{isValidHttpUrl as a}from"../../../../utils/isValidURL.js";import{MISSING_TOKEN_IN_ACTION_MSG as p,THREEDS2_FINGERPRINT_ERROR as d,THREEDS2_FULL as m,TIMEOUT as c,THREEDS2_ERROR as l,THREEDS2_NUM as S,THREEDS2_FINGERPRINT as h}from"../../constants.js";import{Analytics3DS2Errors as D,ANALYTICS_NETWORK_ERROR as g,ANALYTICS_API_ERROR as u}from"../../../../core/Analytics/constants.js";class f extends e{static type="scheme";static defaultProps={onComplete:()=>{},onError:()=>{},paymentData:"",showSpinner:!0,onActionHandled:()=>{},isMDFlow:!1};constructor(e){super(e);const{token:t,notificationURL:o}=this.props;if(t){const e=r({token:t,notificationURL:o});this.state={status:"init",fingerPrintData:e}}else this.state={fingerPrintData:{success:!1,error:p}},console.debug(`${d}: ${p}`)}onActionHandled=e=>{this.props.onSubmitAnalytics({type:m,message:e.actionDescription}),this.props.onActionHandled(e)};onFormSubmit=e=>{this.props.onSubmitAnalytics({type:m,message:e})};componentDidMount(){if(!s(this.state.fingerPrintData)){const e=!1,{threeDSMethodURL:t,threeDSMethodNotificationURL:o,postMessageDomain:r,threeDSServerTransID:s}=this.state.fingerPrintData;if(!a(t,e))return this.setStatusComplete({threeDSCompInd:"U"},{errorCode:D.TOKEN_IS_MISSING_THREEDSMETHODURL,message:`${d}: Decoded token is missing a valid threeDSMethodURL property`}),void console.debug("### PrepareFingerprint3DS2::exiting:: no valid threeDSMethodURL");const i=a(o,e),n=a(r,e),p=s?.length;if(!i||!n||!p)return this.setStatusComplete({threeDSCompInd:"N"},{errorCode:D.TOKEN_IS_MISSING_OTHER_PROPS,message:`${d}: 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(p)>-1?D.ACTION_IS_MISSING_TOKEN:D.TOKEN_DECODE_OR_PARSING_FAILED;this.setStatusComplete({threeDSCompInd:"N"},{errorCode:t,message:`${d}: ${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 o=(this.props.isMDFlow?i:n)(this.props.dataKey,e,this.props.paymentData);let r;const s=t||e;if(s.errorCode){const e={code:s.errorCode===c?D.THREEDS2_TIMEOUT:s.errorCode,errorType:s.errorCode===c?g:u};r={type:l,message:s.message,...e},this.props.onSubmitAnalytics(r)}r={type:m,message:`${S} fingerprinting has completed`,metadata:{...e}},this.props.onSubmitAnalytics(r),this.props.onComplete(o)}))}render({showSpinner:e},{status:r,fingerPrintData:s}){return"retrievingFingerPrint"===r?t(o,{onCompleteFingerprint:e=>{this.setStatusComplete(e.result)},onErrorFingerprint:e=>{const t={errorCode:e.errorCode,message:`${h}: ${e.errorCode}`};this.setStatusComplete(e.result,t)},showSpinner:e,...s,onActionHandled:this.onActionHandled,onFormSubmit:this.onFormSubmit}):null}}export{f as default};
1
+ import{Component as e,createElement as t}from"../../../../external/preact/dist/preact.js";import o from"./DoFingerprint3DS2.js";import{prepareFingerPrintData as s,isErrorObject as r,createOldFingerprintResolveData as i,createFingerprintResolveData as n}from"../utils.js";import{isValidHttpUrl as a}from"../../../../utils/isValidURL.js";import{MISSING_TOKEN_IN_ACTION_MSG as p,THREEDS2_FINGERPRINT_ERROR as d,THREEDS2_FULL as m,TIMEOUT as c,THREEDS2_ERROR as l,THREEDS2_NUM as h,THREEDS2_FINGERPRINT as S}from"../../constants.js";import{Analytics3DS2Events as D,Analytics3DS2Errors as u,ANALYTICS_NETWORK_ERROR as g,ANALYTICS_API_ERROR as f}from"../../../../core/Analytics/constants.js";class C extends e{static type="scheme";static defaultProps={onComplete:()=>{},onError:()=>{},paymentData:"",showSpinner:!0,onActionHandled:()=>{},isMDFlow:!1};constructor(e){super(e);const{token:t,notificationURL:o}=this.props;if(t){const e=s({token:t,notificationURL:o});this.state={status:"init",fingerPrintData:e}}else this.state={fingerPrintData:{success:!1,error:p}},console.debug(`${d}: ${p}`)}onActionHandled=e=>{this.props.onSubmitAnalytics({type:m,message:e.actionDescription,subtype:D.FINGERPRINT_IFRAME_LOADED}),this.props.onActionHandled(e)};onFormSubmit=e=>{this.props.onSubmitAnalytics({type:m,message:e,subtype:D.FINGERPRINT_DATA_SENT})};componentDidMount(){if(!r(this.state.fingerPrintData)){const e="test"===this.props.environment&&this.props._environmentUrls?.api?.includes("http://localhost:8080"),{threeDSMethodURL:t,threeDSMethodNotificationURL:o,postMessageDomain:s,threeDSServerTransID:r}=this.state.fingerPrintData;if(!a(t,e))return this.setStatusComplete({threeDSCompInd:"U"},{errorCode:u.TOKEN_IS_MISSING_THREEDSMETHODURL,message:`${d}: Decoded token is missing a valid threeDSMethodURL property`}),void console.debug("### PrepareFingerprint3DS2::exiting:: no valid threeDSMethodURL");const i=a(o,e),n=a(s,e),p=r?.length;if(!i||!n||!p)return this.setStatusComplete({threeDSCompInd:"N"},{errorCode:u.TOKEN_IS_MISSING_OTHER_PROPS,message:`${d}: 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(p)>-1?u.ACTION_IS_MISSING_TOKEN:u.TOKEN_DECODE_OR_PARSING_FAILED;this.setStatusComplete({threeDSCompInd:"N"},{errorCode:t,message:`${d}: ${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 o=(this.props.isMDFlow?i:n)(this.props.dataKey,e,this.props.paymentData);let s;const r=t||e;if(r.errorCode){const e={code:r.errorCode===c?u.THREEDS2_TIMEOUT:r.errorCode,errorType:r.errorCode===c?g:f};s={type:l,message:r.message,...e},this.props.onSubmitAnalytics(s)}let a;switch(e?.threeDSCompInd){case"Y":a="success";break;case"N":a=t?t.errorCode===c?c:"failedInternal":"failed";break;case"U":a="noThreeDSMethodURL"}s={type:m,message:`${h} fingerprinting has completed`,subtype:D.FINGERPRINT_COMPLETED,result:a},this.props.onSubmitAnalytics(s),this.props.onComplete(o)}))}render({showSpinner:e},{status:s,fingerPrintData:r}){return"retrievingFingerPrint"===s?t(o,{onCompleteFingerprint:e=>{this.setStatusComplete(e.result)},onErrorFingerprint:e=>{const t={errorCode:e.errorCode,message:`${S}: ${e.errorCode}`};this.setStatusComplete(e.result,t)},showSpinner:e,...r,onActionHandled:this.onActionHandled,onFormSubmit:this.onFormSubmit}):null}}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 { ActionHandledReturnObject } from '../../../../types/global-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_API_ERROR, Analytics3DS2Errors, ANALYTICS_NETWORK_ERROR } 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 onActionHandled: () => {},\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 onActionHandled = (rtnObj: ActionHandledReturnObject) => {\n // Leads to an \"iframe loaded\" log action\n this.props.onSubmitAnalytics({ type: THREEDS2_FULL, message: rtnObj.actionDescription });\n this.props.onActionHandled(rtnObj);\n };\n\n public onFormSubmit = (msg: string) => {\n this.props.onSubmitAnalytics({\n type: THREEDS2_FULL,\n message: msg\n });\n };\n\n componentDidMount() {\n const hasFingerPrintData = !isErrorObject(this.state.fingerPrintData);\n\n if (hasFingerPrintData) {\n const shouldAllowHttpDomains = process.env.NODE_ENV === 'development' && process.env.__CLIENT_ENV__?.indexOf('localhost:8080') > -1; // allow http urls if in development and testing against 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_NETWORK_ERROR : ANALYTICS_API_ERROR // TODO - for a timeout is this really a Network error? Or is it a \"ThirdParty\" error i.e. the ACS has had a problem serving the fingerprinting page in a timely manner?\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, // TODO - do we want to know about this timeout event (which is a \"valid\" 3DS2 scenario) from an analytics perspective, and, if so, how do we classify it? ...error? info?\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 /**\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 metadata: { ...resultObj }\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.onActionHandled}\n onFormSubmit={this.onFormSubmit}\n />\n );\n }\n\n return null;\n }\n}\n\nexport default PrepareFingerprint3DS2;\n"],"names":["PrepareFingerprint3DS2","Component","static","onComplete","onError","paymentData","showSpinner","onActionHandled","isMDFlow","constructor","props","super","token","notificationURL","this","fingerPrintData","prepareFingerPrintData","state","status","success","error","MISSING_TOKEN_IN_ACTION_MSG","console","debug","THREEDS2_FINGERPRINT_ERROR","rtnObj","onSubmitAnalytics","type","THREEDS2_FULL","message","actionDescription","onFormSubmit","msg","componentDidMount","isErrorObject","shouldAllowHttpDomains","threeDSMethodURL","threeDSMethodNotificationURL","postMessageDomain","threeDSServerTransID","isValidHttpUrl","setStatusComplete","threeDSCompInd","errorCode","Analytics3DS2Errors","TOKEN_IS_MISSING_THREEDSMETHODURL","hasValid3DSMethodNotificationURL","hasValidPostMessageDomain","hasTransServerID","length","TOKEN_IS_MISSING_OTHER_PROPS","setState","errorMsg","indexOf","ACTION_IS_MISSING_TOKEN","TOKEN_DECODE_OR_PARSING_FAILED","resultObj","errorCodeObject","data","createOldFingerprintResolveData","createFingerprintResolveData","dataKey","analyticsObject","finalResObject","errorTypeAndCode","code","TIMEOUT","THREEDS2_TIMEOUT","errorType","ANALYTICS_NETWORK_ERROR","ANALYTICS_API_ERROR","THREEDS2_ERROR","THREEDS2_NUM","metadata","render","h","DoFingerprint3DS2","onCompleteFingerprint","fingerprint","result","onErrorFingerprint","timeoutObject","THREEDS2_FINGERPRINT"],"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 { ActionHandledReturnObject } from '../../../../types/global-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_API_ERROR, ANALYTICS_NETWORK_ERROR, 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 onActionHandled: () => {},\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 onActionHandled = (rtnObj: ActionHandledReturnObject) => {\n this.props.onSubmitAnalytics({\n type: THREEDS2_FULL,\n message: rtnObj.actionDescription,\n subtype: Analytics3DS2Events.FINGERPRINT_IFRAME_LOADED\n });\n this.props.onActionHandled(rtnObj);\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_NETWORK_ERROR : ANALYTICS_API_ERROR\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.onActionHandled}\n onFormSubmit={this.onFormSubmit}\n />\n );\n }\n\n return null;\n }\n}\n\nexport default PrepareFingerprint3DS2;\n"],"names":["PrepareFingerprint3DS2","Component","static","onComplete","onError","paymentData","showSpinner","onActionHandled","isMDFlow","constructor","props","super","token","notificationURL","this","fingerPrintData","prepareFingerPrintData","state","status","success","error","MISSING_TOKEN_IN_ACTION_MSG","console","debug","THREEDS2_FINGERPRINT_ERROR","rtnObj","onSubmitAnalytics","type","THREEDS2_FULL","message","actionDescription","subtype","Analytics3DS2Events","FINGERPRINT_IFRAME_LOADED","onFormSubmit","msg","FINGERPRINT_DATA_SENT","componentDidMount","isErrorObject","shouldAllowHttpDomains","environment","_environmentUrls","api","includes","threeDSMethodURL","threeDSMethodNotificationURL","postMessageDomain","threeDSServerTransID","isValidHttpUrl","setStatusComplete","threeDSCompInd","errorCode","Analytics3DS2Errors","TOKEN_IS_MISSING_THREEDSMETHODURL","hasValid3DSMethodNotificationURL","hasValidPostMessageDomain","hasTransServerID","length","TOKEN_IS_MISSING_OTHER_PROPS","setState","errorMsg","indexOf","ACTION_IS_MISSING_TOKEN","TOKEN_DECODE_OR_PARSING_FAILED","resultObj","errorCodeObject","data","createOldFingerprintResolveData","createFingerprintResolveData","dataKey","analyticsObject","finalResObject","errorTypeAndCode","code","TIMEOUT","THREEDS2_TIMEOUT","errorType","ANALYTICS_NETWORK_ERROR","ANALYTICS_API_ERROR","THREEDS2_ERROR","result","THREEDS2_NUM","FINGERPRINT_COMPLETED","render","h","DoFingerprint3DS2","onCompleteFingerprint","fingerprint","onErrorFingerprint","timeoutObject","THREEDS2_FINGERPRINT"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{createElement as t}from"../../external/preact/dist/preact.js";import{CoreProvider as s}from"../../core/Context/CoreProvider.js";import e from"../Redirect/Redirect.js";import r from"../internal/RedirectButton/RedirectButton.js";import{TxVariants as i}from"../tx-variants.js";class o extends e{static type=i.trustly;get displayName(){return this.props.name||this.constructor.type}render(){return t(s,{i18n:this.props.i18n,loadingContext:this.props.loadingContext,resources:this.resources},t("div",{className:"adyen-checkout-trustly"},t("p",{className:"adyen-checkout-trustly__descriptor"},this.props.i18n.get("trustly.descriptor")),t("ul",{className:"adyen-checkout-trustly__description-list"},t("li",null,this.props.i18n.get("trustly.description1")),t("li",null,this.props.i18n.get("trustly.description2")))),this.props.showPayButton&&t(r,{...this.props,name:this.displayName,onSubmit:this.submit,payButton:this.payButton,ref:t=>{this.componentRef=t}}))}}export{o as default};
1
+ import{createElement as t}from"../../external/preact/dist/preact.js";import{CoreProvider as s}from"../../core/Context/CoreProvider.js";import e from"../Redirect/Redirect.js";import r from"../internal/RedirectButton/RedirectButton.js";import{TxVariants as o}from"../tx-variants.js";class i extends e{static type=o.trustly;get displayName(){return this.props.name||this.constructor.type}render(){return t(s,{i18n:this.props.i18n,loadingContext:this.props.loadingContext,resources:this.resources},t("div",{className:"adyen-checkout-trustly"},t("p",{className:"adyen-checkout-trustly__descriptor"},this.props.i18n.get("trustly.descriptor")),t("ul",{className:"adyen-checkout-trustly__description-list"},t("li",null,this.props.i18n.get("trustly.description1")),t("li",null,this.props.i18n.get("trustly.description2")))),this.props.showPayButton&&t(r,{...this.props,showPayButton:this.props.showPayButton,name:this.displayName,onSubmit:this.submit,payButton:this.payButton,ref:t=>{this.componentRef=t}}))}}export{i as default};
2
2
  //# sourceMappingURL=Trustly.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Trustly.js","sources":["../../../../src/components/Trustly/Trustly.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { CoreProvider } from '../../core/Context/CoreProvider';\nimport RedirectElement from '../Redirect';\nimport RedirectButton from '../internal/RedirectButton';\nimport { TxVariants } from '../tx-variants';\nimport './Trustly.scss';\n\nclass TrustlyElement extends RedirectElement {\n public static type = TxVariants.trustly;\n\n get displayName() {\n return this.props.name || this.constructor['type'];\n }\n\n render() {\n return (\n <CoreProvider i18n={this.props.i18n} loadingContext={this.props.loadingContext} resources={this.resources}>\n <div className=\"adyen-checkout-trustly\">\n <p className=\"adyen-checkout-trustly__descriptor\">{this.props.i18n.get('trustly.descriptor')}</p>\n <ul className=\"adyen-checkout-trustly__description-list\">\n <li>{this.props.i18n.get('trustly.description1')}</li>\n <li>{this.props.i18n.get('trustly.description2')}</li>\n </ul>\n </div>\n\n {this.props.showPayButton && (\n <RedirectButton\n {...this.props}\n name={this.displayName}\n onSubmit={this.submit}\n payButton={this.payButton}\n ref={ref => {\n this.componentRef = ref;\n }}\n />\n )}\n </CoreProvider>\n );\n }\n}\n\nexport default TrustlyElement;\n"],"names":["TrustlyElement","RedirectElement","static","TxVariants","trustly","displayName","this","props","name","constructor","render","h","CoreProvider","i18n","loadingContext","resources","div","className","p","get","ul","li","showPayButton","RedirectButton","onSubmit","submit","payButton","ref","componentRef"],"mappings":"yRAOA,MAAMA,UAAuBC,EACzBC,YAAqBC,EAAWC,QAEhC,eAAIC,GACA,OAAOC,KAAKC,MAAMC,MAAQF,KAAKG,YAAmB,IACtD,CAEAC,MAAAA,GACI,OACIC,EAACC,EAAAA,CAAaC,KAAMP,KAAKC,MAAMM,KAAMC,eAAgBR,KAAKC,MAAMO,eAAgBC,UAAWT,KAAKS,WAC5FJ,EAACK,MAAAA,CAAIC,UAAU,0BACXN,EAACO,IAAAA,CAAED,UAAU,sCAAsCX,KAAKC,MAAMM,KAAKM,IAAI,uBACvER,EAACS,KAAAA,CAAGH,UAAU,4CACVN,EAACU,KAAAA,KAAIf,KAAKC,MAAMM,KAAKM,IAAI,yBACzBR,EAACU,KAAI,KAAAf,KAAKC,MAAMM,KAAKM,IAAI,2BAIhCb,KAAKC,MAAMe,eACRX,EAACY,EAAAA,IACOjB,KAAKC,MACTC,KAAMF,KAAKD,YACXmB,SAAUlB,KAAKmB,OACfC,UAAWpB,KAAKoB,UAChBC,IAAKA,IACDrB,KAAKsB,aAAeD,CAAAA,IAM5C"}
1
+ {"version":3,"file":"Trustly.js","sources":["../../../../src/components/Trustly/Trustly.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { CoreProvider } from '../../core/Context/CoreProvider';\nimport RedirectElement from '../Redirect';\nimport RedirectButton from '../internal/RedirectButton';\nimport { TxVariants } from '../tx-variants';\nimport './Trustly.scss';\n\nclass TrustlyElement extends RedirectElement {\n public static type = TxVariants.trustly;\n\n get displayName() {\n return this.props.name || this.constructor['type'];\n }\n\n render() {\n return (\n <CoreProvider i18n={this.props.i18n} loadingContext={this.props.loadingContext} resources={this.resources}>\n <div className=\"adyen-checkout-trustly\">\n <p className=\"adyen-checkout-trustly__descriptor\">{this.props.i18n.get('trustly.descriptor')}</p>\n <ul className=\"adyen-checkout-trustly__description-list\">\n <li>{this.props.i18n.get('trustly.description1')}</li>\n <li>{this.props.i18n.get('trustly.description2')}</li>\n </ul>\n </div>\n\n {this.props.showPayButton && (\n <RedirectButton\n {...this.props}\n showPayButton={this.props.showPayButton}\n name={this.displayName}\n onSubmit={this.submit}\n payButton={this.payButton}\n ref={ref => {\n this.componentRef = ref;\n }}\n />\n )}\n </CoreProvider>\n );\n }\n}\n\nexport default TrustlyElement;\n"],"names":["TrustlyElement","RedirectElement","static","TxVariants","trustly","displayName","this","props","name","constructor","render","h","CoreProvider","i18n","loadingContext","resources","div","className","p","get","ul","li","showPayButton","RedirectButton","onSubmit","submit","payButton","ref","componentRef"],"mappings":"yRAOA,MAAMA,UAAuBC,EACzBC,YAAqBC,EAAWC,QAEhC,eAAIC,GACA,OAAOC,KAAKC,MAAMC,MAAQF,KAAKG,YAAmB,IACtD,CAEAC,MAAAA,GACI,OACIC,EAACC,EAAAA,CAAaC,KAAMP,KAAKC,MAAMM,KAAMC,eAAgBR,KAAKC,MAAMO,eAAgBC,UAAWT,KAAKS,WAC5FJ,EAACK,MAAAA,CAAIC,UAAU,0BACXN,EAACO,IAAAA,CAAED,UAAU,sCAAsCX,KAAKC,MAAMM,KAAKM,IAAI,uBACvER,EAACS,KAAAA,CAAGH,UAAU,4CACVN,EAACU,KAAAA,KAAIf,KAAKC,MAAMM,KAAKM,IAAI,yBACzBR,EAACU,KAAI,KAAAf,KAAKC,MAAMM,KAAKM,IAAI,2BAIhCb,KAAKC,MAAMe,eACRX,EAACY,EAAAA,IACOjB,KAAKC,MACTe,cAAehB,KAAKC,MAAMe,cAC1Bd,KAAMF,KAAKD,YACXmB,SAAUlB,KAAKmB,OACfC,UAAWpB,KAAKoB,UAChBC,IAAKA,IACDrB,KAAKsB,aAAeD,CAAAA,IAM5C"}
@@ -1,2 +1,2 @@
1
- const e=15,o=2e3;export{e as countdownTime,o as delay};
1
+ const e=30,o=2e3;export{e as countdownTime,o as delay};
2
2
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sources":["../../../../src/components/WeChat/config.ts"],"sourcesContent":["export const countdownTime = 15; // min\nexport const delay = 2000; // ms\n\nexport default {\n delay,\n countdownTime\n};\n"],"names":["countdownTime","delay"],"mappings":"AAAaA,MAAAA,EAAgB,GAChBC,EAAQ"}
1
+ {"version":3,"file":"config.js","sources":["../../../../src/components/WeChat/config.ts"],"sourcesContent":["export const countdownTime = 30; // min\nexport const delay = 2000; // ms\n\nexport default {\n delay,\n countdownTime\n};\n"],"names":["countdownTime","delay"],"mappings":"AAAaA,MAAAA,EAAgB,GAChBC,EAAQ"}
@@ -1,2 +1,2 @@
1
- import{TxVariants as a}from"./tx-variants.js";const o={[a.address]:"Address",[a.bankTransfer_IBAN]:"BankTransfer",[a.donation]:"Donation",[a.personal_details]:"PersonalDetails",[a.bcmc]:"Bancontact",[a.card]:"Card",[a.scheme]:"Card",[a.storedCard]:"Card",[a.customCard]:"CustomCard",[a.ach]:"Ach",[a.directdebit_GB]:"BacsDD",[a.sepadirectdebit]:"Sepa",[a.affirm]:"Affirm",[a.afterpay]:"AfterPay",[a.afterpay_default]:"AfterPay",[a.afterpay_b2b]:"AfterPayB2B",[a.atome]:"Atome",[a.facilypay_3x]:"FacilyPay3x",[a.facilypay_4x]:"FacilyPay4x",[a.facilypay_6x]:"FacilyPay6x",[a.facilypay_10x]:"FacilyPay10x",[a.facilypay_12x]:"FacilyPay12x",[a.ratepay]:"RatePay",[a.ratepay_directdebit]:"RatePayDirectDebit",[a.riverty]:"Riverty",[a.amazonpay]:"AmazonPay",[a.applepay]:"ApplePay",[a.cashapp]:"CashAppPay",[a.clicktopay]:"ClickToPay",[a.googlepay]:"GooglePay",[a.paypal]:"PayPal",[a.paywithgoogle]:"GooglePay",[a.boletobancario]:"Boleto",[a.boletobancario_itau]:"Boleto",[a.boletobancario_santander]:"Boleto",[a.doku]:"Doku",[a.doku_alfamart]:"Doku",[a.doku_permata_lite_atm]:"Doku",[a.doku_indomaret]:"Doku",[a.doku_atm_mandiri_va]:"Doku",[a.doku_sinarmas_va]:"Doku",[a.doku_mandiri_va]:"Doku",[a.doku_cimb_va]:"Doku",[a.doku_danamon_va]:"Doku",[a.doku_bri_va]:"Doku",[a.doku_bni_va]:"Doku",[a.doku_bca_va]:"Doku",[a.doku_wallet]:"Doku",[a.oxxo]:"Oxxo",[a.primeiropay_boleto]:"Boleto",[a.billdesk_online]:"BillDeskOnline",[a.billdesk_wallet]:"BillDeskWallet",[a.dotpay]:"Dotpay",[a.eps]:"Eps",[a.ideal]:"Ideal",[a.molpay_ebanking_fpx_MY]:"MolPayEBankingMY",[a.molpay_ebanking_TH]:"MolPayEBankingTH",[a.molpay_ebanking_VN]:"MolPayEBankingVN",[a.onlineBanking_CZ]:"OnlineBankingCZ",[a.onlinebanking_IN]:"OnlineBankingIN",[a.onlineBanking_PL]:"OnlineBankingPL",[a.onlineBanking_SK]:"OnlineBankingSK",[a.paybybank]:"PayByBank",[a.payu_IN_cashcard]:"PayuCashcard",[a.payu_IN_nb]:"PayuNetBanking",[a.wallet_IN]:"WalletINElement",[a.dragonpay_ebanking]:"Dragonpay",[a.dragonpay_otc_banking]:"Dragonpay",[a.dragonpay_otc_non_banking]:"Dragonpay",[a.dragonpay_otc_philippines]:"Dragonpay",[a.econtext_atm]:"Econtext",[a.econtext_online]:"Econtext",[a.econtext_seven_eleven]:"Econtext",[a.econtext_stores]:"Econtext",[a.giropay]:"Giropay",[a.multibanco]:"Multibanco",[a.redirect]:"Redirect",[a.twint]:"Twint",[a.vipps]:"Vipps",[a.trustly]:"Trustly",[a.klarna]:"Klarna",[a.klarna_account]:"Klarna",[a.klarna_paynow]:"Klarna",[a.bcmc_mobile]:"BcmcMobile",[a.bcmc_mobile_QR]:"BcmcMobile",[a.pix]:"Pix",[a.swish]:"Swish",[a.wechatpay]:"WeChat",[a.wechatpayQR]:"WeChat",[a.promptpay]:"PromptPay",[a.paynow]:"PayNow",[a.duitnow]:"Duitnow",[a.blik]:"Blik",[a.mbway]:"MBWay",[a.upi]:"UPI",[a.upi_qr]:"UPI",[a.upi_collect]:"UPI",[a.giftcard]:"Giftcard",[a.mealVoucher_FR_natixis]:"MealVoucherFR",[a.mealVoucher_FR_sodexo]:"MealVoucherFR",[a.mealVoucher_FR_groupeup]:"MealVoucherFR"};function e(a){return o[a]}export{e as default};
1
+ import{TxVariants as a}from"./tx-variants.js";const o={[a.address]:"Address",[a.bankTransfer_IBAN]:"BankTransfer",[a.donation]:"Donation",[a.personal_details]:"PersonalDetails",[a.bcmc]:"Bancontact",[a.card]:"Card",[a.scheme]:"Card",[a.storedCard]:"Card",[a.customCard]:"CustomCard",[a.ach]:"Ach",[a.directdebit_GB]:"BacsDD",[a.sepadirectdebit]:"Sepa",[a.affirm]:"Affirm",[a.afterpay]:"AfterPay",[a.afterpay_default]:"AfterPay",[a.afterpay_b2b]:"AfterPayB2B",[a.atome]:"Atome",[a.facilypay_3x]:"FacilyPay3x",[a.facilypay_4x]:"FacilyPay4x",[a.facilypay_6x]:"FacilyPay6x",[a.facilypay_10x]:"FacilyPay10x",[a.facilypay_12x]:"FacilyPay12x",[a.ratepay]:"RatePay",[a.ratepay_directdebit]:"RatePayDirectDebit",[a.riverty]:"Riverty",[a.amazonpay]:"AmazonPay",[a.applepay]:"ApplePay",[a.cashapp]:"CashAppPay",[a.clicktopay]:"ClickToPay",[a.googlepay]:"GooglePay",[a.paypal]:"PayPal",[a.paywithgoogle]:"GooglePay",[a.boletobancario]:"Boleto",[a.boletobancario_itau]:"Boleto",[a.boletobancario_santander]:"Boleto",[a.doku]:"Doku",[a.doku_alfamart]:"Doku",[a.doku_permata_lite_atm]:"Doku",[a.doku_indomaret]:"Doku",[a.doku_atm_mandiri_va]:"Doku",[a.doku_sinarmas_va]:"Doku",[a.doku_mandiri_va]:"Doku",[a.doku_cimb_va]:"Doku",[a.doku_danamon_va]:"Doku",[a.doku_bri_va]:"Doku",[a.doku_bni_va]:"Doku",[a.doku_bca_va]:"Doku",[a.doku_wallet]:"Doku",[a.oxxo]:"Oxxo",[a.primeiropay_boleto]:"Boleto",[a.billdesk_online]:"BillDeskOnline",[a.billdesk_wallet]:"BillDeskWallet",[a.dotpay]:"Dotpay",[a.eps]:"Eps",[a.molpay_ebanking_fpx_MY]:"MolPayEBankingMY",[a.molpay_ebanking_TH]:"MolPayEBankingTH",[a.molpay_ebanking_VN]:"MolPayEBankingVN",[a.onlineBanking_CZ]:"OnlineBankingCZ",[a.onlinebanking_IN]:"OnlineBankingIN",[a.onlineBanking_PL]:"OnlineBankingPL",[a.onlineBanking_SK]:"OnlineBankingSK",[a.paybybank]:"PayByBank",[a.payu_IN_cashcard]:"PayuCashcard",[a.payu_IN_nb]:"PayuNetBanking",[a.wallet_IN]:"WalletINElement",[a.dragonpay_ebanking]:"Dragonpay",[a.dragonpay_otc_banking]:"Dragonpay",[a.dragonpay_otc_non_banking]:"Dragonpay",[a.dragonpay_otc_philippines]:"Dragonpay",[a.econtext_atm]:"Econtext",[a.econtext_online]:"Econtext",[a.econtext_seven_eleven]:"Econtext",[a.econtext_stores]:"Econtext",[a.giropay]:"Giropay",[a.multibanco]:"Multibanco",[a.redirect]:"Redirect",[a.twint]:"Twint",[a.vipps]:"Vipps",[a.trustly]:"Trustly",[a.klarna]:"Klarna",[a.klarna_account]:"Klarna",[a.klarna_paynow]:"Klarna",[a.bcmc_mobile]:"BcmcMobile",[a.bcmc_mobile_QR]:"BcmcMobile",[a.pix]:"Pix",[a.swish]:"Swish",[a.wechatpay]:"WeChat",[a.wechatpayQR]:"WeChat",[a.promptpay]:"PromptPay",[a.paynow]:"PayNow",[a.duitnow]:"Duitnow",[a.blik]:"Blik",[a.mbway]:"MBWay",[a.ancv]:"ANCV",[a.upi]:"UPI",[a.upi_qr]:"UPI",[a.upi_collect]:"UPI",[a.giftcard]:"Giftcard",[a.mealVoucher_FR_natixis]:"MealVoucherFR",[a.mealVoucher_FR_sodexo]:"MealVoucherFR",[a.mealVoucher_FR_groupeup]:"MealVoucherFR"};function e(a){return o[a]}export{e as default};
2
2
  //# sourceMappingURL=components-name-map.js.map