{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/applepay/applePay.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/applepay/braintreesdk/braintreeApplePayModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/applepay/braintreesdk/braintreeApplePayModelBuilder.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/applepay/braintreesdk/braintreeApplePaySDK.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/applepay/components/applePayCart.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/applepay/components/applePayCheckout.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/applepay/components/applePayPaymentProcessing.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/applepay/constants/applePayPaymentProcessingConstants.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/applepay/constants/errorMessages.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/applepay/errorhandler/errorHandlingBaseModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/applepay/errorhandler/errorHandlingCheckoutModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/applepay/helpers/applePayHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/applepay/helpers/applePayPaymentProcessingHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/braintreeAccount.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/braintreeGeneral.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/braintreeSFRA.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/braintreeUtils.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/braintreesdk/braintreeCreditCardModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/braintreesdk/braintreeCreditCardModelBuilder.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/braintreesdk/braintreeCreditCardSDK.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/components/creditCardAccount.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/components/creditCardFields.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/components/creditCardList.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/components/creditCardPaymentProcessing.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/components/creditCardSessionAccount.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/components/creditCardVaultManager.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/components/creditCardVaultManagerModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/constants/creditCardPaymentProcessingConstants.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/creditCard.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/errorhandler/creditCardFormFieldsValidator.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/errorhandler/errorHandlingBaseModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/errorhandler/errorHandlingCheckoutModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/helpers/braintreeCreditCardSdkHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/helpers/creditCardAccountHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/helpers/creditCardFormFieldsHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/helpers/creditCardHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/helpers/creditCardPaymentProcessingHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/helpers/creditCardSessionAccountHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/braintreesdk/braintreeGooglePayModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/braintreesdk/braintreeGooglePayModelBuilder.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/braintreesdk/braintreeGooglePaySDK.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/components/googlePayCart.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/components/googlePayCheckout.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/components/googlePayList.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/components/googlePayPaymentProcessing.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/components/googlePaySessionAccount.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/constants/errorMessages.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/constants/googlePayPaymentProcessingConstants.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/errorhandler/errorHandlingBaseModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/errorhandler/errorHandlingCheckoutModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/googlePay.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/helpers/googlePayHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/helpers/googlePayPaymentProcessingHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/helpers/googlePaySDKHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/helper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/loaderHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/local/braintreesdk/braintreeLpmModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/local/braintreesdk/braintreeLpmModelBuilder.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/local/braintreesdk/braintreeLpmSDK.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/local/components/lpmPaymentProcessing.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/local/constants/errorMessages.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/local/errorhandler/lpmErrorHandler.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/local/helpers/lpmHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/local/helpers/lpmPaymentProcessorHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/local/lpm.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paymentMethodGeneral.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paymentMethodGeneralHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/braintreesdk/braintreePayPalSDK.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/components/payPalAccountPage.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/components/payPalButtonDisplayBehavior.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/components/payPalCartPage.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/components/payPalCheckoutPage.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/components/payPalList.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/components/payPalMiniCartPage.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/components/payPalProductPage.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/components/payPalSessionAccount.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/components/payPalStoredBillingAddress.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/errorhandler/errorHandlingBaseModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/errorhandler/errorHandlingCartModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/errorhandler/errorHandlingCheckoutModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/errorhandler/errorHandlingMiniCartModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/helpers/payPalAccountModelHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/helpers/payPalAccountPageHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/helpers/payPalBillingFormHelperGlobal.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/helpers/payPalCheckoutModelHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/helpers/payPalExpressModelHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/helpers/payPalListHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/helpers/payPalProductPageModelHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/helpers/payPalRequestsHelperGlobal.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/helpers/payPalSessionAccountHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/models/payPalAccountModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/models/payPalBaseModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/models/payPalCartModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/models/payPalCheckoutModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/models/payPalExpressModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/models/payPalProductPageModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/payPal.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/src/braintreesdk/braintreeSrcSDK.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/src/components/srcAccount.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/src/components/srcCart.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/src/components/srcCheckout.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/src/components/srcList.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/src/components/srcSessionAccount.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/src/constants/srcConstants.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/src/errorhandler/errorHandlingBaseModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/src/errorhandler/errorHandlingCartModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/src/errorhandler/errorHandlingCheckoutModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/src/helpers/srcButtonHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/src/helpers/srcHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/src/helpers/srcListHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/src/helpers/srcPaymentProcessingHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/src/models/srcAccountModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/src/models/srcBaseModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/src/models/srcCartModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/src/models/srcCheckoutModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/src/src.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/venmo/braintreesdk/braintreeVenmoModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/venmo/braintreesdk/braintreeVenmoModelBuilder.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/venmo/braintreesdk/braintreeVenmoSDK.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/venmo/components/venmoAccount.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/venmo/components/venmoButton.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/venmo/components/venmoCheckout.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/venmo/components/venmoList.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/venmo/components/venmoProcessing.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/venmo/components/venmoSessionAccount.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/venmo/constants/venmoConstants.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/venmo/errorhandler/errorHandlingBaseModel.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/venmo/helpers/venmoHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/venmo/helpers/venmoProcessingHelper.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/braintree/venmo/venmo.js","webpack:///./cartridges/int_braintree/cartridge/client/default/js/int_braintree.js"],"names":["braintreeApplePayModelBuilder","require","applePayPaymentProcessing","ErrorHandlingBaseModel","ErrorHandlingCheckoutModel","applePayErrorMessages","braintreeApplePayModelResponse","applePayMessages","initCheckout","errorHandlingCheckoutModel","error","NO_APPLE_PAY_BRAINTREE_CONFIGURATIONS","applePayErrorHandler","init","btApplePayModel","initCart","errorHandlingBaseModel","btApplePayConfigs","messages","module","exports","braintreeApplePaySDK","braintreeGeneral","isFtEnabled","btClientInstancePromise","apInstance","amount","braintreeClientInstancePromise","isFraudToolsEnabled","collectFraudData","response","Promise","resolve","customMessage","FRAUD_DATA_CELLECTION_ISNOT_ENABLED","initApplePay","ApplePaySession","createApplePayPayment","then","applePayInstance","canMakePaymentsWithActiveCard","merchantIdentifier","createPaymentDataRequest","applePayConfigs","onValidateMerchant","sessionEvent","performValidation","onPaymentAuthorized","tokenize","updateApplePayAmount","$","ajax","url","getOrderInfoUrl","async","type","dataType","success","data","window","location","reload","applePayHelper","braintreeApplePayModel","braintreeApplePayConfigs","getBraintreeApplePayConfigs","clientToken","message","createClientInstance","btClientInstance","braintree","applePay","create","client","createPaymentRequest","total","label","options","displayName","validationURL","token","payment","helper","paymentMethodGeneral","$applePayButton","document","querySelector","paymentData","$braintreeCartButtons","applePayCheckoutFormData","errHandlingModel","expandApplePayCheckoutFormData","csrfToken","append","name","value","nonce","deviceData","JSON","stringify","shippingAddress","billingAddress","processCartFlow","billingAddressData","paymentMethodName","parse","getAttribute","placeOrderUrl","checkoutFromCartUrl","checkoutFormFields","paymentFieldData","getPaymentFieldsData","createPaymentFormData","submitCustomerForm","email","contentType","processData","errorMessage","fieldErrors","length","forEach","index","keys","Object","replace","serverErrors","cartError","href","redirectUrl","err","errorHandlingModel","setAttribute","processCheckoutFlow","getElementById","storeFrontBillingData","getUpdatedStoreFrontBillingData","updateBillingFormValues","loaderInstance","applePayPaymentProcessingHelper","applePayPaymentProcessingConstants","applePayCart","applePayCheckout","$braintreeApplePayLoader","$continueButton","applePayEnabledOnCheckout","Boolean","loader","applePayModel","onTokenizedPayment","applePayFlow","getApplePayFlowId","removeActiveSessionPayment","FLOW_CHECKOUT_NAME","click","FLOW__CART_NAME","createApplePaySession","paymentDataRequest","isRequiredBillingContactFields","requiredBillingContactFields","isRequiredShippingContactFields","requiredShippingContactFields","session","onvalidatemerchant","event","merchantSession","completeMerchantValidation","catch","abort","onpaymentauthorized","show","tokenizedPayload","completePayment","STATUS_SUCCESS","TokenizedPaymentData","getTokenizedPaymentData","hide","STATUS_FAILURE","begin","onApplePayButtonClick","hideError","isBilligFiledsValid","result","fraudDataPayload","setApplePayDeviceData","canMakePayments","showApplePayButton","makeApplePayButtonDisabled","addEventListener","hideApplePayTab","errorMessages","$errorContainer","prototype","showErrorByObject","msg","code","CLIENT_GATEWAY_NETWORK","createErrorNotification","showErrorByMessage","addClass","scrollTo","empty","call","$topErrorMessageText","$topErrorMessageWrapper","textContent","style","display","innerHTML","$applepayDataMethod","$phoneField","braintreeApplePayButtonConfigs","$braintreeApplePayDeviceData","classList","add","removeSessionNonce","isValidInputField","toggleContinueButtonOnBillingPage","applePayContent","continueButtonToggle","getShippingAddress","shippingContact","streetAddress","addressLines","extendedAddress","locality","region","administrativeArea","toUpperCase","postalCode","decodeURIComponent","countryCodeAlpha2","countryCode","firstName","givenName","lastName","familyName","phone","phoneNumber","emailAddress","getBillingAddress","billingContact","payload","shippingAddressData","creditCardListLoader","showAddNewCardOptions","$addNewCardButton","$addNewCardBlock","removeCard","e","target","get","UUID","remove","newDefaultAccount","fontWeight","fail","removeErrorMessage","makeDefaultCard","id","paymentMethodID","newDefaultProperty","toRemoveDefaultProperty","initAccount","$creditCardAccountBtLoader","creditCardListLoaderExists","on","authorization","dataCollector","kount","getBtCustomerPaymentMethods","clientInstance","vaultManager","fetchPaymentMethods","defaultFirst","clientTokenPromise","createGeneralClientInstancePromise","isCheckoutPage","btAccountBusinessLogic","fillPaymentSammaryContainer","initPaymentMethodTabClickBehavior","creditCardBusinessLogic","creditCardOnAccountEnabled","creditCardEnabledOnCheckout","payPalBusinessLogic","payPalEnabledOnCheckout","payPalEnabledOnProduct","payPalEnabledOnCart","payPalEnabledOnAccountPage","initProduct","initMiniCart","googlePayBusinnessLogic","googlePayEnabledOnCheckout","googlePayEnabledOnCart","applePayBusinessLogic","applePayEnabledOnCart","venmoBusinessLogic","isVenmoEnabledOnAccountPage","isVenmoEnabledOnBillingPage","initBillingCheckout","srcBusinessLogic","isSrcEnabledOnAccountPage","isSrcEnabledOnCartPage","isSrcEnabledOnBillingPage","initCartCheckout","lpmBusinessLogic","isLpmEnebledOnBillingPage","isDebugMode","console","consoleLog","log","consoleError","apply","arguments","bu","pdpOnlickForAsignedPaypalPayment","$bundleItem","getOptions","$productContainer","find","map","$elOption","urlValue","val","selectedValueId","optionId","toArray","pid","$btn","closest","form","quantity","items","text","parseInt","childProducts","method","responseJSON","getSelectedData","selectEl","getElementsByTagName","option","i","selected","attributes","postData","formData","FormData","key","res","errorInstances","createErrorInstance","containerElement","callback","Constructor","cb","push","containerEl","braintreeCreditCardSDK","creditCardFormFieldHelper","braintreeCreditCardSdkHelper","hostedFieldsInstance","orderData","sitePrefs","isSkip3dSecureLiabilityResult","is3dSecureEnabled","getShippingAdditionalInfo","orderAddress","workPhoneNumber","shippingGivenName","recipientName","split","slice","join","shippingSurname","shippingPhone","line1","line2","city","state","updateOrderData","shippingAdditionalInfo","initCreditCardFields","hostedFieldsParams","styles","getHostedFieldsStyles","configs","getHostedFieldsConfig","createHostedFields","hfInstance","clearHostedFields","tokenizationOptions","reject","customError","createTokenizationOptions","btTokenizePayload","apply3dSecureValidation","bin","billingData","liabilityShifted","threeDSecureDataValidationPayload","processNewCard","is3dSecureDisabled","orderAmount","details","processStoredCard","processSessionCard","isBasketDataValid","customErrorMessage","getClientInstancePromise","braintreeCreditCardModel","creditCardHelper","braintreeCreditCardConfigs","getCheckoutBraintreeCreditCardConfigs","btCreditCardModel","btCreditCardConfigs","hostedFields","fields","threeDSecure","version","verifyCard","surname","address1","address2","stateCode","country","additionalInformation","onLookupComplete","next","tokenizeOption","clear","creditCardVaultManager","addNewCreditCardLoader","creditCardAccountHelper","$braintreeCreditCardLoader","$customCreditCardErrorContainer","ccMessages","rejectIfCardExistsInVault","clientInstancePromise","btPayload","errorList","payloadDetails","lastFour","toString","cardType","toLowerCase","isNewCardCanBeStored","newCardCanBeStored","CARD_ALREADY_EXIST_ERROR_MESSAGE","storeNewCreditCard","customErrorList","CLIENT_MISSING_GATEWAY_CONFIGURATION","btModelPayload","tokenizePayload","$addCreditCardForm","addCreditCardFormUrl","attr","setCardHiddenFields","serialize","creditCardErrorHandler","finally","preventDefault","stopPropagation","initCreditCartAccountLoaders","braintreeCreditCardLoaderExists","creditCardMessages","addNewCreditCardFormExists","removeFromDomCardsWhichAreNotInVaultMgr","generalHfValidation","$braintreeCreditCardFieldsContainer","braintreeCreditCardConfig","isHostedFieldsWasInited","isBraintreeCreditCardConfigValid","querySelectorAll","el","generalHostedFieldsValidation","$braintreeDeviceData","creditCardVaultManagerComponent","creditCardPaymentProcessingHelper","saveCreditCardBlockManipulation","saveCreditCard","displaySaveCreditCardBlock","$saveCreditCard","$braintreeSaveCardContainer","checked","cardListChange","btUtils","$creditCardList","getCreditCardListContainer","$braintreeCreditCardNonce","getCreditCardNonceFieldContainer","$braintreeCardPaymentMethod","creditCardOption","selectedOptions","creditCardOptionID","creditCardFieldsToDisplayArray","getCCFieldsToDisplay","asArray","creditCardHostedFieldsArray","getCCFields","creditCardFiledsToDisplayObject","asObject","selectedCreditCard","showSaveCreditCardBlock","hideCardElements","showCardElements","setCardFields","hideStoredCardAsSessionCard","$sessionCreditCard","isSessionCardVisible","css","sessionCardType","sessionCardLastFour","storedAsSessionCardExists","hideAlreadyStoredCard","hideSaveCreditCardBlock","creditCardListExist","creditCardPaymentProcessingConstants","processCreditCard","customErrorMessages","basketDataValidResponse","TOTAL_BASKET_AMOUNT_INVALID","getBillingAddressFormValues","isCheckoutFlow","creditCardFlow","getCreditCardFlowID","FLOW_NEW_CARD_NAME","btPayloadDetails","newCardType","newCardLastFour","fillCreditCardFormWithPayloadData","setSessionCreditCardDataAttributes","fillSessionCreditCardFormWithPayloadData","displayStoredCreditCardList","markAsSelectedSessionAccount","FLOW__SESSION_CARD_NAME","FLOW_JS_STORED_CARD_NAME","getNonceFromStoredCard","btStoredCardPayload","threeDSecureInfo","fill3DsData","WROND_CHECKOUT_FLOW","submitPayment","isCreditCardTabActive","isActiveCreditCardTab","isTrusted","keyCode","creditCardSessionAccountHelper","clearSessionAccount","sessionOption","defaultCreditCard","getOptionByDataDefault","creditCardFieldstoDisplay","creditCardFieldsAsArray","getSessionAccountOption","sessionLastFour","sessionType","showAlreadyStoredCard","clearCreditCardFields","clearCreditCardNonceField","setCreditCardFieldsToDisplay","ccAccount","CreditCardVaultManagerModel","CreditCardVaultManagerModelInstance","storefrontCardArray","each","$card","getCardsWhichAreNotInVault","cardsWhichAreNotInVault","card","isCreditCardExistOnStorefrontAndVault","isCardExists","personalizedClientTokenPromise","customerPaymentMethodsFromVaultPromise","getCardsFromVaultMgrPromise","vaultMgrPaymentMethods","cardPmArray","paymentMethod","isCardType","getCardFromVaultMgrByData","pmDetails","getCardFromStorefrontByData","storefrontCardList","storedStorefrontCard","toLocaleLowerCase","cardPaymentMethods","arrayOfNotInVaultCards","storefrontCard","sfCardType","sfLastFour","foundCard","vaultMgrCard","vaultMgrCardPromise","cardFromVaultMgr","getNonceByCardData","braintreeCreditCardModelBuilder","creditCardList","creditCardFields","creditCardPaymentProcessing","creditCardAccount","btCreditCardModelResponse","creditCardFormFieldsHelper","BRAINTREE_ERROR_SELECTOR","BRAINTREE_VALID_SELECTOR","BRAINTREE_FOCUSED_SELECTOR","getArrayOfFieldContainers","arrayOfFormFields","collectionOfCreditCardFields","arrayOfFieldContainers","fieldContainer","fieldName","makeFormFieldsInvalid","arrayOfInvalidFieldsFrom","arrayOfInvalidFormFields","$field","makeAllFormFieldsInvalid","arrayOfCreditCardFieldNames","makeAllFormFieldsValid","arrayOfCreditCardFields","creditCardFormFieldValidation","ALL_HOSTED_FIELDS_FIELDS_EMPTY","HOSTED_FIELDS_FIELDS_INVALID","errorHtml","convertBtFromFieldsToDw","arrayOfBtFormFields","creditCardFieldsMap","cardholderName","number","cvv","expirationDate","braintreeFieldName","convertedFeeldArray","allFieldsAreEmptyErrorBehavior","someFieldsAreInvalidErrorBehavior","btInvalidHostedFields","convertedFormFields","processBraintreeHostedFiledsErrors","errorPayload","braintreeErrorCode","invalidFields","invalidFieldKeys","errorMsg","secure3DFailed","includes","tokenizePayloadDetails","$cardOwnerToDisplay","$cardNumberToDisplay","$cardCvvToDisplay","$cardExpirationToDisplay","ccToDisplayFieldsAsObject","cardOwnerToDisplay","cardNumberToDisplay","cardCvvToDisplay","cardExpirationToDisplay","ccToDisplayFieldsAsArray","values","$braintreeCardOwner","$braintreeExpirationDate","$braintreeCardNumber","$braintreeCvv","ccFieldsAsObject","braintreeCardOwner","braintreeExpirationDate","braintreeCardNumber","braintreeCvv","ccFieldsAsArray","selectedCard","cacheCardFields","cartNumber","dataset","expiration","owner","cardFields","input","color","selector","save","isSave","isHide","braintreeCreditCardFieldsConfigs","convertCreditCardType","charAt","$creditCardAccount","braintreeResponse","btResponse","$creditCardFieldsCardNumber","btResponseDetails","expirationMonth","expirationYear","substr","usedCreditCardAccount","isSavedCard","$newCCAccount","removeAttribute","selectedOptionValue","selectedOption","creditCardFlowID","newCardID","sessionCardID","storedCardID","getSelectedOption","contains","$selectedOption","$braintreeIs3dSecureRequired","activateCcTab","hasClass","is","getStoredCardByData","$foundCard","_","$el","storedCardType","storedCardLastFour","$storedCard","flag","creditCardFieldsArray","braintreeGooglePaySDK","googlePaymentInstance","paymentsClient","initGooglePay","googleMerchantId","createGooglePayment","gpInstance","allowedPaymentMethods","isReadyToPay","apiVersion","apiVersionMinor","parseResponse","googlePayUpdateAmount","config","initPaymentsClient","instanceType","google","payments","api","PaymentsClient","environment","getPaymentsClient","braintreeGooglePayModel","googlePayHelper","googlePayErrorMessages","braintreeGooglePayConfigs","getBraintreeGooglePayConfigs","btGooglePayModel","btGooglePayConfigs","NO_GOOGLE_PAY_BRAINTREE_CONFIGURATIONS","googlePaySDKHelper","googlePayOptions","createGooglePayOptions","googlePayment","requestObject","transactionInfo","currencyCode","currency","totalPriceStatus","totalPrice","String","merchantInfo","merchantName","shippingAddressRequired","isShippingAddressRequired","shippingAddressParameters","allowedCountryCodes","phoneNumberRequired","emailRequired","merchantId","googlePayConfigs","googlePayBillingAddressData","googlePayShippingAddressData","googlePayNonce","googlepayPaymentType","googlePayCardDescription","googlepayCheckoutFormData","errHandlerModel","$braintreeGooglePayLoader","expandGooglePayCheckoutFormData","paymentFieldsData","sessionStorage","setItem","paymentType","description","errorHandlerModel","$googlepayButton","$googlepayNonce","$googlepayCardDescription","$braintreeGooglepayPaymentType","$googlePayBillingAddress","$btGooglepayAccountsList","googlePayAccountListExist","googlePayContentTabHandler","googlePayPaymentProcessingHelper","googlePayCart","googlePayCheckout","googlePaySessionAccount","googlePayPaymentProcessingConstants","googlePayModel","googlePayConfig","onTokenizePayment","googlepayNonce","gpCardDescription","createGooglepayBillingAddressData","googlePayFlow","getGooglePayFlowId","createGooglepayShippingAddressData","showGooglepayAccount","onGooglePaymentButtonClicked","showOrderTotalError","cardPaymentMethod","parameters","billingAddressRequired","billingAddressParameters","format","loadPaymentData","googlePayErrorHandler","setGooglePayDeviceData","button","createButton","onClick","appendChild","$googlepayContent","cardDescription","$newGPAccount","$gpAccount","$sessionAccount","ORDER_TOTAL_0","GOOGLE_PAY_WINDOW_CLOSED","FLOW_NEW_GP_ACCOUNT_NAME","zeroAmountErrorMsg","statusCode","statusMessage","braintreeGooglePayModelBuilder","googlePayList","googlePayPaymentProcessing","braintreeGooglePayModelResponse","googlePayMessages","errorHandlerBaseModel","errorHandlerCheckoutModel","triggerGooglePayTab","braintreeGooglePayButtonConfigs","$braintreeGooglePayDeviceData","isActiveGooglePayTab","sessionPaymentMethodId","$googlePayTab","googlePayFlowId","flows","checkout","cart","newGpAccount","paymentMethodData","info","shippingData","gpOptions","googlePayVersion","braintreeConstants","PAYMENT_METHOD_ID_PAYPAL","PAYMENT_METHOD_ID_VENMO","PP_FUNDING_SOURCE_CARD","PP_FUNDING_SOURCE_PAYLATER","PP_DEBIT_CREDIT_PAYMENT_TYPE","PP_PAYLATER_PAYMENT_TYPE","initCartUpdateEvent","$grantTotal","currentGrantTotalValue","newGrantTotalValue","updateCartTotals","createEvent","initEvent","dispatchEvent","stage","hash","substring","paymentMethodChangeHandle","currentTab","$tabContent","tab","getPaymentMethodToLowerCase","element","updateCheckoutView","$paymentSummary","htmlToAppend","order","billing","selectedPaymentInstruments","selectedPaymentInstrument","paymnetMethodId","fundingSource","paymentInstrument","maskedGiftCertificateCode","maskedCreditCardNumber","braintreePaypalEmail","braintreeVenmoUserId","priceTotal","field","checkValidity","updatePaymentMethodTab","braintreePaymentMethod","content","children","reduce","accumulator","item","elem","lastIndexOf","isNonceExist","pmName","$nonce","nonceValue","$tab","isActiveTab","accountsLoader","removeBtPayment","$loaderContainter","trigger","paymentFields","fieldsData","paymentFieldsParsed","entries","entry","setDefaultProperty","params","Array","activePaymentMethods","methodId","helpers","PayPal","Venmo","GooglePay","CREDIT_CARD","SRC","ApplePay","activePM","showCartErrorMsg","$billingFormFields","nodeName","change","$selectContainer","selectedOptionIndex","selectedIndex","addressData","dwfrm_billing_addressFields_firstName","dwfrm_billing_addressFields_lastName","dwfrm_billing_addressFields_address1","dwfrm_billing_addressFields_address2","dwfrm_billing_addressFields_city","dwfrm_billing_addressFields_postalCode","dwfrm_billing_addressFields_states_stateCode","dwfrm_billing_addressFields_country","dwfrm_billing_contactInfoFields_phone","lpmHelper","braintreeLpmSDK","lpmConfigs","getBraintreeLpmConfigs","lpmInstance","initLpm","createLpmPayment","localPaymentInstance","createLpmClickListener","updateLpmOrderData","updatedShippingAddress","updatedAmount","createRequestData","assign","onPaymentStart","continueCallback","startPayment","reqData","braintreeLpmModel","lpmErrorMessages","braintreeLpmConfigs","btLpmModel","NO_LPM_BRAINTREE_CONFIGURATIONS","localPayment","fallback","fallbackUrl","buttonText","address","lpmPaymentProcessingHelper","lpmErrorHandler","$braintreeLpmLoader","lpmModel","startLpmPayment","startPaymentPayload","hideProcessingMsg","showFinalProcessingMsg","confirmPayment","processLpmConfirmForm","processStartLpmPaymentError","onLpmButtonClick","$email","localPaymentMethodName","handleZeroAmountOnCheckout","getJSON","showProcessingMsg","braintreeErrorMessages","responseText","processingMsg","finalProcessingMsg","getPaymentDetailsParameter","jQuery","isEmptyObject","paymentConfirmUrl","lpmName","correlation_id","correlationId","createConfirmForm","param","appendTo","body","action","orderID","orderToken","splitUrl","paramsString","searchParams","URLSearchParams","formParam","submit","braintreeLpmModelBuilder","lpmPaymentProcessing","braintreeLpmModelResponse","payPalStoredBillingAddressComponent","paymentMethodGeneralHelper","srcHelper","venmoHelper","payPalListHelper","CHECKOUT_PAGE","CART_MINICART_PRODUCT_PAGE","getApplicablePageType","isCartMiniCartProductPage","getElementsByClassName","currentPageType","applycablePageType","$billingElement","$btExpressCheckoutPayPalButtonWrapper","$btAccountPayPalButtonWrapper","$summaryDetails","createErrorContainerAfterPayPalButton","payPalButtonSelector","createElement","$payPalButton","cssText","parentNode","insertBefore","nextSibling","selectedMethodID","$payPalAccountList","localPaymentMethodsList","selectDefaultBillingAddressOption","$selectedPayPalAccountOption","disableBillingAddressFunctionality","isAccountListHidden","hideSubmitPaymentButton","isNewPayPalAccountOptionSelected","showSubmitPaymentButton","displaySelectedStoredBillingAddress","srcContentTabHandler","enableBillingAddressFunctionality","isBtVenmoAccountsList","isSessionAccountExist","venmoContentTabHandler","createCustomerFormData","checkoutCustomerFormFields","customerFormData","buttonsWrapper","isCustomerEmailEmpty","submitCustomerUrl","hideBillingAddressManipulationButtons","showBillingAddressManipulationButtons","disableBillingAddressList","enableBillingAddressList","hideBillingAddressForm","showBillingAddressForm","hidePhoneField","showPhoneField","createPayPalCheckoutInstance","payPalPaymentProcessingModal","payPalCheckoutConfigs","payPalCheckoutInstanceConfigs","paypalCheckout","createPayPalStyleConfigurations","btPayPalConfigurations","payPalButtonStyleConfigs","paypalConfig","height","shape","layout","tagline","payPalFormValidationConrol","validateActions","isFormValid","enable","disable","getVaultModeButtonConfigurations","btPayPalCheckoutInstance","vaultModePayPalButtonConfigs","actions","onPayPalButtonClickCallback","createBillingAgreement","paymentObject","onOrderCreateCallback","createPayment","onApprove","tokenizePayment","onApprovePaymentCallback","onCancel","onCancelPaymentCallback","onError","onErrorPaymentCallback","validate","getCheckoutModeButtonConfigurations","createOrder","payPalButtonRendering","isVaultMode","btPayPalCheckoutInstancePromise","paypalButtonConfigs","paypalButtonSdkUrlConfigs","changePMButtonEnabled","payPalCheckoutSdkConfigs","payPalVaultSdkConfigs","isPayPalSDKLoaded","loadPayPalSDK","paypal","Buttons","render","PayPalAccountModel","payPalAccountPageHelper","initAddNewPayPalAccountEvent","PayPalAccount","$addNewPayPalAccountButton","showPayPalAccountBtn","accountPayPalButtonInited","initPayment","initRemovePayPalAccountEvent","initMakeDefaultPayPalAccountEvent","$this","makeDefaultUrl","paymentMehtodId","paymentProcessorId","loaderContainer","payPalConfigurations","addPayPalAccountUrl","flow","requestBillingAgreement","$csrfToken","$loaderContainer","ErrorHandling","isVenmoAccountBlockExists","dynamicBasketProductQuantity","hidePayPalButton","showPayPalButton","isZeroPdpProductPrice","$productPriceSelector","price","isBasketNotEmpty","isAddToCartButtonDisabled","$addToCartButton","disabled","getMiniCartQuantity","$miniCartQuantitySelector","isCurrentTotalBasketPriceZero","$basketTotalAmount","basketTotalAmount","paypalMinicartButtonBehavior","paypalMinicartButton","initProductPage","addToCartButtonDisabled","zeroProductPrice","basketNotEmpty","$miniCartQuantityContainer","miniCartQuantity","addToCartButtonEnabled","basket","numItems","PayPalCartModel","ErrorHandlingCartModel","PayPalExpress","generateFraudData","PayPalCheckoutModel","payPalAccountList","payPalConfigs","PayPalCheckoutPayment","$shippingCountry","$shippingState","shippingStateVal","$editShippingButton","$submitShippingButton","$paypalTab","payPalCheckoutWasInited","payPalSessionAccountComponent","isVaultModeEnabled","isOrderIntentEnabled","getAccountType","setNonceInputValue","hideSavePayPalAccountBlock","displaySavePayPalAccountBlock","displayPayPalButton","hidePayPalButon","displayContinueButton","hideContinueButon","isBuyerAuthenticated","selectPayPalCheckoutTab","setBraintreePayPalEmailInput","handleStoredAccountsShowing","billingFormHelper","$savePaypalAccountCountainer","$braintreePayPalNonce","$paypalButton","$payPalTab","$braintreePaypalEmail","constantList","SESSION_ACCOUNT","NEW_ACCOUNT","STORED_ACCOUNT","accountsListChange","accountType","storedAccountWithSessionAccountEmail","getStoredAccountBySesionAccountEmail","buyerAuthentificated","vaultModeEnabled","orderIntentEnabled","removeEventListener","selectedOptionNonceValue","selectedAccountEmail","buyerAuthenticated","PayPalExpressModel","ErrorHandlingMiniCartModel","initPayPalOnMiniCart","$paypalMinicartButton","isPayPalButtonWasInited","$minicartPopover","observer","MutationObserver","mutations","mutation","addedNodes","observe","childList","PayPalProductPageModel","payPalButtonDisplayBehavior","PayPalProductPage","payPalSessionAccountHelper","$braintreePaypalAccount","handlePaypalTabBehavior","getBillingAddressAsString","$selectedPayPalPayment","selectedBillingAddressStr","selectedBillingAddressObj","billingAddressRepresentationString","lastname","selectedOptionClassList","billingAddressAsString","$storedPayPalAddressOption","storedPayPalAddressOptionExists","prop","getMatchingBillingAddressId","matchingBillingAddressId","billingAccountsSelector","$braintreePaypalAccountList","showBillingAddressIsNotSupported","PAYPAL_BILLING_ADDRESS_NOT_SUPPORTED","showZeroAmountOnCart","CUSTOM_PAYPAL_ZERO_AMOUNT_ERROR","showZeroAmountOnCheckout","savePayPalAccount","paymentFormData","renderPayPalAccounts","renderAccountsUrl","hidePaypalAccountBtn","$addNewPaypalAccountBtn","$paypalAccountButtonWrapper","addPayPalAccountsToTheTemplate","accountListTemplate","$payPalAccountsContainer","throwCartUpade","initRemovePayPalAccountButtonsListners","$allRemovePayPalAccountButtons","removePayPalAccountButton","$addPaypalAccountBtn","$paypalAccountWrapper","storePaymentAsSessionPayment","sessionAccountEmail","$accountListBlock","$braintreePaypalNonceInput","$sessionPyapalAccount","setSessionAccountOptionDefault","$savedPayPalAccountList","sessionPaypalAccount","paypalAccountsList","sessionEmail","mapBraintreeWithDwBillingAddress","braintreeAddress","btDetails","$btPaymentMethodWrapper","dwBillingFormFieldNames","createBillingAddressData","copyPayPalBillingAddressToDw","braintreeBillingAddress","$braintreePaypalBillingAddressInput","paypalBillingData","createBillingAddressFormData","paypalBillingFormFields","billingAddressFormData","fillPayPalPaymentFields","$braintreePaypalEmailInput","$sessionPaypalAccount","btEmail","fillFraudDataInput","$braintreePaypalRiskDataInput","appendCsrfTokenToFormData","appendBraintreePaypalFundingSourceToFormData","appendEmailAsStringToFormData","appendFraudDataToFormData","billingFromData","fraudData","appendBillingAddressAsStringToFormData","appendBtPaymentFieldsToFormData","appendToUrl","newUrl","indexOf","encodeURIComponent","hidePayPalButtons","payPalButtonsContainer","hideAccount","$accountOption","hideSaveNewAccountContainer","savePaypalAccountCheckbox","savePaypalAccountContainer","displayAllStoredAccounts","braintreePaypalAccountsList","addBillingAddressOnPaymentOptionLevel","btBillingAddress","createShippingAddressData","shippingAddressPayPalData","appendShippingDataAsStringToFormData","paypalButtonsWrapper","getSavedPaypalAddress","buttonSelector","payPalAccountData","paypalCheckoutModelHelper","intent","customerAuthenticated","$storedAccountOptionWithSameEmail","removeProductFromCart","removeFromCartUrl","productRepresentationObj","addProductToCart","getBasketDataPromise","getBasketData","submitPaymentDataToServerPromise","submitPaymentUrl","billingFormData","ErrorModelInstance","done","$btSavePaypalAccountContainer","$paypalContent","$btPayPalBillingButton","hidePaypalSmartButtonFunctionality","showPaypalSmartButtonFunctionality","$defaultOption","isSelectedPaypalAccount","isChangePmButton","$btUsedPayPalAccount","PayPalBaseModel","payPalAccountModelHelper","baseResponse","payPalAccountModelInstance","paypalAccountFormFields","payPalBraintreeAddressData","paypalAccountFormData","addresses","payPalButtonConfigs","orderCreateParams","enableShippingAddress","billingAgreementDescription","braintreePayPalSDK","requestsHelper","fraudDataPromise","fraudDataCollectionDisabled","basketDataUrl","paypalHandle","placeOrderStageUrl","basketData","ppDetails","ppShippingAddress","savedPaypalAddress","mainPayPalConfigurations","paymentObjectData","locale","billingAgreementDetails","shippingAddressEditable","shippingAddressOverride","fundingSourceResponse","isChangePaymentButtonActive","enableFundingList","disableFundingList","payPalSDKConfigObject","components","commit","undefined","payPalVaultSdkConfigsObject","vault","CurrentPayPalPaymenProcessorModelInstance","payPalExpressModelHelper","payPalCheckoutModelHelper","paypalListHelper","PayPalCheckoutPaymentModel","checkoutInstanceConfigs","autoSetDataUserIdToken","PayPalCheckoutPaymentModelInstance","isBuyerAuthenificated","$shippingAddress","requestHelper","isUseSavedPaypalAddress","PayPalExpressInstance","$payPalButtonWrapper","$braintreePayPalFundingSource","braintreePayPalFundingSource","paypalCheckoutFormFields","payPalProductPageModelHelper","addProductToCartResponse","addedProductFromPdp","uuid","pliUUID","actionUrls","removeProductLineItemUrl","payPalProductPage","payPalMiniCartPage","payPalCartPage","payPalAccountPage","payPalCheckoutPage","createVisaCheckout","visaCheckout","visaCheckoutInitialized","SrcBaseModelInstance","visaCheckoutInstancePromise","visaCheckoutInstance","srcInitOptions","createInitOptions","getInitOptionsObject","V","onTokenizeCallback","srcErrorHandler","SrcAccountModel","$braintreeSrcLoader","$braintreeSrcButton","srcButtonConfigurations","getBraintreeSRCButtonConfigs","$braintreeSrcDeviceDataInput","srcLoader","SrcAccountModelInstance","initSrcButton","SrcCartModel","$braintreeCartSrcButton","$totalAmount","errorHandlingCartModel","SrcCheckoutModelInstance","zeroAmountSrcButtonBehavior","SrcCheckoutModel","$braintreeBillingPageSrcButton","isSrcSessionAccountExist","srcListHelper","$srcAccountList","srcListExist","srsListStateHandler","$srcSessionAccount","$srcButton","$srcCardDescription","$braintreeSrcCardType","$braintreeSrcLastFourDigits","$braintreeSrcCreditCardNumber","showSrcSessionAccount","srcPayload","handleSaveSrcAccountCheckbox","setIsHideContinueButtonAttr","FLOW_NAME_ACCOUNT","FLOW_NAME_CART_CHECKOUT","FLOW_NAME_BILLING_CHECKOUT","CUSTOM_SRC_ZERO_AMOUNT_ERROR","handleCheckoutFromCartError","showZeroAmountSrcButton","hideZeroAmountSrcButton","handleZeroAmountButtonVisibility","totalAmount","addZeroAmountButtonEventListenerOnCart","$zeroAmountButton","addZeroAmountButtonEventListenerOnCheckout","initTotalAmountElementObserver","totalAmountElement","subtree","Number","parseFloat","srcButtonHelper","braintreeSrcButtonConfigs","createSrcShippingAddressData","createSrcBillingAddress","userData","srcBillingAddress","userEmail","createSrcCheckoutFormData","srcCheckoutFormData","srcResponseData","createSrcFormData","responseData","srcData","userFirstName","userLastName","updateStorefrontBillingData","srcBillingData","storefrontBillingData","dwfrm_billing_contactInfoFields_email","isSrcTabActive","srcOptionId","$srcZeroAmountButton","$alertInfo","$braintreeCartZeroAmountSrcButton","$braintreeBillingPageZeroAmountSrcButton","$accoutnListBlock","$saveSRCAccountCheckbox","$saveSRCAccountCheckboxContainter","$srcContent","isSessionCardAlreadyStored","srcSessionAccount","isSrcSessionCardExist","isAddNewOptionSelected","isSrcSessionCardAlreadyStored","srcConstants","getSrcFlowName","srcFlowName","checkoutFromCartCall","SrcBaseModel","srcMessages","$addSrcAccountForm","addSrcFormUrl","$srcNonce","braintreeSrcSdkButtonInit","braintreeSrcSDK","updateBasketData","paymentRequest","subtotal","settings","cardBrands","acceptCanadianVisaDebit","shipping","collectShipping","setFraudData","dataCollectorInstance","srcPaymentProcessingHelper","billingAddressString","srcFormData","always","srcSessionAccountComponent","$srcBillingAddress","srcAccount","srcCardList","checkoutComponent","cartComponent","braintreeSrcConfigs","braintreeVenmoSDK","venmoProcessing","isBrowserSupported","initVenmo","$venmoButton","isBillingPage","createVenmo","venmoInstance","checkBillingForm","checkZeroAmount","processVenmo","braintreeVenmoConfig","braintreeVenmoModel","braintreeVenmoButtonConfigs","getBraintreeVenmoButtonConfigs","btVenmoModel","venmoClientInstance","venmo","allowNewBrowserTab","allowDesktop","ignoreHistoryChanges","processResultsDelay","venmoButton","venmoLoader","makeDefaultVenmo","removeVenmoPayment","removeIsNotAllowedMsg","createVenmoAccountFormData","userId","venmoAccountFormFields","venmoAccountFormData","storeNewVenmoAccount","venmoAddAccountHandlerUrl","username","hideVenmoAccountBtn","tplData","isVenmoButtonEnabledOnAccountPage","$braintreeVenmoLoader","showVenmoAccountBtn","venmoAccountButtonInited","generalVenmoValidation","isBraintreeVenmoConfigValid","generalValidation","setVenmoDeviceData","handleNoBrowserSupport","venmoCheckoutButtonInited","venmoList","venmoSessionAccount","$braintreeVenmoNonce","$braintreeVenmoUserId","$submitShippingBtn","$venmoContent","$venmoBillingInput","$venmoAccountContainer","$sessionVenmoAccount","$newVenmoAccount","hashChange","createLoaderContainter","history","updateBillingAddressFormValues","attributeName","checkoutStage","oldValue","showVenmoAccount","attributeOldValue","$btVenmoAccountsList","isHideVenmoButtonAttribute","venmoAccount","venmoCheckout","venmoConstants","venmoProcessingHelper","venmoData","venmoFlowName","getVenmoFlowName","$braintreeVenmoSessionAccount","$venmoAccountBlock","btVenmoAccountsList","defaultOption","braintreeVenmoNonce","braintreeVenmoBilling","$venmoErrorContainer","handleNoBrowserSupportErrorOnAccount","VENMO_BROWSER_NOT_SUPPORTED","hideVenmoTab","parentElement","firstElementChild","$venmoAccountWrapper","showCheckoutErrorMessage","$addVenmoAccountBtn","$target","className","inputNames","$braintreeVenmoDeviceData","$billingForm","VENMO_ZERO_AMOUNT_ERROR","$saveVenmoAccountCheckboxContainer","$saveVenmoAccountCheckbox","venmoOptionId","braintreeVenmoModelBuilder","btVenmoModelResponse"],"mappings":"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","file":"int_braintree.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./cartridges/int_braintree/cartridge/client/default/js/int_braintree.js\");\n","'use strict';\r\n\r\nvar braintreeApplePayModelBuilder = require('./braintreesdk/braintreeApplePayModelBuilder');\r\n\r\nvar applePayPaymentProcessing = require('./components/applePayPaymentProcessing');\r\n\r\n// Models\r\nvar ErrorHandlingBaseModel = require('./errorhandler/errorHandlingBaseModel');\r\nvar ErrorHandlingCheckoutModel = require('./errorhandler/errorHandlingCheckoutModel');\r\n\r\nvar applePayErrorMessages = require('./constants/errorMessages');\r\n\r\nvar braintreeApplePayModelResponse;\r\nvar applePayMessages;\r\n\r\n/**\r\n * Inits Apple Pay on the Checkout Page\r\n */\r\nfunction initCheckout() {\r\n var errorHandlingCheckoutModel = new ErrorHandlingCheckoutModel(applePayMessages);\r\n\r\n if (!braintreeApplePayModelResponse || braintreeApplePayModelResponse.error) {\r\n var error = braintreeApplePayModelResponse.error || applePayErrorMessages.NO_APPLE_PAY_BRAINTREE_CONFIGURATIONS;\r\n errorHandlingCheckoutModel.applePayErrorHandler(error);\r\n }\r\n\r\n applePayPaymentProcessing.init(\r\n braintreeApplePayModelResponse.btApplePayModel,\r\n errorHandlingCheckoutModel\r\n );\r\n}\r\n\r\n/**\r\n * Inits Apple Pay on the Cart Page\r\n */\r\nfunction initCart() {\r\n var errorHandlingBaseModel = new ErrorHandlingBaseModel(applePayMessages);\r\n\r\n if (!braintreeApplePayModelResponse || braintreeApplePayModelResponse.error) {\r\n var error = braintreeApplePayModelResponse.error || applePayErrorMessages.NO_APPLE_PAY_BRAINTREE_CONFIGURATIONS;\r\n errorHandlingBaseModel.applePayErrorHandler(error);\r\n }\r\n\r\n applePayPaymentProcessing.init(\r\n braintreeApplePayModelResponse.btApplePayModel,\r\n errorHandlingBaseModel\r\n );\r\n}\r\n\r\n/**\r\n * Inits Apple Pay on the Cart/Billing-Checkout Pages\r\n */\r\nfunction init() {\r\n braintreeApplePayModelResponse = braintreeApplePayModelBuilder.init();\r\n\r\n if (!braintreeApplePayModelResponse.error) {\r\n applePayMessages = braintreeApplePayModelResponse.btApplePayConfigs.messages;\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n init,\r\n initCart,\r\n initCheckout\r\n};\r\n","'use strict';\r\n\r\n/* global Promise braintree $ */\r\n\r\nvar applePayErrorMessages = require('../constants/errorMessages');\r\n\r\nvar braintreeApplePaySDK = require('./braintreeApplePaySDK');\r\nvar braintreeGeneral = require('../../braintreeGeneral');\r\n\r\n// Global variables\r\n// Is Froud tools enabled\r\nvar isFtEnabled;\r\nvar btClientInstancePromise;\r\nvar apInstance;\r\nvar amount;\r\n\r\n/**\r\n * Init braintree Apple Pay model\r\n * @param {Promise} braintreeClientInstancePromise Braintreee client instance promise\r\n * @param {boolean} isFraudToolsEnabled Is fraud tools enabled value\r\n */\r\nfunction init(braintreeClientInstancePromise, isFraudToolsEnabled) {\r\n braintreeApplePaySDK.init(braintreeClientInstancePromise);\r\n\r\n btClientInstancePromise = braintreeClientInstancePromise;\r\n isFtEnabled = isFraudToolsEnabled;\r\n}\r\n\r\n/**\r\n * Returns fraud data from dataCollector payload\r\n * @returns {Object} Payload with fraud data\r\n */\r\nfunction collectFraudData() {\r\n var response;\r\n\r\n if (isFtEnabled) {\r\n response = braintreeGeneral.collectFraudData(btClientInstancePromise);\r\n } else {\r\n response = Promise.resolve({\r\n customMessage: applePayErrorMessages.FRAUD_DATA_CELLECTION_ISNOT_ENABLED\r\n });\r\n }\r\n\r\n return response;\r\n}\r\n\r\n/**\r\n * Preparing Apple Pay payment\r\n * @param {Object} ApplePaySession Apple Pay session\r\n * @returns {Promise} Promise with 'canMakePayments' boolean value\r\n */\r\nfunction initApplePay(ApplePaySession) {\r\n return braintreeApplePaySDK.createApplePayPayment()\r\n .then(function (applePayInstance) {\r\n apInstance = applePayInstance;\r\n\r\n return ApplePaySession.canMakePaymentsWithActiveCard(applePayInstance.merchantIdentifier);\r\n });\r\n}\r\n\r\n/**\r\n * Merges a payment request with Braintree defaults to return an {external:ApplePayPaymentRequest}\r\n * @param {Object} applePayConfigs Apple Pay config object\r\n * @returns {Object} Payment request object\r\n */\r\nfunction createPaymentDataRequest(applePayConfigs) {\r\n return braintreeApplePaySDK.createPaymentDataRequest(apInstance, applePayConfigs, amount);\r\n}\r\n\r\n/**\r\n * Validates merchant website, as required by ApplePaySession before payment can be authorized\r\n * @param {Object} sessionEvent Apple Pay session event\r\n * @param {Object} applePayConfigs Apple Pay config object\r\n * @returns {Promise} Promise with merchant session\r\n */\r\nfunction onValidateMerchant(sessionEvent, applePayConfigs) {\r\n return braintreeApplePaySDK.performValidation(apInstance, sessionEvent, applePayConfigs);\r\n}\r\n\r\n/**\r\n * Tokenizes an Apple Pay payment\r\n * @param {Object} sessionEvent Apple Pay session event\r\n * @returns {Promise} Promise with tokenized payload\r\n */\r\nfunction onPaymentAuthorized(sessionEvent) {\r\n return braintreeApplePaySDK.tokenize(apInstance, sessionEvent);\r\n}\r\n\r\n/**\r\n * Update order amount\r\n * @param {Object} applePayConfigs Apple Pay config object\r\n */\r\nfunction updateApplePayAmount(applePayConfigs) {\r\n $.ajax({\r\n url: applePayConfigs.getOrderInfoUrl,\r\n async: false,\r\n type: 'get',\r\n dataType: 'json',\r\n success: function (data) {\r\n amount = data.amount;\r\n },\r\n error: function () {\r\n window.location.reload();\r\n }\r\n });\r\n}\r\n\r\n\r\nmodule.exports = {\r\n init,\r\n collectFraudData,\r\n initApplePay,\r\n createPaymentDataRequest,\r\n onValidateMerchant,\r\n onPaymentAuthorized,\r\n updateApplePayAmount\r\n};\r\n","'use strict';\r\n\r\nvar applePayHelper = require('../helpers/applePayHelper');\r\nvar braintreeGeneral = require('../../braintreeGeneral');\r\nvar braintreeApplePayModel = require('./braintreeApplePayModel');\r\n\r\nvar applePayErrorMessages = require('../constants/errorMessages');\r\n\r\n/**\r\n * Initialize Braintree Apple Pay Model. Pattern Builder is used\r\n * @returns {Object} Object with booleam \"error\" flag and \"message\" attribute with error message\r\n */\r\nfunction init() {\r\n var braintreeApplePayConfigs = applePayHelper.getBraintreeApplePayConfigs();\r\n var clientToken;\r\n var btClientInstancePromise;\r\n var response = {\r\n error: false,\r\n message: '',\r\n btApplePayModel: null,\r\n btApplePayConfigs: null\r\n };\r\n\r\n if (braintreeApplePayConfigs) {\r\n clientToken = braintreeApplePayConfigs.clientToken;\r\n btClientInstancePromise = braintreeGeneral.createClientInstance(clientToken);\r\n\r\n braintreeApplePayModel.init(\r\n btClientInstancePromise,\r\n braintreeApplePayConfigs.isFraudToolsEnabled\r\n );\r\n\r\n response.btApplePayModel = braintreeApplePayModel;\r\n response.btApplePayConfigs = braintreeApplePayConfigs;\r\n } else {\r\n response.error = true;\r\n response.message = applePayErrorMessages.NO_APPLE_PAY_BRAINTREE_CONFIGURATIONS;\r\n }\r\n\r\n return response;\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\n/* global braintreeUtils braintree $ */\r\n\r\nvar btClientInstancePromise;\r\n\r\n/**\r\n * Creates Apple Pay payment instance\r\n * @returns {Promise} A promise resolve with the Apple Pay instance\r\n */\r\n\r\nfunction createApplePayPayment() {\r\n return btClientInstancePromise\r\n .then(function (btClientInstance) {\r\n return braintree.applePay.create({\r\n client: btClientInstance\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Creates a configuration object for creation an Apple Pay session\r\n * @param {applePayInstance} applePayInstance Apple Pay instance\r\n * @param {Object} applePayConfigs Apple Pay configs object\r\n * @param {number} amount Order total amount\r\n * @returns {Object} Configuration object\r\n */\r\nfunction createPaymentDataRequest(applePayInstance, applePayConfigs, amount) {\r\n return applePayInstance.createPaymentRequest({\r\n total: {\r\n label: applePayConfigs.options.displayName,\r\n amount: amount\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Validates merchant website, as required by Apple Pay Session before payment can be authorized\r\n * @param {applePayInstance} applePayInstance Apple Pay instance\r\n * @param {Object} sessionEvent Apple Pay session event\r\n * @param {Object} applePayConfigs Apple Pay configs object\r\n * @returns {Promise} Promise that resolve with 'merchantSession'\r\n */\r\nfunction performValidation(applePayInstance, sessionEvent, applePayConfigs) {\r\n return applePayInstance.performValidation({\r\n validationURL: sessionEvent.validationURL,\r\n displayName: applePayConfigs.options.displayName\r\n });\r\n}\r\n\r\n/**\r\n * Tokenizes an Apple Pay payment\r\n * @param {applePayInstance} applePayInstance Apple pay instance\r\n * @param {Object} sessionEvent Apple pay session event\r\n * @returns {Promise} Promise that resolve with 'tokenizePayload'\r\n */\r\nfunction tokenize(applePayInstance, sessionEvent) {\r\n return applePayInstance.tokenize({\r\n token: sessionEvent.payment.token\r\n });\r\n}\r\n\r\n/**\r\n * Inits braintreeApplePaySDK with client instance promise\r\n * @param {Promise} braintreeClientInstancePromise Braintree client instance promise\r\n */\r\n\r\nfunction init(braintreeClientInstancePromise) {\r\n btClientInstancePromise = braintreeClientInstancePromise;\r\n}\r\n\r\nmodule.exports = {\r\n createApplePayPayment,\r\n createPaymentDataRequest,\r\n performValidation,\r\n tokenize,\r\n init\r\n};\r\n","'use strict';\r\n\r\nvar helper = require('../../helper');\r\nvar paymentMethodGeneral = require('../../paymentMethodGeneral');\r\n\r\nvar $applePayButton = document.querySelector('.js_braintree_applepay_button');\r\n\r\nvar paymentData;\r\nvar $braintreeCartButtons;\r\nvar applePayCheckoutFormData;\r\nvar errHandlingModel;\r\n\r\n/**\r\n * Expends Apple Pay Checkout Form with required data\r\n */\r\nfunction expandApplePayCheckoutFormData() {\r\n var csrfToken = document.querySelector('.braintree-cart-buttons-wrap #csrf_token');\r\n\r\n applePayCheckoutFormData.append(csrfToken.name, csrfToken.value);\r\n applePayCheckoutFormData.append('braintreeApplePayNonce', paymentData.nonce);\r\n applePayCheckoutFormData.append('braintreeApplePayDeviceDataInput', paymentData.deviceData);\r\n applePayCheckoutFormData.append('braintreeApplePayShippingAddress',\r\n JSON.stringify(paymentData.shippingAddress) || '{}'\r\n );\r\n applePayCheckoutFormData.append('braintreeApplePayBillingAddress',\r\n JSON.stringify(paymentData.billingAddress) || '{}'\r\n );\r\n}\r\n\r\n/**\r\n * Process Apple Pay on the Cart Page\r\n */\r\nfunction processCartFlow() {\r\n var billingAddressData = paymentData.billingAddress;\r\n var paymentMethodName = JSON.parse($applePayButton.getAttribute('data-braintree-config')).paymentMethodName;\r\n var placeOrderUrl = $braintreeCartButtons.getAttribute('data-checkout-placeorder-url');\r\n var checkoutFromCartUrl = $braintreeCartButtons.getAttribute('data-checkout-from-cart-url');\r\n var checkoutFormFields = $braintreeCartButtons.getAttribute('data-checkout-form-fields');\r\n var paymentFieldData = helper.getPaymentFieldsData(billingAddressData, paymentMethodName);\r\n\r\n applePayCheckoutFormData = helper.createPaymentFormData(checkoutFormFields, paymentFieldData);\r\n expandApplePayCheckoutFormData();\r\n // submit customer form with email (CheckoutServices-SubmitCustomer)\r\n // as we skip step \"login via guest/registered user\" while express checkout\r\n // email is set only in case of guest checkout and if email is not already set\r\n paymentMethodGeneral.submitCustomerForm(billingAddressData.email);\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: checkoutFromCartUrl,\r\n data: applePayCheckoutFormData,\r\n contentType: false,\r\n processData: false,\r\n success: function (data) {\r\n if (data.error) {\r\n var errorMessage = '';\r\n\r\n if (data.fieldErrors.length) {\r\n data.fieldErrors.forEach(function (error, index) {\r\n var keys = Object.keys(error);\r\n\r\n if (keys.length) {\r\n errorMessage += `${keys[index].replace('dwfrm_billing_', '').replace('_', ' ')} ${data.fieldErrors[index][keys[index]]}. `;\r\n }\r\n });\r\n errHandlingModel.applePayErrorHandler(errorMessage);\r\n }\r\n\r\n if (data.serverErrors.length) {\r\n data.serverErrors.forEach(function (error) {\r\n errorMessage += `${error}. `;\r\n });\r\n errHandlingModel.applePayErrorHandler(errorMessage);\r\n }\r\n\r\n if (data.cartError) {\r\n window.location.href = data.redirectUrl;\r\n }\r\n\r\n return;\r\n }\r\n\r\n window.location.href = placeOrderUrl;\r\n },\r\n error: function (err) {\r\n if (err && err.redirectUrl) {\r\n window.location.href = err.redirectUrl;\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Inits Apple Pay Cart components\r\n * @param {Object} data Apple Pay payment data\r\n * @param {Constructor} errorHandlingModel Error handling model\r\n */\r\nfunction init(data, errorHandlingModel) {\r\n paymentData = data;\r\n $braintreeCartButtons = document.querySelector('.braintree-cart-buttons-wrap');\r\n $applePayButton.setAttribute('data-is-inited', true);\r\n errHandlingModel = errorHandlingModel;\r\n\r\n processCartFlow();\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\nvar helper = require('../../helper');\r\n\r\nvar paymentData;\r\n\r\n/**\r\n * Process Apple Pay on the Checkout page\r\n */\r\nfunction processCheckoutFlow() {\r\n document.getElementById(('braintreeApplePayNonce')).value = paymentData.nonce;\r\n document.getElementById(('braintreeApplePayBillingAddress')).value = JSON.stringify(paymentData.billingAddress);\r\n\r\n // Updating Storefront Billing Form data with ApplePay Billing\r\n var storeFrontBillingData = helper.getUpdatedStoreFrontBillingData(paymentData.billingAddress);\r\n\r\n helper.updateBillingFormValues(storeFrontBillingData);\r\n}\r\n\r\n/**\r\n * Inits Apple Pay checkout components\r\n * @param {Object} data Apple Pay payment data\r\n */\r\nfunction init(data) {\r\n paymentData = data;\r\n\r\n processCheckoutFlow();\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\n/* global braintreeUtils braintree $ ApplePaySession */\r\n\r\n// Helpers\r\nvar loaderInstance = require('../../loaderHelper');\r\nvar applePayHelper = require('../helpers/applePayHelper');\r\nvar applePayPaymentProcessingHelper = require('../helpers/applePayPaymentProcessingHelper');\r\nvar helper = require('../../helper');\r\n\r\nvar applePayPaymentProcessingConstants = require('../constants/applePayPaymentProcessingConstants');\r\n\r\n// Components\r\nvar applePayCart = require('./applePayCart');\r\nvar applePayCheckout = require('./applePayCheckout');\r\n\r\nvar $braintreeApplePayLoader = document.querySelector('.braintreeApplePayLoader');\r\nvar $applePayButton = document.querySelector('.js_braintree_applepay_button');\r\nvar $continueButton = document.querySelector('button.submit-payment');\r\nvar applePayEnabledOnCheckout = Boolean(document.querySelector('.js_braintree_applepayContent'));\r\n\r\n// global variables\r\nvar loader;\r\nvar applePayModel;\r\nvar applePayConfigs;\r\nvar errHandlingModel;\r\n\r\n/**\r\n * Functionality over tokenized payment\r\n * @param {Object} paymentData Apple Pay payment data\r\n */\r\nfunction onTokenizedPayment(paymentData) {\r\n var applePayFlow = applePayPaymentProcessingHelper.getApplePayFlowId();\r\n\r\n helper.removeActiveSessionPayment();\r\n\r\n switch (applePayFlow) {\r\n case applePayPaymentProcessingConstants.FLOW_CHECKOUT_NAME:\r\n applePayCheckout.init(paymentData);\r\n $continueButton.click();\r\n break;\r\n case applePayPaymentProcessingConstants.FLOW__CART_NAME:\r\n applePayCart.init(paymentData, errHandlingModel);\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n/**\r\n * Creates Apple Pay session. Opens and processes Apple Pay payment window.\r\n */\r\nfunction createApplePaySession() {\r\n // Updates order amount for paymentDataRequest\r\n applePayModel.updateApplePayAmount(applePayConfigs);\r\n\r\n // Creates a configuration object for creating Apple pay session\r\n var paymentDataRequest = applePayModel.createPaymentDataRequest(applePayConfigs);\r\n\r\n if (applePayConfigs.isRequiredBillingContactFields) {\r\n paymentDataRequest.requiredBillingContactFields = ['postalAddress', 'name'];\r\n }\r\n\r\n if (applePayConfigs.isRequiredShippingContactFields) {\r\n paymentDataRequest.requiredShippingContactFields = ['postalAddress', 'name', 'phone', 'email'];\r\n }\r\n\r\n // Creates new Apple Pay session\r\n var session = new ApplePaySession(1, paymentDataRequest);\r\n\r\n // Validates merchant website\r\n session.onvalidatemerchant = function (event) {\r\n applePayModel.onValidateMerchant(event, applePayConfigs)\r\n .then(function (merchantSession) {\r\n session.completeMerchantValidation(merchantSession);\r\n })\r\n .catch(function (error) {\r\n errHandlingModel.applePayErrorHandler(error);\r\n session.abort();\r\n });\r\n };\r\n\r\n // Tokenizes an Apple Pay payment\r\n session.onpaymentauthorized = function (event) {\r\n loader.show();\r\n\r\n applePayModel.onPaymentAuthorized(event)\r\n .then(function (tokenizedPayload) {\r\n session.completePayment(ApplePaySession.STATUS_SUCCESS);\r\n\r\n var TokenizedPaymentData = applePayPaymentProcessingHelper.getTokenizedPaymentData(event, tokenizedPayload);\r\n\r\n onTokenizedPayment(TokenizedPaymentData);\r\n\r\n loader.hide();\r\n })\r\n .catch(function (error) {\r\n session.completePayment(ApplePaySession.STATUS_FAILURE);\r\n loader.hide();\r\n errHandlingModel.applePayErrorHandler(error);\r\n });\r\n };\r\n\r\n session.begin();\r\n}\r\n\r\n/**\r\n * Call back function to be resolved when Apple Pay payment button is clicked\r\n */\r\nfunction onApplePayButtonClick() {\r\n errHandlingModel.hideError();\r\n\r\n // Billing flow\r\n if (applePayEnabledOnCheckout) {\r\n // Validates email and phone fields on the Billing page\r\n if (applePayHelper.isBilligFiledsValid()) {\r\n createApplePaySession();\r\n }\r\n // Cart flow\r\n } else {\r\n createApplePaySession();\r\n }\r\n}\r\n\r\n/**\r\n * Init and add Apple Pay on the Cart or Billing page\r\n */\r\nfunction initApplePay() {\r\n loader.show();\r\n\r\n var result = applePayModel.collectFraudData()\r\n .then(function (fraudDataPayload) {\r\n applePayHelper.setApplePayDeviceData(fraudDataPayload);\r\n loader.hide();\r\n\r\n return applePayModel.initApplePay(ApplePaySession)\r\n .then(function (canMakePayments) {\r\n loader.hide();\r\n applePayHelper.showApplePayButton();\r\n\r\n if (!canMakePayments) {\r\n applePayHelper.makeApplePayButtonDisabled();\r\n } else {\r\n $applePayButton.addEventListener('click', onApplePayButtonClick);\r\n }\r\n });\r\n });\r\n result\r\n .catch(function (error) {\r\n loader.hide();\r\n errHandlingModel.applePayErrorHandler(error);\r\n });\r\n}\r\n\r\n/**\r\n * Inits Apple Pay payment processing components\r\n * @param {Object} braintreeApplePayModel Apple Pay model\r\n * @param {Constructor} errorHandlingModel Error handling model\r\n */\r\nfunction init(braintreeApplePayModel, errorHandlingModel) {\r\n loader = loaderInstance($braintreeApplePayLoader);\r\n applePayModel = braintreeApplePayModel;\r\n applePayConfigs = JSON.parse($applePayButton.getAttribute('data-braintree-config'));\r\n errHandlingModel = errorHandlingModel;\r\n\r\n if (window.ApplePaySession) {\r\n initApplePay();\r\n } else {\r\n applePayHelper.hideApplePayTab();\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = {\r\n FLOW_CHECKOUT_NAME: 'checkout',\r\n FLOW__CART_NAME: 'cart'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = {\r\n NO_APPLE_PAY_BRAINTREE_CONFIGURATIONS: 'No Apple Pay Braintree Configurations',\r\n FRAUD_DATA_CELLECTION_ISNOT_ENABLED: 'Fraud Data collection isn\\t enabled via Custom Site Preference'\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Error Handling constructor\r\n * @param {Object} errorMessages Braintree credit card error messages\r\n */\r\nfunction ErrorHandlingBaseModel(errorMessages) {\r\n this.$errorContainer = $('.cart-error-messaging');\r\n this.errorMessages = errorMessages;\r\n}\r\n\r\n// General method which should be used for cases when error came from Braintree\r\nErrorHandlingBaseModel.prototype.showErrorByObject = function (error) {\r\n var msg = error.message;\r\n var code = error.code;\r\n var errorMessage = this.errorMessages[code] || msg || this.errorMessages.CLIENT_GATEWAY_NETWORK;\r\n\r\n this.createErrorNotification(errorMessage);\r\n};\r\n\r\n/**\r\n * Shows error by message\r\n * @param {string} message Error message\r\n */\r\nErrorHandlingBaseModel.prototype.showErrorByMessage = function (message) {\r\n this.createErrorNotification(message);\r\n};\r\n\r\n/**\r\n * ---- Error container which will be used on Cart page ----\r\n * ---- For all other cases this method will be overwritten by corresponding one ----\r\n *\r\n * Method responsible for Error Notification generation\r\n * @param {string} message message to display inside error notification\r\n */\r\nErrorHandlingBaseModel.prototype.createErrorNotification = function (message) {\r\n $('.checkout-btn').addClass('disabled');\r\n this.$errorContainer.append(\r\n `
\r\n \r\n ${message}\r\n
`\r\n );\r\n\r\n this.$errorContainer.show();\r\n window.scrollTo(0, 0);\r\n};\r\n\r\n/**\r\n * ---- Method which should hide error container and make it empty. On Cart we use this one ----\r\n * ---- For all other cases this method will be overwritten by corresponding one ----\r\n *\r\n * Hide error notification\r\n */\r\nErrorHandlingBaseModel.prototype.hideError = function () {\r\n this.$errorContainer.hide();\r\n this.$errorContainer.empty();\r\n};\r\n\r\n/**\r\n * Handles Apple Pay error by types\r\n * @param {Object} error Error object or error message\r\n */\r\nErrorHandlingBaseModel.prototype.applePayErrorHandler = function (error) {\r\n if (error.name === 'BraintreeError') {\r\n this.showErrorByObject(error);\r\n } else {\r\n this.showErrorByMessage(error.message);\r\n }\r\n};\r\n\r\nmodule.exports = ErrorHandlingBaseModel;\r\n","'use strict';\r\n\r\nvar ErrorHandlingBaseModel = require('./errorHandlingBaseModel');\r\n\r\n/**\r\n * Error Handling constructor\r\n * @param {Object} errorMessages Braintree credit card error messages\r\n */\r\nfunction ErrorHandlingCheckoutModel(errorMessages) {\r\n ErrorHandlingBaseModel.call(this, errorMessages);\r\n\r\n this.$topErrorMessageText = document.querySelector('.error-message-text');\r\n this.$topErrorMessageWrapper = document.querySelector('.error-message');\r\n}\r\n\r\n/**\r\n * ES5 inheritance\r\n */\r\nErrorHandlingCheckoutModel.prototype = Object.create(ErrorHandlingBaseModel.prototype);\r\n\r\n// See corresponding method inside \"ErrorHandlingBaseModel\" model\r\nErrorHandlingCheckoutModel.prototype.createErrorNotification = function (message) {\r\n this.$topErrorMessageText.textContent = '';\r\n this.$topErrorMessageText.append(message);\r\n this.$topErrorMessageWrapper.style.display = 'block';\r\n\r\n window.scrollTo(0, 0);\r\n};\r\n\r\n// See corresponding method inside \"ErrorHandlingBaseModel\" model\r\nErrorHandlingCheckoutModel.prototype.hideError = function () {\r\n this.$topErrorMessageWrapper.style.display = 'none';\r\n this.$topErrorMessageText.innerHTML = '';\r\n};\r\n\r\nmodule.exports = ErrorHandlingCheckoutModel;\r\n","'use strict';\r\n\r\nvar helper = require('../../helper');\r\n\r\nvar $applePayButton = document.querySelector('.js_braintree_applepay_button');\r\nvar $applepayDataMethod = document.querySelector('.payment-options[role=tablist] .nav-item[data-method-id=\"ApplePay\"]');\r\nvar $phoneField = document.querySelector('.contact-info-block [name=dwfrm_billing_contactInfoFields_phone]');\r\n\r\n/**\r\n * Returns Braintree Apple Pay configs\r\n * @returns {Object} Braintree Apple Pay configs\r\n */\r\nfunction getBraintreeApplePayConfigs() {\r\n var braintreeApplePayButtonConfigs = null;\r\n\r\n try {\r\n braintreeApplePayButtonConfigs = JSON.parse(document.querySelector('.js_braintree_applepay_button').getAttribute('data-braintree-config'));\r\n } catch (error) {\r\n return braintreeApplePayButtonConfigs;\r\n }\r\n\r\n return braintreeApplePayButtonConfigs;\r\n}\r\n\r\n/**\r\n * Sets device data from 'data collector' to corresponding input field\r\n * @param {Object} fraudDataPayload Froud payload data\r\n */\r\n\r\nfunction setApplePayDeviceData(fraudDataPayload) {\r\n var $braintreeApplePayDeviceData = document.querySelector('input[name=braintreeApplePayDeviceDataInput]');\r\n\r\n if (fraudDataPayload.deviceData) {\r\n $braintreeApplePayDeviceData.value = fraudDataPayload.deviceData;\r\n }\r\n}\r\n\r\n/**\r\n * Shows Apple Pay button\r\n */\r\nfunction showApplePayButton() {\r\n $applePayButton.style.display = 'block';\r\n\r\n if ($applepayDataMethod) {\r\n $applepayDataMethod.style.display = 'block';\r\n }\r\n}\r\n\r\n/**\r\n * Hides Apple Pay tab on the Checkout/Billing page\r\n */\r\nfunction hideApplePayTab() {\r\n if ($applepayDataMethod) {\r\n $applepayDataMethod.style.display = 'none';\r\n }\r\n}\r\n\r\n/**\r\n * Marks Apple Pay button as disabled\r\n */\r\nfunction makeApplePayButtonDisabled() {\r\n $applePayButton.classList.add('js_braintree_applepay_button_disabled');\r\n}\r\n\r\n/**\r\n * Remove session Apple Pay nonce\r\n */\r\nfunction removeSessionNonce() {\r\n document.querySelector('#braintreeApplePayNonce').value = '';\r\n document.querySelector('#braintreeApplePayDeviceData').value = '';\r\n}\r\n\r\n/**\r\n * Validates required billing form fields\r\n * @returns {boolean} Whether billing form fields are valid\r\n */\r\nfunction isBilligFiledsValid() {\r\n return helper.isValidInputField($phoneField);\r\n}\r\n\r\n/**\r\n * Depends of the 'data-paypal-is-hide-continue-button' hides or shows continue button on the Billing Page\r\n */\r\nfunction toggleContinueButtonOnBillingPage() {\r\n var applePayContent = document.querySelector('.js_braintree_applepayContent');\r\n\r\n helper.continueButtonToggle(applePayContent.getAttribute('data-paypal-is-hide-continue-button'));\r\n}\r\n\r\nmodule.exports = {\r\n getBraintreeApplePayConfigs,\r\n setApplePayDeviceData,\r\n showApplePayButton,\r\n makeApplePayButtonDisabled,\r\n removeSessionNonce,\r\n isBilligFiledsValid,\r\n hideApplePayTab,\r\n toggleContinueButtonOnBillingPage\r\n};\r\n","'use strict';\r\n\r\nvar applePayPaymentProcessingConstants = require('../constants/applePayPaymentProcessingConstants');\r\n\r\n/**\r\n * Returns current Apple Pay flow\r\n * @returns {string} Flow id checkout/cart\r\n */\r\nfunction getApplePayFlowId() {\r\n var applePayEnabledOnCheckout = Boolean(document.querySelector('.js_braintree_applepayContent'));\r\n\r\n return applePayEnabledOnCheckout ? applePayPaymentProcessingConstants.FLOW_CHECKOUT_NAME : applePayPaymentProcessingConstants.FLOW__CART_NAME;\r\n}\r\n\r\n/**\r\n * Returns shipping address based on Apple Pay payment shipping contact\r\n * @param {Object} shippingContact Shipping address data\r\n * @returns {Object} Shipping address with required fields\r\n */\r\nfunction getShippingAddress(shippingContact) {\r\n return {\r\n streetAddress: shippingContact.addressLines[0],\r\n extendedAddress: shippingContact.addressLines[1],\r\n locality: shippingContact.locality,\r\n region: shippingContact.administrativeArea.toUpperCase(),\r\n postalCode: decodeURIComponent(shippingContact.postalCode),\r\n countryCodeAlpha2: shippingContact.countryCode.toUpperCase(),\r\n firstName: shippingContact.givenName,\r\n lastName: shippingContact.familyName,\r\n phone: shippingContact.phoneNumber,\r\n email: shippingContact.emailAddress\r\n };\r\n}\r\n\r\n/**\r\n * Returns billing address based on Apple Pay payment billing contact\r\n * @param {Object} billingContact Billing address data\r\n * @param {string} email Email\r\n * @param {string} phone Phone number\r\n * @returns {Object} Billing address with required fields\r\n */\r\nfunction getBillingAddress(billingContact, email, phone) {\r\n return {\r\n streetAddress: billingContact.addressLines[0],\r\n extendedAddress: billingContact.addressLines[1],\r\n locality: billingContact.locality,\r\n region: billingContact.administrativeArea.toUpperCase(),\r\n postalCode: decodeURIComponent(billingContact.postalCode),\r\n countryCodeAlpha2: billingContact.countryCode.toUpperCase(),\r\n firstName: billingContact.givenName,\r\n lastName: billingContact.familyName,\r\n email: email,\r\n phone: phone\r\n };\r\n}\r\n\r\n/**\r\n * Returns Apple Pay payment object with required data for backend\r\n * @param {Object} sessionEvent Apple Pay Session event\r\n * @param {Object} tokenizedPayload Apple Pay payment data\r\n * @returns {Object} Apple Pay payment object with required fileds\r\n */\r\nfunction getTokenizedPaymentData(sessionEvent, tokenizedPayload) {\r\n var data = {\r\n event: sessionEvent,\r\n payload: tokenizedPayload,\r\n nonce: tokenizedPayload.nonce,\r\n deviceData: document.querySelector('input[name=braintreeApplePayDeviceDataInput]').value\r\n };\r\n var shippingAddressData = sessionEvent.payment.shippingContact;\r\n\r\n if (shippingAddressData) {\r\n data.shippingAddress = getShippingAddress(shippingAddressData);\r\n } else {\r\n shippingAddressData = {\r\n emailAddress: document.querySelector('.customer-summary-email').innerHTML,\r\n phoneNumber: document.querySelector('.contact-info-block [name=dwfrm_billing_contactInfoFields_phone]').value\r\n };\r\n }\r\n\r\n var billingAddressData = sessionEvent.payment.billingContact;\r\n\r\n if (billingAddressData) {\r\n data.billingAddress = getBillingAddress(billingAddressData, shippingAddressData.emailAddress, shippingAddressData.phoneNumber);\r\n }\r\n\r\n return data;\r\n}\r\n\r\n\r\nmodule.exports = {\r\n getApplePayFlowId,\r\n getShippingAddress,\r\n getBillingAddress,\r\n getTokenizedPaymentData\r\n};\r\n","'use strict';\r\n\r\n/**\r\n* This file was created to provide functionality and business logic for Credit and SRC payment methods. Do not expand this file!\r\n* Changes and additions to the code should be made to the appropriate files in the folders, depending on the payment method required, to maintain a clear code architecture.\r\n*/\r\n\r\nvar loaderInstance = require('./loaderHelper');\r\nvar ErrorHandlingBaseModel = require('./creditcard/errorhandler/errorHandlingBaseModel');\r\n\r\nvar errorHandlingBaseModel = new ErrorHandlingBaseModel();\r\nvar creditCardListLoader;\r\n\r\n/**\r\n* Shows the new card block on the Account Page\r\n*/\r\nfunction showAddNewCardOptions() {\r\n var $addNewCardButton = document.querySelector('.braintreeAddNewCard');\r\n var $addNewCardBlock = document.querySelector('.braintreeAddNewCardBlock');\r\n\r\n // Hide \"Credit Card error message\" container\r\n errorHandlingBaseModel.hideError();\r\n // Hide \"Add New Card\" button\r\n $addNewCardButton.style.display = 'none';\r\n // Display \"Add New Card\" form\r\n $addNewCardBlock.style.display = 'block';\r\n}\r\n\r\n/**\r\n * Removes card from Credit/SRC Cards list\r\n * @param {Object} e Event object\r\n */\r\nfunction removeCard(e) {\r\n var target = e.target;\r\n\r\n if (target && JSON.parse(target.getAttribute('data-is-remove-allowed'))) {\r\n creditCardListLoader.show();\r\n\r\n $.get(target.getAttribute('data-url') + '?UUID=' + target.getAttribute('data-id'))\r\n .then((data => {\r\n $('#uuid-' + data.UUID).remove();\r\n\r\n if (data.newDefaultAccount) {\r\n document.querySelector('#uuid-' + data.newDefaultAccount + ' span').style.fontWeight = 'bold';\r\n document.querySelector('#uuid-' + data.newDefaultAccount + ' button.braintree-make-default-card').style.display = 'none';\r\n }\r\n\r\n creditCardListLoader.hide();\r\n }))\r\n .fail(() => {\r\n location.reload();\r\n });\r\n } else {\r\n var removeErrorMessage = target.getAttribute('data-message-remove-is-not-allowed');\r\n errorHandlingBaseModel.showErrorByMessage(removeErrorMessage);\r\n }\r\n}\r\n\r\n/**\r\n * Select default card in Credit/SRC Cards list\r\n * @param {Object} e Event object\r\n */\r\nfunction makeDefaultCard(e) {\r\n var target = e.target;\r\n var url = target.getAttribute('data-make-default-url');\r\n var id = target.getAttribute('data-id');\r\n var paymentMethodID = 'CARD';\r\n\r\n // Hide \"Credit Card error message\" container\r\n errorHandlingBaseModel.hideError();\r\n creditCardListLoader.show();\r\n\r\n $.get(url + '?UUID=' + id + '&pmID=' + paymentMethodID)\r\n .then((data) => {\r\n // New default Card changes\r\n document.querySelector('#uuid-' + data.newDefaultProperty + ' span').style.fontWeight = 'bold';\r\n document.querySelector('.braintree-make-default-card.uuid-' + data.newDefaultProperty).style.display = 'none';\r\n\r\n // Previous default Card changes\r\n document.querySelector('#uuid-' + data.toRemoveDefaultProperty + ' span').style.fontWeight = 'normal';\r\n document.querySelector('.braintree-make-default-card.uuid-' + data.toRemoveDefaultProperty).style.display = 'inline';\r\n\r\n creditCardListLoader.hide();\r\n })\r\n .catch(function () {\r\n creditCardListLoader.hide();\r\n });\r\n}\r\n\r\nfunction initAccount() {\r\n var $creditCardAccountBtLoader = document.querySelector('#creditCardAccountBtLoader');\r\n var creditCardListLoaderExists = Boolean($creditCardAccountBtLoader);\r\n\r\n if (creditCardListLoaderExists) {\r\n creditCardListLoader = loaderInstance($creditCardAccountBtLoader);\r\n }\r\n // \"Add new card\" area link functionality initiation\r\n $('.braintreeAddNewCard').click(showAddNewCardOptions);\r\n\r\n // \"Make default\" link functionality initiation\r\n $('.creditCard-accounts').on('click', '.braintree-make-default-card', makeDefaultCard);\r\n\r\n // \"Remove Card\" link functionality initiation\r\n $('.creditCard-accounts').on('click', '.remove-bt-payment', removeCard);\r\n}\r\n\r\nmodule.exports = {\r\n initAccount\r\n};\r\n","'use strict';\r\n\r\n/* global braintree $ */\r\n\r\n/**\r\n * Create Braintree Client Instance from Client Token\r\n * @param {string} clientToken Braintree client token\r\n * @returns {Promise} returns promise with Braintree Client Instance\r\n */\r\nfunction createClientInstance(clientToken) {\r\n return braintree.client.create({\r\n authorization: clientToken\r\n });\r\n}\r\n\r\n/**\r\n * Fraud data generation\r\n * @param {Promise} btClientInstancePromise Promise with Client Instance\r\n * @returns {Promise} returns promise with fraud data\r\n */\r\nfunction collectFraudData(btClientInstancePromise) {\r\n return btClientInstancePromise\r\n .then(function (btClientInstance) {\r\n return braintree.dataCollector.create({\r\n client: btClientInstance,\r\n kount: true\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Get array with Braintree Customer Payment Mehtods by Personalized Client Instance\r\n * @param {Promise} btClientInstancePromise Promise with Client Instance\r\n * @returns {array} array with Braintree Customer Payment Mehtod (if any) in opposite case empty array will be returned\r\n */\r\nfunction getBtCustomerPaymentMethods(btClientInstancePromise) {\r\n return btClientInstancePromise\r\n .then(function (clientInstance) {\r\n return braintree.vaultManager.create({\r\n client: clientInstance\r\n });\r\n })\r\n .then(function (vaultManager) {\r\n return vaultManager.fetchPaymentMethods({\r\n defaultFirst: true\r\n });\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n createClientInstance,\r\n collectFraudData,\r\n getBtCustomerPaymentMethods\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function () {\r\n // Used only for Paypal. In future \"client token\" generation approach will be refactored\r\n var paymentMethodGeneral = require('./paymentMethodGeneral');\r\n\r\n // General global variables\r\n var clientTokenPromise = paymentMethodGeneral.createGeneralClientInstancePromise();\r\n var isCheckoutPage = Boolean(document.querySelector('#checkout-main'));\r\n\r\n /* ------------------------General Account functionality------------------------ */\r\n var btAccountBusinessLogic = require('./braintreeAccount');\r\n // Common Credit Card and SRC Account functionality\r\n btAccountBusinessLogic.initAccount();\r\n\r\n /* ------------------------General Checkout functionality----------------------- */\r\n if (isCheckoutPage) {\r\n paymentMethodGeneral.fillPaymentSammaryContainer();\r\n paymentMethodGeneral.initPaymentMethodTabClickBehavior();\r\n }\r\n\r\n /* ------------------------Credit Card------------------------ */\r\n var creditCardBusinessLogic = require('./creditcard/creditCard');\r\n\r\n var creditCardOnAccountEnabled = Boolean(document.querySelector('.js_braintree_addCreditCardForm'));\r\n var creditCardEnabledOnCheckout = Boolean(document.querySelector('.js_braintree_creditCardContent'));\r\n\r\n creditCardBusinessLogic.init();\r\n\r\n if (creditCardOnAccountEnabled) {\r\n creditCardBusinessLogic.initAccount();\r\n }\r\n\r\n if (creditCardEnabledOnCheckout) {\r\n creditCardBusinessLogic.initCheckout();\r\n }\r\n\r\n /* --------------------------PayPal-------------------------- */\r\n var payPalBusinessLogic = require('./paypal/payPal');\r\n\r\n var payPalEnabledOnCheckout = Boolean(document.querySelector('.js_braintree_paypalContent'));\r\n var payPalEnabledOnProduct = Boolean(document.querySelector('.prices-add-to-cart-actions .js_braintree_paypal_cart_button'));\r\n var payPalEnabledOnCart = Boolean(document.querySelector('.cart-page .js_braintree_paypal_cart_button'));\r\n var payPalEnabledOnAccountPage = Boolean(document.querySelector('.paypal-accounts'));\r\n\r\n payPalBusinessLogic.init(clientTokenPromise);\r\n\r\n\r\n if (payPalEnabledOnCheckout) {\r\n payPalBusinessLogic.initCheckout();\r\n }\r\n\r\n if (payPalEnabledOnProduct) {\r\n payPalBusinessLogic.initProduct();\r\n }\r\n\r\n // Validation on enabled/disabled PayPal button for MiniCart located isinside MiniCart component\r\n payPalBusinessLogic.initMiniCart();\r\n\r\n if (payPalEnabledOnCart) {\r\n payPalBusinessLogic.initCart();\r\n }\r\n\r\n if (payPalEnabledOnAccountPage) {\r\n payPalBusinessLogic.initAccount();\r\n }\r\n\r\n /* --------------------------GooglePay------------------------- */\r\n var googlePayBusinnessLogic = require('./googlepay/googlePay');\r\n\r\n var googlePayEnabledOnCheckout = Boolean(document.querySelector('.js_braintree_googlepayContent'));\r\n var googlePayEnabledOnCart = Boolean(document.querySelector('.braintree-cart-google-button'));\r\n\r\n googlePayBusinnessLogic.init();\r\n\r\n if (googlePayEnabledOnCheckout) {\r\n googlePayBusinnessLogic.initCheckout();\r\n }\r\n\r\n if (googlePayEnabledOnCart) {\r\n googlePayBusinnessLogic.initCart();\r\n }\r\n\r\n /* --------------------------ApplePay------------------------- */\r\n var applePayBusinessLogic = require('./applepay/applePay');\r\n\r\n var applePayEnabledOnCheckout = Boolean(document.querySelector('.js_braintree_applepayContent'));\r\n var applePayEnabledOnCart = Boolean(document.querySelector('.braintree-cart-apple-button'));\r\n\r\n applePayBusinessLogic.init();\r\n\r\n if (applePayEnabledOnCart) {\r\n applePayBusinessLogic.initCart();\r\n }\r\n\r\n if (applePayEnabledOnCheckout) {\r\n applePayBusinessLogic.initCheckout();\r\n }\r\n\r\n /* --------------------------Venmo---------------------------- */\r\n var venmoBusinessLogic = require('./venmo/venmo');\r\n\r\n var isVenmoEnabledOnAccountPage = Boolean(document.querySelector('.venmo-accounts'));\r\n var isVenmoEnabledOnBillingPage = Boolean(document.querySelector('.js_braintree_venmoContent'));\r\n\r\n venmoBusinessLogic.init();\r\n\r\n if (isVenmoEnabledOnAccountPage) {\r\n venmoBusinessLogic.initAccount();\r\n }\r\n\r\n if (isVenmoEnabledOnBillingPage) {\r\n venmoBusinessLogic.initBillingCheckout();\r\n }\r\n\r\n /* --------------------------SRC------------------------------ */\r\n var srcBusinessLogic = require('./src/src');\r\n\r\n var isSrcEnabledOnAccountPage = Boolean(document.querySelector('.js_braintree_addSrcAccountForm'));\r\n var isSrcEnabledOnCartPage = Boolean(document.querySelector('.braintree-cart-src-button'));\r\n var isSrcEnabledOnBillingPage = Boolean(document.querySelector('.js_braintree_srcContent'));\r\n\r\n srcBusinessLogic.init();\r\n\r\n if (isSrcEnabledOnAccountPage) {\r\n srcBusinessLogic.initAccount();\r\n }\r\n\r\n if (isSrcEnabledOnCartPage) {\r\n srcBusinessLogic.initCartCheckout();\r\n }\r\n\r\n if (isSrcEnabledOnBillingPage) {\r\n srcBusinessLogic.initBillingCheckout();\r\n }\r\n\r\n /* --------------------------LPM-------------------------- */\r\n var lpmBusinessLogic = require('./local/lpm');\r\n var isLpmEnebledOnBillingPage = Boolean(document.querySelector('.js_braintree-lpmContent'));\r\n\r\n if (isLpmEnebledOnBillingPage) {\r\n lpmBusinessLogic.init();\r\n }\r\n};\r\n","'use strict';\r\n\r\n/* global braintree $ */\r\n/* eslint no-console: 'off' */\r\n\r\nvar isDebugMode = true;\r\n\r\nif (console && isDebugMode) {\r\n var consoleLog = console.log;\r\n var consoleError = console.error;\r\n console.log = function () {\r\n consoleLog.apply(console, arguments);\r\n };\r\n console.error = function () {\r\n consoleError.apply(console, arguments);\r\n };\r\n} else {\r\n console = { // eslint-disable-line no-global-assign\r\n log: function () { },\r\n error: function () { }\r\n };\r\n}\r\n\r\nvar bu = {\r\n pdpOnlickForAsignedPaypalPayment: function () {\r\n var $bundleItem = $('.bundle-item');\r\n function getOptions($productContainer) {\r\n var options = $productContainer\r\n .find('.product-option')\r\n .map(function () {\r\n var $elOption = $(this).find('.options-select');\r\n var urlValue = $elOption.val();\r\n var selectedValueId = $elOption.find('option[value=\"' + urlValue + '\"]')\r\n .data('value-id');\r\n return {\r\n optionId: $(this).data('option-id'),\r\n selectedValueId: selectedValueId\r\n };\r\n }).toArray();\r\n\r\n return JSON.stringify(options);\r\n }\r\n\r\n var pid = $('.product-detail:not(\".bundle-item\")').data('pid');\r\n var $btn = $('.braintree_pdp_button');\r\n var $productContainer = $btn.closest('.product-detail');\r\n\r\n var form = {\r\n pid: pid,\r\n quantity: $('.quantity-select').val()\r\n };\r\n\r\n if (!$bundleItem.length) {\r\n form.options = getOptions($productContainer);\r\n } else {\r\n var items = $bundleItem.map(function () {\r\n return {\r\n pid: $(this).find('.product-id').text(),\r\n quantity: parseInt($(this).find('label.quantity').data('quantity'), 10)\r\n };\r\n });\r\n form.childProducts = JSON.stringify(items.toArray());\r\n }\r\n var response = $.ajax({\r\n url: $('.add-to-cart-url').val(),\r\n method: 'POST',\r\n async: false,\r\n data: form\r\n }).responseJSON;\r\n response.pid = pid;\r\n return response;\r\n },\r\n\r\n getSelectedData: function (selectEl) {\r\n if (!selectEl) {\r\n return null;\r\n }\r\n var options = selectEl.getElementsByTagName('option');\r\n var option = null;\r\n for (var i = 0; i < options.length; i++) {\r\n option = options[i];\r\n if (option.selected) {\r\n break;\r\n }\r\n }\r\n return option.attributes;\r\n },\r\n\r\n postData: function (url, data) {\r\n var formData = new FormData();\r\n\r\n for (var key in data) {\r\n formData.append(key, data[key]);\r\n }\r\n $.ajax({\r\n url: url,\r\n data: formData,\r\n processData: false,\r\n contentType: false,\r\n type: 'POST',\r\n success: function (res) {\r\n window.location.href = res.redirectUrl;\r\n },\r\n error: function () {\r\n location.reload();\r\n }\r\n });\r\n },\r\n\r\n messages: {},\r\n\r\n errorInstances: [],\r\n createErrorInstance: function (containerElement, callback) {\r\n if (!containerElement) {\r\n console.error('Braintree: No container for showing erros');\r\n }\r\n function Constructor(cb) {\r\n bu.errorInstances.push(this);\r\n this.containerEl = containerElement;\r\n this.cb = typeof cb === 'function' ? cb : function () { };\r\n }\r\n Constructor.prototype.show = function (error) {\r\n var text = '';\r\n if (typeof error === 'string') {\r\n text = error;\r\n }\r\n if (typeof error === 'object') {\r\n var msg = bu.messages[error.code];\r\n text = msg || error.message;\r\n this.cb(this, error);\r\n if (error.code === 'PAYPAL_POPUP_CLOSED') {\r\n return;\r\n }\r\n }\r\n this.containerEl.style.display = '';\r\n this.containerEl.innerHTML = text;\r\n };\r\n Constructor.prototype.hide = function () {\r\n this.containerEl.innerHTML = '';\r\n };\r\n return new Constructor(callback);\r\n },\r\n clientToken: null\r\n};\r\n\r\nbu.console = console;\r\n\r\nmodule.exports = bu;\r\n\r\n","'use strict';\r\n\r\nvar braintreeCreditCardSDK = require('./braintreeCreditCardSDK');\r\nvar braintreeGeneral = require('../../braintreeGeneral');\r\nvar creditCardFormFieldHelper = require('../helpers/creditCardFormFieldsHelper');\r\n\r\nvar braintreeCreditCardSdkHelper = require('../helpers/braintreeCreditCardSdkHelper');\r\n\r\n/* global Promise braintree $ */\r\n\r\n// global variables\r\nvar hostedFieldsInstance;\r\nvar btClientInstancePromise;\r\nvar orderData;\r\nvar sitePrefs = {};\r\n\r\n/**\r\n * Init Braintree Credit Card model\r\n * @param {Promise} braintreeClientInstancePromise Braintreee client instance promise\r\n * @param {boolean} isSkip3dSecureLiabilityResult 'BRAINTREE_3DSecure_Skip_Client_Validation_Result' site preference value\r\n * @param {boolean} is3dSecureEnabled 'BRAINTREE_3DSecure_Enabled' site preference value\r\n * @param {bollean} isFraudToolsEnabled Is fraud tools enabled value\r\n */\r\nfunction init(braintreeClientInstancePromise, isSkip3dSecureLiabilityResult, is3dSecureEnabled, isFraudToolsEnabled) {\r\n braintreeCreditCardSDK.init(braintreeClientInstancePromise);\r\n\r\n btClientInstancePromise = braintreeClientInstancePromise;\r\n sitePrefs = {\r\n isSkip3dSecureLiabilityResult: isSkip3dSecureLiabilityResult,\r\n is3dSecureEnabled: is3dSecureEnabled,\r\n isFraudToolsEnabled: isFraudToolsEnabled\r\n };\r\n}\r\n\r\n\r\n/**\r\n * Gets required additional shipping info for 3ds\r\n *\r\n * @param {Object} orderAddress - User's shipping address\r\n * @returns {Object} an object with required fields\r\n */\r\n\r\nfunction getShippingAdditionalInfo(orderAddress) {\r\n return {\r\n workPhoneNumber: orderAddress.phone,\r\n shippingGivenName: orderAddress.recipientName.split(' ').slice(0, -1).join(' '),\r\n shippingSurname: orderAddress.recipientName.split(' ').slice(-1).join(' '),\r\n shippingPhone: orderAddress.phone,\r\n shippingAddress: {\r\n streetAddress: orderAddress.line1,\r\n extendedAddress: orderAddress.line2,\r\n locality: orderAddress.city,\r\n region: orderAddress.state,\r\n postalCode: decodeURIComponent(orderAddress.postalCode),\r\n countryCodeAlpha2: orderAddress.countryCode\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Updates Order data on Checkout\r\n */\r\nfunction updateOrderData() {\r\n $.ajax({\r\n url: document.querySelector('.js_braintree_getOrderInfoUrl').value + '?qwe=2344',\r\n type: 'get',\r\n dataType: 'json',\r\n success: function (data) {\r\n data.shippingAdditionalInfo = data.shippingAddress ? getShippingAdditionalInfo(data.shippingAddress) : null;\r\n orderData = data;\r\n },\r\n error: function () {\r\n window.location.reload();\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Returns fraud data from dataCollector payload\r\n * @returns {Object} Payload with fraud data\r\n */\r\nfunction collectFraudData() {\r\n var response;\r\n\r\n if (sitePrefs && sitePrefs.isFraudToolsEnabled) {\r\n response = braintreeGeneral.collectFraudData(btClientInstancePromise);\r\n } else {\r\n response = Promise.resolve({\r\n customMessage: 'Fraud Data collection isn\\t enabled via Custom Site Preference'\r\n });\r\n }\r\n\r\n return response;\r\n}\r\n\r\n/**\r\n * Inits Credit Card hosted fields\r\n * @returns {Object} Hosted Fields instance\r\n */\r\nfunction initCreditCardFields() {\r\n var hostedFieldsParams = null;\r\n var styles = creditCardFormFieldHelper.getHostedFieldsStyles();\r\n var configs = creditCardFormFieldHelper.getHostedFieldsConfig();\r\n\r\n hostedFieldsParams = {\r\n styles,\r\n configs\r\n };\r\n\r\n return braintreeCreditCardSDK.createHostedFields(hostedFieldsParams)\r\n .then(function (hfInstance) {\r\n // init hosted fields instance globaly\r\n hostedFieldsInstance = hfInstance;\r\n\r\n return hfInstance;\r\n });\r\n}\r\n\r\n/**\r\n * Creates Credit Card hosted fields\r\n */\r\nfunction clearHostedFields() {\r\n braintreeCreditCardSDK.clearHostedFields(hostedFieldsInstance);\r\n}\r\n\r\n// eslint-disable-next-line valid-jsdoc\r\n/**\r\n * Tokenizes previouselly filled hosted Credit Card fields and returns a nonce payload\r\n * @returns {Promise} Promise with { error: false, result: 'ok'} inside in case of positive response and\r\n * { error: true} in case of negative (reject, case)\r\n */\r\nfunction tokenize(isCheckoutPage) {\r\n var tokenizationOptions;\r\n\r\n // \"Hosted Field Instance\" validation\r\n if (!hostedFieldsInstance) {\r\n return Promise.reject({\r\n customError: '\"hostedFieldsInstance\" is not define. Tokenization can\\'t be done'\r\n });\r\n }\r\n\r\n if (isCheckoutPage) {\r\n // Pull billing address from Storefront. Passed data will be tokenized and sent to Braintree\r\n tokenizationOptions = braintreeCreditCardSdkHelper.createTokenizationOptions();\r\n } else {\r\n tokenizationOptions = {};\r\n }\r\n\r\n return braintreeCreditCardSDK.tokenize(hostedFieldsInstance, tokenizationOptions)\r\n .then(function (payload) {\r\n return {\r\n btTokenizePayload: payload\r\n };\r\n });\r\n}\r\n\r\n/**\r\n * Launch the 3D Secure login flow, returning a nonce payload.\r\n * @param {string} nonce Payment method nonce\r\n * @param {string} bin Payment method bin\r\n * @param {number} amount Total amount\r\n * @param {string} email Email\r\n * @param {Object} billingData Object with Credit Card billing data\r\n * @param {Object} shippingAdditionalInfo Object with shipping info\r\n * @param {Object} btTokenizePayload Tokenize payload\r\n * @returns {Object} Object with nonce payload or custom error\r\n */\r\nfunction apply3dSecureValidation(nonce, bin, amount, email, billingData, shippingAdditionalInfo, btTokenizePayload) {\r\n return braintreeCreditCardSDK.apply3dSecureValidation(nonce, bin, amount, email, billingData, shippingAdditionalInfo)\r\n .then(function (payload) {\r\n if (payload.liabilityShifted || sitePrefs.isSkip3dSecureLiabilityResult) {\r\n // \"Nonce\" is changed after successful 3DS validation. We need this line to store the last \"nonce\" value\r\n if (btTokenizePayload) {\r\n // For stored card use case we don't need this param\r\n btTokenizePayload.nonce = payload.nonce;\r\n }\r\n\r\n return {\r\n threeDSecureDataValidationPayload: payload,\r\n btTokenizePayload: btTokenizePayload\r\n };\r\n }\r\n\r\n // Case when buyer \"canceled\" 3DS window\r\n return Promise.reject({\r\n customError: '3DS popup was canceled by buyer'\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Process the new Credit Card\r\n * @param {string} email Email\r\n * @param {Object} billingData Object with Credit Card billing data\r\n * @param {boolean} isCheckoutPage Is checkout flow flag\r\n * @returns {Object} Object with nonce payload or custom error\r\n */\r\nfunction processNewCard(email, billingData, isCheckoutPage) {\r\n var is3dSecureDisabled = sitePrefs && !sitePrefs.is3dSecureEnabled;\r\n var orderAmount = orderData.amount;\r\n var shippingAdditionalInfo = orderData.shippingAdditionalInfo;\r\n var nonce = null;\r\n var bin = null;\r\n var result = null;\r\n\r\n result = tokenize(isCheckoutPage);\r\n\r\n if (!is3dSecureDisabled) {\r\n result = result\r\n .then(function (payload) {\r\n nonce = payload.btTokenizePayload.nonce;\r\n bin = payload.btTokenizePayload.details ? payload.btTokenizePayload.details.bin : '';\r\n\r\n return apply3dSecureValidation(\r\n nonce,\r\n bin,\r\n orderAmount,\r\n email,\r\n billingData,\r\n shippingAdditionalInfo,\r\n payload.btTokenizePayload\r\n );\r\n });\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Process the stored Credit Card\r\n * @param {string} email Email\r\n * @param {Object} billingData Object with Credit Card billing data\r\n * @param {string} nonce Payment method nonce\r\n * @param {string} bin Payment method bin\r\n * @returns {Object} Object with nonce payload or custom error\r\n */\r\nfunction processStoredCard(email, billingData, nonce, bin) {\r\n var orderAmount = orderData.amount;\r\n var shippingAdditionalInfo = orderData.shippingAdditionalInfo;\r\n var is3dSecureDisabled = sitePrefs && !sitePrefs.is3dSecureEnabled;\r\n var result = null;\r\n\r\n // Case when we have a nonce, it is the case when buyer use stored credit card\r\n // otherwise, it is the case when buyer use new credit card\r\n if (is3dSecureDisabled) {\r\n result = Promise.resolve({\r\n nonce,\r\n email,\r\n bin\r\n });\r\n } else {\r\n result = apply3dSecureValidation(\r\n nonce,\r\n bin,\r\n orderAmount,\r\n email,\r\n billingData,\r\n shippingAdditionalInfo\r\n );\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * In case of session card we can do nothing since the nonce, 3ds, hosted fields validation already was passed\r\n * @returns {Promise} return Promise with success data\r\n */\r\nfunction processSessionCard() {\r\n return Promise.resolve({});\r\n}\r\n\r\n/**\r\n * Checks whether the basket is valid\r\n * @param {string} errorMessage Error message\r\n * @returns {Object} response object\r\n */\r\nfunction isBasketDataValid(errorMessage) {\r\n var response = {\r\n error: false,\r\n customErrorMessage: ''\r\n };\r\n\r\n if (!orderData || orderData.amount === 0) {\r\n response.error = true;\r\n response.customErrorMessage = errorMessage;\r\n }\r\n\r\n return response;\r\n}\r\n\r\n/**\r\n * Get BT client instance which is used currently in the model\r\n * @returns {Promise} BT client instance promise\r\n */\r\nfunction getClientInstancePromise() {\r\n return btClientInstancePromise;\r\n}\r\n\r\nmodule.exports = {\r\n init,\r\n // \"tokenize\" or \"processNewCard\", or \"processStoredCard\", or \"clearHostedFields\"\r\n // can be called only after excution of \"initCreditCardFields\"\r\n tokenize,\r\n initCreditCardFields,\r\n processNewCard,\r\n processStoredCard,\r\n processSessionCard,\r\n clearHostedFields,\r\n getClientInstancePromise,\r\n\r\n // \"isBasketDataValid\" can be called only after calling of \"updateOrderData\"\r\n isBasketDataValid,\r\n updateOrderData,\r\n\r\n collectFraudData\r\n};\r\n","'use strict';\r\nvar braintreeCreditCardModel = require('./braintreeCreditCardModel');\r\nvar braintreeGeneral = require('../../braintreeGeneral');\r\nvar creditCardHelper = require('../helpers/creditCardHelper');\r\n\r\n/**\r\n * Initialize Braintree Credit Card Model. Pattern Builder is used\r\n * @returns {Object} object with booleam \"error\" flag and \"message\" attribute with error message\r\n */\r\nfunction init() {\r\n var braintreeCreditCardConfigs = creditCardHelper.getCheckoutBraintreeCreditCardConfigs();\r\n var clientToken;\r\n var btClientInstancePromise;\r\n var isSkip3dSecureLiabilityResult;\r\n var is3dSecureEnabled;\r\n var isFraudToolsEnabled;\r\n var response = {\r\n error: false,\r\n message: '',\r\n btCreditCardModel: null,\r\n btCreditCardConfigs: null\r\n };\r\n\r\n if (braintreeCreditCardConfigs) {\r\n clientToken = braintreeCreditCardConfigs.clientToken;\r\n btClientInstancePromise = braintreeGeneral.createClientInstance(clientToken);\r\n isSkip3dSecureLiabilityResult = braintreeCreditCardConfigs.isSkip3dSecureLiabilityResult;\r\n is3dSecureEnabled = braintreeCreditCardConfigs.is3dSecureEnabled;\r\n isFraudToolsEnabled = braintreeCreditCardConfigs.isFraudToolsEnabled;\r\n\r\n braintreeCreditCardModel.init(\r\n btClientInstancePromise,\r\n isSkip3dSecureLiabilityResult,\r\n is3dSecureEnabled,\r\n isFraudToolsEnabled\r\n );\r\n\r\n response.btCreditCardModel = braintreeCreditCardModel;\r\n response.btCreditCardConfigs = braintreeCreditCardConfigs;\r\n } else {\r\n response.error = true;\r\n response.message = 'No Credit Card Braintree Configurations';\r\n }\r\n\r\n return response;\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\n/* global braintreeUtils braintree $ */\r\n\r\nvar btClientInstancePromise;\r\n\r\n/**\r\n * Returns a promise that resolves with the HostedFields instance.\r\n * @param {Object} hostedFieldsParams Object of hosted fieds parameters\r\n * @returns {Object} Object with hosted field parameters\r\n */\r\nfunction createHostedFields(hostedFieldsParams) {\r\n return btClientInstancePromise\r\n .then(function (btClientInstance) {\r\n return braintree.hostedFields.create({\r\n client: btClientInstance,\r\n styles: hostedFieldsParams.styles,\r\n fields: hostedFieldsParams.configs\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Launch the 3D Secure login flow, returning a nonce payload.\r\n * @param {string} nonce Payment method nonce\r\n * @param {string} bin Payment method bin\r\n * @param {number} amount Total amount\r\n * @param {string} email Email\r\n * @param {Object} billingData Object with Credit Card billing data\r\n * @param {Object} shippingAdditionalInfo Object with Credit Card shipping info\r\n * @returns {Object} 3DS instance\r\n */\r\nfunction apply3dSecureValidation(nonce, bin, amount, email, billingData, shippingAdditionalInfo) {\r\n return btClientInstancePromise\r\n .then(function (btClientInstance) {\r\n return braintree.threeDSecure.create({\r\n client: btClientInstance,\r\n version: 2\r\n })\r\n .then(function (threeDSecure) {\r\n return threeDSecure.verifyCard({\r\n amount: amount,\r\n nonce: nonce,\r\n bin: bin || '',\r\n email: email,\r\n billingAddress: {\r\n givenName: billingData.firstName,\r\n surname: billingData.lastName,\r\n phoneNumber: billingData.phone,\r\n streetAddress: billingData.address1,\r\n extendedAddress: billingData.address2,\r\n locality: billingData.city,\r\n region: billingData.stateCode,\r\n postalCode: decodeURIComponent(billingData.postalCode),\r\n countryCodeAlpha2: billingData.country\r\n },\r\n additionalInformation: shippingAdditionalInfo,\r\n onLookupComplete: function (data, next) {\r\n next();\r\n }\r\n });\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Tokenizes a Credit Card and returns a nonce payload.\r\n * @param {HostedFileds} hfInstance Hosted fieled instance\r\n * @param {Object} tokenizationOptions Credit Card tokenization option\r\n * @returns {Promise} A promise that resolves with a tokenizePayload.\r\n */\r\nfunction tokenize(hfInstance, tokenizationOptions) {\r\n var tokenizeOption = tokenizationOptions || {};\r\n\r\n return hfInstance.tokenize(tokenizeOption);\r\n}\r\n\r\n/**\r\n * Clear the value of the field\r\n * @param {HostedFileds} hfInstance Hosted fieled instance\r\n */\r\nfunction clearHostedFields(hfInstance) {\r\n hfInstance.clear('cardholderName');\r\n hfInstance.clear('number');\r\n hfInstance.clear('cvv');\r\n hfInstance.clear('expirationDate');\r\n}\r\n\r\n/**\r\n *\r\n * @param {Promise} braintreeClientInstancePromise Braintree Credit Card instance promise\r\n */\r\nfunction init(braintreeClientInstancePromise) {\r\n btClientInstancePromise = braintreeClientInstancePromise;\r\n}\r\n\r\nmodule.exports = {\r\n init,\r\n createHostedFields,\r\n apply3dSecureValidation,\r\n tokenize,\r\n clearHostedFields\r\n};\r\n","'use strict';\r\n\r\nvar loaderInstance = require('../../loaderHelper');\r\nvar creditCardVaultManager = require('./creditCardVaultManager');\r\n\r\nvar braintreeCreditCardModel;\r\nvar addNewCreditCardLoader;\r\n\r\n// Helpers\r\nvar creditCardAccountHelper = require('../helpers/creditCardAccountHelper');\r\n\r\n// Loader selectors\r\nvar $braintreeCreditCardLoader = document.querySelector('#braintreeCreditCardLoader');\r\nvar $customCreditCardErrorContainer = document.querySelector('#customCreditCardErrorContainer');\r\n\r\nvar errHandlingModel;\r\nvar ccMessages;\r\n\r\n/**\r\n * Check whenever is new card is presented on Storefront and in VaultMgr. If yes - render error message.\r\n * @param {Promise} clientInstancePromise client instance promise\r\n * @param {Object} btPayload payload from Braintree\r\n * @param {Object} errorList object with errors\r\n * @returns {Promise} promise with reject status in case if new card already exists in VaultMgr and on Storefront (buyer's wallet)\r\n */\r\nfunction rejectIfCardExistsInVault(clientInstancePromise, btPayload, errorList) {\r\n var payloadDetails = btPayload.details;\r\n var lastFour = payloadDetails.lastFour.toString();\r\n var type = payloadDetails.cardType.toLowerCase();\r\n\r\n return creditCardVaultManager.isNewCardCanBeStored(clientInstancePromise, lastFour, type)\r\n .then(function (newCardCanBeStored) {\r\n if (!newCardCanBeStored) {\r\n // eslint-disable-next-line no-undef\r\n return Promise.reject(errorList.CARD_ALREADY_EXIST_ERROR_MESSAGE);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Stores new Credit Card on account page\r\n * @param {Object} event Event object\r\n * @returns {void}\r\n */\r\nfunction storeNewCreditCard(event) {\r\n var isCheckoutPage = false;\r\n var customErrorList = JSON.parse($customCreditCardErrorContainer.getAttribute('data-errors'));\r\n\r\n // Clears error messages on the top of the Account Page\r\n errHandlingModel.hideError();\r\n\r\n try {\r\n if (!braintreeCreditCardModel) {\r\n throw ccMessages.CLIENT_MISSING_GATEWAY_CONFIGURATION;\r\n }\r\n\r\n addNewCreditCardLoader.show();\r\n\r\n var clientInstancePromise = braintreeCreditCardModel.getClientInstancePromise();\r\n\r\n braintreeCreditCardModel.tokenize(isCheckoutPage)\r\n .then(function (btModelPayload) {\r\n var tokenizePayload = btModelPayload.btTokenizePayload;\r\n var $addCreditCardForm = $('.js_braintree_addCreditCardForm');\r\n var addCreditCardFormUrl = $addCreditCardForm.attr('action');\r\n var formData;\r\n\r\n return rejectIfCardExistsInVault(clientInstancePromise, tokenizePayload, customErrorList)\r\n .then(function () {\r\n // Sets value of Credit Card hidden fields needed for server side\r\n creditCardAccountHelper.setCardHiddenFields(tokenizePayload);\r\n\r\n // Call to Braintree-AccountAddCreditCardHandle preparetion\r\n formData = $addCreditCardForm.serialize();\r\n\r\n return $.ajax({\r\n url: addCreditCardFormUrl,\r\n type: 'post',\r\n dataType: 'json',\r\n data: formData\r\n })\r\n .then(function (response) {\r\n if (!response.success) {\r\n errHandlingModel.creditCardErrorHandler(response.error);\r\n } else {\r\n location.href = response.redirectUrl;\r\n }\r\n });\r\n });\r\n })\r\n .catch(function (error) {\r\n errHandlingModel.creditCardErrorHandler(error);\r\n })\r\n .finally(function () {\r\n addNewCreditCardLoader.hide();\r\n });\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n } catch (err) {\r\n errHandlingModel.creditCardErrorHandler(err);\r\n }\r\n}\r\n\r\n/**\r\n * Inits Credit Card account loaders\r\n */\r\nfunction initCreditCartAccountLoaders() {\r\n var braintreeCreditCardLoaderExists = Boolean($braintreeCreditCardLoader);\r\n\r\n if (braintreeCreditCardLoaderExists) {\r\n addNewCreditCardLoader = loaderInstance($braintreeCreditCardLoader);\r\n }\r\n}\r\n\r\n/**\r\n * Init Credit Card Account functionality\r\n * @param {Object} btCreditCardModel Braintree Credit Card model\r\n * @param {Constructor} errorHandlingModel Error handling model\r\n * @param {Object} creditCardMessages List of Credit Card error messages\r\n */\r\nfunction init(btCreditCardModel, errorHandlingModel, creditCardMessages) {\r\n var addNewCreditCardFormExists = Boolean(document.querySelector('.js_braintree_addCreditCardForm'));\r\n errHandlingModel = errorHandlingModel;\r\n ccMessages = creditCardMessages;\r\n\r\n var clientInstancePromise = btCreditCardModel.getClientInstancePromise();\r\n\r\n initCreditCartAccountLoaders();\r\n creditCardVaultManager.removeFromDomCardsWhichAreNotInVaultMgr(clientInstancePromise);\r\n\r\n braintreeCreditCardModel = btCreditCardModel;\r\n\r\n // \"Store new Card\" button functionality initiation (works only when 3DS is disabled)\r\n if (addNewCreditCardFormExists) {\r\n $('.braintreeAddNewCardBlock').on('click', '.braintreeCreditCardBtn', storeNewCreditCard);\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * General validation of params needed for initialization of hosted fields\r\n * @param {Object} $braintreeCreditCardFieldsContainer Braintree Credit Card fields container\r\n * @param {Object} braintreeCreditCardConfig Braintree Credit Card configurations (they came from server via data attr)\r\n * @returns {Object} object with \"error\" boolean flag and array of error messages from \"massages\" attr\r\n */\r\nfunction generalHfValidation($braintreeCreditCardFieldsContainer, braintreeCreditCardConfig) {\r\n var response = {\r\n error: false,\r\n messages: ''\r\n };\r\n\r\n try {\r\n var isHostedFieldsWasInited = JSON.parse($braintreeCreditCardFieldsContainer.getAttribute('data-is-inited'));\r\n var isBraintreeCreditCardConfigValid = typeof braintreeCreditCardConfig !== 'object' || braintreeCreditCardConfig !== null;\r\n\r\n if (isHostedFieldsWasInited) {\r\n // do not add error msg since this case is expected (hosted fields should be inited just once)\r\n response.error = true;\r\n }\r\n if (!isBraintreeCreditCardConfigValid) {\r\n response.error = true;\r\n response.messages = '.js_braintree_creditCardFields has not valid data-braintree-config';\r\n }\r\n } catch (error) {\r\n response.error = true;\r\n response.messages = error;\r\n }\r\n\r\n return response;\r\n}\r\n\r\n/**\r\n * Init Credit Card fields functionality\r\n * @param {Object} btCreditCardModel Braintree Credit Card model\r\n * @param {Object} $continueButton Continue button\r\n * @param {Constructor} errorHandlingModel Error handling model\r\n */\r\nfunction init(btCreditCardModel, $continueButton, errorHandlingModel) {\r\n errorHandlingModel.hideError();\r\n\r\n document.querySelectorAll('.js_braintree_creditCardFields').forEach(function (el) {\r\n try {\r\n var $braintreeCreditCardFieldsContainer = el;\r\n var braintreeCreditCardConfig = JSON.parse($braintreeCreditCardFieldsContainer.getAttribute('data-braintree-config'));\r\n var generalHostedFieldsValidation = generalHfValidation($braintreeCreditCardFieldsContainer, braintreeCreditCardConfig);\r\n\r\n if (generalHostedFieldsValidation.error) {\r\n if (generalHostedFieldsValidation.messages.length) {\r\n throw generalHostedFieldsValidation.messages;\r\n }\r\n }\r\n\r\n // Fraud Data will be only collected in case if corresponding Site Preference is enabled\r\n // For more details go inside \"btCreditCardModel.collectFraudData\" function logic\r\n btCreditCardModel.collectFraudData()\r\n .then(function (fraudDataPayload) {\r\n var $braintreeDeviceData = document.querySelector('#braintreeDeviceData');\r\n\r\n if (fraudDataPayload.deviceData) {\r\n $braintreeDeviceData.value = fraudDataPayload.deviceData;\r\n }\r\n\r\n // Init \"Credit Card Hosted Fields\"\r\n return btCreditCardModel.initCreditCardFields($continueButton);\r\n })\r\n .catch(function (err) {\r\n errorHandlingModel.creditCardErrorHandler(err);\r\n });\r\n\r\n // Update order data inside BT model each time when buyer update checkout view\r\n $('body').on('checkout:updateCheckoutView', btCreditCardModel.updateOrderData);\r\n\r\n // To prevent from repeatable Credit Card hosted fields initialization\r\n $braintreeCreditCardFieldsContainer.setAttribute('data-is-inited', true);\r\n } catch (err) {\r\n errorHandlingModel.creditCardErrorHandler(err);\r\n }\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\nvar creditCardFormFieldHelper = require('../helpers/creditCardFormFieldsHelper');\r\nvar creditCardVaultManagerComponent = require('./creditCardVaultManager');\r\nvar creditCardPaymentProcessingHelper = require('../helpers/creditCardPaymentProcessingHelper');\r\nvar creditCardHelper = require('../helpers/creditCardHelper');\r\n\r\n/**\r\n * Makes the necessary setting for 'Save Credit Card block' on the Billing Page\r\n * @param {boolean} saveCreditCard true/false\r\n * @param {boolean} displaySaveCreditCardBlock true/false\r\n */\r\nfunction saveCreditCardBlockManipulation(saveCreditCard, displaySaveCreditCardBlock) {\r\n var $saveCreditCard = document.querySelector('#braintreeSaveCreditCard');\r\n var $braintreeSaveCardContainer = document.querySelector('#braintreeSaveCardContainer');\r\n\r\n if ($braintreeSaveCardContainer) {\r\n $braintreeSaveCardContainer.style.display = displaySaveCreditCardBlock ? 'block' : 'none';\r\n $saveCreditCard.checked = saveCreditCard;\r\n }\r\n}\r\n\r\n/**\r\n * Handles changing of Credit Card list on the Billing Page\r\n * @param {Constructor} errorHandlingModel Error handling model\r\n */\r\nfunction cardListChange(errorHandlingModel) {\r\n var btUtils = require('../../braintreeUtils');\r\n\r\n var $creditCardList = creditCardFormFieldHelper.getCreditCardListContainer();\r\n var $braintreeCreditCardNonce = creditCardFormFieldHelper.getCreditCardNonceFieldContainer();\r\n var $braintreeCardPaymentMethod = document.querySelector('#braintreeCardPaymentMethod');\r\n\r\n var creditCardOption = $creditCardList.selectedOptions[0];\r\n var creditCardOptionID = creditCardOption.id;\r\n var creditCardFieldsToDisplayArray = creditCardFormFieldHelper.getCCFieldsToDisplay().asArray;\r\n var creditCardHostedFieldsArray = creditCardFormFieldHelper.getCCFields().asArray;\r\n var creditCardFiledsToDisplayObject = creditCardFormFieldHelper.getCCFieldsToDisplay().asObject;\r\n\r\n // Variables only for \"braintreeSessionCreditAccount\" case\r\n var selectedCreditCard;\r\n var nonce = '';\r\n var saveCreditCard = true;\r\n var showSaveCreditCardBlock = true;\r\n\r\n // Clear error messages on the Billing Page\r\n errorHandlingModel.hideError();\r\n\r\n switch (creditCardOptionID) {\r\n // When buyer selected \"new cc\"\r\n case 'newCardAccount':\r\n // Hide 'toDisplay' fields\r\n creditCardFormFieldHelper.hideCardElements(creditCardFieldsToDisplayArray);\r\n\r\n creditCardFormFieldHelper.showCardElements(creditCardHostedFieldsArray);\r\n\r\n // Display \"Save Credit Card\" block, and mark it as checked\r\n saveCreditCardBlockManipulation(saveCreditCard, showSaveCreditCardBlock);\r\n\r\n $braintreeCreditCardNonce.value = '';\r\n $braintreeCardPaymentMethod.value = 'CREDIT';\r\n break;\r\n\r\n case 'braintreeSessionCreditAccount':\r\n selectedCreditCard = btUtils.getSelectedData($creditCardList);\r\n nonce = selectedCreditCard['data-nonce'].value;\r\n saveCreditCard = selectedCreditCard['data-save-card'].value;\r\n\r\n // Display \"Save Credit Card\" block, and mark it as checked\r\n saveCreditCardBlockManipulation(saveCreditCard, showSaveCreditCardBlock);\r\n\r\n // Add values to the \"toDisplay\" and hidden input fields.\r\n creditCardFormFieldHelper.setCardFields(selectedCreditCard, creditCardFiledsToDisplayObject);\r\n\r\n creditCardFormFieldHelper.hideCardElements(creditCardHostedFieldsArray);\r\n creditCardFormFieldHelper.showCardElements(creditCardFieldsToDisplayArray);\r\n\r\n $braintreeCreditCardNonce.value = nonce;\r\n $braintreeCardPaymentMethod.value = selectedCreditCard['data-payment-method'].value.toUpperCase();\r\n break;\r\n\r\n // Case for saved credit cards\r\n default:\r\n saveCreditCard = false;\r\n showSaveCreditCardBlock = false;\r\n selectedCreditCard = btUtils.getSelectedData($creditCardList);\r\n\r\n // Add values to the 'toDisplay' and hidden input fields\r\n creditCardFormFieldHelper.setCardFields(selectedCreditCard, creditCardFiledsToDisplayObject);\r\n\r\n // Show these fields to the buyer\r\n creditCardFormFieldHelper.showCardElements(creditCardFieldsToDisplayArray);\r\n\r\n // Hide hosted fields (since we don't need them)\r\n creditCardFormFieldHelper.hideCardElements(creditCardHostedFieldsArray);\r\n\r\n // Display \"Save Credit Card\" block, and uncheck it\r\n saveCreditCardBlockManipulation(saveCreditCard, showSaveCreditCardBlock);\r\n\r\n $braintreeCreditCardNonce.value = nonce;\r\n $braintreeCardPaymentMethod.value = selectedCreditCard['data-payment-method'].value.toUpperCase();\r\n break;\r\n }\r\n}\r\n\r\n/**\r\n * Hide stored card if the new card is the same as already stored\r\n */\r\nfunction hideStoredCardAsSessionCard() {\r\n var $sessionCreditCard = $('#braintreeSessionCreditAccount');\r\n var isSessionCardVisible = $sessionCreditCard.css('display') !== 'none';\r\n\r\n if (isSessionCardVisible) {\r\n var sessionCardType = $sessionCreditCard.data('type').toLowerCase();\r\n var sessionCardLastFour = $sessionCreditCard.data('last-four').toString();\r\n var storedAsSessionCardExists;\r\n\r\n storedAsSessionCardExists = creditCardPaymentProcessingHelper.hideAlreadyStoredCard(sessionCardLastFour, sessionCardType);\r\n\r\n if (storedAsSessionCardExists) {\r\n // Hide CC save block and unclick \"save\" checkbox\r\n creditCardHelper.hideSaveCreditCardBlock(true);\r\n creditCardHelper.saveCreditCard(false);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Inits Credit Card list functionality\r\n * @param {Object} btCreditCardModel BT Credit Card model\r\n * @param {Constructor} errorHandlingModel errorHandlingModel Error handling model\r\n */\r\nfunction init(btCreditCardModel, errorHandlingModel) {\r\n var $creditCardList = document.querySelector('#braintreeCreditCardList');\r\n var creditCardListExist = Boolean($creditCardList);\r\n var clientInstancePromise = btCreditCardModel.getClientInstancePromise();\r\n\r\n if (creditCardListExist) {\r\n $creditCardList.addEventListener('change', function () {\r\n cardListChange(errorHandlingModel);\r\n });\r\n }\r\n\r\n cardListChange(errorHandlingModel);\r\n // Only for logged in buyer with stored cards in wallet\r\n creditCardVaultManagerComponent.removeFromDomCardsWhichAreNotInVaultMgr(clientInstancePromise);\r\n hideStoredCardAsSessionCard();\r\n}\r\n\r\n\r\nmodule.exports = {\r\n init,\r\n cardListChange\r\n};\r\n","/* eslint-disable no-console */\r\n'use strict';\r\n\r\n/* global Promise braintree $ */\r\n\r\nvar helper = require('../../helper');\r\nvar creditCardFormFieldHelper = require('../helpers/creditCardFormFieldsHelper');\r\nvar btCreditCardModel = require('../braintreesdk/braintreeCreditCardModel');\r\nvar creditCardPaymentProcessingHelper = require('../helpers/creditCardPaymentProcessingHelper');\r\nvar loaderInstance = require('../../loaderHelper');\r\nvar creditCardPaymentProcessingConstants = require('../constants/creditCardPaymentProcessingConstants');\r\nvar creditCardVaultManager = require('./creditCardVaultManager');\r\nvar creditCardHelper = require('../helpers/creditCardHelper');\r\n\r\nvar $continueButton = document.querySelector('button.submit-payment');\r\nvar $creditCardList = document.querySelector('#braintreeCreditCardList');\r\nvar $braintreeCreditCardLoader = document.querySelector('#braintreeCreditCardLoader');\r\nvar $customCreditCardErrorContainer = document.querySelector('#customCreditCardErrorContainer');\r\n\r\nvar loader;\r\nvar errHandlingModel;\r\n\r\n/**\r\n * Process Credit Card on the Billing Page\r\n * @param {Object} event Event object\r\n * @returns {void}\r\n */\r\nfunction processCreditCard(event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n // Removes error messages on the Billing Page\r\n errHandlingModel.hideError();\r\n\r\n try {\r\n var customErrorMessages = JSON.parse($customCreditCardErrorContainer.getAttribute('data-errors'));\r\n var basketDataValidResponse = btCreditCardModel.isBasketDataValid(customErrorMessages.TOTAL_BASKET_AMOUNT_INVALID);\r\n var clientInstancePromise = btCreditCardModel.getClientInstancePromise();\r\n\r\n if (basketDataValidResponse.error) {\r\n throw basketDataValidResponse.customErrorMessage;\r\n }\r\n\r\n // Data passed inside \"braintreeCreditCardModel\"\r\n var billingData = helper.getBillingAddressFormValues();\r\n var email = document.querySelector('.customer-summary-email').textContent;\r\n var isCheckoutFlow = true;\r\n\r\n var creditCardFlow = creditCardPaymentProcessingHelper.getCreditCardFlowID($creditCardList);\r\n var result;\r\n\r\n loader.show();\r\n\r\n switch (creditCardFlow) {\r\n // Case for new card\r\n case creditCardPaymentProcessingConstants.FLOW_NEW_CARD_NAME:\r\n result = btCreditCardModel.processNewCard(email, billingData, isCheckoutFlow)\r\n .then(function (btPayload) {\r\n var btPayloadDetails = btPayload.btTokenizePayload.details;\r\n var newCardType = btPayloadDetails.cardType.toLowerCase();\r\n var newCardLastFour = btPayloadDetails.lastFour.toString();\r\n\r\n // Hide already stored card in case if new card is the same\r\n creditCardVaultManager.isNewCardCanBeStored(\r\n clientInstancePromise,\r\n newCardLastFour,\r\n newCardType\r\n )\r\n .then(function (newCardCanBeStored) {\r\n if (!newCardCanBeStored) {\r\n creditCardPaymentProcessingHelper.hideAlreadyStoredCard(newCardLastFour, newCardType);\r\n // Hide CC save block and unclick \"save\" checkbox\r\n creditCardHelper.hideSaveCreditCardBlock(true);\r\n creditCardHelper.saveCreditCard(false);\r\n }\r\n });\r\n\r\n // Fill hidden inputs CreditCard fields and Session CreditCard div fields\r\n creditCardPaymentProcessingHelper.fillCreditCardFormWithPayloadData(btPayload);\r\n\r\n // Filling of session card attributes for using them in business logic (client/server)\r\n creditCardPaymentProcessingHelper.setSessionCreditCardDataAttributes(btPayload);\r\n\r\n // Fill 'toDisplay' fields with data to display them for buyer\r\n creditCardPaymentProcessingHelper.fillSessionCreditCardFormWithPayloadData(btPayload);\r\n\r\n // Display \"Stored Accounts\" list\r\n creditCardPaymentProcessingHelper.displayStoredCreditCardList();\r\n\r\n // Select \"Session Account Option\" in \"Account List\"\r\n creditCardPaymentProcessingHelper.markAsSelectedSessionAccount();\r\n\r\n // Clear \"Hosted Fields\" (from iframe)\r\n btCreditCardModel.clearHostedFields();\r\n\r\n // Show \"Session Credit Card\" fields (in div blocks)\r\n creditCardFormFieldHelper.showCardElements(creditCardFormFieldHelper.getCCFieldsToDisplay().asArray);\r\n\r\n // Hide hosted fields (iframe fields)\r\n creditCardFormFieldHelper.hideCardElements(creditCardFormFieldHelper.getCCFields().asArray);\r\n helper.continueButtonToggle(false);\r\n });\r\n break;\r\n\r\n // Case for session card\r\n case creditCardPaymentProcessingConstants.FLOW__SESSION_CARD_NAME:\r\n result = btCreditCardModel.processSessionCard();\r\n break;\r\n\r\n // Case for stored card\r\n case creditCardPaymentProcessingConstants.FLOW_JS_STORED_CARD_NAME:\r\n result = creditCardPaymentProcessingHelper.getNonceFromStoredCard(clientInstancePromise, $creditCardList)\r\n .then(function (response) {\r\n var nonce = response.nonce;\r\n var bin = response.details ? response.details.bin : '';\r\n\r\n return btCreditCardModel.processStoredCard(email, billingData, nonce, bin)\r\n .then(function (btStoredCardPayload) {\r\n var threeDSecureDataValidationPayload = btStoredCardPayload.threeDSecureInfo;\r\n\r\n if (threeDSecureDataValidationPayload) {\r\n creditCardPaymentProcessingHelper.fill3DsData(threeDSecureDataValidationPayload);\r\n }\r\n });\r\n });\r\n break;\r\n\r\n default:\r\n // Handle error with wrong checkout flow\r\n result = Promise.reject(customErrorMessages.WROND_CHECKOUT_FLOW);\r\n break;\r\n }\r\n\r\n result\r\n .then(function () {\r\n loader.hide();\r\n // Trigger \"Submit Payment\" button\r\n event.target.click();\r\n })\r\n .catch(function (error) {\r\n loader.hide();\r\n\r\n // Braintree Errors\r\n errHandlingModel.creditCardErrorHandler(error);\r\n });\r\n } catch (error) {\r\n loader.hide();\r\n errHandlingModel.creditCardErrorHandler(error);\r\n }\r\n}\r\n\r\n/**\r\n * Handles submit payment event\r\n * @param {Event} event Event\r\n */\r\nfunction submitPayment(event) {\r\n var isCreditCardTabActive = creditCardPaymentProcessingHelper.isActiveCreditCardTab(); // Removes active session payment method once 'Next: Place order' button clicked\r\n\r\n helper.removeActiveSessionPayment();\r\n\r\n if (!event.isTrusted || !isCreditCardTabActive) {\r\n return;\r\n }\r\n\r\n processCreditCard(event);\r\n}\r\n\r\n/**\r\n * Inits Credit Card process on the Billing Page\r\n * @param {Constructor} errorHandlingModel Error handling constructor\r\n */\r\nfunction init(errorHandlingModel) {\r\n loader = loaderInstance($braintreeCreditCardLoader);\r\n errHandlingModel = errorHandlingModel;\r\n\r\n // click event for submit payment button\r\n $continueButton.addEventListener('click', function (event) {\r\n submitPayment(event);\r\n });\r\n\r\n // keyboard enter event for submit payment button\r\n $continueButton.addEventListener('keydown', function (event) {\r\n if (event.keyCode === 13) {\r\n submitPayment(event);\r\n }\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\nvar helper = require('../../helper');\r\nvar creditCardPaymentProcessingHelper = require('../helpers/creditCardPaymentProcessingHelper');\r\nvar creditCardHelper = require('../helpers/creditCardHelper');\r\nvar creditCardFormFieldHelper = require('../helpers/creditCardFormFieldsHelper');\r\nvar creditCardSessionAccountHelper = require('../helpers/creditCardSessionAccountHelper');\r\n\r\n/*\r\n Update Session account\r\n**/\r\nfunction clearSessionAccount(sessionOption) {\r\n sessionOption.selected = false;\r\n sessionOption.classList.add('used-creditcard-account-hide');\r\n sessionOption.classList.remove('used-creditcard-account');\r\n sessionOption.text = '';\r\n sessionOption.setAttribute('data-session-account', false);\r\n sessionOption.setAttribute('data-owner', false);\r\n sessionOption.setAttribute('data-expiration', false);\r\n sessionOption.setAttribute('data-number', false);\r\n sessionOption.setAttribute('data-nonce', false);\r\n sessionOption.setAttribute('data-type', false);\r\n sessionOption.setAttribute('data-save-card', false);\r\n}\r\n\r\n/**\r\n * Remove Credit Card session account\r\n */\r\nfunction removeSessionNonce() {\r\n var defaultCreditCard = helper.getOptionByDataDefault('#braintreeCreditCardList');\r\n var creditCardFieldstoDisplay = creditCardFormFieldHelper.getCCFieldsToDisplay();\r\n var creditCardFieldsAsArray = creditCardFormFieldHelper.getCCFields().asArray;\r\n var sessionOption = helper.getSessionAccountOption({\r\n querySelector: '#braintreeCreditCardList',\r\n id: 'braintreeSessionCreditAccount'\r\n });\r\n\r\n if (!sessionOption) {\r\n return;\r\n }\r\n\r\n var sessionLastFour = sessionOption.getAttribute('data-last-four');\r\n var sessionType = sessionOption.getAttribute('data-type').toLowerCase();\r\n\r\n clearSessionAccount(sessionOption);\r\n\r\n // Handles case when stored and session credit card have the same type and last four digest\r\n // Makes visable already stored Credit Card in Credit Card List\r\n creditCardPaymentProcessingHelper.showAlreadyStoredCard(\r\n sessionLastFour,\r\n sessionType\r\n );\r\n\r\n creditCardSessionAccountHelper.clearCreditCardFields();\r\n creditCardSessionAccountHelper.clearCreditCardNonceField();\r\n\r\n if (defaultCreditCard) {\r\n defaultCreditCard.selected = true;\r\n\r\n creditCardFormFieldHelper.setCreditCardFieldsToDisplay(defaultCreditCard, creditCardFieldstoDisplay.asObject);\r\n\r\n // Uncheck Save Credit Card checkbox\r\n creditCardHelper.saveCreditCard(false);\r\n creditCardHelper.hideSaveCreditCardBlock(true);\r\n } else {\r\n creditCardFormFieldHelper.hideCardElements(creditCardFieldstoDisplay.asArray);\r\n creditCardFormFieldHelper.showCardElements(creditCardFieldsAsArray);\r\n\r\n // Hides 'Select a Credit Card block' on the Billing Page\r\n var ccAccount = document.querySelector('.form-group.braintree_used_creditcard_account');\r\n ccAccount.classList.remove('used-creditcard-account');\r\n ccAccount.classList.add('used-creditcard-account-hide');\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n removeSessionNonce\r\n};\r\n","'use strict';\r\n\r\nvar CreditCardVaultManagerModel = require('./creditCardVaultManagerModel');\r\n\r\n/**\r\n * Function which hide all stored CC which are not presented in VaultMgr\r\n * @param {Promise} clientInstancePromise BT client instance promise\r\n */\r\nfunction removeFromDomCardsWhichAreNotInVaultMgr(clientInstancePromise) {\r\n var CreditCardVaultManagerModelInstance = new CreditCardVaultManagerModel(clientInstancePromise);\r\n var storefrontCardArray = [];\r\n\r\n $('.js_stored_card').each(function (i, el) {\r\n var $card = $(el);\r\n\r\n storefrontCardArray.push({\r\n cardType: $card.data('type'),\r\n lastFour: $card.data('last-four'),\r\n $card: $card\r\n });\r\n });\r\n\r\n if (storefrontCardArray.length) {\r\n CreditCardVaultManagerModelInstance.getCardsWhichAreNotInVault(storefrontCardArray)\r\n .then(function (cardsWhichAreNotInVault) {\r\n cardsWhichAreNotInVault.forEach(function (card) {\r\n card.$card.remove();\r\n });\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Return true in case if passed card can be stored on the Storefront and in the Vault\r\n * @param {Promise} clientInstancePromise BT client instance promise\r\n * @param {string} lastFour last four digits of the new card\r\n * @param {string} cardType type of new card\r\n * @returns {Promise} Promise with true or false\r\n */\r\nfunction isNewCardCanBeStored(clientInstancePromise, lastFour, cardType) {\r\n var CreditCardVaultManagerModelInstance = new CreditCardVaultManagerModel(clientInstancePromise);\r\n var storefrontCardArray = [];\r\n\r\n $('.js_stored_card').each(function (i, el) {\r\n var $card = $(el);\r\n\r\n storefrontCardArray.push({\r\n cardType: $card.data('type').toLowerCase(),\r\n lastFour: $card.data('last-four'),\r\n $card: $card\r\n });\r\n });\r\n\r\n // Return \"false\" in case if new card exists on the Storefront and in the VaultMgr\r\n return CreditCardVaultManagerModelInstance.isCreditCardExistOnStorefrontAndVault(storefrontCardArray, lastFour, cardType)\r\n .then(function (isCardExists) {\r\n return !isCardExists;\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n removeFromDomCardsWhichAreNotInVaultMgr,\r\n isNewCardCanBeStored\r\n};\r\n","'use strict';\r\n\r\nvar braintreeGeneral = require('../../braintreeGeneral');\r\n\r\n/**\r\n * Constructor of VaultMgr model\r\n * @param {Promise} personalizedClientTokenPromise BT clietn instance promise\r\n */\r\nfunction CreditCardVaultManagerModel(personalizedClientTokenPromise) {\r\n this.customerPaymentMethodsFromVaultPromise = braintreeGeneral.getBtCustomerPaymentMethods(personalizedClientTokenPromise);\r\n}\r\n\r\n/**\r\n * Ger specific payment methods from VaultMgr (both CC and VisaCheckout cards)\r\n * @param {Promise} customerPaymentMethodsFromVaultPromise Promise with payment methods of buyer taken from VaultMgr\r\n * @returns {Promise} Promise with array of Cards\r\n */\r\nfunction getCardsFromVaultMgrPromise(customerPaymentMethodsFromVaultPromise) {\r\n return customerPaymentMethodsFromVaultPromise\r\n .then(function (vaultMgrPaymentMethods) {\r\n var cardPmArray = [];\r\n\r\n vaultMgrPaymentMethods.forEach(function (paymentMethod) {\r\n var isCardType = paymentMethod.type === 'CreditCard' || paymentMethod.type === 'VisaCheckoutCard';\r\n\r\n if (isCardType) {\r\n cardPmArray.push(paymentMethod);\r\n }\r\n });\r\n\r\n return cardPmArray;\r\n });\r\n}\r\n\r\n/**\r\n * Find CC by data within VaultMgr\r\n * @param {Promise} customerPaymentMethodsFromVaultPromise Array with Payment Methods from VaultMgr\r\n * @param {string} lastFour Last four credit card digits\r\n * @param {string} cardType Credit Card type (Visa, Mastercard)\r\n * @returns {Promise} Promise with found Credit Card\r\n */\r\nfunction getCardFromVaultMgrByData(customerPaymentMethodsFromVaultPromise, lastFour, cardType) {\r\n return customerPaymentMethodsFromVaultPromise\r\n .then(function (vaultMgrPaymentMethods) {\r\n return vaultMgrPaymentMethods.find(function (paymentMethod) {\r\n var isCardType = paymentMethod.type === 'CreditCard' || paymentMethod.type === 'VisaCheckoutCard';\r\n var pmDetails = paymentMethod.details;\r\n if (cardType && cardType === 'union pay') {\r\n cardType = cardType.replace(' ', '');\r\n }\r\n return isCardType && pmDetails.cardType.toLowerCase() === cardType && pmDetails.lastFour === lastFour;\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Function which look for CC by passed data inside Storefront CC list\r\n * @param {Array} storefrontCardList Array with CC from Storefront\r\n * @param {string} lastFour Last four credit card digits\r\n * @param {string} cardType Credit Card type (Visa, Mastercard)\r\n * @returns {Promise} Promise with found credit card\r\n */\r\nfunction getCardFromStorefrontByData(storefrontCardList, lastFour, cardType) {\r\n return storefrontCardList.find(function (storedStorefrontCard) {\r\n return storedStorefrontCard.lastFour.toString() === lastFour.toString() &&\r\n storedStorefrontCard.cardType.toLocaleLowerCase() === cardType.toLocaleLowerCase();\r\n });\r\n}\r\n\r\n/**\r\n * Check is CC exists on the Storefront but not in the Vault\r\n * @param {Array} storefrontCardList Array with CC from storefront\r\n * @returns {Promise} Promise with true/false. True in case if CC exists on the Storefront but not in the Vault\r\n */\r\nCreditCardVaultManagerModel.prototype.getCardsWhichAreNotInVault = function (storefrontCardList) {\r\n return getCardsFromVaultMgrPromise(this.customerPaymentMethodsFromVaultPromise)\r\n .then(function (cardPaymentMethods) {\r\n var arrayOfNotInVaultCards = [];\r\n\r\n storefrontCardList.forEach(function (storefrontCard) {\r\n var sfCardType = storefrontCard.cardType.toLocaleLowerCase();\r\n var sfLastFour = storefrontCard.lastFour.toString();\r\n var foundCard = cardPaymentMethods.find(function (vaultMgrCard) {\r\n var pmDetails = vaultMgrCard.details;\r\n\r\n if (sfCardType === 'union pay') {\r\n sfCardType = sfCardType.replace(' ', '');\r\n }\r\n return pmDetails.cardType.toLocaleLowerCase() === sfCardType && pmDetails.lastFour === sfLastFour;\r\n });\r\n\r\n if (!foundCard) {\r\n arrayOfNotInVaultCards.push(storefrontCard);\r\n }\r\n });\r\n\r\n return arrayOfNotInVaultCards;\r\n });\r\n};\r\n\r\n/**\r\n * Check is CC exists on the Storefront and in the Vault\r\n * @param {Array} storefrontCardList Array with CC from Storefront\r\n * @param {string} lastFour Last four credit card digits which buyer wants to add\r\n * @param {string} cardType Credit Card type (Visa, Mastercard) which buyer wants to add\r\n * @returns {Promise} Promise with true/fase. True in case if CC is exists in the Vault and on the Storefront\r\n */\r\nCreditCardVaultManagerModel.prototype.isCreditCardExistOnStorefrontAndVault = function (storefrontCardList, lastFour, cardType) {\r\n var storefrontCard = getCardFromStorefrontByData(storefrontCardList, lastFour, cardType);\r\n var vaultMgrCardPromise = getCardFromVaultMgrByData(\r\n this.customerPaymentMethodsFromVaultPromise,\r\n lastFour,\r\n cardType\r\n );\r\n\r\n return vaultMgrCardPromise\r\n .then(function (cardFromVaultMgr) {\r\n return cardFromVaultMgr && storefrontCard;\r\n });\r\n};\r\n\r\n/**\r\n * Return CC from VaultManager by passed data\r\n * @param {string} lastFour Last four credit card digits\r\n * @param {string} cardType Credit Card type (Visa, Mastercard)\r\n * @returns {Promise} Promise with nonce or empty string\r\n */\r\nCreditCardVaultManagerModel.prototype.getNonceByCardData = function (lastFour, cardType) {\r\n return getCardFromVaultMgrByData(\r\n this.customerPaymentMethodsFromVaultPromise,\r\n lastFour,\r\n cardType\r\n );\r\n};\r\n\r\nmodule.exports = CreditCardVaultManagerModel;\r\n","'use strict';\r\n\r\nmodule.exports = {\r\n FLOW_NEW_CARD_NAME: 'newcard',\r\n FLOW__SESSION_CARD_NAME: 'sessioncard',\r\n FLOW_JS_STORED_CARD_NAME: 'js_stored_card'\r\n};\r\n","/* eslint-disable no-console */\r\n/* eslint-disable block-scoped-var */\r\n'use strict';\r\n\r\n// Braintree SDK model builder, we need to init Braintree Credit Card model on this level, since we are using it on step of \"creditCardFields.init()\"\r\n// and on step of \"creditCardPayment.init()\".\r\nvar braintreeCreditCardModelBuilder = require('./braintreesdk/braintreeCreditCardModelBuilder');\r\n\r\n// Components\r\nvar creditCardList = require('./components/creditCardList');\r\nvar creditCardFields = require('./components/creditCardFields');\r\nvar creditCardPaymentProcessing = require('./components/creditCardPaymentProcessing');\r\nvar creditCardAccount = require('./components/creditCardAccount');\r\n\r\n// Modelds\r\nvar ErrorHandlingBaseModel = require('../creditcard/errorhandler/errorHandlingBaseModel');\r\nvar ErrorHandlingCheckoutModel = require('../creditcard/errorhandler/errorHandlingCheckoutModel');\r\n\r\nvar $continueButton = document.querySelector('button.submit-payment');\r\n\r\nvar btCreditCardModelResponse;\r\nvar creditCardMessages;\r\n\r\n/**\r\n * Inits Credit Card functionality on the Account Page\r\n * @returns {void}\r\n */\r\nfunction initAccount() {\r\n var errorHandlingBaseModel = new ErrorHandlingBaseModel(creditCardMessages);\r\n\r\n if (!btCreditCardModelResponse || btCreditCardModelResponse.error) {\r\n errorHandlingBaseModel.creditCardErrorHandler(btCreditCardModelResponse.message);\r\n }\r\n\r\n creditCardAccount.init(\r\n btCreditCardModelResponse.btCreditCardModel,\r\n errorHandlingBaseModel,\r\n creditCardMessages\r\n );\r\n\r\n creditCardFields.init(\r\n btCreditCardModelResponse.btCreditCardModel,\r\n $continueButton,\r\n errorHandlingBaseModel\r\n );\r\n}\r\n\r\n/**\r\n * Inits Credit Card functionality on the Checkout Page\r\n * @returns {void}\r\n */\r\nfunction initCheckout() {\r\n var errorHandlingCheckoutModel = new ErrorHandlingCheckoutModel(creditCardMessages);\r\n\r\n if (!btCreditCardModelResponse || btCreditCardModelResponse.error) {\r\n errorHandlingCheckoutModel.creditCardErrorHandler(btCreditCardModelResponse.message);\r\n }\r\n\r\n // Call server to update data from basket\r\n btCreditCardModelResponse.btCreditCardModel.updateOrderData();\r\n\r\n creditCardFields.init(\r\n btCreditCardModelResponse.btCreditCardModel,\r\n $continueButton,\r\n errorHandlingCheckoutModel\r\n );\r\n\r\n creditCardList.init(\r\n btCreditCardModelResponse.btCreditCardModel,\r\n errorHandlingCheckoutModel\r\n );\r\n\r\n creditCardPaymentProcessing.init(errorHandlingCheckoutModel);\r\n}\r\n\r\n/**\r\n * Inits 'braintreeCreditCardModelBuilder' on creditCard level\r\n */\r\nfunction init() {\r\n btCreditCardModelResponse = braintreeCreditCardModelBuilder.init();\r\n\r\n if (!btCreditCardModelResponse.error) {\r\n creditCardMessages = btCreditCardModelResponse.btCreditCardConfigs.messages;\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n initAccount,\r\n initCheckout,\r\n init\r\n};\r\n","'use strict';\r\n// File for form fields validation (applying red, green, yellow frame)\r\n// This file is used ONLY for validation of Owner field (since Owner field isn't a Hosted Field provided by Braintree client SDK)\r\n\r\nvar creditCardFormFieldsHelper = require('../helpers/creditCardFormFieldsHelper');\r\n\r\nvar BRAINTREE_ERROR_SELECTOR = 'braintree-hosted-fields-invalid';\r\nvar BRAINTREE_VALID_SELECTOR = 'braintree-hosted-fields-valid';\r\nvar BRAINTREE_FOCUSED_SELECTOR = 'braintree-hosted-fields-focused';\r\n\r\n/**\r\n * Returns array of filed containers\r\n * @param {Array} arrayOfFormFields Array of invalid fields\r\n * @returns {Array} Array of filed containers\r\n */\r\nfunction getArrayOfFieldContainers(arrayOfFormFields) {\r\n var collectionOfCreditCardFields = creditCardFormFieldsHelper.getCCFields().asObject;\r\n var arrayOfFieldContainers = [];\r\n var fieldContainer;\r\n\r\n arrayOfFormFields.forEach(function (fieldName) {\r\n fieldContainer = collectionOfCreditCardFields[fieldName];\r\n\r\n if (fieldContainer) {\r\n arrayOfFieldContainers.push(fieldContainer);\r\n }\r\n });\r\n\r\n return arrayOfFieldContainers;\r\n}\r\n\r\n/**\r\n * Sets 'BRAINTREE_ERROR_SELECTOR' selector to the invalid form fields\r\n * @param {Array} arrayOfInvalidFieldsFrom Array of invalisd fields\r\n */\r\nfunction makeFormFieldsInvalid(arrayOfInvalidFieldsFrom) {\r\n var arrayOfInvalidFormFields = getArrayOfFieldContainers(arrayOfInvalidFieldsFrom);\r\n\r\n arrayOfInvalidFormFields.forEach(function ($field) {\r\n // remove \"field valid\" class\r\n $field.classList.remove(BRAINTREE_VALID_SELECTOR);\r\n // add \"field not valid\" class\r\n $field.classList.add(BRAINTREE_ERROR_SELECTOR);\r\n });\r\n}\r\n\r\n/**\r\n * Makes all fields invalid\r\n */\r\nfunction makeAllFormFieldsInvalid() {\r\n var collectionOfCreditCardFields = creditCardFormFieldsHelper.getCCFields().asObject;\r\n var arrayOfCreditCardFieldNames = Object.keys(collectionOfCreditCardFields);\r\n\r\n makeFormFieldsInvalid(arrayOfCreditCardFieldNames);\r\n}\r\n\r\n/**\r\n * Makes all form fields valid\r\n */\r\nfunction makeAllFormFieldsValid() {\r\n var arrayOfCreditCardFields = creditCardFormFieldsHelper.getCCFields().asArray;\r\n\r\n arrayOfCreditCardFields.forEach(function ($field) {\r\n // remove \"field in focuse\" class\r\n $field.classList.remove(BRAINTREE_FOCUSED_SELECTOR);\r\n // remove \"field not valid\" class\r\n $field.classList.remove(BRAINTREE_ERROR_SELECTOR);\r\n // add \"field valid\" class\r\n $field.classList.add(BRAINTREE_VALID_SELECTOR);\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n makeFormFieldsInvalid,\r\n makeAllFormFieldsInvalid,\r\n makeAllFormFieldsValid\r\n};\r\n","'use strict';\r\n\r\nvar creditCardFormFieldValidation = require('./creditCardFormFieldsValidator');\r\n\r\nvar ALL_HOSTED_FIELDS_FIELDS_EMPTY = 'HOSTED_FIELDS_FIELDS_EMPTY';\r\nvar HOSTED_FIELDS_FIELDS_INVALID = 'HOSTED_FIELDS_FIELDS_INVALID';\r\n\r\n/**\r\n * Error Handling constructor\r\n * @param {Object} errorMessages Braintree Credit Card error messages\r\n */\r\nfunction ErrorHandlingBaseModel(errorMessages) {\r\n this.errorMessages = errorMessages;\r\n}\r\n\r\n// General method which should be used for cases when error came from Braintree\r\nErrorHandlingBaseModel.prototype.showErrorByObject = function (error) {\r\n var msg = error.message;\r\n var code = error.code;\r\n var errorMessage = this.errorMessages[code] || msg || this.errorMessages.CLIENT_GATEWAY_NETWORK;\r\n\r\n this.createErrorNotification(errorMessage);\r\n\r\n if (this.$topErrorMessageText && code === 'INSTANTIATION_OPTION_REQUIRED') {\r\n this.$topErrorMessageText.innerHTML = '' + errorMessage + '';\r\n }\r\n};\r\n\r\nErrorHandlingBaseModel.prototype.showErrorByMessage = function (message) {\r\n this.createErrorNotification(message);\r\n};\r\n\r\n/**\r\n * ---- Method which should hide error container and make it empty. On Account we use this one ----\r\n * ---- For all other cases this method will be overwritten by corresponding one ----\r\n *\r\n * Hide error notification\r\n */\r\nErrorHandlingBaseModel.prototype.hideError = function () {\r\n var $errorContainer = $('.error-messaging');\r\n\r\n $errorContainer.hide();\r\n $errorContainer.empty();\r\n};\r\n\r\n/**\r\n * ---- Error container which will be used on Account ----\r\n * ---- For all other cases this method will be overwritten by corresponding one ----\r\n *\r\n * Method responsible for Error Notification generation\r\n * @param {string} message Message to display inside error notification\r\n */\r\nErrorHandlingBaseModel.prototype.createErrorNotification = function (message) {\r\n var $errorContainer = $('.error-messaging');\r\n\r\n var errorHtml = '
' +\r\n '' + message + '
';\r\n\r\n $errorContainer.append(errorHtml);\r\n $errorContainer.show();\r\n window.scrollTo(0, 0);\r\n};\r\n\r\n/**\r\n * Converts Braintree fields\r\n * @param {Array} arrayOfBtFormFields Credit Cards hosted fileds in array\r\n * @returns {Array} Converted array\r\n */\r\nErrorHandlingBaseModel.prototype.convertBtFromFieldsToDw = function (arrayOfBtFormFields) {\r\n var creditCardFieldsMap = {\r\n cardholderName: 'braintreeCardOwner',\r\n number: 'braintreeCardNumber',\r\n cvv: 'braintreeCvv',\r\n expirationDate: 'braintreeExpirationDate'\r\n };\r\n var braintreeFieldName;\r\n var convertedFeeldArray = [];\r\n\r\n arrayOfBtFormFields.forEach(function (fieldName) {\r\n braintreeFieldName = creditCardFieldsMap[fieldName];\r\n convertedFeeldArray.push(braintreeFieldName);\r\n });\r\n\r\n return convertedFeeldArray;\r\n};\r\n\r\n/**\r\n * Handles all fields are empty behavior\r\n */\r\nErrorHandlingBaseModel.prototype.allFieldsAreEmptyErrorBehavior = function () {\r\n creditCardFormFieldValidation.makeAllFormFieldsInvalid();\r\n};\r\n\r\n/**\r\n * Handles some fileds are empty behavior\r\n * @param {Array} btInvalidHostedFields Invalid fileds\r\n */\r\nErrorHandlingBaseModel.prototype.someFieldsAreInvalidErrorBehavior = function (btInvalidHostedFields) {\r\n var convertedFormFields = this.convertBtFromFieldsToDw(btInvalidHostedFields);\r\n\r\n creditCardFormFieldValidation.makeFormFieldsInvalid(convertedFormFields);\r\n};\r\n\r\n/**\r\n * Process and validates case when buyer left hosted feieds empty\r\n * @param {Object} errorPayload Payload with error information\r\n * @param {string} braintreeErrorCode Error code\r\n */\r\nErrorHandlingBaseModel.prototype.processBraintreeHostedFiledsErrors = function (errorPayload, braintreeErrorCode) {\r\n switch (braintreeErrorCode) {\r\n case ALL_HOSTED_FIELDS_FIELDS_EMPTY:\r\n this.allFieldsAreEmptyErrorBehavior();\r\n break;\r\n\r\n case HOSTED_FIELDS_FIELDS_INVALID:\r\n var invalidFields = errorPayload.details.invalidFieldKeys;\r\n\r\n this.someFieldsAreInvalidErrorBehavior(invalidFields);\r\n break;\r\n default:\r\n break;\r\n }\r\n};\r\n\r\n/**\r\n * Handle \"Credit Card\" error cases.\r\n * Cases can be slpited on Custom (errors trigered via \"Promise.reject\" from our side)\r\n * and on Braintree (errors from Braintree Client SDK)\r\n * @param {Object} error Error payload from \".catch()\" block\r\n */\r\nErrorHandlingBaseModel.prototype.creditCardErrorHandler = function (error) {\r\n switch (error.name) {\r\n case 'BraintreeError':\r\n // Puts error on the top of the Credit Page\r\n this.showErrorByObject(error);\r\n this.processBraintreeHostedFiledsErrors(error, error.code);\r\n break;\r\n default:\r\n var errorMsg;\r\n\r\n // Handles the cases when 3ds secure failed\r\n if (error.customError) {\r\n errorMsg = this.errorMessages.secure3DFailed;\r\n // Not braintree errors\r\n } else {\r\n errorMsg = error.message ? error.message : error;\r\n }\r\n\r\n this.showErrorByMessage(errorMsg);\r\n break;\r\n }\r\n};\r\n\r\nmodule.exports = ErrorHandlingBaseModel;\r\n\r\n","\r\n'use strict';\r\n\r\nvar ErrorHandlingBaseModel = require('./errorHandlingBaseModel');\r\n\r\n/**\r\n * Error Handling constructor\r\n * @param {Object} errorMessages Braintree Credit Card error messages\r\n */\r\nfunction ErrorHandlingCheckoutModel(errorMessages) {\r\n ErrorHandlingBaseModel.call(this, errorMessages);\r\n\r\n this.$topErrorMessageText = document.querySelector('.error-message-text');\r\n this.$topErrorMessageWrapper = document.querySelector('.error-message');\r\n}\r\n\r\n/**\r\n * ES5 inheritance\r\n */\r\nErrorHandlingCheckoutModel.prototype = Object.create(ErrorHandlingBaseModel.prototype);\r\n\r\n// See corresponding method inside \"ErrorHandlingBaseModel\" model\r\nErrorHandlingCheckoutModel.prototype.createErrorNotification = function (message) {\r\n this.$topErrorMessageText.textContent = '';\r\n this.$topErrorMessageText.append(message);\r\n this.$topErrorMessageWrapper.style.display = 'block';\r\n\r\n window.scrollTo(0, 0);\r\n};\r\n\r\n// See corresponding method inside \"ErrorHandlingBaseModel\" model\r\nErrorHandlingCheckoutModel.prototype.hideError = function () {\r\n this.$topErrorMessageWrapper.style.display = 'none';\r\n this.$topErrorMessageText.innerHTML = '';\r\n};\r\n\r\nmodule.exports = ErrorHandlingCheckoutModel;\r\n","'use strict';\r\n\r\nvar helper = require('../../helper');\r\n\r\n/**\r\n * Creates tokenization options for 'tokenize' function.\r\n * @returns {Object} Object with tokenization options.\r\n */\r\nfunction createTokenizationOptions() {\r\n var billingData = helper.getBillingAddressFormValues();\r\n\r\n return {\r\n billingAddress: {\r\n firstName: billingData.firstName,\r\n lastName: billingData.lastName,\r\n streetAddress: billingData.address1.split('%20').join(' '),\r\n extendedAddress: billingData.address2 ? billingData.address2.split('%20').join(' ') : billingData.address2,\r\n locality: billingData.city.includes('%20') ? billingData.city.split('%20').join(' ') : billingData.city,\r\n region: billingData.stateCode,\r\n postalCode: decodeURIComponent(billingData.postalCode),\r\n countryCodeAlpha2: billingData.country.includes('$20') ? billingData.country.split('%20').join(' ') : billingData.country\r\n }\r\n };\r\n}\r\n\r\n\r\nmodule.exports = {\r\n createTokenizationOptions\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Sets value of credit card hidden fields needed for server side\r\n * @param {Object} tokenizePayload Tokenize payload\r\n */\r\nfunction setCardHiddenFields(tokenizePayload) {\r\n var tokenizePayloadDetails = tokenizePayload.details;\r\n\r\n document.querySelector('#braintreeCreditCardNonce').value = tokenizePayload.nonce;\r\n document.querySelector('#braintreeCardType').value = tokenizePayloadDetails.cardType;\r\n document.querySelector('#braintreeCardMaskNumber').value = tokenizePayloadDetails.lastFour;\r\n document.querySelector('#braintreeCardHolder').value = tokenizePayloadDetails.cardholderName;\r\n}\r\n\r\nmodule.exports = {\r\n setCardHiddenFields\r\n};\r\n","'use strict';\r\n// This file is about form fields manipulations.\r\n\r\n/**\r\n * Returns an object contains an object and an array of credit card fields to Display\r\n * @returns {Object} Object\r\n */\r\nfunction getCCFieldsToDisplay() {\r\n var $cardOwnerToDisplay = document.querySelector('#braintreeCardOwnerToDisplay');\r\n var $cardNumberToDisplay = document.querySelector('#braintreeCardNumberToDisplay');\r\n var $cardCvvToDisplay = document.querySelector('#braintreeCvvToDisplay');\r\n var $cardExpirationToDisplay = document.querySelector('#braintreeExpirationToDisplay');\r\n\r\n var ccToDisplayFieldsAsObject = {\r\n cardOwnerToDisplay: $cardOwnerToDisplay,\r\n cardNumberToDisplay: $cardNumberToDisplay,\r\n cardCvvToDisplay: $cardCvvToDisplay,\r\n cardExpirationToDisplay: $cardExpirationToDisplay\r\n };\r\n var ccToDisplayFieldsAsArray = Object.values(ccToDisplayFieldsAsObject);\r\n\r\n return {\r\n asObject: ccToDisplayFieldsAsObject,\r\n asArray: ccToDisplayFieldsAsArray\r\n };\r\n}\r\n\r\n/**\r\n * Returns an object contains an object and an array of credit card fields\r\n * @returns {Object} Object\r\n */\r\nfunction getCCFields() {\r\n var $braintreeCardOwner = document.querySelector('#braintreeCardOwner');\r\n var $braintreeExpirationDate = document.querySelector('#braintreeExpirationDate');\r\n var $braintreeCardNumber = document.querySelector('#braintreeCardNumber');\r\n var $braintreeCvv = document.querySelector('#braintreeCvv');\r\n\r\n var ccFieldsAsObject = {\r\n braintreeCardOwner: $braintreeCardOwner,\r\n braintreeExpirationDate: $braintreeExpirationDate,\r\n braintreeCardNumber: $braintreeCardNumber,\r\n braintreeCvv: $braintreeCvv\r\n };\r\n var ccFieldsAsArray = Object.values(ccFieldsAsObject);\r\n\r\n return {\r\n asObject: ccFieldsAsObject,\r\n asArray: ccFieldsAsArray\r\n };\r\n}\r\n\r\n/**\r\n * Returns braintreeCreditCardNonce container\r\n * @returns {Object} Input element\r\n */\r\nfunction getCreditCardNonceFieldContainer() {\r\n return document.querySelector('#braintreeCreditCardNonce');\r\n}\r\n\r\n/**\r\n * Returns braintreeCreditCardList container\r\n * @returns {Object} Select element\r\n */\r\nfunction getCreditCardListContainer() {\r\n return document.querySelector('#braintreeCreditCardList');\r\n}\r\n\r\n/**\r\n * Sets Credit Card field to display\r\n * @param {Object} selectedCard The values of fields to be set\r\n * @param {Object} cacheCardFields Object of elements contain credit cards fields to display\r\n */\r\nfunction setCreditCardFieldsToDisplay(selectedCard, cacheCardFields) {\r\n var cartNumber = selectedCard.dataset.number;\r\n\r\n cacheCardFields.cardNumberToDisplay.innerHTML = cartNumber;\r\n cacheCardFields.cardCvvToDisplay.innerHTML = '***';\r\n cacheCardFields.cardExpirationToDisplay.innerHTML = selectedCard.dataset.expiration;\r\n cacheCardFields.cardOwnerToDisplay.innerHTML = selectedCard.dataset.owner;\r\n\r\n document.querySelector('#braintreeCardType').value = selectedCard.dataset.type;\r\n document.querySelector('#braintreeCardMaskNumber').value = cartNumber;\r\n}\r\n\r\n/**\r\n * Sets Credit Card fileds on the Billing Page\r\n * @param {Object} selectedCard The values of fields to be set\r\n * @param {Object} cacheCardFields Object of elements contain credit cards fields\r\n */\r\nfunction setCardFields(selectedCard, cacheCardFields) {\r\n cacheCardFields.cardNumberToDisplay.innerHTML = selectedCard['data-number'].value;\r\n cacheCardFields.cardCvvToDisplay.innerHTML = '***';\r\n cacheCardFields.cardExpirationToDisplay.innerHTML = selectedCard['data-expiration'].value;\r\n cacheCardFields.cardOwnerToDisplay.innerHTML = selectedCard['data-owner'].value;\r\n\r\n document.querySelector('#braintreeCardType').value = selectedCard['data-type'].value;\r\n document.querySelector('#braintreeCardMaskNumber').value = selectedCard['data-number'].value;\r\n}\r\n\r\n/**\r\n * Shows Credit Card fileds on the Billing Page\r\n * @param {Array} cardFields Array of credit card fileds\r\n */\r\nfunction showCardElements(cardFields) {\r\n cardFields.forEach(function (el) {\r\n el.style.display = '';\r\n });\r\n}\r\n\r\n/**\r\n * Hides Credit Card fileds on the Billing Page\r\n * @param {Array} cardFields Array of Credit Card fileds\r\n */\r\nfunction hideCardElements(cardFields) {\r\n cardFields.forEach(function (el) {\r\n el.style.display = 'none';\r\n });\r\n}\r\n\r\n/**\r\n * Returns Credit Card hosted fileds styles\r\n * @returns {Object} Object of styles\r\n */\r\nfunction getHostedFieldsStyles() {\r\n return {\r\n input: {\r\n 'font-size': '16px',\r\n color: '#b7802a'\r\n },\r\n ':focus': {\r\n color: 'blue'\r\n },\r\n '.valid': {\r\n color: 'green'\r\n },\r\n '.invalid': {\r\n color: 'red'\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Returns Credit Card hosted fields configs\r\n * @returns {Object} Object of configs\r\n */\r\nfunction getHostedFieldsConfig() {\r\n return {\r\n cardholderName: {\r\n selector: '#braintreeCardOwner'\r\n },\r\n number: {\r\n selector: '#braintreeCardNumber'\r\n },\r\n cvv: {\r\n selector: '#braintreeCvv'\r\n },\r\n expirationDate: {\r\n selector: '#braintreeExpirationDate'\r\n }\r\n };\r\n}\r\n\r\nmodule.exports = {\r\n getCCFieldsToDisplay,\r\n getCCFields,\r\n getCreditCardNonceFieldContainer,\r\n getCreditCardListContainer,\r\n showCardElements,\r\n hideCardElements,\r\n setCreditCardFieldsToDisplay,\r\n setCardFields,\r\n getHostedFieldsStyles,\r\n getHostedFieldsConfig\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Uncheck Save Credit Card checkbox\r\n * @param {boolean} save true/false\r\n */\r\nfunction saveCreditCard(save) {\r\n var isSave = save ? true : false; // eslint-disable-line\r\n\r\n document.querySelector('#braintreeSaveCreditCard').checked = isSave;\r\n}\r\n\r\n/**\r\n * Hides or Display 'braintreeSaveCardContainer' container\r\n * @param {boolean} hide true/false\r\n */\r\nfunction hideSaveCreditCardBlock(hide) {\r\n var isHide = hide ? true : false; // eslint-disable-line\r\n\r\n document.querySelector('#braintreeSaveCardContainer').style.display = isHide ? 'none' : 'block';\r\n}\r\n\r\n/**\r\n * Returns Braintree Credit Card configs\r\n * @returns {Object} Braintree Credit Card configs\r\n */\r\nfunction getCheckoutBraintreeCreditCardConfigs() {\r\n var braintreeCreditCardFieldsConfigs = null;\r\n\r\n try {\r\n braintreeCreditCardFieldsConfigs = JSON.parse(document.querySelector('.js_braintree_creditCardFields').getAttribute('data-braintree-config'));\r\n } catch (error) {\r\n return braintreeCreditCardFieldsConfigs;\r\n }\r\n\r\n return braintreeCreditCardFieldsConfigs;\r\n}\r\n\r\n/**\r\n * Converts Credit Card type to one style: first letter in upper case\r\n * to make session card type look like saved CC type\r\n * ex: MasterCard -> Mastercard\r\n * @param {string} type Card type\r\n * @returns {string} Converted card type\r\n */\r\nfunction convertCreditCardType(type) {\r\n var cardType = type.toLowerCase();\r\n\r\n return cardType.replace(/_/g, ' ').replace(cardType.charAt(0), (cardType.charAt(0)).toUpperCase());\r\n}\r\n\r\nmodule.exports = {\r\n getCheckoutBraintreeCreditCardConfigs,\r\n saveCreditCard,\r\n hideSaveCreditCardBlock,\r\n convertCreditCardType\r\n};\r\n","'use strict';\r\n\r\nvar helper = require('../../helper');\r\nvar creditCardHelper = require('./creditCardHelper');\r\nvar CreditCardVaultManagerModel = require('../components/creditCardVaultManagerModel');\r\n\r\n/**\r\n * Displays stores Credit Cards list on the Billing Page\r\n */\r\nfunction displayStoredCreditCardList() {\r\n var $creditCardAccount = document.querySelector('.form-group.braintree_used_creditcard_account');\r\n\r\n $creditCardAccount.classList.remove('used-creditcard-account-hide');\r\n $creditCardAccount.classList.add('used-creditcard-account');\r\n}\r\n\r\n/**\r\n * Fills the Credit Card form hidden inputs with payload data\r\n * @param {Object} braintreeResponse Object contains the data of new payment method\r\n */\r\nfunction fillCreditCardFormWithPayloadData(braintreeResponse) {\r\n var btResponse = braintreeResponse.btTokenizePayload;\r\n var $creditCardFieldsCardNumber = document.querySelector('input[name=dwfrm_billing_creditCardFields_cardNumber]');\r\n\r\n if (btResponse) {\r\n var btResponseDetails = btResponse.details;\r\n\r\n document.querySelector('#braintreeCardType').value = creditCardHelper.convertCreditCardType(btResponseDetails.cardType);\r\n document.querySelector('#braintreeCardMaskNumber').value = '************' + btResponseDetails.lastFour;\r\n document.querySelector('#braintreeCardExpirationMonth').value = btResponseDetails.expirationMonth;\r\n document.querySelector('#braintreeCardExpirationYear').value = btResponseDetails.expirationYear.substr(2);\r\n document.querySelector('#braintreeCardHolder').value = btResponseDetails.cardholderName;\r\n\r\n if ($creditCardFieldsCardNumber) {\r\n $creditCardFieldsCardNumber.value = '************' + btResponseDetails.lastFour;\r\n }\r\n\r\n document.querySelector('input[name=braintreePaymentMethodNonce]').value = btResponse.nonce;\r\n }\r\n}\r\n\r\n/**\r\n * Fills the session Credit Card form inputs with payload data\r\n * @param {Object} braintreeResponse Object contains the data of new payment method\r\n */\r\nfunction fillSessionCreditCardFormWithPayloadData(braintreeResponse) {\r\n var btResponse = braintreeResponse.btTokenizePayload;\r\n var usedCreditCardAccount = Boolean(document.querySelector('.form-group.braintree_used_creditcard_account'));\r\n\r\n if (usedCreditCardAccount && btResponse) {\r\n var btResponseDetails = btResponse.details;\r\n var $sessionCreditCard = document.querySelector('#braintreeSessionCreditAccount');\r\n\r\n // Fields filling for displaying session card fields to the buyer\r\n document.querySelector('#braintreeCardOwnerToDisplay').textContent = btResponseDetails.cardholderName;\r\n document.querySelector('#braintreeCardNumberToDisplay').textContent = '************' + btResponseDetails.lastFour;\r\n document.querySelector('#braintreeCvvToDisplay').textContent = '***';\r\n document.querySelector('#braintreeExpirationToDisplay').textContent = btResponseDetails.expirationMonth + '/' + btResponseDetails.expirationYear.substr(2);\r\n\r\n // Fields filling for displaying session card option value\r\n $sessionCreditCard.textContent = $sessionCreditCard.getAttribute('data-type') + ' ' +\r\n $sessionCreditCard.getAttribute('data-number') + ' ' +\r\n $sessionCreditCard.getAttribute('data-expiration') + ' ' +\r\n $sessionCreditCard.getAttribute('data-owner');\r\n }\r\n}\r\n\r\n/**\r\n * Filling of session card attributes for using them in business logic (client/server)\r\n * @param {Object} braintreeResponse Tokenize payload from braintree\r\n */\r\nfunction setSessionCreditCardDataAttributes(braintreeResponse) {\r\n var btResponse = braintreeResponse.btTokenizePayload;\r\n var btResponseDetails = btResponse.details;\r\n var $sessionCreditCard = document.querySelector('#braintreeSessionCreditAccount');\r\n var isSavedCard = document.querySelector('#braintreeSaveCreditCard') ? document.querySelector('#braintreeSaveCreditCard').checked : false;\r\n\r\n $sessionCreditCard.classList.remove('used-creditcard-account-hide');\r\n $sessionCreditCard.setAttribute('data-number', '************' + btResponseDetails.lastFour);\r\n $sessionCreditCard.setAttribute('data-expiration', btResponseDetails.expirationMonth + '/' + btResponseDetails.expirationYear.substr(2));\r\n $sessionCreditCard.setAttribute('data-type', creditCardHelper.convertCreditCardType(btResponseDetails.cardType));\r\n $sessionCreditCard.setAttribute('data-last-four', btResponseDetails.lastFour);\r\n $sessionCreditCard.setAttribute('data-owner', btResponseDetails.cardholderName);\r\n $sessionCreditCard.setAttribute('data-nonce', btResponse.nonce);\r\n $sessionCreditCard.setAttribute('data-session-account', true);\r\n $sessionCreditCard.setAttribute('data-save-card', isSavedCard);\r\n}\r\n\r\n/**\r\n * Marks a session Credit Card account as selected\r\n */\r\nfunction markAsSelectedSessionAccount() {\r\n var $newCCAccount = document.getElementById('newCardAccount');\r\n var $sessionCreditCard = document.querySelector('#braintreeSessionCreditAccount');\r\n\r\n $newCCAccount.removeAttribute('selected');\r\n $sessionCreditCard.selected = true;\r\n}\r\n\r\n/**\r\n * Returns a Credit Card flow ID from selector\r\n * @param {Object} $creditCardList Selector contained the Credit Card flow ID\r\n * @returns {string} Credit Card flow ID\r\n */\r\nfunction getCreditCardFlowID($creditCardList) {\r\n var selectedOptionValue = $creditCardList.value;\r\n var selectedOption = null;\r\n var creditCardFlowID = null;\r\n\r\n var newCardID = 'newcard';\r\n var sessionCardID = 'sessioncard';\r\n var storedCardID = 'js_stored_card';\r\n\r\n switch (selectedOptionValue) {\r\n case newCardID:\r\n creditCardFlowID = newCardID;\r\n break;\r\n\r\n case sessionCardID:\r\n creditCardFlowID = sessionCardID;\r\n break;\r\n\r\n default:\r\n selectedOption = helper.getSelectedOption($creditCardList);\r\n\r\n if (selectedOption.classList.contains(storedCardID)) {\r\n creditCardFlowID = storedCardID;\r\n }\r\n break;\r\n }\r\n\r\n return creditCardFlowID;\r\n}\r\n\r\n/**\r\n * Returns object with nonce related to stored card\r\n * @param {Promise} clientInstancePromise Client instance promise\r\n * @param {Object} $creditCardList Selector with needed data\r\n * @returns {Object} Response object\r\n */\r\nfunction getNonceFromStoredCard(clientInstancePromise, $creditCardList) {\r\n var CreditCardVaultManagerModelInstance = new CreditCardVaultManagerModel(clientInstancePromise);\r\n var $selectedOption = helper.getSelectedOption($creditCardList);\r\n var cardType = $selectedOption.getAttribute('data-type').toLowerCase();\r\n var lastFour = $selectedOption.getAttribute('data-last-four').toString();\r\n\r\n return CreditCardVaultManagerModelInstance.getNonceByCardData(lastFour, cardType);\r\n}\r\n\r\n/**\r\n * Fills 3DS data\r\n * @param {Object} threeDSecureDataValidationPayload 3DS information about the card\r\n */\r\nfunction fill3DsData(threeDSecureDataValidationPayload) {\r\n var $braintreeIs3dSecureRequired = document.querySelector('#braintreeIs3dSecureRequired');\r\n\r\n if (threeDSecureDataValidationPayload && threeDSecureDataValidationPayload.liabilityShifted) {\r\n $braintreeIs3dSecureRequired.value = 'true';\r\n }\r\n}\r\n\r\n/**\r\n * Returns whether Credit Card tab is active on the Billing Page\r\n * @returns {boolean} true/false\r\n */\r\nfunction isActiveCreditCardTab() {\r\n // deactivating credit card tab when order is paid by GC\r\n var activateCcTab = !$('.js-payment-options').hasClass(\"d-none\");\r\n if (activateCcTab && $('.js-payment-options').find('[data-payment-method-id=\"CREDIT_CARD\"]').length > 0) {\r\n activateCcTab = $('.js-payment-options').find('[data-payment-method-id=\"CREDIT_CARD\"]').is(':visible');\r\n }\r\n return (document\r\n .querySelector('.payment-options[role=tablist] a[data-toggle=\"tab\"][href=\"#creditcard-content\"]')\r\n && document\r\n .querySelector('.payment-options[role=tablist] a[data-toggle=\"tab\"][href=\"#creditcard-content\"]')\r\n .classList\r\n .contains('active')) && activateCcTab || false;\r\n}\r\n\r\n/**\r\n * Get stored card by last four digits and card type\r\n * @param {string} lastFour Last four card digits\r\n * @param {string} cardType Card type\r\n * @returns {Object} Jquery object of found stored card\r\n */\r\nfunction getStoredCardByData(lastFour, cardType) {\r\n var $foundCard;\r\n\r\n $('.js_stored_card').each(function (_, $el) {\r\n var $card = $($el);\r\n var storedCardType = $card.data('type').toLowerCase();\r\n var storedCardLastFour = $card.data('last-four').toString();\r\n\r\n if (storedCardType === cardType && storedCardLastFour === lastFour) {\r\n $foundCard = $card;\r\n }\r\n });\r\n\r\n return $foundCard;\r\n}\r\n\r\n/**\r\n * Hide already stored card by last four digits and card type\r\n * @param {string} lastFour Last four card digits\r\n * @param {string} cardType Card type\r\n * @returns {boolean} true in case if stored card with provided params (lastFour, cardType) was found\r\n */\r\nfunction hideAlreadyStoredCard(lastFour, cardType) {\r\n var $storedCard = getStoredCardByData(lastFour, cardType);\r\n var flag = false;\r\n\r\n if ($storedCard) {\r\n $storedCard.hide();\r\n flag = true;\r\n }\r\n\r\n return flag;\r\n}\r\n\r\n/**\r\n * Shows already stored card by last four digits and card type\r\n * @param {string} lastFour Last four card digits\r\n * @param {string} cardType Card type\r\n * @returns {boolean} true in case if stored card with provided params (lastFour, cardType) was found\r\n */\r\nfunction showAlreadyStoredCard(lastFour, cardType) {\r\n var $storedCard = getStoredCardByData(lastFour, cardType);\r\n var flag = false;\r\n\r\n if ($storedCard) {\r\n $storedCard.show();\r\n flag = true;\r\n }\r\n\r\n return flag;\r\n}\r\n\r\nmodule.exports = {\r\n displayStoredCreditCardList,\r\n fillCreditCardFormWithPayloadData,\r\n fillSessionCreditCardFormWithPayloadData,\r\n setSessionCreditCardDataAttributes,\r\n markAsSelectedSessionAccount,\r\n getCreditCardFlowID,\r\n getNonceFromStoredCard,\r\n fill3DsData,\r\n isActiveCreditCardTab,\r\n hideAlreadyStoredCard,\r\n showAlreadyStoredCard\r\n};\r\n","'use strict';\r\n\r\nvar creditCardFormFieldHelper = require('../helpers/creditCardFormFieldsHelper');\r\n\r\n/**\r\n * Clears Credit Card fields of session account\r\n */\r\nfunction clearCreditCardFields() {\r\n var creditCardFieldsArray = creditCardFormFieldHelper.getCCFields().asArray;\r\n\r\n creditCardFieldsArray.forEach(function (el) {\r\n el.value = '';\r\n });\r\n}\r\n\r\n/**\r\n * Clears Credit Card nonce of session account\r\n */\r\nfunction clearCreditCardNonceField() {\r\n document.querySelector('#braintreeCreditCardNonce').value = '';\r\n}\r\n\r\nmodule.exports = {\r\n clearCreditCardFields,\r\n clearCreditCardNonceField\r\n};\r\n","'use strict';\r\n\r\nvar braintreeGeneral = require('../../braintreeGeneral');\r\nvar braintreeGooglePaySDK = require('../braintreesdk/braintreeGooglePaySDK');\r\n\r\n/* global Promise braintree $ */\r\n\r\n// Global variables\r\n// Is Froud tools enabled\r\nvar isFtEnabled;\r\nvar btClientInstancePromise;\r\nvar googlePaymentInstance;\r\nvar paymentsClient;\r\n\r\nvar amount;\r\n\r\n/**\r\n * Init Baintree Credit Card model\r\n * @param {Promise} braintreeClientInstancePromise Braintreee client instance promise\r\n * @param {boolean} isFraudToolsEnabled Is fraud tools enabled value\r\n */\r\nfunction init(braintreeClientInstancePromise, isFraudToolsEnabled) {\r\n braintreeGooglePaySDK.init(braintreeClientInstancePromise);\r\n\r\n btClientInstancePromise = braintreeClientInstancePromise;\r\n isFtEnabled = isFraudToolsEnabled;\r\n}\r\n\r\n/**\r\n * Returns fraud data from dataCollector payload\r\n * @returns {Object} Payload with fraud data\r\n */\r\nfunction collectFraudData() {\r\n var response;\r\n\r\n if (isFtEnabled) {\r\n response = braintreeGeneral.collectFraudData(btClientInstancePromise);\r\n } else {\r\n response = Promise.resolve({\r\n customMessage: 'Fraud Data collection isn\\t enabled via Custom Site Preference'\r\n });\r\n }\r\n\r\n return response;\r\n}\r\n\r\n/**\r\n * Preparing googlePay payment\r\n * @param {string} googleMerchantId Google Pay merchant identifier\r\n * @returns {Promise} Promise with resolve 'true' if ready to pay\r\n */\r\nfunction initGooglePay(googleMerchantId) {\r\n return braintreeGooglePaySDK.createGooglePayment(googleMerchantId)\r\n .then(function (gpInstance) {\r\n var allowedPaymentMethods = gpInstance.createPaymentDataRequest().allowedPaymentMethods;\r\n googlePaymentInstance = gpInstance;\r\n\r\n return paymentsClient.isReadyToPay({\r\n // see https://developers.google.com/pay/api/web/reference/object#IsReadyToPayRequest\r\n apiVersion: 2,\r\n apiVersionMinor: 0,\r\n allowedPaymentMethods: allowedPaymentMethods\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Creates a configuration object for use in the loadPaymentData method.\r\n * @param {Object} options Object with payment options\r\n * @returns {Object} Configuration object\r\n */\r\nfunction createPaymentDataRequest(options) {\r\n return braintreeGooglePaySDK.createPaymentDataRequest(googlePaymentInstance, options, amount);\r\n}\r\n\r\n/**\r\n * Parse the response from the tokenization.\r\n * @param {Object} paymentData The response back from the Google Pay tokenization.\r\n * @returns {Promise} Promise that resolve with a tokenizePayload\r\n */\r\nfunction parseResponse(paymentData) {\r\n return braintreeGooglePaySDK.parseResponse(paymentData, googlePaymentInstance);\r\n}\r\n\r\n/**\r\n * Update order amount\r\n */\r\nfunction googlePayUpdateAmount() {\r\n var config = JSON.parse(document.querySelector('.js_braintree_googlepay_button').getAttribute('data-braintree-config'));\r\n\r\n $.ajax({\r\n url: config.getOrderInfoUrl,\r\n async: false,\r\n type: 'get',\r\n dataType: 'json',\r\n success: function (data) {\r\n amount = data.amount;\r\n },\r\n error: function () {\r\n window.location.reload();\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Inits 'Google Pay' payment client object into braintreeGooglePayModel\r\n * @param {string} instanceType The type of the instance TEST/PRODUCTION\r\n */\r\nfunction initPaymentsClient(instanceType) {\r\n paymentsClient = new google.payments.api.PaymentsClient({ // eslint-disable-line no-undef\r\n environment: instanceType // TEST/PRODUCTION\r\n });\r\n}\r\n\r\n/**\r\n * Gets 'Google Pay' payment client object\r\n * @returns {Object}'Google Pay' payment client object\r\n */\r\nfunction getPaymentsClient() {\r\n return paymentsClient;\r\n}\r\n\r\nmodule.exports = {\r\n init,\r\n collectFraudData,\r\n initGooglePay,\r\n createPaymentDataRequest,\r\n parseResponse,\r\n googlePayUpdateAmount,\r\n // initialize a Google Pay 'PaymentsClient' object\r\n initPaymentsClient,\r\n getPaymentsClient\r\n};\r\n","'use strict';\r\n\r\nvar braintreeGooglePayModel = require('./braintreeGooglePayModel');\r\nvar braintreeGeneral = require('../../braintreeGeneral');\r\nvar googlePayHelper = require('../helpers/googlePayHelper');\r\n\r\nvar googlePayErrorMessages = require('../constants/errorMessages');\r\n\r\n/**\r\n * Initialize Braintree Google Pay Model. Pattern Builder is used\r\n * @returns {Object} Object with booleam \"error\" flag and \"message\" attribute with error message\r\n */\r\nfunction init() {\r\n var braintreeGooglePayConfigs = googlePayHelper.getBraintreeGooglePayConfigs();\r\n var clientToken;\r\n var btClientInstancePromise;\r\n var response = {\r\n error: false,\r\n message: '',\r\n btGooglePayModel: null,\r\n btGooglePayConfigs: null\r\n };\r\n\r\n if (braintreeGooglePayConfigs) {\r\n clientToken = braintreeGooglePayConfigs.clientToken;\r\n btClientInstancePromise = braintreeGeneral.createClientInstance(clientToken);\r\n\r\n braintreeGooglePayModel.init(\r\n btClientInstancePromise,\r\n braintreeGooglePayConfigs.isFraudToolsEnabled\r\n );\r\n\r\n response.btGooglePayModel = braintreeGooglePayModel;\r\n response.btGooglePayConfigs = braintreeGooglePayConfigs;\r\n } else {\r\n response.error = true;\r\n response.message = googlePayErrorMessages.NO_GOOGLE_PAY_BRAINTREE_CONFIGURATIONS;\r\n }\r\n\r\n return response;\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\n/* global braintreeUtils braintree $ */\r\n\r\nvar googlePaySDKHelper = require('../helpers/googlePaySDKHelper');\r\n\r\nvar btClientInstancePromise;\r\n\r\n/**\r\n * Creates googlePayment instance\r\n * @param {string} googleMerchantId Google Pay merchant identifier\r\n * @returns {Promise} A promise resolve with with the GooglePaymnet instance\r\n */\r\nfunction createGooglePayment(googleMerchantId) {\r\n return btClientInstancePromise\r\n .then(function (btClientInstance) {\r\n var googlePayOptions = googlePaySDKHelper.createGooglePayOptions(\r\n btClientInstance,\r\n googleMerchantId\r\n );\r\n\r\n return braintree.googlePayment.create(googlePayOptions);\r\n });\r\n}\r\n\r\n/**\r\n * Creates a configuration object for use in the loadPaymentData method.\r\n * @param {googlePaymentInstance} googlePaymentInstance Google Pay instance\r\n * @param {Object} options Object with payment options\r\n * @param {number} amount Order total amount\r\n * @returns {Object} Configuration object\r\n */\r\nfunction createPaymentDataRequest(googlePaymentInstance, options, amount) {\r\n var requestObject = {\r\n transactionInfo: {\r\n currencyCode: options.currency,\r\n totalPriceStatus: 'FINAL',\r\n totalPrice: String(amount)\r\n },\r\n merchantInfo: {\r\n merchantName: options.displayName\r\n },\r\n shippingAddressRequired: options.isShippingAddressRequired,\r\n shippingAddressParameters: {\r\n allowedCountryCodes: ['US'],\r\n phoneNumberRequired: true\r\n },\r\n emailRequired: true\r\n };\r\n\r\n if (options.merchantId) {\r\n requestObject.merchantInfo.merchantId = options.merchantId;\r\n }\r\n\r\n return googlePaymentInstance.createPaymentDataRequest(requestObject);\r\n}\r\n\r\n/**\r\n * Parse the response from the tokenization.\r\n * @param {Object} paymentData The response back from the Google Pay tokenization.\r\n * @param {googlePaymentInstance} googlePaymentInstance Google Pay instance\r\n * @returns {Promise} Promise that resolve with a tokenizePayload\r\n */\r\nfunction parseResponse(paymentData, googlePaymentInstance) {\r\n return googlePaymentInstance.parseResponse(paymentData);\r\n}\r\n\r\n/**\r\n * Inits braintreeGooglePaySDK with client instance promise\r\n * @param {Promise} braintreeClientInstancePromise Braintree client instance promise\r\n */\r\nfunction init(braintreeClientInstancePromise) {\r\n btClientInstancePromise = braintreeClientInstancePromise;\r\n}\r\n\r\nmodule.exports = {\r\n createGooglePayment,\r\n createPaymentDataRequest,\r\n parseResponse,\r\n init\r\n};\r\n","'use strict';\r\n\r\nvar helper = require('../../helper');\r\nvar loaderInstance = require('../../loaderHelper');\r\nvar paymentMethodGeneral = require('../../paymentMethodGeneral');\r\n\r\n// Global variables\r\nvar googlePayConfigs;\r\nvar googlePayBillingAddressData;\r\nvar googlePayShippingAddressData;\r\nvar googlePayNonce;\r\nvar googlepayPaymentType;\r\nvar googlePayCardDescription;\r\nvar googlepayCheckoutFormData;\r\nvar errHandlerModel;\r\n\r\nvar $braintreeGooglePayLoader = document.querySelector('.braintreeGooglepayLoader');\r\n\r\nvar loader;\r\n\r\n/**\r\n * Expends Google Pay checkout form with required data\r\n */\r\nfunction expandGooglePayCheckoutFormData() {\r\n var deviceData = document.querySelector('input[name=braintreeGooglePayDeviceDataInput]').value;\r\n var csrfToken = document.querySelector('.braintree-cart-buttons-wrap #csrf_token');\r\n\r\n googlepayCheckoutFormData.append(csrfToken.name, csrfToken.value);\r\n googlepayCheckoutFormData.append('braintreeGooglePayNonce', googlePayNonce);\r\n googlepayCheckoutFormData.append('braintreeGooglePayDeviceData', deviceData);\r\n googlepayCheckoutFormData.append('braintreeGooglePayCardDescription', googlePayCardDescription);\r\n googlepayCheckoutFormData.append('braintreeGooglepayPaymentType', googlepayPaymentType);\r\n googlepayCheckoutFormData.append('braintreeGooglePayShippingAddress', JSON.stringify(googlePayShippingAddressData) || '{}');\r\n googlepayCheckoutFormData.append('braintreeGooglePayBillingAddress', JSON.stringify(googlePayBillingAddressData) || '{}');\r\n}\r\n\r\n/**\r\n * Process Google Pay on the Cart Page\r\n */\r\nfunction processCartFlow() {\r\n var $braintreeCartButtons = document.querySelector('.braintree-cart-buttons-wrap');\r\n var placeOrderUrl = $braintreeCartButtons.getAttribute('data-checkout-placeorder-url');\r\n var checkoutFromCartUrl = $braintreeCartButtons.getAttribute('data-checkout-from-cart-url');\r\n var checkoutFormFields = $braintreeCartButtons.getAttribute('data-checkout-form-fields');\r\n var paymentFieldsData = helper.getPaymentFieldsData(googlePayBillingAddressData, googlePayConfigs.paymentMethodName);\r\n\r\n // Creates and updates Google Pay checkout form for service side\r\n googlepayCheckoutFormData = helper.createPaymentFormData(checkoutFormFields, paymentFieldsData);\r\n expandGooglePayCheckoutFormData();\r\n // submit customer form with email (CheckoutServices-SubmitCustomer)\r\n // as we skip step \"login via guest/registered user\" while express checkout\r\n // email is set only in case of guest checkout and if email is not already set\r\n paymentMethodGeneral.submitCustomerForm(googlePayBillingAddressData.email);\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: checkoutFromCartUrl,\r\n data: googlepayCheckoutFormData,\r\n contentType: false,\r\n processData: false,\r\n success: function (res) {\r\n if (res.error) {\r\n var errorMessage = '';\r\n\r\n if (res.fieldErrors.length) {\r\n res.fieldErrors.forEach(function (error, index) {\r\n var keys = Object.keys(error);\r\n\r\n if (keys.length) {\r\n errorMessage += `${keys[index].replace('dwfrm_billing_', '').replace('_', ' ')} ${res.fieldErrors[index][keys[index]]}. `;\r\n }\r\n });\r\n\r\n errHandlerModel.showErrorByMessage(errorMessage);\r\n }\r\n\r\n if (res.serverErrors.length) {\r\n res.serverErrors.forEach(function (error) {\r\n errorMessage += `${error}. `;\r\n });\r\n errHandlerModel.showErrorByMessage(errorMessage);\r\n }\r\n\r\n if (res.cartError) {\r\n window.location.href = res.redirectUrl;\r\n }\r\n\r\n return;\r\n }\r\n\r\n sessionStorage.setItem('pageState', 'cart');\r\n loader.hide();\r\n window.location.href = placeOrderUrl;\r\n },\r\n error: function (err) {\r\n if (err && err.redirectUrl) {\r\n window.location.href = err.redirectUrl;\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Inits Google Pay cart components\r\n * @param {Object} billingAddressData Billing address data object\r\n * @param {Object} shippingAddressData Shipping address data object\r\n * @param {string} nonce Payment method nonce\r\n * @param {string} paymentType Payment method type\r\n * @param {string} description Google Pay card description\r\n * @param {Constructor} errorHandlerModel Error handler Model\r\n */\r\nfunction init(billingAddressData, shippingAddressData, nonce, paymentType, description, errorHandlerModel) {\r\n var $googlepayButton = document.querySelector('.js_braintree_googlepay_button');\r\n\r\n googlePayConfigs = JSON.parse($googlepayButton.getAttribute('data-braintree-config'));\r\n googlePayBillingAddressData = billingAddressData;\r\n googlePayShippingAddressData = shippingAddressData;\r\n googlePayNonce = nonce;\r\n googlepayPaymentType = paymentType;\r\n googlePayCardDescription = description;\r\n loader = loaderInstance($braintreeGooglePayLoader);\r\n errHandlerModel = errorHandlerModel;\r\n\r\n processCartFlow();\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\nvar helper = require('../../helper');\r\n\r\n// Global variables\r\nvar googlePayBillingAddressData;\r\nvar googlePayNonce;\r\nvar googlepayPaymentType;\r\nvar googlePayCardDescription;\r\n\r\nvar $googlepayNonce = document.querySelector('#braintreeGooglePayNonce');\r\nvar $googlepayCardDescription = document.querySelector('#braintreeGooglePayCardDescription');\r\nvar $braintreeGooglepayPaymentType = document.querySelector('#braintreeGooglepayPaymentType');\r\nvar $googlePayBillingAddress = document.querySelector('#braintreeGooglePayBillingAddress');\r\n\r\n/**\r\n * Process Google Pay on the Checkout Page\r\n */\r\nfunction processCheckoutFlow() {\r\n $googlepayNonce.value = googlePayNonce;\r\n $googlepayCardDescription.value = googlePayCardDescription;\r\n $braintreeGooglepayPaymentType.value = googlepayPaymentType;\r\n\r\n // Updating Storefront Billing Form data with GooglePay Billing\r\n var storeFrontBillingData = helper.getUpdatedStoreFrontBillingData(googlePayBillingAddressData);\r\n\r\n $googlePayBillingAddress.value = JSON.stringify(googlePayBillingAddressData);\r\n\r\n helper.updateBillingFormValues(storeFrontBillingData);\r\n}\r\n\r\n/**\r\n * Inits Google Pay checkout components\r\n * @param {string} nonce Payment method nonce\r\n * @param {string} description Google Pay card description\r\n * @param {string} paymentType Payment method type\r\n * @param {Object} billingAddressData Billing address data object\r\n */\r\nfunction init(nonce, description, paymentType, billingAddressData) {\r\n googlePayBillingAddressData = billingAddressData;\r\n googlePayNonce = nonce;\r\n googlepayPaymentType = paymentType;\r\n googlePayCardDescription = description;\r\n\r\n processCheckoutFlow();\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\nvar googlePayHelper = require('../helpers/googlePayHelper');\r\n\r\n/**\r\n * Inits Google Pay list components\r\n */\r\nfunction init() {\r\n var $googlepayCardDescription = document.querySelector('#braintreeGooglePayCardDescription');\r\n var $btGooglepayAccountsList = document.querySelector('#braintreeGooglepayAccountsList');\r\n var googlePayAccountListExist = Boolean($btGooglepayAccountsList);\r\n\r\n if (googlePayAccountListExist) {\r\n $btGooglepayAccountsList.addEventListener('change', function () {\r\n googlePayHelper.googlePayContentTabHandler(true);\r\n });\r\n }\r\n\r\n if ($googlepayCardDescription.value === 'GooglePay') {\r\n $googlepayCardDescription.value = $btGooglepayAccountsList.selectedOptions[0].label;\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\n// Helpers\r\nvar googlePayHelper = require('../helpers/googlePayHelper');\r\nvar loaderInstance = require('../../loaderHelper');\r\nvar googlePayPaymentProcessingHelper = require('../helpers/googlePayPaymentProcessingHelper');\r\nvar helper = require('../../helper');\r\n\r\n// Components\r\nvar googlePayCart = require('../components/googlePayCart');\r\nvar googlePayCheckout = require('../components/googlePayCheckout');\r\nvar googlePaySessionAccount = require('../components/googlePaySessionAccount');\r\n\r\nvar googlePayPaymentProcessingConstants = require('../constants/googlePayPaymentProcessingConstants');\r\n\r\n// Global varibales\r\nvar googlePayModel;\r\nvar paymentsClient;\r\nvar googlePayConfig;\r\nvar errHandlerModel;\r\n\r\nvar $googlepayButton = document.querySelector('.js_braintree_googlepay_button');\r\nvar $braintreeGooglePayLoader = document.querySelector('.braintreeGooglepayLoader');\r\nvar $continueButton = document.querySelector('button.submit-payment');\r\n\r\nvar loader;\r\n\r\n/**\r\n * Functionality over tokenized payment\r\n * @param {Objet} data data object\r\n * @param {Object} result data object\r\n */\r\nfunction onTokenizePayment(data, result) {\r\n // General functionality for Cart and Billing Page\r\n var googlepayNonce = result.nonce;\r\n var googlepayPaymentType = result.type;\r\n var gpCardDescription = result.details.cardType + ' ' + result.details.lastFour;\r\n var billingAddressData = googlePayPaymentProcessingHelper.createGooglepayBillingAddressData(data);\r\n var googlePayFlow = googlePayPaymentProcessingHelper.getGooglePayFlowId();\r\n\r\n helper.removeActiveSessionPayment();\r\n\r\n switch (googlePayFlow) {\r\n case googlePayPaymentProcessingConstants.FLOW__CART_NAME:\r\n var shippingAddressData = googlePayPaymentProcessingHelper.createGooglepayShippingAddressData(data.shippingAddress);\r\n\r\n googlePayCart.init(billingAddressData, shippingAddressData, googlepayNonce, googlepayPaymentType, gpCardDescription, errHandlerModel);\r\n break;\r\n case googlePayPaymentProcessingConstants.FLOW_CHECKOUT_NAME:\r\n googlePayCheckout.init(googlepayNonce, gpCardDescription, googlepayPaymentType, billingAddressData);\r\n googlePaySessionAccount.showGooglepayAccount(gpCardDescription);\r\n $continueButton.click();\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n\r\n/**\r\n * Call back function to be resolved when on Google Pay payment button is clicked\r\n * @returns {void}\r\n */\r\nfunction onGooglePaymentButtonClicked() { // eslint-disable-line no-inner-declarations\r\n var options = googlePayConfig.options;\r\n var amount = options.amount;\r\n\r\n if (googlePayConfig.googleMerchantId) {\r\n options.merchantId = googlePayConfig.googleMerchantId;\r\n }\r\n\r\n errHandlerModel.hideError();\r\n\r\n try {\r\n if (amount === 0) {\r\n errHandlerModel.showOrderTotalError();\r\n }\r\n\r\n loader.show();\r\n\r\n // Updates order amount for paymentDataRequest\r\n googlePayModel.googlePayUpdateAmount();\r\n\r\n // Create a configuration object for use in the loadPaymentData method.\r\n var paymentDataRequest = googlePayModel.createPaymentDataRequest(options);\r\n\r\n // Update card payment methods to require billing address\r\n var cardPaymentMethod = paymentDataRequest.allowedPaymentMethods[0];\r\n cardPaymentMethod.parameters.billingAddressRequired = true;\r\n cardPaymentMethod.parameters.billingAddressParameters = {\r\n format: 'FULL',\r\n phoneNumberRequired: true\r\n };\r\n\r\n return paymentsClient.loadPaymentData(paymentDataRequest)\r\n .then(function (paymentData) {\r\n googlePayModel.parseResponse(paymentData)\r\n .then(function (tokenizePayload) {\r\n onTokenizePayment(paymentData, tokenizePayload);\r\n });\r\n loader.hide();\r\n })\r\n .catch(function (error) {\r\n loader.hide();\r\n errHandlerModel.googlePayErrorHandler(error);\r\n });\r\n } catch (error) {\r\n errHandlerModel.googlePayErrorHandler(error);\r\n }\r\n}\r\n\r\n/**\r\n * Init and add Google Pay on the Cart or Billing Page\r\n */\r\nfunction initGooglePay() {\r\n var result = googlePayModel.collectFraudData()\r\n .then(function (fraudDataPayload) {\r\n googlePayHelper.setGooglePayDeviceData(fraudDataPayload);\r\n loader.hide();\r\n\r\n return googlePayModel.initGooglePay(googlePayConfig.googleMerchantId)\r\n .then(function (response) {\r\n if (response.result) {\r\n // Creates 'Google Pay Button' and append to the DOM\r\n const button = paymentsClient.createButton({ onClick: onGooglePaymentButtonClicked });\r\n $googlepayButton.appendChild(button);\r\n }\r\n });\r\n });\r\n\r\n result\r\n .catch(function (error) {\r\n loader.hide();\r\n errHandlerModel.googlePayErrorHandler(error);\r\n });\r\n}\r\n\r\n/**\r\n * Inits Google Pay payment processing components\r\n * @param {Obbject} braintreeGooglePayModel Google Pay model\r\n * @param {Constructor} errorHandlerModel Error handler model\r\n */\r\nfunction init(braintreeGooglePayModel, errorHandlerModel) {\r\n loader = loaderInstance($braintreeGooglePayLoader);\r\n googlePayModel = braintreeGooglePayModel;\r\n paymentsClient = braintreeGooglePayModel.getPaymentsClient();\r\n googlePayConfig = JSON.parse($googlepayButton.getAttribute('data-braintree-config'));\r\n errHandlerModel = errorHandlerModel;\r\n\r\n initGooglePay();\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\nvar $googlepayButton = document.querySelector('.js_braintree_googlepay_button');\r\nvar $googlepayContent = document.querySelector('.js_braintree_googlepayContent');\r\n\r\n// Helpers\r\nvar helper = require('../../helper');\r\nvar googlePayHelper = require('../helpers/googlePayHelper');\r\n\r\n/**\r\n * Shows session Google Pay account on the Billing Page\r\n * @param {string} cardDescription Session card description\r\n */\r\nfunction showGooglepayAccount(cardDescription) {\r\n var $newGPAccount = document.getElementById('newGPAccount');\r\n var $gpAccount = document.querySelector('.form-group.braintree_used_googlepay_account');\r\n var $sessionAccount = document.querySelector('#sessionGPAccount');\r\n\r\n $newGPAccount.removeAttribute('selected');\r\n\r\n // Sets new session account\r\n $sessionAccount.classList.remove('used-googlepay-account-hide');\r\n $sessionAccount.classList.add('used-googlepay-account');\r\n $sessionAccount.text = cardDescription;\r\n $sessionAccount.selected = true;\r\n $sessionAccount.setAttribute('data-session-account', 'true');\r\n\r\n $gpAccount.classList.remove('used-googlepay-account-hide');\r\n $gpAccount.classList.add('used-googlepay-account');\r\n\r\n $googlepayButton.style.display = 'none';\r\n $googlepayContent.setAttribute('data-paypal-is-hide-continue-button', false);\r\n helper.continueButtonToggle(false);\r\n}\r\n\r\n/*\r\n Remove method was used and change appearance of Google Pay tab\r\n**/\r\nfunction removeSessionNonce() {\r\n var $gpAccount = document.querySelector('.form-group.braintree_used_googlepay_account');\r\n $gpAccount.classList.remove('used-googlepay-account');\r\n $gpAccount.classList.add('used-googlepay-account-hide');\r\n\r\n var $sessionAccount = document.querySelector('#sessionGPAccount');\r\n $sessionAccount.classList.add('used-googlepay-account-hide');\r\n $sessionAccount.classList.remove('used-googlepay-account');\r\n $sessionAccount.value = '';\r\n $sessionAccount.text = '';\r\n $sessionAccount.setAttribute('data-session-account', false);\r\n $sessionAccount.setAttribute('data-save', false);\r\n\r\n document.querySelector('#braintreeGooglePayNonce').value = '';\r\n document.querySelector('#braintreeGooglePayBillingAddress').value = '';\r\n document.querySelector('#braintreeGooglepayPaymentType').value = '';\r\n document.querySelector('#braintreeGooglePayDeviceData').value = '';\r\n\r\n document.querySelector('#newGPAccount').selected = true;\r\n googlePayHelper.googlePayContentTabHandler(false);\r\n}\r\n\r\nmodule.exports = {\r\n showGooglepayAccount,\r\n removeSessionNonce\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = {\r\n NO_GOOGLE_PAY_BRAINTREE_CONFIGURATIONS: 'No Google Pay Braintree Configurations',\r\n ORDER_TOTAL_0: 'Order total 0 is not allowed for GooglePay',\r\n GOOGLE_PAY_WINDOW_CLOSED: 'User closed the Payment Request UI.'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = {\r\n FLOW_CHECKOUT_NAME: 'checkout',\r\n FLOW__CART_NAME: 'cart',\r\n FLOW_NEW_GP_ACCOUNT_NAME: 'newGpAccount'\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Error Handling constructor\r\n * @param {Object} errorMessages Braintree credit card error messages\r\n */\r\nfunction ErrorHandlingBaseModel(errorMessages) {\r\n this.$errorContainer = $('.cart-error-messaging');\r\n this.errorMessages = errorMessages;\r\n}\r\n\r\n// General method which should be used for cases when error came from Braintree\r\nErrorHandlingBaseModel.prototype.showErrorByObject = function (error) {\r\n var msg = error.message;\r\n var code = error.code;\r\n var errorMessage = this.errorMessages[code] || msg || this.errorMessages.CLIENT_GATEWAY_NETWORK;\r\n\r\n this.createErrorNotification(errorMessage);\r\n};\r\n\r\n/**\r\n * Shows error by message\r\n * @param {string} message Error message\r\n */\r\nErrorHandlingBaseModel.prototype.showErrorByMessage = function (message) {\r\n this.createErrorNotification(message);\r\n};\r\n\r\n/**\r\n * ---- Error container which will be used on Cart page ----\r\n * ---- For all other cases this method will be overwritten by corresponding one ----\r\n *\r\n * Method responsible for Error Notification generation\r\n * @param {string} message Message to display inside error notification\r\n */\r\nErrorHandlingBaseModel.prototype.createErrorNotification = function (message) {\r\n $('.checkout-btn').addClass('disabled');\r\n this.$errorContainer.append(\r\n `
\r\n \r\n ${message}\r\n
`\r\n );\r\n\r\n this.$errorContainer.show();\r\n window.scrollTo(0, 0);\r\n};\r\n\r\n/**\r\n * ---- Method which should hide error container and make it empty. On Cart we use this one ----\r\n * ---- For all other cases this method will be overwritten by corresponding one ----\r\n *\r\n * Hide error notification\r\n */\r\nErrorHandlingBaseModel.prototype.hideError = function () {\r\n this.$errorContainer.hide();\r\n this.$errorContainer.empty();\r\n};\r\n\r\n/**\r\n * Shows order total equal 0 error\r\n */\r\nErrorHandlingBaseModel.prototype.showOrderTotalError = function () {\r\n var googlePayErrorMessages = require('../constants/errorMessages');\r\n var zeroAmountErrorMsg = googlePayErrorMessages.ORDER_TOTAL_0;\r\n\r\n this.showErrorByMessage(zeroAmountErrorMsg);\r\n\r\n throw zeroAmountErrorMsg;\r\n};\r\n\r\n/**\r\n * Handles Google Pay error by types\r\n * @param {Object} error Error object or error message\r\n */\r\nErrorHandlingBaseModel.prototype.googlePayErrorHandler = function (error) {\r\n var googlePayErrorMessages = require('../constants/errorMessages');\r\n\r\n if (error.name === 'BraintreeError') {\r\n this.showErrorByObject(error);\r\n } else if (error.statusCode === 'DEVELOPER_ERROR') {\r\n this.showErrorByMessage(error.statusMessage);\r\n } else if (error.message !== googlePayErrorMessages.GOOGLE_PAY_WINDOW_CLOSED) {\r\n this.showErrorByMessage(error.message);\r\n }\r\n};\r\n\r\nmodule.exports = ErrorHandlingBaseModel;\r\n","'use strict';\r\n\r\nvar ErrorHandlingBaseModel = require('./errorHandlingBaseModel');\r\n\r\n/**\r\n * Error Handling constructor\r\n * @param {Object} errorMessages Braintree credit card error messages\r\n */\r\nfunction ErrorHandlingCheckoutModel(errorMessages) {\r\n ErrorHandlingBaseModel.call(this, errorMessages);\r\n\r\n this.$topErrorMessageText = document.querySelector('.error-message-text');\r\n this.$topErrorMessageWrapper = document.querySelector('.error-message');\r\n}\r\n\r\n/**\r\n * ES5 inheritance\r\n */\r\nErrorHandlingCheckoutModel.prototype = Object.create(ErrorHandlingBaseModel.prototype);\r\n\r\n// See corresponding method inside \"ErrorHandlingBaseModel\" model\r\nErrorHandlingCheckoutModel.prototype.createErrorNotification = function (message) {\r\n this.$topErrorMessageText.textContent = '';\r\n this.$topErrorMessageText.append(message);\r\n this.$topErrorMessageWrapper.style.display = 'block';\r\n\r\n window.scrollTo(0, 0);\r\n};\r\n\r\n// See corresponding method inside \"ErrorHandlingBaseModel\" model\r\nErrorHandlingCheckoutModel.prototype.hideError = function () {\r\n this.$topErrorMessageWrapper.style.display = 'none';\r\n this.$topErrorMessageText.innerHTML = '';\r\n};\r\n\r\nmodule.exports = ErrorHandlingCheckoutModel;\r\n","'use strict';\r\n\r\nvar braintreeGooglePayModelBuilder = require('./braintreesdk/braintreeGooglePayModelBuilder');\r\n\r\nvar googlePayHelper = require('./helpers/googlePayHelper');\r\n\r\n// Components\r\nvar googlePayList = require('./components/googlePayList');\r\nvar googlePayPaymentProcessing = require('./components/googlePayPaymentProcessing');\r\n\r\n// Models\r\nvar ErrorHandlingBaseModel = require('./errorhandler/errorHandlingBaseModel');\r\nvar ErrorHandlingCheckoutModel = require('./errorhandler/errorHandlingCheckoutModel');\r\n\r\nvar googlePayErrorMessages = require('./constants/errorMessages');\r\n\r\nvar braintreeGooglePayModelResponse;\r\nvar googlePayMessages;\r\n\r\n/**\r\n * Inits Google Pay on the Cart Page\r\n */\r\nfunction initCart() {\r\n var errorHandlerBaseModel = new ErrorHandlingBaseModel(googlePayMessages);\r\n\r\n if (!braintreeGooglePayModelResponse || braintreeGooglePayModelResponse.error) {\r\n var error = braintreeGooglePayModelResponse.error || googlePayErrorMessages.NO_GOOGLE_PAY_BRAINTREE_CONFIGURATIONS;\r\n errorHandlerBaseModel.googlePayErrorHandler(error);\r\n }\r\n\r\n // Initialize a Google Pay 'PaymentsClient' object\r\n braintreeGooglePayModelResponse.btGooglePayModel.initPaymentsClient(\r\n braintreeGooglePayModelResponse.btGooglePayConfigs.instanceType\r\n );\r\n\r\n googlePayPaymentProcessing.init(\r\n braintreeGooglePayModelResponse.btGooglePayModel,\r\n errorHandlerBaseModel\r\n );\r\n}\r\n\r\n/**\r\n * Inits Google Pay on the Checkout Page\r\n */\r\nfunction initCheckout() {\r\n var errorHandlerCheckoutModel = new ErrorHandlingCheckoutModel(googlePayMessages);\r\n\r\n if (!braintreeGooglePayModelResponse || braintreeGooglePayModelResponse.error) {\r\n var error = braintreeGooglePayModelResponse.error || googlePayErrorMessages.NO_GOOGLE_PAY_BRAINTREE_CONFIGURATIONS;\r\n errorHandlerCheckoutModel.googlePayErrorHandler(error);\r\n }\r\n\r\n // Triggers the Google Pay tab if Google Pay session account uses\r\n googlePayHelper.triggerGooglePayTab(braintreeGooglePayModelResponse.btGooglePayConfigs);\r\n\r\n // Initialize a Google Pay 'PaymentsClient' object\r\n braintreeGooglePayModelResponse.btGooglePayModel.initPaymentsClient(\r\n braintreeGooglePayModelResponse.btGooglePayConfigs.instanceType\r\n );\r\n\r\n googlePayPaymentProcessing.init(\r\n braintreeGooglePayModelResponse.btGooglePayModel,\r\n errorHandlerCheckoutModel\r\n );\r\n\r\n googlePayList.init();\r\n}\r\n\r\n/**\r\n * Inits Google Pay components\r\n */\r\nfunction init() {\r\n braintreeGooglePayModelResponse = braintreeGooglePayModelBuilder.init();\r\n\r\n if (!braintreeGooglePayModelResponse.error) {\r\n googlePayMessages = braintreeGooglePayModelResponse.btGooglePayConfigs.messages;\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n init,\r\n initCart,\r\n initCheckout\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Returns Braintree Google Pay configs\r\n * @returns {Object} Braintree Google Pay configs\r\n */\r\nfunction getBraintreeGooglePayConfigs() {\r\n var braintreeGooglePayButtonConfigs = null;\r\n\r\n try {\r\n braintreeGooglePayButtonConfigs = JSON.parse(document.querySelector('.js_braintree_googlepay_button').getAttribute('data-braintree-config'));\r\n } catch (error) {\r\n return braintreeGooglePayButtonConfigs;\r\n }\r\n\r\n return braintreeGooglePayButtonConfigs;\r\n}\r\n\r\n/**\r\n * Sets device data from 'data collector' to corresponding input field\r\n * @param {Object} fraudDataPayload Froud payload data\r\n */\r\nfunction setGooglePayDeviceData(fraudDataPayload) {\r\n var $braintreeGooglePayDeviceData = document.querySelector('#braintreeGooglePayDeviceData');\r\n\r\n if (fraudDataPayload.deviceData) {\r\n $braintreeGooglePayDeviceData.value = fraudDataPayload.deviceData;\r\n }\r\n}\r\n\r\n/**\r\n * Handles all behavior related to the Google Pay content tab\r\n * @param {boolean} isActiveGooglePayTab Whether Google Pay tab is active\r\n */\r\nfunction googlePayContentTabHandler(isActiveGooglePayTab) {\r\n var helper = require('../../helper');\r\n var $btGooglepayAccountsList = document.querySelector('#braintreeGooglepayAccountsList');\r\n var $googlepayButton = document.querySelector('.js_braintree_googlepay_button');\r\n var $googlepayContent = document.querySelector('.js_braintree_googlepayContent');\r\n\r\n if ($btGooglepayAccountsList.value === 'newaccount') {\r\n $googlepayButton.style.display = 'block';\r\n\r\n if (isActiveGooglePayTab) {\r\n helper.continueButtonToggle(true);\r\n }\r\n\r\n $googlepayContent.setAttribute('data-paypal-is-hide-continue-button', true);\r\n } else {\r\n $googlepayButton.style.display = 'none';\r\n helper.continueButtonToggle(false);\r\n $googlepayContent.setAttribute('data-paypal-is-hide-continue-button', false);\r\n }\r\n}\r\n\r\n/**\r\n * Triggers the Google Pay tab if Google Pay session account uses\r\n * @param {Object} googlePayConfigs Google Pay config object\r\n */\r\nfunction triggerGooglePayTab(googlePayConfigs) {\r\n var sessionPaymentMethodId = googlePayConfigs.sessionPaymentMethodId;\r\n var $googlePayTab = $('.googlepay-tab');\r\n\r\n if (sessionPaymentMethodId === 'GooglePay') {\r\n $googlePayTab.click();\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n getBraintreeGooglePayConfigs,\r\n setGooglePayDeviceData,\r\n googlePayContentTabHandler,\r\n triggerGooglePayTab\r\n};\r\n","'use strict';\r\n\r\nvar googlePayPaymentProcessingConstants = require('../constants/googlePayPaymentProcessingConstants');\r\n\r\n/**\r\n * Returns current Google Pay flow\r\n * @returns {string} Flow id checkout/cart/newGpAccount\r\n */\r\nfunction getGooglePayFlowId() {\r\n var googlePayEnabledOnCart = Boolean(document.querySelector('.braintree-cart-google-button'));\r\n var googlePayEnabledOnCheckout = Boolean(document.querySelector('.js_braintree_googlepayContent'));\r\n var googlePayFlowId = null;\r\n\r\n var flows = {\r\n checkout: googlePayPaymentProcessingConstants.FLOW_CHECKOUT_NAME,\r\n cart: googlePayPaymentProcessingConstants.FLOW__CART_NAME,\r\n newGpAccount: googlePayPaymentProcessingConstants.FLOW_NEW_GP_ACCOUNT_NAME\r\n };\r\n\r\n if (googlePayEnabledOnCart) {\r\n googlePayFlowId = flows.cart;\r\n } else if (googlePayEnabledOnCheckout) {\r\n googlePayFlowId = flows.checkout;\r\n } else {\r\n googlePayFlowId = flows.newGpAccount;\r\n }\r\n\r\n return googlePayFlowId;\r\n}\r\n\r\n/**\r\n * Creates Google Pay billing address from payload data\r\n * @param {Object} data Data object\r\n * @returns {Objcet} billing address data object\r\n */\r\nfunction createGooglepayBillingAddressData(data) {\r\n var billingData = data.paymentMethodData.info.billingAddress;\r\n var billingAddress = {};\r\n var recipientName = billingData.name.split(' ');\r\n\r\n billingAddress.firstName = recipientName[0];\r\n billingAddress.lastName = recipientName[1];\r\n billingAddress.phone = billingData.phoneNumber;\r\n billingAddress.countryCodeAlpha2 = billingData.countryCode;\r\n billingAddress.streetAddress = billingData.address1;\r\n billingAddress.extendedAddress = billingData.address2;\r\n billingAddress.locality = billingData.locality;\r\n billingAddress.stateCode = billingData.administrativeArea;\r\n billingAddress.postalCode = decodeURIComponent(billingData.postalCode);\r\n billingAddress.email = data.email;\r\n\r\n return billingAddress;\r\n}\r\n\r\n/**\r\n * Creates shipping address object\r\n * @param {Object} shippingData Shipping data object\r\n * @returns {Object} Shipping data object in required format\r\n */\r\nfunction createGooglepayShippingAddressData(shippingData) {\r\n var shippingAddress = {};\r\n var recipientName = shippingData.name.split(' ');\r\n\r\n shippingAddress.firstName = recipientName[0];\r\n shippingAddress.lastName = recipientName[1];\r\n shippingAddress.phone = shippingData.phoneNumber;\r\n shippingAddress.countryCodeAlpha2 = shippingData.countryCode;\r\n shippingAddress.streetAddress = shippingData.address1;\r\n shippingAddress.extendedAddress = shippingData.address2;\r\n shippingAddress.locality = shippingData.locality;\r\n shippingAddress.region = shippingData.administrativeArea;\r\n shippingAddress.postalCode = decodeURIComponent(shippingData.postalCode);\r\n\r\n return shippingAddress;\r\n}\r\n\r\nmodule.exports = {\r\n getGooglePayFlowId,\r\n createGooglepayBillingAddressData,\r\n createGooglepayShippingAddressData\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Creates an object of configuration for creating a Google Pay payment\r\n * @param {Client} btClientInstance A client instance\r\n * @param {string} googleMerchantId Google Pay merchant identifier\r\n * @returns {Object} Configuration object\r\n */\r\nfunction createGooglePayOptions(btClientInstance, googleMerchantId) {\r\n var gpOptions = {\r\n client: btClientInstance,\r\n googlePayVersion: 2\r\n };\r\n\r\n if (googleMerchantId !== '' && googleMerchantId !== null) {\r\n gpOptions.googleMerchantId = googleMerchantId;\r\n }\r\n\r\n return gpOptions;\r\n}\r\n\r\nmodule.exports = {\r\n createGooglePayOptions\r\n};\r\n","'use strict';\r\n\r\nvar braintreeConstants = {\r\n // payment method id\r\n PAYMENT_METHOD_ID_PAYPAL: 'PayPal',\r\n PAYMENT_METHOD_ID_VENMO: 'Venmo',\r\n // BT PayPal Smart Buttons funding sources types\r\n PP_FUNDING_SOURCE_CARD: 'card',\r\n PP_FUNDING_SOURCE_PAYLATER: 'paylater',\r\n // BT PayPal Smart Buttons payments types\r\n PP_DEBIT_CREDIT_PAYMENT_TYPE: 'PayPal Debit/Credit Card',\r\n PP_PAYLATER_PAYMENT_TYPE: 'PayPal Paylater'\r\n};\r\n\r\nvar $continueButton = document.querySelector('button.submit-payment');\r\n\r\n/**\r\n * Init the event in order to update the cart grant total price\r\n */\r\nfunction initCartUpdateEvent() {\r\n var $grantTotal = document.querySelector('.grand-total');\r\n\r\n if ($grantTotal) {\r\n var currentGrantTotalValue = $grantTotal.textContent;\r\n\r\n $('body').on('cart:update', function () {\r\n var newGrantTotalValue = $grantTotal.textContent;\r\n\r\n if (newGrantTotalValue !== '' && newGrantTotalValue !== currentGrantTotalValue) {\r\n currentGrantTotalValue = newGrantTotalValue;\r\n var updateCartTotals = document.createEvent('Event');\r\n updateCartTotals.initEvent('updateCartTotals', true, true);\r\n\r\n document.querySelector('body').addEventListener('updateCartTotals', function () {\r\n 'braintree:updateCartTotals';\r\n }, false);\r\n document.querySelector('body').dispatchEvent(updateCartTotals);\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Depends on the value flag, sets style.display to the $continueButton\r\n * @param {boolean} flag Boolean value\r\n * @returns {void}\r\n */\r\nfunction continueButtonToggle(flag) {\r\n var stage = window.location.hash.substring(1);\r\n\r\n if (stage === 'placeOrder' || stage === 'shipping' || stage === null || stage === '') {\r\n return;\r\n }\r\n\r\n $continueButton.style.display = flag ? 'none' : '';\r\n}\r\n\r\n/**\r\n * Handles payment method tab changing\r\n * @param {Object} currentTab Choosen payment method tab\r\n */\r\nfunction paymentMethodChangeHandle(currentTab) {\r\n document.querySelectorAll('.payment-options[role=tablist] a[data-toggle=\"tab\"]').forEach(function (el) {\r\n var $tabContent = document.querySelector(el.getAttribute('href'));\r\n\r\n if (el === currentTab) {\r\n $tabContent.querySelectorAll('input, textarea, select').forEach(function (tab) {\r\n tab.removeAttribute('disabled', 'disabled');\r\n });\r\n $tabContent.querySelectorAll('select.no-disable').forEach(function (tab) {\r\n tab.setAttribute('disabled', 'disabled');\r\n });\r\n continueButtonToggle(JSON.parse($tabContent.getAttribute('data-paypal-is-hide-continue-button')));\r\n } else {\r\n $tabContent.querySelectorAll('input, textarea, select').forEach(function (tab) {\r\n tab.setAttribute('disabled', 'disabled');\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Return payment method name in lovercase\r\n * @param {string} paymentMethodName Payment method name\r\n * @returns {string} Paymnet method name\r\n */\r\nfunction getPaymentMethodToLowerCase(paymentMethodName) {\r\n var paymentMethod = paymentMethodName.split('_');\r\n if (paymentMethod.length === 1) {\r\n return paymentMethodName;\r\n }\r\n paymentMethod.forEach(function (element, index) {\r\n paymentMethod[index] = element.charAt(0) + element.slice(1).toLocaleLowerCase();\r\n });\r\n return paymentMethod[1] ?\r\n paymentMethod[0] + ' ' + paymentMethod[1] :\r\n paymentMethod[0];\r\n}\r\n\r\n/**\r\n * Updates checkout view\r\n * @param {Object} e Event object\r\n * @param {Object} data Data object\r\n */\r\nfunction updateCheckoutView(e, data) {\r\n var $paymentSummary = document.querySelector('.summary-details .braintree-payment-details');\r\n var htmlToAppend = '';\r\n var order = data.order;\r\n var payment = order.billing.payment;\r\n\r\n if (payment && payment.selectedPaymentInstruments\r\n && payment.selectedPaymentInstruments.length > 0) {\r\n var selectedPaymentInstrument = payment.selectedPaymentInstruments[0];\r\n var paymnetMethodId = selectedPaymentInstrument.paymentMethod;\r\n var fundingSource = selectedPaymentInstrument.fundingSource;\r\n\r\n if (order.billing.payment.selectedPaymentInstruments) {\r\n for (var i = 0; i < order.billing.payment.selectedPaymentInstruments.length; i++) {\r\n var paymentInstrument = order.billing.payment.selectedPaymentInstruments[i];\r\n if (paymentInstrument.paymentMethod === 'GIFT_CERTIFICATE') {\r\n // Render a gift card payment instrument\r\n htmlToAppend += ' ' + 'GIFT CERTIFICATE'\r\n + '
'\r\n + paymentInstrument.maskedGiftCertificateCode\r\n + '
'\r\n + '
';\r\n }\r\n }\r\n }\r\n\r\n if (fundingSource === braintreeConstants.PP_FUNDING_SOURCE_PAYLATER) {\r\n htmlToAppend += '
' + braintreeConstants.PP_PAYLATER_PAYMENT_TYPE + '
';\r\n } else if (fundingSource === braintreeConstants.PP_FUNDING_SOURCE_CARD) {\r\n htmlToAppend += '
' + braintreeConstants.PP_DEBIT_CREDIT_PAYMENT_TYPE + '
';\r\n } else if (paymnetMethodId === braintreeConstants.PAYMENT_METHOD_ID_PAYPAL) {\r\n htmlToAppend += '
' + getPaymentMethodToLowerCase(paymnetMethodId) + '
';\r\n } else {\r\n htmlToAppend += '
' + getPaymentMethodToLowerCase(paymnetMethodId) + '
';\r\n }\r\n\r\n if (selectedPaymentInstrument.maskedCreditCardNumber) {\r\n htmlToAppend += '
' + selectedPaymentInstrument.maskedCreditCardNumber + '
';\r\n }\r\n\r\n if (paymnetMethodId === braintreeConstants.PAYMENT_METHOD_ID_PAYPAL) {\r\n htmlToAppend += '
' + selectedPaymentInstrument.braintreePaypalEmail + '
';\r\n }\r\n\r\n if (paymnetMethodId === braintreeConstants.PAYMENT_METHOD_ID_VENMO) {\r\n htmlToAppend += '
' + selectedPaymentInstrument.braintreeVenmoUserId + '
';\r\n }\r\n\r\n if (selectedPaymentInstrument.type) {\r\n htmlToAppend += '
' + selectedPaymentInstrument.type + '
';\r\n }\r\n htmlToAppend += '
' + order.priceTotal.charAt(0) + selectedPaymentInstrument.amount + '
';\r\n }\r\n\r\n if ($paymentSummary) {\r\n $paymentSummary.innerHTML = htmlToAppend;\r\n }\r\n}\r\n\r\n/**\r\n * Validates whether input field is valid\r\n * @param {Object} field Input filed\r\n * @returns {boolean} true/false\r\n */\r\nfunction isValidInputField(field) {\r\n if (!field.checkValidity()) {\r\n if (!field.classList.contains('is-invalid')) {\r\n field.classList.add('is-invalid');\r\n }\r\n return false;\r\n }\r\n if (field.checkValidity() && field.classList.contains('is-invalid')) {\r\n field.classList.remove('is-invalid');\r\n }\r\n return true;\r\n}\r\n/*\r\n Adding *active* line to the tab-content class in a case if it isn't already active\r\n Use case: customer checkout from Cart (page) and\r\n (under the place Order page) hit the 'edit' button\r\n**/\r\nfunction updatePaymentMethodTab() {\r\n let paymentMethodName = document.querySelectorAll('[data-braintree-payment-method]')[0].dataset.braintreePaymentMethod;\r\n let content = document.querySelector(`.js_braintree_${paymentMethodName.toLowerCase()}Content`).classList.contains('active');\r\n if (!content) {\r\n document.querySelectorAll(`[data-method-id=${paymentMethodName}]`)[0].children[0].click();\r\n }\r\n}\r\n\r\n/**\r\n * Gets Billing Address Form Values\r\n *\r\n * @returns {Object} with Billing Address\r\n */\r\nfunction getBillingAddressFormValues() {\r\n return $('#dwfrm_billing').serialize().split('&')\r\n .map(function (el) {\r\n return el.split('=');\r\n })\r\n .reduce(function (accumulator, item) {\r\n var elem = item[0].lastIndexOf('_');\r\n if (elem < 0) {\r\n accumulator[item[0]] = item[1];\r\n } else {\r\n elem = item[0].substring(elem + 1);\r\n accumulator[elem] = item[1];\r\n }\r\n return accumulator;\r\n }, {});\r\n}\r\n\r\n/**\r\n * Gets Nonce depending on payment method name\r\n *\r\n * @param {string} paymentMethodName - payment method name\r\n * @returns {boolean} nonce exist\r\n */\r\n\r\nfunction isNonceExist(paymentMethodName) {\r\n // Payment method name\r\n var pmName = paymentMethodName;\r\n\r\n // Сhange 'CREDIT_CARD' to 'CreditCard' in order to get braintreewCreditCardNonce input\r\n if (paymentMethodName === 'CREDIT_CARD') {\r\n pmName = 'CreditCard';\r\n }\r\n\r\n var $nonce = document.querySelector(`#braintree${pmName}Nonce`);\r\n\r\n if (!$nonce) return false;\r\n\r\n var nonceValue = $nonce.value;\r\n var $tab = document.querySelector(`.${pmName.toLowerCase()}-tab`);\r\n var isActiveTab;\r\n if ($tab) {\r\n isActiveTab = $tab.classList.contains('active');\r\n }\r\n\r\n return !isActiveTab && nonceValue;\r\n}\r\n\r\nvar loaderInstance = require('./loaderHelper');\r\nvar accountsLoader;\r\n\r\nfunction removeBtPayment(e) {\r\n var target = e.target;\r\n\r\n var $loaderContainter = document.querySelector('#' + target.getAttribute('data-loader'));\r\n accountsLoader = loaderInstance($loaderContainter);\r\n accountsLoader.show();\r\n\r\n $.get(target.getAttribute('data-url') + '?UUID=' + target.getAttribute('data-id'))\r\n .then((data => {\r\n $('#uuid-' + data.UUID).remove();\r\n if (data.newDefaultAccount) {\r\n document.querySelector('#uuid-' + data.newDefaultAccount + ' span').style.fontWeight = 'bold';\r\n document.querySelector('#uuid-' + data.newDefaultAccount + ' button.braintree-make-default-card').style.display = 'none';\r\n }\r\n $('body').trigger('cart:update');\r\n accountsLoader.hide();\r\n }))\r\n .fail(() => {\r\n location.reload();\r\n accountsLoader.hide();\r\n });\r\n}\r\n\r\n/**\r\n * Create formData from fields data\r\n *\r\n * @param {Object} paymentFields fields data values\r\n * @param {Object} fieldsData fields data values\r\n * @returns {Object} cart billing form data\r\n */\r\nfunction createPaymentFormData(paymentFields, fieldsData) {\r\n var paymentFieldsParsed;\r\n\r\n if (typeof paymentFields === 'object') {\r\n paymentFieldsParsed = paymentFields;\r\n } else {\r\n paymentFieldsParsed = JSON.parse(paymentFields);\r\n }\r\n\r\n return Object.entries(paymentFieldsParsed).reduce(function (formData, entry) {\r\n const [key, field] = entry;\r\n if (typeof field === 'object') {\r\n formData.append(field.name, fieldsData && fieldsData[key] !== null ? fieldsData[key] : field.value);\r\n }\r\n return formData;\r\n }, new FormData());\r\n}\r\n\r\nfunction setDefaultProperty(params) {\r\n return $.get(params.url + '?UUID=' + params.id + '&pmID=' + params.paymentMethodID)\r\n .then((data) => {\r\n document.querySelector('#uuid-' + data.newDefaultProperty + ' span').style.fontWeight = 'bold';\r\n document.querySelector('.braintree-make-default-card.uuid-' + data.newDefaultProperty).style.display = 'none';\r\n document.querySelector('#uuid-' + data.toRemoveDefaultProperty + ' span').style.fontWeight = 'normal';\r\n document.querySelector('.braintree-make-default-card.uuid-' + data.toRemoveDefaultProperty).style.display = 'inline';\r\n params.loader.hide();\r\n })\r\n .fail(() => {\r\n params.loader.hide();\r\n });\r\n}\r\n\r\n/**\r\n * Checks authenticated customer, account list for default Payment Method\r\n *\r\n * @param {string} selector - querySelector\r\n * @returns {Object} default data attribute or null\r\n */\r\nfunction getOptionByDataDefault(selector) {\r\n if (!document.querySelector(selector)) { return null; }\r\n\r\n return Array.apply(null, document.querySelector(selector).options).find(function (el) {\r\n return el.getAttribute('data-default') ? JSON.parse(el.getAttribute('data-default')) : null;\r\n });\r\n}\r\n\r\n/**\r\n * Checks authenticated customer, account list for session Account\r\n *\r\n * @param {Object} params querySelector + el.id\r\n * @returns {Object} session account object\r\n */\r\nfunction getSessionAccountOption(params) {\r\n return Array.apply(null, document.querySelector(params.querySelector).options).find(function (el) {\r\n return el.id === params.id && JSON.parse(el.getAttribute('data-session-account'));\r\n });\r\n}\r\n\r\n/**\r\n * This method is called to remove active session account but just in case\r\n * if tab of currently active session payment isn't active (buyer submited another payment method)\r\n * @returns {function}function call\r\n */\r\nfunction removeActiveSessionPayment() {\r\n const activePaymentMethods = [];\r\n document.querySelectorAll('.payment-options[role=tablist] li').forEach(function (el) {\r\n activePaymentMethods.push(el.dataset.methodId);\r\n });\r\n var helpers = {\r\n PayPal: require('./paypal/components/payPalSessionAccount'),\r\n Venmo: require('./venmo/components/venmoSessionAccount'),\r\n GooglePay: require('./googlepay/components/googlePaySessionAccount'),\r\n CREDIT_CARD: require('./creditcard/components/creditCardSessionAccount'),\r\n SRC: require('./src/components/srcSessionAccount'),\r\n ApplePay: require('./applepay/helpers/applePayHelper')\r\n };\r\n var activePM = activePaymentMethods.find(function (el) {\r\n return isNonceExist(el);\r\n });\r\n if (activePM) {\r\n return helpers[activePM].removeSessionNonce();\r\n }\r\n}\r\n\r\nfunction showCartErrorMsg(message) {\r\n $('.checkout-btn').addClass('disabled');\r\n $('.cart-error').append(\r\n `
\r\n \r\n ${message}\r\n
`\r\n );\r\n window.scrollTo(0, 0);\r\n}\r\n\r\n/**\r\n * Update Checkout Billing form values\r\n *\r\n * @param {Object} billingData fields data values\r\n */\r\nfunction updateBillingFormValues(billingData) {\r\n var $billingFormFields = document.querySelectorAll('.billing-address select, .billing-address input, .contact-info-block input');\r\n\r\n $billingFormFields.forEach(function (el) {\r\n if (billingData[el.name]) {\r\n if (el.nodeName == 'SELECT'){\r\n $(el).val(billingData[el.name]).change();\r\n } else {\r\n el.value = billingData[el.name];\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Returns selected option from select container\r\n * @param {Object} $selectContainer Select container\r\n * @returns {Object} Selected option\r\n */\r\nfunction getSelectedOption($selectContainer) {\r\n var selectedOptionIndex = $selectContainer.selectedIndex;\r\n var selectedOption = $selectContainer.options[selectedOptionIndex];\r\n\r\n return selectedOption;\r\n}\r\n\r\n/**\r\n * Returns payment field data to be send on backend\r\n * @param {Object} addressData Address data to be set\r\n * @param {string} paymentMethodName Payment method name\r\n * @returns {Object} payment data\r\n */\r\nfunction getPaymentFieldsData(addressData, paymentMethodName) {\r\n return {\r\n firstName: addressData.firstName,\r\n lastName: addressData.lastName,\r\n address1: addressData.streetAddress,\r\n address2: addressData.extendedAddress || '',\r\n city: addressData.locality,\r\n postalCode: decodeURIComponent(addressData.postalCode),\r\n stateCode: addressData.stateCode || addressData.region,\r\n country: addressData.countryCodeAlpha2,\r\n phone: addressData.phone,\r\n paymentMethod: paymentMethodName\r\n };\r\n}\r\n\r\nfunction getUpdatedStoreFrontBillingData(billingAddress) {\r\n var storeFrontBillingData = JSON.parse(document.querySelector('.braintree-billing-payment-wrap').getAttribute('data-billing-form-fields-names'));\r\n\r\n storeFrontBillingData.dwfrm_billing_addressFields_firstName = billingAddress.firstName;\r\n storeFrontBillingData.dwfrm_billing_addressFields_lastName = billingAddress.lastName;\r\n storeFrontBillingData.dwfrm_billing_addressFields_address1 = billingAddress.streetAddress;\r\n storeFrontBillingData.dwfrm_billing_addressFields_address2 = billingAddress.extendedAddress || '';\r\n storeFrontBillingData.dwfrm_billing_addressFields_city = billingAddress.locality;\r\n storeFrontBillingData.dwfrm_billing_addressFields_postalCode = decodeURIComponent(billingAddress.postalCode);\r\n storeFrontBillingData.dwfrm_billing_addressFields_states_stateCode = billingAddress.stateCode || billingAddress.region;\r\n storeFrontBillingData.dwfrm_billing_addressFields_country = billingAddress.countryCodeAlpha2;\r\n storeFrontBillingData.dwfrm_billing_contactInfoFields_phone = billingAddress.phone;\r\n\r\n return storeFrontBillingData;\r\n}\r\n\r\nmodule.exports = {\r\n initCartUpdateEvent,\r\n paymentMethodChangeHandle,\r\n continueButtonToggle,\r\n updateCheckoutView,\r\n isValidInputField,\r\n updatePaymentMethodTab,\r\n getBillingAddressFormValues,\r\n removeBtPayment,\r\n createPaymentFormData,\r\n isNonceExist,\r\n setDefaultProperty,\r\n getOptionByDataDefault,\r\n removeActiveSessionPayment,\r\n getSessionAccountOption,\r\n showCartErrorMsg,\r\n updateBillingFormValues,\r\n getSelectedOption,\r\n getPaymentFieldsData,\r\n getUpdatedStoreFrontBillingData\r\n};\r\n","\r\nmodule.exports = function (containerElement) {\r\n if (!containerElement) {\r\n // eslint-disable-next-line no-console\r\n console.error('Braintree: No container for showing loaders');\r\n }\r\n function Constructor() {\r\n this.containerEl = containerElement;\r\n }\r\n Constructor.prototype.show = function () {\r\n this.containerEl.style.display = 'block';\r\n };\r\n Constructor.prototype.hide = function () {\r\n this.containerEl.style.display = 'none';\r\n };\r\n return new Constructor();\r\n};\r\n","'use string';\r\n\r\nvar lpmHelper = require('../helpers/lpmHelper');\r\n\r\nvar braintreeLpmSDK = require('./braintreeLpmSDK');\r\n\r\n// Global variables\r\nvar lpmConfigs = lpmHelper.getBraintreeLpmConfigs();\r\nvar lpmInstance;\r\nvar shippingAddress;\r\nvar amount;\r\n\r\n/**\r\n * Init Braintree LPM pay model\r\n * @param {Promise} braintreeClientInstancePromise Braintreee client instance promise\r\n */\r\n\r\nfunction init(braintreeClientInstancePromise) {\r\n braintreeLpmSDK.init(braintreeClientInstancePromise);\r\n}\r\n\r\n/**\r\n * Inits LPM instance for the next payment actions\r\n * @returns {Promise} Promise resolved with the 'createLpmClickListener' boolean value\r\n */\r\nfunction initLpm() {\r\n return braintreeLpmSDK.createLpmPayment()\r\n .then(function (localPaymentInstance) {\r\n lpmInstance = localPaymentInstance;\r\n\r\n return {\r\n createLpmClickListener: true\r\n };\r\n });\r\n}\r\n\r\n/**\r\n * Updates order data\r\n * @param {Object} updatedShippingAddress Updates order shipping address from backend\r\n * @param {number} updatedAmount Updated order amount from backend\r\n */\r\nfunction updateLpmOrderData(updatedShippingAddress, updatedAmount) {\r\n shippingAddress = updatedShippingAddress;\r\n amount = updatedAmount;\r\n}\r\n\r\n/**\r\n * Returns order shipping address\r\n * @returns {Object} Shipping address\r\n */\r\nfunction getShippingAddress() {\r\n return shippingAddress;\r\n}\r\n\r\n/**\r\n * Creates and returns object with all options for initiating the lpm payment flow\r\n * @param {string} paymentMethodName Payment method name\r\n * @param {string} email Email address\r\n * @returns {Object} {Object} Options object\r\n */\r\nfunction createRequestData(paymentMethodName, email) {\r\n return Object.assign(braintreeLpmSDK.createRequestData(\r\n shippingAddress,\r\n lpmConfigs,\r\n paymentMethodName,\r\n email,\r\n amount\r\n ),\r\n {\r\n onPaymentStart: function (_, continueCallback) {\r\n continueCallback();\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Launches the local payment flow and returns a nonce payload\r\n * @param {Object} reqData Options object\r\n * @returns {Promise} Promise resolved with a startPaymentPayload\r\n */\r\nfunction startPayment(reqData) {\r\n return braintreeLpmSDK.startPayment(lpmInstance, reqData);\r\n}\r\n\r\nmodule.exports = {\r\n init,\r\n initLpm,\r\n updateLpmOrderData,\r\n getShippingAddress,\r\n createRequestData,\r\n startPayment\r\n};\r\n","'use strict';\r\n\r\nvar lpmHelper = require('../helpers/lpmHelper');\r\nvar braintreeGeneral = require('../../braintreeGeneral');\r\nvar braintreeLpmModel = require('./braintreeLpmModel');\r\n\r\nvar lpmErrorMessages = require('../constants/errorMessages');\r\n\r\n/**\r\n * Initialize Braintree Lpm Model. Pattern Builder is used\r\n * @returns {Object} Object with booleam \"error\" flag and \"message\" attribute with error message\r\n */\r\nfunction init() {\r\n var braintreeLpmConfigs = lpmHelper.getBraintreeLpmConfigs();\r\n var clientToken;\r\n var btClientInstancePromise;\r\n var response = {\r\n error: false,\r\n message: '',\r\n btLpmModel: null\r\n };\r\n\r\n if (braintreeLpmConfigs) {\r\n clientToken = braintreeLpmConfigs.clientToken;\r\n btClientInstancePromise = braintreeGeneral.createClientInstance(clientToken);\r\n\r\n braintreeLpmModel.init(\r\n btClientInstancePromise\r\n );\r\n\r\n response.btLpmModel = braintreeLpmModel;\r\n } else {\r\n response.error = true;\r\n response.message = lpmErrorMessages.NO_LPM_BRAINTREE_CONFIGURATIONS;\r\n }\r\n\r\n return response;\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\n/* global braintreeUtils braintree $ */\r\n\r\nvar btClientInstancePromise;\r\n\r\n/**\r\n * Creates Lpm payment instance\r\n * @returns {Promise} A promise resolved with the Lpm instance\r\n */\r\n\r\nfunction createLpmPayment() {\r\n return btClientInstancePromise\r\n .then(function (btClientInstance) {\r\n return braintree.localPayment.create({\r\n client: btClientInstance\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Creates and returns object with all options for initiating the LPM payment flow\r\n * @param {Object} shippingData Order Shipping address\r\n * @param {Object} lpmConfigs LPM configs object\r\n * @param {string} paymentMethodName Payment method name\r\n * @param {string} email Email address\r\n * @param {number} amount Order total amount\r\n * @returns {Object} Options object\r\n */\r\nfunction createRequestData(shippingData, lpmConfigs, paymentMethodName, email, amount) {\r\n var recipientName = shippingData.recipientName.split(' ');\r\n shippingData.firstName = recipientName[0];\r\n shippingData.lastName = recipientName[1];\r\n\r\n return {\r\n paymentType: paymentMethodName,\r\n amount: amount,\r\n fallback: {\r\n url: lpmConfigs.fallbackUrl + '?lpmName=' + paymentMethodName + '&email=' + email,\r\n buttonText: 'Complete Payment'\r\n },\r\n currencyCode: lpmConfigs.options.currency,\r\n shippingAddressRequired: false,\r\n email: email,\r\n phone: shippingData && shippingData.phone,\r\n givenName: shippingData && shippingData.firstName,\r\n surname: shippingData && shippingData.lastName,\r\n address: {\r\n countryCode: shippingData && shippingData.countryCode\r\n }\r\n };\r\n}\r\n\r\n/**\r\n *\r\n * @param {lpmInstance} localPaymentInstance LPM instance\r\n * @param {Object} reqData Options object\r\n * @returns {Promise} Promise resolved with a startPaymentPayload\r\n */\r\nfunction startPayment(localPaymentInstance, reqData) {\r\n return localPaymentInstance.startPayment(reqData);\r\n}\r\n\r\n/**\r\n * Inits braintreeLpmSDK with client instance promise\r\n * @param {Promise} braintreeClientInstancePromise Braintree client instance promise\r\n */\r\nfunction init(braintreeClientInstancePromise) {\r\n btClientInstancePromise = braintreeClientInstancePromise;\r\n}\r\n\r\nmodule.exports = {\r\n init,\r\n createLpmPayment,\r\n createRequestData,\r\n startPayment\r\n};\r\n","'use string';\r\n\r\n// Helpers\r\nvar lpmHelper = require('../helpers/lpmHelper');\r\nvar loaderInstance = require('../../loaderHelper');\r\nvar lpmPaymentProcessingHelper = require('../helpers/lpmPaymentProcessorHelper');\r\n\r\nvar lpmErrorHandler = require('../errorhandler/lpmErrorHandler');\r\n\r\nvar $braintreeLpmLoader = document.querySelector('.lpmLoader');\r\n\r\n// Global variables\r\nvar lpmConfigs;\r\nvar loader;\r\nvar lpmModel;\r\n\r\n/**\r\n * Opens LPM page and process a payment\r\n * @param {Object} reqData Options object\r\n * @param {string} paymentMethodName Payment method name\r\n */\r\nfunction startLpmPayment(reqData, paymentMethodName) {\r\n lpmModel.startPayment(reqData)\r\n .then(function (startPaymentPayload) {\r\n // Handles LPM processing messages on the Billing-Checkout Page\r\n lpmPaymentProcessingHelper.hideProcessingMsg();\r\n lpmPaymentProcessingHelper.showFinalProcessingMsg();\r\n\r\n // Sends payment details to the backend\r\n return lpmPaymentProcessingHelper.confirmPayment(\r\n lpmConfigs,\r\n paymentMethodName,\r\n reqData.email,\r\n startPaymentPayload\r\n );\r\n })\r\n .then(function (response) {\r\n loader.hide();\r\n lpmPaymentProcessingHelper.processLpmConfirmForm(response.redirectUrl);\r\n })\r\n .catch(function (err) {\r\n loader.hide();\r\n lpmErrorHandler.processStartLpmPaymentError(err);\r\n });\r\n}\r\n\r\n/**\r\n * Prepares and checks all necessary options for start LPM payment\r\n * @param {Object} event On LPM button click event\r\n */\r\nfunction onLpmButtonClick(event) {\r\n var $email = document.querySelector('.customer-summary-email');\r\n var paymentMethodName = this.dataset.localPaymentMethodName;\r\n var reqData;\r\n\r\n lpmErrorHandler.hideError();\r\n\r\n event.preventDefault();\r\n\r\n try {\r\n if (lpmConfigs.options.amount === 0) {\r\n loader.hide();\r\n lpmErrorHandler.handleZeroAmountOnCheckout(paymentMethodName);\r\n }\r\n\r\n $.getJSON(lpmConfigs.getOrderInfoUrl)\r\n .then(function (data) {\r\n loader.show();\r\n lpmPaymentProcessingHelper.showProcessingMsg();\r\n\r\n // Updates shipping address and amount of order from server\r\n lpmModel.updateLpmOrderData(data.shippingAddress, data.amount);\r\n\r\n // Creates all options for initiating the local payment payment flow.\r\n reqData = lpmModel.createRequestData(paymentMethodName, $email.textContent);\r\n\r\n startLpmPayment(reqData, paymentMethodName);\r\n })\r\n // Handles errors form Braintree-GetOrderInfo endpoint\r\n .catch(function (err) {\r\n loader.hide();\r\n lpmErrorHandler.showErrorByMessage(err.responseJSON.message);\r\n });\r\n loader.hide();\r\n } catch (err) {\r\n lpmErrorHandler.showErrorByMessage(err);\r\n }\r\n}\r\n\r\n/**\r\n * Inits LPM functionality on the Checkout-Billing Page\r\n */\r\nfunction initLpm() {\r\n lpmModel.initLpm()\r\n .then(function (response) {\r\n if (response.createLpmClickListener) {\r\n $('.tab-content').on('click', '.js_braintree_lpm_button', onLpmButtonClick);\r\n }\r\n })\r\n .catch(function (err) {\r\n lpmErrorHandler.showErrorByMessage(err.message);\r\n });\r\n}\r\n\r\n/**\r\n * Inits LPM payment processing components\r\n * @param {Object} braintreeLpmModel LPM model\r\n */\r\nfunction init(braintreeLpmModel) {\r\n loader = loaderInstance($braintreeLpmLoader);\r\n lpmConfigs = lpmHelper.getBraintreeLpmConfigs();\r\n lpmModel = braintreeLpmModel;\r\n\r\n initLpm();\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = {\r\n NO_LPM_BRAINTREE_CONFIGURATIONS: 'No Lpm Braintree Configurations',\r\n ORDER_TOTAL_0: 'Order total 0 is not allowed for '\r\n};\r\n","'use strict';\r\n\r\nvar lpmErrorMessages = require('../constants/errorMessages');\r\nvar lpmHelper = require('../helpers/lpmHelper');\r\n\r\nvar $topErrorMessageText;\r\nvar $topErrorMessageWrapper;\r\nvar braintreeErrorMessages;\r\n\r\n/**\r\n * Shows error message on the top of the Checkout Page\r\n * @param {string} message Error message\r\n */\r\nfunction createErrorNotification(message) {\r\n $topErrorMessageText.textContent = '';\r\n $topErrorMessageWrapper.style.display = 'block';\r\n $topErrorMessageText.append(message);\r\n window.scrollTo(0, 0);\r\n}\r\n\r\n// General method which should be used for cases when error came from Braintree\r\nfunction showErrorByObject(error) {\r\n var msg = error.message;\r\n var code = error.code;\r\n var errorMessage = braintreeErrorMessages[code] || msg || braintreeErrorMessages.CLIENT_GATEWAY_NETWORK;\r\n\r\n createErrorNotification(errorMessage);\r\n}\r\n\r\n/**\r\n * Shows error by message\r\n * @param {string} message Error Message\r\n */\r\nfunction showErrorByMessage(message) {\r\n createErrorNotification(message);\r\n}\r\n\r\n/**\r\n * Process error form Braintree or Braintree-PaymentConfirm endpoint\r\n * @param {Object} error Error object\r\n */\r\nfunction processStartLpmPaymentError(error) {\r\n if (error.name === 'BraintreeError') {\r\n showErrorByObject(error);\r\n } else {\r\n showErrorByMessage(error.responseText);\r\n }\r\n}\r\n\r\n/**\r\n * Hides error message form the top of the Checkout Page\r\n */\r\nfunction hideError() {\r\n $topErrorMessageWrapper.style.display = 'none';\r\n $topErrorMessageText.innerHTML = '';\r\n}\r\n\r\n/**\r\n * Creates and throws an error if order amount is 0\r\n * @param {string} paymentMethodName Payment method name\r\n */\r\nfunction handleZeroAmountOnCheckout(paymentMethodName) {\r\n var zeroAmountErrorMsg = lpmErrorMessages.ORDER_TOTAL_0 + paymentMethodName;\r\n\r\n throw zeroAmountErrorMsg;\r\n}\r\n\r\n/**\r\n * Inits LPM error handler components\r\n */\r\nfunction init() {\r\n $topErrorMessageText = document.querySelector('.error-message-text');\r\n $topErrorMessageWrapper = document.querySelector('.error-message');\r\n braintreeErrorMessages = lpmHelper.getBraintreeLpmConfigs().messages;\r\n}\r\n\r\nmodule.exports = {\r\n processStartLpmPaymentError,\r\n showErrorByObject,\r\n showErrorByMessage,\r\n createErrorNotification,\r\n handleZeroAmountOnCheckout,\r\n hideError,\r\n init\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Returns Braintree LPM configs\r\n * @returns {Object} Braintree LPM configs\r\n */\r\nfunction getBraintreeLpmConfigs() {\r\n var braintreeLpmConfigs = null;\r\n\r\n try {\r\n braintreeLpmConfigs = JSON.parse(document.querySelector('.js_braintree_lpm_button').getAttribute('data-braintree-config'));\r\n } catch (error) {\r\n return braintreeLpmConfigs;\r\n }\r\n\r\n return braintreeLpmConfigs;\r\n}\r\n\r\nmodule.exports = {\r\n getBraintreeLpmConfigs\r\n};\r\n","'use strict';\r\n\r\nvar lpmModel = require('../braintreesdk/braintreeLpmModel');\r\n\r\nvar processingMsg = document.querySelector('.processingMsg');\r\nvar finalProcessingMsg = document.querySelector('.finalProcessingMsg');\r\n\r\n/**\r\n * Whether 'details' parameter is exist returns 'details' or shipping address if not exist\r\n *\r\n * @param {Object} details Details object from StartPaymentPayload\r\n * @param {string} email Email Address\r\n * @returns {Object} Details object\r\n */\r\nfunction getPaymentDetailsParameter(details, email) {\r\n var shippingAddress = lpmModel.getShippingAddress();\r\n shippingAddress.email = email;\r\n\r\n return jQuery.isEmptyObject(details) ? shippingAddress : details;\r\n}\r\n\r\n/**\r\n * Shows processing message on the Billing Page\r\n */\r\nfunction showProcessingMsg() {\r\n processingMsg.style.display = 'block';\r\n}\r\n\r\n/**\r\n * Hides processing message on the Billing Page\r\n */\r\nfunction hideProcessingMsg() {\r\n processingMsg.style.display = 'none';\r\n}\r\n\r\n/**\r\n * Show final processing message on the Billing Page\r\n */\r\nfunction showFinalProcessingMsg() {\r\n finalProcessingMsg.style.display = 'block';\r\n}\r\n\r\n/**\r\n *\r\n * @param {Object} lpmConfigs LPM configs object\r\n * @param {string} paymentMethodName Payment method name\r\n * @param {string} email Email address\r\n * @param {Object} startPaymentPayload StartPaymnetPayload\r\n * @returns {Promise} Promise resolved with 'redirectUrl'\r\n */\r\nfunction confirmPayment(lpmConfigs, paymentMethodName, email, startPaymentPayload) {\r\n return $.ajax({\r\n url: lpmConfigs.paymentConfirmUrl,\r\n type: 'POST',\r\n contentType: 'application/json',\r\n data: JSON.stringify({\r\n nonce: startPaymentPayload.nonce,\r\n lpmName: paymentMethodName,\r\n details: getPaymentDetailsParameter(startPaymentPayload.details, email),\r\n deviceData: JSON.stringify({ correlation_id: startPaymentPayload.correlationId })\r\n })\r\n });\r\n}\r\n\r\n/**\r\n * Creates a redirecting form to Order-Confirm endpoint\r\n * @param {Object} param The helping object for creating a from\r\n * @returns {Object} form element\r\n */\r\nfunction createConfirmForm(param) {\r\n var form = $('
')\r\n .appendTo(document.body)\r\n .attr({\r\n method: 'POST',\r\n action: param.url\r\n });\r\n\r\n $('')\r\n .appendTo(form)\r\n .attr({\r\n name: 'orderID',\r\n value: param.orderID\r\n });\r\n\r\n $('')\r\n .appendTo(form)\r\n .attr({\r\n name: 'orderToken',\r\n value: param.orderToken\r\n });\r\n\r\n return form;\r\n}\r\n\r\n/**\r\n * Prepare and submits form in order to confirm order with Lpm\r\n * @param {string} redirectUrl Redirect Url\r\n */\r\nfunction processLpmConfirmForm(redirectUrl) {\r\n var splitUrl = redirectUrl.split('?');\r\n var url = splitUrl[0];\r\n var paramsString = splitUrl[1];\r\n var searchParams = new URLSearchParams(paramsString);\r\n var formParam = {\r\n orderID: searchParams.get('orderID'),\r\n orderToken: searchParams.get('orderToken'),\r\n url: url\r\n };\r\n var form = createConfirmForm(formParam);\r\n\r\n form.submit();\r\n}\r\n\r\nmodule.exports = {\r\n getPaymentDetailsParameter,\r\n showProcessingMsg,\r\n hideProcessingMsg,\r\n showFinalProcessingMsg,\r\n confirmPayment,\r\n processLpmConfirmForm\r\n};\r\n","'use strict';\r\n\r\nvar braintreeLpmModelBuilder = require('./braintreesdk/braintreeLpmModelBuilder');\r\n\r\nvar lpmErrorHandler = require('./errorhandler/lpmErrorHandler');\r\nvar lpmPaymentProcessing = require('./components/lpmPaymentProcessing');\r\n\r\n/**\r\n * Inits LPM on the Billing-Checkout Page\r\n */\r\nfunction init() {\r\n var braintreeLpmModelResponse = braintreeLpmModelBuilder.init();\r\n\r\n lpmErrorHandler.init();\r\n\r\n lpmPaymentProcessing.init(braintreeLpmModelResponse.btLpmModel);\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\nvar braintreeGeneral = require('./braintreeGeneral');\r\n\r\n// Components\r\nvar payPalStoredBillingAddressComponent = require('./paypal/components/payPalStoredBillingAddress');\r\n\r\n// Helpers\r\nvar paymentMethodGeneralHelper = require('./paymentMethodGeneralHelper');\r\nvar helper = require('./helper');\r\nvar googlePayHelper = require('./googlepay/helpers/googlePayHelper');\r\nvar srcHelper = require('./src/helpers/srcHelper');\r\nvar venmoHelper = require('./venmo/helpers/venmoHelper');\r\nvar applePayHelper = require('./applepay/helpers/applePayHelper');\r\nvar payPalListHelper = require('./paypal/helpers/payPalListHelper');\r\n\r\n// Constancts used only for \"createGeneralClientInstancePromise\" function\r\nconst CHECKOUT_PAGE = 'checkout_page';\r\nconst CART_MINICART_PRODUCT_PAGE = 'cart_minicart_product_page';\r\n\r\nfunction getApplicablePageType() {\r\n var isCheckoutPage = Boolean(document.getElementById('checkout-main'));\r\n // It is so, since MiniCart is exists on all mentioned pages\r\n var isCartMiniCartProductPage = Boolean(document.getElementsByClassName('minicart').length);\r\n var currentPageType;\r\n\r\n if (isCheckoutPage) {\r\n currentPageType = CHECKOUT_PAGE;\r\n } else if (isCartMiniCartProductPage) {\r\n currentPageType = CART_MINICART_PRODUCT_PAGE;\r\n }\r\n\r\n return currentPageType;\r\n}\r\n\r\nfunction createGeneralClientInstancePromise() {\r\n var applycablePageType = getApplicablePageType();\r\n var clientToken = null;\r\n var clientInstancePromise = null;\r\n\r\n // eslint-disable-next-line default-case\r\n switch (applycablePageType) {\r\n case CHECKOUT_PAGE:\r\n var $billingElement = document.querySelector('.summary-details.billing');\r\n\r\n clientToken = $billingElement.getAttribute('data-bt-client-token');\r\n break;\r\n\r\n case CART_MINICART_PRODUCT_PAGE:\r\n var $btExpressCheckoutPayPalButtonWrapper = document.querySelector('.braintree-cart-paypal-buttons-wrap');\r\n var $btAccountPayPalButtonWrapper = document.querySelector('.js_braintree_accountPaypalButton_wrapper');\r\n\r\n if ($btExpressCheckoutPayPalButtonWrapper) {\r\n clientToken = $btExpressCheckoutPayPalButtonWrapper.getAttribute('data-bt-client-token');\r\n } else if ($btAccountPayPalButtonWrapper) {\r\n clientToken = $btAccountPayPalButtonWrapper.getAttribute('data-bt-client-token');\r\n }\r\n break;\r\n }\r\n\r\n if (clientToken) {\r\n clientInstancePromise = braintreeGeneral.createClientInstance(clientToken);\r\n }\r\n\r\n return clientInstancePromise;\r\n}\r\n\r\n/**\r\n * Method override default SFRA payment-details filling behavior.\r\n * Method fill payment-details block with the right payment methdo data (like name, account, etc.)\r\n */\r\nfunction fillPaymentSammaryContainer() {\r\n var $summaryDetails = document.querySelector('.summary-details .payment-details');\r\n\r\n if ($summaryDetails) {\r\n $summaryDetails.classList.add('braintree-payment-details');\r\n $summaryDetails.classList.remove('payment-details');\r\n\r\n $('body').on('checkout:updateCheckoutView', helper.updateCheckoutView);\r\n }\r\n}\r\n\r\n/**\r\n * May be used for all payment methods\r\n * Create error container and append it after PayPal button\r\n * @param {string} payPalButtonSelector selector of PayPal button\r\n * @returns {Object} return created error container\r\n */\r\nfunction createErrorContainerAfterPayPalButton(payPalButtonSelector) {\r\n var $errorContainer = document.createElement('div');\r\n var $payPalButton = document.querySelector(payPalButtonSelector);\r\n\r\n $errorContainer.classList.add('alert-danger');\r\n $errorContainer.style.cssText = 'text-align: center';\r\n\r\n $payPalButton.parentNode.insertBefore($errorContainer, $payPalButton.nextSibling);\r\n\r\n return $errorContainer;\r\n}\r\n\r\n/**\r\n * Init behavior which should be triggered when buyer clicked on Payment Method tab.\r\n * Currently we handle billing address modification enabling/disabling.\r\n * We also have init behavior of \"Submit Payment\" button\r\n */\r\nfunction initPaymentMethodTabClickBehavior() {\r\n $('.payment-options .nav-item').click(function () {\r\n var selectedMethodID = $(this).data('method-id');\r\n var $payPalAccountList = document.querySelector('#braintreePaypalAccountsList');\r\n var localPaymentMethodsList = [\r\n 'sepa',\r\n 'bancontact',\r\n 'eps',\r\n 'giropay',\r\n 'ideal',\r\n 'mybank',\r\n 'p24',\r\n 'sofort'\r\n ];\r\n\r\n if (selectedMethodID !== 'PayPal') {\r\n // Undo address selection which was done via \"displaySelectedStoredBillingAddress\" for PayPal PM\r\n payPalStoredBillingAddressComponent.selectDefaultBillingAddressOption();\r\n }\r\n\r\n if (localPaymentMethodsList.includes(selectedMethodID)) {\r\n selectedMethodID = 'LPM';\r\n }\r\n\r\n switch (selectedMethodID) {\r\n case 'PayPal':\r\n var $selectedPayPalAccountOption = $payPalAccountList.options[$payPalAccountList.selectedIndex];\r\n // Disabled billing address functionality on billing page\r\n paymentMethodGeneralHelper.disableBillingAddressFunctionality();\r\n\r\n // Submit Payment button behavior\r\n var isAccountListHidden = document.querySelector('.braintree_used_paypal_account').classList.contains('used-paypal-account-hide');\r\n\r\n if (isAccountListHidden) {\r\n paymentMethodGeneralHelper.hideSubmitPaymentButton();\r\n } else if (!payPalListHelper.isNewPayPalAccountOptionSelected()) {\r\n paymentMethodGeneralHelper.showSubmitPaymentButton();\r\n } else {\r\n paymentMethodGeneralHelper.hideSubmitPaymentButton();\r\n }\r\n\r\n // Display billing address of selected PayPal account ONLY for STORED PP accounts use-case\r\n payPalStoredBillingAddressComponent.displaySelectedStoredBillingAddress($selectedPayPalAccountOption);\r\n break;\r\n\r\n case 'GooglePay':\r\n googlePayHelper.googlePayContentTabHandler(true);\r\n // Disabled billing address functionality on the Billing Page\r\n paymentMethodGeneralHelper.disableBillingAddressFunctionality();\r\n break;\r\n\r\n case 'SRC':\r\n srcHelper.srcContentTabHandler(true);\r\n // Disabled billing address functionality on Billing Page\r\n paymentMethodGeneralHelper.disableBillingAddressFunctionality();\r\n break;\r\n\r\n case 'ApplePay':\r\n applePayHelper.toggleContinueButtonOnBillingPage();\r\n // Disabled billing address functionality on the Billing Page\r\n paymentMethodGeneralHelper.disableBillingAddressFunctionality();\r\n break;\r\n\r\n case 'CREDIT_CARD':\r\n paymentMethodGeneralHelper.enableBillingAddressFunctionality();\r\n\r\n // Submit Payment button behavior\r\n paymentMethodGeneralHelper.showSubmitPaymentButton();\r\n break;\r\n case 'Venmo':\r\n var isBtVenmoAccountsList = Boolean(document.querySelector('#braintreeVenmoAccountsList'));\r\n var isSessionAccountExist = Boolean(document.querySelector('.used-venmo-account'));\r\n // Handles continue button visibility on the Billing Page in Venmo tab\r\n // Case for the registered user with saved account\r\n if (isBtVenmoAccountsList) {\r\n venmoHelper.venmoContentTabHandler();\r\n } else if (isSessionAccountExist) {\r\n // Case when only session account exist without saved account\r\n helper.continueButtonToggle(false);\r\n } else {\r\n // Case when no session/saved account exist and Venmo button is shown\r\n helper.continueButtonToggle(true);\r\n }\r\n\r\n // Enabled billing address functionality on the Billing Page\r\n paymentMethodGeneralHelper.enableBillingAddressFunctionality();\r\n break;\r\n case 'LPM':\r\n // Enabled billing address functionality on the Billing Page\r\n paymentMethodGeneralHelper.enableBillingAddressFunctionality();\r\n paymentMethodGeneralHelper.hideSubmitPaymentButton();\r\n break;\r\n default:\r\n // Enabled billing address functionality on the Billing Page\r\n paymentMethodGeneralHelper.enableBillingAddressFunctionality();\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Creates customer form with email to submit it to CheckoutServices-SubmitCustomer endpoint\r\n * @param {string} email email from payment method's response\r\n * @returns {Object} customer form data\r\n */\r\nfunction createCustomerFormData(email) {\r\n var data = {\r\n email: email\r\n };\r\n\r\n var csrfToken = document.querySelector('.braintree-cart-buttons-wrap #csrf_token');\r\n var checkoutCustomerFormFields = document.querySelector('.braintree-cart-buttons-wrap').getAttribute('data-checkout-customer-form-fields');\r\n var customerFormData = helper.createPaymentFormData(checkoutCustomerFormFields, data);\r\n\r\n customerFormData.append(csrfToken.name, csrfToken.value);\r\n\r\n return customerFormData;\r\n}\r\n\r\n/**\r\n * Submits customer form with email to CheckoutServices-SubmitCustomer endpoint\r\n * Call is triggered only in case if email in basket is empty (guest first checkout from cart)\r\n * @param {string} email email from payment method's response\r\n * @returns {Ajax} ajax call to CheckoutServices-SubmitCustomer endpoint\r\n */\r\nfunction submitCustomerForm(email) {\r\n var buttonsWrapper = document.querySelector('.braintree-cart-buttons-wrap');\r\n var isCustomerEmailEmpty = JSON.parse(buttonsWrapper.getAttribute('data-is-customer-email-empty'));\r\n // Could be \"true\" only in case if email in basket is empty (first guest checkout from cart)\r\n if (isCustomerEmailEmpty) {\r\n var submitCustomerUrl = buttonsWrapper.getAttribute('data-checkout-submit-customer-url');\r\n var customerFormData = createCustomerFormData(email);\r\n\r\n return $.ajax({\r\n type: 'POST',\r\n url: submitCustomerUrl,\r\n data: customerFormData,\r\n contentType: false,\r\n processData: false\r\n });\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n createGeneralClientInstancePromise,\r\n fillPaymentSammaryContainer,\r\n createErrorContainerAfterPayPalButton,\r\n initPaymentMethodTabClickBehavior,\r\n submitCustomerForm\r\n};\r\n","'use strict';\r\n\r\nfunction hideBillingAddressManipulationButtons() {\r\n document.querySelector('.address-selector-block .btn-show-details').style.display = 'none';\r\n document.querySelector('.address-selector-block .btn-add-new').style.display = 'none';\r\n}\r\n\r\nfunction showBillingAddressManipulationButtons() {\r\n document.querySelector('.address-selector-block .btn-show-details').style.display = '';\r\n document.querySelector('.address-selector-block .btn-add-new').style.display = '';\r\n}\r\n\r\nfunction disableBillingAddressList() {\r\n document.getElementById('billingAddressSelector').setAttribute('disabled', 'disabled');\r\n}\r\n\r\nfunction enableBillingAddressList() {\r\n document.getElementById('billingAddressSelector').removeAttribute('disabled');\r\n}\r\n\r\nfunction hideSubmitPaymentButton() {\r\n document.querySelector('.submit-payment').style.display = 'none';\r\n}\r\n\r\nfunction showSubmitPaymentButton() {\r\n document.querySelector('.submit-payment').style.display = '';\r\n}\r\n\r\n/**\r\n * Hides biiling address form on the Billing Page for appropriate tabs.\r\n * Case when customer clicked 'Updated address' or 'Add New' button and flipped through the payment method tabs\r\n */\r\nfunction hideBillingAddressForm() {\r\n document.querySelector('.billing-address-block .billing-address').style.display = 'none';\r\n}\r\n\r\n/**\r\n * Shows biiling address form on the Billing Page for appropriate tabs.\r\n * Case when customer clicked 'Updated address' or 'Add New' button and flipped through the payment method tabs\r\n */\r\nfunction showBillingAddressForm() {\r\n document.querySelector('.billing-address-block .billing-address').style.display = '';\r\n}\r\n\r\n/**\r\n * Hides phone field on the Billing Page for appropriate tabs\r\n */\r\nfunction hidePhoneField() {\r\n document.querySelector('.dwfrm_billing_contactInfoFields_phone').style.display = 'none';\r\n}\r\n\r\n/**\r\n * Shows phone field on the Billing Page for appropriate tabs\r\n */\r\nfunction showPhoneField() {\r\n document.querySelector('.dwfrm_billing_contactInfoFields_phone').style.display = '';\r\n}\r\n\r\n/**\r\n * Disabled billing address functionality on the Billing Page\r\n */\r\nfunction disableBillingAddressFunctionality() {\r\n disableBillingAddressList();\r\n hideBillingAddressManipulationButtons();\r\n hideBillingAddressForm();\r\n hidePhoneField();\r\n}\r\n\r\n/**\r\n * Enabled billing address functionality on the Billing Page\r\n */\r\nfunction enableBillingAddressFunctionality() {\r\n showBillingAddressManipulationButtons();\r\n enableBillingAddressList();\r\n showBillingAddressForm();\r\n showPhoneField();\r\n}\r\n\r\nmodule.exports = {\r\n disableBillingAddressFunctionality,\r\n enableBillingAddressFunctionality,\r\n hideBillingAddressManipulationButtons,\r\n showBillingAddressManipulationButtons,\r\n disableBillingAddressList,\r\n enableBillingAddressList,\r\n hideBillingAddressForm,\r\n showBillingAddressForm,\r\n hideSubmitPaymentButton,\r\n showSubmitPaymentButton,\r\n hidePhoneField,\r\n showPhoneField\r\n};\r\n","'use strict';\r\n\r\n/* global paypal braintree $ */\r\n\r\n/**\r\n * Function creates PayPal Checkout instance\r\n * @param {Promise} btClientInstancePromise BT Client Instance Promise\r\n * @param {Object} payPalPaymentProcessingModal Instance of PayPalPaymentProcessing model. Is needed to have customize CheckoutInstance generation\r\n * depending on PayPalPaymentProcessing instance congfigs\r\n * @returns {Promise} Promise with PayPal Checkout Instance\r\n */\r\nfunction createPayPalCheckoutInstance(btClientInstancePromise, payPalPaymentProcessingModal) {\r\n return btClientInstancePromise\r\n .then(function (btClientInstance) {\r\n var payPalCheckoutConfigs = payPalPaymentProcessingModal.payPalCheckoutInstanceConfigs(btClientInstance);\r\n\r\n return braintree.paypalCheckout.create(payPalCheckoutConfigs);\r\n });\r\n}\r\n\r\n/**\r\n * Creates PayPal button style configs\r\n * @param {Object} btPayPalConfigurations Configurations of PayPal button\r\n * @returns {Object} Style configs with the right format\r\n */\r\nfunction createPayPalStyleConfigurations(btPayPalConfigurations) {\r\n var payPalButtonStyleConfigs = btPayPalConfigurations.paypalConfig.style;\r\n\r\n return {\r\n height: payPalButtonStyleConfigs.height,\r\n color: payPalButtonStyleConfigs.color,\r\n shape: payPalButtonStyleConfigs.shape,\r\n layout: payPalButtonStyleConfigs.layout,\r\n label: payPalButtonStyleConfigs.label,\r\n tagline: payPalButtonStyleConfigs.tagline\r\n };\r\n}\r\n\r\n/**\r\n * Callback which is came from PayPal configuratinos. Should trigger only \"enable\" action\r\n * @param {Object} validateActions Object from Braintree\r\n */\r\nvar payPalFormValidationConrol = function (validateActions) {\r\n var isFormValid = true;\r\n\r\n if (isFormValid) {\r\n validateActions.enable();\r\n } else {\r\n validateActions.disable();\r\n }\r\n};\r\n\r\n/**\r\n * Returns PayPal button behavior configs which are used when VaultMode is enabled\r\n * @param {Promise} btPayPalCheckoutInstance Promise with PayPal Checkout Instance\r\n * @param {Object} btPayPalConfigurations Object with PayPal configurations\r\n * @param {Object} payPalPaymentProcessingModal Instance of PayPalPaymentProcessing model\r\n * @returns {Object} Object with PayPal button configs & callbacks wich will handle PayPal button behavior\r\n */\r\nfunction getVaultModeButtonConfigurations(\r\n btPayPalCheckoutInstance,\r\n btPayPalConfigurations,\r\n payPalPaymentProcessingModal\r\n) {\r\n var payPalButtonStyleConfigs = createPayPalStyleConfigurations(btPayPalConfigurations);\r\n var vaultModePayPalButtonConfigs = {\r\n onClick: function (_, actions) {\r\n return payPalPaymentProcessingModal.onPayPalButtonClickCallback(_, actions);\r\n },\r\n createBillingAgreement: function () {\r\n // Logic which executed after buyer clicked on the button, and PayPal modal start loading\r\n // \"onOrderCreateCallback\" is used for forming of order data object\r\n var paymentObject = payPalPaymentProcessingModal.onOrderCreateCallback();\r\n\r\n return btPayPalCheckoutInstance.createPayment(paymentObject);\r\n },\r\n onApprove: function (data) {\r\n // Some logic here before tokenization happens below\r\n return btPayPalCheckoutInstance.tokenizePayment(data)\r\n .then(function (payload) {\r\n payPalPaymentProcessingModal.onApprovePaymentCallback(payload);\r\n });\r\n },\r\n onCancel: function () {\r\n payPalPaymentProcessingModal.onCancelPaymentCallback();\r\n },\r\n\r\n onError: function (err) {\r\n payPalPaymentProcessingModal.onErrorPaymentCallback(err);\r\n },\r\n style: payPalButtonStyleConfigs,\r\n validate: function (validateActions) {\r\n payPalFormValidationConrol(validateActions);\r\n }\r\n };\r\n\r\n return vaultModePayPalButtonConfigs;\r\n}\r\n\r\n/**\r\n * Returns PayPal button behavior configs which are used when VaultMode is disabled or \"Checkout with Vault\" is enabled\r\n * @param {Promise} btPayPalCheckoutInstance Promise with PayPal Checkout Instance\r\n * @param {Object} btPayPalConfigurations Object with PayPal configurations\r\n * @param {Object} payPalPaymentProcessingModal Instance of PayPalPaymentProcessing model\r\n * @returns {Object} Object with PayPal button configs & callbacks wich will handle PayPal button behavior\r\n */\r\nfunction getCheckoutModeButtonConfigurations(\r\n btPayPalCheckoutInstance,\r\n btPayPalConfigurations,\r\n payPalPaymentProcessingModal\r\n) {\r\n var payPalButtonStyleConfigs = createPayPalStyleConfigurations(btPayPalConfigurations);\r\n var vaultModePayPalButtonConfigs = {\r\n onClick: function (_, actions) {\r\n return payPalPaymentProcessingModal.onPayPalButtonClickCallback(_, actions);\r\n },\r\n createOrder: function () {\r\n // Logic which executed after buyer clicked on the button, and PayPal modal start loading\r\n // \"onOrderCreateCallback\" is used for forming of order data object\r\n var paymentObject = payPalPaymentProcessingModal.onOrderCreateCallback();\r\n\r\n return btPayPalCheckoutInstance.createPayment(paymentObject);\r\n },\r\n onApprove: function (data) {\r\n // Some logic here before tokenization happens below\r\n return btPayPalCheckoutInstance.tokenizePayment(data)\r\n .then(function (payload) {\r\n payPalPaymentProcessingModal.onApprovePaymentCallback(payload);\r\n });\r\n },\r\n onCancel: function () {\r\n payPalPaymentProcessingModal.onCancelPaymentCallback();\r\n },\r\n\r\n onError: function (err) {\r\n payPalPaymentProcessingModal.onErrorPaymentCallback(err);\r\n },\r\n style: payPalButtonStyleConfigs,\r\n validate: function (validateActions) {\r\n payPalFormValidationConrol(validateActions);\r\n }\r\n };\r\n\r\n return vaultModePayPalButtonConfigs;\r\n}\r\n\r\n/**\r\n * Function which result is rendered PayPal button\r\n * @param {Promise} btClientInstancePromise Client instance promise\r\n * @param {boolean} isVaultMode \"true\" in case if VaultMode is enabled\r\n * @param {Object} btPayPalConfigurations Object with PayPal configurations\r\n * @param {string} payPalButtonSelector PayPal button selector (container inside of which PayPal button will be rendered)\r\n * @param {Object} payPalPaymentProcessingModal instance of PayPalPaymentProcessing model\r\n * @returns {Promise} PayPal button\r\n */\r\nfunction payPalButtonRendering(\r\n btClientInstancePromise,\r\n isVaultMode,\r\n btPayPalConfigurations,\r\n payPalButtonSelector,\r\n payPalPaymentProcessingModal\r\n) {\r\n var btPayPalCheckoutInstancePromise = createPayPalCheckoutInstance(btClientInstancePromise, payPalPaymentProcessingModal);\r\n\r\n var paypalButtonConfigs = null;\r\n var paypalButtonSdkUrlConfigs = null;\r\n\r\n var changePMButtonEnabled = payPalPaymentProcessingModal.changePMButtonEnabled;\r\n\r\n return btPayPalCheckoutInstancePromise\r\n .then(function (btPayPalCheckoutInstance) {\r\n // Change Paymnet Method button flow (checkout with vault flow)\r\n if (changePMButtonEnabled) {\r\n paypalButtonConfigs = getCheckoutModeButtonConfigurations(\r\n btPayPalCheckoutInstance,\r\n btPayPalConfigurations,\r\n payPalPaymentProcessingModal\r\n );\r\n paypalButtonSdkUrlConfigs = payPalPaymentProcessingModal.payPalCheckoutSdkConfigs();\r\n // If vault mode\r\n } else if (isVaultMode) {\r\n paypalButtonConfigs = getVaultModeButtonConfigurations(\r\n btPayPalCheckoutInstance,\r\n btPayPalConfigurations,\r\n payPalPaymentProcessingModal\r\n );\r\n paypalButtonSdkUrlConfigs = payPalPaymentProcessingModal.payPalVaultSdkConfigs();\r\n // If checkout mode\r\n } else {\r\n paypalButtonConfigs = getCheckoutModeButtonConfigurations(\r\n btPayPalCheckoutInstance,\r\n btPayPalConfigurations,\r\n payPalPaymentProcessingModal\r\n );\r\n paypalButtonSdkUrlConfigs = payPalPaymentProcessingModal.payPalCheckoutSdkConfigs();\r\n }\r\n\r\n // PayPal button loading\r\n if (!window.isPayPalSDKLoaded) {\r\n // We pass params to customize PayPal SDK loading.\r\n btPayPalCheckoutInstance.loadPayPalSDK(paypalButtonSdkUrlConfigs).then(function () {\r\n window.isPayPalSDKLoaded = true;\r\n // eslint-disable-next-line new-cap\r\n return paypal.Buttons(paypalButtonConfigs).render(payPalButtonSelector);\r\n });\r\n } else {\r\n // In case if PayPal SDK was already loaded (with custom parameters), we can simple load PP button\r\n // eslint-disable-next-line new-cap\r\n return paypal.Buttons(paypalButtonConfigs).render(payPalButtonSelector);\r\n }\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n payPalButtonRendering\r\n};\r\n","'use strict';\r\n\r\nvar PayPalAccountModel = require('../models/payPalAccountModel');\r\nvar ErrorHandlingBaseModel = require('../errorhandler/errorHandlingBaseModel');\r\nvar payPalAccountPageHelper = require('../helpers/payPalAccountPageHelper');\r\nvar helper = require('../../helper');\r\nvar loaderInstance = require('../../loaderHelper');\r\n\r\n/**\r\n * Init add new PayPal account button\r\n * @param {Object} PayPalAccount PayPal Account model instance\r\n */\r\nfunction initAddNewPayPalAccountEvent(PayPalAccount) {\r\n var $addNewPayPalAccountButton = document.querySelector('.add-paypal-account');\r\n\r\n $addNewPayPalAccountButton.addEventListener('click', function () {\r\n payPalAccountPageHelper.showPayPalAccountBtn();\r\n\r\n if (!window.accountPayPalButtonInited) {\r\n window.accountPayPalButtonInited = true;\r\n PayPalAccount.initPayment();\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Init remove PayPal account button\r\n */\r\nfunction initRemovePayPalAccountEvent() {\r\n $(document).on('click', '.paypal-accounts .remove-bt-payment', function (e) {\r\n helper.removeBtPayment(e);\r\n });\r\n}\r\n\r\n/**\r\n * Init Make Default PayPal account button\r\n */\r\nfunction initMakeDefaultPayPalAccountEvent() {\r\n $(document).on('click', '.paypal-accounts .braintree-make-default-card', function () {\r\n var $this = $(this);\r\n var makeDefaultUrl = $this.data('make-default-url');\r\n var paymentMehtodId = $this.data('id');\r\n var paymentProcessorId = $('.paypal-accounts').data('payment-method-id');\r\n var loaderContainer = document.querySelector('#paypalAccountBtLoader');\r\n var loader = loaderInstance(loaderContainer);\r\n\r\n loader.show();\r\n\r\n helper.setDefaultProperty({\r\n url: makeDefaultUrl,\r\n id: paymentMehtodId,\r\n paymentMethodID: paymentProcessorId,\r\n loader\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Function which initiate PayPal functionality on the Account Page\r\n * @param {Object} btClientInstancePromise BT Client Instance promise\r\n */\r\nfunction init(btClientInstancePromise) {\r\n var payPalButtonSelector = '.js_braintree_accountPaypalButton_wrapper .js_braintree_accountPaypalButton';\r\n var $payPalButton = document.querySelector(payPalButtonSelector);\r\n\r\n if ($payPalButton) {\r\n var payPalConfigurations = JSON.parse($payPalButton.getAttribute('data-braintree-config'));\r\n var addPayPalAccountUrl = $payPalButton.getAttribute('data-paypal-add-account-handler');\r\n\r\n var isVaultMode = payPalConfigurations.options.flow !== 'checkout';\r\n var requestBillingAgreement = Boolean(payPalConfigurations.options.requestBillingAgreement);\r\n var isFraudToolsEnabled = payPalConfigurations.isFraudToolsEnabled;\r\n let $csrfToken = document.querySelector('.js_braintree_accountPaypalButton_wrapper #csrf_token');\r\n var $loaderContainer = document.querySelector('#braintreePayPalAccLoader');\r\n\r\n // Init params for AccountErrorHandling model\r\n var errorMessages = payPalConfigurations.messages;\r\n\r\n var ErrorHandling = new ErrorHandlingBaseModel(errorMessages);\r\n var PayPalAccount = new PayPalAccountModel(\r\n ErrorHandling,\r\n btClientInstancePromise,\r\n payPalButtonSelector,\r\n payPalConfigurations,\r\n isVaultMode,\r\n requestBillingAgreement,\r\n isFraudToolsEnabled,\r\n $csrfToken,\r\n addPayPalAccountUrl,\r\n $loaderContainer\r\n );\r\n\r\n initAddNewPayPalAccountEvent(PayPalAccount);\r\n initRemovePayPalAccountEvent();\r\n initMakeDefaultPayPalAccountEvent();\r\n\r\n return;\r\n }\r\n\r\n var isVenmoAccountBlockExists = Boolean(document.querySelector('.paypal-accounts'));\r\n\r\n if (isVenmoAccountBlockExists) {\r\n initRemovePayPalAccountEvent();\r\n initMakeDefaultPayPalAccountEvent();\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\n// For cases when basket amount changing without page reload\r\nvar dynamicBasketProductQuantity = -1;\r\n\r\n/**\r\n * Hide PayPal button\r\n * @param {Object} $payPalButton PayPal button js container\r\n */\r\nfunction hidePayPalButton($payPalButton) {\r\n if ($payPalButton) {\r\n $payPalButton.style.display = 'none';\r\n }\r\n}\r\n\r\n/**\r\n * Show PayPal button\r\n * @param {Object} $payPalButton PayPal button js container\r\n */\r\nfunction showPayPalButton($payPalButton) {\r\n if ($payPalButton) {\r\n $payPalButton.style.display = '';\r\n }\r\n}\r\n\r\n/**\r\n * Check if PDP product price is zero\r\n * @returns {boolean} \"true\" in case if PDP product price is zero\r\n */\r\nfunction isZeroPdpProductPrice() {\r\n var $productPriceSelector = document.querySelector('.price .sales .value');\r\n\r\n if ($productPriceSelector) {\r\n var price = parseInt($productPriceSelector.getAttribute('content'), 0);\r\n return !(price > 0);\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Check if basket is empty based on attr which comes from server and \"dynamicBasketProductQuantity\" which updates on \"cart:update\" event\r\n * @param {Object} $payPalButton PayPal button js container\r\n * @returns {boolean} \"true\" in case if basket is not empty\r\n */\r\nfunction isBasketNotEmpty($payPalButton) {\r\n return !JSON.parse($payPalButton.getAttribute('data-is-basket-empty')) || (dynamicBasketProductQuantity > 0 && dynamicBasketProductQuantity !== -1);\r\n}\r\n\r\n/**\r\n * Is add to cart button disabled\r\n * @returns {boolean} \"true\" in case if add to cart button disabled\r\n */\r\nfunction isAddToCartButtonDisabled() {\r\n var $addToCartButton = document.querySelector('.add-to-cart') || document.querySelector('.add-to-cart-global');\r\n\r\n return $addToCartButton.disabled;\r\n}\r\n\r\n/**\r\n * Return mini cart quantity\r\n * @param {Object} $miniCartQuantitySelector Mini cart quantity selector\r\n * @returns {Int} Quantity\r\n */\r\nfunction getMiniCartQuantity($miniCartQuantitySelector) {\r\n var quantity = null;\r\n\r\n if ($miniCartQuantitySelector) {\r\n quantity = parseInt($miniCartQuantitySelector.textContent, 0);\r\n }\r\n\r\n return quantity;\r\n}\r\n\r\n/**\r\n * Check if current total basket price is zero\r\n * @returns {boolean} \"true\" in case if current total basket price is zero\r\n */\r\nfunction isCurrentTotalBasketPriceZero() {\r\n var $basketTotalAmount = document.querySelector('.sub-total');\r\n\r\n if ($basketTotalAmount) {\r\n var basketTotalAmount = $basketTotalAmount.textContent.slice(1);\r\n\r\n return parseInt(basketTotalAmount, 10) === 0;\r\n }\r\n}\r\n\r\n/**\r\n * Show or hide PayPal button\r\n * @param {Object} paypalMinicartButton paypal button js container\r\n */\r\nfunction paypalMinicartButtonBehavior(paypalMinicartButton) {\r\n if (!isCurrentTotalBasketPriceZero()) {\r\n showPayPalButton(paypalMinicartButton);\r\n } else {\r\n hidePayPalButton(paypalMinicartButton);\r\n }\r\n}\r\n\r\n/**\r\n * Init PayPal button display behavior. This code is handle both PayPal button on PDP and MiniCart pages\r\n * @param {Object} $payPalButton PayPal button js container\r\n */\r\nfunction initProductPage($payPalButton) {\r\n var addToCartButtonDisabled = isAddToCartButtonDisabled();\r\n var zeroProductPrice = isZeroPdpProductPrice();\r\n var basketNotEmpty = isBasketNotEmpty($payPalButton);\r\n\r\n if (addToCartButtonDisabled || zeroProductPrice || basketNotEmpty) {\r\n hidePayPalButton($payPalButton);\r\n }\r\n\r\n $('body').on('product:afterAddToCart', function () {\r\n hidePayPalButton($payPalButton);\r\n });\r\n\r\n // Case when buyer remove product from Cart\r\n $('body').on('cart:update', function (_, data) {\r\n var $miniCartQuantityContainer = document.querySelector('.minicart-quantity');\r\n var miniCartQuantity = getMiniCartQuantity($miniCartQuantityContainer);\r\n var addToCartButtonEnabled = !isAddToCartButtonDisabled();\r\n zeroProductPrice = isZeroPdpProductPrice();\r\n\r\n if (data.basket) {\r\n dynamicBasketProductQuantity = data.basket.numItems;\r\n }\r\n\r\n if (miniCartQuantity === 0 && addToCartButtonEnabled && !zeroProductPrice) {\r\n showPayPalButton($payPalButton);\r\n } else {\r\n hidePayPalButton($payPalButton);\r\n }\r\n });\r\n\r\n // When buyer change collor/size of the product on PDP\r\n $('body').on('product:statusUpdate', function () {\r\n addToCartButtonDisabled = isAddToCartButtonDisabled();\r\n zeroProductPrice = isZeroPdpProductPrice();\r\n\r\n if (addToCartButtonDisabled || zeroProductPrice) {\r\n hidePayPalButton($payPalButton);\r\n } else {\r\n showPayPalButton($payPalButton);\r\n }\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n initProductPage,\r\n paypalMinicartButtonBehavior\r\n};\r\n","'use strict';\r\n\r\nvar PayPalCartModel = require('../models/payPalCartModel');\r\nvar ErrorHandlingCartModel = require('../errorhandler/errorHandlingCartModel');\r\n\r\n/**\r\n * Initialize Cart page PayPal button\r\n * @param {Promise} clientInstancePromise Client instance promise\r\n */\r\nfunction init(clientInstancePromise) {\r\n var payPalButtonSelector = '.cart-page .js_braintree_paypal_cart_button';\r\n var $payPalButton = document.querySelector(payPalButtonSelector);\r\n var payPalConfigurations = JSON.parse($payPalButton.getAttribute('data-braintree-config'));\r\n\r\n var isVaultMode = payPalConfigurations.options.flow !== 'checkout';\r\n var requestBillingAgreement = Boolean(payPalConfigurations.options.requestBillingAgreement);\r\n var isFraudToolsEnabled = payPalConfigurations.isFraudToolsEnabled;\r\n var $csrfToken = document.querySelector('.braintree-cart-paypal-buttons-wrap #csrf_token');\r\n var $loaderContainer = document.querySelector('.braintreePayPalLoader');\r\n\r\n var ErrorHandling = new ErrorHandlingCartModel(payPalConfigurations.messages);\r\n var PayPalExpress = new PayPalCartModel(\r\n ErrorHandling,\r\n clientInstancePromise,\r\n payPalButtonSelector,\r\n payPalConfigurations,\r\n isVaultMode,\r\n requestBillingAgreement,\r\n isFraudToolsEnabled,\r\n $csrfToken,\r\n $loaderContainer\r\n );\r\n\r\n // Generate Fraud Data if enabled\r\n PayPalExpress.generateFraudData();\r\n // Init PayPal button\r\n PayPalExpress.initPayment();\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\nvar PayPalCheckoutModel = require('../models/payPalCheckoutModel');\r\nvar ErrorHandlingCheckoutModel = require('../errorhandler/errorHandlingCheckoutModel');\r\nvar payPalAccountList = require('./payPalList');\r\n\r\nvar braintreeClientInstancePromise;\r\nvar payPalConfigs;\r\n\r\n/**\r\n * Initialize Checkout PayPal button functionality\r\n * @param {Promise} btClientInstancePromise BT Client Instance promise\r\n * @param {Object} payPalConfigurations PayPal checkout configurations object\r\n */\r\nfunction initCheckout(btClientInstancePromise, payPalConfigurations) {\r\n var payPalButtonSelector = '.js_braintree_paypal_billing_button';\r\n var $continueButton = document.querySelector('button.submit-payment');\r\n\r\n var isVaultMode = payPalConfigurations.options.flow !== 'checkout';\r\n var requestBillingAgreement = Boolean(payPalConfigurations.options.requestBillingAgreement);\r\n var isFraudToolsEnabled = payPalConfigurations.isFraudToolsEnabled;\r\n var $loaderContainer = document.querySelector('.braintreePayPalLoader');\r\n\r\n var ErrorHandling = new ErrorHandlingCheckoutModel(payPalConfigurations.messages);\r\n var PayPalCheckoutPayment = new PayPalCheckoutModel(\r\n ErrorHandling,\r\n btClientInstancePromise,\r\n payPalButtonSelector,\r\n payPalConfigurations,\r\n isVaultMode,\r\n requestBillingAgreement,\r\n isFraudToolsEnabled,\r\n $continueButton,\r\n $loaderContainer\r\n );\r\n\r\n // Init account list\r\n payPalAccountList.init();\r\n // Generate Fraud Data if enabled\r\n PayPalCheckoutPayment.generateFraudData();\r\n // Init PayPal button\r\n PayPalCheckoutPayment.initPayment();\r\n\r\n /* ------- Hot fix that will be properly resolved in the future release -------------------------- */\r\n if (window.location.hash === '#placeOrder') {\r\n // check shipping\r\n const $shippingCountry = document.getElementById('shippingCountrydefault');\r\n const $shippingState = document.getElementById('shippingStatedefault');\r\n // on page load retrieving the value from attribute, since the state value is not loaded yet due to delay in multicountries\r\n var shippingStateVal = $shippingState.value || $shippingState && $shippingState.getAttribute('selected-state');\r\n\r\n if (!$shippingCountry.value || !shippingStateVal) {\r\n const $editShippingButton = document.querySelector('.shipping-summary button.edit-button');\r\n const $submitShippingButton = document.querySelector('.submit-shipping');\r\n\r\n $editShippingButton.click();\r\n $submitShippingButton.click();\r\n }\r\n }\r\n /* ----------------------------------------------------------------------------------------------- */\r\n}\r\n\r\n/**\r\n * Initialize Checkout PayPal button functionality.\r\n * Additional code was added which is used for total amount extracting which is needed for \"Change Payment Method button\" feature\r\n * @param {Promise} btClientInstancePromise BT Client Instance promise\r\n */\r\nfunction init(btClientInstancePromise) {\r\n var $payPalButton = document.querySelector('.js_braintree_paypal_billing_button');\r\n var $paypalTab = $('.payment-options .nav-item[data-method-id=\"PayPal\"]');\r\n var sessionPaymentMethodId;\r\n\r\n payPalConfigs = JSON.parse($payPalButton.getAttribute('data-braintree-config'));\r\n braintreeClientInstancePromise = btClientInstancePromise;\r\n sessionPaymentMethodId = payPalConfigs.sessionPaymentMethodId;\r\n\r\n // To load PayPal button only when buyer click (or from code) on PayPal Checkout tab\r\n $paypalTab.click(function () {\r\n var selectedMethodID = $(this).data('method-id');\r\n\r\n if (selectedMethodID === 'PayPal' && !window.payPalCheckoutWasInited) {\r\n window.payPalCheckoutWasInited = true;\r\n\r\n initCheckout(braintreeClientInstancePromise, payPalConfigs);\r\n }\r\n });\r\n\r\n // Case when buyer use 'ChangePM' button\r\n // After click we select PayPal PM and init the rest of PP logic\r\n if (sessionPaymentMethodId === 'PayPal') {\r\n $paypalTab.trigger('click');\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\nvar payPalSessionAccountComponent = require('./payPalSessionAccount');\r\nvar payPalStoredBillingAddressComponent = require('./payPalStoredBillingAddress');\r\nvar {\r\n isVaultModeEnabled,\r\n isOrderIntentEnabled,\r\n getAccountType,\r\n setNonceInputValue,\r\n hideSavePayPalAccountBlock,\r\n displaySavePayPalAccountBlock,\r\n displayPayPalButton,\r\n hidePayPalButon,\r\n displayContinueButton,\r\n hideContinueButon,\r\n isBuyerAuthenticated,\r\n selectPayPalCheckoutTab,\r\n setBraintreePayPalEmailInput,\r\n handleStoredAccountsShowing\r\n} = require('../helpers/payPalListHelper');\r\nvar billingFormHelper = require('../helpers/payPalBillingFormHelperGlobal');\r\n\r\nvar $payPalAccountList;\r\nvar $continueButton;\r\nvar $savePaypalAccountCountainer;\r\nvar $braintreePayPalNonce;\r\nvar $paypalButton;\r\nvar $payPalTab;\r\nvar $braintreePaypalEmail;\r\n\r\nvar constantList = {\r\n SESSION_ACCOUNT: 'session_account',\r\n NEW_ACCOUNT: 'new_account',\r\n STORED_ACCOUNT: 'stored_account'\r\n};\r\n\r\n/**\r\n * The function which manages what should be done when session/stored/new account was selected from the account dropdown\r\n */\r\nfunction accountsListChange() { // eslint-disable-line require-jsdoc\r\n var accountType = getAccountType($payPalAccountList, constantList);\r\n var storedAccountWithSessionAccountEmail = billingFormHelper.getStoredAccountBySesionAccountEmail();\r\n var buyerAuthentificated = isBuyerAuthenticated($payPalAccountList);\r\n var vaultModeEnabled = isVaultModeEnabled($paypalButton);\r\n var orderIntentEnabled = isOrderIntentEnabled($paypalButton);\r\n var $selectedPayPalAccountOption = $payPalAccountList.options[$payPalAccountList.selectedIndex];\r\n\r\n $continueButton.removeEventListener('click', payPalSessionAccountComponent.removeSessionNonce);\r\n\r\n // eslint-disable-next-line default-case\r\n switch (accountType) {\r\n // Buyer selected new PayPal account\r\n case constantList.NEW_ACCOUNT:\r\n displayPayPalButton($paypalButton);\r\n hideContinueButon($continueButton);\r\n\r\n if (vaultModeEnabled && buyerAuthentificated && !orderIntentEnabled) {\r\n displaySavePayPalAccountBlock($savePaypalAccountCountainer);\r\n }\r\n break;\r\n\r\n // Buyer selected session account\r\n case constantList.SESSION_ACCOUNT:\r\n var $selectedOption = $payPalAccountList.selectedOptions[0];\r\n var selectedOptionNonceValue = $selectedOption.getAttribute('data-nonce');\r\n\r\n setNonceInputValue($braintreePayPalNonce, selectedOptionNonceValue);\r\n displayContinueButton($continueButton);\r\n hidePayPalButon($paypalButton);\r\n\r\n // A case when a buyer re-added a PayPal account that he already had saved (session account\r\n // has the same email as stored accoutnt)\r\n if (vaultModeEnabled && buyerAuthentificated && !orderIntentEnabled) {\r\n if (storedAccountWithSessionAccountEmail) {\r\n hideSavePayPalAccountBlock($savePaypalAccountCountainer);\r\n } else {\r\n displaySavePayPalAccountBlock($savePaypalAccountCountainer);\r\n }\r\n }\r\n\r\n selectPayPalCheckoutTab($payPalTab);\r\n break;\r\n\r\n // Buyer selected stored account\r\n case constantList.STORED_ACCOUNT:\r\n var selectedAccountEmail = $selectedPayPalAccountOption.text;\r\n\r\n if (vaultModeEnabled && !orderIntentEnabled) {\r\n hideSavePayPalAccountBlock($savePaypalAccountCountainer);\r\n }\r\n\r\n setNonceInputValue($braintreePayPalNonce, '');\r\n displayContinueButton($continueButton);\r\n hidePayPalButon($paypalButton);\r\n\r\n selectPayPalCheckoutTab($payPalTab);\r\n setBraintreePayPalEmailInput($braintreePaypalEmail, selectedAccountEmail);\r\n\r\n // Display billing address of selected PayPal account\r\n payPalStoredBillingAddressComponent.displaySelectedStoredBillingAddress($selectedPayPalAccountOption);\r\n\r\n $continueButton.addEventListener('click', payPalSessionAccountComponent.removeSessionNonce);\r\n break;\r\n }\r\n}\r\n\r\n/**\r\n * Init PayPal Account list functionality\r\n */\r\nfunction init() {\r\n $payPalAccountList = document.querySelector('#braintreePaypalAccountsList');\r\n $savePaypalAccountCountainer = document.querySelector('#braintreeSavePaypalAccountContainer');\r\n $braintreePayPalNonce = document.querySelector('#braintreePayPalNonce');\r\n $paypalButton = document.querySelector('.js_braintree_paypal_billing_button');\r\n $continueButton = document.querySelector('button.submit-payment');\r\n $payPalTab = document.querySelector('.paypal-tab');\r\n $braintreePaypalEmail = document.querySelector('#braintreePaypalEmail');\r\n var buyerAuthenticated = isBuyerAuthenticated($payPalAccountList);\r\n\r\n // Add on change \"account list\" event\r\n $payPalAccountList.addEventListener('change', accountsListChange);\r\n // Execute \"account list\" change function to setup init values\r\n accountsListChange();\r\n // Check whether buyer has proceeded with the same email which is already stored\r\n // if yes we hide stored account with the same email in dropdown\r\n // if no we show all existent PP accounts in dropdown (stored + new session account)\r\n handleStoredAccountsShowing(buyerAuthenticated);\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\nvar PayPalExpressModel = require('../models/payPalExpressModel');\r\nvar ErrorHandlingMiniCartModel = require('../errorhandler/errorHandlingMiniCartModel');\r\nvar paymentMethodGeneral = require('../../paymentMethodGeneral');\r\nvar paypalMinicartButtonBehavior = require('./payPalButtonDisplayBehavior');\r\n\r\n// eslint-disable-next-line valid-jsdoc\r\n/**\r\n * Init PayPal on the MiniCart Page\r\n * @returns stop function execution in case if PayPal button wasn't rendered\r\n */\r\nfunction initPayPalOnMiniCart() {\r\n var $paypalMinicartButton = document.querySelector('.paypalMinicartButton');\r\n var payPalButtonSelector = '.paypalMinicartButton .js_braintree_paypal_cart_button';\r\n var $payPalButton = document.querySelector(payPalButtonSelector);\r\n\r\n // Case when buyer remove product from the Cart\r\n $('body').on('cart:update', function () {\r\n paypalMinicartButtonBehavior.paypalMinicartButtonBehavior($paypalMinicartButton);\r\n });\r\n\r\n paypalMinicartButtonBehavior.paypalMinicartButtonBehavior($paypalMinicartButton);\r\n if (!$payPalButton) {\r\n return;\r\n }\r\n var payPalConfigurations = JSON.parse($payPalButton.getAttribute('data-braintree-config'));\r\n var isPayPalButtonWasInited = JSON.parse($payPalButton.getAttribute('data-is-inited'));\r\n\r\n // Do not init PayPal button if it was already inited or PayPal configs are empty\r\n if (isPayPalButtonWasInited || typeof payPalConfigurations !== 'object' || payPalConfigurations === null) {\r\n return;\r\n }\r\n\r\n var isVaultMode = payPalConfigurations.options.flow !== 'checkout';\r\n var requestBillingAgreement = Boolean(payPalConfigurations.options.requestBillingAgreement);\r\n var isFraudToolsEnabled = payPalConfigurations.isFraudToolsEnabled;\r\n var $csrfToken = document.querySelector('.braintree-cart-paypal-buttons-wrap #csrf_token');\r\n var $loaderContainer = document.querySelector('.braintreePayPalLoader');\r\n\r\n var clientInstancePromise = paymentMethodGeneral.createGeneralClientInstancePromise();\r\n\r\n var ErrorHandling = new ErrorHandlingMiniCartModel(payPalConfigurations.messages);\r\n var PayPalExpress = new PayPalExpressModel(\r\n ErrorHandling,\r\n clientInstancePromise,\r\n payPalButtonSelector,\r\n payPalConfigurations,\r\n isVaultMode,\r\n requestBillingAgreement,\r\n isFraudToolsEnabled,\r\n $csrfToken,\r\n $loaderContainer\r\n );\r\n\r\n // Generate Fraud Data if enabled\r\n PayPalExpress.generateFraudData();\r\n\r\n // Init PayPal button\r\n PayPalExpress.initPayment();\r\n\r\n // Indicate that PayPal button was already inited.\r\n $payPalButton.setAttribute('data-is-inited', true);\r\n}\r\n\r\n/**\r\n * Init PayPal button on the MiniCart Page\r\n */\r\nfunction init() {\r\n var $minicartPopover = document.querySelector('.minicart .popover');\r\n var observer;\r\n\r\n // To avoid executino of this code on checkout page\r\n if ($minicartPopover) {\r\n observer = new MutationObserver(function (mutations) {\r\n mutations.forEach(function (mutation) {\r\n if (mutation.addedNodes.length < 2) {\r\n return;\r\n }\r\n\r\n initPayPalOnMiniCart();\r\n });\r\n });\r\n\r\n observer.observe($minicartPopover, { childList: true });\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\nvar PayPalProductPageModel = require('../models/payPalProductPageModel');\r\nvar ErrorHandlingBaseModel = require('../errorhandler/errorHandlingBaseModel');\r\n\r\nvar payPalButtonDisplayBehavior = require('./payPalButtonDisplayBehavior');\r\n\r\n/**\r\n * Init PayPal button on the Product Page\r\n * @param {Promise} clientInstancePromise Client Instance Promise\r\n */\r\nfunction init(clientInstancePromise) {\r\n var payPalButtonSelector = '.prices-add-to-cart-actions .js_braintree_paypal_cart_button';\r\n var $payPalButton = document.querySelector(payPalButtonSelector);\r\n var payPalConfigurations = JSON.parse($payPalButton.getAttribute('data-braintree-config'));\r\n\r\n var isVaultMode = payPalConfigurations.options.flow !== 'checkout';\r\n var requestBillingAgreement = Boolean(payPalConfigurations.options.requestBillingAgreement);\r\n var isFraudToolsEnabled = payPalConfigurations.isFraudToolsEnabled;\r\n var $csrfToken = document.querySelector('.braintree-cart-paypal-buttons-wrap #csrf_token');\r\n var $loaderContainer = document.querySelector('.braintreePayPalLoader');\r\n\r\n var ErrorHandling = new ErrorHandlingBaseModel(payPalConfigurations.messages);\r\n var PayPalProductPage = new PayPalProductPageModel(\r\n ErrorHandling,\r\n clientInstancePromise,\r\n payPalButtonSelector,\r\n payPalConfigurations,\r\n isVaultMode,\r\n requestBillingAgreement,\r\n isFraudToolsEnabled,\r\n $csrfToken,\r\n $loaderContainer\r\n );\r\n\r\n // Init behavior for hide/show PayPal button\r\n payPalButtonDisplayBehavior.initProductPage($payPalButton);\r\n // Generate Fraud Data if enabled\r\n PayPalProductPage.generateFraudData();\r\n // Init PayPal button\r\n PayPalProductPage.initPayment();\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\nvar helper = require('../../helper');\r\nvar payPalSessionAccountHelper = require('../helpers/payPalSessionAccountHelper');\r\n\r\n/**\r\n * Function which remove session nonce and related to the session account data\r\n */\r\nfunction removeSessionNonce() {\r\n var $braintreePayPalNonce = document.querySelector('#braintreePayPalNonce');\r\n var $braintreePaypalAccount = document.querySelector('#braintreePaypalAccount');\r\n\r\n var sessionOption = helper.getSessionAccountOption({\r\n querySelector: '#braintreePaypalAccountsList',\r\n id: 'braintreePaypalAccount'\r\n });\r\n\r\n if (sessionOption) {\r\n $braintreePayPalNonce.value = '';\r\n $braintreePaypalAccount.selected = false;\r\n\r\n sessionOption.classList.add('used-paypal-account-hide');\r\n sessionOption.classList.remove('used-paypal-account');\r\n sessionOption.value = '';\r\n sessionOption.text = '';\r\n sessionOption.setAttribute('data-session-account', false);\r\n sessionOption.setAttribute('data-save', false);\r\n\r\n // Handles a behavior inside PayPal tab, when session PayPal account was deleted\r\n payPalSessionAccountHelper.handlePaypalTabBehavior();\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n removeSessionNonce\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Extract billing address of corresponding PayPal payment account from paypal account option\r\n * @param {Object} $selectedPayPalPayment PayPal payment option\r\n * @returns {string} return string representation of extracted address\r\n */\r\nfunction getBillingAddressAsString($selectedPayPalPayment) {\r\n var selectedBillingAddressStr = $selectedPayPalPayment.getAttribute('data-billing-address');\r\n var selectedBillingAddressObj;\r\n var billingAddressRepresentationString = '';\r\n\r\n if (selectedBillingAddressStr && selectedBillingAddressStr !== '') {\r\n selectedBillingAddressObj = JSON.parse(selectedBillingAddressStr);\r\n\r\n if (selectedBillingAddressObj && selectedBillingAddressStr !== '{}') {\r\n var firstName = selectedBillingAddressObj.firstName || '';\r\n var lastname = selectedBillingAddressObj.lastName || '';\r\n var address1 = selectedBillingAddressObj.line1 || selectedBillingAddressObj.address1 || '';\r\n var city = selectedBillingAddressObj.city || '';\r\n var state = selectedBillingAddressObj.state || selectedBillingAddressObj.stateCode || '';\r\n var postalCode = decodeURIComponent(selectedBillingAddressObj.postalCode) || '';\r\n\r\n billingAddressRepresentationString = firstName + ' ' +\r\n lastname + ' ' +\r\n address1 + ' ' +\r\n city + ', ' +\r\n state + ' ' +\r\n postalCode;\r\n }\r\n }\r\n\r\n return billingAddressRepresentationString;\r\n}\r\n\r\n/**\r\n * Display billing address of passed paypal payment option (of selected paypal payment option)\r\n * @param {Object} $selectedPayPalPayment Selected PayPal payment option\r\n */\r\nfunction displaySelectedStoredBillingAddress($selectedPayPalPayment) {\r\n if ($selectedPayPalPayment) {\r\n var selectedOptionClassList = $selectedPayPalPayment.classList;\r\n\r\n if (selectedOptionClassList.contains('js-stored-paypal-account') || selectedOptionClassList.contains('js-session-paypal-account')) {\r\n var billingAddressAsString = getBillingAddressAsString($selectedPayPalPayment);\r\n var $storedPayPalAddressOption = $('#billingAddressSelector option[class=\"stored-paypal-address\"]');\r\n var storedPayPalAddressOptionExists = $storedPayPalAddressOption.length;\r\n\r\n if (billingAddressAsString !== '') {\r\n if (storedPayPalAddressOptionExists) {\r\n $storedPayPalAddressOption.text(billingAddressAsString);\r\n $storedPayPalAddressOption.prop('selected', true);\r\n } else {\r\n $('#billingAddressSelector').append('');\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Returns the matching address ID or UUID for a billing address\r\n * @returns {string} Matching address ID\r\n */\r\nfunction getMatchingBillingAddressId() {\r\n var matchingBillingAddressId;\r\n\r\n $.ajax({\r\n url: document.querySelector('.js_braintree_getOrderInfoUrl').value + '?qwe=2344',\r\n type: 'get',\r\n async: false,\r\n dataType: 'json',\r\n success: function (data) {\r\n if (data.matchingBillingAddressId) {\r\n matchingBillingAddressId = data.matchingBillingAddressId;\r\n } else {\r\n matchingBillingAddressId = false;\r\n }\r\n },\r\n error: function () {\r\n window.location.reload();\r\n }\r\n });\r\n\r\n return matchingBillingAddressId;\r\n}\r\n\r\n/**\r\n * Set default billing address as selected\r\n */\r\nfunction selectDefaultBillingAddressOption() {\r\n var billingAccountsSelector = '#billingAddressSelector';\r\n var $braintreePaypalAccountList = document.querySelector('#braintreePaypalAccountsList');\r\n var matchingBillingAddressId;\r\n\r\n if ($braintreePaypalAccountList) {\r\n matchingBillingAddressId = getMatchingBillingAddressId();\r\n\r\n if (matchingBillingAddressId && matchingBillingAddressId !== '') {\r\n $(`${billingAccountsSelector} option[value=\"${matchingBillingAddressId}\"]`).prop('selected', true);\r\n } else {\r\n // Shows billing address of session account\r\n $(`${billingAccountsSelector} option[value=\"${'manual-entry'}\"]`).prop('selected', true);\r\n }\r\n\r\n $(`${billingAccountsSelector} option[class=\"stored-paypal-address\"]`).remove();\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n displaySelectedStoredBillingAddress,\r\n selectDefaultBillingAddressOption\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Error Handling constructor\r\n * @param {Object} errorMessages object with error messages\r\n */\r\nfunction ErrorHandlingBaseModel(errorMessages) {\r\n this.errorMessages = errorMessages;\r\n}\r\n\r\n/**\r\n * ---- General method which should be used for cases when error came from Braintree ----\r\n * Show error notification by error Object from BT\r\n * @param {Object} error error object from Bt\r\n */\r\nErrorHandlingBaseModel.prototype.showErrorByObject = function (error) {\r\n var msg = error.message;\r\n var code = error.code;\r\n var errorMessage = this.errorMessages[code] || msg || this.errorMessages.CLIENT_GATEWAY_NETWORK;\r\n\r\n this.createErrorNotification(errorMessage);\r\n};\r\n\r\n/**\r\n * ---- General method which should be used for cases when error came from Braintree ----\r\n * Show error notification by message\r\n * @param {string} message message to display inside error notification\r\n */\r\nErrorHandlingBaseModel.prototype.showErrorByMessage = function (message) {\r\n this.createErrorNotification(message);\r\n};\r\n\r\n/**\r\n * ---- Error container which will be used on Account and PDP ----\r\n * ---- For all other cases this method will be overwritten by corresponding one ----\r\n *\r\n * Method responsible for Error Notification generation\r\n * @param {string} message message to display inside error notification\r\n */\r\nErrorHandlingBaseModel.prototype.createErrorNotification = function (message) {\r\n var $errorContainer = $('.error-messaging');\r\n\r\n var errorHtml = '
' +\r\n '' + message + '
';\r\n\r\n $errorContainer.append(errorHtml);\r\n $errorContainer.show();\r\n window.scrollTo(0, 0);\r\n};\r\n\r\n/**\r\n * ---- Method which should hide error container and make it empty. On Account and PDP we use this one ----\r\n * ---- For all other cases this method will be overwritten by corresponding one ----\r\n *\r\n * Hide error notification\r\n */\r\nErrorHandlingBaseModel.prototype.hideError = function () {\r\n var $errorContainer = $('.error-messaging');\r\n\r\n $errorContainer.hide();\r\n $errorContainer.empty();\r\n};\r\n\r\n/**\r\n * Show \"Billing Address is not Supported\" error notification\r\n */\r\nErrorHandlingBaseModel.prototype.showBillingAddressIsNotSupported = function () {\r\n this.showErrorByMessage(this.errorMessages.PAYPAL_BILLING_ADDRESS_NOT_SUPPORTED);\r\n};\r\n\r\nmodule.exports = ErrorHandlingBaseModel;\r\n","'use strict';\r\n\r\nvar ErrorHandlingBaseModel = require('./errorHandlingBaseModel');\r\n\r\n/**\r\n * Error Handling Cart model constructor\r\n * @param {Object} errorMessages Object with error messages\r\n */\r\nfunction ErrorHandlingCartModel(errorMessages) {\r\n ErrorHandlingBaseModel.call(this, errorMessages);\r\n\r\n this.$errorContainer = $('.cart-error-messaging');\r\n this.errorMessages = errorMessages;\r\n}\r\n\r\n/**\r\n * ES5 inheritance\r\n */\r\nErrorHandlingCartModel.prototype = Object.create(ErrorHandlingBaseModel.prototype);\r\n\r\n// See corresponding method inside \"ErrorHandlingBaseModel\" model\r\nErrorHandlingCartModel.prototype.createErrorNotification = function (message) {\r\n $('.checkout-btn').addClass('disabled');\r\n this.$errorContainer.append(\r\n `
\r\n \r\n ${message}\r\n
`\r\n );\r\n\r\n this.$errorContainer.show();\r\n window.scrollTo(0, 0);\r\n};\r\n\r\n// See corresponding method inside \"ErrorHandlingBaseModel\" model\r\nErrorHandlingCartModel.prototype.hideError = function () {\r\n this.$errorContainer.hide();\r\n this.$errorContainer.empty();\r\n};\r\n\r\n/**\r\n * Show \"Zero Amount\" error on Cart page\r\n */\r\nErrorHandlingCartModel.prototype.showZeroAmountOnCart = function () {\r\n this.showErrorByMessage(this.errorMessages.CUSTOM_PAYPAL_ZERO_AMOUNT_ERROR);\r\n};\r\n\r\n\r\nmodule.exports = ErrorHandlingCartModel;\r\n","'use strict';\r\n\r\nvar ErrorHandlingBaseModel = require('./errorHandlingBaseModel');\r\n\r\n/**\r\n * Error Handling Checkout model constructor\r\n * @param {Object} errorMessages object with error messages\r\n */\r\nfunction ErrorHandlingCheckoutModel(errorMessages) {\r\n ErrorHandlingBaseModel.call(this, errorMessages);\r\n\r\n this.$topErrorMessageText = document.querySelector('.error-message-text');\r\n this.$topErrorMessageWrapper = document.querySelector('.error-message');\r\n\r\n this.errorMessages = errorMessages;\r\n}\r\n\r\n/**\r\n * ES5 inheritance\r\n */\r\nErrorHandlingCheckoutModel.prototype = Object.create(ErrorHandlingBaseModel.prototype);\r\n\r\n// See corresponding method inside \"ErrorHandlingBaseModel\" model\r\nErrorHandlingCheckoutModel.prototype.hideError = function () {\r\n this.$topErrorMessageWrapper.style.display = 'none';\r\n this.$topErrorMessageText.innerHTML = '';\r\n};\r\n\r\n// See corresponding method inside \"ErrorHandlingBaseModel\" model\r\nErrorHandlingCheckoutModel.prototype.createErrorNotification = function (message) {\r\n this.$topErrorMessageText.textContent = '';\r\n this.$topErrorMessageText.append(message);\r\n\r\n this.$topErrorMessageWrapper.style.display = 'block';\r\n window.scrollTo(0, 0);\r\n};\r\n\r\n/**\r\n * Show \"Billing Address is not Supported\" error\r\n */\r\nErrorHandlingCheckoutModel.prototype.showBillingAddressIsNotSupported = function () {\r\n this.showErrorByMessage(this.errorMessages.PAYPAL_BILLING_ADDRESS_NOT_SUPPORTED);\r\n};\r\n\r\n/**\r\n * Show \"Zero Amount\" on the Checkout Page error\r\n */\r\nErrorHandlingCheckoutModel.prototype.showZeroAmountOnCheckout = function () {\r\n this.showErrorByMessage(this.errorMessages.CUSTOM_PAYPAL_ZERO_AMOUNT_ERROR);\r\n};\r\n\r\n\r\nmodule.exports = ErrorHandlingCheckoutModel;\r\n","'use strict';\r\n\r\nvar ErrorHandlingBaseModel = require('./errorHandlingBaseModel');\r\n\r\n/**\r\n * Error Handling MiniCart model constructor\r\n * @param {Object} errorMessages object with error messages\r\n */\r\nfunction ErrorHandlingMiniCartModel(errorMessages) {\r\n ErrorHandlingBaseModel.call(this, errorMessages);\r\n\r\n this.$errorContainer = $('.minicart-error');\r\n this.errorMessages = errorMessages;\r\n}\r\n\r\n/**\r\n * ES5 inheritance\r\n */\r\nErrorHandlingMiniCartModel.prototype = Object.create(ErrorHandlingBaseModel.prototype);\r\n\r\n// See corresponding method inside \"ErrorHandlingBaseModel\" model\r\nErrorHandlingMiniCartModel.prototype.createErrorNotification = function (message) {\r\n $('.checkout-btn').addClass('disabled');\r\n this.$errorContainer.append(\r\n `
\r\n \r\n ${message}\r\n
`\r\n );\r\n\r\n this.$errorContainer.show();\r\n};\r\n\r\n// See corresponding method inside \"ErrorHandlingBaseModel\" model\r\nErrorHandlingMiniCartModel.prototype.hideError = function () {\r\n this.$errorContainer.hide();\r\n this.$errorContainer.empty();\r\n};\r\n\r\nmodule.exports = ErrorHandlingMiniCartModel;\r\n","'use strict';\r\n\r\nvar helper = require('../../helper');\r\n\r\n/**\r\n * Save PayPal account to DW\r\n * @param {string} addPayPalAccountUrl add PayPal account url\r\n * @param {FormData} paymentFormData payment FormData\r\n * @returns {Promise} response from server\r\n */\r\nfunction savePayPalAccount(addPayPalAccountUrl, paymentFormData) {\r\n return $.ajax({\r\n type: 'POST',\r\n url: addPayPalAccountUrl,\r\n data: paymentFormData,\r\n contentType: false,\r\n processData: false\r\n });\r\n}\r\n\r\n/**\r\n * Render PayPal account\r\n * @param {string} renderAccountsUrl render PayPal accounts URL\r\n * @returns {Promise} promise with html of PayPal account list\r\n */\r\nfunction renderPayPalAccounts(renderAccountsUrl) {\r\n return $.get(renderAccountsUrl);\r\n}\r\n\r\n/**\r\n * Hide PayPal account button\r\n */\r\nfunction hidePaypalAccountBtn() {\r\n var $addNewPaypalAccountBtn = document.querySelector('.add-paypal-account');\r\n var $paypalAccountButtonWrapper = document.querySelector('.js_braintree_accountPaypalButton_wrapper');\r\n\r\n // Display add new paypal account button\r\n $addNewPaypalAccountBtn.style.display = 'block';\r\n // Hide PayPal Account button\r\n $paypalAccountButtonWrapper.style.display = 'none';\r\n}\r\n\r\n/**\r\n * Add PayPal accounts html template to the DOM\r\n * @param {string} accountListTemplate html template with PayPal account list\r\n */\r\nfunction addPayPalAccountsToTheTemplate(accountListTemplate) {\r\n var $payPalAccountsContainer = document.querySelector('.paypal-accounts');\r\n\r\n $payPalAccountsContainer.innerHTML = accountListTemplate;\r\n}\r\n\r\n/**\r\n * Trigger cart:updates event\r\n */\r\nfunction throwCartUpade() {\r\n $('body').trigger('cart:update');\r\n}\r\n\r\n/**\r\n * Init Remove PayPal Account button listner\r\n */\r\nfunction initRemovePayPalAccountButtonsListners() {\r\n var $allRemovePayPalAccountButtons = document.querySelectorAll('.paypal-accounts .remove-bt-payment');\r\n\r\n $allRemovePayPalAccountButtons.forEach(function (removePayPalAccountButton) {\r\n removePayPalAccountButton.addEventListener('click', helper.removeBtPayment);\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n savePayPalAccount,\r\n renderPayPalAccounts,\r\n hidePaypalAccountBtn,\r\n addPayPalAccountsToTheTemplate,\r\n throwCartUpade,\r\n initRemovePayPalAccountButtonsListners\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Show PayPal Account button\r\n */\r\nfunction showPayPalAccountBtn() {\r\n var $addPaypalAccountBtn = document.querySelector('.add-paypal-account');\r\n var $paypalAccountWrapper = document.querySelector('.js_braintree_accountPaypalButton_wrapper');\r\n\r\n $addPaypalAccountBtn.style.display = 'none';\r\n $paypalAccountWrapper.style.display = 'block';\r\n}\r\n\r\nmodule.exports = {\r\n showPayPalAccountBtn\r\n};\r\n","\r\n'use strict';\r\n\r\nvar helper = require('../../helper');\r\n\r\n/**\r\n * Store payment as session payment\r\n * @param {string} nonce Nonce\r\n * @param {string} sessionAccountEmail Session account email\r\n */\r\nfunction storePaymentAsSessionPayment(nonce, sessionAccountEmail) {\r\n var $accountListBlock = document.querySelector('.form-group.braintree_used_paypal_account');\r\n var $braintreePaypalNonceInput = document.querySelector('input[name=braintreePaypalNonce]');\r\n var $sessionPyapalAccount = document.querySelector('#braintreePaypalAccount');\r\n\r\n if ($braintreePaypalNonceInput) {\r\n $braintreePaypalNonceInput.value = nonce;\r\n }\r\n\r\n $sessionPyapalAccount.setAttribute('data-session-account', 'true');\r\n $sessionPyapalAccount.setAttribute('data-nonce', nonce);\r\n $sessionPyapalAccount.text = sessionAccountEmail;\r\n $sessionPyapalAccount.classList.remove('used-paypal-account-hide');\r\n\r\n // Show account list block\r\n $accountListBlock.classList.remove('used-paypal-account-hide');\r\n}\r\n\r\n/**\r\n * Select session paypal accounts.\r\n * Every time when buyer adds new account, the New Account option is selected (doesn't matter logged in buyer or not)\r\n */\r\nfunction setSessionAccountOptionDefault() {\r\n var $savedPayPalAccountList = document.querySelector('#braintreePaypalAccountsList');\r\n var $sessionPyapalAccount = document.querySelector('#braintreePaypalAccount');\r\n\r\n Array.prototype.forEach.call($savedPayPalAccountList, function (element) {\r\n element.removeAttribute('selected');\r\n });\r\n\r\n $sessionPyapalAccount.selected = true;\r\n}\r\n\r\n/**\r\n * Get stored account by session account email\r\n * @returns {Object} js container with stored account\r\n */\r\nfunction getStoredAccountBySesionAccountEmail() {\r\n var sessionPaypalAccount = document.getElementById('braintreePaypalAccount');\r\n var paypalAccountsList = document.querySelector('#braintreePaypalAccountsList');\r\n var sessionEmail = sessionPaypalAccount.value || null;\r\n\r\n return Array.apply(null, paypalAccountsList.options).find(function (el) {\r\n return el.getAttribute('data-id') && sessionEmail && sessionEmail === el.text;\r\n });\r\n}\r\n\r\n/**\r\n * Fill DW billing form with billing address from Bt\r\n * @param {Object} braintreeAddress Billing address from BT\r\n * @param {Object} btDetails Details from BT\r\n * @returns {Object} Object with billing form fields and it's values\r\n */\r\nfunction mapBraintreeWithDwBillingAddress(braintreeAddress, btDetails) {\r\n var $btPaymentMethodWrapper = document.querySelector('.braintree-billing-payment-wrap');\r\n var dwBillingFormFieldNames = JSON.parse($btPaymentMethodWrapper.getAttribute('data-billing-form-fields-names'));\r\n\r\n dwBillingFormFieldNames.dwfrm_billing_addressFields_firstName = btDetails.firstName;\r\n dwBillingFormFieldNames.dwfrm_billing_addressFields_lastName = btDetails.lastName;\r\n dwBillingFormFieldNames.dwfrm_billing_addressFields_address1 = braintreeAddress.line1;\r\n dwBillingFormFieldNames.dwfrm_billing_addressFields_address2 = braintreeAddress.line2;\r\n dwBillingFormFieldNames.dwfrm_billing_addressFields_city = braintreeAddress.city;\r\n dwBillingFormFieldNames.dwfrm_billing_addressFields_postalCode = decodeURIComponent(braintreeAddress.postalCode);\r\n dwBillingFormFieldNames.dwfrm_billing_addressFields_states_stateCode = braintreeAddress.state;\r\n dwBillingFormFieldNames.dwfrm_billing_addressFields_country = braintreeAddress.countryCode;\r\n dwBillingFormFieldNames.dwfrm_billing_contactInfoFields_phone = btDetails.phone;\r\n\r\n return dwBillingFormFieldNames;\r\n}\r\n\r\n/**\r\n * Create billing address data\r\n * @param {Object} payloadDetails BT paymload details\r\n * @returns {Object} Mapped billing data\r\n */\r\nfunction createBillingAddressData(payloadDetails) {\r\n var billingAddress = payloadDetails.billingAddress;\r\n\r\n billingAddress.firstName = payloadDetails.firstName;\r\n billingAddress.lastName = payloadDetails.lastName;\r\n billingAddress.email = payloadDetails.email;\r\n billingAddress.phone = payloadDetails.phone;\r\n billingAddress.countryCodeAlpha2 = billingAddress.countryCode;\r\n billingAddress.streetAddress = billingAddress.line1;\r\n billingAddress.extendedAddress = billingAddress.line2;\r\n billingAddress.locality = billingAddress.city;\r\n billingAddress.region = billingAddress.state;\r\n\r\n return billingAddress;\r\n}\r\n\r\n/**\r\n * Copy PayPal billing address to DW billing form\r\n * @param {Object} braintreeBillingAddress Billing address from BT\r\n * @param {Object} btDetails Details from bt\r\n */\r\nfunction copyPayPalBillingAddressToDw(braintreeBillingAddress, btDetails) {\r\n var $braintreePaypalBillingAddressInput = document.querySelector('input[name=braintreePaypalBillingAddress]');\r\n var paypalBillingData = mapBraintreeWithDwBillingAddress(braintreeBillingAddress, btDetails);\r\n\r\n // Store billing address inside hidden input in order to send it to the server and\r\n // proccess with billing address server logic (the logic - billing address can't be overrided by\r\n // buyer. Only PayPal billing address should be used)\r\n $braintreePaypalBillingAddressInput.value = JSON.stringify(paypalBillingData);\r\n helper.updateBillingFormValues(paypalBillingData);\r\n}\r\n\r\n/**\r\n * Create billig address FormData\r\n * @param {Object} paypalBillingFormFields PayPal billing form fields\r\n * @param {Object} billingAddressData Billing address data\r\n * @returns {FormData} Billing FormData\r\n */\r\nfunction createBillingAddressFormData(paypalBillingFormFields, billingAddressData) {\r\n var billingAddressFormData;\r\n\r\n billingAddressFormData = helper.createPaymentFormData(paypalBillingFormFields, {\r\n firstName: billingAddressData.firstName,\r\n lastName: billingAddressData.lastName,\r\n address1: billingAddressData.streetAddress,\r\n address2: billingAddressData.extendedAddress || '',\r\n city: billingAddressData.locality,\r\n postalCode: decodeURIComponent(billingAddressData.postalCode),\r\n stateCode: billingAddressData.state,\r\n country: billingAddressData.countryCodeAlpha2,\r\n email: billingAddressData.email,\r\n phone: billingAddressData.phone,\r\n paymentMethod: 'PayPal'\r\n });\r\n\r\n return billingAddressFormData;\r\n}\r\n\r\n/**\r\n * Fill PayPal payment fields with payment data\r\n * @param {Object} btDetails Details from BT\r\n */\r\nfunction fillPayPalPaymentFields(btDetails) {\r\n var $braintreePaypalEmailInput = document.querySelector('#braintreePaypalEmail');\r\n var $sessionPaypalAccount = document.querySelector('#braintreePaypalAccount');\r\n var btEmail = btDetails.email;\r\n\r\n $braintreePaypalEmailInput.value = btEmail;\r\n $sessionPaypalAccount.value = btEmail;\r\n $sessionPaypalAccount.text = btEmail;\r\n\r\n // Hide Continue button\r\n helper.continueButtonToggle(false);\r\n}\r\n\r\n/**\r\n * Fill fraud data input with fraud data\r\n * @param {Object} data Fraud data\r\n */\r\nfunction fillFraudDataInput(data) {\r\n var $braintreePaypalRiskDataInput = document.querySelector('input[name=braintreePaypalRiskData]');\r\n\r\n $braintreePaypalRiskDataInput.value = data.deviceData;\r\n}\r\n\r\n\r\n/**\r\n * Append CSRF token to the billing FormData\r\n * @param {FormData} formData Billing form data\r\n * @param {Object} $csrfToken CSRF token js container\r\n */\r\nfunction appendCsrfTokenToFormData(formData, $csrfToken) {\r\n formData.append($csrfToken.name, $csrfToken.value);\r\n}\r\n\r\n/**\r\n * Append funding source to the billing FormData\r\n * @param {FormData} formData Billing form data\r\n * @param {string} fundingSource funding source\r\n */\r\nfunction appendBraintreePaypalFundingSourceToFormData(formData, fundingSource) {\r\n formData.append('braintreePaypalFundingSource', fundingSource);\r\n}\r\n\r\n/**\r\n * Append email to the billing FormData\r\n * @param {FormData} formData billing form data\r\n * @param {string} email user email\r\n */\r\nfunction appendEmailAsStringToFormData(formData, email) {\r\n formData.append('braintreePaypalEmail', email);\r\n}\r\n\r\n/**\r\n * Append fraud data to the FormData\r\n * @param {FormData} billingFromData billing FormData\r\n * @param {Object} fraudData fraud data\r\n */\r\nfunction appendFraudDataToFormData(billingFromData, fraudData) {\r\n billingFromData.append('braintreePaypalRiskData', fraudData);\r\n}\r\n\r\n/**\r\n * Append billing address data as a string to the FromData\r\n * @param {FormData} billingFromData Billing FormData\r\n * @param {Object} billingData Billing data\r\n */\r\nfunction appendBillingAddressAsStringToFormData(billingFromData, billingData) {\r\n billingFromData.append('braintreePaypalBillingAddress', JSON.stringify(billingData));\r\n}\r\n\r\n/**\r\n * Append BT payment fields to the FromData\r\n * @param {FormData} billingFromData Billing FormData\r\n * @param {Object} payload payload from BT\r\n */\r\nfunction appendBtPaymentFieldsToFormData(billingFromData, payload) {\r\n billingFromData.append('braintreePaypalNonce', payload.nonce);\r\n billingFromData.append('braintreeSavePaypalAccount', true);\r\n}\r\n\r\n/**\r\n * Append params to the URL\r\n * @param {string} url To which append params\r\n * @param {Object} param Which should be appended to the URL\r\n * @returns {string} Final URL with passed params\r\n */\r\nfunction appendToUrl(url, param) {\r\n var newUrl = url;\r\n newUrl += (newUrl.indexOf('?') !== -1 ? '&' : '?') + Object.keys(param).map(function (key) {\r\n return key + '=' + encodeURIComponent(param[key]);\r\n }).join('&');\r\n\r\n return newUrl;\r\n}\r\n\r\nmodule.exports = {\r\n storePaymentAsSessionPayment,\r\n setSessionAccountOptionDefault,\r\n getStoredAccountBySesionAccountEmail,\r\n copyPayPalBillingAddressToDw,\r\n createBillingAddressFormData,\r\n createBillingAddressData,\r\n fillPayPalPaymentFields,\r\n fillFraudDataInput,\r\n\r\n appendCsrfTokenToFormData,\r\n appendFraudDataToFormData,\r\n appendBillingAddressAsStringToFormData,\r\n appendBtPaymentFieldsToFormData,\r\n appendEmailAsStringToFormData,\r\n appendBraintreePaypalFundingSourceToFormData,\r\n\r\n // Utils\r\n appendToUrl\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Hide PayPal button\r\n */\r\nfunction hidePayPalButtons() {\r\n var payPalButtonsContainer = document.querySelector('.js_braintree_paypal_billing_button');\r\n\r\n payPalButtonsContainer.style.display = 'none';\r\n}\r\n\r\n/* -------------------------------------------- Account\\Options Manipulations -------------------------------------------- */\r\n\r\n/**\r\n * Hide account option from account dropdown\r\n * @param {Object} $accountOption vanilla js account option container\r\n */\r\nfunction hideAccount($accountOption) {\r\n $accountOption.style.display = 'none';\r\n}\r\n\r\n/**\r\n * Hide Save New Account checkbox with corresponding block\r\n */\r\nfunction hideSaveNewAccountContainer() {\r\n var savePaypalAccountCheckbox = document.getElementById('braintreeSavePaypalAccount');\r\n var savePaypalAccountContainer = document.querySelector('#braintreeSavePaypalAccountContainer');\r\n\r\n savePaypalAccountCheckbox.value = false;\r\n savePaypalAccountContainer.style.display = 'none';\r\n}\r\n\r\n/**\r\n * Make all hidden stored paypal accounts visible for buyer\r\n */\r\nfunction displayAllStoredAccounts() {\r\n var braintreePaypalAccountsList = document.querySelector('#braintreePaypalAccountsList');\r\n\r\n Array.prototype.forEach.call(braintreePaypalAccountsList, function (el) {\r\n if (el.style.display === 'none') {\r\n el.style.display = 'block';\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Hides 'Save PayPal Account' checkbox on the Billing Page\r\n */\r\nfunction hideSavePayPalAccountBlock() {\r\n var $savePaypalAccountCountainer = document.querySelector('#braintreeSavePaypalAccountContainer');\r\n\r\n $savePaypalAccountCountainer.style.display = 'none';\r\n}\r\n\r\n/**\r\n * Function which store billing data on session payment option level\r\n * @param {Object} btPayloadDetails braintree payload details\r\n */\r\nfunction addBillingAddressOnPaymentOptionLevel(btPayloadDetails) {\r\n var $sessionPyapalAccount = document.querySelector('#braintreePaypalAccount');\r\n var btBillingAddress = btPayloadDetails.billingAddress;\r\n\r\n $sessionPyapalAccount.setAttribute('data-billing-address', JSON.stringify({\r\n firstName: btPayloadDetails.firstName,\r\n lastName: btPayloadDetails.lastName,\r\n line1: btBillingAddress.line1,\r\n city: btBillingAddress.city,\r\n state: btBillingAddress.state,\r\n postalCode: decodeURIComponent(btBillingAddress.postalCode)\r\n }));\r\n}\r\n\r\nmodule.exports = {\r\n hidePayPalButtons,\r\n // Account\\Options Manipulations\r\n hideAccount,\r\n hideSaveNewAccountContainer,\r\n displayAllStoredAccounts,\r\n hideSavePayPalAccountBlock,\r\n addBillingAddressOnPaymentOptionLevel\r\n};\r\n","'use strict';\r\n\r\nvar helper = require('../../helper');\r\n\r\n/**\r\n * Create shipping address data\r\n * @param {Object} payloadDetails BT payload details\r\n * @returns {Object} Shipping address\r\n */\r\nfunction createShippingAddressData(payloadDetails) {\r\n var shippingAddressPayPalData = payloadDetails.shippingAddress;\r\n var shippingAddressData = {\r\n line1: shippingAddressPayPalData.line1,\r\n streetAddress: shippingAddressPayPalData.line1,\r\n line2: shippingAddressPayPalData.line2,\r\n extendedAddress: shippingAddressPayPalData.line2,\r\n city: shippingAddressPayPalData.city,\r\n locality: shippingAddressPayPalData.city,\r\n state: shippingAddressPayPalData.state,\r\n region: shippingAddressPayPalData.state,\r\n countryCode: shippingAddressPayPalData.countryCode,\r\n countryCodeAlpha2: shippingAddressPayPalData.countryCode,\r\n postalCode: decodeURIComponent(shippingAddressPayPalData.postalCode),\r\n email: payloadDetails.email,\r\n phone: payloadDetails.phone\r\n };\r\n\r\n if (!shippingAddressPayPalData.recipientName) {\r\n shippingAddressData.firstName = payloadDetails.firstName;\r\n shippingAddressData.lastName = payloadDetails.lastName;\r\n shippingAddressData.recipientName = payloadDetails.firstName + ' ' + payloadDetails.lastName;\r\n } else {\r\n shippingAddressData.recipientName = shippingAddressPayPalData.recipientName;\r\n }\r\n\r\n return shippingAddressData;\r\n}\r\n\r\n/**\r\n * Append Shipping data as a String to the FormData\r\n * @param {FormData} billingFromData Billing FormData\r\n * @param {Object} shippingData Shipping data\r\n */\r\nfunction appendShippingDataAsStringToFormData(billingFromData, shippingData) {\r\n billingFromData.append('braintreePaypalShippingAddress', JSON.stringify(shippingData));\r\n}\r\n\r\n/**\r\n * Creates customer form with email to submit it to CheckoutServices-SubmitCustomer endpoint\r\n * @param {string} email Email from payment method's response\r\n * @returns {Object} Customer form data\r\n */\r\nfunction createCustomerFormData(email) {\r\n var data = {\r\n email: email\r\n };\r\n\r\n var csrfToken = document.querySelector('.braintree-cart-paypal-buttons-wrap #csrf_token');\r\n var checkoutCustomerFormFields = document.querySelector('.braintree-cart-paypal-buttons-wrap').getAttribute('data-checkout-customer-form-fields');\r\n var customerFormData = helper.createPaymentFormData(checkoutCustomerFormFields, data);\r\n\r\n customerFormData.append(csrfToken.name, csrfToken.value);\r\n\r\n return customerFormData;\r\n}\r\n\r\n/**\r\n * Submits customer form with email to CheckoutServices-SubmitCustomer endpoint\r\n * Call is triggered only in case if email in basket is empty (guest first checkout from cart)\r\n * @param {string} email Email from payment method's response\r\n * @returns {Ajax} Ajax call to CheckoutServices-SubmitCustomer endpoint\r\n */\r\nfunction submitCustomerForm(email) {\r\n var paypalButtonsWrapper = document.querySelector('.braintree-cart-paypal-buttons-wrap');\r\n var isCustomerEmailEmpty = JSON.parse(paypalButtonsWrapper.getAttribute('data-is-customer-email-empty'));\r\n // Could be true only in case if email in basket is empty (first guest checkout from cart)\r\n if (isCustomerEmailEmpty) {\r\n var submitCustomerUrl = paypalButtonsWrapper.getAttribute('data-submit-customer-url');\r\n var customerFormData = createCustomerFormData(email);\r\n\r\n return $.ajax({\r\n type: 'POST',\r\n url: submitCustomerUrl,\r\n data: customerFormData,\r\n contentType: false,\r\n processData: false\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Returns customer shipping address for 'createPayment' method of brainree SDK\r\n * @param {string} buttonSelector Class name of selector\r\n * @returns {Object} Shipping address object\r\n */\r\nfunction getSavedPaypalAddress(buttonSelector) {\r\n var $paypalButton = document.querySelector(buttonSelector);\r\n var payPalAccountData = JSON.parse($paypalButton.getAttribute('data-dafault-paypal-address'));\r\n\r\n return payPalAccountData;\r\n}\r\n\r\nmodule.exports = {\r\n createShippingAddressData,\r\n appendShippingDataAsStringToFormData,\r\n submitCustomerForm,\r\n getSavedPaypalAddress\r\n};\r\n","'use strict';\r\n\r\nvar billingFormHelper = require('./payPalBillingFormHelperGlobal');\r\nvar paypalCheckoutModelHelper = require('./payPalCheckoutModelHelper');\r\n\r\n/**\r\n * Is vault mode enabled\r\n * @param {Object} $paypalButton PayPal button js container\r\n * @returns {boolean} 'true' in case if vault mode is enabled\r\n */\r\nfunction isVaultModeEnabled($paypalButton) {\r\n var payPalConfigurations = JSON.parse($paypalButton.getAttribute('data-braintree-config'));\r\n var isVaultMode = payPalConfigurations.vaultModeEnabled;\r\n\r\n return isVaultMode;\r\n}\r\n\r\n/**\r\n * Returns whether 'order' intent type is enbaled\r\n * @param {Object} $paypalButton PayPal button js container\r\n * @returns {boolean} true/false\r\n */\r\nfunction isOrderIntentEnabled($paypalButton) {\r\n var payPalConfigurations = JSON.parse($paypalButton.getAttribute('data-braintree-config'));\r\n\r\n return payPalConfigurations.options.intent === 'order';\r\n}\r\n\r\n/**\r\n * Function which return account type.\r\n * Possible values are: new account, session account, stored account\r\n * @param {Object} $payPalAccountList PayPal account list js container\r\n * @param {Object} constantList Object with paypal account constants\r\n * @returns {string} Account type\r\n */\r\nfunction getAccountType($payPalAccountList, constantList) {\r\n var accountType;\r\n\r\n if ($payPalAccountList.value === 'newaccount') {\r\n accountType = constantList.NEW_ACCOUNT;\r\n } else if ($payPalAccountList.selectedOptions[0].id === 'braintreePaypalAccount') {\r\n accountType = constantList.SESSION_ACCOUNT;\r\n } else {\r\n accountType = constantList.STORED_ACCOUNT;\r\n }\r\n\r\n return accountType;\r\n}\r\n\r\n/**\r\n * Set nonce in to corresponding hidden input\r\n * @param {Object} $braintreePayPalNonce BT input nonce js container\r\n * @param {string} nonceValue Nonce\r\n */\r\nfunction setNonceInputValue($braintreePayPalNonce, nonceValue) {\r\n $braintreePayPalNonce.value = nonceValue;\r\n}\r\n\r\n/**\r\n * Hide save PayPal account block\r\n * @param {Object} $savePaypalAccountCountainer Save PayPal account js container\r\n */\r\nfunction hideSavePayPalAccountBlock($savePaypalAccountCountainer) {\r\n $savePaypalAccountCountainer.style.display = 'none';\r\n}\r\n\r\n/**\r\n * Display save PayPal account block\r\n * @param {Object} $savePaypalAccountCountainer Save PayPal account js container\r\n */\r\nfunction displaySavePayPalAccountBlock($savePaypalAccountCountainer) {\r\n $savePaypalAccountCountainer.style.display = 'block';\r\n}\r\n\r\n/* --------------- PayPal button manipulations --------------- */\r\n/**\r\n * Show PayPal button\r\n * @param {Object} $paypalButton PayPal button js container\r\n */\r\nfunction displayPayPalButton($paypalButton) {\r\n $paypalButton.style.display = '';\r\n}\r\n\r\n/**\r\n * Hide PayPal button\r\n * @param {Object} $paypalButton PayPal button js container\r\n */\r\nfunction hidePayPalButon($paypalButton) {\r\n $paypalButton.style.display = 'none';\r\n}\r\n\r\n/* --------------- Continue button manipulations --------------- */\r\n/**\r\n * Display Continue button\r\n * @param {Object} $continueButton Continue button js container\r\n */\r\nfunction displayContinueButton($continueButton) {\r\n $continueButton.style.display = '';\r\n}\r\n\r\n/**\r\n * Hide Continue button\r\n * @param {Object} $continueButton Continue button js container\r\n */\r\nfunction hideContinueButon($continueButton) {\r\n $continueButton.style.display = 'none';\r\n}\r\n\r\n/**\r\n * Return \"true\" if buyer is authenticated\r\n * Needed on the Checkout Page only\r\n * @param {Object} $payPalAccountList PayPal account list js container\r\n * @returns {boolean} \"true\" in case if buyer is authenticated\r\n */\r\nfunction isBuyerAuthenticated($payPalAccountList) {\r\n return JSON.parse($payPalAccountList.dataset.customerAuthenticated);\r\n}\r\n\r\n/**\r\n * Select PayPal account tab\r\n * @param {Object} $payPalTab PayPal payment tab js container\r\n */\r\nfunction selectPayPalCheckoutTab($payPalTab) {\r\n $payPalTab.click();\r\n}\r\n\r\n/**\r\n * Set email in to corresponding input\r\n * @param {Object} $braintreePaypalEmail BT PayPal email input js container\r\n * @param {string} email Email\r\n */\r\nfunction setBraintreePayPalEmailInput($braintreePaypalEmail, email) {\r\n $braintreePaypalEmail.value = email;\r\n}\r\n\r\n/**\r\n * Returns whether the new PayPal account option is selected\r\n * @returns {boolean} Whether the new PayPal account option is selected\r\n */\r\nfunction isNewPayPalAccountOptionSelected() {\r\n var $payPalAccountList = document.querySelector('#braintreePaypalAccountsList');\r\n\r\n if ($payPalAccountList) {\r\n return $payPalAccountList.value === 'newaccount';\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Handles showing stored PP account in dropdown\r\n * Checks whether buyer has proceeded with the same email which is already stored\r\n * Triggered while tokenization callback and page reload\r\n * @param {boolean} buyerAuthenticated Whether customer is authenticated\r\n */\r\nfunction handleStoredAccountsShowing(buyerAuthenticated) {\r\n if (!buyerAuthenticated) {\r\n return;\r\n }\r\n\r\n // Get stored account by session account email\r\n var $storedAccountOptionWithSameEmail = billingFormHelper.getStoredAccountBySesionAccountEmail();\r\n\r\n // The buyer added an account with the same email address already in the buyer's wallet\r\n if ($storedAccountOptionWithSameEmail) {\r\n // Hide stored account with same email\r\n paypalCheckoutModelHelper.hideAccount($storedAccountOptionWithSameEmail);\r\n } else {\r\n // We need this to undo what was done by \"if\" statement\r\n paypalCheckoutModelHelper.displayAllStoredAccounts();\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n isVaultModeEnabled,\r\n getAccountType,\r\n setNonceInputValue,\r\n hideSavePayPalAccountBlock,\r\n displaySavePayPalAccountBlock,\r\n displayPayPalButton,\r\n hidePayPalButon,\r\n displayContinueButton,\r\n hideContinueButon,\r\n isBuyerAuthenticated,\r\n selectPayPalCheckoutTab,\r\n setBraintreePayPalEmailInput,\r\n isNewPayPalAccountOptionSelected,\r\n handleStoredAccountsShowing,\r\n isOrderIntentEnabled\r\n};\r\n","'use strict';\r\n\r\nvar billingFormHelper = require('./payPalBillingFormHelperGlobal');\r\n\r\n/**\r\n * Remove product from Cart\r\n * @param {string} removeFromCartUrl Remove from Cart URL\r\n * @param {Object} productRepresentationObj Object with represent the product to remove from Cart\r\n */\r\nfunction removeProductFromCart(removeFromCartUrl, productRepresentationObj) {\r\n $.ajax({\r\n url: billingFormHelper.appendToUrl(removeFromCartUrl, productRepresentationObj),\r\n type: 'get',\r\n dataType: 'json'\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n removeProductFromCart\r\n};\r\n","\r\n'use strict';\r\n\r\n/**\r\n * Add product to the Cart\r\n * @returns {Object} Response data from DW\r\n */\r\nfunction addProductToCart() {\r\n var $bundleItem = $('.bundle-item');\r\n\r\n function getOptions($productContainer) {\r\n var options = $productContainer\r\n .find('.product-option')\r\n .map(function () {\r\n var $elOption = $(this).find('.options-select');\r\n var urlValue = $elOption.val();\r\n var selectedValueId = $elOption.find('option[value=\"' + urlValue + '\"]')\r\n .data('value-id');\r\n return {\r\n optionId: $(this).data('option-id'),\r\n selectedValueId: selectedValueId\r\n };\r\n }).toArray();\r\n\r\n return JSON.stringify(options);\r\n }\r\n\r\n var pid = $('.product-detail:not(.bundle-item)').data('pid');\r\n var $btn = $('.braintree_pdp_button');\r\n var $productContainer = $btn.closest('.product-detail');\r\n\r\n var form = {\r\n pid: pid,\r\n quantity: $('.quantity-select').val()\r\n };\r\n\r\n if (!$bundleItem.length) {\r\n form.options = getOptions($productContainer);\r\n } else {\r\n var items = $bundleItem.map(function () {\r\n return {\r\n pid: $(this).find('.product-id').text(),\r\n quantity: parseInt($(this).find('label.quantity').data('quantity'), 10)\r\n };\r\n });\r\n form.childProducts = JSON.stringify(items.toArray());\r\n }\r\n\r\n var response = $.ajax({\r\n url: $('.add-to-cart-url').val(),\r\n method: 'POST',\r\n async: false,\r\n data: form\r\n }).responseJSON;\r\n response.pid = pid;\r\n return response;\r\n}\r\n\r\n/**\r\n * Get basket data\r\n * @param {string} url Braintree-GetOrderInfo URL\r\n * @returns {Promise} Promise with response from DW\r\n */\r\nfunction getBasketDataPromise(url) {\r\n return $.ajax({\r\n url: url,\r\n method: 'GET'\r\n });\r\n}\r\n\r\n/**\r\n * Get basket data\r\n * @param {string} url Braintree-GetOrderInfo URL\r\n * @returns {Object} Object with basket data from DW\r\n */\r\nfunction getBasketData(url) {\r\n return $.ajax({\r\n url: url,\r\n method: 'GET',\r\n async: false\r\n }).responseJSON;\r\n}\r\n\r\n/**\r\n * Submit payment (billing) data to the server\r\n * @param {string} submitPaymentUrl Submit payment URL\r\n * @param {FromData} billingFormData Billing Form Data\r\n * @param {string} redirectUrl Redirect URL after succesfull payment data submit\r\n * @param {Object} loader Loader\r\n * @param {Object} ErrorModelInstance Error Model instance\r\n * @returns {Promise} Promise with response result\r\n */\r\nfunction submitPaymentDataToServerPromise(submitPaymentUrl, billingFormData, redirectUrl, loader, ErrorModelInstance) {\r\n return $.ajax({\r\n type: 'POST',\r\n url: submitPaymentUrl,\r\n data: billingFormData,\r\n contentType: false,\r\n processData: false\r\n })\r\n .done(function (data) {\r\n if (data.error) {\r\n var errorMessage = '';\r\n\r\n if (data.fieldErrors.length) {\r\n data.fieldErrors.forEach(function (error, index) {\r\n var keys = Object.keys(error);\r\n if (keys.length) {\r\n errorMessage += `${keys[index].replace('dwfrm_billing_', '').replace('_', ' ')} ${data.fieldErrors[index][keys[index]]}. `;\r\n }\r\n });\r\n ErrorModelInstance.showErrorByMessage(errorMessage);\r\n }\r\n\r\n if (data.serverErrors.length) {\r\n data.serverErrors.forEach(function (error) {\r\n errorMessage += `${error}. `;\r\n });\r\n ErrorModelInstance.showErrorByMessage(errorMessage);\r\n }\r\n\r\n // Usually in case of any errors \"cartError\" will be \"true\"\r\n if (data.cartError) {\r\n window.location.href = data.redirectUrl;\r\n }\r\n loader.hide();\r\n } else {\r\n sessionStorage.setItem('pageState', 'cart');\r\n window.location.href = redirectUrl;\r\n loader.hide();\r\n }\r\n })\r\n .fail(function (err) {\r\n loader.hide();\r\n if (err && err.redirectUrl) {\r\n window.location.href = err.redirectUrl;\r\n }\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n addProductToCart,\r\n getBasketDataPromise,\r\n getBasketData,\r\n submitPaymentDataToServerPromise\r\n};\r\n","'use strict';\r\n\r\nvar helper = require('../../helper');\r\n\r\nvar $btSavePaypalAccountContainer = document.querySelector('#braintreeSavePaypalAccountContainer');\r\nvar $paypalContent = document.querySelector('.js_braintree_paypalContent');\r\nvar $btPayPalBillingButton = document.querySelector('.js_braintree_paypal_billing_button');\r\n\r\n/**\r\n * Hides PayPal Smart Button functionality inside PayPal tab\r\n */\r\nfunction hidePaypalSmartButtonFunctionality() {\r\n $btSavePaypalAccountContainer.style.display = 'none';\r\n $btPayPalBillingButton.style.display = 'none';\r\n $paypalContent.setAttribute('data-paypal-is-hide-continue-button', false);\r\n}\r\n\r\n/**\r\n * Shows PayPal Smart Button functionality inside PayPal tab\r\n */\r\nfunction showPaypalSmartButtonFunctionality() {\r\n $btPayPalBillingButton.style.display = 'block';\r\n $paypalContent.setAttribute('data-paypal-is-hide-continue-button', true);\r\n}\r\n\r\n/**\r\n * Handles a behavior inside PayPal tab, when session PayPal account was deleted\r\n */\r\nfunction handlePaypalTabBehavior() {\r\n var $payPalAccountList = document.querySelector('#braintreePaypalAccountsList');\r\n var $defaultOption = helper.getOptionByDataDefault('#braintreePaypalAccountsList');\r\n var $selectedOption = helper.getSelectedOption($payPalAccountList);\r\n var isSelectedPaypalAccount = $selectedOption.value !== 'newaccount';\r\n var paypalButtonConfigs = JSON.parse($btPayPalBillingButton.getAttribute('data-braintree-config'));\r\n var isChangePmButton = paypalButtonConfigs.changePMButtonEnabled;\r\n\r\n // Case when buyer selected another PM (CC,GP..)\r\n if ($defaultOption && !isSelectedPaypalAccount) {\r\n // Shows ChangePM button if buyer has already saved PP account and ChangePM button is enabled\r\n if (isChangePmButton) {\r\n $btSavePaypalAccountContainer.style.display = 'block';\r\n\r\n showPaypalSmartButtonFunctionality();\r\n // Shows default PayPal account\r\n } else {\r\n $defaultOption.selected = true;\r\n\r\n hidePaypalSmartButtonFunctionality();\r\n }\r\n // Case when buyer selected PayPal account from paypalAccountList\r\n } else if (isSelectedPaypalAccount) {\r\n hidePaypalSmartButtonFunctionality();\r\n // Case when buyer does not have saved PayPal account\r\n } else {\r\n var $btUsedPayPalAccount = document.querySelector('.form-group.braintree_used_paypal_account');\r\n\r\n $btUsedPayPalAccount.classList.remove('used-paypal-account');\r\n $btUsedPayPalAccount.classList.add('used-paypal-account-hide');\r\n\r\n showPaypalSmartButtonFunctionality();\r\n }\r\n\r\n [].forEach.call($payPalAccountList, function (el) {\r\n if (el.style.display === 'none') el.style.display = 'block';\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n handlePaypalTabBehavior,\r\n hidePaypalSmartButtonFunctionality,\r\n showPaypalSmartButtonFunctionality\r\n};\r\n","'use strict';\r\n\r\nvar PayPalBaseModel = require('./payPalBaseModel');\r\nvar helper = require('../../helper');\r\nvar payPalAccountModelHelper = require('../helpers/payPalAccountModelHelper');\r\nvar billingFormHelper = require('../helpers/payPalBillingFormHelperGlobal');\r\n\r\nfunction PayPalAccountModel(\r\n errorHandlingModel,\r\n btClientInstancePromise,\r\n payPalButtonSelector,\r\n payPalConfigurations,\r\n isVaultMode,\r\n requestBillingAgreement,\r\n isFraudToolsEnabled,\r\n $csrfToken,\r\n addPayPalAccountUrl,\r\n $loaderContainer\r\n) {\r\n PayPalBaseModel.call(\r\n this,\r\n errorHandlingModel,\r\n btClientInstancePromise,\r\n payPalButtonSelector,\r\n payPalConfigurations,\r\n isVaultMode,\r\n requestBillingAgreement,\r\n isFraudToolsEnabled,\r\n $loaderContainer\r\n );\r\n\r\n this.$csrfToken = $csrfToken;\r\n this.addPayPalAccountUrl = addPayPalAccountUrl;\r\n}\r\n\r\n// ES5 inheritance\r\nPayPalAccountModel.prototype = Object.create(PayPalBaseModel.prototype);\r\n\r\n/**\r\n * For whole description open \"payPalBaseModel\".\r\n * We don't generate and send fraud data from Account. That's why \"generateFraudData\" isn't used\r\n * @param {Object} payload Buyer data from PayPal (like address, nonce, etc.)\r\n */\r\nPayPalAccountModel.prototype.onApprovePaymentCallback = function (payload) {\r\n // Calling parrent method to proceed with PayPal payload validation\r\n var baseResponse = PayPalBaseModel.prototype.onApprovePaymentCallback.call(this, payload);\r\n\r\n // Error will be handled on BaseModel level\r\n if (baseResponse && baseResponse.error) {\r\n return;\r\n }\r\n\r\n this.loader.show();\r\n\r\n var payPalAccountModelInstance = this;\r\n var btDetails = payload.details;\r\n var nonce = payload.nonce;\r\n var email = payload.details.email;\r\n var $payPalButton = document.querySelector(this.payPalButtonSelector);\r\n var paypalAccountFormFields = $payPalButton.getAttribute('data-paypal-account-form-fields');\r\n var payPalBraintreeAddressData;\r\n var paypalAccountFormData;\r\n\r\n // Append Shippig/Billing data to FormData\r\n payPalBraintreeAddressData = billingFormHelper.createBillingAddressData(btDetails);\r\n paypalAccountFormData = helper.createPaymentFormData(paypalAccountFormFields, {\r\n nonce: nonce,\r\n email: email,\r\n addresses: JSON.stringify(payPalBraintreeAddressData),\r\n shippingAddress: JSON.stringify(payload.details.shippingAddress)\r\n });\r\n // Apped CSRF token\r\n billingFormHelper.appendCsrfTokenToFormData(paypalAccountFormData, this.$csrfToken);\r\n\r\n payPalAccountModelHelper.savePayPalAccount(this.addPayPalAccountUrl, paypalAccountFormData)\r\n .done(function (paymentData) {\r\n var renderAccountsUrl = paymentData.renderAccountsUrl;\r\n\r\n payPalAccountModelHelper.hidePaypalAccountBtn();\r\n\r\n payPalAccountModelHelper.renderPayPalAccounts(renderAccountsUrl)\r\n .done(function (accountListTemplate) {\r\n payPalAccountModelHelper.addPayPalAccountsToTheTemplate(accountListTemplate);\r\n payPalAccountModelHelper.initRemovePayPalAccountButtonsListners();\r\n payPalAccountModelHelper.throwCartUpade();\r\n\r\n payPalAccountModelInstance.loader.hide();\r\n });\r\n })\r\n .fail(function (errorPayload) {\r\n var error = errorPayload.responseJSON.error;\r\n\r\n payPalAccountModelInstance.errorHandlingModel.showErrorByMessage(error);\r\n payPalAccountModelInstance.loader.hide();\r\n });\r\n};\r\n\r\n/**\r\n * Triggers when buyer clicked on the PayPal button and PayPal modal started loading\r\n * @returns {Object} Object which will be passed directly into Braintree PayPal SDK as an order data\r\n */\r\nPayPalAccountModel.prototype.onOrderCreateCallback = function () {\r\n var payPalButtonConfigs = this.payPalConfigurations;\r\n var orderCreateParams = payPalButtonConfigs.options;\r\n\r\n // Hide custom error on buyer PayPal button click.\r\n this.errorHandlingModel.hideError();\r\n\r\n return {\r\n flow: orderCreateParams.flow,\r\n enableShippingAddress: orderCreateParams.enableShippingAddress,\r\n displayName: orderCreateParams.displayName,\r\n billingAgreementDescription: orderCreateParams.billingAgreementDescription\r\n };\r\n};\r\n\r\nmodule.exports = PayPalAccountModel;\r\n","'use strict';\r\n\r\n/* global Promise $ */\r\n\r\nvar braintreePayPalSDK = require('../braintreesdk/braintreePayPalSDK');\r\nvar braintreeGeneral = require('../../braintreeGeneral');\r\nvar requestsHelper = require('../helpers/payPalRequestsHelperGlobal');\r\n\r\nvar loaderInstance = require('../../loaderHelper');\r\n\r\n/**\r\n * PayPal base model constructor\r\n * @param {Object} errorHandlingModel error handling model\r\n * @param {Promise} btClientInstancePromise BT client instance promise\r\n * @param {string} payPalButtonSelector PayPal button selector\r\n * @param {Object} payPalConfigurations configs from server (taken from data attr)\r\n * @param {boolean} isVaultMode \"true\" in case if vault mode is enabled\r\n * @param {boolean} requestBillingAgreement \"true\" in case if billing agreement should be requested\r\n * @param {boolean} isFraudToolsEnabled \"true\" in case if fraud tools is enabled\r\n * @param {Object} $loaderContainer loader js container\r\n */\r\nfunction PayPalBaseModel(\r\n errorHandlingModel,\r\n btClientInstancePromise,\r\n payPalButtonSelector,\r\n payPalConfigurations,\r\n isVaultMode,\r\n requestBillingAgreement,\r\n isFraudToolsEnabled,\r\n $loaderContainer\r\n) {\r\n this.isVaultMode = isVaultMode;\r\n this.requestBillingAgreement = requestBillingAgreement && isVaultMode;\r\n this.btClientInstancePromise = btClientInstancePromise;\r\n this.payPalButtonSelector = payPalButtonSelector;\r\n this.payPalConfigurations = payPalConfigurations;\r\n // Fraud data related\r\n this.isFraudToolsEnabled = isFraudToolsEnabled;\r\n // Setup init fraudData value for default case (default case: fraud data disabled)\r\n this.fraudDataPromise = Promise.resolve({ fraudDataCollectionDisabled: true });\r\n\r\n // URLs\r\n this.basketDataUrl = payPalConfigurations.getOrderInfoUrl;\r\n this.submitPaymentUrl = payPalConfigurations.paypalHandle;\r\n this.placeOrderStageUrl = payPalConfigurations.redirectUrl;\r\n\r\n this.braintreePayPalSDK = braintreePayPalSDK.payPalButtonRendering;\r\n\r\n this.errorHandlingModel = errorHandlingModel;\r\n this.basketData = null;\r\n this.loader = loaderInstance($loaderContainer);\r\n}\r\n\r\n/* -------------------- Payment Callbacks -------------------- */\r\n\r\n/**\r\n * Method triggers when buyer approved payment in PayPal modal and they passed succesfully\r\n * THIS METHOD NEEDS TO BE OVERRIDDEN in children class\r\n * @param {Object} payload buyer's data from PayPal\r\n * @returns {*} finish function execution\r\n */\r\nPayPalBaseModel.prototype.onApprovePaymentCallback = function (payload) {\r\n // basic payload validation\r\n var ppDetails = payload.details;\r\n\r\n if (!ppDetails.billingAddress) {\r\n var ppShippingAddress = ppDetails.shippingAddress;\r\n try {\r\n ppDetails.billingAddress = {\r\n city: ppShippingAddress.city,\r\n countryCode: ppShippingAddress.countryCode,\r\n line1: ppShippingAddress.line1,\r\n line2: ppShippingAddress.line2 || '',\r\n postalCode: ppShippingAddress.postalCode,\r\n state: ppShippingAddress.state\r\n };\r\n\r\n return {\r\n error: false\r\n };\r\n } catch (err) {\r\n if (err) {\r\n this.errorHandlingModel.showBillingAddressIsNotSupported();\r\n\r\n return {\r\n error: true\r\n };\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Method triggers when buyer canceled payment in PayPal modal\r\n * THIS METHOD CAN BE OVERRIDDEN in children class\r\n */\r\nPayPalBaseModel.prototype.onCancelPaymentCallback = function () {};\r\n\r\n/**\r\n * Method triggers when buyer clicked on PayPal button and PayPal modal is opening\r\n * THIS METHOD CAN BE OVERRIDDEN in children class\r\n * @returns {Object} Amount and Shipping address from basket\r\n */\r\nPayPalBaseModel.prototype.onOrderCreateCallback = function () {\r\n // Hide custom error on buyer PayPal button click.\r\n this.errorHandlingModel.hideError();\r\n\r\n // Get basket again in case if \"onPayPalButtonClickCallback\" wasn't triggered (Change Payment Method Button case)\r\n var basketData = this.basketData || requestsHelper.getBasketData(this.basketDataUrl);\r\n var shippingAddress = basketData.shippingAddress || this.savedPaypalAddress;\r\n\r\n var payPalConfigurations = this.payPalConfigurations;\r\n var mainPayPalConfigurations = payPalConfigurations.options;\r\n var requestBillingAgreement = mainPayPalConfigurations.requestBillingAgreement;\r\n\r\n var paymentObjectData = {\r\n amount: basketData.amount,\r\n currency: mainPayPalConfigurations.currency,\r\n flow: mainPayPalConfigurations.flow,\r\n intent: mainPayPalConfigurations.intent,\r\n locale: mainPayPalConfigurations.locale,\r\n enableShippingAddress: mainPayPalConfigurations.enableShippingAddress,\r\n billingAgreementDescription: mainPayPalConfigurations.billingAgreementDescription,\r\n displayName: mainPayPalConfigurations.displayName\r\n };\r\n\r\n // \"requestBillingAgreement\" will be true when \"paypal_pay_later\" functionality will be enabled or when Checkout with Vault is enabled\r\n // Vault mode should be also enabled\r\n if (requestBillingAgreement) {\r\n paymentObjectData.requestBillingAgreement = requestBillingAgreement;\r\n\r\n if (mainPayPalConfigurations.billingAgreementDetails) {\r\n paymentObjectData.billingAgreementDetails = {\r\n description: mainPayPalConfigurations.billingAgreementDetails.description\r\n };\r\n }\r\n }\r\n\r\n // Case when process from PDP & Cart & Mini Cart & Checkout and basket isn't empty or we on Account page\r\n if (shippingAddress) {\r\n paymentObjectData.shippingAddressEditable = true;\r\n paymentObjectData.shippingAddressOverride = {\r\n line1: shippingAddress.line1,\r\n line2: shippingAddress.line2,\r\n city: shippingAddress.city,\r\n state: shippingAddress.state,\r\n postalCode: shippingAddress.postalCode,\r\n countryCode: shippingAddress.countryCode,\r\n phone: shippingAddress.phone,\r\n recipientName: shippingAddress.recipientName\r\n };\r\n }\r\n\r\n return paymentObjectData;\r\n};\r\n\r\n/**\r\n * Callback triggers when buyer clicked on PayPal button\r\n * @param {Object} _ first not used param\r\n * @param {Object} actions BT actions object\r\n */\r\n// eslint-disable-next-line no-unused-vars\r\nPayPalBaseModel.prototype.onPayPalButtonClickCallback = function (fundingSourceResponse) {\r\n // Hide custom error on buyer PayPal button click.\r\n this.errorHandlingModel.hideError();\r\n this.basketData = this.basketDataUrl ? requestsHelper.getBasketData(this.basketDataUrl) : null;\r\n\r\n if (document.querySelector('#braintreePaypalFundingSource')) {\r\n document.querySelector('#braintreePaypalFundingSource').value = fundingSourceResponse.fundingSource;\r\n }\r\n};\r\n\r\n/**\r\n * Method triggers when error happens during PayPal modal payment processing\r\n * THIS METHOD CAN BE OVERRIDDEN in children class\r\n * @param {Object} error error object with \"message\" and \"code\" inside\r\n */\r\nPayPalBaseModel.prototype.onErrorPaymentCallback = function (error) {\r\n this.errorHandlingModel.showErrorByObject(error);\r\n};\r\n\r\n/**\r\n * This method is executed when creating paypalCheckoutInstance. Should contain configs for \"braintree.paypalCheckout.create\" method.\r\n * Should only be used inside \"braintreePayPalSDK\" file\r\n * @param {Object} btClientInstance Braintree client instance\r\n * @returns {Object} object with additional configurations\r\n */\r\nPayPalBaseModel.prototype.payPalCheckoutInstanceConfigs = function (btClientInstance) {\r\n return {\r\n client: btClientInstance\r\n };\r\n};\r\n\r\n/**\r\n * This method is executed when loading PayPal SDK\r\n * @returns {Object} object with Checkout mode PayPal SDK configs\r\n */\r\nPayPalBaseModel.prototype.payPalCheckoutSdkConfigs = function () {\r\n var isChangePaymentButtonActive = this.payPalConfigurations.changePMButtonEnabled;\r\n var intent = this.payPalConfigurations.options.intent;\r\n var currency = this.payPalConfigurations.options.currency;\r\n var enableFundingList = this.payPalConfigurations.options.enableFundingList;\r\n var disableFundingList = this.payPalConfigurations.options.disableFundingList;\r\n var payPalSDKConfigObject = {\r\n intent: intent,\r\n currency: currency,\r\n components: 'buttons,messages',\r\n commit: false\r\n };\r\n // Functionality for disabling Debit/Credit Card Button when Change Payment Method Button is enabled\r\n if (isChangePaymentButtonActive && disableFundingList !== undefined) {\r\n disableFundingList += ',card';\r\n } else if (isChangePaymentButtonActive && disableFundingList === undefined) {\r\n disableFundingList = 'card';\r\n }\r\n\r\n if (enableFundingList !== undefined) {\r\n payPalSDKConfigObject['enable-funding'] = enableFundingList;\r\n }\r\n\r\n if (disableFundingList !== undefined) {\r\n payPalSDKConfigObject['disable-funding'] = disableFundingList;\r\n }\r\n\r\n return payPalSDKConfigObject;\r\n};\r\n\r\n/**\r\n * This method is executed when loading PayPal SDK\r\n * @returns {Object} object with Vault mode PayPal SDK configs\r\n */\r\nPayPalBaseModel.prototype.payPalVaultSdkConfigs = function () {\r\n var isChangePaymentButtonActive = this.payPalConfigurations.changePMButtonEnabled;\r\n var enableFundingList = this.payPalConfigurations.options.enableFundingList;\r\n var disableFundingList = this.payPalConfigurations.options.disableFundingList;\r\n // Functionality for disabling Debit/Credit Card Button when Change Payment Method Button is enabled\r\n if (isChangePaymentButtonActive && disableFundingList !== undefined) {\r\n disableFundingList += ',card';\r\n } else if (isChangePaymentButtonActive && disableFundingList === undefined) {\r\n disableFundingList = 'card';\r\n }\r\n\r\n var payPalVaultSdkConfigsObject = {\r\n vault: true,\r\n components: 'buttons,messages'\r\n };\r\n\r\n if (enableFundingList !== undefined) {\r\n payPalVaultSdkConfigsObject['enable-funding'] = enableFundingList;\r\n }\r\n\r\n if (disableFundingList !== undefined) {\r\n payPalVaultSdkConfigsObject['disable-funding'] = disableFundingList;\r\n }\r\n\r\n return payPalVaultSdkConfigsObject;\r\n};\r\n\r\n/* -------------------- Payment logic -------------------- */\r\n\r\n/**\r\n * Function which should be called when we need to init PayPal payment button\r\n * @returns {Promise} PayPal button\r\n */\r\nPayPalBaseModel.prototype.initPayment = function () {\r\n var CurrentPayPalPaymenProcessorModelInstance = this;\r\n var result;\r\n\r\n result = this.braintreePayPalSDK(\r\n this.btClientInstancePromise,\r\n this.isVaultMode,\r\n this.payPalConfigurations,\r\n this.payPalButtonSelector,\r\n CurrentPayPalPaymenProcessorModelInstance\r\n );\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Generate fraud data if enabled\r\n */\r\nPayPalBaseModel.prototype.generateFraudData = function () {\r\n if (this.isFraudToolsEnabled) {\r\n this.fraudDataPromise = braintreeGeneral.collectFraudData(this.btClientInstancePromise);\r\n }\r\n // Don't need \"else\" case, since default value was inited in constructor\r\n};\r\n\r\nmodule.exports = PayPalBaseModel;\r\n","'use strict';\r\n\r\nvar PayPalExpressModel = require('./payPalExpressModel');\r\n\r\n/**\r\n * PayPal cart model constructor\r\n * @param {Object} errorHandlingModel error handling model\r\n * @param {Promise} btClientInstancePromise BT client instance promise\r\n * @param {string} payPalButtonSelector PayPal button selector\r\n * @param {Object} payPalConfigurations configs from server (taken from data attr)\r\n * @param {boolean} isVaultMode \"true\" in case if vault mode is enabled\r\n * @param {boolean} requestBillingAgreement \"true\" in case if billing agreement should be requested\r\n * @param {boolean} isFraudToolsEnabled \"true\" in case if fraud tools is enabled\r\n * @param {Object} $csrfToken CSRF token js container\r\n * @param {Object} $loaderContainer loader js container\r\n */\r\nfunction PayPalCartModel(\r\n errorHandlingModel,\r\n btClientInstancePromise,\r\n payPalButtonSelector,\r\n payPalConfigurations,\r\n isVaultMode,\r\n requestBillingAgreement,\r\n isFraudToolsEnabled,\r\n $csrfToken,\r\n $loaderContainer\r\n) {\r\n // Init PayPalExpressModel constructor\r\n PayPalExpressModel.call(\r\n this,\r\n errorHandlingModel,\r\n btClientInstancePromise,\r\n payPalButtonSelector,\r\n payPalConfigurations,\r\n isVaultMode,\r\n requestBillingAgreement,\r\n isFraudToolsEnabled,\r\n $csrfToken,\r\n $loaderContainer\r\n );\r\n\r\n this.changePMButtonEnabled = payPalConfigurations.changePMButtonEnabled;\r\n}\r\n\r\n// ES5 inheritance\r\nPayPalCartModel.prototype = Object.create(PayPalExpressModel.prototype);\r\n\r\n// Show error in case if current basket has zero total price\r\nPayPalCartModel.prototype.onPayPalButtonClickCallback = function (_, actions) {\r\n PayPalExpressModel.prototype.onPayPalButtonClickCallback.call(this, _, actions);\r\n\r\n if (this.basketData.amount === 0) {\r\n this.errorHandlingModel.showZeroAmountOnCart();\r\n\r\n return actions.reject();\r\n }\r\n};\r\n\r\nmodule.exports = PayPalCartModel;\r\n","'use strict';\r\n\r\nvar PayPalBaseModel = require('./payPalBaseModel');\r\nvar payPalExpressModelHelper = require('../helpers/payPalExpressModelHelper');\r\nvar helper = require('../../helper');\r\nvar payPalCheckoutModelHelper = require('../helpers/payPalCheckoutModelHelper');\r\nvar billingFormHelper = require('../helpers/payPalBillingFormHelperGlobal');\r\nvar paypalListHelper = require('../helpers/payPalListHelper');\r\n\r\n/**\r\n * PayPal checkout model constructor\r\n * @param {Object} errorHandlingModel error handling model\r\n * @param {Promise} btClientInstancePromise BT client instance promise\r\n * @param {string} payPalButtonSelector PayPal button selector\r\n * @param {Object} payPalConfigurations configs from server (taken from data attr)\r\n * @param {boolean} isVaultMode \"true\" in case if vault mode is enabled\r\n * @param {boolean} requestBillingAgreement \"true\" in case if billing agreement should be requested\r\n * @param {boolean} isFraudToolsEnabled \"true\" in case if fraud tools is enabled\r\n * @param {Object} $continueButton continue button js container\r\n * @param {Object} $loaderContainer loader js container\r\n */\r\nfunction PayPalCheckoutPaymentModel(\r\n errorHandlingModel,\r\n btClientInstancePromise,\r\n payPalButtonSelector,\r\n payPalConfigurations,\r\n isVaultMode,\r\n requestBillingAgreement,\r\n isFraudToolsEnabled,\r\n $continueButton,\r\n $loaderContainer\r\n) {\r\n PayPalBaseModel.call(\r\n this,\r\n errorHandlingModel,\r\n btClientInstancePromise,\r\n payPalButtonSelector,\r\n payPalConfigurations,\r\n isVaultMode,\r\n requestBillingAgreement,\r\n isFraudToolsEnabled,\r\n $loaderContainer\r\n );\r\n\r\n this.$continueButton = $continueButton;\r\n this.changePMButtonEnabled = payPalConfigurations.changePMButtonEnabled;\r\n}\r\n\r\n// ES5 inheritance\r\nPayPalCheckoutPaymentModel.prototype = Object.create(PayPalBaseModel.prototype);\r\n\r\n// For more details see same method from \"PayPalBaseModel\"\r\n// Add additional configs which are needed for \"Change Payment Method Button\" feature\r\nPayPalCheckoutPaymentModel.prototype.payPalCheckoutInstanceConfigs = function (btClientInstance) {\r\n var checkoutInstanceConfigs = PayPalBaseModel.prototype.payPalCheckoutInstanceConfigs.call(this, btClientInstance);\r\n\r\n if (this.changePMButtonEnabled) {\r\n checkoutInstanceConfigs.autoSetDataUserIdToken = true;\r\n }\r\n\r\n return checkoutInstanceConfigs;\r\n};\r\n\r\n// For more details see same method from \"PayPalBaseModel\"\r\n// Show error in case if current basket has zero total price\r\nPayPalCheckoutPaymentModel.prototype.onPayPalButtonClickCallback = function (_, actions) {\r\n PayPalBaseModel.prototype.onPayPalButtonClickCallback.call(this, _, actions);\r\n\r\n if (this.basketData.amount === 0) {\r\n this.errorHandlingModel.showZeroAmountOnCheckout();\r\n\r\n return actions.reject();\r\n }\r\n};\r\n\r\n// For more details see same method from \"PayPalBaseModel\"\r\n// Mark new account as the session one, fill billing form with data from paypal\r\nPayPalCheckoutPaymentModel.prototype.onApprovePaymentCallback = function (payload) {\r\n // Calling parrent method to proceed with PayPal payload validation\r\n var baseResponse = PayPalBaseModel.prototype.onApprovePaymentCallback.call(this, payload);\r\n\r\n // Error will be handled on BaseModel level\r\n if (baseResponse && baseResponse.error) {\r\n return;\r\n }\r\n\r\n this.loader.show();\r\n\r\n var PayPalCheckoutPaymentModelInstance = this;\r\n var isBuyerAuthenificated = PayPalCheckoutPaymentModelInstance.payPalConfigurations.isBuyerAuthenticated;\r\n var btDetails = payload.details;\r\n var nonce = payload.nonce;\r\n var email = payload.details.email;\r\n var btBillingAddress = btDetails ? btDetails.billingAddress : null;\r\n\r\n // Remove all other Payments session payments\r\n helper.removeActiveSessionPayment();\r\n\r\n // Hide PayPal buttons block\r\n payPalCheckoutModelHelper.hidePayPalButtons();\r\n\r\n // Fill just PayPal related form fields\r\n billingFormHelper.fillPayPalPaymentFields(btDetails);\r\n\r\n // Copy billing address from PayPal to DW billing address form fields\r\n if (btBillingAddress && btDetails) {\r\n billingFormHelper.copyPayPalBillingAddressToDw(btBillingAddress, btDetails);\r\n }\r\n\r\n // add shipping\r\n if (btDetails.shippingAddress) {\r\n var shippingAddressData = payPalExpressModelHelper.createShippingAddressData(btDetails);\r\n var $shippingAddress = document.querySelector('input[name=braintreePaypalShippingAddress]');\r\n $shippingAddress.value = JSON.stringify(shippingAddressData);\r\n }\r\n\r\n // Make current PayPal account as a session account\r\n billingFormHelper.storePaymentAsSessionPayment(nonce, email);\r\n\r\n billingFormHelper.setSessionAccountOptionDefault();\r\n\r\n // Add billing address on session payment option level\r\n payPalCheckoutModelHelper.addBillingAddressOnPaymentOptionLevel(btDetails);\r\n\r\n // Check whether buyer has proceeded with the same email which is already stored\r\n // if \"yes\" we hide stored account with the same email in dropdown\r\n // if \"no\" we show all existent PP accounts in dropdown (stored + new session account)\r\n paypalListHelper.handleStoredAccountsShowing(isBuyerAuthenificated);\r\n\r\n\r\n // Gennerate and add fraud data in to the billing form\r\n PayPalCheckoutPaymentModelInstance.fraudDataPromise\r\n .then(function (data) {\r\n // We have \"fraudDataCollectionDisabled\" flag only in case if we have fraud data collection disabled\r\n if (!data.fraudDataCollectionDisabled) {\r\n billingFormHelper.fillFraudDataInput(data);\r\n }\r\n })\r\n .then(function () {\r\n // Submit payment to server\r\n PayPalCheckoutPaymentModelInstance.$continueButton.click();\r\n\r\n PayPalCheckoutPaymentModelInstance.loader.hide();\r\n });\r\n};\r\n\r\nmodule.exports = PayPalCheckoutPaymentModel;\r\n","'use strict';\r\n\r\nvar PayPalBaseModel = require('./payPalBaseModel');\r\nvar payPalExpressModelHelper = require('../helpers/payPalExpressModelHelper');\r\nvar billingFormHelper = require('../helpers/payPalBillingFormHelperGlobal');\r\nvar requestHelper = require('../helpers/payPalRequestsHelperGlobal');\r\n\r\n/**\r\n * PayPal express model constructor\r\n * @param {Object} errorHandlingModel error handling model\r\n * @param {Promise} btClientInstancePromise BT client instance promise\r\n * @param {string} payPalButtonSelector PayPal button selector\r\n * @param {Object} payPalConfigurations configs from server (taken from data attr)\r\n * @param {boolean} isVaultMode \"true\" in case if vault mode is enabled\r\n * @param {boolean} requestBillingAgreement \"true\" in case if billing agreement should be requested\r\n * @param {boolean} isFraudToolsEnabled \"true\" in case if fraud tools is enabled\r\n * @param {Object} $csrfToken CSRF token js container\r\n * @param {Object} $loaderContainer loader js container\r\n */\r\nfunction PayPalExpressModel(\r\n errorHandlingModel,\r\n btClientInstancePromise,\r\n payPalButtonSelector,\r\n payPalConfigurations,\r\n isVaultMode,\r\n requestBillingAgreement,\r\n isFraudToolsEnabled,\r\n $csrfToken,\r\n $loaderContainer\r\n) {\r\n // Init PayPalBaseModel constructor\r\n PayPalBaseModel.call(\r\n this,\r\n errorHandlingModel,\r\n btClientInstancePromise,\r\n payPalButtonSelector,\r\n payPalConfigurations,\r\n isVaultMode,\r\n requestBillingAgreement,\r\n isFraudToolsEnabled,\r\n $loaderContainer\r\n );\r\n\r\n this.$csrfToken = $csrfToken;\r\n this.changePMButtonEnabled = payPalConfigurations.changePMButtonEnabled;\r\n}\r\n\r\n// ES5 inheritance\r\nPayPalExpressModel.prototype = Object.create(PayPalBaseModel.prototype);\r\n\r\n// For more details see same method from \"PayPalBaseModel\"\r\n// Add additional configs which are needed for \"Change payment method button\" feature\r\nPayPalExpressModel.prototype.payPalCheckoutInstanceConfigs = function (btClientInstance) {\r\n var checkoutInstanceConfigs = PayPalBaseModel.prototype.payPalCheckoutInstanceConfigs.call(this, btClientInstance);\r\n\r\n if (this.changePMButtonEnabled) {\r\n checkoutInstanceConfigs.autoSetDataUserIdToken = true;\r\n }\r\n\r\n return checkoutInstanceConfigs;\r\n};\r\n\r\n/**\r\n * Method triggers when buyer clicked on PayPal button and PayPal modal is opening\r\n * @returns {Object} Amount and Shipping address from basket\r\n */\r\nPayPalExpressModel.prototype.onOrderCreateCallback = function () {\r\n var orderData;\r\n var basketDataUrl = this.basketDataUrl;\r\n var isUseSavedPaypalAddress;\r\n\r\n this.basketData = requestHelper.getBasketData(basketDataUrl);\r\n\r\n isUseSavedPaypalAddress = this.changePMButtonEnabled && !this.basketData.shippingAddress;\r\n\r\n if (isUseSavedPaypalAddress) {\r\n this.savedPaypalAddress = payPalExpressModelHelper.getSavedPaypalAddress(this.payPalButtonSelector);\r\n }\r\n\r\n orderData = PayPalBaseModel.prototype.onOrderCreateCallback.call(this);\r\n\r\n return orderData;\r\n};\r\n\r\n\r\n// For more details see same method from \"PayPalBaseModel\"\r\n// Create and submit billing data to the server. Redirect on order reivew checkout step\r\nPayPalExpressModel.prototype.onApprovePaymentCallback = function (payload) {\r\n // Calling parrent method to proceed with PayPal payload validation\r\n var baseResponse = PayPalBaseModel.prototype.onApprovePaymentCallback.call(this, payload);\r\n\r\n // Error will be handled on BaseModel level\r\n if (baseResponse && baseResponse.error) {\r\n return;\r\n }\r\n\r\n this.loader.show();\r\n\r\n var PayPalExpressInstance = this;\r\n var payloadDetails = payload.details;\r\n var $payPalButtonWrapper = document.querySelector('.braintree-cart-paypal-buttons-wrap');\r\n var $braintreePayPalFundingSource = document.querySelector('#braintreePaypalFundingSource');\r\n var braintreePayPalFundingSource = $braintreePayPalFundingSource.value;\r\n\r\n var paypalCheckoutFormFields = JSON.parse($payPalButtonWrapper.getAttribute('data-paypal-checkout-form-fields'));\r\n var billingAddressData = billingFormHelper.createBillingAddressData(payloadDetails);\r\n var billingFormData;\r\n\r\n // Create form data only with billing address\r\n billingFormData = billingFormHelper.createBillingAddressFormData(paypalCheckoutFormFields, billingAddressData);\r\n\r\n billingFormHelper.appendCsrfTokenToFormData(billingFormData, PayPalExpressInstance.$csrfToken);\r\n billingFormHelper.appendBraintreePaypalFundingSourceToFormData(billingFormData, braintreePayPalFundingSource);\r\n\r\n // It will generate FFraud data only if it Fraud Data collection was enabled\r\n PayPalExpressInstance.fraudDataPromise\r\n .then(function (data) {\r\n if (!data.fraudDataCollectionDisabled) {\r\n billingFormHelper.appendFraudDataToFormData(billingFormData, data.deviceData);\r\n }\r\n })\r\n .then(function () {\r\n var shippingAddressData;\r\n\r\n // If shipping address was presented in PayPal payload, create a shipping address object,\r\n // stringify it and store in FormData as an input\r\n if (payloadDetails.shippingAddress) {\r\n shippingAddressData = payPalExpressModelHelper.createShippingAddressData(payloadDetails);\r\n\r\n payPalExpressModelHelper.appendShippingDataAsStringToFormData(billingFormData, shippingAddressData);\r\n }\r\n\r\n // Create a shipping address object, stringify it and store in FormData as an input\r\n billingFormHelper.appendBillingAddressAsStringToFormData(billingFormData, billingAddressData);\r\n\r\n billingFormHelper.appendEmailAsStringToFormData(billingFormData, payloadDetails.email);\r\n\r\n billingFormHelper.appendBtPaymentFieldsToFormData(billingFormData, payload);\r\n })\r\n .then(function () {\r\n // Submit customer form with email (CheckoutServices-SubmitCustomer)\r\n // as we skip step \"login via guest/registered user\" while express checkout\r\n // email is set only in case of guest checkout and if email is not already set\r\n payPalExpressModelHelper.submitCustomerForm(payloadDetails.email);\r\n })\r\n .then(function () {\r\n requestHelper.submitPaymentDataToServerPromise(\r\n PayPalExpressInstance.submitPaymentUrl,\r\n billingFormData,\r\n PayPalExpressInstance.placeOrderStageUrl,\r\n PayPalExpressInstance.loader,\r\n PayPalExpressInstance.errorHandlingModel\r\n );\r\n\r\n PayPalExpressInstance.loader.hide();\r\n });\r\n};\r\n\r\nmodule.exports = PayPalExpressModel;\r\n","'use strict';\r\n\r\nvar PayPalBaseModel = require('./payPalBaseModel');\r\nvar PayPalExpressModel = require('./payPalExpressModel');\r\nvar payPalProductPageModelHelper = require('../helpers/payPalProductPageModelHelper');\r\nvar payPalExpressModelHelper = require('../helpers/payPalExpressModelHelper');\r\nvar requestsHelper = require('../helpers/payPalRequestsHelperGlobal');\r\n\r\n/**\r\n * PayPal product model constructor\r\n * @param {Object} errorHandlingModel error handling model\r\n * @param {Promise} btClientInstancePromise BT client instance promise\r\n * @param {string} payPalButtonSelector PayPal button selector\r\n * @param {Object} payPalConfigurations configs from server (taken from data attr)\r\n * @param {boolean} isVaultMode \"true\" in case if vault mode is enabled\r\n * @param {boolean} requestBillingAgreement \"true\" in case if billing agreement should be requested\r\n * @param {boolean} isFraudToolsEnabled \"true\" in case if fraud tools is enabled\r\n * @param {Object} $csrfToken CSRF token js container\r\n * @param {Object} $loaderContainer loader js container\r\n */\r\nfunction PayPalProductPageModel(\r\n errorHandlingModel,\r\n btClientInstancePromise,\r\n payPalButtonSelector,\r\n payPalConfigurations,\r\n isVaultMode,\r\n requestBillingAgreement,\r\n isFraudToolsEnabled,\r\n $csrfToken,\r\n $loaderContainer\r\n) {\r\n // Init PayPalExpressModel constructor\r\n PayPalExpressModel.call(\r\n this,\r\n errorHandlingModel,\r\n btClientInstancePromise,\r\n payPalButtonSelector,\r\n payPalConfigurations,\r\n isVaultMode,\r\n requestBillingAgreement,\r\n isFraudToolsEnabled,\r\n $csrfToken,\r\n $loaderContainer\r\n );\r\n\r\n this.changePMButtonEnabled = payPalConfigurations.changePMButtonEnabled;\r\n}\r\n\r\n// ES5 inheritance\r\nPayPalProductPageModel.prototype = Object.create(PayPalExpressModel.prototype);\r\n\r\n// Dummy function to override default behavior and do not execute \"GetOrderInfo\" call.\r\n// Instead, we will get basket data inside \"onOrderCreateCallback\"\r\nPayPalProductPageModel.prototype.onPayPalButtonClickCallback = function (e) {\r\n PayPalBaseModel.prototype.onPayPalButtonClickCallback.call(this, e);\r\n};\r\n\r\n// Add product to the Cart\r\nPayPalProductPageModel.prototype.onOrderCreateCallback = function () {\r\n var orderData;\r\n var addProductToCartResponse = requestsHelper.addProductToCart();\r\n var basketDataUrl = this.basketDataUrl;\r\n var isUseSavedPaypalAddress;\r\n\r\n this.basketData = requestsHelper.getBasketData(basketDataUrl);\r\n this.addedProductFromPdp = {\r\n uuid: addProductToCartResponse.pliUUID,\r\n pid: addProductToCartResponse.pid\r\n };\r\n this.removeFromCartUrl = addProductToCartResponse.cart.actionUrls.removeProductLineItemUrl;\r\n\r\n isUseSavedPaypalAddress = this.changePMButtonEnabled && !this.basketData.shippingAddress;\r\n\r\n if (isUseSavedPaypalAddress) {\r\n this.savedPaypalAddress = payPalExpressModelHelper.getSavedPaypalAddress(this.payPalButtonSelector);\r\n }\r\n\r\n orderData = PayPalBaseModel.prototype.onOrderCreateCallback.call(this);\r\n\r\n return orderData;\r\n};\r\n\r\n// On error remove added product from Cart\r\nPayPalProductPageModel.prototype.onErrorPaymentCallback = function (error) {\r\n PayPalExpressModel.prototype.onErrorPaymentCallback.call(this, error);\r\n\r\n payPalProductPageModelHelper.removeProductFromCart(this.removeFromCartUrl, this.addedProductFromPdp);\r\n};\r\n\r\n// On cancel remove added product from Cart\r\nPayPalProductPageModel.prototype.onCancelPaymentCallback = function () {\r\n payPalProductPageModelHelper.removeProductFromCart(this.removeFromCartUrl, this.addedProductFromPdp);\r\n};\r\n\r\nmodule.exports = PayPalProductPageModel;\r\n","'use strict';\r\n\r\nvar payPalProductPage = require('./components/payPalProductPage');\r\nvar payPalMiniCartPage = require('./components/payPalMiniCartPage');\r\nvar payPalCartPage = require('./components/payPalCartPage');\r\nvar payPalAccountPage = require('./components/payPalAccountPage');\r\nvar payPalCheckoutPage = require('./components/payPalCheckoutPage');\r\n\r\nvar btClientInstancePromise;\r\n\r\n/**\r\n * Init PayPal functionality on PDP\r\n */\r\nfunction initProduct() {\r\n payPalProductPage.init(btClientInstancePromise);\r\n}\r\n\r\n/**\r\n * Init PayPal functionality on MiniCart\r\n */\r\nfunction initMiniCart() {\r\n // For MiniCart we generate client instance inside component.\r\n // This is, since general code which generate client instance executes before client token appear\r\n // This is only applicable for MiniCart\r\n payPalMiniCartPage.init();\r\n}\r\n\r\n/**\r\n * Init PayPal functionality on Cart\r\n */\r\nfunction initCart() {\r\n payPalCartPage.init(btClientInstancePromise);\r\n}\r\n\r\n/**\r\n * Init PayPal functionality on Checkout\r\n */\r\nfunction initCheckout() {\r\n payPalCheckoutPage.init(btClientInstancePromise);\r\n}\r\n\r\n/**\r\n * Init PayPal functionality on Account\r\n */\r\nfunction initAccount() {\r\n payPalAccountPage.init(btClientInstancePromise);\r\n}\r\n\r\n/**\r\n * Init general variables which are used on all pages\r\n * @param {Object} clientInstancePromise client instance promise\r\n */\r\nfunction init(clientInstancePromise) {\r\n btClientInstancePromise = clientInstancePromise;\r\n}\r\n\r\nmodule.exports = {\r\n init,\r\n initCheckout,\r\n initProduct,\r\n initMiniCart,\r\n initCart,\r\n initAccount\r\n};\r\n","'use strict';\r\n/* eslint-disable no-undef */\r\n/* global braintreeUtils braintree $ */\r\n\r\n/**\r\n * Creates visa checkout instance\r\n * @param {Promise} btClientInstancePromise BT Client Instance Promise\r\n * @returns {Promise} visaCheckoutInstance SRC instance\r\n */\r\nfunction createVisaCheckout(btClientInstancePromise) {\r\n return btClientInstancePromise\r\n .then(function (btClientInstance) {\r\n return braintree.visaCheckout.create({\r\n client: btClientInstance\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Initialized SRC with options and pass payload data after tokenize\r\n * @param {Object} SrcBaseModelInstance Instance of SrcBaseModel or it's child classes\r\n * @returns {Promise} SRC button\r\n */\r\nfunction visaCheckoutInitialized(SrcBaseModelInstance) {\r\n var visaCheckoutInstancePromise = createVisaCheckout(SrcBaseModelInstance.clientInstancePromise);\r\n\r\n return visaCheckoutInstancePromise\r\n .then(function (visaCheckoutInstance) {\r\n var srcInitOptions = visaCheckoutInstance.createInitOptions(SrcBaseModelInstance.getInitOptionsObject());\r\n\r\n V.init(srcInitOptions);\r\n\r\n // Event which is triggered when payment successfully completed on SRC end\r\n V.on('payment.success', function (payment) {\r\n visaCheckoutInstance.tokenize(payment).then(function (payload) {\r\n SrcBaseModelInstance.onTokenizeCallback(payload);\r\n });\r\n });\r\n V.on('payment.error', function (_, error) {\r\n SrcBaseModelInstance.errorHandlingModel.srcErrorHandler(error);\r\n });\r\n V.on('payment.cancel', function (payment) {\r\n if (payment.error) {\r\n SrcBaseModelInstance.errorHandlingModel.srcErrorHandler(\r\n SrcBaseModelInstance.errorHandlingModel.errorMessages.CLIENT_GATEWAY_NETWORK\r\n );\r\n }\r\n });\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n visaCheckoutInitialized\r\n};\r\n","'use strict';\r\n\r\nvar loaderInstance = require('../../loaderHelper');\r\nvar srcHelper = require('../helpers/srcHelper');\r\nvar creditCardVaultManager = require('../../creditcard/components/creditCardVaultManager');\r\n\r\n// Models\r\nvar ErrorHandlingBaseModel = require('../errorhandler/errorHandlingBaseModel');\r\nvar SrcAccountModel = require('../models/srcAccountModel');\r\n\r\nvar $braintreeSrcLoader = document.querySelector('.braintreeSrcLoader');\r\nvar $braintreeSrcButton = document.querySelector('.js_braintree_src_account_button');\r\n\r\n/**\r\n * Inits SRC account functionality on the Account Page\r\n * @param {Promise} clientInstancePromise client instance promise\r\n */\r\nfunction init(clientInstancePromise) {\r\n var srcButtonConfigurations = srcHelper.getBraintreeSRCButtonConfigs();\r\n var $braintreeSrcDeviceDataInput = null;\r\n var srcLoader = loaderInstance($braintreeSrcLoader);\r\n var errorHandlingBaseModel = new ErrorHandlingBaseModel(srcButtonConfigurations.messages);\r\n\r\n var SrcAccountModelInstance = new SrcAccountModel(\r\n clientInstancePromise,\r\n srcButtonConfigurations,\r\n $braintreeSrcDeviceDataInput,\r\n srcLoader,\r\n errorHandlingBaseModel\r\n );\r\n\r\n // Hides errors on the Account Page\r\n $braintreeSrcButton.addEventListener('click', errorHandlingBaseModel.hideError);\r\n\r\n creditCardVaultManager.removeFromDomCardsWhichAreNotInVaultMgr(clientInstancePromise);\r\n SrcAccountModelInstance.initSrcButton();\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\nvar srcHelper = require('../helpers/srcHelper');\r\nvar loaderInstance = require('../../loaderHelper');\r\n\r\n// Models\r\nvar SrcCartModel = require('../models/srcCartModel');\r\nvar ErrorHandlingCartModel = require('../errorhandler/errorHandlingCartModel');\r\n\r\nvar $braintreeCartSrcButton = document.querySelector('.braintree-cart-src-button');\r\n\r\n/**\r\n * Inits SRC account functionality on the Cart Page\r\n * @param {Promise} clientInstancePromise client instance promise\r\n */\r\nfunction init(clientInstancePromise) {\r\n var $braintreeSrcLoader = document.querySelector('.braintreeSrcLoader');\r\n var $totalAmount = document.querySelector('.grand-total');\r\n var srcLoader = loaderInstance($braintreeSrcLoader);\r\n var srcButtonConfigurations = srcHelper.getBraintreeSRCButtonConfigs();\r\n var $braintreeSrcDeviceDataInput = document.querySelector('input[name=braintreeSrcDeviceDataInput]');\r\n var errorHandlingCartModel = new ErrorHandlingCartModel(srcButtonConfigurations.messages);\r\n\r\n var SrcCheckoutModelInstance = new SrcCartModel(\r\n clientInstancePromise,\r\n srcButtonConfigurations,\r\n $braintreeSrcDeviceDataInput,\r\n srcLoader,\r\n errorHandlingCartModel\r\n );\r\n\r\n // Hides errors on the Cart Page\r\n $braintreeCartSrcButton.addEventListener('click', errorHandlingCartModel.hideError);\r\n\r\n SrcCheckoutModelInstance.initSrcButton();\r\n\r\n // Tracks cases when total amount equal zero and throw an error\r\n srcHelper.zeroAmountSrcButtonBehavior($totalAmount, errorHandlingCartModel);\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\nvar srcHelper = require('../helpers/srcHelper');\r\nvar loaderInstance = require('../../loaderHelper');\r\n\r\n// Models\r\nvar SrcCheckoutModel = require('../models/srcCheckoutModel');\r\nvar ErrorHandlingCheckoutModel = require('../errorhandler/errorHandlingCheckoutModel');\r\n\r\nvar $braintreeBillingPageSrcButton = document.querySelector('.braintree-billingpage-src-button');\r\n\r\n/**\r\n * Inits SRC account functionality on the Checkout Page\r\n * @param {Promise} clientInstancePromise client instance promise\r\n */\r\nfunction init(clientInstancePromise) {\r\n var $braintreeSrcLoader = document.querySelector('.braintreeSrcLoader');\r\n var $totalAmount = document.querySelector('.grand-total-sum');\r\n var srcLoader = loaderInstance($braintreeSrcLoader);\r\n var srcButtonConfigurations = srcHelper.getBraintreeSRCButtonConfigs();\r\n var $braintreeSrcDeviceDataInput = document.querySelector('input[name=braintreeSrcDeviceDataInput]');\r\n var errorHandlingCheckoutModel = new ErrorHandlingCheckoutModel(srcButtonConfigurations.messages);\r\n\r\n\r\n var SrcCheckoutModelInstance = new SrcCheckoutModel(\r\n clientInstancePromise,\r\n srcButtonConfigurations,\r\n $braintreeSrcDeviceDataInput,\r\n srcLoader,\r\n errorHandlingCheckoutModel\r\n );\r\n\r\n // Hides errors on the Checkout/Billing Page\r\n $braintreeBillingPageSrcButton.addEventListener('click', errorHandlingCheckoutModel.hideError);\r\n\r\n SrcCheckoutModelInstance.initSrcButton();\r\n\r\n // Tracks cases when total amount equal zero and throw an error\r\n srcHelper.zeroAmountSrcButtonBehavior($totalAmount, errorHandlingCheckoutModel);\r\n\r\n // Click SRC tab if session payment ID is SRC and session account value is filled\r\n // in case of checkout through saved SRC card session payment id will be SRC\r\n // but session account value will be empty\r\n var sessionPaymentMethodId = srcButtonConfigurations.sessionPaymentMethodId;\r\n var isSrcSessionAccountExist = document.querySelector('#sessionSrcAccount').value !== '';\r\n\r\n if (sessionPaymentMethodId === 'SRC' && isSrcSessionAccountExist) {\r\n document.querySelector('.src-tab').click();\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\nvar srcHelper = require('../helpers/srcHelper');\r\nvar srcListHelper = require('../helpers/srcListHelper');\r\n\r\n/**\r\n * Inits SRC list functionality\r\n */\r\nfunction init() {\r\n var $srcAccountList = document.querySelector('#braintreeSrcAccountsList');\r\n var srcListExist = Boolean($srcAccountList);\r\n\r\n if (srcListExist) {\r\n srcListHelper.srsListStateHandler();\r\n\r\n $srcAccountList.addEventListener('change', function () {\r\n srcHelper.srcContentTabHandler(true);\r\n });\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\n// Helpers\r\nvar helper = require('../../helper');\r\nvar srcListHelper = require('../helpers/srcListHelper');\r\nvar srcHelper = require('../helpers/srcHelper');\r\n\r\nvar $srcSessionAccount = document.querySelector('#sessionSrcAccount');\r\nvar $srcButton = document.querySelector('.js_braintree_src_button');\r\nvar $accountListBlock = document.querySelector('.braintree_used_src_account');\r\nvar $srcCardDescription = document.querySelector('#braintreeSrcCardDescription');\r\nvar $braintreeSrcCardType = document.querySelector('#braintreeSrcCardType');\r\nvar $braintreeSrcLastFourDigits = document.querySelector('#braintreeSrcLastFourDigits');\r\nvar $braintreeSrcCreditCardNumber = document.querySelector('#braintreeSrcCreditCardNumber');\r\n/**\r\n * Shows used session account(card) in dropdown and handles checkout view\r\n * @param {Object} srcPayload payload with card data from tokenization\r\n */\r\nfunction showSrcSessionAccount(srcPayload) {\r\n // description of used card(ex. Visa ending in 1111)\r\n var cardDescription = srcPayload.details.cardType + ' ' + srcPayload.description;\r\n\r\n $srcSessionAccount.value = cardDescription;\r\n $srcSessionAccount.text = cardDescription;\r\n $srcCardDescription.value = cardDescription;\r\n $srcSessionAccount.selected = true;\r\n $accountListBlock.style.display = 'block';\r\n $srcButton.style.display = 'none';\r\n\r\n // Inputs required for identifying already saved cards\r\n $braintreeSrcCardType.value = srcPayload.details.cardType;\r\n $braintreeSrcLastFourDigits.value = srcPayload.details.lastFour;\r\n $braintreeSrcCreditCardNumber.value = '************' + srcPayload.details.lastFour;\r\n\r\n srcListHelper.handleSaveSrcAccountCheckbox($srcSessionAccount, true);\r\n srcListHelper.setIsHideContinueButtonAttr(false);\r\n helper.continueButtonToggle(false);\r\n}\r\n\r\n/*\r\n* Removes method was used and changes appearance of SRC tab\r\n**/\r\nfunction removeSessionNonce() {\r\n $srcSessionAccount.value = '';\r\n $srcSessionAccount.text = '';\r\n $accountListBlock.style.display = 'none';\r\n $srcSessionAccount.setAttribute('data-save', false);\r\n\r\n document.querySelector('#braintreeSRCNonce').value = '';\r\n document.querySelector('#braintreeSrcBillingAddress').value = '';\r\n document.querySelector('#braintreeSrcCardDescription').value = '';\r\n document.querySelector('#newSrcAccount').selected = true;\r\n\r\n srcHelper.srcContentTabHandler(false);\r\n}\r\n\r\nmodule.exports = {\r\n showSrcSessionAccount,\r\n removeSessionNonce\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = {\r\n FLOW_NAME_ACCOUNT: 'account',\r\n FLOW_NAME_CART_CHECKOUT: 'cart',\r\n FLOW_NAME_BILLING_CHECKOUT: 'billing'\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Error Handling constructor\r\n * @param {Object} errorMessages object with error messages\r\n */\r\nfunction ErrorHandlingBaseModel(errorMessages) {\r\n this.errorMessages = errorMessages;\r\n}\r\n\r\n/**\r\n * ---- General method which should be used for cases when error came from Braintree ----\r\n * Show error notification by error Object from BT\r\n * @param {Object} error error object from Bt\r\n */\r\nErrorHandlingBaseModel.prototype.showErrorByObject = function (error) {\r\n var msg = error.message;\r\n var code = error.code;\r\n var errorMessage = this.errorMessages[code] || msg || this.errorMessages.CLIENT_GATEWAY_NETWORK;\r\n\r\n this.createErrorNotification(errorMessage);\r\n};\r\n\r\n/**\r\n * ---- General method which should be used for cases when error came from Braintree ----\r\n * Show error notification by message\r\n * @param {string} message message to display inside error notification\r\n */\r\nErrorHandlingBaseModel.prototype.showErrorByMessage = function (message) {\r\n this.createErrorNotification(message);\r\n};\r\n\r\n/**\r\n * ---- Error container which will be used on Account ----\r\n * ---- For all other cases this method will be overwritten by corresponding one ----\r\n *\r\n * Method responsible for Error Notification generation\r\n * @param {string} message message to display inside error notification\r\n */\r\nErrorHandlingBaseModel.prototype.createErrorNotification = function (message) {\r\n var $errorContainer = $('.error-messaging');\r\n\r\n var errorHtml = '
' +\r\n '' + message + '
';\r\n\r\n $errorContainer.append(errorHtml);\r\n $errorContainer.show();\r\n window.scrollTo(0, 0);\r\n};\r\n\r\n/**\r\n * ---- Method which should hide error container and make it empty. On Account we use this one ----\r\n * ---- For all other cases this method will be overwritten by corresponding one ----\r\n *\r\n * Hide error notification\r\n */\r\nErrorHandlingBaseModel.prototype.hideError = function () {\r\n var $errorContainer = $('.error-messaging');\r\n\r\n $errorContainer.hide();\r\n $errorContainer.empty();\r\n};\r\n\r\n/**\r\n * Handles SRC error by types\r\n * @param {Object} error Error object or error message\r\n */\r\nErrorHandlingBaseModel.prototype.srcErrorHandler = function (error) {\r\n if (error.name === 'BraintreeError') {\r\n this.showErrorByObject(error);\r\n } else {\r\n this.showErrorByMessage(error.message || error);\r\n }\r\n};\r\n\r\nmodule.exports = ErrorHandlingBaseModel;\r\n","'use strict';\r\n\r\nvar ErrorHandlingBaseModel = require('./errorHandlingBaseModel');\r\n\r\n/**\r\n * Error Handling Cart model constructor\r\n * @param {Object} errorMessages object with error messages\r\n */\r\nfunction ErrorHandlingCartModel(errorMessages) {\r\n ErrorHandlingBaseModel.call(this, errorMessages);\r\n\r\n this.errorMessages = errorMessages;\r\n}\r\n\r\n/**\r\n * ES5 inheritance\r\n */\r\nErrorHandlingCartModel.prototype = Object.create(ErrorHandlingBaseModel.prototype);\r\n\r\n// See corresponding method inside \"ErrorHandlingBaseModel\" model\r\nErrorHandlingCartModel.prototype.createErrorNotification = function (message) {\r\n var $errorContainer = $('.cart-error-messaging');\r\n\r\n $('.checkout-btn').addClass('disabled');\r\n $errorContainer.append(\r\n `
\r\n \r\n ${message}\r\n
`\r\n );\r\n\r\n $errorContainer.show();\r\n window.scrollTo(0, 0);\r\n};\r\n\r\n// Shows an error when the value of the total amount on the Card is 0\r\nErrorHandlingCartModel.prototype.showZeroAmountOnCart = function () {\r\n ErrorHandlingCartModel.prototype.createErrorNotification(this.errorMessages.CUSTOM_SRC_ZERO_AMOUNT_ERROR);\r\n};\r\n\r\n// See corresponding method inside \"ErrorHandlingBaseModel\" model\r\nErrorHandlingCartModel.prototype.hideError = function () {\r\n var $errorContainer = $('.cart-error-messaging');\r\n\r\n $errorContainer.hide();\r\n $errorContainer.empty();\r\n};\r\n\r\n/**\r\n * Shows cart error in core error container\r\n * @param {Object} data error data\r\n */\r\nErrorHandlingCartModel.prototype.handleCheckoutFromCartError = function (data) {\r\n var errorMessage = '';\r\n\r\n if (data.fieldErrors.length) {\r\n data.fieldErrors.forEach(function (error, index) {\r\n var keys = Object.keys(error);\r\n\r\n if (keys.length) {\r\n errorMessage += `${keys[index].replace('dwfrm_billing_', '').replace('_', ' ')} ${data.fieldErrors[index][keys[index]]}. `;\r\n }\r\n });\r\n\r\n this.showErrorByMessage(errorMessage);\r\n }\r\n\r\n if (data.serverErrors.length) {\r\n data.serverErrors.forEach(function (error) {\r\n errorMessage += `${error}. `;\r\n });\r\n\r\n this.showErrorByMessage(errorMessage);\r\n }\r\n\r\n if (data.cartError) {\r\n window.location.href = data.redirectUrl;\r\n }\r\n};\r\n\r\nmodule.exports = ErrorHandlingCartModel;\r\n","'use strict';\r\n\r\nvar ErrorHandlingBaseModel = require('./errorHandlingBaseModel');\r\n\r\n/**\r\n * Error Handling Checkout model constructor\r\n * @param {Object} errorMessages object with error messages\r\n */\r\nfunction ErrorHandlingCheckoutModel(errorMessages) {\r\n ErrorHandlingBaseModel.call(this, errorMessages);\r\n\r\n this.errorMessages = errorMessages;\r\n}\r\n\r\n/**\r\n * ES5 inheritance\r\n */\r\nErrorHandlingCheckoutModel.prototype = Object.create(ErrorHandlingBaseModel.prototype);\r\n\r\n// See corresponding method inside \"ErrorHandlingBaseModel\" model\r\nErrorHandlingCheckoutModel.prototype.hideError = function () {\r\n var $topErrorMessageText = document.querySelector('.error-message-text');\r\n var $topErrorMessageWrapper = document.querySelector('.error-message');\r\n\r\n $topErrorMessageWrapper.style.display = 'none';\r\n $topErrorMessageText.innerHTML = '';\r\n};\r\n\r\n// See corresponding method inside \"ErrorHandlingBaseModel\" model\r\nErrorHandlingCheckoutModel.prototype.createErrorNotification = function (message) {\r\n var $topErrorMessageText = document.querySelector('.error-message-text');\r\n var $topErrorMessageWrapper = document.querySelector('.error-message');\r\n\r\n $topErrorMessageText.textContent = '';\r\n $topErrorMessageText.append(message);\r\n\r\n $topErrorMessageWrapper.style.display = 'block';\r\n window.scrollTo(0, 0);\r\n};\r\n\r\n// Shows an error when the value of the total amount on the Checkout is 0\r\nErrorHandlingCheckoutModel.prototype.showZeroAmountOnCheckout = function () {\r\n ErrorHandlingCheckoutModel.prototype.createErrorNotification(this.errorMessages.CUSTOM_SRC_ZERO_AMOUNT_ERROR);\r\n};\r\n\r\nmodule.exports = ErrorHandlingCheckoutModel;\r\n","'use strict';\r\n\r\n/**\r\n * Shows a zero amount SRC button and hides a normal SRC button\r\n */\r\nfunction showZeroAmountSrcButton() {\r\n $('.v-button-zero-amount').show();\r\n $('.v-button').hide();\r\n}\r\n\r\n/**\r\n * Hides a zero amount SRC button and show a normal SRC button\r\n */\r\nfunction hideZeroAmountSrcButton() {\r\n $('.v-button-zero-amount').hide();\r\n $('.v-button').show();\r\n}\r\n\r\n/**\r\n * Handles whether show or hide zero amount SRC button\r\n * @param {number} totalAmount Total amount of order\r\n */\r\nfunction handleZeroAmountButtonVisibility(totalAmount) {\r\n if (totalAmount === 0) {\r\n showZeroAmountSrcButton();\r\n } else {\r\n hideZeroAmountSrcButton();\r\n }\r\n}\r\n\r\n/**\r\n * Adds event listener to the zero amount button on the Cart Page\r\n * @param {DOMElement} $zeroAmountButton DOM element of zero amount SRC button\r\n * @param {Object} errorHandlingModel Checkout error handling model\r\n */\r\nfunction addZeroAmountButtonEventListenerOnCart($zeroAmountButton, errorHandlingModel) {\r\n $zeroAmountButton.addEventListener('click', () => {\r\n errorHandlingModel.hideError();\r\n errorHandlingModel.showZeroAmountOnCart();\r\n });\r\n}\r\n\r\n/**\r\n * Adds event listener to the zero amount SRC button on the Checkout Page\r\n * @param {DOMElement} $zeroAmountButton DOM element of zero amount SRC button\r\n * @param {Object} errorHandlingModel Checkout error handling model\r\n */\r\nfunction addZeroAmountButtonEventListenerOnCheckout($zeroAmountButton, errorHandlingModel) {\r\n $zeroAmountButton.addEventListener('click', () => {\r\n errorHandlingModel.hideError();\r\n errorHandlingModel.showZeroAmountOnCheckout();\r\n });\r\n}\r\n\r\n/**\r\n * Creates a mutation obserber for total amount element\r\n * @param {DOMElement} totalAmountElement DOM Element that includes the total cost\r\n */\r\nfunction initTotalAmountElementObserver(totalAmountElement) {\r\n var config = { attributes: true, childList: true, subtree: true };\r\n\r\n var observer = new MutationObserver((element) => {\r\n var totalAmount = Number.parseFloat(element[0].target.textContent.slice(1));\r\n\r\n // Handles whether show or hide zero amount SRC button\r\n handleZeroAmountButtonVisibility(totalAmount);\r\n });\r\n\r\n observer.observe(totalAmountElement, config);\r\n}\r\n\r\nmodule.exports = {\r\n initTotalAmountElementObserver: initTotalAmountElementObserver,\r\n addZeroAmountButtonEventListenerOnCheckout: addZeroAmountButtonEventListenerOnCheckout,\r\n addZeroAmountButtonEventListenerOnCart: addZeroAmountButtonEventListenerOnCart,\r\n hideZeroAmountSrcButton: hideZeroAmountSrcButton,\r\n showZeroAmountSrcButton: showZeroAmountSrcButton,\r\n handleZeroAmountButtonVisibility: handleZeroAmountButtonVisibility\r\n};\r\n","'use strict';\r\n\r\nvar helper = require('../../helper');\r\nvar srcListHelper = require('./srcListHelper');\r\nvar srcButtonHelper = require('./srcButtonHelper');\r\n\r\n/**\r\n * Returns Braintree SRC configs\r\n * @returns {Object} Braintree SRC configs\r\n */\r\nfunction getBraintreeSRCButtonConfigs() {\r\n var braintreeSrcButtonConfigs = null;\r\n var $srcButton = document.querySelector('.js_braintree_src_button') || document.querySelector('.js_braintree_src_account_button');\r\n\r\n try {\r\n braintreeSrcButtonConfigs = JSON.parse($srcButton.getAttribute('data-braintree-config'));\r\n } catch (error) {\r\n return braintreeSrcButtonConfigs;\r\n }\r\n\r\n return braintreeSrcButtonConfigs;\r\n}\r\n\r\n/**\r\n * Returns stringified SRC shipping address\r\n * @param {Object} shippingData SRC shipping\r\n * @returns {string} stringified shipping address\r\n */\r\nfunction createSrcShippingAddressData(shippingData) {\r\n var shippingAddress = {};\r\n shippingAddress.recipientName = shippingData.firstName + ' ' + shippingData.lastName;\r\n shippingAddress.phone = shippingData.phoneNumber;\r\n shippingAddress.countryCodeAlpha2 = shippingData.countryCode;\r\n shippingAddress.streetAddress = shippingData.streetAddress;\r\n shippingAddress.extendedAddress = shippingData.extendedAddress;\r\n shippingAddress.locality = shippingData.locality;\r\n shippingAddress.region = shippingData.region;\r\n shippingAddress.postalCode = decodeURIComponent(shippingData.postalCode);\r\n\r\n return JSON.stringify(shippingAddress);\r\n}\r\n\r\n/**\r\n * Returns stringified SRC billing address\r\n * @param {Object} billingData SRC billing\r\n * @param {Object} userData user data with email\r\n * @returns {string} stringified billing address\r\n */\r\nfunction createSrcBillingAddress(billingData, userData) {\r\n var srcBillingAddress = {};\r\n srcBillingAddress.recipientName = billingData.firstName + ' ' + billingData.lastName;\r\n srcBillingAddress.phone = billingData.phoneNumber;\r\n srcBillingAddress.countryCodeAlpha2 = billingData.countryCode;\r\n srcBillingAddress.streetAddress = billingData.streetAddress;\r\n srcBillingAddress.extendedAddress = billingData.streetAddress;\r\n srcBillingAddress.locality = billingData.locality;\r\n srcBillingAddress.region = billingData.region;\r\n srcBillingAddress.postalCode = decodeURIComponent(billingData.postalCode);\r\n srcBillingAddress.email = userData.userEmail;\r\n\r\n return JSON.stringify(srcBillingAddress);\r\n}\r\n\r\n/**\r\n * Creates SRC checkout form data\r\n * @param {Object} srcCheckoutFormData SRC form data\r\n * @param {Object} srcResponseData payload from SRC\r\n * @returns {Object} SRC Checkout Form with appended SRC data\r\n */\r\nfunction createSrcCheckoutFormData(srcCheckoutFormData, srcResponseData) {\r\n var csrfToken = document.querySelector('.braintree-cart-buttons-wrap #csrf_token');\r\n\r\n var cardDescription = srcResponseData.details.cardType + ' ' + srcResponseData.description;\r\n var deviceData = document.querySelector('input[name=braintreeSrcDeviceDataInput]').value;\r\n var shippingAddressData = createSrcShippingAddressData(srcResponseData.shippingAddress);\r\n\r\n srcCheckoutFormData.append(csrfToken.name, csrfToken.value);\r\n srcCheckoutFormData.append('braintreeSrcNonce', srcResponseData.nonce);\r\n srcCheckoutFormData.append('braintreeSrcDeviceDataInput', deviceData);\r\n srcCheckoutFormData.append('braintreeSrcShippingAddress', shippingAddressData || '{}');\r\n srcCheckoutFormData.append('braintreeSrcCardDescription', cardDescription);\r\n srcCheckoutFormData.append('braintreeSrcCardType', srcResponseData.details.cardType);\r\n srcCheckoutFormData.append('braintreeSrcCreditCardNumber', '************' + srcResponseData.details.lastFour);\r\n\r\n return srcCheckoutFormData;\r\n}\r\n\r\n/**\r\n * Creates SRC form data\r\n * @param {Object} responseData data received after SRC tokenize\r\n * @param {string} paymentMethodName SRC payment method name\r\n * @returns {Object} SRC payment form data\r\n */\r\nfunction createSrcFormData(responseData, paymentMethodName) {\r\n var srcData = {};\r\n var checkoutFormFields = document.querySelector('.braintree-cart-buttons-wrap').getAttribute('data-checkout-form-fields');\r\n\r\n srcData.firstName = responseData.userData.userFirstName;\r\n srcData.lastName = responseData.userData.userLastName;\r\n srcData.address1 = responseData.billingAddress.streetAddress;\r\n srcData.address2 = responseData.billingAddress.extendedAddress || '';\r\n srcData.city = responseData.billingAddress.locality;\r\n srcData.postalCode = decodeURIComponent(responseData.billingAddress.postalCode);\r\n srcData.stateCode = responseData.billingAddress.region;\r\n srcData.country = responseData.billingAddress.countryCode;\r\n srcData.email = responseData.userData.userEmail;\r\n srcData.phone = responseData.billingAddress.phoneNumber;\r\n srcData.paymentMethod = paymentMethodName;\r\n\r\n return helper.createPaymentFormData(checkoutFormFields, srcData);\r\n}\r\n\r\n/**\r\n * Updates Storefront billing data form with SRC data\r\n * @param {Object} srcBillingData SRC billing address data/phone/email\r\n */\r\nfunction updateStorefrontBillingData(srcBillingData) {\r\n var storefrontBillingData = JSON.parse(document.querySelector('.braintree-billing-payment-wrap').getAttribute('data-billing-form-fields-names'));\r\n storefrontBillingData.dwfrm_billing_addressFields_firstName = srcBillingData.firstName;\r\n storefrontBillingData.dwfrm_billing_addressFields_lastName = srcBillingData.lastName;\r\n storefrontBillingData.dwfrm_billing_addressFields_address1 = srcBillingData.streetAddress;\r\n storefrontBillingData.dwfrm_billing_addressFields_address2 = srcBillingData.extendedAddress || '';\r\n storefrontBillingData.dwfrm_billing_addressFields_city = srcBillingData.locality;\r\n storefrontBillingData.dwfrm_billing_addressFields_postalCode = decodeURIComponent(srcBillingData.postalCode);\r\n storefrontBillingData.dwfrm_billing_addressFields_states_stateCode = srcBillingData.region;\r\n storefrontBillingData.dwfrm_billing_addressFields_country = srcBillingData.countryCode;\r\n storefrontBillingData.dwfrm_billing_contactInfoFields_email = srcBillingData.email;\r\n storefrontBillingData.dwfrm_billing_contactInfoFields_phone = srcBillingData.phoneNumber;\r\n\r\n helper.updateBillingFormValues(storefrontBillingData);\r\n}\r\n\r\n/**\r\n * Handles all behavior related to the src content tab\r\n * SRC list (dropdown) change - actions for new/session account showing\r\n * @param {bollean} isSrcTabActive Whether Src tab is active\r\n */\r\nfunction srcContentTabHandler(isSrcTabActive) {\r\n var $srcAccountList = document.querySelector('#braintreeSrcAccountsList');\r\n var srcOptionId = $srcAccountList.value;\r\n var $srcButton = document.querySelector('.js_braintree_src_button');\r\n var $srcZeroAmountButton = document.querySelector('.braintree-billingpage-src-button-zero-amount');\r\n var $alertInfo = document.querySelector('.billingAddressInfoAlert');\r\n var $srcSessionAccount = document.querySelector('#sessionSrcAccount');\r\n\r\n switch (srcOptionId) {\r\n case 'newaccount':\r\n $srcButton.style.display = 'block';\r\n $srcZeroAmountButton.style.display = 'block';\r\n $alertInfo.style.display = 'block';\r\n\r\n if (isSrcTabActive) {\r\n helper.continueButtonToggle(true);\r\n }\r\n\r\n srcListHelper.setIsHideContinueButtonAttr(true);\r\n // Case when registered user and vaulting is enabled\r\n srcListHelper.handleSaveSrcAccountCheckbox($srcSessionAccount, true);\r\n break;\r\n default:\r\n $srcButton.style.display = 'none';\r\n $srcZeroAmountButton.style.display = 'none';\r\n $alertInfo.style.display = 'none';\r\n\r\n helper.continueButtonToggle(false);\r\n srcListHelper.setIsHideContinueButtonAttr(false);\r\n // Case when registered user and vaulting is enabled\r\n srcListHelper.handleSaveSrcAccountCheckbox($srcSessionAccount, JSON.parse($srcSessionAccount.getAttribute('data-save')));\r\n }\r\n}\r\n\r\n/**\r\n * Treats the behavior of the SRC button in the SRC tab based on the total cost\r\n * Shows/hides the required SRC button if the total value is/isn't 0\r\n * @param {DOMElement} totalAmountElement DOM Element that includes the total cost\r\n * @param {Object} errorHandlingModel ErrorHandling cart or checkout model\r\n */\r\nfunction zeroAmountSrcButtonBehavior(totalAmountElement, errorHandlingModel) {\r\n var $braintreeCartZeroAmountSrcButton = document.querySelector('.braintree-cart-src-button-zero-amount');\r\n var $braintreeBillingPageZeroAmountSrcButton = document.querySelector('.braintree-billingpage-src-button-zero-amount');\r\n var totalAmount = Number.parseFloat(totalAmountElement.textContent.slice(1));\r\n\r\n // Add event listener for cart zero amount button\r\n if ($braintreeCartZeroAmountSrcButton) {\r\n srcButtonHelper.addZeroAmountButtonEventListenerOnCart($braintreeCartZeroAmountSrcButton, errorHandlingModel);\r\n }\r\n\r\n // Add event listener for checkout zero amount button\r\n if ($braintreeBillingPageZeroAmountSrcButton) {\r\n srcButtonHelper.addZeroAmountButtonEventListenerOnCheckout($braintreeBillingPageZeroAmountSrcButton, errorHandlingModel);\r\n }\r\n\r\n // Handles whether show or hide zero amount button\r\n srcButtonHelper.handleZeroAmountButtonVisibility(totalAmount);\r\n\r\n // Creates a mutation obserber for total amount element\r\n srcButtonHelper.initTotalAmountElementObserver(totalAmountElement);\r\n}\r\n\r\nmodule.exports = {\r\n getBraintreeSRCButtonConfigs,\r\n createSrcShippingAddressData,\r\n createSrcBillingAddress,\r\n createSrcFormData,\r\n updateStorefrontBillingData,\r\n srcContentTabHandler,\r\n createSrcCheckoutFormData,\r\n zeroAmountSrcButtonBehavior\r\n};\r\n","var helper = require('../../helper');\r\n\r\nvar $srcAccountList = document.querySelector('#braintreeSrcAccountsList');\r\nvar $srcButton = document.querySelector('.js_braintree_src_button');\r\nvar $accoutnListBlock = document.querySelector('.braintree_used_src_account');\r\nvar $alertInfo = document.querySelector('.billingAddressInfoAlert');\r\nvar $saveSRCAccountCheckbox = document.querySelector('#braintreeSaveSRCAccount');\r\nvar $saveSRCAccountCheckboxContainter = document.querySelector('#braintreeSaveSRCContainer');\r\n\r\n/**\r\n * Sets value to data-paypal-is-hide-continue-button attribute\r\n * @param {boolean} value true/false\r\n */\r\nfunction setIsHideContinueButtonAttr(value) {\r\n var $srcContent = document.querySelector('.js_braintree_srcContent');\r\n\r\n $srcContent.setAttribute('data-paypal-is-hide-continue-button', value);\r\n}\r\n\r\n/**\r\n * Handles actions based on selected value in SRC dropdown for checkout view\r\n */\r\nfunction srsListStateHandler() {\r\n var srcOptionId = $srcAccountList.value;\r\n switch (srcOptionId) {\r\n case 'newaccount':\r\n\r\n if ($alertInfo) {\r\n $alertInfo.style.display = 'block';\r\n }\r\n\r\n $accoutnListBlock.style.display = 'none';\r\n break;\r\n default:\r\n $srcButton.style.display = 'none';\r\n\r\n if ($alertInfo) {\r\n $alertInfo.style.display = 'none';\r\n }\r\n\r\n helper.continueButtonToggle(false);\r\n setIsHideContinueButtonAttr(false);\r\n }\r\n}\r\n\r\n/**\r\n * Get stored card by card type and last four digits\r\n * @param {string} cardType card type\r\n * @param {string} lastFour last four card digits\r\n * @returns {Object} jquery object of found stored card\r\n */\r\nfunction getStoredCardByData(cardType, lastFour) {\r\n var $foundCard;\r\n\r\n $('.js_stored_card').each(function (_, $el) {\r\n var $card = $($el);\r\n var storedCardType = $card.data('type').replace(/\\s/g, '').toLowerCase();\r\n var storedCardLastFour = $card.data('last-four').toString();\r\n\r\n if (storedCardType === cardType && storedCardLastFour === lastFour) {\r\n $foundCard = $card;\r\n }\r\n });\r\n\r\n return $foundCard;\r\n}\r\n\r\n/**\r\n * Checks whether SRC session card is already stored\r\n * @param {string} cardType card type\r\n * @param {string} lastFour last four card digits\r\n * @returns {boolean} \"true/false\" value whether session card is already stored\r\n */\r\nfunction isSessionCardAlreadyStored(cardType, lastFour) {\r\n var $storedCard = getStoredCardByData(cardType, lastFour);\r\n var flag = false;\r\n\r\n if ($storedCard) {\r\n flag = true;\r\n }\r\n\r\n return flag;\r\n}\r\n\r\n/**\r\n * Sets value to \"Save SRC account\" checkbox\r\n * @param {Element} srcSessionAccount element from which we recognize session account existence\r\n * @param {boolean} value true/false\r\n */\r\nfunction handleSaveSrcAccountCheckbox(srcSessionAccount, value) {\r\n var isSrcSessionCardExist = srcSessionAccount.value !== '';\r\n var isAddNewOptionSelected = $srcAccountList.value === 'newaccount';\r\n\r\n if ($saveSRCAccountCheckbox) {\r\n // In case if session account exists and is chosen in dropdown\r\n // we check whether used SRC card is already stored\r\n // if card is already stored \"save\" checkbox is hidden and unchecked\r\n if (isSrcSessionCardExist && !isAddNewOptionSelected) {\r\n var $braintreeSrcCardType = document.querySelector('#braintreeSrcCardType');\r\n var $braintreeSrcLastFourDigits = document.querySelector('#braintreeSrcLastFourDigits');\r\n var sessionCardType = $braintreeSrcCardType.value;\r\n var sessionCardLastFour = $braintreeSrcLastFourDigits.value;\r\n sessionCardType = sessionCardType.replace(/\\s/g, '').toLowerCase();\r\n\r\n var isSrcSessionCardAlreadyStored = isSessionCardAlreadyStored(sessionCardType, sessionCardLastFour);\r\n\r\n if (isSrcSessionCardAlreadyStored) {\r\n $saveSRCAccountCheckbox.checked = false;\r\n $saveSRCAccountCheckboxContainter.style.display = 'none';\r\n }\r\n\r\n return;\r\n }\r\n // In case if session card does not exist/user chooses option \"Add New\"\r\n // or session card is not stored yet\r\n // checkbox is checked and shown\r\n $saveSRCAccountCheckboxContainter.style.display = 'block';\r\n $saveSRCAccountCheckbox.checked = value;\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n setIsHideContinueButtonAttr,\r\n srsListStateHandler,\r\n handleSaveSrcAccountCheckbox\r\n};\r\n","'use strict';\r\n\r\nvar srcConstants = require('../constants/srcConstants');\r\nvar paymentMethodGeneral = require('../../paymentMethodGeneral');\r\n\r\n/**\r\n * Gets SRC flow name(corresponding page)\r\n * @returns {string} Flow id(page) account/cart/billing\r\n */\r\nfunction getSrcFlowName() {\r\n var srcFlowName;\r\n var isSrcEnabledOnAccountPage = Boolean(document.querySelector('.js_braintree_addSrcAccountForm'));\r\n var isSrcEnabledOnCartPage = Boolean(document.querySelector('.braintree-cart-src-button'));\r\n var isSrcEnabledOnBillingPage = Boolean(document.querySelector('.js_braintree_srcContent'));\r\n\r\n if (isSrcEnabledOnAccountPage) {\r\n srcFlowName = srcConstants.FLOW_NAME_ACCOUNT;\r\n } else if (isSrcEnabledOnCartPage) {\r\n srcFlowName = srcConstants.FLOW_NAME_CART_CHECKOUT;\r\n } else if (isSrcEnabledOnBillingPage) {\r\n srcFlowName = srcConstants.FLOW_NAME_BILLING_CHECKOUT;\r\n }\r\n\r\n return srcFlowName;\r\n}\r\n\r\n/**\r\n * Makes call to checkoutFrom Cart endpoint\r\n * @param {Object} srcCheckoutFormData SRC form data passed to server side\r\n * @param {string} email SRC email from response\r\n * @param {Object} errorHandlingCartModel Error handling cart model\r\n * @returns {ajax} call to checkoutFrom Cart endpoint\r\n */\r\nfunction checkoutFromCartCall(srcCheckoutFormData, email, errorHandlingCartModel) {\r\n var $braintreeCartButtons = document.querySelector('.braintree-cart-buttons-wrap');\r\n var checkoutFromCartUrl = $braintreeCartButtons.getAttribute('data-checkout-from-cart-url');\r\n var placeOrderUrl = $braintreeCartButtons.getAttribute('data-checkout-placeorder-url');\r\n // Submit customer form with email (CheckoutServices-SubmitCustomer)\r\n // as we skip step \"login via guest/registered user\" while express checkout\r\n // email is set only in case of guest checkout and if email is not already set\r\n paymentMethodGeneral.submitCustomerForm(email);\r\n\r\n return $.ajax({\r\n type: 'POST',\r\n url: checkoutFromCartUrl,\r\n data: srcCheckoutFormData,\r\n contentType: false,\r\n processData: false\r\n })\r\n .done(function (data) {\r\n if (data.error) {\r\n errorHandlingCartModel.handleCheckoutFromCartError(data);\r\n }\r\n\r\n sessionStorage.setItem('pageState', 'cart');\r\n window.location.href = placeOrderUrl;\r\n })\r\n .fail(function (err) {\r\n if (err && err.redirectUrl) {\r\n window.location.href = err.redirectUrl;\r\n }\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n getSrcFlowName,\r\n checkoutFromCartCall\r\n};\r\n","'use strict';\r\n\r\nvar SrcBaseModel = require('./srcBaseModel');\r\nvar creditCardVaultManager = require('../../creditcard/components/creditCardVaultManager');\r\n\r\n/**\r\n * Check whether new card is presented on storefront and in VaultMgr. If yes - render error message.\r\n * @param {Promise} clientInstancePromise client instance promise\r\n * @param {Object} btPayload payload from Braintree\r\n * @param {Object} srcMessages object with errors\r\n * @returns {Promise} promise with reject status in case if new card already exists in VaultMgr and on Storefront (buyer's wallet)\r\n */\r\nfunction rejectIfCardExistsInVault(clientInstancePromise, btPayload, srcMessages) {\r\n var payloadDetails = btPayload.details;\r\n var lastFour = payloadDetails.lastFour.toString();\r\n var type = payloadDetails.cardType.toLowerCase();\r\n\r\n return creditCardVaultManager.isNewCardCanBeStored(clientInstancePromise, lastFour, type)\r\n .then(function (newCardCanBeStored) {\r\n if (!newCardCanBeStored) {\r\n // eslint-disable-next-line no-undef\r\n return Promise.reject(srcMessages.CARD_ALREADY_EXIST_ERROR_MESSAGE);\r\n }\r\n });\r\n}\r\n\r\n// See description of \"srcBaseModel\" for more info\r\nfunction SrcAccountModel(clientInstancePromise, srcButtonConfigurations, $braintreeSrcDeviceDataInput, loader, errorHandlingBaseModel) {\r\n SrcBaseModel.call(\r\n this,\r\n clientInstancePromise,\r\n srcButtonConfigurations,\r\n $braintreeSrcDeviceDataInput,\r\n loader,\r\n errorHandlingBaseModel\r\n );\r\n}\r\n\r\nSrcAccountModel.prototype = Object.create(SrcBaseModel.prototype);\r\n\r\n// See description of \"srcBaseModel\" for more info\r\n// Method set nonce data in to hidden input and submit the form to the server\r\nSrcAccountModel.prototype.onTokenizeCallback = function (srcPayload) {\r\n SrcBaseModel.prototype.onTokenizeCallback.call(this, srcPayload);\r\n var srcLoader = this.loader;\r\n var errorHandlingBaseModel = this.errorHandlingModel;\r\n var $addSrcAccountForm = $('.js_braintree_addSrcAccountForm');\r\n var addSrcFormUrl = $addSrcAccountForm.attr('action');\r\n var $srcNonce = document.querySelector('#braintreeSrcNonce');\r\n\r\n srcLoader.show();\r\n\r\n $srcNonce.value = srcPayload.nonce;\r\n\r\n return rejectIfCardExistsInVault(this.clientInstancePromise, srcPayload, this.srcButtonConfigurations.messages)\r\n .then(function () {\r\n var formData = $addSrcAccountForm.serialize();\r\n\r\n return $.ajax({\r\n url: addSrcFormUrl,\r\n type: 'post',\r\n dataType: 'json',\r\n data: formData\r\n })\r\n .then(function (response) {\r\n if (!response.success) {\r\n errorHandlingBaseModel.showErrorByMessage(response.error);\r\n } else {\r\n location.href = response.redirectUrl;\r\n }\r\n });\r\n })\r\n .catch(function (error) {\r\n srcLoader.hide();\r\n errorHandlingBaseModel.showErrorByMessage(error);\r\n })\r\n .finally(function () {\r\n srcLoader.hide();\r\n });\r\n};\r\n\r\n// See description of \"srcBaseModel\" for more info\r\nSrcAccountModel.prototype.initSrcButton = function () {\r\n var SrcAccountModelInstance = this;\r\n\r\n SrcAccountModelInstance.braintreeSrcSdkButtonInit(SrcAccountModelInstance)\r\n .catch(function (error) {\r\n SrcAccountModelInstance.errorHandlingModel.srcErrorHandler(error);\r\n });\r\n};\r\n\r\nmodule.exports = SrcAccountModel;\r\n","'use strict';\r\n\r\nvar braintreeSrcSDK = require('../braintreesdk/braintreeSrcSDK');\r\nvar braintreeGeneral = require('../../braintreeGeneral');\r\n\r\n/**\r\n * SRC Base Model constructor\r\n * @param {Promise} clientInstancePromise client instance promise\r\n * @param {Object} srcButtonConfigurations SRC button configs\r\n * @param {Object} $braintreeSrcDeviceDataInput BT SRC device data input\r\n * @param {Object} loader loader instance\r\n * @param {Object} errorHandlingModel Error handling instance\r\n */\r\nfunction SrcBaseModel(clientInstancePromise, srcButtonConfigurations, $braintreeSrcDeviceDataInput, loader, errorHandlingModel) {\r\n this.clientInstancePromise = clientInstancePromise;\r\n this.srcButtonConfigurations = srcButtonConfigurations;\r\n this.$braintreeSrcDeviceDataInput = $braintreeSrcDeviceDataInput;\r\n this.loader = loader;\r\n this.errorHandlingModel = errorHandlingModel;\r\n\r\n this.braintreeSrcSdkButtonInit = braintreeSrcSDK.visaCheckoutInitialized;\r\n\r\n // Prop which will be settled after calling of \"getBasketData\" method\r\n this.basketData = {\r\n amount: 0\r\n };\r\n}\r\n\r\n/**\r\n * Method is triggers when \"initSrcButton\" is called. Update total basket amount\r\n * @returns {Promise} Promise of get order data response\r\n */\r\nSrcBaseModel.prototype.updateBasketData = function () {\r\n var SrcBaseModelInstance = this;\r\n\r\n return $.ajax({\r\n url: this.srcButtonConfigurations.getOrderInfoUrl,\r\n type: 'get',\r\n dataType: 'json'\r\n })\r\n .done(function (data) {\r\n SrcBaseModelInstance.basketData.amount = data.amount;\r\n })\r\n .fail(function () {\r\n window.location.reload();\r\n });\r\n};\r\n\r\n/**\r\n * Retrun Init options which are used in SRC initialization\r\n * @returns {Object} object with Init options\r\n */\r\nSrcBaseModel.prototype.getInitOptionsObject = function () {\r\n return {\r\n paymentRequest: {\r\n currencyCode: this.srcButtonConfigurations.options.currency || 'USD',\r\n subtotal: this.basketData.amount\r\n },\r\n settings: {\r\n locale: this.srcButtonConfigurations.settings.locale,\r\n payment: {\r\n cardBrands: this.srcButtonConfigurations.settings.cardBrands,\r\n acceptCanadianVisaDebit: this.srcButtonConfigurations.settings.acceptCanadianVisaDebit\r\n },\r\n shipping: {\r\n collectShipping: this.srcButtonConfigurations.options.isShippingAddressRequired\r\n }\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * Callback which is triggered when SRC approved payment on its side\r\n * This method will be overridden in scope of each child model\r\n * @param {Object} srcPayload payload from SRC\r\n */\r\n// eslint-disable-next-line no-unused-vars\r\nSrcBaseModel.prototype.onTokenizeCallback = function (srcPayload) {\r\n};\r\n\r\n/**\r\n * Method add fraud data in to hidden input (if enabled)\r\n * @returns {Promise} with the result of operation\r\n */\r\nSrcBaseModel.prototype.setFraudData = function () {\r\n // eslint-disable-next-line no-undef\r\n var result = Promise.resolve({});\r\n var SrcBaseModelInstance = this;\r\n var $braintreeSrcDeviceDataInput = SrcBaseModelInstance.$braintreeSrcDeviceDataInput;\r\n\r\n if (this.srcButtonConfigurations.isFraudToolsEnabled && $braintreeSrcDeviceDataInput) {\r\n result = braintreeGeneral.collectFraudData(this.clientInstancePromise)\r\n .then(function (dataCollectorInstance) {\r\n SrcBaseModelInstance.$braintreeSrcDeviceDataInput.value = dataCollectorInstance.deviceData;\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Method is called when we want to init SRC button\r\n * @returns {Promise} Promise with the result of the operation\r\n */\r\nSrcBaseModel.prototype.initSrcButton = function () {\r\n var SrcBaseModelInstance = this;\r\n\r\n return SrcBaseModelInstance.updateBasketData()\r\n .then(function () {\r\n return SrcBaseModelInstance.setFraudData()\r\n .then(function () {\r\n return SrcBaseModelInstance.braintreeSrcSdkButtonInit(SrcBaseModelInstance);\r\n });\r\n })\r\n .catch(function (error) {\r\n SrcBaseModelInstance.errorHandlingModel.srcErrorHandler(error);\r\n });\r\n};\r\n\r\nmodule.exports = SrcBaseModel;\r\n","'use strict';\r\n\r\nvar SrcBaseModel = require('./srcBaseModel');\r\nvar srcHelper = require('../helpers/srcHelper');\r\nvar srcPaymentProcessingHelper = require('../helpers/srcPaymentProcessingHelper');\r\n\r\n// See description of \"srcBaseModel\" for more info\r\nfunction SrcCartModel(clientInstancePromise, srcButtonConfigurations, $braintreeSrcDeviceDataInput, loader, errorHandlingCartModel) {\r\n SrcBaseModel.call(\r\n this,\r\n clientInstancePromise,\r\n srcButtonConfigurations,\r\n $braintreeSrcDeviceDataInput,\r\n loader,\r\n errorHandlingCartModel\r\n );\r\n}\r\n\r\nSrcCartModel.prototype = Object.create(SrcBaseModel.prototype);\r\n\r\n// See description of \"srcBaseModel\" for more info\r\n// Add nonce and billing data to the from and submit to the \"CheckoutService-SubmitPayment\" endpoint\r\nSrcCartModel.prototype.onTokenizeCallback = function (srcPayload) {\r\n SrcBaseModel.prototype.onTokenizeCallback.call(this, srcPayload);\r\n\r\n this.loader.show();\r\n\r\n var $srcButton = document.querySelector('.js_braintree_src_button');\r\n\r\n srcPayload.billingAddressString = srcHelper.createSrcBillingAddress(srcPayload.billingAddress, srcPayload.userData);\r\n\r\n var paymentMethodName = JSON.parse($srcButton.getAttribute('data-braintree-config')).paymentMethodName;\r\n var srcFormData = srcHelper.createSrcFormData(srcPayload, paymentMethodName);\r\n var srcCheckoutFormData = srcHelper.createSrcCheckoutFormData(srcFormData, srcPayload);\r\n\r\n srcPaymentProcessingHelper.checkoutFromCartCall(srcCheckoutFormData, srcPayload.userData.userEmail, this.errorHandlingModel)\r\n .always(function () {\r\n this.loader.hide();\r\n });\r\n};\r\n\r\nmodule.exports = SrcCartModel;\r\n","'use strict';\r\n\r\nvar SrcBaseModel = require('./srcBaseModel');\r\n\r\n// Helpers\r\nvar srcHelper = require('../helpers/srcHelper');\r\nvar helper = require('../../helper');\r\n\r\nvar srcSessionAccountComponent = require('../components/srcSessionAccount');\r\n\r\n// See description of \"srcBaseModel\" for more info\r\nfunction SrcCheckoutModel(clientInstancePromise, srcButtonConfigurations, $braintreeSrcDeviceDataInput, loader, errorHandlingCheckoutModel) {\r\n SrcBaseModel.call(\r\n this,\r\n clientInstancePromise,\r\n srcButtonConfigurations,\r\n $braintreeSrcDeviceDataInput,\r\n loader,\r\n errorHandlingCheckoutModel\r\n );\r\n}\r\n\r\nSrcCheckoutModel.prototype = Object.create(SrcBaseModel.prototype);\r\n\r\n// See description of \"srcBaseModel\" for more info\r\n// Add nonce and billing data to the from and trigger click on \"SubmitPayment\" button\r\nSrcCheckoutModel.prototype.onTokenizeCallback = function (srcPayload) {\r\n SrcBaseModel.prototype.onTokenizeCallback.call(this, srcPayload);\r\n\r\n this.loader.show();\r\n\r\n // Remove all other Payments session payments\r\n helper.removeActiveSessionPayment();\r\n\r\n var $srcNonce = document.querySelector('#braintreeSRCNonce');\r\n var $srcBillingAddress = document.querySelector('#braintreeSrcBillingAddress');\r\n var $continueButton = document.querySelector('button.submit-payment');\r\n\r\n var srcBillingData = srcPayload.billingAddress;\r\n\r\n srcPayload.billingAddressString = srcHelper.createSrcBillingAddress(srcPayload.billingAddress, srcPayload.userData);\r\n\r\n $srcNonce.value = srcPayload.nonce;\r\n srcBillingData.email = srcPayload.userData.userEmail;\r\n $srcBillingAddress.value = JSON.stringify(srcBillingData);\r\n\r\n srcSessionAccountComponent.showSrcSessionAccount(srcPayload);\r\n\r\n // Updating Storefront Billing Form data with SRC Billing\r\n srcHelper.updateStorefrontBillingData(srcBillingData);\r\n\r\n $continueButton.click();\r\n\r\n this.loader.hide();\r\n};\r\n\r\nmodule.exports = SrcCheckoutModel;\r\n","'use strict';\r\n\r\nvar braintreeGeneral = require('../braintreeGeneral');\r\nvar srcHelper = require('./helpers/srcHelper');\r\n\r\n// Components\r\nvar srcAccount = require('./components/srcAccount');\r\nvar srcCardList = require('./components/srcList');\r\nvar checkoutComponent = require('./components/srcCheckout');\r\nvar cartComponent = require('./components/srcCart');\r\n\r\n\r\nvar btClientInstancePromise;\r\n\r\n/**\r\n * Inits SRC functionality on the Account Page\r\n */\r\nfunction initAccount() {\r\n srcAccount.init(btClientInstancePromise);\r\n}\r\n\r\n/**\r\n * Inits SRC functionality on the Cart Page\r\n */\r\nfunction initCartCheckout() {\r\n cartComponent.init(btClientInstancePromise);\r\n}\r\n\r\n/**\r\n * Inits SRC functionality on the Billing Page\r\n */\r\nfunction initBillingCheckout() {\r\n checkoutComponent.init(btClientInstancePromise);\r\n srcCardList.init();\r\n}\r\n\r\n/**\r\n * Inits braintreeSrcModelBuilder on SRC level\r\n */\r\nfunction init() {\r\n var braintreeSrcConfigs = srcHelper.getBraintreeSRCButtonConfigs();\r\n var clientToken;\r\n\r\n if (braintreeSrcConfigs) {\r\n clientToken = braintreeSrcConfigs.clientToken;\r\n btClientInstancePromise = braintreeGeneral.createClientInstance(clientToken);\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n initAccount,\r\n initCartCheckout,\r\n initBillingCheckout,\r\n init\r\n};\r\n","'use strict';\r\n\r\nvar braintreeVenmoSDK = require('./braintreeVenmoSDK');\r\nvar braintreeGeneral = require('../../braintreeGeneral');\r\nvar venmoProcessing = require('../components/venmoProcessing');\r\nvar venmoHelper = require('../helpers/venmoHelper');\r\nvar ErrorHandlingBaseModel = require('../errorhandler/errorHandlingBaseModel');\r\n\r\n/* global Promise braintree $ */\r\n\r\n// global variables\r\nvar btClientInstancePromise;\r\n\r\n/**\r\n * Init Braintree Venmo model\r\n * @param {Promise} braintreeClientInstancePromise Braintreee client instance promise\r\n */\r\nfunction init(braintreeClientInstancePromise) {\r\n braintreeVenmoSDK.init(braintreeClientInstancePromise);\r\n\r\n btClientInstancePromise = braintreeClientInstancePromise;\r\n}\r\n\r\n/**\r\n * Returns fraud data from dataCollector payload\r\n * @returns {Object} Payload with fraud data\r\n */\r\nfunction collectFraudData() {\r\n var response;\r\n\r\n try {\r\n response = braintreeGeneral.collectFraudData(btClientInstancePromise);\r\n } catch (error) {\r\n response = Promise.resolve({\r\n customMessage: 'Fraud Data collection isn`t enabled via Custom Site Preference'\r\n });\r\n }\r\n\r\n return response;\r\n}\r\n\r\n/**\r\n * Checks whether browser supports Venmo\r\n * @returns {Promise} with isBrowserSupported value\r\n */\r\nfunction isBrowserSupported() {\r\n return braintreeVenmoSDK.isBrowserSupported();\r\n}\r\n\r\n/**\r\n * Inits Venmo button\r\n * @param {Element} $venmoButton Venmo button element\r\n * @param {Booleean} isBillingPage \"true/false\" value to identify flow page\r\n * @returns {Promise} Promise resolved with a tokenized payload\r\n *\r\n */\r\nfunction initVenmo($venmoButton, isBillingPage) {\r\n return braintreeVenmoSDK.createVenmo()\r\n .then(function (venmoInstance) {\r\n $venmoButton.addEventListener('click', function () {\r\n // Check billing form to close Venmo pop-up and prevent tokenize action if any error (empty email input)\r\n // Check if amount is not zero to close Venmo pop-up and show appropriate error\r\n if (isBillingPage && (!venmoHelper.checkBillingForm() || venmoHelper.checkZeroAmount())) {\r\n return;\r\n }\r\n\r\n return braintreeVenmoSDK.tokenize(venmoInstance)\r\n .then(function (payload) {\r\n return venmoProcessing.processVenmo(payload);\r\n })\r\n .catch(function (error) {\r\n var braintreeVenmoConfig = JSON.parse($venmoButton.getAttribute('data-braintree-config'));\r\n var errorHandlingBaseModel = new ErrorHandlingBaseModel(braintreeVenmoConfig.messages);\r\n errorHandlingBaseModel.showErrorByMessage(error.message);\r\n });\r\n });\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n init,\r\n collectFraudData,\r\n isBrowserSupported,\r\n initVenmo\r\n};\r\n","'use strict';\r\n\r\nvar braintreeVenmoModel = require('./braintreeVenmoModel');\r\nvar braintreeGeneral = require('../../braintreeGeneral');\r\nvar venmoHelper = require('../helpers/venmoHelper');\r\n\r\n/**\r\n * Initialize Braintree Venmo Model. Pattern Builder is used\r\n * @returns {Object} object with boolean \"error\" flag and \"message\" attribute with error message\r\n */\r\nfunction init() {\r\n var braintreeVenmoButtonConfigs = venmoHelper.getBraintreeVenmoButtonConfigs();\r\n var clientToken;\r\n var btClientInstancePromise;\r\n var response = {\r\n error: false,\r\n message: '',\r\n btVenmoModel: null\r\n };\r\n\r\n if (braintreeVenmoButtonConfigs) {\r\n clientToken = braintreeVenmoButtonConfigs.clientToken;\r\n btClientInstancePromise = braintreeGeneral.createClientInstance(clientToken);\r\n\r\n braintreeVenmoModel.init(\r\n btClientInstancePromise\r\n );\r\n\r\n response.btVenmoModel = braintreeVenmoModel;\r\n } else {\r\n response.error = true;\r\n response.message = 'No Braintree Venmo Configurations';\r\n }\r\n\r\n return response;\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\n/* global braintreeUtils braintree $ */\r\n\r\nvar btClientInstancePromise;\r\nvar venmoClientInstance;\r\n\r\n/**\r\n * Checks whether browser supports Venmo\r\n * @returns {Promise} with isBrowserSupported value\r\n */\r\nfunction isBrowserSupported() {\r\n return btClientInstancePromise\r\n .then(function (btClientInstance) {\r\n venmoClientInstance = btClientInstance;\r\n\r\n return braintree.venmo.isBrowserSupported({\r\n allowNewBrowserTab: false,\r\n allowDesktop: true\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Creates Venmo instance\r\n * @returns {Promise} Promise resolved with Venmo instance\r\n */\r\nfunction createVenmo() {\r\n return braintree.venmo.create({\r\n client: venmoClientInstance,\r\n allowNewBrowserTab: false,\r\n ignoreHistoryChanges: true,\r\n allowDesktop: true\r\n });\r\n}\r\n/**\r\n * Tokenizes Venmo payment\r\n * @param {Object} venmoInstance Venmo instance\r\n * @returns {Promise} Promise resolved with tokenized payload\r\n */\r\nfunction tokenize(venmoInstance) {\r\n return venmoInstance.tokenize({ processResultsDelay: 10 });\r\n}\r\n\r\n/**\r\n * Inits braintreeVenmoSDK with client instance promise\r\n * @param {Promise} braintreeClientInstancePromise Braintree Venmo client instance promise\r\n */\r\nfunction init(braintreeClientInstancePromise) {\r\n btClientInstancePromise = braintreeClientInstancePromise;\r\n}\r\n\r\nmodule.exports = {\r\n init,\r\n isBrowserSupported,\r\n createVenmo,\r\n tokenize\r\n\r\n};\r\n","'use strict';\r\n\r\nvar helper = require('../../helper');\r\nvar loaderInstance = require('../../loaderHelper');\r\nvar venmoButton = require('../components/venmoButton');\r\nvar venmoHelper = require('../helpers/venmoHelper');\r\nvar ErrorHandlingBaseModel = require('../errorhandler/errorHandlingBaseModel');\r\n\r\nvar $venmoButton = document.querySelector('.js_braintree_accountVenmoButton');\r\nvar venmoLoader;\r\n\r\n/**\r\n * Makes Venmo account as default one\r\n * @param {Event} e event to identify target element\r\n */\r\nfunction makeDefaultVenmo(e) {\r\n var target = e.target;\r\n var url = target.getAttribute('data-make-default-url');\r\n var id = target.getAttribute('data-id');\r\n var paymentMethodID = document.querySelector('.venmo-accounts').getAttribute('data-payment-method-id');\r\n var $loaderContainter = document.querySelector('#' + target.getAttribute('data-loader'));\r\n var loader = loaderInstance($loaderContainter);\r\n // Hide venmo account error container\r\n var braintreeVenmoConfig = JSON.parse($venmoButton.getAttribute('data-braintree-config'));\r\n var errorHandlingBaseModel = new ErrorHandlingBaseModel(braintreeVenmoConfig.messages);\r\n errorHandlingBaseModel.hideError();\r\n\r\n loader.show();\r\n\r\n helper.setDefaultProperty({\r\n url: url,\r\n id: id,\r\n paymentMethodID: paymentMethodID,\r\n loader: loader\r\n });\r\n}\r\n\r\n/**\r\n * Remove Venmo account\r\n * @param {Event} e event to identify target element\r\n */\r\nfunction removeVenmoPayment(e) {\r\n var target = e.target;\r\n\r\n if (target && JSON.parse(target.getAttribute('data-is-remove-allowed'))) {\r\n var $loaderContainter = document.querySelector('#' + target.getAttribute('data-loader'));\r\n venmoLoader = loaderInstance($loaderContainter);\r\n venmoLoader.show();\r\n\r\n $.get(target.getAttribute('data-url') + '?UUID=' + target.getAttribute('data-id'))\r\n .then((data => {\r\n $('#uuid-' + data.UUID).remove();\r\n if (data.newDefaultAccount) {\r\n document.querySelector('#uuid-' + data.newDefaultAccount + ' span').style.fontWeight = 'bold';\r\n document.querySelector('#uuid-' + data.newDefaultAccount + ' button.braintree-make-default-card').style.display = 'none';\r\n }\r\n venmoLoader.hide();\r\n }))\r\n .fail(() => {\r\n location.reload();\r\n venmoLoader.hide();\r\n });\r\n } else {\r\n var removeIsNotAllowedMsg = target.getAttribute('data-message-remove-is-not-allowed');\r\n var braintreeVenmoConfig = $venmoButton ? JSON.parse($venmoButton.getAttribute('data-braintree-config')) : removeIsNotAllowedMsg;\r\n var errorHandlingBaseModel = new ErrorHandlingBaseModel(braintreeVenmoConfig.messages);\r\n errorHandlingBaseModel.showErrorByMessage(removeIsNotAllowedMsg);\r\n }\r\n}\r\n\r\n/**\r\n * Creates Venmo form data on account page\r\n * @param {string} nonce Braintree Venmo nonce\r\n * @param {string} userId Braintree Venmo userID\r\n * @returns {Object} object with Venmo form data\r\n */\r\nfunction createVenmoAccountFormData(nonce, userId) {\r\n var venmoAccountFormFields = $venmoButton.getAttribute('data-venmo-account-form-fields');\r\n var csrfToken = document.querySelector('.js_braintree_accountVenmoButton_wrapper #csrf_token');\r\n\r\n var venmoAccountFormData = helper.createPaymentFormData(venmoAccountFormFields, {\r\n nonce: nonce,\r\n userId: userId\r\n });\r\n\r\n venmoAccountFormData.append(csrfToken.name, csrfToken.value);\r\n\r\n return venmoAccountFormData;\r\n}\r\n\r\n/**\r\n * Stores new Venmo account\r\n * @param {Object} data tokenized payload data with Venmo nonce\r\n * @returns {ajax} call to Braintree-AccountAddVenmoHandle endpoint\r\n */\r\nfunction storeNewVenmoAccount(data) {\r\n var venmoAddAccountHandlerUrl = $venmoButton.getAttribute('data-venmo-add-account-handler');\r\n var venmoAccountFormData = createVenmoAccountFormData(data.nonce, data.details.username);\r\n\r\n venmoLoader.show();\r\n\r\n return $.ajax({\r\n type: 'POST',\r\n url: venmoAddAccountHandlerUrl,\r\n data: venmoAccountFormData,\r\n contentType: false,\r\n processData: false\r\n })\r\n .then((paymentData) => {\r\n venmoHelper.hideVenmoAccountBtn();\r\n venmoLoader.hide();\r\n\r\n $.get(paymentData.renderAccountsUrl)\r\n .then((tplData => {\r\n document.querySelector('.venmo-accounts').innerHTML = tplData;\r\n document.querySelectorAll('.venmo-accounts .remove-bt-payment').forEach(function (el) {\r\n el.addEventListener('click', removeVenmoPayment);\r\n });\r\n }));\r\n })\r\n .fail(({ responseJSON }) => {\r\n venmoLoader.hide();\r\n\r\n var braintreeVenmoConfig = JSON.parse($venmoButton.getAttribute('data-braintree-config'));\r\n var errorHandlingBaseModel = new ErrorHandlingBaseModel(braintreeVenmoConfig.messages);\r\n errorHandlingBaseModel.showErrorByMessage(responseJSON.error);\r\n });\r\n}\r\n\r\n/**\r\n * Inits Venmo functionality\r\n * @param {Object} btVenmoModel Braintree Venmo model\r\n */\r\nfunction init(btVenmoModel) {\r\n var isVenmoButtonEnabledOnAccountPage = Boolean(document.querySelector('.js_braintree_accountVenmoButton'));\r\n var isVenmoAccountBlockExists = Boolean(document.querySelector('.venmo-accounts'));\r\n var $braintreeVenmoLoader = document.querySelector('#braintreeVenmoAccLoader');\r\n\r\n venmoLoader = loaderInstance($braintreeVenmoLoader);\r\n\r\n if (isVenmoButtonEnabledOnAccountPage || isVenmoAccountBlockExists) {\r\n // \"Make default\" button functionality initiation\r\n $('.venmo-accounts').on('click', '.braintree-make-default-card', makeDefaultVenmo);\r\n // \"Remove\" button functionality initiation\r\n $('.venmo-accounts').on('click', '.remove-bt-payment', removeVenmoPayment);\r\n }\r\n\r\n if (isVenmoButtonEnabledOnAccountPage) {\r\n $('.add-venmo-account').click(function () {\r\n // Hide venmo account error container\r\n var braintreeVenmoConfig = JSON.parse($venmoButton.getAttribute('data-braintree-config'));\r\n var errorHandlingBaseModel = new ErrorHandlingBaseModel(braintreeVenmoConfig.messages);\r\n errorHandlingBaseModel.hideError();\r\n\r\n venmoHelper.showVenmoAccountBtn();\r\n\r\n if (!window.venmoAccountButtonInited) {\r\n window.venmoAccountButtonInited = true;\r\n\r\n venmoButton.init(btVenmoModel, $venmoButton);\r\n }\r\n });\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n init,\r\n storeNewVenmoAccount\r\n};\r\n","'use strict';\r\n\r\nvar venmoHelper = require('../helpers/venmoHelper');\r\nvar ErrorHandlingBaseModel = require('../errorhandler/errorHandlingBaseModel');\r\n\r\n/**\r\n * General validation of params needed for initialization of Venmo button\r\n * @param {Object} braintreeVenmoConfig Braintree Venmo button configurations (they came from server via data attr)\r\n * @returns {Object} object with \"error\" boolean flag and array of error messages from \"messages\" attr\r\n */\r\nfunction generalVenmoValidation(braintreeVenmoConfig) {\r\n var response = {\r\n error: false,\r\n messages: ''\r\n };\r\n\r\n try {\r\n var isBraintreeVenmoConfigValid = typeof braintreeVenmoConfig !== 'object' || braintreeVenmoConfig !== null;\r\n\r\n if (!isBraintreeVenmoConfigValid) {\r\n response.error = true;\r\n response.messages = 'Venmo button has not valid data-braintree-config';\r\n }\r\n } catch (error) {\r\n response.error = true;\r\n response.messages = error;\r\n }\r\n\r\n return response;\r\n}\r\n\r\n/**\r\n * Init Venmo button functionality\r\n * @param {Object} btVenmoModel Braintree Venmo model\r\n * @param {Object} $venmoButton Venmo button element\r\n * @param {boolean} isBillingPage value to identify flow page\r\n */\r\nfunction init(btVenmoModel, $venmoButton, isBillingPage) {\r\n var braintreeVenmoConfig = JSON.parse($venmoButton.getAttribute('data-braintree-config'));\r\n var errorHandlingBaseModel = new ErrorHandlingBaseModel(braintreeVenmoConfig.messages);\r\n\r\n try {\r\n var generalValidation = generalVenmoValidation(braintreeVenmoConfig);\r\n\r\n if (generalValidation.error) {\r\n if (generalValidation.messages.length) {\r\n throw generalValidation.messages;\r\n }\r\n }\r\n\r\n // Fraud Data collecting\r\n // For more details go inside \"btVenmoModel.collectFraudData\" function logic\r\n btVenmoModel.collectFraudData()\r\n .then(function (fraudDataPayload) {\r\n venmoHelper.setVenmoDeviceData(fraudDataPayload.deviceData);\r\n\r\n return btVenmoModel.isBrowserSupported()\r\n .then(function (isBrowserSupported) {\r\n if (isBrowserSupported) {\r\n return btVenmoModel.initVenmo($venmoButton, isBillingPage);\r\n }\r\n errorHandlingBaseModel.handleNoBrowserSupport(braintreeVenmoConfig);\r\n });\r\n });\r\n\r\n // To prevent repeatable Venmo button initialization\r\n window.venmoCheckoutButtonInited = true;\r\n } catch (error) {\r\n errorHandlingBaseModel.showErrorByMessage(error);\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\nvar loaderInstance = require('../../loaderHelper');\r\nvar venmoButton = require('./venmoButton');\r\nvar venmoList = require('./venmoList');\r\nvar venmoHelper = require('../helpers/venmoHelper');\r\nvar venmoSessionAccount = require('./venmoSessionAccount');\r\n\r\nvar $braintreeVenmoNonce = document.querySelector('#braintreeVenmoNonce');\r\nvar $braintreeVenmoUserId = document.querySelector('#braintreeVenmoUserId');\r\nvar $submitShippingBtn = document.querySelector('.button, .submit-shipping');\r\nvar $venmoContent = document.querySelector('.js_braintree_venmoContent');\r\nvar $venmoBillingInput = document.querySelector('#braintreeVenmoBilling');\r\nvar $continueButton = document.querySelector('button.submit-payment');\r\nvar $venmoButton = document.querySelector('.js_braintree_venmo_button');\r\nvar $venmoAccountContainer = document.querySelector('.js_braintree_used_venmo_account');\r\nvar $sessionVenmoAccount = document.querySelector('#sessionVenmoAccount');\r\nvar $newVenmoAccount = document.querySelector('#newVenmoAccount');\r\nvar hashChange;\r\n\r\n/**\r\n * Process Venmo on the Billing/Checkout Page\r\n * @param {Object} data tokenized Venmo payload data\r\n */\r\nfunction processCheckoutFlow(data) {\r\n var $loaderContainer = venmoHelper.createLoaderContainter(document.querySelector('.page'));\r\n loaderInstance($loaderContainer).show();\r\n\r\n $braintreeVenmoNonce.value = data.nonce;\r\n $braintreeVenmoUserId.value = data.details.username;\r\n // In case when stage is correct we proceed with usual flow\r\n if (window.history.state !== 'shipping') {\r\n $continueButton.click();\r\n document.querySelector('.venmo-braintree-loader').remove();\r\n\r\n return;\r\n }\r\n // In case when Venmo has returned from Venmo app to NOT correct stage (for example, to shipping stage)\r\n // we redirect user to correct stage and set required data\r\n venmoHelper.updateBillingAddressFormValues(JSON.parse($venmoBillingInput.value));\r\n // Move to stage payment\r\n $submitShippingBtn.click();\r\n $venmoButton.setAttribute('data-is-valid-stage', true);\r\n document.querySelector('.venmo-braintree-loader').remove();\r\n}\r\n\r\n/**\r\n * Inits Venmo checkout components\r\n * @param {Object} btVenmoModel Braintree Venmo model\r\n */\r\nfunction init(btVenmoModel) {\r\n // MutationObserver is triggered on each URL change to avoid conflict between URL passed to Venmo application\r\n // and URL with already changed stage on storefront (checkout stage)\r\n // case when user is redirected from Venmo application\r\n hashChange = new MutationObserver(function (mutations) {\r\n var mutation = mutations.find(function (element) {\r\n return element.attributeName === 'data-checkout-stage' && element.target.dataset.checkoutStage === 'payment';\r\n });\r\n\r\n if (!mutation) {\r\n return false;\r\n }\r\n\r\n if ($braintreeVenmoNonce.value && JSON.parse($venmoButton.getAttribute('data-is-valid-stage'))) {\r\n $venmoButton.setAttribute('data-is-valid-stage', false);\r\n $continueButton.click();\r\n\r\n return true;\r\n }\r\n // Case when user has proceeded with Venmo session account and clicked on \"edit\" button\r\n if ($venmoContent.classList.contains('active') && mutation.oldValue === 'placeOrder') {\r\n // Show dropdown with used Venmo session account\r\n venmoSessionAccount.showVenmoAccount();\r\n\r\n if ($braintreeVenmoUserId && $braintreeVenmoUserId.value !== 'Venmo') {\r\n $venmoAccountContainer.classList.remove('used-venmo-account-hide');\r\n $venmoAccountContainer.classList.add('used-venmo-account');\r\n $sessionVenmoAccount.classList.remove('used-venmo-account-hide');\r\n $sessionVenmoAccount.classList.add('used-venmo-account');\r\n $sessionVenmoAccount.textContent = $braintreeVenmoUserId.value;\r\n $sessionVenmoAccount.selected = true;\r\n $newVenmoAccount.selected = false;\r\n }\r\n\r\n // Set attribute to show \"place order\" button\r\n $venmoContent.setAttribute('data-paypal-is-hide-continue-button', false);\r\n // Hide Venmo button\r\n $venmoButton.setAttribute('data-is-hide-venmo-button', true);\r\n }\r\n });\r\n\r\n hashChange.observe(document.querySelector('#checkout-main'), { attributeOldValue: true });\r\n\r\n // Venmo button functionality is initiated once in case if it was not inited yet\r\n // based on existence of window.venmoCheckoutButtonInited (set while Venmo button initiation)\r\n if (!window.venmoCheckoutButtonInited) {\r\n venmoButton.init(btVenmoModel, $venmoButton, true);\r\n venmoList.init();\r\n }\r\n\r\n var sessionPaymentMethodId = JSON.parse($venmoContent.getAttribute('data-braintree-config')).sessionPaymentMethodId;\r\n // if exists Venmo session account - we make Venmo tab active on page reload\r\n if (sessionPaymentMethodId === 'Venmo') {\r\n document.querySelector('.venmo-tab').click();\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n init,\r\n processCheckoutFlow\r\n};\r\n","'use strict';\r\n\r\nvar venmoHelper = require('../helpers/venmoHelper');\r\n\r\nvar $btVenmoAccountsList = document.querySelector('#braintreeVenmoAccountsList');\r\nvar $venmoButton = document.querySelector('.js_braintree_venmo_button');\r\n\r\n/**\r\n * Inits Venmo list functionality\r\n */\r\nfunction init() {\r\n // Attribute is set as \"true\" when user has saved Venmo account in wallet\r\n // or when user has proceeded with Venmo session account\r\n var isHideVenmoButtonAttribute = JSON.parse($venmoButton.getAttribute('data-is-hide-venmo-button'));\r\n // Case when we already have session account in disabled dropdown\r\n // and user returns to the Billing Page from Cart or other page (from not billing page/stages)\r\n // only in this case we need to hide Venmo button\r\n // in other cases button and dropdown behavior is handled by venmoContentTabHandler function\r\n // because disabled dropdown with session Venmo account and with saved Venmo and \"new account\" option are separated\r\n if (isHideVenmoButtonAttribute && !$btVenmoAccountsList !== 'newaccount') {\r\n $venmoButton.style.display = 'none';\r\n }\r\n\r\n if ($btVenmoAccountsList) {\r\n $btVenmoAccountsList.addEventListener('change', function () {\r\n venmoHelper.venmoContentTabHandler();\r\n });\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n init\r\n};\r\n","'use strict';\r\n\r\nvar helper = require('../../helper');\r\nvar venmoAccount = require('./venmoAccount');\r\nvar venmoCheckout = require('./venmoCheckout');\r\nvar venmoConstants = require('../constants/venmoConstants');\r\nvar venmoProcessingHelper = require('../helpers/venmoProcessingHelper');\r\nvar ErrorHandlingBaseModel = require('../errorhandler/errorHandlingBaseModel');\r\n\r\n/**\r\n * Process Venmo flow for Account/Billing Page flows\r\n * @param {Object} venmoData Venmo data received from tokenize\r\n */\r\nfunction processVenmo(venmoData) {\r\n var $venmoButton = document.querySelector('.js_braintree_accountVenmoButton') || document.querySelector('.js_braintree_venmo_button');\r\n\r\n if ($venmoButton && JSON.parse($venmoButton.getAttribute('data-braintree-config'))) {\r\n var braintreeVenmoConfig = JSON.parse($venmoButton.getAttribute('data-braintree-config'));\r\n var errorHandlingBaseModel = new ErrorHandlingBaseModel(braintreeVenmoConfig.messages);\r\n errorHandlingBaseModel.hideError();\r\n }\r\n\r\n var venmoFlowName = venmoProcessingHelper.getVenmoFlowName();\r\n\r\n switch (venmoFlowName) {\r\n case venmoConstants.FLOW_NAME_ACCOUNT:\r\n\r\n venmoAccount.storeNewVenmoAccount(venmoData);\r\n break;\r\n\r\n case venmoConstants.FLOW_NAME_BILLING_CHECKOUT:\r\n helper.removeActiveSessionPayment();\r\n venmoCheckout.processCheckoutFlow(venmoData);\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n processVenmo\r\n};\r\n","'use strict';\r\n\r\nvar helper = require('../../helper');\r\nvar venmoHelper = require('../helpers/venmoHelper');\r\n\r\nvar $venmoButton = document.querySelector('.js_braintree_venmo_button');\r\nvar $braintreeVenmoSessionAccount = document.getElementById('braintreeVenmoAccount');\r\nvar $venmoAccountBlock = document.querySelector('.js_braintree_used_venmo_account');\r\nvar $braintreeVenmoUserId = document.querySelector('#braintreeVenmoUserId');\r\n\r\n/**\r\n * Handles showing Venmo session account\r\n */\r\nfunction showVenmoAccount() {\r\n var btVenmoAccountsList = document.querySelector('#braintreeVenmoAccountsList');\r\n\r\n if (!btVenmoAccountsList) {\r\n $venmoAccountBlock.classList.remove('used-venmo-account-hide');\r\n $braintreeVenmoSessionAccount.options[0].text = $braintreeVenmoUserId.value;\r\n }\r\n\r\n $venmoButton.style.display = 'none';\r\n\r\n helper.continueButtonToggle(false);\r\n}\r\n\r\n/**\r\n * Removes method was used and change appearance of Venmo tab\r\n */\r\nfunction removeSessionNonce() {\r\n var defaultOption = helper.getOptionByDataDefault('#braintreeVenmoAccountsList');\r\n var braintreeVenmoNonce = document.querySelector('#braintreeVenmoNonce');\r\n var braintreeVenmoBilling = document.querySelector('#braintreeVenmoBilling');\r\n\r\n if (defaultOption) {\r\n defaultOption.selected = true;\r\n\r\n venmoHelper.venmoContentTabHandler();\r\n } else {\r\n $venmoAccountBlock.classList.remove('used-venmo-account');\r\n $venmoAccountBlock.classList.add('used-venmo-account-hide');\r\n $venmoButton.style.display = 'block';\r\n }\r\n\r\n braintreeVenmoNonce.value = '';\r\n braintreeVenmoBilling.value = '';\r\n}\r\n\r\nmodule.exports = {\r\n showVenmoAccount,\r\n removeSessionNonce\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = {\r\n FLOW_NAME_ACCOUNT: 'account',\r\n FLOW_NAME_BILLING_CHECKOUT: 'billing'\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Error Handling constructor\r\n * @param {Object} errorMessages object with error messages\r\n */\r\nfunction ErrorHandlingBaseModel(errorMessages) {\r\n this.errorMessages = errorMessages;\r\n}\r\n\r\n/**\r\n * ---- General method which should be used for cases when error came from Braintree ----\r\n * Show error notification by error Object from BT\r\n * @param {Object} error error object from Bt\r\n */\r\nErrorHandlingBaseModel.prototype.showErrorByObject = function (error) {\r\n var msg = error.message;\r\n var code = error.code;\r\n var errorMessage = this.errorMessages[code] || msg || this.errorMessages.CLIENT_GATEWAY_NETWORK;\r\n\r\n this.createErrorNotification(errorMessage);\r\n};\r\n\r\n/**\r\n * ---- General method which should be used for cases when error came from Braintree ----\r\n * Show error notification by message\r\n * @param {string} message message to display inside error notification\r\n */\r\nErrorHandlingBaseModel.prototype.showErrorByMessage = function (message) {\r\n this.hideError();\r\n this.createErrorNotification(message);\r\n};\r\n\r\n/**\r\n * ---- Error container which will be used on Account and PDP ----\r\n * ---- For all other cases this method will be overwritten by corresponding one ----\r\n *\r\n * Method responsible for Error Notification generation\r\n * @param {string} message message to display inside error notification\r\n */\r\nErrorHandlingBaseModel.prototype.createErrorNotification = function (message) {\r\n var $errorContainer = $('.error-messaging');\r\n\r\n var errorHtml = '
' +\r\n '' + message + '
';\r\n\r\n $errorContainer.append(errorHtml);\r\n $errorContainer.show();\r\n window.scrollTo(0, 0);\r\n};\r\n\r\n/**\r\n * ---- Method which should hide error container and make it empty. On Account and PDP we use this one ----\r\n * ---- For all other cases this method will be overwritten by corresponding one ----\r\n *\r\n * Hide error notification\r\n */\r\nErrorHandlingBaseModel.prototype.hideError = function () {\r\n var $errorContainer = $('.error-messaging');\r\n var $venmoErrorContainer = $('#venmoAccountErrorContainer');\r\n\r\n if ($venmoErrorContainer) {\r\n $venmoErrorContainer.hide();\r\n $venmoErrorContainer.empty();\r\n }\r\n\r\n $errorContainer.hide();\r\n $errorContainer.empty();\r\n};\r\n\r\n/**\r\n * Method which should shows error on the Account Page and hides Venmo block in case when browser is not supported\r\n * @param {Object} braintreeVenmoConfig Braintree Venmo config\r\n */\r\nErrorHandlingBaseModel.prototype.handleNoBrowserSupportErrorOnAccount = function (braintreeVenmoConfig) {\r\n this.showErrorByMessage(braintreeVenmoConfig.messages.VENMO_BROWSER_NOT_SUPPORTED);\r\n};\r\n\r\n/**\r\n * Method which should hide Venmo tab on the Billing Page - in case when browser is not supported\r\n */\r\nErrorHandlingBaseModel.prototype.hideVenmoTab = function () {\r\n document.querySelector('.js_braintree_venmo_button').parentElement.firstElementChild.style.display = 'none';\r\n document.querySelector('.payment-options[role=tablist] .nav-item[data-method-id=\"Venmo\"]').style.display = 'none'; // Remove the venmo select payment method radiobutton\r\n};\r\n\r\n/**\r\n * Method which handle error flows in case when browser is not supported for Billing/Account Pages\r\n * @param {Object} braintreeVenmoConfig Braintree Venmo config\r\n */\r\nErrorHandlingBaseModel.prototype.handleNoBrowserSupport = function (braintreeVenmoConfig) {\r\n var $venmoAccountWrapper = document.querySelector('.js_braintree_accountVenmoButton_wrapper');\r\n\r\n if ($venmoAccountWrapper) {\r\n this.handleNoBrowserSupportErrorOnAccount(braintreeVenmoConfig);\r\n } else {\r\n this.hideVenmoTab();\r\n }\r\n};\r\n\r\n/**\r\n * Method which show checkout error message on top of the page\r\n * @param {string} message Error message\r\n */\r\nErrorHandlingBaseModel.prototype.showCheckoutErrorMessage = function (message) {\r\n document.querySelector('.error-message-text').textContent = '';\r\n document.querySelector('.error-message').style.display = 'block';\r\n document.querySelector('.error-message-text').append(message);\r\n\r\n window.scrollTo(0, 0);\r\n};\r\n\r\nmodule.exports = ErrorHandlingBaseModel;\r\n","'use strict';\r\n\r\nvar helper = require('../../helper');\r\nvar ErrorHandlingBaseModel = require('../errorhandler/errorHandlingBaseModel');\r\n\r\nvar $addVenmoAccountBtn = document.querySelector('.add-venmo-account');\r\nvar $venmoAccountWrapper = document.querySelector('.js_braintree_accountVenmoButton_wrapper');\r\n\r\n/**\r\n * Returns Braintree Venmo configs\r\n * @returns {Object} Braintree Venmo configs\r\n */\r\nfunction getBraintreeVenmoButtonConfigs() {\r\n var braintreeVenmoButtonConfigs = null;\r\n var $venmoButton = document.querySelector('.js_braintree_venmo_button') || document.querySelector('.js_braintree_accountVenmoButton');\r\n\r\n try {\r\n braintreeVenmoButtonConfigs = JSON.parse($venmoButton.getAttribute('data-braintree-config'));\r\n } catch (error) {\r\n return braintreeVenmoButtonConfigs;\r\n }\r\n\r\n return braintreeVenmoButtonConfigs;\r\n}\r\n\r\n/**\r\n * Creates loader container on the Billing page\r\n * @param {Element} $target Venmo button target for which loader container is created\r\n * @returns {Element} created loader container element\r\n */\r\nfunction createLoaderContainter($target) {\r\n var $loaderContainter = document.createElement('div');\r\n\r\n $loaderContainter.className = 'venmo-braintree-loader';\r\n\r\n helper.continueButtonToggle(true);\r\n\r\n return $target.parentNode.insertBefore($loaderContainter, $target);\r\n}\r\n\r\n\r\n/**\r\n * Updates the billing address form values within saved billing\r\n * @param {Object} billingAddress billing address\r\n */\r\nfunction updateBillingAddressFormValues(billingAddress) {\r\n var form = $('form[name=dwfrm_billing]');\r\n var inputNames = ['firstName', 'lastName', 'address1', 'address2', 'city', 'postalCode', 'country'];\r\n\r\n if (!form) {\r\n return;\r\n }\r\n\r\n $.each(inputNames, function (index, value) {\r\n $(`input[name$=_${value}]`, form).val(decodeURIComponent(billingAddress[value]));\r\n });\r\n\r\n $('select[name$=_stateCode],input[name$=_stateCode]', form)\r\n .val(billingAddress.stateCode);\r\n}\r\n\r\n/**\r\n * Shows Venmo button on the Account Page and hides \"add new\" button\r\n */\r\nfunction showVenmoAccountBtn() {\r\n $addVenmoAccountBtn.style.display = 'none';\r\n $venmoAccountWrapper.style.display = 'block';\r\n}\r\n\r\n/**\r\n * Hides Venmo button on the Account Page and shows \"add new\" button\r\n */\r\nfunction hideVenmoAccountBtn() {\r\n $addVenmoAccountBtn.style.display = 'block';\r\n $venmoAccountWrapper.style.display = 'none';\r\n}\r\n\r\n/**\r\n * Saves Venmo device (risk) data to hidden input\r\n * @param {string} deviceData Venmo device (risk) data\r\n */\r\nfunction setVenmoDeviceData(deviceData) {\r\n var $braintreeVenmoDeviceData = document.querySelector('#braintreeVenmoDeviceData');\r\n\r\n if ($braintreeVenmoDeviceData) {\r\n $braintreeVenmoDeviceData.value = deviceData;\r\n }\r\n}\r\n\r\n/**\r\n * Checks billing form on the Billing Page\r\n * If billing form is valid, saves/updates billing address to input\r\n * If not valid (possible case: empty email) - add error class to email input\r\n * @returns {boolean} billing form check result value\r\n */\r\nfunction checkBillingForm() {\r\n var $billingForm = document.querySelector('.card-body [id=dwfrm_billing]');\r\n var $venmoBillingInput = document.querySelector('#braintreeVenmoBilling');\r\n\r\n if ($billingForm.checkValidity()) {\r\n /**\r\n * Setting current customer Billing address to form\r\n * For the case when SFCC redirects customer from payment stage to shipping stage\r\n * after successful Venmo app response\r\n */\r\n $venmoBillingInput.value = JSON.stringify(helper.getBillingAddressFormValues());\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Checks zero amount on the Billing Page\r\n * If amount is zero Venmo pop-up is closed and appropriate error is shown\r\n * If amount is acceptable by Venmo user could proceed through pop-up\r\n * @returns {boolean} zero amount check result value\r\n */\r\nfunction checkZeroAmount() {\r\n var $venmoButton = document.querySelector('.js_braintree_venmo_button');\r\n var braintreeVenmoConfig = JSON.parse($venmoButton.getAttribute('data-braintree-config'));\r\n var errorHandlingBaseModel = new ErrorHandlingBaseModel(braintreeVenmoConfig.messages);\r\n var amount = braintreeVenmoConfig.options.amount;\r\n\r\n if (amount === 0) {\r\n var errorMessage = braintreeVenmoConfig.messages.VENMO_ZERO_AMOUNT_ERROR;\r\n\r\n errorHandlingBaseModel.showCheckoutErrorMessage(errorMessage);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Handles all behavior related to the Venmo content tab\r\n */\r\nfunction venmoContentTabHandler() {\r\n var $btVenmoAccountsList = document.querySelector('#braintreeVenmoAccountsList');\r\n var $saveVenmoAccountCheckboxContainer = document.querySelector('#braintreeSaveVenmoAccountContainer');\r\n var $saveVenmoAccountCheckbox = document.querySelector('#braintreeSaveVenmoAccount');\r\n var $venmoButton = document.querySelector('.js_braintree_venmo_button');\r\n var $venmoContent = document.querySelector('.js_braintree_venmoContent');\r\n var venmoOptionId = $btVenmoAccountsList.value;\r\n\r\n switch (venmoOptionId) {\r\n // Case when option \"new account\" is selected in dropdown\r\n case 'newaccount':\r\n $venmoButton.style.display = 'block';\r\n\r\n helper.continueButtonToggle(true);\r\n $venmoContent.setAttribute('data-paypal-is-hide-continue-button', true);\r\n // Case when registered user and vaulting is enabled\r\n if ($saveVenmoAccountCheckboxContainer) {\r\n $saveVenmoAccountCheckbox.checked = true;\r\n $saveVenmoAccountCheckboxContainer.style.display = 'block';\r\n }\r\n\r\n break;\r\n // Case when saved account is selected in dropdown\r\n default:\r\n $venmoButton.style.display = 'none';\r\n\r\n helper.continueButtonToggle(false);\r\n $venmoContent.setAttribute('data-paypal-is-hide-continue-button', false);\r\n // Case when registered user and vaulting is enabled\r\n if ($saveVenmoAccountCheckboxContainer) {\r\n $saveVenmoAccountCheckbox.checked = false;\r\n $saveVenmoAccountCheckboxContainer.style.display = 'none';\r\n }\r\n }\r\n}\r\n\r\n\r\nmodule.exports = {\r\n getBraintreeVenmoButtonConfigs,\r\n createLoaderContainter,\r\n updateBillingAddressFormValues,\r\n showVenmoAccountBtn,\r\n hideVenmoAccountBtn,\r\n setVenmoDeviceData,\r\n checkBillingForm,\r\n checkZeroAmount,\r\n venmoContentTabHandler\r\n};\r\n","'use strict';\r\n\r\nvar venmoConstants = require('../constants/venmoConstants');\r\n\r\n/**\r\n * Gets Venmo flow name (corresponding page)\r\n * @returns {string} Flow ID (page) Account/Billing\r\n */\r\nfunction getVenmoFlowName() {\r\n var venmoFlowName;\r\n var isVenmoEnabledOnAccountPage = Boolean(document.querySelector('.js_braintree_accountVenmoButton'));\r\n var isVenmoEnabledOnBillingPage = Boolean(document.querySelector('.js_braintree_venmoContent'));\r\n\r\n if (isVenmoEnabledOnAccountPage) {\r\n venmoFlowName = venmoConstants.FLOW_NAME_ACCOUNT;\r\n } else if (isVenmoEnabledOnBillingPage) {\r\n venmoFlowName = venmoConstants.FLOW_NAME_BILLING_CHECKOUT;\r\n }\r\n\r\n return venmoFlowName;\r\n}\r\n\r\nmodule.exports = {\r\n getVenmoFlowName\r\n};\r\n","'use strict';\r\n\r\n// Braintree SDK model builder, we need to init Braintree Venmo model on this level, since we are using it on step of \"venmoAccount.init()\"\r\n// and on step of \"venmoCheckout.init()\".\r\nvar braintreeVenmoModelBuilder = require('./braintreesdk/braintreeVenmoModelBuilder');\r\n\r\n// components\r\nvar venmoAccount = require('./components/venmoAccount');\r\nvar venmoCheckout = require('./components/venmoCheckout');\r\n\r\nvar btVenmoModelResponse;\r\n\r\n/**\r\n * Inits Venmo functionality on the Account Page\r\n */\r\nfunction initAccount() {\r\n venmoAccount.init(btVenmoModelResponse.btVenmoModel);\r\n}\r\n\r\n/**\r\n * Inits Venmo functionality on the Billing Page\r\n */\r\nfunction initBillingCheckout() {\r\n venmoCheckout.init(btVenmoModelResponse.btVenmoModel);\r\n}\r\n\r\n/**\r\n * Inits braintreeVenmoModelBuilder on Venmo level\r\n */\r\nfunction init() {\r\n btVenmoModelResponse = braintreeVenmoModelBuilder.init();\r\n}\r\n\r\nmodule.exports = {\r\n initAccount,\r\n initBillingCheckout,\r\n init\r\n};\r\n","require('./braintree/braintreeSFRA')();\r\n"],"sourceRoot":""}