@adyen/adyen-web 6.41.1 → 6.43.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 (94) hide show
  1. package/dist/cjs/adyen.css +4 -2
  2. package/dist/cjs/adyen.css.map +1 -1
  3. package/dist/cjs/index.cjs +1 -1
  4. package/dist/cjs/index.cjs.map +1 -1
  5. package/dist/cjs/index.d.cts +15 -2
  6. package/dist/es/adyen.css +4 -2
  7. package/dist/es/adyen.css.map +1 -1
  8. package/dist/es/components/Dropin/components/DropinComponent.js +1 -1
  9. package/dist/es/components/Dropin/components/DropinComponent.js.map +1 -1
  10. package/dist/es/components/Dropin/utils/paymentMethodsAnalytics.js +2 -0
  11. package/dist/es/components/Dropin/utils/paymentMethodsAnalytics.js.map +1 -0
  12. package/dist/es/components/ThreeDS2/callSubmit3DS2Fingerprint.js +1 -1
  13. package/dist/es/components/ThreeDS2/callSubmit3DS2Fingerprint.js.map +1 -1
  14. package/dist/es/components/ThreeDS2/components/Challenge/DoChallenge3DS2.js +1 -1
  15. package/dist/es/components/ThreeDS2/components/Challenge/DoChallenge3DS2.js.map +1 -1
  16. package/dist/es/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.js +1 -1
  17. package/dist/es/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.js.map +1 -1
  18. package/dist/es/components/ThreeDS2/constants.js +1 -1
  19. package/dist/es/components/ThreeDS2/constants.js.map +1 -1
  20. package/dist/es/components/internal/Address/Address.js +1 -1
  21. package/dist/es/components/internal/Address/Address.js.map +1 -1
  22. package/dist/es/components/internal/Address/validate.formats.js.map +1 -1
  23. package/dist/es/components/internal/Address/validate.js +1 -1
  24. package/dist/es/components/internal/Address/validate.js.map +1 -1
  25. package/dist/es/components/internal/FormFields/Select/Select.js +1 -1
  26. package/dist/es/components/internal/FormFields/Select/Select.js.map +1 -1
  27. package/dist/es/components/internal/FormFields/Select/components/SelectButton.js +1 -1
  28. package/dist/es/components/internal/FormFields/Select/components/SelectButton.js.map +1 -1
  29. package/dist/es/components/internal/FormFields/Select/components/SelectListItem.js +1 -1
  30. package/dist/es/components/internal/FormFields/Select/components/SelectListItem.js.map +1 -1
  31. package/dist/es/components/internal/IFrame/Iframe.js +1 -1
  32. package/dist/es/components/internal/IFrame/Iframe.js.map +1 -1
  33. package/dist/es/components/internal/Tag/Tag.js +2 -0
  34. package/dist/es/components/internal/Tag/Tag.js.map +1 -0
  35. package/dist/es/components/internal/Tag/Tag.module.scss.js +2 -0
  36. package/dist/es/components/internal/Tag/Tag.module.scss.js.map +1 -0
  37. package/dist/es/components/internal/Tag/TagList.js +2 -0
  38. package/dist/es/components/internal/Tag/TagList.js.map +1 -0
  39. package/dist/es/components/internal/Tag/TagList.module.scss.js +2 -0
  40. package/dist/es/components/internal/Tag/TagList.module.scss.js.map +1 -0
  41. package/dist/es/components/internal/Tag/types.js +2 -0
  42. package/dist/es/components/internal/Tag/types.js.map +1 -0
  43. package/dist/es/core/Analytics/events/AnalyticsInfoEvent.js +1 -1
  44. package/dist/es/core/Analytics/events/AnalyticsInfoEvent.js.map +1 -1
  45. package/dist/es/core/ProcessResponse/PaymentAction/actionTypes.js +1 -1
  46. package/dist/es/core/ProcessResponse/PaymentAction/actionTypes.js.map +1 -1
  47. package/dist/es/core/config.js +1 -1
  48. package/dist/es/index.d.ts +15 -2
  49. package/dist/es/packages/server/translations/en-US.json.js +1 -1
  50. package/dist/es-legacy/adyen.css +4 -2
  51. package/dist/es-legacy/adyen.css.map +1 -1
  52. package/dist/es-legacy/components/Dropin/components/DropinComponent.js +1 -1
  53. package/dist/es-legacy/components/Dropin/components/DropinComponent.js.map +1 -1
  54. package/dist/es-legacy/components/Dropin/utils/paymentMethodsAnalytics.js +2 -0
  55. package/dist/es-legacy/components/Dropin/utils/paymentMethodsAnalytics.js.map +1 -0
  56. package/dist/es-legacy/components/ThreeDS2/callSubmit3DS2Fingerprint.js +1 -1
  57. package/dist/es-legacy/components/ThreeDS2/callSubmit3DS2Fingerprint.js.map +1 -1
  58. package/dist/es-legacy/components/ThreeDS2/components/Challenge/DoChallenge3DS2.js +1 -1
  59. package/dist/es-legacy/components/ThreeDS2/components/Challenge/DoChallenge3DS2.js.map +1 -1
  60. package/dist/es-legacy/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.js +1 -1
  61. package/dist/es-legacy/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.js.map +1 -1
  62. package/dist/es-legacy/components/ThreeDS2/constants.js +1 -1
  63. package/dist/es-legacy/components/ThreeDS2/constants.js.map +1 -1
  64. package/dist/es-legacy/components/internal/Address/Address.js +1 -1
  65. package/dist/es-legacy/components/internal/Address/Address.js.map +1 -1
  66. package/dist/es-legacy/components/internal/Address/validate.formats.js.map +1 -1
  67. package/dist/es-legacy/components/internal/Address/validate.js +1 -1
  68. package/dist/es-legacy/components/internal/Address/validate.js.map +1 -1
  69. package/dist/es-legacy/components/internal/FormFields/Select/Select.js +1 -1
  70. package/dist/es-legacy/components/internal/FormFields/Select/Select.js.map +1 -1
  71. package/dist/es-legacy/components/internal/FormFields/Select/components/SelectButton.js +1 -1
  72. package/dist/es-legacy/components/internal/FormFields/Select/components/SelectButton.js.map +1 -1
  73. package/dist/es-legacy/components/internal/FormFields/Select/components/SelectListItem.js +1 -1
  74. package/dist/es-legacy/components/internal/FormFields/Select/components/SelectListItem.js.map +1 -1
  75. package/dist/es-legacy/components/internal/IFrame/Iframe.js +1 -1
  76. package/dist/es-legacy/components/internal/IFrame/Iframe.js.map +1 -1
  77. package/dist/es-legacy/components/internal/Tag/Tag.js +2 -0
  78. package/dist/es-legacy/components/internal/Tag/Tag.js.map +1 -0
  79. package/dist/es-legacy/components/internal/Tag/Tag.module.scss.js +2 -0
  80. package/dist/es-legacy/components/internal/Tag/Tag.module.scss.js.map +1 -0
  81. package/dist/es-legacy/components/internal/Tag/TagList.js +2 -0
  82. package/dist/es-legacy/components/internal/Tag/TagList.js.map +1 -0
  83. package/dist/es-legacy/components/internal/Tag/TagList.module.scss.js +2 -0
  84. package/dist/es-legacy/components/internal/Tag/TagList.module.scss.js.map +1 -0
  85. package/dist/es-legacy/components/internal/Tag/types.js +2 -0
  86. package/dist/es-legacy/components/internal/Tag/types.js.map +1 -0
  87. package/dist/es-legacy/core/Analytics/events/AnalyticsInfoEvent.js +1 -1
  88. package/dist/es-legacy/core/Analytics/events/AnalyticsInfoEvent.js.map +1 -1
  89. package/dist/es-legacy/core/ProcessResponse/PaymentAction/actionTypes.js +1 -1
  90. package/dist/es-legacy/core/ProcessResponse/PaymentAction/actionTypes.js.map +1 -1
  91. package/dist/es-legacy/core/config.js +1 -1
  92. package/dist/es-legacy/packages/server/translations/en-US.json.js +1 -1
  93. package/package.json +6 -6
  94. package/styles/adyen.css +4 -2
@@ -1,2 +1,2 @@
1
- import{Component as t,createElement as e,Fragment as s}from"../../../external/preact/dist/preact.js";import n from"./PaymentMethod/PaymentMethodList.js";import o from"./status/index.js";import a from"../../../core/Services/order-status.js";import{sanitizeOrder as r}from"../../internal/UIElement/utils.js";import i from"../../../core/Errors/AdyenCheckoutError.js";import d from"../../internal/Button/Button.js";import{AnalyticsInfoEvent as h,UiTarget as l,InfoEventType as p}from"../../../core/Analytics/events/AnalyticsInfoEvent.js";import{DropinSuccessState as c}from"./DropinSuccessState.js";function m(t,e,s){return e in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}function y(t){for(var e=1;e<arguments.length;e++){var s=null!=arguments[e]?arguments[e]:{},n=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(s).filter(function(t){return Object.getOwnPropertyDescriptor(s,t).enumerable}))),n.forEach(function(e){m(t,e,s[e])})}return t}function u(t,e){return e=null!=e?e:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):function(t){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);e.push.apply(e,s)}return e}(Object(e)).forEach(function(s){Object.defineProperty(t,s,Object.getOwnPropertyDescriptor(e,s))}),t}class P extends t{componentDidMount(){this.prepareDropinData()}componentDidUpdate(t,e){e.status.type!==this.state.status.type&&this.state.activePaymentMethod&&this.state.activePaymentMethod.setStatus(this.state.status.type),"ready"===this.state.status.type&&"ready"!==e.status.type&&this.props.onReady&&this.props.onReady()}closeActivePaymentMethod(){this.setState({activePaymentMethod:null})}render(){const{elements:t,fastlanePaymentElement:a,instantPaymentElements:r,storedPaymentElements:i,status:h,activePaymentMethod:l,showDefaultPaymentMethodList:p}=this.state,m="loading"===h.type,y="redirect"===h.type,u=!!((null==t?void 0:t.length)||(null==r?void 0:r.length)||(null==i?void 0:i.length));switch(h.type){case"success":var P;return e(c,{message:null===(P=h.props)||void 0===P?void 0:P.message});case"error":var M;return e(o.Error,{message:null===(M=h.props)||void 0===M?void 0:M.message});case"custom":var v,f;return null===(f=h.props)||void 0===f||null===(v=f.component)||void 0===v?void 0:v.render();default:return e("div",{className:`adyen-checkout__dropin adyen-checkout__dropin--${h.type}`},y&&h.props.component&&h.props.component.render(),m&&h.props&&h.props.component&&h.props.component.render(),!p&&e(s,null,e(n,{isLoading:m,paymentMethods:a,activePaymentMethod:l,onSelect:this.handleOnSelectPaymentMethod,openFirstPaymentMethod:!0,showRadioButton:this.props.showRadioButton}),u&&e(d,{classNameModifiers:["dropin-show-paymentmethods"],variant:"link",inline:!0,label:"Other payment methods",onClick:this.onShowDefaultPaymentMethodListClick})),u&&p&&e(n,{isLoading:m||y,isDisablingPaymentMethod:this.state.isDisabling,paymentMethods:t,instantPaymentMethods:r,storedPaymentMethods:i,activePaymentMethod:l,order:this.props.order,orderStatus:this.state.orderStatus,onOrderCancel:this.onOrderCancel,onSelect:this.handleOnSelectPaymentMethod,openPaymentMethod:this.props.openPaymentMethod,openFirstPaymentMethod:this.props.openFirstPaymentMethod,openFirstStoredPaymentMethod:this.props.openFirstStoredPaymentMethod,onDisableStoredPaymentMethod:this.handleDisableStoredPaymentMethod,showRemovePaymentMethodButton:this.props.showRemovePaymentMethodButton,showRadioButton:this.props.showRadioButton}))}}constructor(...t){super(...t),m(this,"state",{elements:[],fastlanePaymentElement:[],instantPaymentElements:[],storedPaymentElements:[],orderStatus:null,isDisabling:!1,status:{type:"loading",props:void 0},activePaymentMethod:null,cachedPaymentMethods:{},showDefaultPaymentMethodList:!0}),m(this,"prepareDropinData",()=>{const{order:t,clientKey:e,loadingContext:s}=this.props,[n,o,r,i]=this.props.onCreateElements(),d=t?a({clientKey:e,loadingContext:s},t):null;Promise.all([n,o,r,i,d]).then(([t,e,s,n,o])=>{this.setState({orderStatus:o,elements:e,instantPaymentElements:s,storedPaymentElements:t,fastlanePaymentElement:n,showDefaultPaymentMethodList:0===n.length}),this.setStatus("ready"),this.props.onElementsCreated([...s,...t,...e,...n])}),this.onOrderCancel=this.getOnOrderCancel()}),m(this,"setStatus",(t,e={})=>{this.setState({status:{type:t,props:e}})}),m(this,"setActivePaymentMethod",t=>{t!==this.state.activePaymentMethod&&(this.setState(e=>({activePaymentMethod:t,cachedPaymentMethods:u(y({},e.cachedPaymentMethods),{[t._id]:!0})})),this.state.cachedPaymentMethods[t._id]&&t.activate())}),m(this,"handleOnSelectPaymentMethod",t=>{const{activePaymentMethod:e}=this.state;var s,n;(this.setActivePaymentMethod(t),e&&e._id!==t._id||!e)&&(null===(s=(n=this.props).onSelect)||void 0===s||s.call(n,t))}),m(this,"handleDisableStoredPaymentMethod",t=>{this.setState({isDisabling:!0}),new Promise((e,s)=>this.props.onDisableStoredPaymentMethod(t.props.storedPaymentMethodId,e,s)).then(()=>{this.setState(e=>({storedPaymentElements:e.storedPaymentElements.filter(e=>e._id!==t._id)})),this.setState({isDisabling:!1})}).catch(()=>{this.setState({isDisabling:!1})})}),m(this,"onShowDefaultPaymentMethodListClick",()=>{var t;this.setState({showDefaultPaymentMethodList:!0});const e=new h({type:p.clicked,target:l.otherPaymentMethodButton,component:"dropin"});null===(t=this.props.modules)||void 0===t||t.analytics.sendAnalytics(e)}),m(this,"getOnOrderCancel",()=>this.props.onOrderCancel?t=>{const e=r(t.order);new Promise((t,s)=>{this.props.onOrderCancel({order:e},{resolve:t,reject:s})}).then(({amount:t})=>this.props.elementRef.handleAdvanceFlowPaymentMethodsUpdate(null,t)).catch(t=>{throw new i("NETWORK_ERROR",t)})}:this.props.session?t=>{this.props.session.cancelOrder(t).then(()=>this.props.core.update({order:null})).catch(t=>{console.error(t),this.setStatus((null==t?void 0:t.message)||"error")})}:null),m(this,"onOrderCancel",void 0)}}export{P as DropinComponent,P as default};
1
+ import{Component as t,createElement as e,Fragment as s}from"../../../external/preact/dist/preact.js";import o from"./PaymentMethod/PaymentMethodList.js";import n from"./status/index.js";import a from"../../../core/Services/order-status.js";import{sanitizeOrder as r}from"../../internal/UIElement/utils.js";import i from"../../../core/Errors/AdyenCheckoutError.js";import d from"../../internal/Button/Button.js";import h from"../elements/splitPaymentMethods.js";import{createAvailablePaymentsList as l,createUnavailablePaymentsList as p}from"../utils/paymentMethodsAnalytics.js";import{AnalyticsInfoEvent as m,InfoEventType as c,UiTarget as y}from"../../../core/Analytics/events/AnalyticsInfoEvent.js";import{DropinSuccessState as u}from"./DropinSuccessState.js";function P(t,e,s){return e in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}function M(t){for(var e=1;e<arguments.length;e++){var s=null!=arguments[e]?arguments[e]:{},o=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(s).filter(function(t){return Object.getOwnPropertyDescriptor(s,t).enumerable}))),o.forEach(function(e){P(t,e,s[e])})}return t}function v(t,e){return e=null!=e?e:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):function(t){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);e.push.apply(e,s)}return e}(Object(e)).forEach(function(s){Object.defineProperty(t,s,Object.getOwnPropertyDescriptor(e,s))}),t}class f extends t{componentDidMount(){this.prepareDropinData()}componentDidUpdate(t,e){e.status.type!==this.state.status.type&&this.state.activePaymentMethod&&this.state.activePaymentMethod.setStatus(this.state.status.type),"ready"===this.state.status.type&&"ready"!==e.status.type&&this.props.onReady&&this.props.onReady()}closeActivePaymentMethod(){this.setState({activePaymentMethod:null})}render(){const{elements:t,fastlanePaymentElement:a,instantPaymentElements:r,storedPaymentElements:i,status:h,activePaymentMethod:l,showDefaultPaymentMethodList:p}=this.state,m="loading"===h.type,c="redirect"===h.type,y=!!((null==t?void 0:t.length)||(null==r?void 0:r.length)||(null==i?void 0:i.length));switch(h.type){case"success":var P;return e(u,{message:null===(P=h.props)||void 0===P?void 0:P.message});case"error":var M;return e(n.Error,{message:null===(M=h.props)||void 0===M?void 0:M.message});case"custom":var v,f;return null===(f=h.props)||void 0===f||null===(v=f.component)||void 0===v?void 0:v.render();default:return e("div",{className:`adyen-checkout__dropin adyen-checkout__dropin--${h.type}`},c&&h.props.component&&h.props.component.render(),m&&h.props&&h.props.component&&h.props.component.render(),!p&&e(s,null,e(o,{isLoading:m,paymentMethods:a,activePaymentMethod:l,onSelect:this.handleOnSelectPaymentMethod,openFirstPaymentMethod:!0,showRadioButton:this.props.showRadioButton}),y&&e(d,{classNameModifiers:["dropin-show-paymentmethods"],variant:"link",inline:!0,label:"Other payment methods",onClick:this.onShowDefaultPaymentMethodListClick})),y&&p&&e(o,{isLoading:m||c,isDisablingPaymentMethod:this.state.isDisabling,paymentMethods:t,instantPaymentMethods:r,storedPaymentMethods:i,activePaymentMethod:l,order:this.props.order,orderStatus:this.state.orderStatus,onOrderCancel:this.onOrderCancel,onSelect:this.handleOnSelectPaymentMethod,openPaymentMethod:this.props.openPaymentMethod,openFirstPaymentMethod:this.props.openFirstPaymentMethod,openFirstStoredPaymentMethod:this.props.openFirstStoredPaymentMethod,onDisableStoredPaymentMethod:this.handleDisableStoredPaymentMethod,showRemovePaymentMethodButton:this.props.showRemovePaymentMethodButton,showRadioButton:this.props.showRadioButton}))}}constructor(...t){super(...t),P(this,"state",{elements:[],fastlanePaymentElement:[],instantPaymentElements:[],storedPaymentElements:[],orderStatus:null,isDisabling:!1,status:{type:"loading",props:void 0},activePaymentMethod:null,cachedPaymentMethods:{},showDefaultPaymentMethodList:!0}),P(this,"prepareDropinData",()=>{const{order:t,clientKey:e,loadingContext:s}=this.props,[o,n,r,i]=this.props.onCreateElements(),d=t?a({clientKey:e,loadingContext:s},t):null;Promise.all([o,n,r,i,d]).then(([t,e,s,o,n])=>{this.setState({orderStatus:n,elements:e,instantPaymentElements:s,storedPaymentElements:t,fastlanePaymentElement:o,showDefaultPaymentMethodList:0===o.length}),this.setStatus("ready"),this.props.onElementsCreated([...s,...t,...e,...o]),this.reportPaymentMethodList({fastlane:o,instant:s,stored:t,regular:e})}).catch(()=>{this.setStatus("error")}),this.onOrderCancel=this.getOnOrderCancel()}),P(this,"reportPaymentMethodList",t=>{try{var e;const{paymentMethods:s,storedPaymentMethods:o,instantPaymentMethods:n,fastlanePaymentMethod:a}=h(this.props.core.paymentMethodsResponse,null!==(e=this.props.instantPaymentTypes)&&void 0!==e?e:[]),r=[{displayMode:"fastlane",paymentMethods:a?[a]:[]},{displayMode:"instant",paymentMethods:n},{displayMode:"stored",paymentMethods:o},{displayMode:"regular",paymentMethods:s}],i=l(r.map(t=>t.displayMode),t,this.props.core),d=p(r,t),y=new m({type:c.PaymentListDisplayed,component:"dropin",availablePaymentMethods:i,unavailablePaymentMethods:d});this.props.core.modules.analytics.sendAnalytics(y)}catch(t){console.warn("Drop-in: failed to report payment method list analytics",t)}}),P(this,"setStatus",(t,e={})=>{this.setState({status:{type:t,props:e}})}),P(this,"setActivePaymentMethod",t=>{t!==this.state.activePaymentMethod&&(this.setState(e=>({activePaymentMethod:t,cachedPaymentMethods:v(M({},e.cachedPaymentMethods),{[t._id]:!0})})),this.state.cachedPaymentMethods[t._id]&&t.activate())}),P(this,"handleOnSelectPaymentMethod",t=>{const{activePaymentMethod:e}=this.state;var s,o;(this.setActivePaymentMethod(t),e&&e._id!==t._id||!e)&&(null===(s=(o=this.props).onSelect)||void 0===s||s.call(o,t))}),P(this,"handleDisableStoredPaymentMethod",t=>{this.setState({isDisabling:!0}),new Promise((e,s)=>this.props.onDisableStoredPaymentMethod(t.props.storedPaymentMethodId,e,s)).then(()=>{this.setState(e=>({storedPaymentElements:e.storedPaymentElements.filter(e=>e._id!==t._id)})),this.setState({isDisabling:!1})}).catch(()=>{this.setState({isDisabling:!1})})}),P(this,"onShowDefaultPaymentMethodListClick",()=>{var t;this.setState({showDefaultPaymentMethodList:!0});const e=new m({type:c.clicked,target:y.otherPaymentMethodButton,component:"dropin"});null===(t=this.props.modules)||void 0===t||t.analytics.sendAnalytics(e)}),P(this,"getOnOrderCancel",()=>this.props.onOrderCancel?t=>{const e=r(t.order);new Promise((t,s)=>{this.props.onOrderCancel({order:e},{resolve:t,reject:s})}).then(({amount:t})=>this.props.elementRef.handleAdvanceFlowPaymentMethodsUpdate(null,t)).catch(t=>{throw new i("NETWORK_ERROR",t)})}:this.props.session?t=>{this.props.session.cancelOrder(t).then(()=>this.props.core.update({order:null})).catch(t=>{console.error(t),this.setStatus((null==t?void 0:t.message)||"error")})}:null),P(this,"onOrderCancel",void 0)}}export{f as DropinComponent,f as default};
2
2
  //# sourceMappingURL=DropinComponent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropinComponent.js","sources":["../../../../../src/components/Dropin/components/DropinComponent.tsx"],"sourcesContent":["import { Component, Fragment, h } from 'preact';\nimport PaymentMethodList from './PaymentMethod/PaymentMethodList';\nimport Status from './status';\nimport getOrderStatus from '../../../core/Services/order-status';\nimport './DropinComponent.scss';\nimport { sanitizeOrder } from '../../internal/UIElement/utils';\nimport type { PaymentAmount } from '../../../types/global-types';\nimport AdyenCheckoutError from '../../../core/Errors/AdyenCheckoutError';\nimport Button from '../../internal/Button';\nimport type {\n DropinComponentProps,\n DropinComponentState,\n DropinStatus,\n DropinStatusProps,\n onOrderCancelData,\n onOrderCancelInternalCallback\n} from '../types';\nimport UIElement from '../../internal/UIElement';\nimport { AnalyticsInfoEvent, InfoEventType, UiTarget } from '../../../core/Analytics/events/AnalyticsInfoEvent';\nimport { DropinSuccessState } from './DropinSuccessState';\n\nexport class DropinComponent extends Component<DropinComponentProps, DropinComponentState> {\n public state: DropinComponentState = {\n elements: [],\n fastlanePaymentElement: [],\n instantPaymentElements: [],\n storedPaymentElements: [],\n orderStatus: null,\n isDisabling: false,\n status: { type: 'loading', props: undefined },\n activePaymentMethod: null,\n cachedPaymentMethods: {},\n showDefaultPaymentMethodList: true\n };\n\n componentDidMount() {\n this.prepareDropinData();\n }\n\n public prepareDropinData = () => {\n const { order, clientKey, loadingContext } = this.props;\n const [storedElementsPromises, elementsPromises, instantPaymentsPromises, fastlanePaymentElementPromise] = this.props.onCreateElements();\n const orderStatusPromise = order ? getOrderStatus({ clientKey, loadingContext }, order) : null;\n\n void Promise.all([storedElementsPromises, elementsPromises, instantPaymentsPromises, fastlanePaymentElementPromise, orderStatusPromise]).then(\n ([storedPaymentElements, elements, instantPaymentElements, fastlanePaymentElement, orderStatus]) => {\n this.setState({\n orderStatus,\n elements,\n instantPaymentElements,\n storedPaymentElements,\n fastlanePaymentElement,\n showDefaultPaymentMethodList: fastlanePaymentElement.length === 0\n });\n this.setStatus('ready');\n\n this.props.onElementsCreated([...instantPaymentElements, ...storedPaymentElements, ...elements, ...fastlanePaymentElement]);\n }\n );\n\n this.onOrderCancel = this.getOnOrderCancel();\n };\n\n public setStatus = (status: DropinStatus['type'], props: DropinStatusProps = {}) => {\n this.setState({ status: { type: status, props } });\n };\n\n private setActivePaymentMethod = (paymentMethod: UIElement): void => {\n if (paymentMethod === this.state.activePaymentMethod) {\n return;\n }\n\n this.setState(prevState => ({\n activePaymentMethod: paymentMethod,\n cachedPaymentMethods: { ...prevState.cachedPaymentMethods, [paymentMethod._id]: true }\n }));\n\n if (this.state.cachedPaymentMethods[paymentMethod._id]) {\n paymentMethod.activate();\n }\n };\n\n componentDidUpdate(prevProps, prevState) {\n if (prevState.status.type !== this.state.status.type && this.state.activePaymentMethod) {\n // @ts-ignore TODO: Drop-in has its own 'status' values ('custom' for ex) which differs from regular UIElementStatus. Need to investigate best way to define/use this status variable\n this.state.activePaymentMethod.setStatus(this.state.status.type);\n }\n\n if (this.state.status.type === 'ready' && prevState.status.type !== 'ready' && this.props.onReady) {\n this.props.onReady();\n }\n }\n\n private handleOnSelectPaymentMethod = paymentMethod => {\n const { activePaymentMethod } = this.state;\n\n this.setActivePaymentMethod(paymentMethod);\n\n if ((activePaymentMethod && activePaymentMethod._id !== paymentMethod._id) || !activePaymentMethod) {\n this.props.onSelect?.(paymentMethod);\n }\n };\n\n private handleDisableStoredPaymentMethod = storedPaymentMethod => {\n this.setState({ isDisabling: true });\n\n new Promise((resolve, reject) => this.props.onDisableStoredPaymentMethod(storedPaymentMethod.props.storedPaymentMethodId, resolve, reject))\n .then(() => {\n this.setState(prevState => ({\n storedPaymentElements: prevState.storedPaymentElements.filter(pm => pm._id !== storedPaymentMethod._id)\n }));\n this.setState({ isDisabling: false });\n })\n .catch(() => {\n this.setState({ isDisabling: false });\n });\n };\n\n private readonly onShowDefaultPaymentMethodListClick = () => {\n this.setState({\n showDefaultPaymentMethodList: true\n });\n\n const event = new AnalyticsInfoEvent({\n type: InfoEventType.clicked,\n target: UiTarget.otherPaymentMethodButton,\n component: 'dropin'\n });\n\n this.props.modules?.analytics.sendAnalytics(event);\n };\n\n closeActivePaymentMethod() {\n this.setState({ activePaymentMethod: null });\n }\n\n /**\n * getOnOrderCancel decides which onOrderCancel logic should be used, manual or sessions\n */\n private readonly getOnOrderCancel = (): ((data: onOrderCancelData) => void) | null => {\n if (this.props.onOrderCancel) {\n return (data: onOrderCancelData) => {\n const order = sanitizeOrder(data.order);\n new Promise<{ amount: PaymentAmount }>((resolve, reject) => {\n this.props.onOrderCancel({ order }, { resolve, reject });\n })\n .then(({ amount }) => this.props.elementRef.handleAdvanceFlowPaymentMethodsUpdate(null, amount))\n .catch(error => {\n throw new AdyenCheckoutError('NETWORK_ERROR', error);\n });\n };\n }\n if (this.props.session) {\n return (data: onOrderCancelData) =>\n void this.props.session\n .cancelOrder(data)\n .then(() => this.props.core.update({ order: null }))\n .catch(error => {\n console.error(error);\n this.setStatus(error?.message || 'error');\n });\n }\n return null;\n };\n\n private onOrderCancel: onOrderCancelInternalCallback;\n\n render() {\n const {\n elements,\n fastlanePaymentElement,\n instantPaymentElements,\n storedPaymentElements,\n status,\n activePaymentMethod,\n showDefaultPaymentMethodList\n } = this.state;\n\n const isLoading = status.type === 'loading';\n const isRedirecting = status.type === 'redirect';\n const hasPaymentMethodsToBeDisplayed = !!(elements?.length || instantPaymentElements?.length || storedPaymentElements?.length);\n\n switch (status.type) {\n case 'success':\n return <DropinSuccessState message={status.props?.message} />;\n\n case 'error':\n return <Status.Error message={status.props?.message} />;\n\n case 'custom':\n return status.props?.component?.render();\n\n default:\n return (\n <div className={`adyen-checkout__dropin adyen-checkout__dropin--${status.type}`}>\n {isRedirecting && status.props.component && status.props.component.render()}\n {isLoading && status.props && status.props.component && status.props.component.render()}\n\n {!showDefaultPaymentMethodList && (\n <Fragment>\n <PaymentMethodList\n isLoading={isLoading}\n paymentMethods={fastlanePaymentElement}\n activePaymentMethod={activePaymentMethod}\n onSelect={this.handleOnSelectPaymentMethod}\n openFirstPaymentMethod\n showRadioButton={this.props.showRadioButton}\n />\n\n {hasPaymentMethodsToBeDisplayed && (\n <Button\n classNameModifiers={['dropin-show-paymentmethods']}\n variant=\"link\"\n inline\n label=\"Other payment methods\"\n onClick={this.onShowDefaultPaymentMethodListClick}\n />\n )}\n </Fragment>\n )}\n\n {hasPaymentMethodsToBeDisplayed && showDefaultPaymentMethodList && (\n <PaymentMethodList\n isLoading={isLoading || isRedirecting}\n isDisablingPaymentMethod={this.state.isDisabling}\n paymentMethods={elements}\n instantPaymentMethods={instantPaymentElements}\n storedPaymentMethods={storedPaymentElements}\n activePaymentMethod={activePaymentMethod}\n order={this.props.order}\n orderStatus={this.state.orderStatus}\n onOrderCancel={this.onOrderCancel}\n onSelect={this.handleOnSelectPaymentMethod}\n openPaymentMethod={this.props.openPaymentMethod}\n openFirstPaymentMethod={this.props.openFirstPaymentMethod}\n openFirstStoredPaymentMethod={this.props.openFirstStoredPaymentMethod}\n onDisableStoredPaymentMethod={this.handleDisableStoredPaymentMethod}\n showRemovePaymentMethodButton={this.props.showRemovePaymentMethodButton}\n showRadioButton={this.props.showRadioButton}\n />\n )}\n </div>\n );\n }\n }\n}\n\nexport default DropinComponent;\n"],"names":["DropinComponent","Component","componentDidMount","this","prepareDropinData","componentDidUpdate","prevProps","prevState","status","type","state","activePaymentMethod","setStatus","props","onReady","closeActivePaymentMethod","setState","render","elements","fastlanePaymentElement","instantPaymentElements","storedPaymentElements","showDefaultPaymentMethodList","isLoading","isRedirecting","hasPaymentMethodsToBeDisplayed","length","h","DropinSuccessState","message","Status","Error","component","div","className","Fragment","PaymentMethodList","paymentMethods","onSelect","handleOnSelectPaymentMethod","openFirstPaymentMethod","showRadioButton","Button","classNameModifiers","variant","inline","label","onClick","onShowDefaultPaymentMethodListClick","isDisablingPaymentMethod","isDisabling","instantPaymentMethods","storedPaymentMethods","order","orderStatus","onOrderCancel","openPaymentMethod","openFirstStoredPaymentMethod","onDisableStoredPaymentMethod","handleDisableStoredPaymentMethod","showRemovePaymentMethodButton","super","args","_define_property","undefined","cachedPaymentMethods","clientKey","loadingContext","storedElementsPromises","elementsPromises","instantPaymentsPromises","fastlanePaymentElementPromise","onCreateElements","orderStatusPromise","getOrderStatus","Promise","all","then","onElementsCreated","getOnOrderCancel","setActivePaymentMethod","paymentMethod","_object_spread_props","_object_spread","_id","activate","_this_props_onSelect","_this_props","call","storedPaymentMethod","resolve","reject","storedPaymentMethodId","filter","pm","catch","_this_props_modules","event","AnalyticsInfoEvent","InfoEventType","clicked","target","UiTarget","otherPaymentMethodButton","modules","analytics","sendAnalytics","data","sanitizeOrder","amount","elementRef","handleAdvanceFlowPaymentMethodsUpdate","error","AdyenCheckoutError","session","cancelOrder","core","update","console"],"mappings":"43CAqBO,MAAMA,UAAwBC,EAcjCC,iBAAAA,GACIC,KAAKC,mBACT,CA6CAC,kBAAAA,CAAmBC,EAAWC,GACtBA,EAAUC,OAAOC,OAASN,KAAKO,MAAMF,OAAOC,MAAQN,KAAKO,MAAMC,qBAE/DR,KAAKO,MAAMC,oBAAoBC,UAAUT,KAAKO,MAAMF,OAAOC,MAGhC,UAA3BN,KAAKO,MAAMF,OAAOC,MAA8C,UAA1BF,EAAUC,OAAOC,MAAoBN,KAAKU,MAAMC,SACtFX,KAAKU,MAAMC,SAEnB,CAyCAC,wBAAAA,GACIZ,KAAKa,SAAS,CAAEL,oBAAqB,MACzC,CAiCAM,MAAAA,GACI,MAAMC,SACFA,EAAQC,uBACRA,EAAsBC,uBACtBA,EAAsBC,sBACtBA,EAAqBb,OACrBA,EAAMG,oBACNA,EAAmBW,6BACnBA,GACAnB,KAAKO,MAEHa,EAA4B,YAAhBf,EAAOC,KACnBe,EAAgC,aAAhBhB,EAAOC,KACvBgB,MAAoCP,eAAAA,EAAUQ,UAAUN,aAAAA,EAAAA,EAAwBM,UAAUL,aAAAA,EAAAA,EAAuBK,SAEvH,OAAQlB,EAAOC,MACX,IAAK,UACmCD,IAAAA,EAApC,OAAOmB,EAACC,EAAAA,CAAmBC,QAAqB,QAAZrB,EAAAA,EAAOK,aAAPL,IAAAA,OAAAA,EAAAA,EAAcqB,UAEtD,IAAK,QAC6BrB,IAAAA,EAA9B,OAAOmB,EAACG,EAAOC,MAAK,CAACF,QAAqB,QAAZrB,EAAAA,EAAOK,aAAPL,IAAAA,OAAAA,EAAAA,EAAcqB,UAEhD,IAAK,aACMrB,EAAAA,EAAP,OAAmB,QAAZA,EAAAA,EAAOK,aAAPL,IAAAA,GAAuB,QAAvBA,EAAAA,EAAcwB,iBAAdxB,IAAAA,SAAAA,EAAyBS,SAEpC,QACI,OACIU,EAACM,MAAAA,CAAIC,UAAW,kDAAkD1B,EAAOC,QACpEe,GAAiBhB,EAAOK,MAAMmB,WAAaxB,EAAOK,MAAMmB,UAAUf,SAClEM,GAAaf,EAAOK,OAASL,EAAOK,MAAMmB,WAAaxB,EAAOK,MAAMmB,UAAUf,UAE7EK,GACEK,EAACQ,OACGR,EAACS,EAAAA,CACGb,UAAWA,EACXc,eAAgBlB,EAChBR,oBAAqBA,EACrB2B,SAAUnC,KAAKoC,4BACfC,wBAAAA,EACAC,gBAAiBtC,KAAKU,MAAM4B,kBAG/BhB,GACGE,EAACe,EAAAA,CACGC,mBAAoB,CAAC,8BACrBC,QAAQ,OACRC,QAAAA,EACAC,MAAM,wBACNC,QAAS5C,KAAK6C,uCAM7BvB,GAAkCH,GAC/BK,EAACS,EAAAA,CACGb,UAAWA,GAAaC,EACxByB,yBAA0B9C,KAAKO,MAAMwC,YACrCb,eAAgBnB,EAChBiC,sBAAuB/B,EACvBgC,qBAAsB/B,EACtBV,oBAAqBA,EACrB0C,MAAOlD,KAAKU,MAAMwC,MAClBC,YAAanD,KAAKO,MAAM4C,YACxBC,cAAepD,KAAKoD,cACpBjB,SAAUnC,KAAKoC,4BACfiB,kBAAmBrD,KAAKU,MAAM2C,kBAC9BhB,uBAAwBrC,KAAKU,MAAM2B,uBACnCiB,6BAA8BtD,KAAKU,MAAM4C,6BACzCC,6BAA8BvD,KAAKwD,iCACnCC,8BAA+BzD,KAAKU,MAAM+C,8BAC1CnB,gBAAiBtC,KAAKU,MAAM4B,mBAMxD,mBA/NGoB,SAAAC,GACHC,OAAOrD,QAA8B,CACjCQ,SAAU,GACVC,uBAAwB,GACxBC,uBAAwB,GACxBC,sBAAuB,GACvBiC,YAAa,KACbJ,aAAa,EACb1C,OAAQ,CAAEC,KAAM,UAAWI,WAAOmD,GAClCrD,oBAAqB,KACrBsD,qBAAsB,CAAA,EACtB3C,8BAA8B,IAOlCyC,OAAO3D,oBAAoB,KACvB,MAAMiD,MAAEA,EAAKa,UAAEA,EAASC,eAAEA,GAAmBhE,KAAKU,OAC3CuD,EAAwBC,EAAkBC,EAAyBC,GAAiCpE,KAAKU,MAAM2D,mBAChHC,EAAqBpB,EAAQqB,EAAe,CAAER,YAAWC,kBAAkBd,GAAS,KAErFsB,QAAQC,IAAI,CAACR,EAAwBC,EAAkBC,EAAyBC,EAA+BE,IAAqBI,KACrI,EAAExD,EAAuBH,EAAUE,EAAwBD,EAAwBmC,MAC/EnD,KAAKa,SAAS,CACVsC,cACApC,WACAE,yBACAC,wBACAF,yBACAG,6BAAgE,IAAlCH,EAAuBO,SAEzDvB,KAAKS,UAAU,SAEfT,KAAKU,MAAMiE,kBAAkB,IAAI1D,KAA2BC,KAA0BH,KAAaC,MAI3GhB,KAAKoD,cAAgBpD,KAAK4E,qBAG9BhB,OAAOnD,YAAY,CAACJ,EAA8BK,EAA2B,MACzEV,KAAKa,SAAS,CAAER,OAAQ,CAAEC,KAAMD,EAAQK,aAG5CkD,EAAA5D,KAAQ6E,yBAA0BC,IAC1BA,IAAkB9E,KAAKO,MAAMC,sBAIjCR,KAAKa,SAAST,KACVI,oBAAqBsE,EACrBhB,qBAAsBiB,EAAAC,EAAA,CAAA,EAAK5E,EAAU0D,sBAAoB,CAAE,CAACgB,EAAcG,MAAM,OAGhFjF,KAAKO,MAAMuD,qBAAqBgB,EAAcG,MAC9CH,EAAcI,cAetBtB,EAAA5D,KAAQoC,8BAA8B0C,IAClC,MAAMtE,oBAAEA,GAAwBR,KAAKO,UAKjC4E,EAAAC,GAHJpF,KAAK6E,uBAAuBC,GAEvBtE,GAAuBA,EAAoByE,MAAQH,EAAcG,MAASzE,KACxD,QAAnB2E,GAAAC,EAAApF,KAAKU,OAAMyB,gBAAX,IAAAgD,GAAAA,EAAAE,KAAAD,EAAsBN,MAI9BlB,EAAA5D,KAAQwD,mCAAmC8B,IACvCtF,KAAKa,SAAS,CAAEkC,aAAa,IAE7B,IAAIyB,QAAQ,CAACe,EAASC,IAAWxF,KAAKU,MAAM6C,6BAA6B+B,EAAoB5E,MAAM+E,sBAAuBF,EAASC,IAC9Hd,KAAK,KACF1E,KAAKa,SAAST,KACVc,sBAAuBd,EAAUc,sBAAsBwE,OAAOC,GAAMA,EAAGV,MAAQK,EAAoBL,QAEvGjF,KAAKa,SAAS,CAAEkC,aAAa,MAEhC6C,MAAM,KACH5F,KAAKa,SAAS,CAAEkC,aAAa,QAIzCa,OAAiBf,sCAAsC,KAWnD,IAAAgD,EAVA7F,KAAKa,SAAS,CACVM,8BAA8B,IAGlC,MAAM2E,EAAQ,IAAIC,EAAmB,CACjCzF,KAAM0F,EAAcC,QACpBC,OAAQC,EAASC,yBACjBvE,UAAW,WAGG,QAAlBgE,EAAA7F,KAAKU,MAAM2F,eAAX,IAAAR,GAAAA,EAAoBS,UAAUC,cAAcT,KAUhDlC,OAAiBgB,mBAAmB,IAC5B5E,KAAKU,MAAM0C,cACHoD,IACJ,MAAMtD,EAAQuD,EAAcD,EAAKtD,OACjC,IAAIsB,QAAmC,CAACe,EAASC,KAC7CxF,KAAKU,MAAM0C,cAAc,CAAEF,SAAS,CAAEqC,UAASC,aAE9Cd,KAAK,EAAGgC,YAAa1G,KAAKU,MAAMiG,WAAWC,sCAAsC,KAAMF,IACvFd,MAAMiB,IACH,MAAM,IAAIC,EAAmB,gBAAiBD,MAI1D7G,KAAKU,MAAMqG,QACHP,IACCxG,KAAKU,MAAMqG,QACXC,YAAYR,GACZ9B,KAAK,IAAM1E,KAAKU,MAAMuG,KAAKC,OAAO,CAAEhE,MAAO,QAC3C0C,MAAMiB,IACHM,QAAQN,MAAMA,GACd7G,KAAKS,WAAUoG,eAAAA,EAAOnF,UAAW,YAG1C,MAGXkC,EAAA5D,KAAQoD,qBAAR"}
1
+ {"version":3,"file":"DropinComponent.js","sources":["../../../../../src/components/Dropin/components/DropinComponent.tsx"],"sourcesContent":["import { Component, Fragment, h } from 'preact';\nimport PaymentMethodList from './PaymentMethod/PaymentMethodList';\nimport Status from './status';\nimport getOrderStatus from '../../../core/Services/order-status';\nimport './DropinComponent.scss';\nimport { sanitizeOrder } from '../../internal/UIElement/utils';\nimport type { PaymentAmount } from '../../../types/global-types';\nimport AdyenCheckoutError from '../../../core/Errors/AdyenCheckoutError';\nimport Button from '../../internal/Button';\nimport type {\n DropinComponentProps,\n DropinComponentState,\n DropinStatus,\n DropinStatusProps,\n onOrderCancelData,\n onOrderCancelInternalCallback,\n PaymentMethodDisplayMode\n} from '../types';\nimport splitPaymentMethods from '../elements/splitPaymentMethods';\nimport { createAvailablePaymentsList, createUnavailablePaymentsList, type PaymentMethodDisplayModeEntry } from '../utils/paymentMethodsAnalytics';\nimport UIElement from '../../internal/UIElement';\nimport { AnalyticsInfoEvent, InfoEventType, UiTarget } from '../../../core/Analytics/events/AnalyticsInfoEvent';\nimport { DropinSuccessState } from './DropinSuccessState';\n\nexport class DropinComponent extends Component<DropinComponentProps, DropinComponentState> {\n public state: DropinComponentState = {\n elements: [],\n fastlanePaymentElement: [],\n instantPaymentElements: [],\n storedPaymentElements: [],\n orderStatus: null,\n isDisabling: false,\n status: { type: 'loading', props: undefined },\n activePaymentMethod: null,\n cachedPaymentMethods: {},\n showDefaultPaymentMethodList: true\n };\n\n componentDidMount() {\n this.prepareDropinData();\n }\n\n public prepareDropinData = () => {\n const { order, clientKey, loadingContext } = this.props;\n const [storedElementsPromises, elementsPromises, instantPaymentsPromises, fastlanePaymentElementPromise] = this.props.onCreateElements();\n const orderStatusPromise = order ? getOrderStatus({ clientKey, loadingContext }, order) : null;\n\n void Promise.all([storedElementsPromises, elementsPromises, instantPaymentsPromises, fastlanePaymentElementPromise, orderStatusPromise])\n .then(([storedPaymentElements, elements, instantPaymentElements, fastlanePaymentElement, orderStatus]) => {\n this.setState({\n orderStatus,\n elements,\n instantPaymentElements,\n storedPaymentElements,\n fastlanePaymentElement,\n showDefaultPaymentMethodList: fastlanePaymentElement.length === 0\n });\n this.setStatus('ready');\n\n this.props.onElementsCreated([...instantPaymentElements, ...storedPaymentElements, ...elements, ...fastlanePaymentElement]);\n\n this.reportPaymentMethodList({\n fastlane: fastlanePaymentElement,\n instant: instantPaymentElements,\n stored: storedPaymentElements,\n regular: elements\n });\n })\n .catch(() => {\n this.setStatus('error');\n });\n\n this.onOrderCancel = this.getOnOrderCancel();\n };\n\n /**\n * Builds and sends the payment list displayed analytics event.\n */\n private reportPaymentMethodList = (availableElementsByDisplayMode: Record<PaymentMethodDisplayMode, UIElement[]>): void => {\n try {\n const { paymentMethods, storedPaymentMethods, instantPaymentMethods, fastlanePaymentMethod } = splitPaymentMethods(\n this.props.core.paymentMethodsResponse,\n this.props.instantPaymentTypes ?? []\n );\n\n const paymentMethodDisplayModes: PaymentMethodDisplayModeEntry[] = [\n { displayMode: 'fastlane', paymentMethods: fastlanePaymentMethod ? [fastlanePaymentMethod] : [] },\n { displayMode: 'instant', paymentMethods: instantPaymentMethods },\n { displayMode: 'stored', paymentMethods: storedPaymentMethods },\n { displayMode: 'regular', paymentMethods: paymentMethods }\n ];\n\n const availablePaymentMethods = createAvailablePaymentsList(\n paymentMethodDisplayModes.map(e => e.displayMode),\n availableElementsByDisplayMode,\n this.props.core\n );\n\n const unavailablePaymentMethods = createUnavailablePaymentsList(paymentMethodDisplayModes, availableElementsByDisplayMode);\n\n const dropinPaymentListDisplayedEvent = new AnalyticsInfoEvent({\n type: InfoEventType.PaymentListDisplayed,\n component: 'dropin',\n availablePaymentMethods,\n unavailablePaymentMethods\n });\n this.props.core.modules.analytics.sendAnalytics(dropinPaymentListDisplayedEvent);\n } catch (error) {\n console.warn('Drop-in: failed to report payment method list analytics', error);\n }\n };\n\n public setStatus = (status: DropinStatus['type'], props: DropinStatusProps = {}) => {\n this.setState({ status: { type: status, props } });\n };\n\n private setActivePaymentMethod = (paymentMethod: UIElement): void => {\n if (paymentMethod === this.state.activePaymentMethod) {\n return;\n }\n\n this.setState(prevState => ({\n activePaymentMethod: paymentMethod,\n cachedPaymentMethods: { ...prevState.cachedPaymentMethods, [paymentMethod._id]: true }\n }));\n\n if (this.state.cachedPaymentMethods[paymentMethod._id]) {\n paymentMethod.activate();\n }\n };\n\n componentDidUpdate(prevProps, prevState) {\n if (prevState.status.type !== this.state.status.type && this.state.activePaymentMethod) {\n // @ts-ignore TODO: Drop-in has its own 'status' values ('custom' for ex) which differs from regular UIElementStatus. Need to investigate best way to define/use this status variable\n this.state.activePaymentMethod.setStatus(this.state.status.type);\n }\n\n if (this.state.status.type === 'ready' && prevState.status.type !== 'ready' && this.props.onReady) {\n this.props.onReady();\n }\n }\n\n private handleOnSelectPaymentMethod = paymentMethod => {\n const { activePaymentMethod } = this.state;\n\n this.setActivePaymentMethod(paymentMethod);\n\n if ((activePaymentMethod && activePaymentMethod._id !== paymentMethod._id) || !activePaymentMethod) {\n this.props.onSelect?.(paymentMethod);\n }\n };\n\n private handleDisableStoredPaymentMethod = storedPaymentMethod => {\n this.setState({ isDisabling: true });\n\n new Promise((resolve, reject) => this.props.onDisableStoredPaymentMethod(storedPaymentMethod.props.storedPaymentMethodId, resolve, reject))\n .then(() => {\n this.setState(prevState => ({\n storedPaymentElements: prevState.storedPaymentElements.filter(pm => pm._id !== storedPaymentMethod._id)\n }));\n this.setState({ isDisabling: false });\n })\n .catch(() => {\n this.setState({ isDisabling: false });\n });\n };\n\n private readonly onShowDefaultPaymentMethodListClick = () => {\n this.setState({\n showDefaultPaymentMethodList: true\n });\n\n const event = new AnalyticsInfoEvent({\n type: InfoEventType.clicked,\n target: UiTarget.otherPaymentMethodButton,\n component: 'dropin'\n });\n\n this.props.modules?.analytics.sendAnalytics(event);\n };\n\n closeActivePaymentMethod() {\n this.setState({ activePaymentMethod: null });\n }\n\n /**\n * getOnOrderCancel decides which onOrderCancel logic should be used, manual or sessions\n */\n private readonly getOnOrderCancel = (): ((data: onOrderCancelData) => void) | null => {\n if (this.props.onOrderCancel) {\n return (data: onOrderCancelData) => {\n const order = sanitizeOrder(data.order);\n new Promise<{ amount: PaymentAmount }>((resolve, reject) => {\n this.props.onOrderCancel({ order }, { resolve, reject });\n })\n .then(({ amount }) => this.props.elementRef.handleAdvanceFlowPaymentMethodsUpdate(null, amount))\n .catch(error => {\n throw new AdyenCheckoutError('NETWORK_ERROR', error);\n });\n };\n }\n if (this.props.session) {\n return (data: onOrderCancelData) =>\n void this.props.session\n .cancelOrder(data)\n .then(() => this.props.core.update({ order: null }))\n .catch(error => {\n console.error(error);\n this.setStatus(error?.message || 'error');\n });\n }\n return null;\n };\n\n private onOrderCancel: onOrderCancelInternalCallback;\n\n render() {\n const {\n elements,\n fastlanePaymentElement,\n instantPaymentElements,\n storedPaymentElements,\n status,\n activePaymentMethod,\n showDefaultPaymentMethodList\n } = this.state;\n\n const isLoading = status.type === 'loading';\n const isRedirecting = status.type === 'redirect';\n const hasPaymentMethodsToBeDisplayed = !!(elements?.length || instantPaymentElements?.length || storedPaymentElements?.length);\n\n switch (status.type) {\n case 'success':\n return <DropinSuccessState message={status.props?.message} />;\n\n case 'error':\n return <Status.Error message={status.props?.message} />;\n\n case 'custom':\n return status.props?.component?.render();\n\n default:\n return (\n <div className={`adyen-checkout__dropin adyen-checkout__dropin--${status.type}`}>\n {isRedirecting && status.props.component && status.props.component.render()}\n {isLoading && status.props && status.props.component && status.props.component.render()}\n\n {!showDefaultPaymentMethodList && (\n <Fragment>\n <PaymentMethodList\n isLoading={isLoading}\n paymentMethods={fastlanePaymentElement}\n activePaymentMethod={activePaymentMethod}\n onSelect={this.handleOnSelectPaymentMethod}\n openFirstPaymentMethod\n showRadioButton={this.props.showRadioButton}\n />\n\n {hasPaymentMethodsToBeDisplayed && (\n <Button\n classNameModifiers={['dropin-show-paymentmethods']}\n variant=\"link\"\n inline\n label=\"Other payment methods\"\n onClick={this.onShowDefaultPaymentMethodListClick}\n />\n )}\n </Fragment>\n )}\n\n {hasPaymentMethodsToBeDisplayed && showDefaultPaymentMethodList && (\n <PaymentMethodList\n isLoading={isLoading || isRedirecting}\n isDisablingPaymentMethod={this.state.isDisabling}\n paymentMethods={elements}\n instantPaymentMethods={instantPaymentElements}\n storedPaymentMethods={storedPaymentElements}\n activePaymentMethod={activePaymentMethod}\n order={this.props.order}\n orderStatus={this.state.orderStatus}\n onOrderCancel={this.onOrderCancel}\n onSelect={this.handleOnSelectPaymentMethod}\n openPaymentMethod={this.props.openPaymentMethod}\n openFirstPaymentMethod={this.props.openFirstPaymentMethod}\n openFirstStoredPaymentMethod={this.props.openFirstStoredPaymentMethod}\n onDisableStoredPaymentMethod={this.handleDisableStoredPaymentMethod}\n showRemovePaymentMethodButton={this.props.showRemovePaymentMethodButton}\n showRadioButton={this.props.showRadioButton}\n />\n )}\n </div>\n );\n }\n }\n}\n\nexport default DropinComponent;\n"],"names":["DropinComponent","Component","componentDidMount","this","prepareDropinData","componentDidUpdate","prevProps","prevState","status","type","state","activePaymentMethod","setStatus","props","onReady","closeActivePaymentMethod","setState","render","elements","fastlanePaymentElement","instantPaymentElements","storedPaymentElements","showDefaultPaymentMethodList","isLoading","isRedirecting","hasPaymentMethodsToBeDisplayed","length","h","DropinSuccessState","message","Status","Error","component","div","className","Fragment","PaymentMethodList","paymentMethods","onSelect","handleOnSelectPaymentMethod","openFirstPaymentMethod","showRadioButton","Button","classNameModifiers","variant","inline","label","onClick","onShowDefaultPaymentMethodListClick","isDisablingPaymentMethod","isDisabling","instantPaymentMethods","storedPaymentMethods","order","orderStatus","onOrderCancel","openPaymentMethod","openFirstStoredPaymentMethod","onDisableStoredPaymentMethod","handleDisableStoredPaymentMethod","showRemovePaymentMethodButton","super","args","_define_property","undefined","cachedPaymentMethods","clientKey","loadingContext","storedElementsPromises","elementsPromises","instantPaymentsPromises","fastlanePaymentElementPromise","onCreateElements","orderStatusPromise","getOrderStatus","Promise","all","then","onElementsCreated","reportPaymentMethodList","fastlane","instant","stored","regular","catch","getOnOrderCancel","availableElementsByDisplayMode","_this_props_instantPaymentTypes","fastlanePaymentMethod","splitPaymentMethods","core","paymentMethodsResponse","instantPaymentTypes","paymentMethodDisplayModes","displayMode","availablePaymentMethods","createAvailablePaymentsList","map","e","unavailablePaymentMethods","createUnavailablePaymentsList","dropinPaymentListDisplayedEvent","AnalyticsInfoEvent","InfoEventType","PaymentListDisplayed","modules","analytics","sendAnalytics","error","console","warn","setActivePaymentMethod","paymentMethod","_object_spread_props","_object_spread","_id","activate","_this_props_onSelect","_this_props","call","storedPaymentMethod","resolve","reject","storedPaymentMethodId","filter","pm","_this_props_modules","event","clicked","target","UiTarget","otherPaymentMethodButton","data","sanitizeOrder","amount","elementRef","handleAdvanceFlowPaymentMethodsUpdate","AdyenCheckoutError","session","cancelOrder","update"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{optionallyFilterUpiSubTxVariants as e}from"../elements/filters.js";function t(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function r(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t}(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function n(e,n){const{type:o,brand:p,brands:d,fundingSource:s}=e,i=null!=d?d:void 0!==p?[p]:void 0;return r(function(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{},o=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),o.forEach(function(r){t(e,r,n[r])})}return e}({paymentMethodType:o},void 0!==i&&{brands:i},void 0!==s&&{fundingSource:s}),{displayMode:n})}function o(t,r){return t.flatMap(t=>{const o="stored"===t.displayMode,p=new Set((r[t.displayMode]||[]).map(e=>o?e.props.storedPaymentMethodId:e.props.paymentMethodId));return e(t.paymentMethods).filter(e=>{const t=o?e.storedPaymentMethodId:e._id;return!p.has(t)}).map(e=>n(e,t.displayMode))})}function p(e,t,r){return e.flatMap(e=>(t[e]||[]).map(t=>{const o="stored"===e,p=o?t.props.storedPaymentMethodId:t.props.paymentMethodId;if(!p)return;const d=o?r.paymentMethodsResponse.findStoredPaymentMethod(p):r.paymentMethodsResponse.findById(p);return d?n(d,e):void 0}).filter(e=>void 0!==e))}export{p as createAvailablePaymentsList,o as createUnavailablePaymentsList};
2
+ //# sourceMappingURL=paymentMethodsAnalytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paymentMethodsAnalytics.js","sources":["../../../../../src/components/Dropin/utils/paymentMethodsAnalytics.ts"],"sourcesContent":["import { optionallyFilterUpiSubTxVariants } from '../elements/filters';\nimport type { ICore } from '../../../core/types';\nimport type UIElement from '../../internal/UIElement';\nimport type { PaymentMethod, StoredPaymentMethod } from '../../../core/ProcessResponse/PaymentMethods/PaymentMethods';\nimport type { PaymentMethodDisplayMode } from '../types';\nimport type { AnalyticsPaymentMethod } from '../../../core/Analytics/events/AnalyticsInfoEvent';\n\nexport interface PaymentMethodDisplayModeEntry {\n displayMode: PaymentMethodDisplayMode;\n paymentMethods: Array<PaymentMethod | StoredPaymentMethod>;\n}\n\n/**\n * Maps a raw /paymentMethods entry to the analytics-safe shape.\n * Allow-list only: StoredPaymentMethod carries PII (holderName, shopperEmail, …) that must never reach analytics.\n */\nfunction toAnalyticsPaymentMethod(\n paymentMethod: PaymentMethod | StoredPaymentMethod,\n displayMode: PaymentMethodDisplayMode\n): AnalyticsPaymentMethod<PaymentMethodDisplayMode> {\n const { type, brand, brands, fundingSource } = paymentMethod;\n const brandFallback = brand !== undefined ? [brand] : undefined;\n const normalizedBrands = brands ?? brandFallback;\n return {\n paymentMethodType: type,\n ...(normalizedBrands !== undefined && { brands: normalizedBrands }),\n ...(fundingSource !== undefined && { fundingSource }),\n displayMode\n };\n}\n\n/**\n * Payment methods present in the /paymentMethods response that Drop-in did not render,\n * for any reason, EXCEPT UPI sub-variants collapsed into a rendered `upi` parent.\n */\nexport function createUnavailablePaymentsList(\n displayModeEntries: PaymentMethodDisplayModeEntry[],\n elementsByDisplayMode: Record<PaymentMethodDisplayMode, UIElement[]>\n): AnalyticsPaymentMethod<PaymentMethodDisplayMode>[] {\n return displayModeEntries.flatMap(entry => {\n const isStored = entry.displayMode === 'stored';\n\n const readyIds = new Set(\n (elementsByDisplayMode[entry.displayMode] || []).map(element =>\n isStored ? element.props.storedPaymentMethodId : element.props.paymentMethodId\n )\n );\n\n return optionallyFilterUpiSubTxVariants(entry.paymentMethods)\n .filter(paymentMethod => {\n const id = isStored ? (paymentMethod as StoredPaymentMethod).storedPaymentMethodId : (paymentMethod as PaymentMethod)._id;\n return !readyIds.has(id);\n })\n .map(paymentMethod => toAnalyticsPaymentMethod(paymentMethod, entry.displayMode));\n });\n}\n\n/**\n * Builds the ordered list of ready payment methods for the Drop-in analytics event\n * preserving the ordered display mode's parameter order.\n */\nexport function createAvailablePaymentsList(\n orderedDisplayModes: PaymentMethodDisplayMode[],\n elementsByDisplayMode: Record<PaymentMethodDisplayMode, UIElement[]>,\n core: ICore\n): AnalyticsPaymentMethod<PaymentMethodDisplayMode>[] {\n return orderedDisplayModes.flatMap(displayMode =>\n (elementsByDisplayMode[displayMode] || [])\n .map(element => {\n const isStored = displayMode === 'stored';\n const id = isStored ? element.props.storedPaymentMethodId : element.props.paymentMethodId;\n if (!id) return undefined;\n\n const raw = isStored ? core.paymentMethodsResponse.findStoredPaymentMethod(id) : core.paymentMethodsResponse.findById(id);\n return raw ? toAnalyticsPaymentMethod(raw, displayMode) : undefined;\n })\n .filter((paymentMethod): paymentMethod is AnalyticsPaymentMethod<PaymentMethodDisplayMode> => paymentMethod !== undefined)\n );\n}\n"],"names":["toAnalyticsPaymentMethod","paymentMethod","displayMode","type","brand","brands","fundingSource","normalizedBrands","undefined","_object_spread_props","_object_spread","paymentMethodType","createUnavailablePaymentsList","displayModeEntries","elementsByDisplayMode","flatMap","entry","isStored","readyIds","Set","map","element","props","storedPaymentMethodId","paymentMethodId","optionallyFilterUpiSubTxVariants","paymentMethods","filter","id","_id","has","createAvailablePaymentsList","orderedDisplayModes","core","raw","paymentMethodsResponse","findStoredPaymentMethod","findById"],"mappings":"+iBAgBA,SAASA,EACLC,EACAC,GAEA,MAAMC,KAAEA,EAAIC,MAAEA,EAAKC,OAAEA,EAAMC,cAAEA,GAAkBL,EAEzCM,EAAmBF,QAAAA,OADOG,IAAVJ,EAAsB,CAACA,QAASI,EAEtD,OAAOC,oUAAAC,CAAA,CACHC,kBAAmBR,QACMK,IAArBD,GAAkC,CAAEF,OAAQE,QAC1BC,IAAlBF,GAA+B,CAAEA,kBAAc,CACnDJ,eAER,CAMO,SAASU,EACZC,EACAC,GAEA,OAAOD,EAAmBE,QAAQC,IAC9B,MAAMC,EAAiC,WAAtBD,EAAMd,YAEjBgB,EAAW,IAAIC,KAChBL,EAAsBE,EAAMd,cAAgB,IAAIkB,IAAIC,GACjDJ,EAAWI,EAAQC,MAAMC,sBAAwBF,EAAQC,MAAME,kBAIvE,OAAOC,EAAiCT,EAAMU,gBACzCC,OAAO1B,IACJ,MAAM2B,EAAKX,EAAWhB,EAAuCsB,sBAAyBtB,EAAgC4B,IACtH,OAAQX,EAASY,IAAIF,KAExBR,IAAInB,GAAiBD,EAAyBC,EAAee,EAAMd,eAEhF,CAMO,SAAS6B,EACZC,EACAlB,EACAmB,GAEA,OAAOD,EAAoBjB,QAAQb,IAC9BY,EAAsBZ,IAAgB,IAClCkB,IAAIC,IACD,MAAMJ,EAA2B,WAAhBf,EACX0B,EAAKX,EAAWI,EAAQC,MAAMC,sBAAwBF,EAAQC,MAAME,gBAC1E,IAAKI,EAAI,OAET,MAAMM,EAAMjB,EAAWgB,EAAKE,uBAAuBC,wBAAwBR,GAAMK,EAAKE,uBAAuBE,SAAST,GACtH,OAAOM,EAAMlC,EAAyBkC,EAAKhC,QAAeM,IAE7DmB,OAAQ1B,QAAuGO,IAAlBP,GAE1G"}
@@ -1,2 +1,2 @@
1
- import{httpPost as e}from"../../core/Services/http.js";import{pick as t}from"../../utils/commonUtils.js";import{THREEDS2_FINGERPRINT_SUBMIT as n}from"./constants.js";import{API_ERROR_CODE as r}from"../../core/Services/sessions/constants.js";import{AnalyticsErrorEvent as o,ErrorEventType as i,ErrorEventCode as s}from"../../core/Analytics/events/AnalyticsErrorEvent.js";function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c({data:c}){e({path:`v1/submitThreeDS2Fingerprint?token=${this.props.clientKey}`,loadingContext:this.props.loadingContext,errorLevel:"fatal",errorCode:r.submitThreeDS2Fingerprint},function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){a(e,t,n[t])})}return e}({},c)).then(e=>{var r,a,c;let l;if("completed"===e.type){const{details:t}=e;return e.details?this.onComplete({data:{details:t}}):(console.debug('Handled Error::callSubmit3DS2Fingerprint::FAILED:: no details object in a response indicating either a "frictionless" flow, or a "refused" response. resData=',e),l=new o({component:"threeDS2Fingerprint",code:s.THREEDS2_NO_DETAILS_FOR_FRICTIONLESS_OR_REFUSED,errorType:i.threeDS2,message:`${n}: no details object in a response indicating either a "frictionless" flow, or a "refused" response`}),void this.submitAnalytics(l))}if(!e.action)return console.debug('Handled Error::callSubmit3DS2Fingerprint::FAILED:: no action object in a response indicating a "challenge". resData=',e),l=new o({component:"threeDS2Fingerprint",code:s.THREEDS2_NO_ACTION_FOR_CHALLENGE,errorType:i.threeDS2,message:`${n}: no action object in a response indicating a "challenge" flow`}),void this.submitAnalytics(l);const d=null!==(r=this.props.elementRef)&&void 0!==r?r:this;return d?"threeDS2"===(null===(a=e.action)||void 0===a?void 0:a.type)?d.handleAction(e.action,t("challengeWindowSize").from(this.props)):"redirect"===(null===(c=e.action)||void 0===c?void 0:c.type)?d.handleAction(e.action):void 0:(console.debug("Handled Error::callSubmit3DS2Fingerprint::FAILED:: no actionHandler"),l=new o({component:"threeDS2Fingerprint",code:s.THREEDS2_NO_COMPONENT_FOR_ACTION,errorType:i.threeDS2,message:`${n}: no component defined to handle the action response`}),void this.submitAnalytics(l))}).catch(e=>{this.handleError(e)})}export{c as default};
1
+ import{httpPost as e}from"../../core/Services/http.js";import{pick as t}from"../../utils/commonUtils.js";import{THREEDS2_FINGERPRINT_SUBMIT as n}from"./constants.js";import{API_ERROR_CODE as r}from"../../core/Services/sessions/constants.js";import{AnalyticsErrorEvent as o,ErrorEventType as i,ErrorEventCode as s}from"../../core/Analytics/events/AnalyticsErrorEvent.js";function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c({data:c}){e({path:`v1/submitThreeDS2Fingerprint?token=${this.props.clientKey}`,loadingContext:this.props.loadingContext,errorLevel:"fatal",errorCode:r.submitThreeDS2Fingerprint},function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){a(e,t,n[t])})}return e}({},c)).then(e=>{var r,a,c;let l;if("completed"===e.type){const{details:t}=e;return e.details?this.onComplete({data:{details:t}}):(console.debug('Handled Error::callSubmit3DS2Fingerprint::FAILED:: no details object in a response indicating either a "frictionless" flow, or a "refused" response. resData=',e),l=new o({component:"threeDS2Fingerprint",code:s.THREEDS2_NO_DETAILS_FOR_FRICTIONLESS_OR_REFUSED,errorType:i.threeDS2,message:`${n}: no details object in a response indicating either a "frictionless" flow, or a "refused" response`}),void this.submitAnalytics(l))}if(!e.action)return console.debug('Handled Error::callSubmit3DS2Fingerprint::FAILED:: no action object in a response indicating a "challenge". resData=',e),l=new o({component:"threeDS2Fingerprint",code:s.THREEDS2_NO_ACTION_FOR_CHALLENGE,errorType:i.threeDS2,message:`${n}: no action object in a response indicating a "challenge" flow`}),void this.submitAnalytics(l);const d=null!==(r=this.props.elementRef)&&void 0!==r?r:this;return d?"threeDS2"===(null===(a=e.action)||void 0===a?void 0:a.type)?d.handleAction(e.action,t("challengeWindowSize","usePasskeyIFrameAttributes").from(this.props)):"redirect"===(null===(c=e.action)||void 0===c?void 0:c.type)?d.handleAction(e.action):void 0:(console.debug("Handled Error::callSubmit3DS2Fingerprint::FAILED:: no actionHandler"),l=new o({component:"threeDS2Fingerprint",code:s.THREEDS2_NO_COMPONENT_FOR_ACTION,errorType:i.threeDS2,message:`${n}: no component defined to handle the action response`}),void this.submitAnalytics(l))}).catch(e=>{this.handleError(e)})}export{c as default};
2
2
  //# sourceMappingURL=callSubmit3DS2Fingerprint.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"callSubmit3DS2Fingerprint.js","sources":["../../../../src/components/ThreeDS2/callSubmit3DS2Fingerprint.ts"],"sourcesContent":["import { httpPost } from '../../core/Services/http';\nimport { pick } from '../../utils/commonUtils';\nimport { ThreeDS2FingerprintResponse } from './types';\nimport AdyenCheckoutError from '../../core/Errors/AdyenCheckoutError';\nimport { THREEDS2_FINGERPRINT_SUBMIT } from './constants';\nimport { API_ERROR_CODE } from '../../core/Services/sessions/constants';\nimport { AbstractAnalyticsEvent } from '../../core/Analytics/events/AbstractAnalyticsEvent';\nimport { AnalyticsErrorEvent, ErrorEventCode, ErrorEventType } from '../../core/Analytics/events/AnalyticsErrorEvent';\n\n/**\n * ThreeDS2DeviceFingerprint, onComplete, calls a new, internal, endpoint which\n * behaves like the /details endpoint but doesn't require the same credentials\n */\nexport default function callSubmit3DS2Fingerprint({ data }): void {\n httpPost<ThreeDS2FingerprintResponse>(\n {\n path: `v1/submitThreeDS2Fingerprint?token=${this.props.clientKey}`,\n loadingContext: this.props.loadingContext,\n errorLevel: 'fatal',\n errorCode: API_ERROR_CODE.submitThreeDS2Fingerprint\n },\n {\n ...data\n }\n )\n .then(resData => {\n let event: AbstractAnalyticsEvent;\n\n /**\n * Frictionless (no challenge) flow OR \"refused\" flow\n */\n if (resData.type === 'completed') {\n const { details } = resData;\n\n if (!resData.details) {\n console.debug(\n 'Handled Error::callSubmit3DS2Fingerprint::FAILED:: no details object in a response indicating either a \"frictionless\" flow, or a \"refused\" response. resData=',\n resData\n );\n\n event = new AnalyticsErrorEvent({\n component: 'threeDS2Fingerprint',\n code: ErrorEventCode.THREEDS2_NO_DETAILS_FOR_FRICTIONLESS_OR_REFUSED,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_FINGERPRINT_SUBMIT}: no details object in a response indicating either a \"frictionless\" flow, or a \"refused\" response`\n });\n\n this.submitAnalytics(event);\n\n return;\n }\n\n return this.onComplete({ data: { details } });\n }\n\n /**\n * If we don't have a type: \"completed\", then we expect an action, because we must be in a Challenge or Redirect flow\n */\n if (!resData.action) {\n console.debug(\n 'Handled Error::callSubmit3DS2Fingerprint::FAILED:: no action object in a response indicating a \"challenge\". resData=',\n resData\n );\n\n event = new AnalyticsErrorEvent({\n component: 'threeDS2Fingerprint',\n code: ErrorEventCode.THREEDS2_NO_ACTION_FOR_CHALLENGE,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_FINGERPRINT_SUBMIT}: no action object in a response indicating a \"challenge\" flow`\n });\n this.submitAnalytics(event);\n\n return;\n }\n\n // elementRef exists when the fingerprint component is created from the Dropin\n const actionHandler = this.props.elementRef ?? this;\n\n /**\n * We have an action but do we have a way to handle it?\n * TODO - check logs: do we ever *not* have an actionHandler?\n */\n if (!actionHandler) {\n console.debug('Handled Error::callSubmit3DS2Fingerprint::FAILED:: no actionHandler');\n\n event = new AnalyticsErrorEvent({\n component: 'threeDS2Fingerprint',\n code: ErrorEventCode.THREEDS2_NO_COMPONENT_FOR_ACTION,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_FINGERPRINT_SUBMIT}: no component defined to handle the action response`\n });\n\n this.submitAnalytics(event);\n\n return;\n }\n\n /**\n * Challenge flow\n */\n if (resData.action?.type === 'threeDS2') {\n // Ensure challengeWindowSize is propagated if there was a (merchant defined) handleAction call proceeding this one that had it set as an option\n return actionHandler.handleAction(resData.action, pick('challengeWindowSize').from(this.props));\n }\n\n /**\n * Redirect flow (usecase: we thought we could do 3DS2 but it turns out we can't)\n * TODO - check logs: does this ever happen, anymore?\n */\n if (resData.action?.type === 'redirect') {\n return actionHandler.handleAction(resData.action);\n }\n })\n .catch((error: AdyenCheckoutError) => {\n this.handleError(error);\n });\n}\n"],"names":["callSubmit3DS2Fingerprint","data","httpPost","path","this","props","clientKey","loadingContext","errorLevel","errorCode","API_ERROR_CODE","submitThreeDS2Fingerprint","_object_spread","then","resData","_this_props_elementRef","event","type","details","onComplete","console","debug","AnalyticsErrorEvent","component","code","ErrorEventCode","THREEDS2_NO_DETAILS_FOR_FRICTIONLESS_OR_REFUSED","errorType","ErrorEventType","threeDS2","message","THREEDS2_FINGERPRINT_SUBMIT","submitAnalytics","action","THREEDS2_NO_ACTION_FOR_CHALLENGE","actionHandler","elementRef","handleAction","pick","from","THREEDS2_NO_COMPONENT_FOR_ACTION","catch","error","handleError"],"mappings":"0eAae,SAASA,GAA0BC,KAAEA,IAChDC,EACI,CACIC,KAAM,sCAAsCC,KAAKC,MAAMC,YACvDC,eAAgBH,KAAKC,MAAME,eAC3BC,WAAY,QACZC,UAAWC,EAAeC,6VAE9BC,CAAA,CAAA,EACOX,IAGNY,KAAKC,IAmDoB,IAAAC,EAwBlBD,EASAA,EAnFJ,IAAIE,EAKJ,GAAqB,cAAjBF,EAAQG,KAAsB,CAC9B,MAAMC,QAAEA,GAAYJ,EAEpB,OAAKA,EAAQI,QAkBNd,KAAKe,WAAW,CAAElB,KAAM,CAAEiB,cAjB7BE,QAAQC,MACJ,gKACAP,GAGJE,EAAQ,IAAIM,EAAoB,CAC5BC,UAAW,sBACXC,KAAMC,EAAeC,gDACrBC,UAAWC,EAAeC,SAC1BC,QAAS,GAAGC,6GAGhB3B,KAAK4B,gBAAgBhB,GAM7B,CAKA,IAAKF,EAAQmB,OAcT,OAbAb,QAAQC,MACJ,uHACAP,GAGJE,EAAQ,IAAIM,EAAoB,CAC5BC,UAAW,sBACXC,KAAMC,EAAeS,iCACrBP,UAAWC,EAAeC,SAC1BC,QAAS,GAAGC,yEAEhB3B,KAAK4B,gBAAgBhB,GAMzB,MAAMmB,EAAqC,QAArBpB,EAAAX,KAAKC,MAAM+B,sBAAXrB,EAAAA,EAAyBX,KAM/C,OAAK+B,EAkBwB,sBAAzBrB,EAAAA,EAAQmB,cAARnB,IAAAA,OAAAA,EAAAA,EAAgBG,MAETkB,EAAcE,aAAavB,EAAQmB,OAAQK,EAAK,uBAAuBC,KAAKnC,KAAKC,QAO/D,sBAAzBS,EAAAA,EAAQmB,cAARnB,IAAAA,OAAAA,EAAAA,EAAgBG,MACTkB,EAAcE,aAAavB,EAAQmB,aAD9C,GA1BIb,QAAQC,MAAM,uEAEdL,EAAQ,IAAIM,EAAoB,CAC5BC,UAAW,sBACXC,KAAMC,EAAee,iCACrBb,UAAWC,EAAeC,SAC1BC,QAAS,GAAGC,+DAGhB3B,KAAK4B,gBAAgBhB,MAqB5ByB,MAAOC,IACJtC,KAAKuC,YAAYD,IAE7B"}
1
+ {"version":3,"file":"callSubmit3DS2Fingerprint.js","sources":["../../../../src/components/ThreeDS2/callSubmit3DS2Fingerprint.ts"],"sourcesContent":["import { httpPost } from '../../core/Services/http';\nimport { pick } from '../../utils/commonUtils';\nimport { ThreeDS2FingerprintResponse } from './types';\nimport AdyenCheckoutError from '../../core/Errors/AdyenCheckoutError';\nimport { THREEDS2_FINGERPRINT_SUBMIT } from './constants';\nimport { API_ERROR_CODE } from '../../core/Services/sessions/constants';\nimport { AbstractAnalyticsEvent } from '../../core/Analytics/events/AbstractAnalyticsEvent';\nimport { AnalyticsErrorEvent, ErrorEventCode, ErrorEventType } from '../../core/Analytics/events/AnalyticsErrorEvent';\n\n/**\n * ThreeDS2DeviceFingerprint, onComplete, calls a new, internal, endpoint which\n * behaves like the /details endpoint but doesn't require the same credentials\n */\nexport default function callSubmit3DS2Fingerprint({ data }): void {\n httpPost<ThreeDS2FingerprintResponse>(\n {\n path: `v1/submitThreeDS2Fingerprint?token=${this.props.clientKey}`,\n loadingContext: this.props.loadingContext,\n errorLevel: 'fatal',\n errorCode: API_ERROR_CODE.submitThreeDS2Fingerprint\n },\n {\n ...data\n }\n )\n .then(resData => {\n let event: AbstractAnalyticsEvent;\n\n /**\n * Frictionless (no challenge) flow OR \"refused\" flow\n */\n if (resData.type === 'completed') {\n const { details } = resData;\n\n if (!resData.details) {\n console.debug(\n 'Handled Error::callSubmit3DS2Fingerprint::FAILED:: no details object in a response indicating either a \"frictionless\" flow, or a \"refused\" response. resData=',\n resData\n );\n\n event = new AnalyticsErrorEvent({\n component: 'threeDS2Fingerprint',\n code: ErrorEventCode.THREEDS2_NO_DETAILS_FOR_FRICTIONLESS_OR_REFUSED,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_FINGERPRINT_SUBMIT}: no details object in a response indicating either a \"frictionless\" flow, or a \"refused\" response`\n });\n\n this.submitAnalytics(event);\n\n return;\n }\n\n return this.onComplete({ data: { details } });\n }\n\n /**\n * If we don't have a type: \"completed\", then we expect an action, because we must be in a Challenge or Redirect flow\n */\n if (!resData.action) {\n console.debug(\n 'Handled Error::callSubmit3DS2Fingerprint::FAILED:: no action object in a response indicating a \"challenge\". resData=',\n resData\n );\n\n event = new AnalyticsErrorEvent({\n component: 'threeDS2Fingerprint',\n code: ErrorEventCode.THREEDS2_NO_ACTION_FOR_CHALLENGE,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_FINGERPRINT_SUBMIT}: no action object in a response indicating a \"challenge\" flow`\n });\n this.submitAnalytics(event);\n\n return;\n }\n\n // elementRef exists when the fingerprint component is created from the Dropin\n const actionHandler = this.props.elementRef ?? this;\n\n /**\n * We have an action but do we have a way to handle it?\n * TODO - check logs: do we ever *not* have an actionHandler?\n */\n if (!actionHandler) {\n console.debug('Handled Error::callSubmit3DS2Fingerprint::FAILED:: no actionHandler');\n\n event = new AnalyticsErrorEvent({\n component: 'threeDS2Fingerprint',\n code: ErrorEventCode.THREEDS2_NO_COMPONENT_FOR_ACTION,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_FINGERPRINT_SUBMIT}: no component defined to handle the action response`\n });\n\n this.submitAnalytics(event);\n\n return;\n }\n\n /**\n * Challenge flow\n */\n if (resData.action?.type === 'threeDS2') {\n // Ensure challengeWindowSize is propagated if there was a (merchant defined) handleAction call proceeding this one that had it set as an option\n return actionHandler.handleAction(resData.action, pick('challengeWindowSize', 'usePasskeyIFrameAttributes').from(this.props));\n }\n\n /**\n * Redirect flow (usecase: we thought we could do 3DS2 but it turns out we can't)\n * TODO - check logs: does this ever happen, anymore?\n */\n if (resData.action?.type === 'redirect') {\n return actionHandler.handleAction(resData.action);\n }\n })\n .catch((error: AdyenCheckoutError) => {\n this.handleError(error);\n });\n}\n"],"names":["callSubmit3DS2Fingerprint","data","httpPost","path","this","props","clientKey","loadingContext","errorLevel","errorCode","API_ERROR_CODE","submitThreeDS2Fingerprint","_object_spread","then","resData","_this_props_elementRef","event","type","details","onComplete","console","debug","AnalyticsErrorEvent","component","code","ErrorEventCode","THREEDS2_NO_DETAILS_FOR_FRICTIONLESS_OR_REFUSED","errorType","ErrorEventType","threeDS2","message","THREEDS2_FINGERPRINT_SUBMIT","submitAnalytics","action","THREEDS2_NO_ACTION_FOR_CHALLENGE","actionHandler","elementRef","handleAction","pick","from","THREEDS2_NO_COMPONENT_FOR_ACTION","catch","error","handleError"],"mappings":"0eAae,SAASA,GAA0BC,KAAEA,IAChDC,EACI,CACIC,KAAM,sCAAsCC,KAAKC,MAAMC,YACvDC,eAAgBH,KAAKC,MAAME,eAC3BC,WAAY,QACZC,UAAWC,EAAeC,6VAE9BC,CAAA,CAAA,EACOX,IAGNY,KAAKC,IAmDoB,IAAAC,EAwBlBD,EASAA,EAnFJ,IAAIE,EAKJ,GAAqB,cAAjBF,EAAQG,KAAsB,CAC9B,MAAMC,QAAEA,GAAYJ,EAEpB,OAAKA,EAAQI,QAkBNd,KAAKe,WAAW,CAAElB,KAAM,CAAEiB,cAjB7BE,QAAQC,MACJ,gKACAP,GAGJE,EAAQ,IAAIM,EAAoB,CAC5BC,UAAW,sBACXC,KAAMC,EAAeC,gDACrBC,UAAWC,EAAeC,SAC1BC,QAAS,GAAGC,6GAGhB3B,KAAK4B,gBAAgBhB,GAM7B,CAKA,IAAKF,EAAQmB,OAcT,OAbAb,QAAQC,MACJ,uHACAP,GAGJE,EAAQ,IAAIM,EAAoB,CAC5BC,UAAW,sBACXC,KAAMC,EAAeS,iCACrBP,UAAWC,EAAeC,SAC1BC,QAAS,GAAGC,yEAEhB3B,KAAK4B,gBAAgBhB,GAMzB,MAAMmB,EAAqC,QAArBpB,EAAAX,KAAKC,MAAM+B,sBAAXrB,EAAAA,EAAyBX,KAM/C,OAAK+B,EAkBwB,sBAAzBrB,EAAAA,EAAQmB,cAARnB,IAAAA,OAAAA,EAAAA,EAAgBG,MAETkB,EAAcE,aAAavB,EAAQmB,OAAQK,EAAK,sBAAuB,8BAA8BC,KAAKnC,KAAKC,QAO7F,sBAAzBS,EAAAA,EAAQmB,cAARnB,IAAAA,OAAAA,EAAAA,EAAgBG,MACTkB,EAAcE,aAAavB,EAAQmB,aAD9C,GA1BIb,QAAQC,MAAM,uEAEdL,EAAQ,IAAIM,EAAoB,CAC5BC,UAAW,sBACXC,KAAMC,EAAee,iCACrBb,UAAWC,EAAeC,SAC1BC,QAAS,GAAGC,+DAGhB3B,KAAK4B,gBAAgBhB,MAqB5ByB,MAAOC,IACJtC,KAAKuC,YAAYD,IAE7B"}
@@ -1,2 +1,2 @@
1
- import{Component as e,createElement as s}from"../../../../external/preact/dist/preact.js";import t from"../../../../_virtual/index.js";import r from"../../../internal/IFrame/Iframe.js";import a from"../../../internal/Spinner/Spinner.js";import n from"../Form/ThreeDS2Form.js";import i from"../../../../utils/get-process-message-handler.js";import{encodeBase64URL as o}from"../utils.js";import l from"../../../../utils/promiseTimeout.js";import{CHALLENGE_TIMEOUT as m,CHALLENGE_TIMEOUT_REJECT_OBJECT as c,THREEDS2_NUM as h}from"../../constants.js";function p(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}const d="threeDSIframe";class g extends e{get3DS2ChallengePromise(){return new Promise((e,s)=>{this.processMessageHandler=i(this.props.postMessageDomain,e,s,"challengeResult"),window.addEventListener("message",this.processMessageHandler)})}componentDidMount(){this.challengePromise=l(m,this.get3DS2ChallengePromise(),c),this.challengePromise.promise.then(e=>{window.removeEventListener("message",this.processMessageHandler),this.props.onCompleteChallenge(e)}).catch(e=>{window.removeEventListener("message",this.processMessageHandler),this.props.onErrorChallenge(e)})}componentWillUnmount(){this.challengePromise&&this.challengePromise.cancel(),window.removeEventListener("message",this.processMessageHandler)}render({acsURL:e,cReqData:i,iframeSizeArr:o,onFormSubmit:l},{base64URLencodedData:m,status:c}){const[h,p]=o;return s("div",{className:t(["adyen-checkout__threeds2__challenge",`adyen-checkout__threeds2__challenge--${i.challengeWindowSize}`])},"iframeLoaded"!==c&&s(a,null),s(r,{name:d,width:h,height:p,callback:this.iframeCallback}),s(n,{name:"cReqForm",action:e,target:d,inputName:"creq",inputValue:null!=m?m:"",onFormSubmit:l}))}constructor(e){super(e),p(this,"processMessageHandler",void 0),p(this,"challengePromise",void 0),p(this,"iframeCallback",()=>{var e,s;(this.setState({status:"iframeLoaded"}),"init"===this.state.status)&&(null===(e=(s=this.props).onActionHandled)||void 0===e||e.call(s,{componentType:"3DS2Challenge",actionDescription:`${h} challenge iframe loaded`}))});const s=JSON.stringify(this.props.cReqData),t=o(s);this.state={base64URLencodedData:t,status:"init"}}}export{g as default};
1
+ import{Component as e,createElement as s}from"../../../../external/preact/dist/preact.js";import t from"../../../../_virtual/index.js";import r from"../../../internal/IFrame/Iframe.js";import a from"../../../internal/Spinner/Spinner.js";import n from"../Form/ThreeDS2Form.js";import i from"../../../../utils/get-process-message-handler.js";import{encodeBase64URL as o}from"../utils.js";import l from"../../../../utils/promiseTimeout.js";import{CHALLENGE_TIMEOUT as m,PASSKEY_VISA_IFRAME_SANDBOX as c,PASSKEY_VISA_IFRAME_ALLOW as h,PASSKEY_3DS2_IFRAME_ALLOW as p,CHALLENGE_TIMEOUT_REJECT_OBJECT as d,THREEDS2_NUM as g}from"../../constants.js";function u(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}const f="threeDSIframe";class v extends e{get3DS2ChallengePromise(){return new Promise((e,s)=>{this.processMessageHandler=i(this.props.postMessageDomain,e,s,"challengeResult"),window.addEventListener("message",this.processMessageHandler)})}componentDidMount(){this.challengePromise=l(m,this.get3DS2ChallengePromise(),d),this.challengePromise.promise.then(e=>{window.removeEventListener("message",this.processMessageHandler),this.props.onCompleteChallenge(e)}).catch(e=>{window.removeEventListener("message",this.processMessageHandler),this.props.onErrorChallenge(e)})}componentWillUnmount(){this.challengePromise&&this.challengePromise.cancel(),window.removeEventListener("message",this.processMessageHandler)}render({acsURL:e,cReqData:i,iframeSizeArr:o,onFormSubmit:l,usePasskeyIFrameAttributes:m},{base64URLencodedData:d,status:g}){const[u,v]=o;return s("div",{className:t(["adyen-checkout__threeds2__challenge",`adyen-checkout__threeds2__challenge--${i.challengeWindowSize}`])},"iframeLoaded"!==g&&s(a,null),s(r,{name:f,width:u,height:v,callback:this.iframeCallback,allow:m?h:p,sandbox:m?c:void 0}),s(n,{name:"cReqForm",action:e,target:f,inputName:"creq",inputValue:null!=d?d:"",onFormSubmit:l}))}constructor(e){super(e),u(this,"processMessageHandler",void 0),u(this,"challengePromise",void 0),u(this,"iframeCallback",()=>{var e,s;(this.setState({status:"iframeLoaded"}),"init"===this.state.status)&&(null===(e=(s=this.props).onActionHandled)||void 0===e||e.call(s,{componentType:"3DS2Challenge",actionDescription:`${g} challenge iframe loaded`}))});const s=JSON.stringify(this.props.cReqData),t=o(s);this.state={base64URLencodedData:t,status:"init"}}}export{v as default};
2
2
  //# sourceMappingURL=DoChallenge3DS2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DoChallenge3DS2.js","sources":["../../../../../../src/components/ThreeDS2/components/Challenge/DoChallenge3DS2.tsx"],"sourcesContent":["import { Component, h } from 'preact';\nimport classNames from 'classnames';\nimport Iframe from '../../../internal/IFrame';\nimport Spinner from '../../../internal/Spinner';\nimport ThreeDS2Form from '../Form';\nimport getProcessMessageHandler from '../../../../utils/get-process-message-handler';\nimport { encodeBase64URL } from '../utils';\nimport promiseTimeout from '../../../../utils/promiseTimeout';\nimport { CHALLENGE_TIMEOUT, CHALLENGE_TIMEOUT_REJECT_OBJECT, THREEDS2_NUM } from '../../constants';\nimport { DoChallenge3DS2Props, DoChallenge3DS2State } from './types';\nimport { ThreeDS2FlowObject } from '../../types';\n\nconst iframeName = 'threeDSIframe';\n\nclass DoChallenge3DS2 extends Component<DoChallenge3DS2Props, DoChallenge3DS2State> {\n private processMessageHandler: (event: Pick<MessageEvent, 'origin' | 'data'>) => string | boolean;\n private challengePromise: { promise: Promise<ThreeDS2FlowObject>; cancel: () => void };\n\n constructor(props: DoChallenge3DS2Props) {\n super(props);\n\n /**\n * Create and Base64Url encode a JSON object containing the serverTransactionID & threeDSMethodNotificationURL\n */\n const jsonStr = JSON.stringify(this.props.cReqData);\n const base64URLencodedData = encodeBase64URL(jsonStr);\n this.state = { base64URLencodedData, status: 'init' };\n }\n\n private iframeCallback = () => {\n this.setState({ status: 'iframeLoaded' });\n // On Test - actually calls-back 3 times: once for challenge screen, once again as challenge.html reloads after the challenge is submitted, and once for redirect to threeDSNotificationURL.\n // But for the purposes of calling the merchant defined onActionHandled callback - we only want to do it once\n if (this.state.status === 'init') {\n this.props.onActionHandled?.({ componentType: '3DS2Challenge', actionDescription: `${THREEDS2_NUM} challenge iframe loaded` });\n }\n };\n\n private get3DS2ChallengePromise(): Promise<ThreeDS2FlowObject> {\n return new Promise((resolve, reject) => {\n /**\n * Listen for postMessage responses from the notification url\n */\n this.processMessageHandler = getProcessMessageHandler(this.props.postMessageDomain, resolve, reject, 'challengeResult');\n\n window.addEventListener('message', this.processMessageHandler);\n });\n }\n\n componentDidMount() {\n // Render challenge\n this.challengePromise = promiseTimeout(CHALLENGE_TIMEOUT, this.get3DS2ChallengePromise(), CHALLENGE_TIMEOUT_REJECT_OBJECT);\n this.challengePromise.promise\n .then((resolveObject: ThreeDS2FlowObject) => {\n window.removeEventListener('message', this.processMessageHandler);\n this.props.onCompleteChallenge(resolveObject);\n })\n /** Catch, for when Challenge times-out */\n .catch((rejectObject: ThreeDS2FlowObject) => {\n window.removeEventListener('message', this.processMessageHandler);\n this.props.onErrorChallenge(rejectObject);\n });\n }\n\n componentWillUnmount() {\n if (this.challengePromise) this.challengePromise.cancel();\n window.removeEventListener('message', this.processMessageHandler);\n }\n\n render({ acsURL, cReqData, iframeSizeArr, onFormSubmit }: DoChallenge3DS2Props, { base64URLencodedData, status }: DoChallenge3DS2State) {\n const [width, height] = iframeSizeArr;\n\n return (\n <div\n className={classNames([\n 'adyen-checkout__threeds2__challenge',\n `adyen-checkout__threeds2__challenge--${cReqData.challengeWindowSize}`\n ])}\n >\n {status !== 'iframeLoaded' && <Spinner />}\n\n <Iframe name={iframeName} width={width} height={height} callback={this.iframeCallback} />\n <ThreeDS2Form\n name={'cReqForm'}\n action={acsURL}\n target={iframeName}\n inputName={'creq'}\n inputValue={base64URLencodedData ?? ''}\n onFormSubmit={onFormSubmit}\n />\n </div>\n );\n }\n}\n\nexport default DoChallenge3DS2;\n"],"names":["iframeName","DoChallenge3DS2","Component","get3DS2ChallengePromise","Promise","resolve","reject","this","processMessageHandler","getProcessMessageHandler","props","postMessageDomain","window","addEventListener","componentDidMount","challengePromise","promiseTimeout","CHALLENGE_TIMEOUT","CHALLENGE_TIMEOUT_REJECT_OBJECT","promise","then","resolveObject","removeEventListener","onCompleteChallenge","catch","rejectObject","onErrorChallenge","componentWillUnmount","cancel","render","acsURL","cReqData","iframeSizeArr","onFormSubmit","base64URLencodedData","status","width","height","h","div","className","classNames","challengeWindowSize","Spinner","Iframe","name","callback","iframeCallback","ThreeDS2Form","action","target","inputName","inputValue","constructor","super","_define_property","_this_props_onActionHandled","_this_props","setState","state","onActionHandled","call","componentType","actionDescription","THREEDS2_NUM","jsonStr","JSON","stringify","encodeBase64URL"],"mappings":"2pBAYA,MAAMA,EAAa,gBAEnB,MAAMC,UAAwBC,EAwBlBC,uBAAAA,GACJ,OAAO,IAAIC,QAAQ,CAACC,EAASC,KAIzBC,KAAKC,sBAAwBC,EAAyBF,KAAKG,MAAMC,kBAAmBN,EAASC,EAAQ,mBAErGM,OAAOC,iBAAiB,UAAWN,KAAKC,wBAEhD,CAEAM,iBAAAA,GAEIP,KAAKQ,iBAAmBC,EAAeC,EAAmBV,KAAKJ,0BAA2Be,GAC1FX,KAAKQ,iBAAiBI,QACjBC,KAAMC,IACHT,OAAOU,oBAAoB,UAAWf,KAAKC,uBAC3CD,KAAKG,MAAMa,oBAAoBF,KAGlCG,MAAOC,IACJb,OAAOU,oBAAoB,UAAWf,KAAKC,uBAC3CD,KAAKG,MAAMgB,iBAAiBD,IAExC,CAEAE,oBAAAA,GACQpB,KAAKQ,kBAAkBR,KAAKQ,iBAAiBa,SACjDhB,OAAOU,oBAAoB,UAAWf,KAAKC,sBAC/C,CAEAqB,MAAAA,EAAOC,OAAEA,EAAMC,SAAEA,EAAQC,cAAEA,EAAaC,aAAEA,IAAsCC,qBAAEA,EAAoBC,OAAEA,IACpG,MAAOC,EAAOC,GAAUL,EAExB,OACIM,EAACC,MAAAA,CACGC,UAAWC,EAAW,CAClB,sCACA,wCAAwCV,EAASW,yBAGzC,iBAAXP,GAA6BG,EAACK,EAAAA,MAE/BL,EAACM,EAAAA,CAAOC,KAAM7C,EAAYoC,MAAOA,EAAOC,OAAQA,EAAQS,SAAUvC,KAAKwC,iBACvET,EAACU,EAAAA,CACGH,KAAM,WACNI,OAAQnB,EACRoB,OAAQlD,EACRmD,UAAW,OACXC,WAAYlB,QAAAA,EAAwB,GACpCD,aAAcA,IAI9B,CA1EA,WAAAoB,CAAY3C,GACR4C,MAAM5C,GAJV6C,EAAAhD,KAAQC,6BAAR,GACA+C,EAAAhD,KAAQQ,wBAAR,GAaAwC,EAAAhD,KAAQwC,iBAAiB,SAKjBS,EAAAC,GAJJlD,KAAKmD,SAAS,CAAEvB,OAAQ,iBAGE,SAAtB5B,KAAKoD,MAAMxB,UACe,QAA1BqB,GAAAC,EAAAlD,KAAKG,OAAMkD,uBAAX,IAAAJ,GAAAA,EAAAK,KAAAJ,EAA6B,CAAEK,cAAe,gBAAiBC,kBAAmB,GAAGC,iCAVzF,MAAMC,EAAUC,KAAKC,UAAU5D,KAAKG,MAAMqB,UACpCG,EAAuBkC,EAAgBH,GAC7C1D,KAAKoD,MAAQ,CAAEzB,uBAAsBC,OAAQ,OACjD"}
1
+ {"version":3,"file":"DoChallenge3DS2.js","sources":["../../../../../../src/components/ThreeDS2/components/Challenge/DoChallenge3DS2.tsx"],"sourcesContent":["import { Component, h } from 'preact';\nimport classNames from 'classnames';\nimport Iframe from '../../../internal/IFrame';\nimport Spinner from '../../../internal/Spinner';\nimport ThreeDS2Form from '../Form';\nimport getProcessMessageHandler from '../../../../utils/get-process-message-handler';\nimport { encodeBase64URL } from '../utils';\nimport promiseTimeout from '../../../../utils/promiseTimeout';\nimport { CHALLENGE_TIMEOUT, CHALLENGE_TIMEOUT_REJECT_OBJECT, THREEDS2_NUM, PASSKEY_VISA_IFRAME_ALLOW, PASSKEY_3DS2_IFRAME_ALLOW, PASSKEY_VISA_IFRAME_SANDBOX } from '../../constants';\nimport { DoChallenge3DS2Props, DoChallenge3DS2State } from './types';\nimport { ThreeDS2FlowObject } from '../../types';\n\nconst iframeName = 'threeDSIframe';\n\nclass DoChallenge3DS2 extends Component<DoChallenge3DS2Props, DoChallenge3DS2State> {\n private processMessageHandler: (event: Pick<MessageEvent, 'origin' | 'data'>) => string | boolean;\n private challengePromise: { promise: Promise<ThreeDS2FlowObject>; cancel: () => void };\n\n constructor(props: DoChallenge3DS2Props) {\n super(props);\n\n /**\n * Create and Base64Url encode a JSON object containing the serverTransactionID & threeDSMethodNotificationURL\n */\n const jsonStr = JSON.stringify(this.props.cReqData);\n const base64URLencodedData = encodeBase64URL(jsonStr);\n this.state = { base64URLencodedData, status: 'init' };\n }\n\n private iframeCallback = () => {\n this.setState({ status: 'iframeLoaded' });\n // On Test - actually calls-back 3 times: once for challenge screen, once again as challenge.html reloads after the challenge is submitted, and once for redirect to threeDSNotificationURL.\n // But for the purposes of calling the merchant defined onActionHandled callback - we only want to do it once\n if (this.state.status === 'init') {\n this.props.onActionHandled?.({ componentType: '3DS2Challenge', actionDescription: `${THREEDS2_NUM} challenge iframe loaded` });\n }\n };\n\n private get3DS2ChallengePromise(): Promise<ThreeDS2FlowObject> {\n return new Promise((resolve, reject) => {\n /**\n * Listen for postMessage responses from the notification url\n */\n this.processMessageHandler = getProcessMessageHandler(this.props.postMessageDomain, resolve, reject, 'challengeResult');\n\n window.addEventListener('message', this.processMessageHandler);\n });\n }\n\n componentDidMount() {\n // Render challenge\n this.challengePromise = promiseTimeout(CHALLENGE_TIMEOUT, this.get3DS2ChallengePromise(), CHALLENGE_TIMEOUT_REJECT_OBJECT);\n this.challengePromise.promise\n .then((resolveObject: ThreeDS2FlowObject) => {\n window.removeEventListener('message', this.processMessageHandler);\n this.props.onCompleteChallenge(resolveObject);\n })\n /** Catch, for when Challenge times-out */\n .catch((rejectObject: ThreeDS2FlowObject) => {\n window.removeEventListener('message', this.processMessageHandler);\n this.props.onErrorChallenge(rejectObject);\n });\n }\n\n componentWillUnmount() {\n if (this.challengePromise) this.challengePromise.cancel();\n window.removeEventListener('message', this.processMessageHandler);\n }\n\n render({ acsURL, cReqData, iframeSizeArr, onFormSubmit, usePasskeyIFrameAttributes }: DoChallenge3DS2Props, { base64URLencodedData, status }: DoChallenge3DS2State) {\n const [width, height] = iframeSizeArr;\n\n return (\n <div\n className={classNames([\n 'adyen-checkout__threeds2__challenge',\n `adyen-checkout__threeds2__challenge--${cReqData.challengeWindowSize}`\n ])}\n >\n {status !== 'iframeLoaded' && <Spinner />}\n\n <Iframe\n name={iframeName}\n width={width}\n height={height}\n callback={this.iframeCallback}\n allow={usePasskeyIFrameAttributes ? PASSKEY_VISA_IFRAME_ALLOW : PASSKEY_3DS2_IFRAME_ALLOW}\n sandbox={usePasskeyIFrameAttributes ? PASSKEY_VISA_IFRAME_SANDBOX : undefined}\n />\n <ThreeDS2Form\n name={'cReqForm'}\n action={acsURL}\n target={iframeName}\n inputName={'creq'}\n inputValue={base64URLencodedData ?? ''}\n onFormSubmit={onFormSubmit}\n />\n </div>\n );\n }\n}\n\nexport default DoChallenge3DS2;\n"],"names":["iframeName","DoChallenge3DS2","Component","get3DS2ChallengePromise","Promise","resolve","reject","this","processMessageHandler","getProcessMessageHandler","props","postMessageDomain","window","addEventListener","componentDidMount","challengePromise","promiseTimeout","CHALLENGE_TIMEOUT","CHALLENGE_TIMEOUT_REJECT_OBJECT","promise","then","resolveObject","removeEventListener","onCompleteChallenge","catch","rejectObject","onErrorChallenge","componentWillUnmount","cancel","render","acsURL","cReqData","iframeSizeArr","onFormSubmit","usePasskeyIFrameAttributes","base64URLencodedData","status","width","height","h","div","className","classNames","challengeWindowSize","Spinner","Iframe","name","callback","iframeCallback","allow","PASSKEY_VISA_IFRAME_ALLOW","PASSKEY_3DS2_IFRAME_ALLOW","sandbox","PASSKEY_VISA_IFRAME_SANDBOX","undefined","ThreeDS2Form","action","target","inputName","inputValue","constructor","super","_define_property","_this_props_onActionHandled","_this_props","setState","state","onActionHandled","call","componentType","actionDescription","THREEDS2_NUM","jsonStr","JSON","stringify","encodeBase64URL"],"mappings":"0vBAYA,MAAMA,EAAa,gBAEnB,MAAMC,UAAwBC,EAwBlBC,uBAAAA,GACJ,OAAO,IAAIC,QAAQ,CAACC,EAASC,KAIzBC,KAAKC,sBAAwBC,EAAyBF,KAAKG,MAAMC,kBAAmBN,EAASC,EAAQ,mBAErGM,OAAOC,iBAAiB,UAAWN,KAAKC,wBAEhD,CAEAM,iBAAAA,GAEIP,KAAKQ,iBAAmBC,EAAeC,EAAmBV,KAAKJ,0BAA2Be,GAC1FX,KAAKQ,iBAAiBI,QACjBC,KAAMC,IACHT,OAAOU,oBAAoB,UAAWf,KAAKC,uBAC3CD,KAAKG,MAAMa,oBAAoBF,KAGlCG,MAAOC,IACJb,OAAOU,oBAAoB,UAAWf,KAAKC,uBAC3CD,KAAKG,MAAMgB,iBAAiBD,IAExC,CAEAE,oBAAAA,GACQpB,KAAKQ,kBAAkBR,KAAKQ,iBAAiBa,SACjDhB,OAAOU,oBAAoB,UAAWf,KAAKC,sBAC/C,CAEAqB,MAAAA,EAAOC,OAAEA,EAAMC,SAAEA,EAAQC,cAAEA,EAAaC,aAAEA,EAAYC,2BAAEA,IAAoDC,qBAAEA,EAAoBC,OAAEA,IAChI,MAAOC,EAAOC,GAAUN,EAExB,OACIO,EAACC,MAAAA,CACGC,UAAWC,EAAW,CAClB,sCACA,wCAAwCX,EAASY,yBAGzC,iBAAXP,GAA6BG,EAACK,EAAAA,MAE/BL,EAACM,EAAAA,CACGC,KAAM9C,EACNqC,MAAOA,EACPC,OAAQA,EACRS,SAAUxC,KAAKyC,eACfC,MAAOf,EAA6BgB,EAA4BC,EAChEC,QAASlB,EAA6BmB,OAA8BC,IAExEf,EAACgB,EAAAA,CACGT,KAAM,WACNU,OAAQ1B,EACR2B,OAAQzD,EACR0D,UAAW,OACXC,WAAYxB,QAAAA,EAAwB,GACpCF,aAAcA,IAI9B,CAjFA,WAAA2B,CAAYlD,GACRmD,MAAMnD,GAJVoD,EAAAvD,KAAQC,6BAAR,GACAsD,EAAAvD,KAAQQ,wBAAR,GAaA+C,EAAAvD,KAAQyC,iBAAiB,SAKjBe,EAAAC,GAJJzD,KAAK0D,SAAS,CAAE7B,OAAQ,iBAGE,SAAtB7B,KAAK2D,MAAM9B,UACe,QAA1B2B,GAAAC,EAAAzD,KAAKG,OAAMyD,uBAAX,IAAAJ,GAAAA,EAAAK,KAAAJ,EAA6B,CAAEK,cAAe,gBAAiBC,kBAAmB,GAAGC,iCAVzF,MAAMC,EAAUC,KAAKC,UAAUnE,KAAKG,MAAMqB,UACpCI,EAAuBwC,EAAgBH,GAC7CjE,KAAK2D,MAAQ,CAAE/B,uBAAsBC,OAAQ,OACjD"}
@@ -1,2 +1,2 @@
1
- import{Component as e,createElement as r}from"../../../../external/preact/dist/preact.js";import t from"./DoChallenge3DS2.js";import{isErrorObject as o,createChallengeResolveData as s,prepareChallengeData as n}from"../utils.js";import i from"../../../internal/Img/Img.js";import{hasOwnProperty as a}from"../../../../utils/hasOwnProperty.js";import l from"../../../../core/Context/useImage.js";import p,{ERROR as c}from"../../../../core/Errors/AdyenCheckoutError.js";import{THREEDS2_CHALLENGE_ERROR as h,MISSING_TOKEN_IN_ACTION_MSG as u,THREEDS2_NUM as m,THREEDS2_CHALLENGE as g}from"../../constants.js";import{isValidHttpUrl as S}from"../../../../utils/isValidURL.js";import{AnalyticsLogEvent as d,LogEventSubtype as D,LogEventType as E}from"../../../../core/Analytics/events/AnalyticsLogEvent.js";import{ErrorEventCode as f,AnalyticsErrorEvent as y,ErrorEventType as _}from"../../../../core/Analytics/events/AnalyticsErrorEvent.js";function b(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function O(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{},o=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),o.forEach(function(r){b(e,r,t[r])})}return e}function T(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r.push.apply(r,t)}return r}(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}),e}class I extends e{componentDidMount(){if(!o(this.state.challengeData)){var e,r;const t="test"===this.props.environment&&(null===(r=this.props._environmentUrls)||void 0===r||null===(e=r.api)||void 0===e?void 0:e.includes("http://localhost:8080")),{acsURL:o,postMessageDomain:s}=this.state.challengeData,n=S(o,t),i=S(s,t);if(!n||!i){const e=n?f.THREEDS2_CHALLENGE_TOKEN_IS_MISSING_THREEDSNOTIFICATIONURL:f.THREEDS2_TOKEN_IS_MISSING_ACSURL,r=n?"threeDSNotificationURL":"acsURL";this.setError({errorInfo:`${e}: ${this.props.i18n.get("err.gen.9102")}`},!0);const t=new y({component:this.props.type,code:e,errorType:_.threeDS2,message:`${h}: Decoded token is missing a valid ${r} property`});return this.props.onSubmitAnalytics(t),void console.debug(`### PrepareChallenge3DS2::exiting:: no valid ${r}.${i?"":` postMessageDomain=${s}`}`)}const{acsTransID:a,messageVersion:l,threeDSServerTransID:p}=this.state.challengeData.cReqData;if(!a||!l||!p){this.setError({errorInfo:`${f.THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS}: ${this.props.i18n.get("err.gen.9102")}`},!0);const e=new y({component:this.props.type,code:f.THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS,errorType:_.threeDS2,message:`${h}: Decoded token is missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)`});return this.props.onSubmitAnalytics(e),void console.debug("### PrepareChallenge3DS2::exiting:: missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)")}this.setState({status:"performingChallenge"})}else{const e=this.state.challengeData.error,r=e.includes(u)?f.THREEDS2_ACTION_IS_MISSING_TOKEN:f.THREEDS2_TOKEN_DECODE_OR_PARSING_FAILED;this.setError({errorInfo:`${r}: ${this.props.i18n.get("err.gen.9102")}`},!0);const t=new y({component:this.props.type,code:r,errorType:_.threeDS2,message:`${h}: ${e}`});this.props.onSubmitAnalytics(t),console.debug("### PrepareChallenge3DS2::exiting:: no challengeData")}}setStatusComplete(e,r=null){this.setState({status:"complete"},()=>{const t=s(this.props.dataKey,e.transStatus,this.props.paymentData);let o;r&&console.debug("### PrepareChallenge3DS2::errorCodeObject::",r);const n=r||e;if(n.errorCode){const e={code:"timeout"===n.errorCode?f.THREEDS2_TIMEOUT:f.THREEDS2_NO_TRANSSTATUS,errorType:_.threeDS2};o=new y(O({component:this.props.type,message:n.message},e)),this.props.onSubmitAnalytics(o)}let i;switch(null==e?void 0:e.transStatus){case"Y":i="success";break;case"N":i="failed";break;case"U":i=r?"timeout":"cancelled"}(null==e?void 0:e.errorCode)&&(i="noTransStatus"),o=new d({component:this.props.type,type:E.threeDS2,subType:D.challengeCompleted,message:`${m} challenge has completed`,result:i}),this.props.onSubmitAnalytics(o),this.props.onComplete(t)})}setError(e,r){this.setState({status:"error",errorInfo:e.errorInfo}),r&&this.props.onError(new p(c,e.errorInfo,{cause:e.errorObj}))}render(e,{challengeData:o}){const s=o,n=l();return"performingChallenge"===this.state.status?r(t,T(O({onCompleteChallenge:e=>{let r=null;if(a(e.result,"errorCode")&&e.result.errorCode.length&&(r={errorCode:e.result.errorCode,message:`${h}: ${e.result.errorDescription?e.result.errorDescription:"no transStatus could be retrieved"}`},this.props.isMDFlow&&this.props.onError(new p(c,`${h}: ${e.result.errorDescription?e.result.errorDescription:"no transStatus could be retrieved"}`,{cause:e.result.errorCode}))),!e.result){this.setError({errorInfo:`${h}: ${this.props.i18n.get("3ds.chal.805",{values:{result:'"result"'}})}`,errorObj:e},!0);const r=new y({component:this.props.type,code:f.THREEDS2_CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP,errorType:_.threeDS2,message:`${h}: challenge resolved without a "result" object`});return this.props.onSubmitAnalytics(r),void console.debug('### PrepareChallenge3DS2::exiting:: challenge resolved without a "result" object')}this.setStatusComplete(e.result,r)},onErrorChallenge:e=>{if(a(e,"errorCode")){const r={errorCode:e.errorCode,message:`${g}: ${e.errorCode}`};return this.props.isMDFlow&&this.props.onError(new p(c,`${h}: '3DS2 challenge timed out'`,{cause:e.errorCode})),void this.setStatusComplete(e.result,r)}}},s),{onActionHandled:this.props.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:n({imageFolder:"components/"})("error"),alt:""}),r("div",{className:"adyen-checkout__status__text"},this.state.errorInfo?this.state.errorInfo:this.props.i18n.get("error.message.unknown"))):null}constructor(e){if(super(e),b(this,"onFormSubmit",e=>{const r=new d({component:this.props.type,type:E.threeDS2,subType:D.challengeDataSentWeb,message:e});this.props.onSubmitAnalytics(r)}),this.props.token){const e=n({token:this.props.token,size:this.props.challengeWindowSize||this.props.size});this.state={status:"init",challengeData:e}}else this.state={challengeData:{success:!1,error:u}},console.debug(`${h}: ${u}`)}}b(I,"defaultProps",{onComplete:()=>{},onError:()=>{},isMDFlow:!1});export{I as default};
1
+ import{Component as e,createElement as r}from"../../../../external/preact/dist/preact.js";import t from"./DoChallenge3DS2.js";import{isErrorObject as s,createChallengeResolveData as o,prepareChallengeData as n}from"../utils.js";import i from"../../../internal/Img/Img.js";import{hasOwnProperty as a}from"../../../../utils/hasOwnProperty.js";import l from"../../../../core/Context/useImage.js";import p,{ERROR as c}from"../../../../core/Errors/AdyenCheckoutError.js";import{THREEDS2_CHALLENGE_ERROR as u,MISSING_TOKEN_IN_ACTION_MSG as h,THREEDS2_NUM as m,THREEDS2_CHALLENGE as g}from"../../constants.js";import{isValidHttpUrl as S}from"../../../../utils/isValidURL.js";import{AnalyticsLogEvent as d,LogEventSubtype as D,LogEventType as E}from"../../../../core/Analytics/events/AnalyticsLogEvent.js";import{ErrorEventCode as y,AnalyticsErrorEvent as f,ErrorEventType as b}from"../../../../core/Analytics/events/AnalyticsErrorEvent.js";function _(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function O(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{},s=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.forEach(function(r){_(e,r,t[r])})}return e}function I(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r.push.apply(r,t)}return r}(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}),e}class T extends e{componentDidMount(){if(!s(this.state.challengeData)){var e,r;const t="test"===this.props.environment&&(null===(r=this.props._environmentUrls)||void 0===r||null===(e=r.api)||void 0===e?void 0:e.includes("http://localhost:8080")),{acsURL:s,postMessageDomain:o}=this.state.challengeData,n=S(s,t),i=S(o,t);if(!n||!i){const e=n?y.THREEDS2_CHALLENGE_TOKEN_IS_MISSING_THREEDSNOTIFICATIONURL:y.THREEDS2_TOKEN_IS_MISSING_ACSURL,r=n?"threeDSNotificationURL":"acsURL";this.setError({errorInfo:`${e}: ${this.props.i18n.get("err.gen.9102")}`},!0);const t=new f({component:this.props.type,code:e,errorType:b.threeDS2,message:`${u}: Decoded token is missing a valid ${r} property`});return this.props.onSubmitAnalytics(t),void console.debug(`### PrepareChallenge3DS2::exiting:: no valid ${r}.${i?"":` postMessageDomain=${o}`}`)}const{acsTransID:a,messageVersion:l,threeDSServerTransID:p}=this.state.challengeData.cReqData;if(!a||!l||!p){this.setError({errorInfo:`${y.THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS}: ${this.props.i18n.get("err.gen.9102")}`},!0);const e=new f({component:this.props.type,code:y.THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS,errorType:b.threeDS2,message:`${u}: Decoded token is missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)`});return this.props.onSubmitAnalytics(e),void console.debug("### PrepareChallenge3DS2::exiting:: missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)")}this.setState({status:"performingChallenge"})}else{const e=this.state.challengeData.error,r=e.includes(h)?y.THREEDS2_ACTION_IS_MISSING_TOKEN:y.THREEDS2_TOKEN_DECODE_OR_PARSING_FAILED;this.setError({errorInfo:`${r}: ${this.props.i18n.get("err.gen.9102")}`},!0);const t=new f({component:this.props.type,code:r,errorType:b.threeDS2,message:`${u}: ${e}`});this.props.onSubmitAnalytics(t),console.debug("### PrepareChallenge3DS2::exiting:: no challengeData")}}setStatusComplete(e,r=null){this.setState({status:"complete"},()=>{const t=o(this.props.dataKey,e.transStatus,this.props.paymentData);let s;r&&console.debug("### PrepareChallenge3DS2::errorCodeObject::",r);const n=r||e;if(n.errorCode){const e={code:"timeout"===n.errorCode?y.THREEDS2_TIMEOUT:y.THREEDS2_NO_TRANSSTATUS,errorType:b.threeDS2};s=new f(O({component:this.props.type,message:n.message},e)),this.props.onSubmitAnalytics(s)}let i;switch(null==e?void 0:e.transStatus){case"Y":i="success";break;case"N":i="failed";break;case"U":i=r?"timeout":"cancelled"}(null==e?void 0:e.errorCode)&&(i="noTransStatus"),s=new d({component:this.props.type,type:E.threeDS2,subType:D.challengeCompleted,message:`${m} challenge has completed`,result:i}),this.props.onSubmitAnalytics(s),this.props.onComplete(t)})}setError(e,r){this.setState({status:"error",errorInfo:e.errorInfo}),r&&this.props.onError(new p(c,e.errorInfo,{cause:e.errorObj}))}render(e,{challengeData:s}){const o=s,n=l();return"performingChallenge"===this.state.status?r(t,I(O({onCompleteChallenge:e=>{let r=null;if(a(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 p(c,`${u}: ${e.result.errorDescription?e.result.errorDescription:"no transStatus could be retrieved"}`,{cause:e.result.errorCode}))),!e.result){this.setError({errorInfo:`${u}: ${this.props.i18n.get("3ds.chal.805",{values:{result:'"result"'}})}`,errorObj:e},!0);const r=new f({component:this.props.type,code:y.THREEDS2_CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP,errorType:b.threeDS2,message:`${u}: challenge resolved without a "result" object`});return this.props.onSubmitAnalytics(r),void console.debug('### PrepareChallenge3DS2::exiting:: challenge resolved without a "result" object')}this.setStatusComplete(e.result,r)},onErrorChallenge:e=>{if(a(e,"errorCode")){const r={errorCode:e.errorCode,message:`${g}: ${e.errorCode}`};return this.props.isMDFlow&&this.props.onError(new p(c,`${u}: '3DS2 challenge timed out'`,{cause:e.errorCode})),void this.setStatusComplete(e.result,r)}}},o),{onActionHandled:this.props.onActionHandled,onFormSubmit:this.onFormSubmit,usePasskeyIFrameAttributes:this.props.usePasskeyIFrameAttributes})):"error"===this.state.status?r("div",{className:"adyen-checkout__threeds2-challenge-error"},r(i,{className:"adyen-checkout__status__icon adyen-checkout__status__icon--error",src:n({imageFolder:"components/"})("error"),alt:""}),r("div",{className:"adyen-checkout__status__text"},this.state.errorInfo?this.state.errorInfo:this.props.i18n.get("error.message.unknown"))):null}constructor(e){if(super(e),_(this,"onFormSubmit",e=>{const r=new d({component:this.props.type,type:E.threeDS2,subType:D.challengeDataSentWeb,message:e});this.props.onSubmitAnalytics(r)}),this.props.token){const e=n({token:this.props.token,size:this.props.challengeWindowSize||this.props.size});this.state={status:"init",challengeData:e}}else this.state={challengeData:{success:!1,error:h}},console.debug(`${u}: ${h}`)}}_(T,"defaultProps",{onComplete:()=>{},onError:()=>{},isMDFlow:!1});export{T as default};
2
2
  //# sourceMappingURL=PrepareChallenge3DS2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PrepareChallenge3DS2.js","sources":["../../../../../../src/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.tsx"],"sourcesContent":["import { Component, h } from 'preact';\nimport DoChallenge3DS2 from './DoChallenge3DS2';\nimport { createChallengeResolveData, prepareChallengeData, isErrorObject } from '../utils';\nimport { PrepareChallenge3DS2Props, PrepareChallenge3DS2State, StatusErrorInfoObject } from './types';\nimport { ChallengeData, ResultObject, ThreeDS2FlowObject, ErrorCodeObject, ChallengeResolveData } from '../../types';\nimport '../../ThreeDS2.scss';\nimport Img from '../../../internal/Img';\nimport './challenge.scss';\nimport { hasOwnProperty } from '../../../../utils/hasOwnProperty';\nimport useImage from '../../../../core/Context/useImage';\nimport AdyenCheckoutError, { ERROR } from '../../../../core/Errors/AdyenCheckoutError';\nimport { THREEDS2_CHALLENGE, THREEDS2_CHALLENGE_ERROR, THREEDS2_NUM, MISSING_TOKEN_IN_ACTION_MSG } from '../../constants';\nimport { isValidHttpUrl } from '../../../../utils/isValidURL';\nimport { ErrorObject } from '../../../../core/Errors/types';\nimport { AnalyticsLogEvent, LogEventSubtype, LogEventType } from '../../../../core/Analytics/events/AnalyticsLogEvent';\nimport { AnalyticsErrorEvent, ErrorEventCode, ErrorEventType } from '../../../../core/Analytics/events/AnalyticsErrorEvent';\nimport { AbstractAnalyticsEvent } from '../../../../core/Analytics/events/AbstractAnalyticsEvent';\n\nclass PrepareChallenge3DS2 extends Component<PrepareChallenge3DS2Props, PrepareChallenge3DS2State> {\n public static readonly defaultProps = {\n onComplete: () => {},\n onError: () => {},\n isMDFlow: false\n };\n\n constructor(props) {\n super(props);\n\n if (this.props.token) {\n const challengeData: ChallengeData | ErrorObject = prepareChallengeData({\n token: this.props.token,\n size: this.props.challengeWindowSize || this.props.size // TODO confirm that this.props.size is legacy and can be removed\n });\n\n this.state = {\n status: 'init',\n challengeData\n };\n } else {\n // Will be picked up in componentDidMount\n this.state = { challengeData: { success: false, error: MISSING_TOKEN_IN_ACTION_MSG } };\n\n console.debug(`${THREEDS2_CHALLENGE_ERROR}: ${MISSING_TOKEN_IN_ACTION_MSG}`);\n }\n }\n\n public onFormSubmit = (msg: string) => {\n const event = new AnalyticsLogEvent({\n component: this.props.type,\n type: LogEventType.threeDS2,\n subType: LogEventSubtype.challengeDataSentWeb,\n message: msg\n });\n\n this.props.onSubmitAnalytics(event);\n };\n\n componentDidMount() {\n const hasChallengeData = !isErrorObject(this.state.challengeData);\n\n if (hasChallengeData) {\n const shouldAllowHttpDomains =\n /** Allow http urls if in development and testing against localhost:8080 */\n (process.env.NODE_ENV === 'development' && process.env.__CLIENT_ENV__?.includes('localhost:8080')) ||\n /**\n * Allows the checkoutshopper demo on localhost:8080 to work -\n * requires a configuration in localhost of environment: 'test', _environmentUrls: {api: 'http://localhost:8080/'}\n */\n (this.props.environment === 'test' && this.props._environmentUrls?.api?.includes('http://localhost:8080'));\n\n /**\n * Check the structure of the created challengeData\n */\n const { acsURL, postMessageDomain } = this.state.challengeData as ChallengeData;\n const hasValidAcsURL = isValidHttpUrl(acsURL, shouldAllowHttpDomains);\n const hasValidPostMessageDomain = isValidHttpUrl(postMessageDomain, shouldAllowHttpDomains);\n\n // Only render component if we have a valid acsURL & postMessageDomain.\n // i.e. a url to load into the iframe, and the domain that we expect the iframe to be sending messages back from\n if (!hasValidAcsURL || !hasValidPostMessageDomain) {\n const errorCode = !hasValidAcsURL\n ? ErrorEventCode.THREEDS2_TOKEN_IS_MISSING_ACSURL\n : ErrorEventCode.THREEDS2_CHALLENGE_TOKEN_IS_MISSING_THREEDSNOTIFICATIONURL;\n const missingProperty = !hasValidAcsURL ? 'acsURL' : 'threeDSNotificationURL';\n\n // Set UI error & call onError callback\n this.setError(\n {\n errorInfo: `${errorCode}: ${this.props.i18n.get('err.gen.9102')}` //\n },\n true\n );\n\n // Send error to analytics endpoint // TODO - check logs to see if this *ever* happens\n const event = new AnalyticsErrorEvent({\n component: this.props.type,\n code: errorCode,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_CHALLENGE_ERROR}: Decoded token is missing a valid ${missingProperty} property`\n });\n this.props.onSubmitAnalytics(event);\n\n console.debug(\n `### PrepareChallenge3DS2::exiting:: no valid ${missingProperty}.${!hasValidPostMessageDomain ? ` postMessageDomain=${postMessageDomain}` : ''}`\n );\n return;\n }\n\n const { acsTransID, messageVersion, threeDSServerTransID } = (this.state.challengeData as ChallengeData).cReqData;\n\n // Only render component if we have a acsTransID, messageVersion & threeDSServerTransID\n if (!acsTransID || !messageVersion || !threeDSServerTransID) {\n // Set UI error & call onError callback\n this.setError(\n {\n errorInfo: `${ErrorEventCode.THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS}: ${this.props.i18n.get('err.gen.9102')}`\n },\n true\n );\n\n // Send error to analytics endpoint // TODO - check logs to see if this *ever* happens\n const event = new AnalyticsErrorEvent({\n component: this.props.type,\n code: ErrorEventCode.THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_CHALLENGE_ERROR}: Decoded token is missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)`\n });\n this.props.onSubmitAnalytics(event);\n\n console.debug(\n '### PrepareChallenge3DS2::exiting:: missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)'\n );\n return;\n }\n\n // Proceed to allow component to render\n this.setState({ status: 'performingChallenge' });\n //\n } else {\n const errorMsg: string = (this.state.challengeData as ErrorObject).error;\n\n const errorCode = errorMsg.includes(MISSING_TOKEN_IN_ACTION_MSG)\n ? ErrorEventCode.THREEDS2_ACTION_IS_MISSING_TOKEN\n : ErrorEventCode.THREEDS2_TOKEN_DECODE_OR_PARSING_FAILED;\n\n // Set UI error & call onError callback\n this.setError(\n {\n errorInfo: `${errorCode}: ${this.props.i18n.get('err.gen.9102')}`\n // errorObj: this.state.challengeData // TODO Decide if we want to expose this data\n },\n true\n );\n\n // Send error to analytics endpoint // TODO - check logs to see if the base64 decoding errors *ever* happen\n const event = new AnalyticsErrorEvent({\n component: this.props.type,\n code: errorCode,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_CHALLENGE_ERROR}: ${errorMsg}` // can be: 'Missing \"token\" property from threeDS2 action', 'not base64', 'malformed URI sequence' or 'Could not JSON parse token'\n });\n\n this.props.onSubmitAnalytics(event);\n\n console.debug('### PrepareChallenge3DS2::exiting:: no challengeData');\n }\n }\n\n setStatusComplete(resultObj: ResultObject, errorCodeObject: ErrorCodeObject = null) {\n this.setState({ status: 'complete' }, () => {\n const data: ChallengeResolveData = createChallengeResolveData(this.props.dataKey, resultObj.transStatus, this.props.paymentData);\n\n if (errorCodeObject) {\n console.debug('### PrepareChallenge3DS2::errorCodeObject::', errorCodeObject);\n }\n\n let event: AbstractAnalyticsEvent;\n\n /** Are we in an \"error\" i.e. timeout or no transStatus, scenario? If so, submit analytics about it */\n const finalResObject = errorCodeObject ? errorCodeObject : resultObj;\n if (finalResObject.errorCode) {\n const errorTypeAndCode = {\n code: finalResObject.errorCode === 'timeout' ? ErrorEventCode.THREEDS2_TIMEOUT : ErrorEventCode.THREEDS2_NO_TRANSSTATUS,\n errorType: ErrorEventType.threeDS2\n };\n\n // Challenge process has timed out,\n // or, It's an error reported by the backend 'cos no transStatus could be retrieved // TODO - check logs to see if this *ever* happens\n\n event = new AnalyticsErrorEvent({\n component: this.props.type,\n message: (finalResObject as ErrorCodeObject).message,\n ...errorTypeAndCode\n });\n\n // Send error to analytics endpoint\n this.props.onSubmitAnalytics(event);\n }\n\n /** Calculate \"result\" for analytics */\n let result: string;\n\n switch (resultObj?.transStatus) {\n case 'Y':\n result = 'success';\n break;\n case 'N':\n result = 'failed';\n break;\n case 'U':\n result = !errorCodeObject ? 'cancelled' : 'timeout';\n break;\n default:\n }\n if (resultObj?.errorCode) {\n result = 'noTransStatus';\n }\n\n /** Create log object - the process is completed, one way or another */\n\n event = new AnalyticsLogEvent({\n component: this.props.type,\n type: LogEventType.threeDS2,\n subType: LogEventSubtype.challengeCompleted,\n message: `${THREEDS2_NUM} challenge has completed`,\n result\n });\n\n // Send log to analytics endpoint\n this.props.onSubmitAnalytics(event);\n\n /**\n * Equals call to onAdditionalDetails (except for in 3DS2InMDFlow)\n */\n this.props.onComplete(data);\n });\n }\n\n /**\n * Display error in the UI,\n * and, optionally, decide whether to send any of these errors to the merchant defined onError callback\n *\n * @param errorInfoObj -\n * @param isFatal -\n */\n setError(errorInfoObj: StatusErrorInfoObject, isFatal: boolean) {\n this.setState({ status: 'error', errorInfo: errorInfoObj.errorInfo });\n\n // Decide whether to call this.props.onError\n if (isFatal) {\n this.props.onError(new AdyenCheckoutError(ERROR, errorInfoObj.errorInfo, { cause: errorInfoObj.errorObj }));\n }\n }\n\n render(_, { challengeData: stateChallengeData }: PrepareChallenge3DS2State) {\n const challengeData = stateChallengeData as ChallengeData;\n const getImage = useImage();\n if (this.state.status === 'performingChallenge') {\n return (\n <DoChallenge3DS2\n onCompleteChallenge={(challenge: ThreeDS2FlowObject) => {\n let errorCodeObject: ErrorCodeObject = null;\n\n // Challenge has resulted in an error (no transStatus could be retrieved) - but we still treat this as a valid scenario\n if (hasOwnProperty(challenge.result, 'errorCode') && challenge.result.errorCode.length) {\n // Tell the merchant there's been an error\n errorCodeObject = {\n errorCode: challenge.result.errorCode,\n message: `${THREEDS2_CHALLENGE_ERROR}: ${\n challenge.result.errorDescription ? challenge.result.errorDescription : 'no transStatus could be retrieved'\n }`\n };\n\n /**\n * NOTE: we can now use this.props.isMDFlow to decide if we want to send any of these errors to the onError handler\n * - this is problematic in the regular flow since merchants tend to treat any calls to their onError handler as 'fatal',\n * but in the MDFlow we control what the onError handler does.\n */\n if (this.props.isMDFlow) {\n this.props.onError(\n new AdyenCheckoutError(\n ERROR,\n `${THREEDS2_CHALLENGE_ERROR}: ${\n challenge.result.errorDescription\n ? challenge.result.errorDescription\n : 'no transStatus could be retrieved'\n }`,\n { cause: challenge.result.errorCode }\n )\n );\n }\n }\n\n /**\n * An object has been returned, parsed & accepted as legit (according to the rules in getProcessMessageHandler),\n * but the result prop on that object is missing\n */\n if (!challenge.result) {\n this.setError(\n {\n errorInfo: `${THREEDS2_CHALLENGE_ERROR}: ${this.props.i18n.get('3ds.chal.805', {\n values: { result: '\"result\"' }\n })}`,\n errorObj: challenge as unknown as ErrorObject\n },\n true\n );\n\n // Send error to analytics endpoint\n const event = new AnalyticsErrorEvent({\n component: this.props.type,\n code: ErrorEventCode.THREEDS2_CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_CHALLENGE_ERROR}: challenge resolved without a \"result\" object`\n });\n\n this.props.onSubmitAnalytics(event);\n\n console.debug('### PrepareChallenge3DS2::exiting:: challenge resolved without a \"result\" object');\n\n return;\n }\n\n // Proceed with call to onAdditionalDetails (except for in 3DS2InMDFlow)\n this.setStatusComplete(challenge.result, errorCodeObject);\n }}\n onErrorChallenge={(challenge: ThreeDS2FlowObject) => {\n /**\n * Called when challenge times-out (which is still a valid scenario)...\n */\n if (hasOwnProperty(challenge, 'errorCode')) {\n const timeoutObject: ErrorCodeObject = {\n errorCode: challenge.errorCode,\n message: `${THREEDS2_CHALLENGE}: ${challenge.errorCode}`\n };\n\n // see comment in onCompleteChallenge code block\n if (this.props.isMDFlow) {\n this.props.onError(\n new AdyenCheckoutError(ERROR, `${THREEDS2_CHALLENGE_ERROR}: '3DS2 challenge timed out'`, {\n cause: challenge.errorCode\n })\n );\n }\n\n this.setStatusComplete(challenge.result, timeoutObject);\n return;\n }\n }}\n {...challengeData}\n onActionHandled={this.props.onActionHandled}\n onFormSubmit={this.onFormSubmit}\n />\n );\n }\n\n if (this.state.status === 'error') {\n return (\n <div className=\"adyen-checkout__threeds2-challenge-error\">\n <Img\n className=\"adyen-checkout__status__icon adyen-checkout__status__icon--error\"\n src={getImage({\n imageFolder: 'components/'\n })('error')}\n alt={''}\n />\n <div className=\"adyen-checkout__status__text\">\n {this.state.errorInfo ? this.state.errorInfo : this.props.i18n.get('error.message.unknown')}\n </div>\n </div>\n );\n }\n\n return null;\n }\n}\n\nexport default PrepareChallenge3DS2;\n"],"names":["PrepareChallenge3DS2","Component","componentDidMount","isErrorObject","this","state","challengeData","process","_this_props__environmentUrls_api","_this_props__environmentUrls","shouldAllowHttpDomains","props","environment","_environmentUrls","api","includes","acsURL","postMessageDomain","hasValidAcsURL","isValidHttpUrl","hasValidPostMessageDomain","errorCode","ErrorEventCode","THREEDS2_CHALLENGE_TOKEN_IS_MISSING_THREEDSNOTIFICATIONURL","THREEDS2_TOKEN_IS_MISSING_ACSURL","missingProperty","setError","errorInfo","i18n","get","event","AnalyticsErrorEvent","component","type","code","errorType","ErrorEventType","threeDS2","message","THREEDS2_CHALLENGE_ERROR","onSubmitAnalytics","console","debug","acsTransID","messageVersion","threeDSServerTransID","cReqData","THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS","setState","status","errorMsg","error","MISSING_TOKEN_IN_ACTION_MSG","THREEDS2_ACTION_IS_MISSING_TOKEN","THREEDS2_TOKEN_DECODE_OR_PARSING_FAILED","setStatusComplete","resultObj","errorCodeObject","data","createChallengeResolveData","dataKey","transStatus","paymentData","finalResObject","errorTypeAndCode","THREEDS2_TIMEOUT","THREEDS2_NO_TRANSSTATUS","_object_spread","result","AnalyticsLogEvent","LogEventType","subType","LogEventSubtype","challengeCompleted","THREEDS2_NUM","onComplete","errorInfoObj","isFatal","onError","AdyenCheckoutError","ERROR","cause","errorObj","render","_","stateChallengeData","getImage","useImage","h","DoChallenge3DS2","onCompleteChallenge","challenge","hasOwnProperty","length","errorDescription","isMDFlow","values","THREEDS2_CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP","onErrorChallenge","timeoutObject","THREEDS2_CHALLENGE","onActionHandled","onFormSubmit","div","className","Img","src","imageFolder","alt","constructor","super","_define_property","msg","challengeDataSentWeb","token","prepareChallengeData","size","challengeWindowSize","success","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"PrepareChallenge3DS2.js","sources":["../../../../../../src/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.tsx"],"sourcesContent":["import { Component, h } from 'preact';\nimport DoChallenge3DS2 from './DoChallenge3DS2';\nimport { createChallengeResolveData, prepareChallengeData, isErrorObject } from '../utils';\nimport { PrepareChallenge3DS2Props, PrepareChallenge3DS2State, StatusErrorInfoObject } from './types';\nimport { ChallengeData, ResultObject, ThreeDS2FlowObject, ErrorCodeObject, ChallengeResolveData } from '../../types';\nimport '../../ThreeDS2.scss';\nimport Img from '../../../internal/Img';\nimport './challenge.scss';\nimport { hasOwnProperty } from '../../../../utils/hasOwnProperty';\nimport useImage from '../../../../core/Context/useImage';\nimport AdyenCheckoutError, { ERROR } from '../../../../core/Errors/AdyenCheckoutError';\nimport { THREEDS2_CHALLENGE, THREEDS2_CHALLENGE_ERROR, THREEDS2_NUM, MISSING_TOKEN_IN_ACTION_MSG } from '../../constants';\nimport { isValidHttpUrl } from '../../../../utils/isValidURL';\nimport { ErrorObject } from '../../../../core/Errors/types';\nimport { AnalyticsLogEvent, LogEventSubtype, LogEventType } from '../../../../core/Analytics/events/AnalyticsLogEvent';\nimport { AnalyticsErrorEvent, ErrorEventCode, ErrorEventType } from '../../../../core/Analytics/events/AnalyticsErrorEvent';\nimport { AbstractAnalyticsEvent } from '../../../../core/Analytics/events/AbstractAnalyticsEvent';\n\nclass PrepareChallenge3DS2 extends Component<PrepareChallenge3DS2Props, PrepareChallenge3DS2State> {\n public static readonly defaultProps = {\n onComplete: () => {},\n onError: () => {},\n isMDFlow: false\n };\n\n constructor(props) {\n super(props);\n\n if (this.props.token) {\n const challengeData: ChallengeData | ErrorObject = prepareChallengeData({\n token: this.props.token,\n size: this.props.challengeWindowSize || this.props.size // TODO confirm that this.props.size is legacy and can be removed\n });\n\n this.state = {\n status: 'init',\n challengeData\n };\n } else {\n // Will be picked up in componentDidMount\n this.state = { challengeData: { success: false, error: MISSING_TOKEN_IN_ACTION_MSG } };\n\n console.debug(`${THREEDS2_CHALLENGE_ERROR}: ${MISSING_TOKEN_IN_ACTION_MSG}`);\n }\n }\n\n public onFormSubmit = (msg: string) => {\n const event = new AnalyticsLogEvent({\n component: this.props.type,\n type: LogEventType.threeDS2,\n subType: LogEventSubtype.challengeDataSentWeb,\n message: msg\n });\n\n this.props.onSubmitAnalytics(event);\n };\n\n componentDidMount() {\n const hasChallengeData = !isErrorObject(this.state.challengeData);\n\n if (hasChallengeData) {\n const shouldAllowHttpDomains =\n /** Allow http urls if in development and testing against localhost:8080 */\n (process.env.NODE_ENV === 'development' && process.env.__CLIENT_ENV__?.includes('localhost:8080')) ||\n /**\n * Allows the checkoutshopper demo on localhost:8080 to work -\n * requires a configuration in localhost of environment: 'test', _environmentUrls: {api: 'http://localhost:8080/'}\n */\n (this.props.environment === 'test' && this.props._environmentUrls?.api?.includes('http://localhost:8080'));\n\n /**\n * Check the structure of the created challengeData\n */\n const { acsURL, postMessageDomain } = this.state.challengeData as ChallengeData;\n const hasValidAcsURL = isValidHttpUrl(acsURL, shouldAllowHttpDomains);\n const hasValidPostMessageDomain = isValidHttpUrl(postMessageDomain, shouldAllowHttpDomains);\n\n // Only render component if we have a valid acsURL & postMessageDomain.\n // i.e. a url to load into the iframe, and the domain that we expect the iframe to be sending messages back from\n if (!hasValidAcsURL || !hasValidPostMessageDomain) {\n const errorCode = !hasValidAcsURL\n ? ErrorEventCode.THREEDS2_TOKEN_IS_MISSING_ACSURL\n : ErrorEventCode.THREEDS2_CHALLENGE_TOKEN_IS_MISSING_THREEDSNOTIFICATIONURL;\n const missingProperty = !hasValidAcsURL ? 'acsURL' : 'threeDSNotificationURL';\n\n // Set UI error & call onError callback\n this.setError(\n {\n errorInfo: `${errorCode}: ${this.props.i18n.get('err.gen.9102')}` //\n },\n true\n );\n\n // Send error to analytics endpoint // TODO - check logs to see if this *ever* happens\n const event = new AnalyticsErrorEvent({\n component: this.props.type,\n code: errorCode,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_CHALLENGE_ERROR}: Decoded token is missing a valid ${missingProperty} property`\n });\n this.props.onSubmitAnalytics(event);\n\n console.debug(\n `### PrepareChallenge3DS2::exiting:: no valid ${missingProperty}.${!hasValidPostMessageDomain ? ` postMessageDomain=${postMessageDomain}` : ''}`\n );\n return;\n }\n\n const { acsTransID, messageVersion, threeDSServerTransID } = (this.state.challengeData as ChallengeData).cReqData;\n\n // Only render component if we have a acsTransID, messageVersion & threeDSServerTransID\n if (!acsTransID || !messageVersion || !threeDSServerTransID) {\n // Set UI error & call onError callback\n this.setError(\n {\n errorInfo: `${ErrorEventCode.THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS}: ${this.props.i18n.get('err.gen.9102')}`\n },\n true\n );\n\n // Send error to analytics endpoint // TODO - check logs to see if this *ever* happens\n const event = new AnalyticsErrorEvent({\n component: this.props.type,\n code: ErrorEventCode.THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_CHALLENGE_ERROR}: Decoded token is missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)`\n });\n this.props.onSubmitAnalytics(event);\n\n console.debug(\n '### PrepareChallenge3DS2::exiting:: missing one or more of the following properties (acsTransID | messageVersion | threeDSServerTransID)'\n );\n return;\n }\n\n // Proceed to allow component to render\n this.setState({ status: 'performingChallenge' });\n //\n } else {\n const errorMsg: string = (this.state.challengeData as ErrorObject).error;\n\n const errorCode = errorMsg.includes(MISSING_TOKEN_IN_ACTION_MSG)\n ? ErrorEventCode.THREEDS2_ACTION_IS_MISSING_TOKEN\n : ErrorEventCode.THREEDS2_TOKEN_DECODE_OR_PARSING_FAILED;\n\n // Set UI error & call onError callback\n this.setError(\n {\n errorInfo: `${errorCode}: ${this.props.i18n.get('err.gen.9102')}`\n // errorObj: this.state.challengeData // TODO Decide if we want to expose this data\n },\n true\n );\n\n // Send error to analytics endpoint // TODO - check logs to see if the base64 decoding errors *ever* happen\n const event = new AnalyticsErrorEvent({\n component: this.props.type,\n code: errorCode,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_CHALLENGE_ERROR}: ${errorMsg}` // can be: 'Missing \"token\" property from threeDS2 action', 'not base64', 'malformed URI sequence' or 'Could not JSON parse token'\n });\n\n this.props.onSubmitAnalytics(event);\n\n console.debug('### PrepareChallenge3DS2::exiting:: no challengeData');\n }\n }\n\n setStatusComplete(resultObj: ResultObject, errorCodeObject: ErrorCodeObject = null) {\n this.setState({ status: 'complete' }, () => {\n const data: ChallengeResolveData = createChallengeResolveData(this.props.dataKey, resultObj.transStatus, this.props.paymentData);\n\n if (errorCodeObject) {\n console.debug('### PrepareChallenge3DS2::errorCodeObject::', errorCodeObject);\n }\n\n let event: AbstractAnalyticsEvent;\n\n /** Are we in an \"error\" i.e. timeout or no transStatus, scenario? If so, submit analytics about it */\n const finalResObject = errorCodeObject ? errorCodeObject : resultObj;\n if (finalResObject.errorCode) {\n const errorTypeAndCode = {\n code: finalResObject.errorCode === 'timeout' ? ErrorEventCode.THREEDS2_TIMEOUT : ErrorEventCode.THREEDS2_NO_TRANSSTATUS,\n errorType: ErrorEventType.threeDS2\n };\n\n // Challenge process has timed out,\n // or, It's an error reported by the backend 'cos no transStatus could be retrieved // TODO - check logs to see if this *ever* happens\n\n event = new AnalyticsErrorEvent({\n component: this.props.type,\n message: (finalResObject as ErrorCodeObject).message,\n ...errorTypeAndCode\n });\n\n // Send error to analytics endpoint\n this.props.onSubmitAnalytics(event);\n }\n\n /** Calculate \"result\" for analytics */\n let result: string;\n\n switch (resultObj?.transStatus) {\n case 'Y':\n result = 'success';\n break;\n case 'N':\n result = 'failed';\n break;\n case 'U':\n result = !errorCodeObject ? 'cancelled' : 'timeout';\n break;\n default:\n }\n if (resultObj?.errorCode) {\n result = 'noTransStatus';\n }\n\n /** Create log object - the process is completed, one way or another */\n\n event = new AnalyticsLogEvent({\n component: this.props.type,\n type: LogEventType.threeDS2,\n subType: LogEventSubtype.challengeCompleted,\n message: `${THREEDS2_NUM} challenge has completed`,\n result\n });\n\n // Send log to analytics endpoint\n this.props.onSubmitAnalytics(event);\n\n /**\n * Equals call to onAdditionalDetails (except for in 3DS2InMDFlow)\n */\n this.props.onComplete(data);\n });\n }\n\n /**\n * Display error in the UI,\n * and, optionally, decide whether to send any of these errors to the merchant defined onError callback\n *\n * @param errorInfoObj -\n * @param isFatal -\n */\n setError(errorInfoObj: StatusErrorInfoObject, isFatal: boolean) {\n this.setState({ status: 'error', errorInfo: errorInfoObj.errorInfo });\n\n // Decide whether to call this.props.onError\n if (isFatal) {\n this.props.onError(new AdyenCheckoutError(ERROR, errorInfoObj.errorInfo, { cause: errorInfoObj.errorObj }));\n }\n }\n\n render(_, { challengeData: stateChallengeData }: PrepareChallenge3DS2State) {\n const challengeData = stateChallengeData as ChallengeData;\n const getImage = useImage();\n if (this.state.status === 'performingChallenge') {\n return (\n <DoChallenge3DS2\n onCompleteChallenge={(challenge: ThreeDS2FlowObject) => {\n let errorCodeObject: ErrorCodeObject = null;\n\n // Challenge has resulted in an error (no transStatus could be retrieved) - but we still treat this as a valid scenario\n if (hasOwnProperty(challenge.result, 'errorCode') && challenge.result.errorCode.length) {\n // Tell the merchant there's been an error\n errorCodeObject = {\n errorCode: challenge.result.errorCode,\n message: `${THREEDS2_CHALLENGE_ERROR}: ${\n challenge.result.errorDescription ? challenge.result.errorDescription : 'no transStatus could be retrieved'\n }`\n };\n\n /**\n * NOTE: we can now use this.props.isMDFlow to decide if we want to send any of these errors to the onError handler\n * - this is problematic in the regular flow since merchants tend to treat any calls to their onError handler as 'fatal',\n * but in the MDFlow we control what the onError handler does.\n */\n if (this.props.isMDFlow) {\n this.props.onError(\n new AdyenCheckoutError(\n ERROR,\n `${THREEDS2_CHALLENGE_ERROR}: ${\n challenge.result.errorDescription\n ? challenge.result.errorDescription\n : 'no transStatus could be retrieved'\n }`,\n { cause: challenge.result.errorCode }\n )\n );\n }\n }\n\n /**\n * An object has been returned, parsed & accepted as legit (according to the rules in getProcessMessageHandler),\n * but the result prop on that object is missing\n */\n if (!challenge.result) {\n this.setError(\n {\n errorInfo: `${THREEDS2_CHALLENGE_ERROR}: ${this.props.i18n.get('3ds.chal.805', {\n values: { result: '\"result\"' }\n })}`,\n errorObj: challenge as unknown as ErrorObject\n },\n true\n );\n\n // Send error to analytics endpoint\n const event = new AnalyticsErrorEvent({\n component: this.props.type,\n code: ErrorEventCode.THREEDS2_CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_CHALLENGE_ERROR}: challenge resolved without a \"result\" object`\n });\n\n this.props.onSubmitAnalytics(event);\n\n console.debug('### PrepareChallenge3DS2::exiting:: challenge resolved without a \"result\" object');\n\n return;\n }\n\n // Proceed with call to onAdditionalDetails (except for in 3DS2InMDFlow)\n this.setStatusComplete(challenge.result, errorCodeObject);\n }}\n onErrorChallenge={(challenge: ThreeDS2FlowObject) => {\n /**\n * Called when challenge times-out (which is still a valid scenario)...\n */\n if (hasOwnProperty(challenge, 'errorCode')) {\n const timeoutObject: ErrorCodeObject = {\n errorCode: challenge.errorCode,\n message: `${THREEDS2_CHALLENGE}: ${challenge.errorCode}`\n };\n\n // see comment in onCompleteChallenge code block\n if (this.props.isMDFlow) {\n this.props.onError(\n new AdyenCheckoutError(ERROR, `${THREEDS2_CHALLENGE_ERROR}: '3DS2 challenge timed out'`, {\n cause: challenge.errorCode\n })\n );\n }\n\n this.setStatusComplete(challenge.result, timeoutObject);\n return;\n }\n }}\n {...challengeData}\n onActionHandled={this.props.onActionHandled}\n onFormSubmit={this.onFormSubmit}\n usePasskeyIFrameAttributes={this.props.usePasskeyIFrameAttributes}\n />\n );\n }\n\n if (this.state.status === 'error') {\n return (\n <div className=\"adyen-checkout__threeds2-challenge-error\">\n <Img\n className=\"adyen-checkout__status__icon adyen-checkout__status__icon--error\"\n src={getImage({\n imageFolder: 'components/'\n })('error')}\n alt={''}\n />\n <div className=\"adyen-checkout__status__text\">\n {this.state.errorInfo ? this.state.errorInfo : this.props.i18n.get('error.message.unknown')}\n </div>\n </div>\n );\n }\n\n return null;\n }\n}\n\nexport default PrepareChallenge3DS2;\n"],"names":["PrepareChallenge3DS2","Component","componentDidMount","isErrorObject","this","state","challengeData","process","_this_props__environmentUrls_api","_this_props__environmentUrls","shouldAllowHttpDomains","props","environment","_environmentUrls","api","includes","acsURL","postMessageDomain","hasValidAcsURL","isValidHttpUrl","hasValidPostMessageDomain","errorCode","ErrorEventCode","THREEDS2_CHALLENGE_TOKEN_IS_MISSING_THREEDSNOTIFICATIONURL","THREEDS2_TOKEN_IS_MISSING_ACSURL","missingProperty","setError","errorInfo","i18n","get","event","AnalyticsErrorEvent","component","type","code","errorType","ErrorEventType","threeDS2","message","THREEDS2_CHALLENGE_ERROR","onSubmitAnalytics","console","debug","acsTransID","messageVersion","threeDSServerTransID","cReqData","THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS","setState","status","errorMsg","error","MISSING_TOKEN_IN_ACTION_MSG","THREEDS2_ACTION_IS_MISSING_TOKEN","THREEDS2_TOKEN_DECODE_OR_PARSING_FAILED","setStatusComplete","resultObj","errorCodeObject","data","createChallengeResolveData","dataKey","transStatus","paymentData","finalResObject","errorTypeAndCode","THREEDS2_TIMEOUT","THREEDS2_NO_TRANSSTATUS","_object_spread","result","AnalyticsLogEvent","LogEventType","subType","LogEventSubtype","challengeCompleted","THREEDS2_NUM","onComplete","errorInfoObj","isFatal","onError","AdyenCheckoutError","ERROR","cause","errorObj","render","_","stateChallengeData","getImage","useImage","h","DoChallenge3DS2","onCompleteChallenge","challenge","hasOwnProperty","length","errorDescription","isMDFlow","values","THREEDS2_CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP","onErrorChallenge","timeoutObject","THREEDS2_CHALLENGE","onActionHandled","onFormSubmit","usePasskeyIFrameAttributes","div","className","Img","src","imageFolder","alt","constructor","super","_define_property","msg","challengeDataSentWeb","token","prepareChallengeData","size","challengeWindowSize","success","defaultProps"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- const e="threeDS2Fingerprint",r="3DS2Fingerprint_Error",t="callSubmit3DS2Fingerprint_Response",n="threeDS2Challenge",p="3DS2Challenge_Error",o="threeDS2",i="3DS2",l='Missing "token" property from threeDS2 action',s="02",S=1e4,x=6e5,D="timeout",g={result:{transStatus:"U"},type:"challengeResult",errorCode:D},h={result:{threeDSCompInd:"N"},type:"fingerPrintResult",errorCode:D},a={"01":["250px","400px"],"02":["390px","400px"],"03":["500px","600px"],"04":["600px","400px"],"05":["100%","100%"]};export{x as CHALLENGE_TIMEOUT,g as CHALLENGE_TIMEOUT_REJECT_OBJECT,a as CHALLENGE_WINDOW_SIZES,s as DEFAULT_CHALLENGE_WINDOW_SIZE,h as FAILED_METHOD_STATUS_RESOLVE_OBJECT_TIMEOUT,l as MISSING_TOKEN_IN_ACTION_MSG,n as THREEDS2_CHALLENGE,p as THREEDS2_CHALLENGE_ERROR,e as THREEDS2_FINGERPRINT,r as THREEDS2_FINGERPRINT_ERROR,t as THREEDS2_FINGERPRINT_SUBMIT,o as THREEDS2_FULL,i as THREEDS2_NUM,S as THREEDS_METHOD_TIMEOUT,D as TIMEOUT};
1
+ const e="threeDS2Fingerprint",r="3DS2Fingerprint_Error",t="callSubmit3DS2Fingerprint_Response",l="threeDS2Challenge",p="3DS2Challenge_Error",n="threeDS2",o="3DS2",i='Missing "token" property from threeDS2 action',a="02",s=1e4,c=6e5,g="timeout",u={result:{transStatus:"U"},type:"challengeResult",errorCode:g},S={result:{threeDSCompInd:"N"},type:"fingerPrintResult",errorCode:g},x="payment *; publickey-credentials-get *",D="payment *; publickey-credentials-get *; publickey-credentials-create *",h="allow-forms allow-same-origin allow-scripts allow-pointer-lock allow-popups",m={"01":["250px","400px"],"02":["390px","400px"],"03":["500px","600px"],"04":["600px","400px"],"05":["100%","100%"]};export{c as CHALLENGE_TIMEOUT,u as CHALLENGE_TIMEOUT_REJECT_OBJECT,m as CHALLENGE_WINDOW_SIZES,a as DEFAULT_CHALLENGE_WINDOW_SIZE,S as FAILED_METHOD_STATUS_RESOLVE_OBJECT_TIMEOUT,i as MISSING_TOKEN_IN_ACTION_MSG,x as PASSKEY_3DS2_IFRAME_ALLOW,D as PASSKEY_VISA_IFRAME_ALLOW,h as PASSKEY_VISA_IFRAME_SANDBOX,l as THREEDS2_CHALLENGE,p as THREEDS2_CHALLENGE_ERROR,e as THREEDS2_FINGERPRINT,r as THREEDS2_FINGERPRINT_ERROR,t as THREEDS2_FINGERPRINT_SUBMIT,n as THREEDS2_FULL,o as THREEDS2_NUM,s as THREEDS_METHOD_TIMEOUT,g as TIMEOUT};
2
2
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../../../src/components/ThreeDS2/constants.ts"],"sourcesContent":["import { ThreeDS2FlowObject } from './types';\n\nexport const THREEDS2_FINGERPRINT = 'threeDS2Fingerprint';\nexport const THREEDS2_FINGERPRINT_ERROR = '3DS2Fingerprint_Error';\nexport const THREEDS2_FINGERPRINT_SUBMIT = 'callSubmit3DS2Fingerprint_Response';\nexport const THREEDS2_CHALLENGE = 'threeDS2Challenge';\nexport const THREEDS2_CHALLENGE_ERROR = '3DS2Challenge_Error';\n\nexport const THREEDS2_ERROR = 'threeDS2Error';\nexport const THREEDS2_FULL = 'threeDS2';\nexport const THREEDS2_NUM = '3DS2';\n\nexport const MISSING_TOKEN_IN_ACTION_MSG = 'Missing \"token\" property from threeDS2 action';\n\nexport const DEFAULT_CHALLENGE_WINDOW_SIZE = '02';\n\nexport const THREEDS_METHOD_TIMEOUT = 10000;\nexport const CHALLENGE_TIMEOUT = 600000;\n\nexport const TIMEOUT = 'timeout';\n\nexport const CHALLENGE_TIMEOUT_REJECT_OBJECT: ThreeDS2FlowObject = {\n result: {\n transStatus: 'U'\n },\n type: 'challengeResult',\n errorCode: TIMEOUT\n};\n\nexport const FAILED_METHOD_STATUS_RESOLVE_OBJECT: ThreeDS2FlowObject = {\n result: {\n threeDSCompInd: 'N'\n },\n type: 'fingerPrintResult'\n};\n\nexport const FAILED_METHOD_STATUS_RESOLVE_OBJECT_TIMEOUT: ThreeDS2FlowObject = {\n result: {\n threeDSCompInd: 'N'\n },\n type: 'fingerPrintResult',\n errorCode: TIMEOUT\n};\n\n// Re. EMV 3-D Specification: EMVCo_3DS_Spec_210_1017.pdf\nexport const CHALLENGE_WINDOW_SIZES = {\n '01': ['250px', '400px'],\n '02': ['390px', '400px'],\n '03': ['500px', '600px'],\n '04': ['600px', '400px'],\n '05': ['100%', '100%']\n};\n"],"names":["THREEDS2_FINGERPRINT","THREEDS2_FINGERPRINT_ERROR","THREEDS2_FINGERPRINT_SUBMIT","THREEDS2_CHALLENGE","THREEDS2_CHALLENGE_ERROR","THREEDS2_FULL","THREEDS2_NUM","MISSING_TOKEN_IN_ACTION_MSG","DEFAULT_CHALLENGE_WINDOW_SIZE","THREEDS_METHOD_TIMEOUT","CHALLENGE_TIMEOUT","TIMEOUT","CHALLENGE_TIMEOUT_REJECT_OBJECT","result","transStatus","type","errorCode","FAILED_METHOD_STATUS_RESOLVE_OBJECT_TIMEOUT","threeDSCompInd","CHALLENGE_WINDOW_SIZES"],"mappings":"AAEO,MAAMA,EAAuB,sBACvBC,EAA6B,wBAC7BC,EAA8B,qCAC9BC,EAAqB,oBACrBC,EAA2B,sBAG3BC,EAAgB,WAChBC,EAAe,OAEfC,EAA8B,gDAE9BC,EAAgC,KAEhCC,EAAyB,IACzBC,EAAoB,IAEpBC,EAAU,UAEVC,EAAsD,CAC/DC,OAAQ,CACJC,YAAa,KAEjBC,KAAM,kBACNC,UAAWL,GAUFM,EAAkE,CAC3EJ,OAAQ,CACJK,eAAgB,KAEpBH,KAAM,oBACNC,UAAWL,GAIFQ,EAAyB,CAClC,KAAM,CAAC,QAAS,SAChB,KAAM,CAAC,QAAS,SAChB,KAAM,CAAC,QAAS,SAChB,KAAM,CAAC,QAAS,SAChB,KAAM,CAAC,OAAQ"}
1
+ {"version":3,"file":"constants.js","sources":["../../../../src/components/ThreeDS2/constants.ts"],"sourcesContent":["import { ThreeDS2FlowObject } from './types';\n\nexport const THREEDS2_FINGERPRINT = 'threeDS2Fingerprint';\nexport const THREEDS2_FINGERPRINT_ERROR = '3DS2Fingerprint_Error';\nexport const THREEDS2_FINGERPRINT_SUBMIT = 'callSubmit3DS2Fingerprint_Response';\nexport const THREEDS2_CHALLENGE = 'threeDS2Challenge';\nexport const THREEDS2_CHALLENGE_ERROR = '3DS2Challenge_Error';\n\nexport const THREEDS2_ERROR = 'threeDS2Error';\nexport const THREEDS2_FULL = 'threeDS2';\nexport const THREEDS2_NUM = '3DS2';\n\nexport const MISSING_TOKEN_IN_ACTION_MSG = 'Missing \"token\" property from threeDS2 action';\n\nexport const DEFAULT_CHALLENGE_WINDOW_SIZE = '02';\n\nexport const THREEDS_METHOD_TIMEOUT = 10000;\nexport const CHALLENGE_TIMEOUT = 600000;\n\nexport const TIMEOUT = 'timeout';\n\nexport const CHALLENGE_TIMEOUT_REJECT_OBJECT: ThreeDS2FlowObject = {\n result: {\n transStatus: 'U'\n },\n type: 'challengeResult',\n errorCode: TIMEOUT\n};\n\nexport const FAILED_METHOD_STATUS_RESOLVE_OBJECT: ThreeDS2FlowObject = {\n result: {\n threeDSCompInd: 'N'\n },\n type: 'fingerPrintResult'\n};\n\nexport const FAILED_METHOD_STATUS_RESOLVE_OBJECT_TIMEOUT: ThreeDS2FlowObject = {\n result: {\n threeDSCompInd: 'N'\n },\n type: 'fingerPrintResult',\n errorCode: TIMEOUT\n};\n\nexport const PASSKEY_3DS2_IFRAME_ALLOW = 'payment *; publickey-credentials-get *';\nexport const PASSKEY_VISA_IFRAME_ALLOW = 'payment *; publickey-credentials-get *; publickey-credentials-create *';\nexport const PASSKEY_VISA_IFRAME_SANDBOX = 'allow-forms allow-same-origin allow-scripts allow-pointer-lock allow-popups';\n\n// Re. EMV 3-D Specification: EMVCo_3DS_Spec_210_1017.pdf\nexport const CHALLENGE_WINDOW_SIZES = {\n '01': ['250px', '400px'],\n '02': ['390px', '400px'],\n '03': ['500px', '600px'],\n '04': ['600px', '400px'],\n '05': ['100%', '100%']\n};\n"],"names":["THREEDS2_FINGERPRINT","THREEDS2_FINGERPRINT_ERROR","THREEDS2_FINGERPRINT_SUBMIT","THREEDS2_CHALLENGE","THREEDS2_CHALLENGE_ERROR","THREEDS2_FULL","THREEDS2_NUM","MISSING_TOKEN_IN_ACTION_MSG","DEFAULT_CHALLENGE_WINDOW_SIZE","THREEDS_METHOD_TIMEOUT","CHALLENGE_TIMEOUT","TIMEOUT","CHALLENGE_TIMEOUT_REJECT_OBJECT","result","transStatus","type","errorCode","FAILED_METHOD_STATUS_RESOLVE_OBJECT_TIMEOUT","threeDSCompInd","PASSKEY_3DS2_IFRAME_ALLOW","PASSKEY_VISA_IFRAME_ALLOW","PASSKEY_VISA_IFRAME_SANDBOX","CHALLENGE_WINDOW_SIZES"],"mappings":"AAEO,MAAMA,EAAuB,sBACvBC,EAA6B,wBAC7BC,EAA8B,qCAC9BC,EAAqB,oBACrBC,EAA2B,sBAG3BC,EAAgB,WAChBC,EAAe,OAEfC,EAA8B,gDAE9BC,EAAgC,KAEhCC,EAAyB,IACzBC,EAAoB,IAEpBC,EAAU,UAEVC,EAAsD,CAC/DC,OAAQ,CACJC,YAAa,KAEjBC,KAAM,kBACNC,UAAWL,GAUFM,EAAkE,CAC3EJ,OAAQ,CACJK,eAAgB,KAEpBH,KAAM,oBACNC,UAAWL,GAGFQ,EAA4B,yCAC5BC,EAA4B,yEAC5BC,EAA8B,8EAG9BC,EAAyB,CAClC,KAAM,CAAC,QAAS,SAChB,KAAM,CAAC,QAAS,SAChB,KAAM,CAAC,QAAS,SAChB,KAAM,CAAC,QAAS,SAChB,KAAM,CAAC,OAAQ"}
@@ -1,2 +1,2 @@
1
- import{createElement as e,Fragment as t}from"../../../external/preact/dist/preact.js";import{useRef as r,useMemo as o,useState as n,useCallback as s,useEffect as a}from"../../../external/preact/hooks/dist/hooks.js";import i from"../FormFields/Fieldset/Fieldset.js";import l from"./components/ReadOnlyAddress.js";import{getAddressValidationRules as c}from"./validate.js";import{addressFormatters as d,countrySpecificFormatters as u}from"./validate.formats.js";import p from"./components/FieldContainer.js";import m from"../../../utils/useForm/useForm.js";import"../SecuredFields/lib/CSF/utils/userAgent.js";import f from"./Specifications.js";import{ADDRESS_SCHEMA as y,FALLBACK_VALUE as b}from"./constants.js";import{getMaxLengthByFieldAndCountry as v}from"../../../utils/validator-utils.js";import{useCoreContext as O}from"../../../core/Context/CoreProvider.js";import g from"./components/AddressSearch.js";import{getAddressTypeFromLabel as j}from"./utils.js";function F(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function h(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},o=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),o.forEach(function(t){F(e,t,r[t])})}return e}function C(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t}(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function A(F){var A,S;const{i18n:P}=O(),{label:w="",requiredFields:k,visibility:x,iOSFocusedField:D=null,showContextualElement:M}=F,E=j(F.addressType,w),B=r({});var L;Object.keys(B.current).length||(null===(L=F.setComponentRef)||void 0===L||L.call(F,B.current));const N=o(()=>new f(F.specifications),[F.specifications]),R=N.getAddressSchemaForCountryFlat(F.countryCode).filter(e=>k.includes(e)),[T,V]=n(!1),[H,q]=n(!1),[_,I]=n(""),U=!!F.onAddressLookup,[$,z]=n(!1),G=!F.onAddressLookup||(T||H),{data:J,errors:K,valid:Q,isValid:W,handleChangeFor:X,triggerValidation:Y,setData:Z,mergeData:ee}=m({schema:R,defaultData:F.data,rules:h({},c(N),F.validationRules),formatters:d}),te=r(null===(A=F.data)||void 0===A?void 0:A.country),re=null===(S=J.country||te.current)||void 0===S?void 0:S.toUpperCase(),oe=o(()=>C(h({},J),{country:re}),[J,re]),ne=s(e=>{const t=y.reduce((t,r)=>{const o=e[r];return null!=o&&(t[r]=String(o)),t},{});ee(t),z(!0),Y(),V(!0)},[V,Y,Z]),se=s(()=>{q(!0)},[]);B.current.showValidation=()=>{Y(),I(!U||G||W?"":P.get("address.errors.incomplete"))};const ae=R.filter(e=>!D||e===D);if(a(()=>{if($)return void z(!1);const e=N.countryHasDataset(J.country)?"":b,t=C(h({},J),{stateOrProvince:e});k.forEach(e=>{var r;X(e,"input")(null!==(r=t[e])&&void 0!==r?r:"")}),t.postalCode&&X("postalCode","blur")(J.postalCode)},[J.country]),a(()=>{const e=k.includes("stateOrProvince"),t=J.country&&N.countryHasDataset(J.country),r=e&&t,o=J.stateOrProvince||(r?"":b);X("stateOrProvince","input")(o)},[]),a(()=>{const e=N.getOptionalFieldsForCountry(J.country),t=y.reduce((t,r)=>{const o=e.includes(r),n=k.includes(r),s=J[r],a=F.data[r],i=o&&!s||!n?n||s||!a?b:a:s;return(null==i?void 0:i.length)&&(t[r]=i),t},{});!t.country&&te.current&&(t.country=te.current),F.onChange({data:t,valid:Q,errors:K,isValid:W})},[J,Q,K,W]),"hidden"===x)return null;if("readOnly"===x)return e(l,{data:J,label:w});const ie=(t,{classNameModifiers:r=[]})=>k.includes(t)?e(p,{key:t,allowedCountries:F.allowedCountries,classNameModifiers:[...r,t],data:oe,errors:K,valid:Q,fieldName:t,onInput:X(t,"input"),onBlur:X(t,"blur"),onDropdownChange:X(t,"blur"),specifications:N,maxLength:v(u,t,re),trimOnBlur:!0,disabled:!ae.includes(t),addressType:E,onFieldFocusAnalytics:F.onFieldFocusAnalytics,onFieldBlurAnalytics:F.onFieldBlurAnalytics}):null,le=N.getAddressSchemaForCountry(J.country);return e(t,null,e(i,{classNameModifiers:[w,"address"],label:w,renderLabelAsSectionHeading:!0},U&&e(g,{onAddressLookup:F.onAddressLookup,onAddressSelected:F.onAddressSelected,onSelect:ne,onManualAddress:se,externalErrorMessage:_,hideManualButton:G,showContextualElement:M,contextualText:P.get("address.search.contextualText"),addressSearchDebounceMs:F.addressSearchDebounceMs}),G&&e(t,null,le.map(t=>t instanceof Array?e("div",{className:"adyen-checkout__field-group"},t.map(([e,t])=>ie(e,{classNameModifiers:[`col-${t}`]}))):ie(t,{})))))}A.defaultProps={countryCode:null,validationRules:null,data:{},onChange:()=>{},visibility:"editable",requiredFields:y,specifications:{},onFieldFocusAnalytics:()=>{},onFieldBlurAnalytics:()=>{}};export{A as default};
1
+ import{createElement as e,Fragment as t}from"../../../external/preact/dist/preact.js";import{useRef as r,useMemo as o,useState as s,useCallback as n,useEffect as a}from"../../../external/preact/hooks/dist/hooks.js";import i from"../FormFields/Fieldset/Fieldset.js";import l from"./components/ReadOnlyAddress.js";import{getAddressValidationRules as c}from"./validate.js";import{countrySpecificFormatters as d,addressFormatters as u}from"./validate.formats.js";import p from"./components/FieldContainer.js";import m from"../../../utils/useForm/useForm.js";import"../SecuredFields/lib/CSF/utils/userAgent.js";import f from"./Specifications.js";import{COUNTRY as y,ADDRESS_SCHEMA as b,FALLBACK_VALUE as O}from"./constants.js";import{getMaxLengthByFieldAndCountry as g}from"../../../utils/validator-utils.js";import{useCoreContext as j}from"../../../core/Context/CoreProvider.js";import v from"./components/AddressSearch.js";import{getAddressTypeFromLabel as F}from"./utils.js";function h(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function C(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},o=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),o.forEach(function(t){h(e,t,r[t])})}return e}function A(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t}(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function S(h){var S;const{i18n:P}=j(),{label:w="",requiredFields:k,visibility:x,iOSFocusedField:D=null,showContextualElement:M}=h,E=F(h.addressType,w),B=r({});var L;Object.keys(B.current).length||(null===(L=h.setComponentRef)||void 0===L||L.call(h,B.current));const N=o(()=>new f(h.specifications),[h.specifications]),R=N.getAddressSchemaForCountryFlat(h.countryCode).filter(e=>k.includes(e)),[T,V]=s(!1),[H,q]=s(!1),[_,I]=s(""),U=!!h.onAddressLookup,[$,z]=s(!1),G=!h.onAddressLookup||(T||H),J=null===(S=h.data)||void 0===S?void 0:S.country,K=J&&!R.includes(y)?[...R,y]:R,Q=o(()=>J?A(C({},h.data),{country:J.toUpperCase()}):h.data,[h.data,J]),{data:W,errors:X,valid:Y,isValid:Z,handleChangeFor:ee,triggerValidation:te,setData:re,mergeData:oe}=m({schema:K,defaultData:Q,rules:C({},c(N),h.validationRules),formatters:u}),se=n(e=>{const t=b.reduce((t,r)=>{const o=e[r];return null!=o&&(t[r]=String(o)),t},{});oe(t),z(!0),te(),V(!0)},[V,te,re]),ne=n(()=>{q(!0)},[]);B.current.showValidation=()=>{te(),I(!U||G||Z?"":P.get("address.errors.incomplete"))};const ae=R.filter(e=>!D||e===D);if(a(()=>{if($)return void z(!1);const e=N.countryHasDataset(W.country)?"":O,t=A(C({},W),{stateOrProvince:e});k.forEach(e=>{var r;ee(e,"input")(null!==(r=t[e])&&void 0!==r?r:"")}),t.postalCode&&ee("postalCode","blur")(W.postalCode)},[W.country]),a(()=>{const e=k.includes("stateOrProvince"),t=W.country&&N.countryHasDataset(W.country),r=e&&t,o=W.stateOrProvince||(r?"":O);ee("stateOrProvince","input")(o)},[]),a(()=>{const e=N.getOptionalFieldsForCountry(W.country),t=b.reduce((t,r)=>{const o=e.includes(r),s=k.includes(r),n=W[r],a=Q[r],i=o&&!n||!s?!s&&a?a:O:n;return(null==i?void 0:i.length)&&(t[r]=i),t},{});h.onChange({data:t,valid:Y,errors:X,isValid:Z})},[W,Y,X,Z]),"hidden"===x)return null;if("readOnly"===x)return e(l,{data:W,label:w});const ie=(t,{classNameModifiers:r=[]})=>k.includes(t)?e(p,{key:t,allowedCountries:h.allowedCountries,classNameModifiers:[...r,t],data:W,errors:X,valid:Y,fieldName:t,onInput:ee(t,"input"),onBlur:ee(t,"blur"),onDropdownChange:ee(t,"blur"),specifications:N,maxLength:g(d,t,W.country),trimOnBlur:!0,disabled:!ae.includes(t),addressType:E,onFieldFocusAnalytics:h.onFieldFocusAnalytics,onFieldBlurAnalytics:h.onFieldBlurAnalytics}):null,le=N.getAddressSchemaForCountry(W.country);return e(t,null,e(i,{classNameModifiers:[w,"address"],label:w,renderLabelAsSectionHeading:!0},U&&e(v,{onAddressLookup:h.onAddressLookup,onAddressSelected:h.onAddressSelected,onSelect:se,onManualAddress:ne,externalErrorMessage:_,hideManualButton:G,showContextualElement:M,contextualText:P.get("address.search.contextualText"),addressSearchDebounceMs:h.addressSearchDebounceMs}),G&&e(t,null,le.map(t=>t instanceof Array?e("div",{className:"adyen-checkout__field-group"},t.map(([e,t])=>ie(e,{classNameModifiers:[`col-${t}`]}))):ie(t,{})))))}S.defaultProps={countryCode:null,validationRules:null,data:{},onChange:()=>{},visibility:"editable",requiredFields:b,specifications:{},onFieldFocusAnalytics:()=>{},onFieldBlurAnalytics:()=>{}};export{S as default};
2
2
  //# sourceMappingURL=Address.js.map